From 5f28b017f760cf9c00c8f1671bab9edee2e26da6 Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Mon, 7 Dec 2015 17:00:47 +0100 Subject: [PATCH] Compacted libs and made the code Java 7 compliant Former-commit-id: 5ef92c478a977c02158a9829ae78972654f93873 --- lib/java-speech-api-master.jar | Bin 0 -> 195624 bytes lib/java-speech-api-master/.classpath | 6 - lib/java-speech-api-master/.gitignore | 2 - lib/java-speech-api-master/.project | 16 - lib/java-speech-api-master/CHANGELOG.markdown | 37 - lib/java-speech-api-master/CREDITS.markdown | 23 - lib/java-speech-api-master/LICENSE | 674 -- lib/java-speech-api-master/README.markdown | 30 - .../java-speech-api.iml | 13 - .../src/META-INF/MANIFEST.MF | 2 - .../speech/microphone/Microphone.java | 224 - .../speech/microphone/MicrophoneAnalyzer.java | 288 - .../speech/recognizer/FlacEncoder.java | 120 - .../speech/recognizer/GSpeechDuplex.java | 524 -- .../recognizer/GSpeechResponseListener.java | 12 - .../speech/recognizer/GoogleResponse.java | 89 - .../speech/recognizer/Recognizer.java | 466 - .../speech/recognizer/RecognizerChunked.java | 282 - .../speech/synthesiser/Synthesiser.java | 261 - .../speech/synthesiser/SynthesiserV2.java | 303 - .../speech/translator/GoogleTranslate.java | 168 - .../speech/util/ChunkedOutputStream.java | 190 - .../com/darkprograms/speech/util/Complex.java | 120 - .../src/com/darkprograms/speech/util/FFT.java | 133 - .../darkprograms/speech/util/StringUtil.java | 69 - lib/javaFlacEncoder-0.3.1.jar | Bin 185707 -> 0 bytes lib/sphinx4-5prealpha-src/README | 55 - lib/sphinx4-5prealpha-src/RELEASE_NOTES | 193 - .../doc/Sphinx4_Whitepaper_2003.pdf | Bin 318366 -> 0 bytes .../doc/speaker_adaptation.txt | 88 - lib/sphinx4-5prealpha-src/license.terms | 40 - lib/sphinx4-5prealpha-src/pom.xml | 88 - .../sphinx4-core/pom.xml | 34 - .../cmu/sphinx/alignment/LongTextAligner.java | 355 - .../cmu/sphinx/alignment/SimpleTokenizer.java | 36 - .../cmu/sphinx/alignment/TextTokenizer.java | 25 - .../java/edu/cmu/sphinx/alignment/Token.java | 158 - .../sphinx/alignment/USEnglishTokenizer.java | 1084 --- .../alignment/tokenizer/CharTokenizer.java | 405 - .../alignment/tokenizer/DecisionTree.java | 608 -- .../alignment/tokenizer/FeatureSet.java | 145 - .../cmu/sphinx/alignment/tokenizer/Item.java | 447 - .../alignment/tokenizer/ItemContents.java | 74 - .../alignment/tokenizer/NumberExpander.java | 449 - .../alignment/tokenizer/PathExtractor.java | 264 - .../sphinx/alignment/tokenizer/PrefixFSM.java | 29 - .../alignment/tokenizer/PronounceableFSM.java | 172 - .../sphinx/alignment/tokenizer/Relation.java | 145 - .../sphinx/alignment/tokenizer/SuffixFSM.java | 29 - .../sphinx/alignment/tokenizer/Utterance.java | 229 - .../alignment/tokenizer/WordRelation.java | 85 - .../sphinx/api/AbstractSpeechRecognizer.java | 81 - .../edu/cmu/sphinx/api/Configuration.java | 139 - .../main/java/edu/cmu/sphinx/api/Context.java | 222 - .../cmu/sphinx/api/LiveSpeechRecognizer.java | 62 - .../java/edu/cmu/sphinx/api/Microphone.java | 54 - .../edu/cmu/sphinx/api/SpeechAligner.java | 263 - .../java/edu/cmu/sphinx/api/SpeechResult.java | 91 - .../cmu/sphinx/api/SpeechSourceProvider.java | 20 - .../sphinx/api/StreamSpeechRecognizer.java | 66 - .../cmu/sphinx/decoder/AbstractDecoder.java | 154 - .../java/edu/cmu/sphinx/decoder/Decoder.java | 74 - .../edu/cmu/sphinx/decoder/FrameDecoder.java | 104 - .../cmu/sphinx/decoder/ResultListener.java | 30 - .../cmu/sphinx/decoder/ResultProducer.java | 33 - .../adaptation/ClusteredDensityFileData.java | 174 - .../cmu/sphinx/decoder/adaptation/Stats.java | 235 - .../sphinx/decoder/adaptation/Transform.java | 179 - .../cmu/sphinx/decoder/pruner/NullPruner.java | 71 - .../edu/cmu/sphinx/decoder/pruner/Pruner.java | 49 - .../sphinx/decoder/pruner/SimplePruner.java | 80 - .../sphinx/decoder/scorer/AcousticScorer.java | 57 - .../scorer/BackgroundModelNormalizer.java | 67 - .../decoder/scorer/MaxScoreNormalizer.java | 30 - .../decoder/scorer/ScoreNormalizer.java | 27 - .../sphinx/decoder/scorer/ScoreProvider.java | 35 - .../cmu/sphinx/decoder/scorer/Scoreable.java | 68 - .../decoder/scorer/SimpleAcousticScorer.java | 194 - .../scorer/ThreadedAcousticScorer.java | 200 - .../cmu/sphinx/decoder/search/ActiveList.java | 117 - .../decoder/search/ActiveListFactory.java | 79 - .../decoder/search/ActiveListManager.java | 77 - .../search/AlternateHypothesisManager.java | 87 - .../search/PartitionActiveListFactory.java | 270 - .../sphinx/decoder/search/Partitioner.java | 180 - .../sphinx/decoder/search/SearchManager.java | 64 - .../search/SimpleActiveListFactory.java | 222 - .../search/SimpleActiveListManager.java | 244 - .../SimpleBreadthFirstSearchManager.java | 680 -- .../search/SkewPruningSearchManager.java | 0 .../search/SortingActiveListFactory.java | 207 - .../edu/cmu/sphinx/decoder/search/Token.java | 477 - .../search/TokenHeapSearchManager.java | 172 - .../decoder/search/TokenSearchManager.java | 86 - .../decoder/search/WordActiveListFactory.java | 259 - ...ingBreadthFirstLookaheadSearchManager.java | 497 -- .../WordPruningBreadthFirstSearchManager.java | 796 -- .../search/stats/StateHistoryTracker.java | 140 - .../decoder/search/stats/TokenTracker.java | 198 - .../search/stats/TokenTypeTracker.java | 80 - .../decoder/search/stats/WordTracker.java | 155 - .../edu/cmu/sphinx/frontend/AutoCepstrum.java | 274 - .../sphinx/frontend/BaseDataProcessor.java | 61 - .../java/edu/cmu/sphinx/frontend/Data.java | 28 - .../edu/cmu/sphinx/frontend/DataBlocker.java | 113 - .../cmu/sphinx/frontend/DataEndSignal.java | 70 - .../frontend/DataProcessingException.java | 51 - .../cmu/sphinx/frontend/DataProcessor.java | 68 - .../cmu/sphinx/frontend/DataStartSignal.java | 62 - .../edu/cmu/sphinx/frontend/DoubleData.java | 119 - .../edu/cmu/sphinx/frontend/FloatData.java | 119 - .../edu/cmu/sphinx/frontend/FrontEnd.java | 303 - .../sphinx/frontend/GainControlProcessor.java | 77 - .../java/edu/cmu/sphinx/frontend/Signal.java | 68 - .../cmu/sphinx/frontend/SignalListener.java | 26 - .../databranch/DataBufferProcessor.java | 172 - .../frontend/databranch/DataListener.java | 16 - .../frontend/databranch/DataProducer.java | 18 - .../frontend/databranch/FrontEndSplitter.java | 71 - .../cmu/sphinx/frontend/denoise/Denoise.java | 220 - .../AbstractVoiceActivityDetector.java | 27 - .../endpoint/SpeechClassifiedData.java | 117 - .../frontend/endpoint/SpeechClassifier.java | 267 - .../frontend/endpoint/SpeechEndSignal.java | 46 - .../frontend/endpoint/SpeechMarker.java | 206 - .../frontend/endpoint/SpeechStartSignal.java | 46 - .../feature/AbstractFeatureExtractor.java | 243 - .../cmu/sphinx/frontend/feature/BatchAGC.java | 115 - .../cmu/sphinx/frontend/feature/BatchCMN.java | 183 - .../sphinx/frontend/feature/BatchVarNorm.java | 156 - .../feature/ConcatFeatureExtractor.java | 56 - .../feature/DeltasFeatureExtractor.java | 93 - .../frontend/feature/FeatureTransform.java | 112 - .../sphinx/frontend/feature/FrameDropper.java | 155 - .../feature/KaldiDeltasFeatureExtractor.java | 65 - .../cmu/sphinx/frontend/feature/LiveCMN.java | 268 - .../frontend/feature/S3FeatureExtractor.java | 81 - .../cmu/sphinx/frontend/filter/Dither.java | 136 - .../sphinx/frontend/filter/EnergyFilter.java | 72 - .../sphinx/frontend/filter/Preemphasizer.java | 118 - .../frequencywarp/FrequencyWarper.java | 67 - .../frequencywarp/LinearPredictor.java | 205 - .../frontend/frequencywarp/MelFilter.java | 161 - .../frontend/frequencywarp/MelFilter2.java | 79 - .../frequencywarp/MelFrequencyFilterBank.java | 299 - .../MelFrequencyFilterBank2.java | 264 - .../frequencywarp/PLPCepstrumProducer.java | 210 - .../frontend/frequencywarp/PLPFilter.java | 120 - .../frequencywarp/PLPFrequencyFilterBank.java | 249 - .../transform/DiscreteCosineTransform.java | 161 - .../transform/DiscreteCosineTransform2.java | 58 - .../transform/DiscreteFourierTransform.java | 464 - .../KaldiDiscreteCosineTransform.java | 56 - .../cmu/sphinx/frontend/transform/Lifter.java | 108 - .../frontend/util/AudioContinuityTester.java | 46 - .../frontend/util/AudioFileDataSource.java | 352 - .../util/AudioFileProcessListener.java | 30 - .../util/ConcatAudioFileDataSource.java | 227 - .../frontend/util/ConcatFileDataSource.java | 432 - .../sphinx/frontend/util/DataConverter.java | 63 - .../cmu/sphinx/frontend/util/DataDumper.java | 134 - .../cmu/sphinx/frontend/util/DataUtil.java | 508 -- .../sphinx/frontend/util/EnergyPlotter.java | 130 - .../sphinx/frontend/util/FrontEndUtils.java | 36 - .../cmu/sphinx/frontend/util/Microphone.java | 744 -- .../frontend/util/StreamCepstrumSource.java | 209 - .../frontend/util/StreamDataSource.java | 271 - .../frontend/util/StreamHTKCepstrum.java | 227 - .../cmu/sphinx/frontend/util/Utterance.java | 115 - .../edu/cmu/sphinx/frontend/util/VUMeter.java | 187 - .../sphinx/frontend/util/VUMeterMonitor.java | 83 - .../sphinx/frontend/util/VUMeterPanel.java | 130 - .../cmu/sphinx/frontend/util/WavWriter.java | 256 - .../frontend/window/RaisedCosineWindower.java | 485 -- .../src/main/java/edu/cmu/sphinx/fst/Arc.java | 165 - .../main/java/edu/cmu/sphinx/fst/Convert.java | 282 - .../main/java/edu/cmu/sphinx/fst/Export.java | 60 - .../src/main/java/edu/cmu/sphinx/fst/Fst.java | 492 -- .../java/edu/cmu/sphinx/fst/ImmutableFst.java | 266 - .../edu/cmu/sphinx/fst/ImmutableState.java | 148 - .../main/java/edu/cmu/sphinx/fst/Import.java | 65 - .../main/java/edu/cmu/sphinx/fst/State.java | 212 - .../cmu/sphinx/fst/operations/ArcSort.java | 51 - .../cmu/sphinx/fst/operations/Compose.java | 270 - .../cmu/sphinx/fst/operations/Connect.java | 183 - .../sphinx/fst/operations/Determinize.java | 192 - .../sphinx/fst/operations/ExtendFinal.java | 100 - .../sphinx/fst/operations/ILabelCompare.java | 45 - .../sphinx/fst/operations/NShortestPaths.java | 213 - .../sphinx/fst/operations/OLabelCompare.java | 44 - .../cmu/sphinx/fst/operations/Project.java | 54 - .../sphinx/fst/operations/ProjectType.java | 26 - .../cmu/sphinx/fst/operations/Reverse.java | 85 - .../cmu/sphinx/fst/operations/RmEpsilon.java | 198 - .../cmu/sphinx/fst/semiring/LogSemiring.java | 135 - .../fst/semiring/ProbabilitySemiring.java | 120 - .../edu/cmu/sphinx/fst/semiring/Semiring.java | 97 - .../sphinx/fst/semiring/TropicalSemiring.java | 128 - .../sphinx/fst/sequitur/SequiturImport.java | 268 - .../java/edu/cmu/sphinx/fst/utils/Pair.java | 91 - .../java/edu/cmu/sphinx/fst/utils/Utils.java | 103 - .../instrumentation/AccuracyTracker.java | 186 - .../BestPathAccuracyTracker.java | 85 - .../sphinx/instrumentation/ConfigMonitor.java | 127 - .../sphinx/instrumentation/MemoryTracker.java | 148 - .../cmu/sphinx/instrumentation/Monitor.java | 29 - .../instrumentation/RecognizerMonitor.java | 93 - .../instrumentation/RejectionTracker.java | 182 - .../cmu/sphinx/instrumentation/Resetable.java | 22 - .../sphinx/instrumentation/SpeedTracker.java | 291 - .../edu/cmu/sphinx/jsgf/GrXMLGrammar.java | 108 - .../edu/cmu/sphinx/jsgf/GrXMLHandler.java | 110 - .../java/edu/cmu/sphinx/jsgf/JSGFGrammar.java | 869 -- .../cmu/sphinx/jsgf/JSGFGrammarException.java | 16 - .../jsgf/JSGFGrammarParseException.java | 27 - .../edu/cmu/sphinx/jsgf/JSGFRuleGrammar.java | 648 -- .../sphinx/jsgf/JSGFRuleGrammarFactory.java | 24 - .../sphinx/jsgf/JSGFRuleGrammarManager.java | 58 - .../cmu/sphinx/jsgf/parser/JSGFParser.java | 1111 --- .../jsgf/parser/JSGFParserConstants.java | 100 - .../jsgf/parser/JSGFParserTokenManager.java | 1241 --- .../sphinx/jsgf/parser/JavaCharStream.java | 578 -- .../sphinx/jsgf/parser/ParseException.java | 136 - .../edu/cmu/sphinx/jsgf/parser/Token.java | 108 - .../cmu/sphinx/jsgf/parser/TokenMgrError.java | 120 - .../edu/cmu/sphinx/jsgf/rule/JSGFRule.java | 19 - .../jsgf/rule/JSGFRuleAlternatives.java | 109 - .../cmu/sphinx/jsgf/rule/JSGFRuleCount.java | 68 - .../cmu/sphinx/jsgf/rule/JSGFRuleName.java | 152 - .../sphinx/jsgf/rule/JSGFRuleSequence.java | 58 - .../edu/cmu/sphinx/jsgf/rule/JSGFRuleTag.java | 67 - .../cmu/sphinx/jsgf/rule/JSGFRuleToken.java | 57 - .../cmu/sphinx/linguist/HMMSearchState.java | 27 - .../edu/cmu/sphinx/linguist/Linguist.java | 164 - .../sphinx/linguist/LinguistProcessor.java | 72 - .../edu/cmu/sphinx/linguist/SearchGraph.java | 37 - .../edu/cmu/sphinx/linguist/SearchState.java | 80 - .../cmu/sphinx/linguist/SearchStateArc.java | 48 - .../cmu/sphinx/linguist/UnitSearchState.java | 26 - .../cmu/sphinx/linguist/WordSearchState.java | 36 - .../edu/cmu/sphinx/linguist/WordSequence.java | 273 - .../linguist/acoustic/AcousticModel.java | 104 - .../cmu/sphinx/linguist/acoustic/Context.java | 78 - .../edu/cmu/sphinx/linguist/acoustic/HMM.java | 70 - .../cmu/sphinx/linguist/acoustic/HMMPool.java | 399 - .../sphinx/linguist/acoustic/HMMPosition.java | 87 - .../sphinx/linguist/acoustic/HMMState.java | 89 - .../sphinx/linguist/acoustic/HMMStateArc.java | 65 - .../linguist/acoustic/LeftRightContext.java | 109 - .../cmu/sphinx/linguist/acoustic/Unit.java | 226 - .../sphinx/linguist/acoustic/UnitManager.java | 94 - .../acoustic/tiedstate/CompositeSenone.java | 185 - .../acoustic/tiedstate/GaussianMixture.java | 196 - .../acoustic/tiedstate/GaussianWeights.java | 66 - .../acoustic/tiedstate/HMMManager.java | 95 - .../acoustic/tiedstate/HTK/GMMDiag.java | 552 -- .../acoustic/tiedstate/HTK/HMMSet.java | 518 -- .../acoustic/tiedstate/HTK/HMMState.java | 40 - .../linguist/acoustic/tiedstate/HTK/Lab.java | 92 - .../tiedstate/HTK/NamesConversion.java | 347 - .../acoustic/tiedstate/HTK/SingleHMM.java | 109 - .../acoustic/tiedstate/HTKLoader.java | 942 -- .../acoustic/tiedstate/KaldiLoader.java | 294 - .../acoustic/tiedstate/LazyHmmManager.java | 134 - .../linguist/acoustic/tiedstate/Loader.java | 146 - .../acoustic/tiedstate/MixtureComponent.java | 345 - .../linguist/acoustic/tiedstate/Pool.java | 121 - .../linguist/acoustic/tiedstate/Saver.java | 121 - .../tiedstate/ScoreCachingSenone.java | 54 - .../linguist/acoustic/tiedstate/Senone.java | 68 - .../acoustic/tiedstate/SenoneHMM.java | 230 - .../acoustic/tiedstate/SenoneHMMState.java | 208 - .../acoustic/tiedstate/SenoneSequence.java | 110 - .../acoustic/tiedstate/Sphinx3Loader.java | 1300 --- .../acoustic/tiedstate/SphinxAsciiLoader.java | 235 - .../tiedstate/TiedStateAcousticModel.java | 554 -- .../tiedstate/kaldi/ConstantEventMap.java | 31 - .../acoustic/tiedstate/kaldi/DiagGmm.java | 110 - .../acoustic/tiedstate/kaldi/EventMap.java | 18 - .../tiedstate/kaldi/EventMapWithKey.java | 34 - .../tiedstate/kaldi/KaldiGmmPool.java | 27 - .../tiedstate/kaldi/KaldiTextParser.java | 92 - .../tiedstate/kaldi/SplitEventMap.java | 52 - .../tiedstate/kaldi/TableEventMap.java | 29 - .../tiedstate/kaldi/TransitionModel.java | 194 - .../tiedmixture/MixtureComponentSet.java | 269 - .../MixtureComponentSetScores.java | 50 - .../tiedmixture/PrunableMixtureComponent.java | 108 - .../tiedmixture/SetBasedGaussianMixture.java | 87 - .../acoustic/tiedstate/trainer/Buffer.java | 313 - .../tiedstate/trainer/HMMPoolManager.java | 574 -- .../trainer/ModelInitializerLoader.java | 633 -- .../tiedstate/trainer/Sphinx3Saver.java | 836 -- .../tiedstate/trainer/Sphinx4Loader.java | 280 - .../tiedstate/trainer/Sphinx4Saver.java | 157 - .../trainer/TrainerAcousticModel.java | 167 - .../tiedstate/trainer/TrainerScore.java | 334 - .../trivial/TrivialAcousticModel.java | 394 - .../sphinx/linguist/aflat/AFlatLinguist.java | 1508 ---- .../cmu/sphinx/linguist/aflat/PhoneLoop.java | 627 -- .../linguist/allphone/AllphoneLinguist.java | 175 - .../allphone/AllphoneSearchGraph.java | 30 - .../allphone/PhoneHmmSearchState.java | 122 - .../allphone/PhoneNonEmittingSearchState.java | 85 - .../allphone/PhoneWordSearchState.java | 68 - .../linguist/dflat/DynamicFlatLinguist.java | 1486 ---- .../linguist/dflat/OutOfGrammarGraph.java | 626 -- .../linguist/dictionary/Dictionary.java | 132 - .../dictionary/MappingDictionary.java | 113 - .../linguist/dictionary/Pronunciation.java | 169 - .../linguist/dictionary/TextDictionary.java | 487 -- .../cmu/sphinx/linguist/dictionary/Word.java | 133 - .../linguist/flat/AlternativeState.java | 68 - .../cmu/sphinx/linguist/flat/BranchState.java | 43 - .../cmu/sphinx/linguist/flat/CIPhoneLoop.java | 258 - .../linguist/flat/ExtendedUnitState.java | 50 - .../sphinx/linguist/flat/FlatLinguist.java | 1638 ---- .../sphinx/linguist/flat/GrammarPoint.java | 329 - .../sphinx/linguist/flat/GrammarState.java | 70 - .../sphinx/linguist/flat/HMMStateState.java | 105 - .../linguist/flat/NonEmittingHMMState.java | 33 - .../linguist/flat/PronunciationState.java | 97 - .../linguist/flat/SentenceHMMState.java | 645 -- .../linguist/flat/SentenceHMMStateArc.java | 137 - .../flat/SentenceHMMStateVisitor.java | 27 - .../cmu/sphinx/linguist/flat/UnitState.java | 163 - .../cmu/sphinx/linguist/flat/WordState.java | 76 - .../cmu/sphinx/linguist/g2p/G2PConverter.java | 352 - .../edu/cmu/sphinx/linguist/g2p/Path.java | 99 - .../sphinx/linguist/g2p/PathComparator.java | 37 - .../classes/ClassBasedLanguageModel.java | 171 - .../linguist/language/classes/ClassMap.java | 173 - .../classes/ClassPresentingDictionary.java | 103 - .../language/classes/ClassProbability.java | 32 - .../language/grammar/AlignerGrammar.java | 78 - .../grammar/BatchForcedAlignerGrammar.java | 116 - .../linguist/language/grammar/FSTGrammar.java | 443 - .../grammar/ForcedAlignerGrammar.java | 95 - .../linguist/language/grammar/Grammar.java | 547 -- .../linguist/language/grammar/GrammarArc.java | 60 - .../language/grammar/GrammarInterface.java | 23 - .../language/grammar/GrammarNode.java | 439 - .../linguist/language/grammar/LMGrammar.java | 116 - .../language/grammar/LatticeGrammar.java | 94 - .../grammar/SimpleWordListGrammar.java | 127 - .../language/ngram/DynamicTrigramModel.java | 207 - .../ngram/InterpolatedLanguageModel.java | 180 - .../language/ngram/KeywordOptimizerModel.java | 125 - .../language/ngram/LanguageModel.java | 102 - .../language/ngram/NetworkLanguageModel.java | 170 - .../language/ngram/SimpleNGramModel.java | 466 - .../language/ngram/large/BinaryLoader.java | 841 -- .../ngram/large/BinaryStreamLoader.java | 74 - .../KeywordOptimizerLargeNGramModel.java | 64 - .../language/ngram/large/LargeNGramModel.java | 1100 --- .../ngram/large/LargeTrigramModel.java | 94 - .../language/ngram/large/NGramBuffer.java | 333 - .../ngram/large/NGramProbability.java | 94 - .../language/ngram/large/NMaxGramBuffer.java | 107 - .../ngram/large/UnigramProbability.java | 117 - .../cmu/sphinx/linguist/lextree/HMMTree.java | 1250 --- .../linguist/lextree/LexTreeLinguist.java | 1605 ---- .../cmu/sphinx/linguist/util/GDLDumper.java | 313 - .../cmu/sphinx/linguist/util/LRUCache.java | 33 - .../sphinx/linguist/util/LinguistDumper.java | 296 - .../sphinx/linguist/util/LinguistStats.java | 85 - .../sphinx/linguist/util/LinguistTimer.java | 131 - .../edu/cmu/sphinx/recognizer/Recognizer.java | 253 - .../cmu/sphinx/recognizer/StateListener.java | 28 - .../sphinx/result/BoundedPriorityQueue.java | 45 - .../main/java/edu/cmu/sphinx/result/Edge.java | 196 - .../cmu/sphinx/result/FrameStatistics.java | 65 - .../cmu/sphinx/result/GDLLatticeFactory.java | 95 - .../java/edu/cmu/sphinx/result/Lattice.java | 1158 --- .../cmu/sphinx/result/LatticeOptimizer.java | 425 - .../cmu/sphinx/result/LatticeRescorer.java | 94 - .../java/edu/cmu/sphinx/result/Nbest.java | 106 - .../main/java/edu/cmu/sphinx/result/Node.java | 680 -- .../main/java/edu/cmu/sphinx/result/Path.java | 66 - .../java/edu/cmu/sphinx/result/Result.java | 553 -- .../cmu/sphinx/result/TokenGraphDumper.java | 180 - .../edu/cmu/sphinx/result/WordResult.java | 121 - .../edu/cmu/sphinx/speakerid/Segment.java | 69 - .../cmu/sphinx/speakerid/SpeakerCluster.java | 129 - .../speakerid/SpeakerIdentification.java | 324 - .../java/edu/cmu/sphinx/speakerid/Tester.java | 160 - .../edu/cmu/sphinx/tools/aligner/Aligner.java | 120 - .../edu/cmu/sphinx/tools/audio/AudioData.java | 135 - .../tools/audio/AudioDataInputStream.java | 143 - .../cmu/sphinx/tools/audio/AudioPanel.java | 349 - .../cmu/sphinx/tools/audio/AudioPlayer.java | 86 - .../edu/cmu/sphinx/tools/audio/AudioTool.java | 594 -- .../cmu/sphinx/tools/audio/CepstrumPanel.java | 230 - .../cmu/sphinx/tools/audio/Downsampler.java | 61 - .../sphinx/tools/audio/FilenameDialog.java | 138 - .../edu/cmu/sphinx/tools/audio/RawReader.java | 117 - .../cmu/sphinx/tools/audio/RawRecorder.java | 167 - .../edu/cmu/sphinx/tools/audio/RawWriter.java | 65 - .../edu/cmu/sphinx/tools/audio/Sinusoid.java | 38 - .../sphinx/tools/audio/SpectrogramPanel.java | 227 - .../edu/cmu/sphinx/tools/audio/Utils.java | 234 - .../sphinx/tools/bandwidth/BandDetector.java | 150 - .../tools/batch/BatchDecoderRecognizer.java | 114 - .../batch/BatchForcedAlignerRecognizer.java | 117 - .../tools/batch/BatchModeRecognizer.java | 675 -- .../tools/batch/BatchNISTRecognizer.java | 466 - .../cmu/sphinx/tools/batch/SphinxShell.java | 52 - .../cmu/sphinx/tools/endpoint/Segmenter.java | 109 - .../tools/feature/FeatureFileDumper.java | 283 - .../sphinx/tools/live/LiveModeRecognizer.java | 309 - .../cmu/sphinx/trainer/BaumWelchLearner.java | 761 -- .../sphinx/trainer/BuildTranscriptHMM.java | 274 - .../edu/cmu/sphinx/trainer/ControlFile.java | 52 - .../java/edu/cmu/sphinx/trainer/Edge.java | 107 - .../trainer/FlatInitializerLearner.java | 155 - .../java/edu/cmu/sphinx/trainer/Graph.java | 376 - .../java/edu/cmu/sphinx/trainer/Learner.java | 62 - .../java/edu/cmu/sphinx/trainer/Node.java | 249 - .../java/edu/cmu/sphinx/trainer/NodeType.java | 77 - .../cmu/sphinx/trainer/SimpleControlFile.java | 170 - .../sphinx/trainer/SimpleTrainManager.java | 258 - .../cmu/sphinx/trainer/SimpleTranscript.java | 185 - .../cmu/sphinx/trainer/SimpleUtterance.java | 107 - .../java/edu/cmu/sphinx/trainer/Stage.java | 97 - .../edu/cmu/sphinx/trainer/TrainManager.java | 75 - .../java/edu/cmu/sphinx/trainer/Trainer.java | 162 - .../cmu/sphinx/trainer/TrainerDictionary.java | 108 - .../edu/cmu/sphinx/trainer/TrainerLink.java | 43 - .../edu/cmu/sphinx/trainer/TrainerToken.java | 27 - .../edu/cmu/sphinx/trainer/Transcript.java | 46 - .../cmu/sphinx/trainer/TranscriptGraph.java | 19 - .../sphinx/trainer/TranscriptHMMGraph.java | 29 - .../edu/cmu/sphinx/trainer/Utterance.java | 43 - .../cmu/sphinx/trainer/UtteranceGraph.java | 90 - .../cmu/sphinx/trainer/UtteranceHMMGraph.java | 47 - .../java/edu/cmu/sphinx/util/BatchFile.java | 90 - .../java/edu/cmu/sphinx/util/BatchItem.java | 54 - .../edu/cmu/sphinx/util/BatchManager.java | 53 - .../main/java/edu/cmu/sphinx/util/Cache.java | 62 - .../edu/cmu/sphinx/util/CommandInterface.java | 38 - .../cmu/sphinx/util/CommandInterpreter.java | 774 -- .../java/edu/cmu/sphinx/util/Complex.java | 166 - .../cmu/sphinx/util/CustomThreadFactory.java | 39 - .../sphinx/util/ExtendedStreamTokenizer.java | 355 - .../cmu/sphinx/util/FileReferenceSource.java | 69 - .../cmu/sphinx/util/GapInsertionDetector.java | 460 - .../java/edu/cmu/sphinx/util/LogMath.java | 362 - .../java/edu/cmu/sphinx/util/MatrixUtils.java | 79 - .../java/edu/cmu/sphinx/util/NISTAlign.java | 977 --- .../cmu/sphinx/util/PooledBatchManager.java | 271 - .../main/java/edu/cmu/sphinx/util/Range.java | 28 - .../edu/cmu/sphinx/util/ReferenceSource.java | 21 - .../cmu/sphinx/util/SimpleBatchManager.java | 114 - .../cmu/sphinx/util/SocketCommandClient.java | 299 - .../sphinx/util/SocketCommandInterpreter.java | 163 - .../java/edu/cmu/sphinx/util/SphinxHelp.java | 35 - .../cmu/sphinx/util/SphinxLogFormatter.java | 86 - .../cmu/sphinx/util/StatisticsVariable.java | 200 - .../edu/cmu/sphinx/util/StreamFactory.java | 344 - .../java/edu/cmu/sphinx/util/TimeFrame.java | 48 - .../main/java/edu/cmu/sphinx/util/Timer.java | 251 - .../java/edu/cmu/sphinx/util/TimerPool.java | 104 - .../java/edu/cmu/sphinx/util/Utilities.java | 327 - .../cmu/sphinx/util/machlearn/OVector.java | 62 - .../cmu/sphinx/util/props/ConfCategory.java | 18 - .../cmu/sphinx/util/props/ConfigHandler.java | 147 - .../cmu/sphinx/util/props/Configurable.java | 73 - .../util/props/ConfigurableAdapter.java | 49 - .../props/ConfigurationChangeListener.java | 47 - .../util/props/ConfigurationManager.java | 601 -- .../util/props/ConfigurationManagerUtils.java | 734 -- .../props/InternalConfigurationException.java | 28 - .../sphinx/util/props/PropertyException.java | 78 - .../cmu/sphinx/util/props/PropertySheet.java | 949 -- .../cmu/sphinx/util/props/PropertyType.java | 139 - .../sphinx/util/props/RawPropertyData.java | 160 - .../edu/cmu/sphinx/util/props/S4Boolean.java | 19 - .../cmu/sphinx/util/props/S4Component.java | 24 - .../sphinx/util/props/S4ComponentList.java | 34 - .../edu/cmu/sphinx/util/props/S4Double.java | 30 - .../edu/cmu/sphinx/util/props/S4Integer.java | 28 - .../cmu/sphinx/util/props/S4PropWrapper.java | 23 - .../edu/cmu/sphinx/util/props/S4Property.java | 21 - .../edu/cmu/sphinx/util/props/S4String.java | 31 - .../cmu/sphinx/util/props/S4StringList.java | 13 - .../edu/cmu/sphinx/util/props/SaxLoader.java | 83 - .../sphinx/util/props/tools/GDLDumper.java | 136 - .../sphinx/util/props/tools/HTMLDumper.java | 100 - .../edu/cmu/sphinx/decoder/package.html | 26 - .../cmu/sphinx/decoder/pruner/package.html | 23 - .../cmu/sphinx/decoder/scorer/package.html | 43 - .../cmu/sphinx/decoder/search/package.html | 26 - .../sphinx/frontend/databranch/package.html | 26 - .../doc-files/FrontEndConfiguration.html | 201 - .../frontend/doc-files/FrontEndFAQ.html | 272 - .../sphinx/frontend/doc-files/frontend.jpg | Bin 13604 -> 0 bytes .../doc-files/NonSpeechDataFilter.gif | Bin 21266 -> 0 bytes .../doc-files/NonSpeechDataFilter.sxd | Bin 10652 -> 0 bytes .../doc-files/one-region-filtered.gif | Bin 2798 -> 0 bytes .../endpoint/doc-files/one-region.gif | Bin 2185 -> 0 bytes .../endpoint/doc-files/two-regions-merge.gif | Bin 4009 -> 0 bytes .../doc-files/two-regions-nonmerge.gif | Bin 4706 -> 0 bytes .../endpoint/doc-files/two-regions.gif | Bin 3280 -> 0 bytes .../cmu/sphinx/frontend/endpoint/package.html | 57 - .../frontend/feature/doc-files/deltas.jpg | Bin 82757 -> 0 bytes .../frontend/feature/doc-files/deltas.sxd | Bin 8039 -> 0 bytes .../frontend/feature/doc-files/feature.jpg | Bin 19835 -> 0 bytes .../frontend/feature/doc-files/feature.sxd | Bin 7138 -> 0 bytes .../cmu/sphinx/frontend/feature/package.html | 41 - .../cmu/sphinx/frontend/filter/package.html | 40 - .../frequencywarp/doc-files/melfilter.jpg | Bin 25245 -> 0 bytes .../frequencywarp/doc-files/melfilter.sxd | Bin 6775 -> 0 bytes .../frequencywarp/doc-files/melfilterbank.jpg | Bin 39423 -> 0 bytes .../frequencywarp/doc-files/melfilterbank.sxd | Bin 7339 -> 0 bytes .../frontend/frequencywarp/package.html | 41 - .../edu/cmu/sphinx/frontend/package.html | 59 - .../frontend/transform/doc-files/139o.jpg | Bin 35066 -> 0 bytes .../transform/doc-files/139ospectrum.jpg | Bin 24167 -> 0 bytes .../sphinx/frontend/transform/package.html | 42 - .../edu/cmu/sphinx/frontend/util/package.html | 42 - .../frontend/window/doc-files/framing.jpg | Bin 52312 -> 0 bytes .../frontend/window/doc-files/framing.sxd | Bin 6974 -> 0 bytes .../window/doc-files/hamming-window.gif | Bin 2255 -> 0 bytes .../cmu/sphinx/frontend/window/package.html | 40 - .../edu/cmu/sphinx/fst/openfst/package.html | 23 - .../cmu/sphinx/fst/operations/package.html | 23 - .../javadoc/edu/cmu/sphinx/fst/package.html | 23 - .../edu/cmu/sphinx/fst/semiring/package.html | 23 - .../edu/cmu/sphinx/fst/utils/package.html | 23 - .../doc-files/Instrumentation.html | 726 -- .../instrumentation/doc-files/gdl_config.jpg | Bin 64969 -> 0 bytes .../instrumentation/doc-files/lingustDump.jpg | Bin 36872 -> 0 bytes .../doc-files/silent.config.xml | 268 - .../cmu/sphinx/instrumentation/package.html | 22 - .../sphinx/jsgf/doc-files/commandGrammar.jpg | Bin 47024 -> 0 bytes .../cmu/sphinx/jsgf/doc-files/helloWorld.jpg | Bin 10141 -> 0 bytes .../cmu/sphinx/linguist/acoustic/package.html | 26 - .../linguist/acoustic/tiedstate/package.html | 25 - .../acoustic/tiedstate/trainer/package.html | 22 - .../linguist/acoustic/trivial/package.html | 23 - .../sphinx/linguist/dictionary/package.html | 42 - .../edu/cmu/sphinx/linguist/flat/package.html | 27 - .../edu/cmu/sphinx/linguist/g2p/package.html | 40 - .../grammar/doc-files/fst-end-node.jpg | Bin 9248 -> 0 bytes .../linguist/language/grammar/package.html | 23 - .../language/ngram/large/package.html | 52 - .../linguist/language/ngram/package.html | 22 - .../cmu/sphinx/linguist/language/package.html | 25 - .../cmu/sphinx/linguist/lextree/package.html | 30 - .../edu/cmu/sphinx/linguist/package.html | 48 - .../edu/cmu/sphinx/linguist/util/package.html | 26 - .../edu/cmu/sphinx/recognizer/package.html | 32 - .../edu/cmu/sphinx/result/package.html | 42 - .../audio/doc-files/HowToRunAudioTool.html | 172 - .../tools/audio/doc-files/audiotool.gif | Bin 24863 -> 0 bytes .../edu/cmu/sphinx/tools/audio/package.html | 43 - .../edu/cmu/sphinx/tools/batch/package.html | 25 - .../edu/cmu/sphinx/tools/feature/package.html | 56 - .../edu/cmu/sphinx/tools/live/package.html | 25 - .../edu/cmu/sphinx/trainer/package.html | 43 - .../cmu/sphinx/util/machlearn/package.html | 24 - .../javadoc/edu/cmu/sphinx/util/package.html | 25 - .../doc-files/ConfigurationManagement.html | 577 -- .../edu/cmu/sphinx/util/props/package.html | 41 - .../sphinx4-core/src/main/javadoc/index.html | 135 - .../src/main/javadoc/overview.html | 97 - .../edu/cmu/sphinx/alignment/nums_cart.txt | 109 - .../edu/cmu/sphinx/alignment/prefix_fsm.txt | 16 - .../edu/cmu/sphinx/alignment/suffix_fsm.txt | 16 - .../edu/cmu/sphinx/api/default.config.xml | 335 - .../edu/cmu/sphinx/jsgf/parser/jsgf.jj | 758 -- .../language/ngram/alphabet.arpaformat | 6867 --------------- .../cmu/sphinx/speakerid/frontend.config.xml | 85 - .../sphinx/tools/audio/spectrogram.config.xml | 88 - .../sphinx/tools/endpoint/frontend.config.xml | 31 - .../sphinx/tools/feature/frontend.config.xml | 82 - .../sphinx/alignment/SpeechAlignerTest.java | 44 - .../alignment/TextAlignerLargeTest.java | 44 - .../alignment/TextAlignerSmallTest.java | 72 - .../alignment/UsEnglishWordExpanderTest.java | 70 - .../cmu/sphinx/api/LiveRecognizerTest.java | 61 - .../sphinx/decoder/scorer/ScorerTests.java | 122 - .../decoder/search/test/PartitionerTest.java | 129 - .../sphinx/frontend/AudioDataSourcesTest.java | 123 - .../cmu/sphinx/frontend/DataBlockerTest.java | 144 - .../sphinx/frontend/FrontendElementTest.java | 120 - .../sphinx/frontend/RandomDataProcessor.java | 97 - .../sphinx/frontend/RandomSampleRepeater.java | 301 - .../cmu/sphinx/frontend/SpeechMarkerTest.java | 70 - .../java/edu/cmu/sphinx/fst/ArcSortTest.java | 145 - .../cmu/sphinx/fst/ComposeEpsilonTest.java | 51 - .../java/edu/cmu/sphinx/fst/ComposeTest.java | 51 - .../java/edu/cmu/sphinx/fst/ConnectTest.java | 46 - .../edu/cmu/sphinx/fst/DeterminizeTest.java | 40 - .../java/edu/cmu/sphinx/fst/ImportTest.java | 43 - .../cmu/sphinx/fst/NShortestPathsTest.java | 40 - .../java/edu/cmu/sphinx/fst/ProjectTest.java | 157 - .../java/edu/cmu/sphinx/fst/ReverseTest.java | 40 - .../edu/cmu/sphinx/fst/RmEpsilonTest.java | 47 - .../cmu/sphinx/linguist/WordSequenceTest.java | 85 - .../tiedstate/test/MixtureComponentTest.java | 91 - .../linguist/dictionary/DictionaryTest.java | 80 - .../BatchForcedAlignerGrammarTest.java | 53 - .../language/grammar/FSTGrammarTest.java | 42 - .../ngram/DynamicTrigramModelTest.java | 102 - .../language/ngram/large/LargeNgramTest.java | 72 - .../cmu/sphinx/result/LatticeCompTest.java | 86 - .../edu/cmu/sphinx/result/LatticeIOTest.java | 94 - .../edu/cmu/sphinx/result/PosteriorTest.java | 70 - .../tools/bandwidth/BandDetectorTest.java | 30 - .../util/props/AnotherDummyFrontEnd.java | 5 - .../util/props/AnotherDummyProcessor.java | 10 - .../edu/cmu/sphinx/util/props/CMUTests.java | 50 - .../sphinx/util/props/ComponentListTests.java | 31 - .../util/props/ComponentPropertyTest.java | 41 - .../util/props/ConfigurationManagerTest.java | 140 - .../edu/cmu/sphinx/util/props/DummyComp.java | 160 - .../cmu/sphinx/util/props/DummyFrontEnd.java | 49 - .../util/props/DummyFrontEndProcessor.java | 12 - .../cmu/sphinx/util/props/DummyProcessor.java | 21 - .../sphinx/util/props/TestConfigurable.java | 110 - .../sphinx/alignment/transcription-small.txt | 7 - .../edu/cmu/sphinx/frontend/after-cmn.dump | 322 - .../edu/cmu/sphinx/frontend/after-dct.dump | 321 - .../cmu/sphinx/frontend/after-feature.dump | 325 - .../edu/cmu/sphinx/frontend/after-fft.dump | 321 - .../edu/cmu/sphinx/frontend/after-mel.dump | 321 - .../edu/cmu/sphinx/frontend/after-preemp.dump | 323 - .../frontend/after-window.dump.REMOVED.git-id | 1 - .../edu/cmu/sphinx/frontend/frontend.xml | 136 - .../edu/cmu/sphinx/frontend/test-feat.wav | Bin 167564 -> 0 bytes .../edu/cmu/sphinx/frontend/test.aiff | Bin 86448 -> 0 bytes .../resources/edu/cmu/sphinx/frontend/test.au | Bin 86401 -> 0 bytes .../edu/cmu/sphinx/frontend/test.ogg | Bin 11997 -> 0 bytes .../edu/cmu/sphinx/frontend/test.wav | Bin 86404 -> 0 bytes .../edu/cmu/sphinx/frontend/test8k.wav | Bin 15712 -> 0 bytes .../cmu/sphinx/fst/algorithms/compose/A.fst | Bin 210 -> 0 bytes .../sphinx/fst/algorithms/compose/A.fst.txt | 10 - .../fst/algorithms/compose/A.input.syms | 5 - .../fst/algorithms/compose/A.output.syms | 5 - .../cmu/sphinx/fst/algorithms/compose/B.fst | Bin 194 -> 0 bytes .../sphinx/fst/algorithms/compose/B.fst.txt | 9 - .../fst/algorithms/compose/B.input.syms | 5 - .../fst/algorithms/compose/B.output.syms | 5 - .../fst/algorithms/compose/fstcompose.fst | Bin 250 -> 0 bytes .../fst/algorithms/compose/fstcompose.fst.ser | Bin 404 -> 0 bytes .../fst/algorithms/compose/fstcompose.fst.txt | 15 - .../algorithms/compose/fstcompose.input.syms | 7 - .../algorithms/compose/fstcompose.output.syms | 7 - .../algorithms/compose/fstcompose.states.syms | 7 - .../fst/algorithms/composeeps/A.fst.txt | 9 - .../fst/algorithms/composeeps/B.fst.txt | 7 - .../fst/algorithms/composeeps/fstcomposeeps | Bin 389 -> 0 bytes .../composeeps/fstcomposeeps.fst.txt | 15 - .../composeeps/fstcomposeeps.input.syms | 5 - .../composeeps/fstcomposeeps.output.syms | 4 - .../composeeps/fstcomposeeps.states.syms | 8 - .../cmu/sphinx/fst/algorithms/connect/A.fst | Bin 522 -> 0 bytes .../sphinx/fst/algorithms/connect/A.fst.txt | 32 - .../fst/algorithms/connect/A.input.syms | 4 - .../fst/algorithms/connect/A.output.syms | 4 - .../fst/algorithms/connect/fstconnect.fst.ser | Bin 595 -> 0 bytes .../sphinx/fst/algorithms/determinize/A.fst | Bin 274 -> 0 bytes .../fst/algorithms/determinize/A.fst.txt | 14 - .../fst/algorithms/determinize/A.input.syms | 5 - .../fst/algorithms/determinize/A.output.syms | 5 - .../determinize/fstdeterminize.fst.ser | Bin 332 -> 0 bytes .../cmu/sphinx/fst/algorithms/reverse/A.fst | Bin 226 -> 0 bytes .../sphinx/fst/algorithms/reverse/A.fst.txt | 11 - .../fst/algorithms/reverse/A.input.syms | 6 - .../fst/algorithms/reverse/A.output.syms | 6 - .../fst/algorithms/reverse/A.states.syms | 4 - .../fst/algorithms/reverse/fstreverse.fst | Bin 270 -> 0 bytes .../fst/algorithms/reverse/fstreverse.fst.ser | Bin 400 -> 0 bytes .../sphinx/fst/algorithms/rmepsilon/A.fst.txt | 15 - .../algorithms/rmepsilon/fstrmepsilon.fst.ser | Bin 304 -> 0 bytes .../sphinx/fst/algorithms/shortestpath/A.fst | Bin 194 -> 0 bytes .../fst/algorithms/shortestpath/A.fst.txt | 9 - .../fst/algorithms/shortestpath/A.input.syms | 6 - .../fst/algorithms/shortestpath/A.output.syms | 6 - .../fst/algorithms/shortestpath/nsp.fst | Bin 582 -> 0 bytes .../fst/algorithms/shortestpath/nsp.fst.txt | 37 - .../algorithms/shortestpath/nsp.input.syms | 6 - .../algorithms/shortestpath/nsp.output.syms | 6 - .../algorithms/shortestpath/nsp.states.syms | 19 - .../edu/cmu/sphinx/fst/openfst/basic.fst | Bin 286 -> 0 bytes .../edu/cmu/sphinx/fst/openfst/basic.fst.ser | Bin 248 -> 0 bytes .../edu/cmu/sphinx/fst/openfst/basic.fst.txt | 4 - .../cmu/sphinx/fst/openfst/basic.input.syms | 3 - .../cmu/sphinx/fst/openfst/basic.output.syms | 3 - .../edu/cmu/sphinx/jsgf/test/digits.grxml | 21 - .../edu/cmu/sphinx/jsgf/test/input.txt | 186 - .../cmu/sphinx/jsgf/test/jsgftest.config.xml | 27 - .../edu/cmu/sphinx/jsgf/test/polite.gram | 6 - .../edu/cmu/sphinx/jsgf/test/test.gram | 46 - .../cmu/sphinx/linguist/dictionary/bad.dict | 1 - .../BatchForcedAlignerGrammarTest.utts | 4 - .../language/grammar/FSTGrammarTest.dic | 5 - .../language/grammar/FSTGrammarTest.gram | 27 - .../language/ngram/large/100.arpa.dmp | Bin 2061 -> 0 bytes .../linguist/language/ngram/large/100.dict | 7 - .../edu/cmu/sphinx/result/correct.slf | 166 - .../resources/edu/cmu/sphinx/result/green.wav | Bin 70480 -> 0 bytes .../cmu/sphinx/result/hellongram.trigram.lm | 2365 ----- .../bandwidth/10001-90210-01803-8khz.wav | Bin 265900 -> 0 bytes .../tools/bandwidth/10001-90210-01803.wav | Bin 265914 -> 0 bytes .../util/props/ConfigurationManagerTest.sxl | 23 - .../ConfigurationManagerTest.testconfig.sxl | 28 - .../sphinx4-data/pom.xml | 22 - .../cmu/sphinx/models/en-us/en-us_old/README | 34 - .../sphinx/models/en-us/en-us_old/feat.params | 12 - .../en-us/en-us_old/mdef.REMOVED.git-id | 1 - .../cmu/sphinx/models/en-us/en-us_old/means | Bin 838732 -> 0 bytes .../en-us_old/mixture_weights.REMOVED.git-id | 1 - .../sphinx/models/en-us/en-us_old/noisedict | 5 - .../en-us/en-us_old/sendump.REMOVED.git-id | 1 - .../en-us/en-us_old/transition_matrices | Bin 2080 -> 0 bytes .../sphinx/models/en-us/en-us_old/variances | Bin 838732 -> 0 bytes .../sphinx4-samples/pom.xml | 58 - .../java/edu/cmu/sphinx/demo/DemoRunner.java | 49 - .../cmu/sphinx/demo/aligner/AlignerDemo.java | 108 - .../sphinx/demo/allphone/AllphoneDemo.java | 68 - .../cmu/sphinx/demo/dialog/DialogDemo.java | 186 - .../speakerid/SpeakerIdentificationDemo.java | 123 - .../demo/transcriber/TranscriberDemo.java | 100 - .../sphinx/demo/aligner/10001-90210-01803.wav | Bin 265914 -> 0 bytes .../edu/cmu/sphinx/demo/aligner/README.html | 42 - .../edu/cmu/sphinx/demo/dialog/dialog.gram | 29 - .../edu/cmu/sphinx/demo/dialog/digits.grxml | 21 - .../demo/dialog/weather.lm.REMOVED.git-id | 1 - .../cmu/sphinx/demo/dialog/weather.samples | 80 - .../edu/cmu/sphinx/demo/speakerid/test.wav | Bin 516044 -> 0 bytes .../cmu/sphinx/demo/transcriber/README.html | 104 - .../tests/performance/an4/an4.config.xml | 395 - .../tests/performance/an4/an4_full.batch | 948 -- .../tests/performance/an4/an4_full.bigram.fst | 1606 ---- .../tests/performance/an4/an4_full.bigram.lm | 1680 ---- .../performance/an4/an4_full.flat_unigram.fst | 307 - .../performance/an4/an4_full.flat_unigram.lm | 144 - .../performance/an4/an4_full.trigram.fst | 7633 ----------------- .../tests/performance/an4/an4_full.trigram.lm | 5481 ------------ .../performance/an4/an4_full.unigram.fst | 307 - .../tests/performance/an4/an4_full.unigram.lm | 144 - .../tests/performance/an4/an4_full.wordlist | 105 - .../performance/an4/an4_plus.trigram.fst | 6484 -------------- .../tests/performance/an4/an4_plus.trigram.lm | 4771 ----------- .../tests/performance/an4/an4_plus.wordlist | 214 - .../performance/an4/an4_short_words.list | 2 - .../performance/an4/an4_spelled_out.wordlist | 220 - .../performance/an4/an4_spelling.alphalist | 26 - .../tests/performance/an4/an4_spelling.batch | 288 - .../performance/an4/an4_spelling.bigram.fst | 351 - .../performance/an4/an4_spelling.bigram.lm | 438 - .../an4/an4_spelling.flat_unigram.fst | 88 - .../an4/an4_spelling.flat_unigram.lm | 71 - .../performance/an4/an4_spelling.trigram.fst | 2043 ----- .../performance/an4/an4_spelling.trigram.lm | 1566 ---- .../performance/an4/an4_spelling.unigram.fst | 88 - .../performance/an4/an4_spelling.unigram.lm | 71 - .../performance/an4/an4_spelling.wordlist | 26 - .../an4/an4_spelling_journey.trigram.fst | 6620 -------------- .../an4/an4_spelling_journey.trigram.lm | 6873 --------------- .../tests/performance/an4/an4_words.batch | 467 - .../performance/an4/an4_words.bigram.fst | 578 -- .../an4/an4_words.bigram.fst.prunedloops | 577 -- .../tests/performance/an4/an4_words.bigram.lm | 624 -- .../an4/an4_words.flat_unigram.fst | 217 - .../performance/an4/an4_words.flat_unigram.lm | 114 - .../performance/an4/an4_words.trigram.fst | 2526 ------ .../performance/an4/an4_words.trigram.lm | 1602 ---- .../performance/an4/an4_words.unigram.fst | 217 - .../performance/an4/an4_words.unigram.lm | 114 - .../tests/performance/an4/an4_words.wordlist | 79 - .../performance/an4/an4_words_rejection.batch | 467 - .../an4/an4_words_trigram.config.xml | 380 - .../tests/performance/an4/build.xml | 742 -- .../tests/performance/an4/run_an4_tests | 14 - .../tests/performance/voxforge_en/build.xml | 40 - .../voxforge_en/voxforge.config.xml | 255 - .../voxforge_en/voxforge_en_test.batch | 4682 ---------- .../tests/trainer/build.xml | 40 - .../tests/trainer/phonelist | 38 - .../tests/trainer/trainer.xml | 62 - lib/sphinx4-core.jar.REMOVED.git-id | 1 + .../cmudict-en-us.dict.REMOVED.git-id | 0 .../en-us.lm.dmp.REMOVED.git-id | 0 .../sphinx-models}/en-us/README | 0 .../sphinx-models}/en-us/feat.params | 0 .../sphinx-models}/en-us/feature_transform | Bin .../sphinx-models}/en-us/mdef.REMOVED.git-id | 0 .../sphinx-models}/en-us/means.REMOVED.git-id | 0 .../sphinx-models}/en-us/mixture_weights | Bin .../sphinx-models}/en-us/noisedict | 0 .../sphinx-models}/en-us/transition_matrices | Bin .../en-us/variances.REMOVED.git-id | 0 .../plugin/localsensor/ImpulseTracker.java | 2 +- src/se/koc/hal/stt/Sphinx4STTClient.java | 6 +- 797 files changed, 5 insertions(+), 182054 deletions(-) create mode 100755 lib/java-speech-api-master.jar delete mode 100755 lib/java-speech-api-master/.classpath delete mode 100755 lib/java-speech-api-master/.gitignore delete mode 100755 lib/java-speech-api-master/.project delete mode 100755 lib/java-speech-api-master/CHANGELOG.markdown delete mode 100755 lib/java-speech-api-master/CREDITS.markdown delete mode 100755 lib/java-speech-api-master/LICENSE delete mode 100755 lib/java-speech-api-master/README.markdown delete mode 100755 lib/java-speech-api-master/java-speech-api.iml delete mode 100755 lib/java-speech-api-master/src/META-INF/MANIFEST.MF delete mode 100755 lib/java-speech-api-master/src/com/darkprograms/speech/microphone/Microphone.java delete mode 100755 lib/java-speech-api-master/src/com/darkprograms/speech/microphone/MicrophoneAnalyzer.java delete mode 100755 lib/java-speech-api-master/src/com/darkprograms/speech/recognizer/FlacEncoder.java delete mode 100755 lib/java-speech-api-master/src/com/darkprograms/speech/recognizer/GSpeechDuplex.java delete mode 100755 lib/java-speech-api-master/src/com/darkprograms/speech/recognizer/GSpeechResponseListener.java delete mode 100755 lib/java-speech-api-master/src/com/darkprograms/speech/recognizer/GoogleResponse.java delete mode 100755 lib/java-speech-api-master/src/com/darkprograms/speech/recognizer/Recognizer.java delete mode 100755 lib/java-speech-api-master/src/com/darkprograms/speech/recognizer/RecognizerChunked.java delete mode 100755 lib/java-speech-api-master/src/com/darkprograms/speech/synthesiser/Synthesiser.java delete mode 100755 lib/java-speech-api-master/src/com/darkprograms/speech/synthesiser/SynthesiserV2.java delete mode 100755 lib/java-speech-api-master/src/com/darkprograms/speech/translator/GoogleTranslate.java delete mode 100755 lib/java-speech-api-master/src/com/darkprograms/speech/util/ChunkedOutputStream.java delete mode 100755 lib/java-speech-api-master/src/com/darkprograms/speech/util/Complex.java delete mode 100755 lib/java-speech-api-master/src/com/darkprograms/speech/util/FFT.java delete mode 100755 lib/java-speech-api-master/src/com/darkprograms/speech/util/StringUtil.java delete mode 100755 lib/javaFlacEncoder-0.3.1.jar delete mode 100755 lib/sphinx4-5prealpha-src/README delete mode 100755 lib/sphinx4-5prealpha-src/RELEASE_NOTES delete mode 100755 lib/sphinx4-5prealpha-src/doc/Sphinx4_Whitepaper_2003.pdf delete mode 100755 lib/sphinx4-5prealpha-src/doc/speaker_adaptation.txt delete mode 100755 lib/sphinx4-5prealpha-src/license.terms delete mode 100755 lib/sphinx4-5prealpha-src/pom.xml delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/pom.xml delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/LongTextAligner.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/SimpleTokenizer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/TextTokenizer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/Token.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/USEnglishTokenizer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/CharTokenizer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/DecisionTree.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/FeatureSet.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/Item.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/ItemContents.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/NumberExpander.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/PathExtractor.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/PrefixFSM.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/PronounceableFSM.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/Relation.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/SuffixFSM.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/Utterance.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/WordRelation.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/AbstractSpeechRecognizer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/Configuration.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/Context.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/LiveSpeechRecognizer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/Microphone.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/SpeechAligner.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/SpeechResult.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/SpeechSourceProvider.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/StreamSpeechRecognizer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/AbstractDecoder.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/Decoder.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/FrameDecoder.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/ResultListener.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/ResultProducer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/adaptation/ClusteredDensityFileData.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/adaptation/Stats.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/adaptation/Transform.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/pruner/NullPruner.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/pruner/Pruner.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/pruner/SimplePruner.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/AcousticScorer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/BackgroundModelNormalizer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/MaxScoreNormalizer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/ScoreNormalizer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/ScoreProvider.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/Scoreable.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/SimpleAcousticScorer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/ThreadedAcousticScorer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/ActiveList.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/ActiveListFactory.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/ActiveListManager.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/AlternateHypothesisManager.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/PartitionActiveListFactory.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/Partitioner.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/SearchManager.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/SimpleActiveListFactory.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/SimpleActiveListManager.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/SimpleBreadthFirstSearchManager.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/SkewPruningSearchManager.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/SortingActiveListFactory.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/Token.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/TokenHeapSearchManager.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/TokenSearchManager.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/WordActiveListFactory.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/WordPruningBreadthFirstLookaheadSearchManager.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/WordPruningBreadthFirstSearchManager.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/stats/StateHistoryTracker.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/stats/TokenTracker.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/stats/TokenTypeTracker.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/stats/WordTracker.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/AutoCepstrum.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/BaseDataProcessor.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/Data.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/DataBlocker.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/DataEndSignal.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/DataProcessingException.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/DataProcessor.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/DataStartSignal.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/DoubleData.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/FloatData.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/FrontEnd.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/GainControlProcessor.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/Signal.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/SignalListener.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/databranch/DataBufferProcessor.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/databranch/DataListener.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/databranch/DataProducer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/databranch/FrontEndSplitter.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/denoise/Denoise.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/endpoint/AbstractVoiceActivityDetector.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/endpoint/SpeechClassifiedData.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/endpoint/SpeechClassifier.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/endpoint/SpeechEndSignal.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/endpoint/SpeechMarker.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/endpoint/SpeechStartSignal.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/AbstractFeatureExtractor.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/BatchAGC.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/BatchCMN.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/BatchVarNorm.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/ConcatFeatureExtractor.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/DeltasFeatureExtractor.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/FeatureTransform.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/FrameDropper.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/KaldiDeltasFeatureExtractor.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/LiveCMN.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/S3FeatureExtractor.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/filter/Dither.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/filter/EnergyFilter.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/filter/Preemphasizer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/FrequencyWarper.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/LinearPredictor.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/MelFilter.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/MelFilter2.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/MelFrequencyFilterBank.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/MelFrequencyFilterBank2.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/PLPCepstrumProducer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/PLPFilter.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/PLPFrequencyFilterBank.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/transform/DiscreteCosineTransform.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/transform/DiscreteCosineTransform2.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/transform/DiscreteFourierTransform.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/transform/KaldiDiscreteCosineTransform.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/transform/Lifter.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/AudioContinuityTester.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/AudioFileDataSource.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/AudioFileProcessListener.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/ConcatAudioFileDataSource.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/ConcatFileDataSource.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/DataConverter.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/DataDumper.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/DataUtil.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/EnergyPlotter.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/FrontEndUtils.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/Microphone.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/StreamCepstrumSource.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/StreamDataSource.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/StreamHTKCepstrum.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/Utterance.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/VUMeter.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/VUMeterMonitor.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/VUMeterPanel.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/WavWriter.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/window/RaisedCosineWindower.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/Arc.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/Convert.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/Export.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/Fst.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/ImmutableFst.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/ImmutableState.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/Import.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/State.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/ArcSort.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/Compose.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/Connect.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/Determinize.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/ExtendFinal.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/ILabelCompare.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/NShortestPaths.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/OLabelCompare.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/Project.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/ProjectType.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/Reverse.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/RmEpsilon.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/semiring/LogSemiring.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/semiring/ProbabilitySemiring.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/semiring/Semiring.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/semiring/TropicalSemiring.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/sequitur/SequiturImport.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/utils/Pair.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/utils/Utils.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/AccuracyTracker.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/BestPathAccuracyTracker.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/ConfigMonitor.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/MemoryTracker.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/Monitor.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/RecognizerMonitor.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/RejectionTracker.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/Resetable.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/SpeedTracker.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/GrXMLGrammar.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/GrXMLHandler.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/JSGFGrammar.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/JSGFGrammarException.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/JSGFGrammarParseException.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/JSGFRuleGrammar.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/JSGFRuleGrammarFactory.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/JSGFRuleGrammarManager.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/JSGFParser.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/JSGFParserConstants.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/JSGFParserTokenManager.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/JavaCharStream.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/ParseException.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/Token.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/TokenMgrError.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRule.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRuleAlternatives.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRuleCount.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRuleName.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRuleSequence.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRuleTag.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRuleToken.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/HMMSearchState.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/Linguist.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/LinguistProcessor.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/SearchGraph.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/SearchState.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/SearchStateArc.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/UnitSearchState.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/WordSearchState.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/WordSequence.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/AcousticModel.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/Context.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/HMM.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/HMMPool.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/HMMPosition.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/HMMState.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/HMMStateArc.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/LeftRightContext.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/Unit.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/UnitManager.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/CompositeSenone.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/GaussianMixture.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/GaussianWeights.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HMMManager.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HTK/GMMDiag.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HTK/HMMSet.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HTK/HMMState.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HTK/Lab.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HTK/NamesConversion.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HTK/SingleHMM.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HTKLoader.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/KaldiLoader.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/LazyHmmManager.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/Loader.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/MixtureComponent.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/Pool.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/Saver.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/ScoreCachingSenone.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/Senone.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/SenoneHMM.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/SenoneHMMState.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/SenoneSequence.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/Sphinx3Loader.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/SphinxAsciiLoader.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/TiedStateAcousticModel.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/ConstantEventMap.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/DiagGmm.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/EventMap.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/EventMapWithKey.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/KaldiGmmPool.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/KaldiTextParser.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/SplitEventMap.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/TableEventMap.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/TransitionModel.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/tiedmixture/MixtureComponentSet.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/tiedmixture/MixtureComponentSetScores.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/tiedmixture/PrunableMixtureComponent.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/tiedmixture/SetBasedGaussianMixture.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/Buffer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/HMMPoolManager.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/ModelInitializerLoader.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/Sphinx3Saver.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/Sphinx4Loader.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/Sphinx4Saver.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/TrainerAcousticModel.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/TrainerScore.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/trivial/TrivialAcousticModel.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/aflat/AFlatLinguist.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/aflat/PhoneLoop.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/allphone/AllphoneLinguist.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/allphone/AllphoneSearchGraph.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/allphone/PhoneHmmSearchState.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/allphone/PhoneNonEmittingSearchState.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/allphone/PhoneWordSearchState.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dflat/DynamicFlatLinguist.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dflat/OutOfGrammarGraph.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dictionary/Dictionary.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dictionary/MappingDictionary.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dictionary/Pronunciation.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dictionary/TextDictionary.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dictionary/Word.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/AlternativeState.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/BranchState.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/CIPhoneLoop.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/ExtendedUnitState.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/FlatLinguist.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/GrammarPoint.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/GrammarState.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/HMMStateState.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/NonEmittingHMMState.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/PronunciationState.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/SentenceHMMState.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/SentenceHMMStateArc.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/SentenceHMMStateVisitor.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/UnitState.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/WordState.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/g2p/G2PConverter.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/g2p/Path.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/g2p/PathComparator.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/classes/ClassBasedLanguageModel.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/classes/ClassMap.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/classes/ClassPresentingDictionary.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/classes/ClassProbability.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/AlignerGrammar.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/BatchForcedAlignerGrammar.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/FSTGrammar.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/ForcedAlignerGrammar.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/Grammar.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/GrammarArc.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/GrammarInterface.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/GrammarNode.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/LMGrammar.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/LatticeGrammar.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/SimpleWordListGrammar.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/DynamicTrigramModel.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/InterpolatedLanguageModel.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/KeywordOptimizerModel.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/LanguageModel.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/NetworkLanguageModel.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/SimpleNGramModel.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/BinaryLoader.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/BinaryStreamLoader.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/KeywordOptimizerLargeNGramModel.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/LargeNGramModel.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/LargeTrigramModel.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/NGramBuffer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/NGramProbability.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/NMaxGramBuffer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/UnigramProbability.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/lextree/HMMTree.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/lextree/LexTreeLinguist.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/util/GDLDumper.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/util/LRUCache.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/util/LinguistDumper.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/util/LinguistStats.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/util/LinguistTimer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/recognizer/Recognizer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/recognizer/StateListener.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/BoundedPriorityQueue.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/Edge.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/FrameStatistics.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/GDLLatticeFactory.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/Lattice.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/LatticeOptimizer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/LatticeRescorer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/Nbest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/Node.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/Path.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/Result.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/TokenGraphDumper.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/WordResult.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/speakerid/Segment.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/speakerid/SpeakerCluster.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/speakerid/SpeakerIdentification.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/speakerid/Tester.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/aligner/Aligner.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/AudioData.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/AudioDataInputStream.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/AudioPanel.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/AudioPlayer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/AudioTool.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/CepstrumPanel.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/Downsampler.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/FilenameDialog.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/RawReader.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/RawRecorder.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/RawWriter.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/Sinusoid.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/SpectrogramPanel.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/Utils.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/bandwidth/BandDetector.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/batch/BatchDecoderRecognizer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/batch/BatchForcedAlignerRecognizer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/batch/BatchModeRecognizer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/batch/BatchNISTRecognizer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/batch/SphinxShell.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/endpoint/Segmenter.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/feature/FeatureFileDumper.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/live/LiveModeRecognizer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/BaumWelchLearner.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/BuildTranscriptHMM.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/ControlFile.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Edge.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/FlatInitializerLearner.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Graph.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Learner.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Node.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/NodeType.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/SimpleControlFile.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/SimpleTrainManager.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/SimpleTranscript.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/SimpleUtterance.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Stage.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/TrainManager.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Trainer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/TrainerDictionary.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/TrainerLink.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/TrainerToken.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Transcript.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/TranscriptGraph.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/TranscriptHMMGraph.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Utterance.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/UtteranceGraph.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/UtteranceHMMGraph.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/BatchFile.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/BatchItem.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/BatchManager.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/Cache.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/CommandInterface.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/CommandInterpreter.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/Complex.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/CustomThreadFactory.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/ExtendedStreamTokenizer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/FileReferenceSource.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/GapInsertionDetector.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/LogMath.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/MatrixUtils.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/NISTAlign.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/PooledBatchManager.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/Range.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/ReferenceSource.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/SimpleBatchManager.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/SocketCommandClient.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/SocketCommandInterpreter.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/SphinxHelp.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/SphinxLogFormatter.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/StatisticsVariable.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/StreamFactory.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/TimeFrame.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/Timer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/TimerPool.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/Utilities.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/machlearn/OVector.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/ConfCategory.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/ConfigHandler.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/Configurable.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/ConfigurableAdapter.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/ConfigurationChangeListener.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/ConfigurationManager.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/ConfigurationManagerUtils.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/InternalConfigurationException.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/PropertyException.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/PropertySheet.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/PropertyType.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/RawPropertyData.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4Boolean.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4Component.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4ComponentList.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4Double.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4Integer.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4PropWrapper.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4Property.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4String.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4StringList.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/SaxLoader.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/tools/GDLDumper.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/tools/HTMLDumper.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/decoder/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/decoder/pruner/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/decoder/scorer/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/decoder/search/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/databranch/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/doc-files/FrontEndConfiguration.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/doc-files/FrontEndFAQ.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/doc-files/frontend.jpg delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/endpoint/doc-files/NonSpeechDataFilter.gif delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/endpoint/doc-files/NonSpeechDataFilter.sxd delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/endpoint/doc-files/one-region-filtered.gif delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/endpoint/doc-files/one-region.gif delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/endpoint/doc-files/two-regions-merge.gif delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/endpoint/doc-files/two-regions-nonmerge.gif delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/endpoint/doc-files/two-regions.gif delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/endpoint/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/feature/doc-files/deltas.jpg delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/feature/doc-files/deltas.sxd delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/feature/doc-files/feature.jpg delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/feature/doc-files/feature.sxd delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/feature/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/filter/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/frequencywarp/doc-files/melfilter.jpg delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/frequencywarp/doc-files/melfilter.sxd delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/frequencywarp/doc-files/melfilterbank.jpg delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/frequencywarp/doc-files/melfilterbank.sxd delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/frequencywarp/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/transform/doc-files/139o.jpg delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/transform/doc-files/139ospectrum.jpg delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/transform/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/util/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/window/doc-files/framing.jpg delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/window/doc-files/framing.sxd delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/window/doc-files/hamming-window.gif delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/window/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/fst/openfst/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/fst/operations/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/fst/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/fst/semiring/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/fst/utils/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/instrumentation/doc-files/Instrumentation.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/instrumentation/doc-files/gdl_config.jpg delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/instrumentation/doc-files/lingustDump.jpg delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/instrumentation/doc-files/silent.config.xml delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/instrumentation/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/jsgf/doc-files/commandGrammar.jpg delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/jsgf/doc-files/helloWorld.jpg delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/acoustic/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/acoustic/tiedstate/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/acoustic/trivial/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/dictionary/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/flat/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/g2p/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/language/grammar/doc-files/fst-end-node.jpg delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/language/grammar/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/language/ngram/large/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/language/ngram/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/language/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/lextree/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/util/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/recognizer/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/result/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/tools/audio/doc-files/HowToRunAudioTool.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/tools/audio/doc-files/audiotool.gif delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/tools/audio/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/tools/batch/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/tools/feature/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/tools/live/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/trainer/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/util/machlearn/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/util/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/util/props/doc-files/ConfigurationManagement.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/util/props/package.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/index.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/overview.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/alignment/nums_cart.txt delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/alignment/prefix_fsm.txt delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/alignment/suffix_fsm.txt delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/api/default.config.xml delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/jsgf/parser/jsgf.jj delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/linguist/language/ngram/alphabet.arpaformat delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/speakerid/frontend.config.xml delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/tools/audio/spectrogram.config.xml delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/tools/endpoint/frontend.config.xml delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/tools/feature/frontend.config.xml delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/alignment/SpeechAlignerTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/alignment/TextAlignerLargeTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/alignment/TextAlignerSmallTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/alignment/UsEnglishWordExpanderTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/api/LiveRecognizerTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/decoder/scorer/ScorerTests.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/decoder/search/test/PartitionerTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/frontend/AudioDataSourcesTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/frontend/DataBlockerTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/frontend/FrontendElementTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/frontend/RandomDataProcessor.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/frontend/RandomSampleRepeater.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/frontend/SpeechMarkerTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ArcSortTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ComposeEpsilonTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ComposeTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ConnectTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/DeterminizeTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ImportTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/NShortestPathsTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ProjectTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ReverseTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/RmEpsilonTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/WordSequenceTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/test/MixtureComponentTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/dictionary/DictionaryTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/language/grammar/BatchForcedAlignerGrammarTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/language/grammar/FSTGrammarTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/language/ngram/DynamicTrigramModelTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/language/ngram/large/LargeNgramTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/result/LatticeCompTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/result/LatticeIOTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/result/PosteriorTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/tools/bandwidth/BandDetectorTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/AnotherDummyFrontEnd.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/AnotherDummyProcessor.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/CMUTests.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/ComponentListTests.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/ComponentPropertyTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/ConfigurationManagerTest.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/DummyComp.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/DummyFrontEnd.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/DummyFrontEndProcessor.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/DummyProcessor.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/TestConfigurable.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/alignment/transcription-small.txt delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-cmn.dump delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-dct.dump delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-feature.dump delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-fft.dump delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-mel.dump delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-preemp.dump delete mode 100644 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-window.dump.REMOVED.git-id delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/frontend.xml delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/test-feat.wav delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/test.aiff delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/test.au delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/test.ogg delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/test.wav delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/test8k.wav delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/A.fst delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/A.fst.txt delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/A.input.syms delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/A.output.syms delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/B.fst delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/B.fst.txt delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/B.input.syms delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/B.output.syms delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/fstcompose.fst delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/fstcompose.fst.ser delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/fstcompose.fst.txt delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/fstcompose.input.syms delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/fstcompose.output.syms delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/fstcompose.states.syms delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/composeeps/A.fst.txt delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/composeeps/B.fst.txt delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/composeeps/fstcomposeeps delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/composeeps/fstcomposeeps.fst.txt delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/composeeps/fstcomposeeps.input.syms delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/composeeps/fstcomposeeps.output.syms delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/composeeps/fstcomposeeps.states.syms delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/connect/A.fst delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/connect/A.fst.txt delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/connect/A.input.syms delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/connect/A.output.syms delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/connect/fstconnect.fst.ser delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/determinize/A.fst delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/determinize/A.fst.txt delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/determinize/A.input.syms delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/determinize/A.output.syms delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/determinize/fstdeterminize.fst.ser delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/reverse/A.fst delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/reverse/A.fst.txt delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/reverse/A.input.syms delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/reverse/A.output.syms delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/reverse/A.states.syms delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/reverse/fstreverse.fst delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/reverse/fstreverse.fst.ser delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/rmepsilon/A.fst.txt delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/rmepsilon/fstrmepsilon.fst.ser delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/A.fst delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/A.fst.txt delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/A.input.syms delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/A.output.syms delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/nsp.fst delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/nsp.fst.txt delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/nsp.input.syms delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/nsp.output.syms delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/nsp.states.syms delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/openfst/basic.fst delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/openfst/basic.fst.ser delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/openfst/basic.fst.txt delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/openfst/basic.input.syms delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/openfst/basic.output.syms delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/jsgf/test/digits.grxml delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/jsgf/test/input.txt delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/jsgf/test/jsgftest.config.xml delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/jsgf/test/polite.gram delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/jsgf/test/test.gram delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/linguist/dictionary/bad.dict delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/linguist/language/grammar/BatchForcedAlignerGrammarTest.utts delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/linguist/language/grammar/FSTGrammarTest.dic delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/linguist/language/grammar/FSTGrammarTest.gram delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/linguist/language/ngram/large/100.arpa.dmp delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/linguist/language/ngram/large/100.dict delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/result/correct.slf delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/result/green.wav delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/result/hellongram.trigram.lm delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/tools/bandwidth/10001-90210-01803-8khz.wav delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/tools/bandwidth/10001-90210-01803.wav delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/util/props/ConfigurationManagerTest.sxl delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/util/props/ConfigurationManagerTest.testconfig.sxl delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-data/pom.xml delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/README delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/feat.params delete mode 100644 lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/mdef.REMOVED.git-id delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/means delete mode 100644 lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/mixture_weights.REMOVED.git-id delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/noisedict delete mode 100644 lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/sendump.REMOVED.git-id delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/transition_matrices delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/variances delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-samples/pom.xml delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-samples/src/main/java/edu/cmu/sphinx/demo/DemoRunner.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-samples/src/main/java/edu/cmu/sphinx/demo/aligner/AlignerDemo.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-samples/src/main/java/edu/cmu/sphinx/demo/allphone/AllphoneDemo.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-samples/src/main/java/edu/cmu/sphinx/demo/dialog/DialogDemo.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-samples/src/main/java/edu/cmu/sphinx/demo/speakerid/SpeakerIdentificationDemo.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-samples/src/main/java/edu/cmu/sphinx/demo/transcriber/TranscriberDemo.java delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-samples/src/main/resources/edu/cmu/sphinx/demo/aligner/10001-90210-01803.wav delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-samples/src/main/resources/edu/cmu/sphinx/demo/aligner/README.html delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-samples/src/main/resources/edu/cmu/sphinx/demo/dialog/dialog.gram delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-samples/src/main/resources/edu/cmu/sphinx/demo/dialog/digits.grxml delete mode 100644 lib/sphinx4-5prealpha-src/sphinx4-samples/src/main/resources/edu/cmu/sphinx/demo/dialog/weather.lm.REMOVED.git-id delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-samples/src/main/resources/edu/cmu/sphinx/demo/dialog/weather.samples delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-samples/src/main/resources/edu/cmu/sphinx/demo/speakerid/test.wav delete mode 100755 lib/sphinx4-5prealpha-src/sphinx4-samples/src/main/resources/edu/cmu/sphinx/demo/transcriber/README.html delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4.config.xml delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_full.batch delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_full.bigram.fst delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_full.bigram.lm delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_full.flat_unigram.fst delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_full.flat_unigram.lm delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_full.trigram.fst delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_full.trigram.lm delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_full.unigram.fst delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_full.unigram.lm delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_full.wordlist delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_plus.trigram.fst delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_plus.trigram.lm delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_plus.wordlist delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_short_words.list delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_spelled_out.wordlist delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_spelling.alphalist delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_spelling.batch delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_spelling.bigram.fst delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_spelling.bigram.lm delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_spelling.flat_unigram.fst delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_spelling.flat_unigram.lm delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_spelling.trigram.fst delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_spelling.trigram.lm delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_spelling.unigram.fst delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_spelling.unigram.lm delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_spelling.wordlist delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_spelling_journey.trigram.fst delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_spelling_journey.trigram.lm delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_words.batch delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_words.bigram.fst delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_words.bigram.fst.prunedloops delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_words.bigram.lm delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_words.flat_unigram.fst delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_words.flat_unigram.lm delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_words.trigram.fst delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_words.trigram.lm delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_words.unigram.fst delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_words.unigram.lm delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_words.wordlist delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_words_rejection.batch delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/an4_words_trigram.config.xml delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/build.xml delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/an4/run_an4_tests delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/voxforge_en/build.xml delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/voxforge_en/voxforge.config.xml delete mode 100755 lib/sphinx4-5prealpha-src/tests/performance/voxforge_en/voxforge_en_test.batch delete mode 100755 lib/sphinx4-5prealpha-src/tests/trainer/build.xml delete mode 100755 lib/sphinx4-5prealpha-src/tests/trainer/phonelist delete mode 100755 lib/sphinx4-5prealpha-src/tests/trainer/trainer.xml create mode 100644 lib/sphinx4-core.jar.REMOVED.git-id rename {lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us => resource/sphinx-models}/cmudict-en-us.dict.REMOVED.git-id (100%) rename {lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us => resource/sphinx-models}/en-us.lm.dmp.REMOVED.git-id (100%) rename {lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us => resource/sphinx-models}/en-us/README (100%) rename {lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us => resource/sphinx-models}/en-us/feat.params (100%) rename {lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us => resource/sphinx-models}/en-us/feature_transform (100%) rename {lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us => resource/sphinx-models}/en-us/mdef.REMOVED.git-id (100%) rename {lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us => resource/sphinx-models}/en-us/means.REMOVED.git-id (100%) rename {lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us => resource/sphinx-models}/en-us/mixture_weights (100%) rename {lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us => resource/sphinx-models}/en-us/noisedict (100%) rename {lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us => resource/sphinx-models}/en-us/transition_matrices (100%) rename {lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us => resource/sphinx-models}/en-us/variances.REMOVED.git-id (100%) mode change 100644 => 100755 src/se/koc/hal/plugin/localsensor/ImpulseTracker.java diff --git a/lib/java-speech-api-master.jar b/lib/java-speech-api-master.jar new file mode 100755 index 0000000000000000000000000000000000000000..46a7c5a462ee918b1313b48c77b3534962a0878f GIT binary patch literal 195624 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�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�Dl~NFj{&{lIodlmj@`uRpiQIM64xBRcB6ie4Kd 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î{gr$#KOqZ$m;))BfFvjUv2?YEjr+&4dpe|v$TIg)nWO?dh74TsFunJ^E)6$8v#H5 zxdLz=Fk;1j0St^@Le^HsW+skyz@x^ktuB-0;+Oy3@>}o;uQC8CmH?GMTlsS;MlXMt zilU>wF>p59Na?Z7{~>V~=Z?M*0rAEIj7T)syrEV8n@s+@89vS$K?wq-l7;qW)o6e7 zGx+&MIsZ5|Tqg0QyqU~Xu(pQ!fWDGI`}}9m`XdPXehqnk9njym?Y|p+j`{KH#|88WZ=yut8AhHC36X<`otLGZCPyQP9|Btq0x+}Xpz*yJ?IQY7y zwWofKdolb2x#eJIZSl9g$E9~K@fRJ)rM#)RM!Em-1K_%V0+OrU`Z;>u#;?(J z0E63GTNs_k`9G%DCG4fV37_ovZsGiD2}Ypx`g5{y4ln%uFW|4>lAT|x;rNU50GAnd z341AT!kep(uHFGM%mc8%^;jU;f8K)ECbjC#GdOJ?{B zFmd4emcPrPOFLf5oA!L277GPDQxOydbV1i4G>^Shx_y%Q9?1i;M$tqJxu z7h3TA3<>OF{@)EcYV=iS1E@}5K$84<*~)p6goykMC1d2EX9zUvKjtYHh9$f9yT5M$ zE=_zXZ<^Y1I3-;hATtIGihnMooRb+4|1C2A-3}cek%QF%FBAM!EF7i&0s3O7kgzhg z{_pS_$35~`fY$y%!N9!cacsGt;V&-o{nh;8(z2KGriC4rhot6!$SMUEuCE8Pq2e!a zfUBSXu?(lxUyK5m@+RcWw<$kpz^WqvhTHUptxV-~#hf{)BmLQz$Z^IGw+|fp=c`-(X(fBI;M>zE5zmI(I2=0$<<9 z{Vy@j*MNWHzLUSBa!Kh=b$@lA$t4vcfQl55{x|MAxeAcjc@YSgfx)V984!@b Upa5K!2>g4>0E~P+KotS~Kh_?*UH||9 literal 0 HcmV?d00001 diff --git a/lib/java-speech-api-master/.classpath b/lib/java-speech-api-master/.classpath deleted file mode 100755 index fb501163..00000000 --- a/lib/java-speech-api-master/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/lib/java-speech-api-master/.gitignore b/lib/java-speech-api-master/.gitignore deleted file mode 100755 index a56cb9b5..00000000 --- a/lib/java-speech-api-master/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/bin -.classpath diff --git a/lib/java-speech-api-master/.project b/lib/java-speech-api-master/.project deleted file mode 100755 index ee24677f..00000000 --- a/lib/java-speech-api-master/.project +++ /dev/null @@ -1,16 +0,0 @@ - - - java-speech-api-git - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.jdt.core.javanature - - diff --git a/lib/java-speech-api-master/CHANGELOG.markdown b/lib/java-speech-api-master/CHANGELOG.markdown deleted file mode 100755 index a331ebc8..00000000 --- a/lib/java-speech-api-master/CHANGELOG.markdown +++ /dev/null @@ -1,37 +0,0 @@ -#Java-Speech-API Changelog - -##Changelog -Changelog corresponds with a tagged and signed Git commit. This marks the changes. -A tagged commit may or may not have a corresponding binary version available. -Format: Tag: `` - -* Version 1.15 - * Optimized synthesiser class. Massive speed improvements on long input strings! - * Added experimental Duplex API in preparation for version 1.2 . - -* Version 1.11 (Tag V1.100) - * Fixed major bug in Recognizer - -* Version 1.10 (Tag v1.100) - * Added new Microphone Analyzer class. - * Added volume and frequency detection and frame work for (Voice Activity Detection) - * Microphone API updated to make it more usable. - * API re-branded as J.A.R.V.I.S. (Just A Reliable Vocal Interpreter & Synthesiser) - -* Version 1.06 (Tag v1.016) - * Added support for synthesiser for strings longer than 100 characters (Credits to @Skylion007) - * Added support for synthesiser for multiple languages, accents, and voices. (Credits to @Skylion007) - * Added support for auto-detection of language within synthesiser. (Credits to @Skylion007) - -* Version 1.05 (Tag: v1.015) - * Improved language support for recognizer (Credits to @duncanj) - * Add support for multiple responses for recognizer (Credits to @duncanj) - * Add profanity filter toggle support for recognizer (Credits to @duncanj) - -* Version 1.01 (Tag: v1.01) - * Fixed state functions for Microphones - * Fixed encoding single byte frames - * Support Multiple Languages - -* Version 1.00 (Tag: v1.00) - * Initial Release diff --git a/lib/java-speech-api-master/CREDITS.markdown b/lib/java-speech-api-master/CREDITS.markdown deleted file mode 100755 index 17c20a7c..00000000 --- a/lib/java-speech-api-master/CREDITS.markdown +++ /dev/null @@ -1,23 +0,0 @@ -#J.A.R.V.I.S. Speech API (Java-Speech API) Credits - -##Credits -The following people/organizations have helped provide functionality for the API, - -* JavaFlacEncoder Project - * Provided functionality to convert Wave files to FLAC format - * This allowed for the FLAC audio to be sent to Google to be "recognized" - * Created by Preston Lacey - * Homepage: http://sourceforge.net/projects/javaflacencoder/ -* Google - * Provided functionality for two main API functions - * Recognizer - * Allows for speech audio to be recognized to text - * Synthesiser - * Allows for text to speech translation - * Homepage: http://google.com -* Princeton University - * The implemented FFT algorithm is derived from one on the university's website. - * Homepage: http://www.princeton.edu - -We would like to thank the above so much for your work, this wrapper/API could not have been -created without it. \ No newline at end of file diff --git a/lib/java-speech-api-master/LICENSE b/lib/java-speech-api-master/LICENSE deleted file mode 100755 index ef7e7efc..00000000 --- a/lib/java-speech-api-master/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - 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 . - -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 -. - - 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 -. diff --git a/lib/java-speech-api-master/README.markdown b/lib/java-speech-api-master/README.markdown deleted file mode 100755 index f34fee4a..00000000 --- a/lib/java-speech-api-master/README.markdown +++ /dev/null @@ -1,30 +0,0 @@ -#J.A.R.V.I.S. (Java-Speech-API) - -J.A.R.V.I.S. Java Speech API: Just A Reliable Vocal Interpreter & Synthesizer. -This is a project for the Java Speech API. The program interprets vocal inputs into text and synthesizes voices from text input. -The program supports dozens of languages and even has the ability to auto-detect languages! - -## Description -The J.A.R.V.I.S. Speech API is designed to be simple and efficient, using the speech engines created by Google -to provide functionality for parts of the API. Essentially, it is an API written in Java, -including a recognizer, synthesizer, and a microphone capture utility. The project uses -Google services for the synthesizer and recognizer. While this requires an Internet -connection, it provides a complete, modern, and fully functional speech API in Java. - -##Features -The API currently provides the following functionality, - - * Microphone Capture API (Wrapped around the current Java API for simplicity) - * A speech recognizer using Google's recognizer service - * Converts WAVE files from microphone input to FLAC (using existing API, see CREDITS) - * Retrieves Response from Google, including confidence score and text - * A speech synthesiser using Google's synthesizer service - * Retrieves synthesized text in an InputStream (MP3 data ready to be played) - * Wave to FLAC API (Wrapped around the used API in the project, javaFlacEncoder, see CREDITS) - * A translator using Google Translate (courtesy of Skylion's Google Toolkit) - -##Changelog -See CHANGELOG.markdown for Version History/Changelog - -##Credits -See CREDITS.markdown for Credits diff --git a/lib/java-speech-api-master/java-speech-api.iml b/lib/java-speech-api-master/java-speech-api.iml deleted file mode 100755 index ac3e4584..00000000 --- a/lib/java-speech-api-master/java-speech-api.iml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/lib/java-speech-api-master/src/META-INF/MANIFEST.MF b/lib/java-speech-api-master/src/META-INF/MANIFEST.MF deleted file mode 100755 index 59499bce..00000000 --- a/lib/java-speech-api-master/src/META-INF/MANIFEST.MF +++ /dev/null @@ -1,2 +0,0 @@ -Manifest-Version: 1.0 - diff --git a/lib/java-speech-api-master/src/com/darkprograms/speech/microphone/Microphone.java b/lib/java-speech-api-master/src/com/darkprograms/speech/microphone/Microphone.java deleted file mode 100755 index fbc7adfb..00000000 --- a/lib/java-speech-api-master/src/com/darkprograms/speech/microphone/Microphone.java +++ /dev/null @@ -1,224 +0,0 @@ -package com.darkprograms.speech.microphone; - -import javax.sound.sampled.*; - -import java.io.Closeable; -import java.io.File; - -/*************************************************************************** - * Microphone class that contains methods to capture audio from microphone - * - * @author Luke Kuza, Aaron Gokaslan - ***************************************************************************/ -public class Microphone implements Closeable{ - - /** - * TargetDataLine variable to receive data from microphone - */ - private TargetDataLine targetDataLine; - - /** - * Enum for current Microphone state - */ - public enum CaptureState { - PROCESSING_AUDIO, STARTING_CAPTURE, CLOSED - } - - /** - * Variable for enum - */ - CaptureState state; - - /** - * Variable for the audios saved file type - */ - private AudioFileFormat.Type fileType; - - /** - * Variable that holds the saved audio file - */ - private File audioFile; - - /** - * Gets the current state of Microphone - * - * @return PROCESSING_AUDIO is returned when the Thread is recording Audio and/or saving it to a file
- * STARTING_CAPTURE is returned if the Thread is setting variables
- * CLOSED is returned if the Thread is not doing anything/not capturing audio - */ - public CaptureState getState() { - return state; - } - - /** - * Sets the current state of Microphone - * - * @param state State from enum - */ - private void setState(CaptureState state) { - this.state = state; - } - - public File getAudioFile() { - return audioFile; - } - - public void setAudioFile(File audioFile) { - this.audioFile = audioFile; - } - - public AudioFileFormat.Type getFileType() { - return fileType; - } - - public void setFileType(AudioFileFormat.Type fileType) { - this.fileType = fileType; - } - - public TargetDataLine getTargetDataLine() { - return targetDataLine; - } - - public void setTargetDataLine(TargetDataLine targetDataLine) { - this.targetDataLine = targetDataLine; - } - - - /** - * Constructor - * - * @param fileType File type to save the audio in
- * Example, to save as WAVE use AudioFileFormat.Type.WAVE - */ - public Microphone(AudioFileFormat.Type fileType) { - setState(CaptureState.CLOSED); - setFileType(fileType); - initTargetDataLine(); - } - - /** - * Initializes the target data line. - */ - private void initTargetDataLine(){ - DataLine.Info dataLineInfo = new DataLine.Info(TargetDataLine.class, getAudioFormat()); - try { - setTargetDataLine((TargetDataLine) AudioSystem.getLine(dataLineInfo)); - } catch (LineUnavailableException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - return; - } - - } - - - /** - * Captures audio from the microphone and saves it a file - * - * @param audioFile The File to save the audio to - * @throws LineUnavailableException - * @throws Exception Throws an exception if something went wrong - */ - public void captureAudioToFile(File audioFile) throws LineUnavailableException { - setState(CaptureState.STARTING_CAPTURE); - setAudioFile(audioFile); - - if(getTargetDataLine() == null){ - initTargetDataLine(); - } - - //Get Audio - new Thread(new CaptureThread()).start(); - - - } - - /** - * Captures audio from the microphone and saves it a file - * - * @param audioFile The fully path (String) to a file you want to save the audio in - * @throws LineUnavailableException - * @throws Exception Throws an exception if something went wrong - */ - public void captureAudioToFile(String audioFile) throws LineUnavailableException { - File file = new File(audioFile); - captureAudioToFile(file); - } - - - /** - * The audio format to save in - * - * @return Returns AudioFormat to be used later when capturing audio from microphone - */ - public AudioFormat getAudioFormat() { - float sampleRate = 8000.0F; - //8000,11025,16000,22050,44100 - int sampleSizeInBits = 16; - //8,16 - int channels = 1; - //1,2 - boolean signed = true; - //true,false - boolean bigEndian = false; - //true,false - return new AudioFormat(sampleRate, sampleSizeInBits, channels, signed, bigEndian); - } - - /** - * Opens the microphone, starting the targetDataLine. - * If it's already open, it does nothing. - */ - public void open(){ - if(getTargetDataLine()==null){ - initTargetDataLine(); - } - if(!getTargetDataLine().isOpen() && !getTargetDataLine().isRunning() && !getTargetDataLine().isActive()){ - try { - setState(CaptureState.PROCESSING_AUDIO); - getTargetDataLine().open(getAudioFormat()); - getTargetDataLine().start(); - } catch (LineUnavailableException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - return; - } - } - - } - - /** - * Close the microphone capture, saving all processed audio to the specified file.
- * If already closed, this does nothing - */ - public void close() { - if (getState() == CaptureState.CLOSED) { - } else { - getTargetDataLine().stop(); - getTargetDataLine().close(); - setState(CaptureState.CLOSED); - } - } - - /** - * Thread to capture the audio from the microphone and save it to a file - */ - private class CaptureThread implements Runnable { - - /** - * Run method for thread - */ - public void run() { - try { - AudioFileFormat.Type fileType = getFileType(); - File audioFile = getAudioFile(); - open(); - AudioSystem.write(new AudioInputStream(getTargetDataLine()), fileType, audioFile); - //Will write to File until it's closed. - } catch (Exception ex) { - ex.printStackTrace(); - } - } - } - -} diff --git a/lib/java-speech-api-master/src/com/darkprograms/speech/microphone/MicrophoneAnalyzer.java b/lib/java-speech-api-master/src/com/darkprograms/speech/microphone/MicrophoneAnalyzer.java deleted file mode 100755 index 158546ca..00000000 --- a/lib/java-speech-api-master/src/com/darkprograms/speech/microphone/MicrophoneAnalyzer.java +++ /dev/null @@ -1,288 +0,0 @@ -package com.darkprograms.speech.microphone; - -import javax.sound.sampled.AudioFileFormat; -import com.darkprograms.speech.util.*; - -/******************************************************************************************** - * Microphone Analyzer class, detects pitch and volume while extending the microphone class. - * Implemented as a precursor to a Voice Activity Detection (VAD) algorithm. - * Currently can be used for audio data analysis. - * Dependencies: FFT.java & Complex.java. Both found in the utility package. - * @author Aaron Gokaslan - ********************************************************************************************/ - -public class MicrophoneAnalyzer extends Microphone { - - /** - * Constructor - * @param fileType The file type you want to save in. FLAC recommended. - */ - public MicrophoneAnalyzer(AudioFileFormat.Type fileType){ - super(fileType); - } - - /** - * Gets the volume of the microphone input - * Interval is 100ms so allow 100ms for this method to run in your code or specify smaller interval. - * @return The volume of the microphone input or -1 if data-line is not available - */ - public int getAudioVolume(){ - return getAudioVolume(100); - } - - /** - * Gets the volume of the microphone input - * @param interval: The length of time you would like to calculate the volume over in milliseconds. - * @return The volume of the microphone input or -1 if data-line is not available. - */ - public int getAudioVolume(int interval){ - return calculateAudioVolume(this.getNumOfBytes(interval/1000d)); - } - - /** - * Gets the volume of microphone input - * @param numOfBytes The number of bytes you want for volume interpretation - * @return The volume over the specified number of bytes or -1 if data-line is unavailable. - */ - private int calculateAudioVolume(int numOfBytes){ - byte[] data = getBytes(numOfBytes); - if(data==null) - return -1; - return calculateRMSLevel(data); - } - - /** - * Calculates the volume of AudioData which may be buffered data from a data-line. - * @param audioData The byte[] you want to determine the volume of - * @return the calculated volume of audioData - */ - public static int calculateRMSLevel(byte[] audioData){ - long lSum = 0; - for(int i=0; imax){ - max = tmp;; - index = i; - } - } - return index; - } - - /** - * Converts bytes from a TargetDataLine into a double[] allowing the information to be read. - * NOTE: One byte is lost in the conversion so don't expect the arrays to be the same length! - * @param bufferData The buffer read in from the target data line - * @return The double[] that the buffer has been converted into. - */ - private double[] bytesToDoubleArray(byte[] bufferData){ - final int bytesRecorded = bufferData.length; - final int bytesPerSample = getAudioFormat().getSampleSizeInBits()/8; - final double amplification = 100.0; // choose a number as you like - double[] micBufferData = new double[bytesRecorded - bytesPerSample +1]; - for (int index = 0, floatIndex = 0; index < bytesRecorded - bytesPerSample + 1; index += bytesPerSample, floatIndex++) { - double sample = 0; - for (int b = 0; b < bytesPerSample; b++) { - int v = bufferData[index + b]; - if (b < bytesPerSample - 1 || bytesPerSample == 1) { - v &= 0xFF; - } - sample += v << (b * 8); - } - double sample32 = amplification * (sample / 32768.0); - micBufferData[floatIndex] = sample32; - - } - return micBufferData; - } - -} diff --git a/lib/java-speech-api-master/src/com/darkprograms/speech/recognizer/FlacEncoder.java b/lib/java-speech-api-master/src/com/darkprograms/speech/recognizer/FlacEncoder.java deleted file mode 100755 index c52f502a..00000000 --- a/lib/java-speech-api-master/src/com/darkprograms/speech/recognizer/FlacEncoder.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.darkprograms.speech.recognizer; - -import javaFlacEncoder.FLACEncoder; -import javaFlacEncoder.FLACFileOutputStream; -import javaFlacEncoder.StreamConfiguration; - -import javax.sound.sampled.AudioFormat; -import javax.sound.sampled.AudioInputStream; -import javax.sound.sampled.AudioSystem; -import java.io.File; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; - -/************************************************************************************************************* - * Class that contains methods to encode Wave files to FLAC files - * THIS IS THANKS TO THE javaFlacEncoder Project created here: http://sourceforge.net/projects/javaflacencoder/ - ************************************************************************************************************/ -public class FlacEncoder { - - /** - * Constructor - */ - public FlacEncoder() { - - } - - /** - * Converts a wave file to a FLAC file(in order to POST the data to Google and retrieve a response)
- * Sample Rate is 8000 by default - * - * @param inputFile Input wave file - * @param outputFile Output FLAC file - */ - public void convertWaveToFlac(File inputFile, File outputFile) { - - - StreamConfiguration streamConfiguration = new StreamConfiguration(); - streamConfiguration.setSampleRate(8000); - streamConfiguration.setBitsPerSample(16); - streamConfiguration.setChannelCount(1); - - - try { - AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(inputFile); - AudioFormat format = audioInputStream.getFormat(); - - int frameSize = format.getFrameSize(); - - FLACEncoder flacEncoder = new FLACEncoder(); - FLACFileOutputStream flacOutputStream = new FLACFileOutputStream(outputFile); - - flacEncoder.setStreamConfiguration(streamConfiguration); - flacEncoder.setOutputStream(flacOutputStream); - - flacEncoder.openFLACStream(); - - int frameLength = (int) audioInputStream.getFrameLength(); - if(frameLength <= AudioSystem.NOT_SPECIFIED){ - frameLength = 16384;//Arbitrary file size - } - int[] sampleData = new int[frameLength]; - byte[] samplesIn = new byte[frameSize]; - - int i = 0; - - while (audioInputStream.read(samplesIn, 0, frameSize) != -1) { - if (frameSize != 1) { - ByteBuffer bb = ByteBuffer.wrap(samplesIn); - bb.order(ByteOrder.LITTLE_ENDIAN); - short shortVal = bb.getShort(); - sampleData[i] = shortVal; - } else { - sampleData[i] = samplesIn[0]; - } - - i++; - } - - sampleData = truncateNullData(sampleData, i); - - flacEncoder.addSamples(sampleData, i); - flacEncoder.encodeSamples(i, false); - flacEncoder.encodeSamples(flacEncoder.samplesAvailableToEncode(), true); - - audioInputStream.close(); - flacOutputStream.close(); - - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - - /** - * Converts a wave file to a FLAC file(in order to POST the data to Google and retrieve a response)
- * Sample Rate is 8000 by default - * - * @param inputFile Input wave file - * @param outputFile Output FLAC file - */ - public void convertWaveToFlac(String inputFile, String outputFile) { - convertWaveToFlac(new File(inputFile), new File(outputFile)); - } - - /** - * Used for when the frame length is unknown to shorten the array to prevent huge blank end space - * @param sampleData The int[] array you want to shorten - * @param index The index you want to shorten it to - * @return The shortened array - */ - private int[] truncateNullData(int[] sampleData, int index){ - if(index == sampleData.length) return sampleData; - int[] out = new int[index]; - for(int i = 0; i responseListeners = new ArrayList(); - - /** - * User defined API-KEY - */ - private final String API_KEY; - - /** - * User-defined language - */ - private String language = "auto"; - - /** - * The maximum size the API will tolerate - */ - private final static int MAX_SIZE = 1048576; - - /** - * Per specification, the final chunk of in a ChunkedOutputStream - */ - private final static byte[] FINAL_CHUNK = new byte[] { '0', '\r', '\n', '\r', '\n' }; - - /** - * Constructor - * @param API_KEY The API-Key for Google's Speech API. An API key can be obtained by requesting - * one by following the process shown at this - *
url. - */ - public GSpeechDuplex(String API_KEY){ - this.API_KEY = API_KEY; - } - - /** - * Temporary will be deprecated before release - */ - public String getLanguage(){ - return language; - } - - /** - * Temporary will be deprecated before release - */ - public void setLanguage(String language){ - this.language = language; - } - - /** - * Send a FLAC file with the specified sampleRate to the Duplex API - * @param flacFile The file you wish to upload. - * NOTE: Segment the file if duration is greater than 15 seconds. - * @param sampleRate The sample rate of the file. - * @throws IOException If something has gone wrong with reading the file - */ - public void recognize(File flacFile, int sampleRate) throws IOException{ - recognize(mapFileIn(flacFile), sampleRate); - } - - /** - * Send a byte[] to the URL with a specified sampleRate. - * NOTE: The byte[] should contain no more than 15 seconds of audio. - * Chunking is not fully implemented as of yet. Will not string data together for context yet. - * @param data The byte[] you want to send. - * @param sampleRate The sample rate of aforementioned byte array. - */ - public void recognize(byte[] data, int sampleRate){ - - if(data.length >= MAX_SIZE){//Temporary Chunking. Does not allow for Google to gather context. - System.out.println("Chunking the audio into smaller parts..."); - byte[][] dataArray = chunkAudio(data); - for(byte[]array: dataArray){ - recognize(array, sampleRate); - } - } - - //Generates a unique ID for the response. - final long PAIR = MIN + (long)(Math.random() * ((MAX - MIN) + 1L)); - - //Generates the Downstream URL - final String API_DOWN_URL = GOOGLE_DUPLEX_SPEECH_BASE + "down?maxresults=1&pair=" + PAIR; - - //Generates the Upstream URL - final String API_UP_URL = GOOGLE_DUPLEX_SPEECH_BASE + - "up?lang=" + language + "&lm=dictation&client=chromium&pair=" + PAIR + - "&key=" + API_KEY ; - - //Opens downChannel - this.downChannel(API_DOWN_URL); - //Opens upChannel - this.upChannel(API_UP_URL, chunkAudio(data), sampleRate); - } - - /** - * This method allows you to stream a continuous stream of data to the API. - *

Note: This feature is experimental.

- * @param tl - * @param af - * @throws IOException - * @throws LineUnavailableException - */ - public void recognize(TargetDataLine tl, AudioFormat af) throws IOException, LineUnavailableException{ - //Generates a unique ID for the response. - final long PAIR = MIN + (long)(Math.random() * ((MAX - MIN) + 1L)); - - //Generates the Downstream URL - final String API_DOWN_URL = GOOGLE_DUPLEX_SPEECH_BASE + "down?maxresults=1&pair=" + PAIR; - - //Generates the Upstream URL - final String API_UP_URL = GOOGLE_DUPLEX_SPEECH_BASE + - "up?lang=" + language + "&lm=dictation&client=chromium&pair=" + PAIR + - "&key=" + API_KEY + "&continuous"; //Tells Google to constantly monitor the stream; - - //TODO Add implementation that sends feedback in real time. Protocol buffers will be necessary. - - //Opens downChannel - this.downChannel(API_DOWN_URL); - //Opens upChannel - this.upChannel(API_UP_URL, tl, af); - } - - /** - * This code opens a new Thread that connects to the downstream URL. Due to threading, - * the best way to handle this is through the use of listeners. - * @param The URL you want to connect to. - */ - private void downChannel(String urlStr) { - final String url = urlStr; - new Thread ("Downstream Thread") { - public void run() { - // handler for DOWN channel http response stream - httpsUrlConn - // response handler should manage the connection.... ?? - // assign a TIMEOUT Value that exceeds by a safe factor - // the amount of time that it will take to write the bytes - // to the UPChannel in a fashion that mimics a liveStream - // of the audio at the applicable Bitrate. BR=sampleRate * bits per sample - // Note that the TLS session uses "* SSLv3, TLS alert, Client hello (1): " - // to wake up the listener when there are additional bytes. - // The mechanics of the TLS session should be transparent. Just use - // httpsUrlConn and allow it enough time to do its work. - Scanner inStream = openHttpsConnection(url); - if(inStream == null){ - //ERROR HAS OCCURED - } - while(inStream.hasNextLine()){ - String response = inStream.nextLine(); - System.out.println("Response: "+response); - if(response.length()>17){//Prevents blank responses from Firing - GoogleResponse gr = new GoogleResponse(); - parseResponse(response, gr); - fireResponseEvent(gr); - } - - } - inStream.close(); - System.out.println("Finished write on down stream..."); - } - }.start(); - } - - - /** - * Used to initiate the URL chunking for the upChannel. - * @param urlStr The URL string you want to upload 2 - * @param data The data you want to send to the URL - * @param sampleRate The specified sample rate of the data. - */ - private void upChannel(String urlStr, byte[][] data, int sampleRate) { - final String murl = urlStr; - final byte[][] mdata = data; - final int mSampleRate = sampleRate; - new Thread ("Upstream File Thread") { - public void run() { - openHttpsPostConnection(murl, mdata, mSampleRate); - //Google does not return data via this URL - } - }.start(); - } - - /** - * Streams data from the TargetDataLine to the API. - * @param urlStr The URL to stream to - * @param tl The target data line to stream from. - * @param af The AudioFormat to stream with. - * @throws LineUnavailableException If cannot open or stream the TargetDataLine. - */ - private void upChannel(String urlStr, TargetDataLine tl, AudioFormat af) throws LineUnavailableException{ - final String murl = urlStr; - final TargetDataLine mtl = tl; - final AudioFormat maf = af; - if(!mtl.isOpen()){ - mtl.open(maf); - mtl.start(); - } - new Thread ("Upstream Thread") { - public void run() { - openHttpsPostConnection(murl, mtl, maf); - } - - }.start(); - - } - - /** - * Opens a HTTPS connection to the specified URL string - * @param urlStr The URL you want to visit - * @return The Scanner to access aforementioned data. - */ - private Scanner openHttpsConnection(String urlStr) { - int resCode = -1; - try { - - - URL url = new URL(urlStr); - URLConnection urlConn = url.openConnection(); - if (!(urlConn instanceof HttpsURLConnection)) { - throw new IOException ("URL is not an Https URL"); - } - HttpsURLConnection httpConn = (HttpsURLConnection)urlConn; - httpConn.setAllowUserInteraction(false); - // TIMEOUT is required - httpConn.setInstanceFollowRedirects(true); - httpConn.setRequestMethod("GET"); - - httpConn.connect(); - resCode = httpConn.getResponseCode(); - if (resCode == HttpsURLConnection.HTTP_OK) { - return new Scanner(httpConn.getInputStream()); - } - else{ - System.out.println("Error: " + resCode); - } - } catch (MalformedURLException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - return null; - } - - /** - * Opens a HTTPSPostConnection that posts data from a TargetDataLine input - * @param murl The URL you want to post to. - * @param mtl The TargetDataLine you want to post data from. Note should be open - * @param maf The AudioFormat of the data you want to post - */ - private void openHttpsPostConnection(final String murl, - final TargetDataLine mtl, final AudioFormat maf) { - URL url; - try { - url = new URL(murl); - URLConnection urlConn = url.openConnection(); - if (!(urlConn instanceof HttpsURLConnection)) { - throw new IOException ("URL is not an Https URL"); - } - HttpsURLConnection httpConn = (HttpsURLConnection)urlConn; - httpConn.setAllowUserInteraction(false); - httpConn.setInstanceFollowRedirects(true); - httpConn.setRequestMethod("POST"); - httpConn.setDoOutput(true); - httpConn.setChunkedStreamingMode(0); - httpConn.setRequestProperty("Transfer-Encoding", "chunked"); - httpConn.setRequestProperty("Content-Type", "audio/x-flac; rate=" + (int)maf.getSampleRate()); - // also worked with ("Content-Type", "audio/amr; rate=8000"); - httpConn.connect(); - - // this opens a connection, then sends POST & headers. - OutputStream out = httpConn.getOutputStream(); - //Note : if the audio is more than 15 seconds - // dont write it to UrlConnInputStream all in one block as this sample does. - // Rather, segment the byteArray and on intermittently, sleeping thread - // supply bytes to the urlConn Stream at a rate that approaches - // the bitrate ( =30K per sec. in this instance ). - System.out.println("Starting to write data to output..."); - AudioInputStream ais = new AudioInputStream(mtl); - ChunkedOutputStream os = new ChunkedOutputStream(out); - AudioSystem.write(ais, FLACFileWriter.FLAC, os); - out.write(FINAL_CHUNK); - System.out.println("IO WRITE DONE"); - out.close(); - // do you need the trailer? - // NOW you can look at the status. - int resCode = httpConn.getResponseCode(); - if (resCode / 100 != 2) { - System.out.println("ERROR"); - } - }catch(Exception ex){ - ex.printStackTrace(); - - } - } - - /** - * Opens a chunked HTTPS post connection and returns a Scanner with incoming data from Google Server - * Used for to get UPStream - * Chunked HTTPS ensures unlimited file size. - * @param urlStr The String for the URL - * @param data The data you want to send the server - * @param sampleRate The sample rate of the flac file. - * @return A Scanner to access the server response. (Probably will never be used) - */ - private Scanner openHttpsPostConnection(String urlStr, byte[][] data, int sampleRate){ - byte[][] mextrad = data; - int resCode = -1; - OutputStream out = null; - // int http_status; - try { - URL url = new URL(urlStr); - URLConnection urlConn = url.openConnection(); - if (!(urlConn instanceof HttpsURLConnection)) { - throw new IOException ("URL is not an Https URL"); - } - HttpsURLConnection httpConn = (HttpsURLConnection)urlConn; - httpConn.setAllowUserInteraction(false); - httpConn.setInstanceFollowRedirects(true); - httpConn.setRequestMethod("POST"); - httpConn.setDoOutput(true); - httpConn.setChunkedStreamingMode(0); - httpConn.setRequestProperty("Transfer-Encoding", "chunked"); - httpConn.setRequestProperty("Content-Type", "audio/x-flac; rate=" + sampleRate); - // also worked with ("Content-Type", "audio/amr; rate=8000"); - httpConn.connect(); - try { - // this opens a connection, then sends POST & headers. - out = httpConn.getOutputStream(); - //Note : if the audio is more than 15 seconds - // dont write it to UrlConnInputStream all in one block as this sample does. - // Rather, segment the byteArray and on intermittently, sleeping thread - // supply bytes to the urlConn Stream at a rate that approaches - // the bitrate ( =30K per sec. in this instance ). - System.out.println("Starting to write"); - for(byte[] dataArray: mextrad){ - out.write(dataArray); // one big block supplied instantly to the underlying chunker wont work for duration > 15 s. - try { - Thread.sleep(1000);//Delays the Audio so Google thinks its a mic. - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - out.write(FINAL_CHUNK); - System.out.println("IO WRITE DONE"); - // do you need the trailer? - // NOW you can look at the status. - resCode = httpConn.getResponseCode(); - if (resCode / 100 != 2) { - System.out.println("ERROR"); - } - } catch (IOException e) { - - } - if (resCode == HttpsURLConnection.HTTP_OK) { - return new Scanner(httpConn.getInputStream()); - } - else{ - System.out.println("HELP: " + resCode); - } - } catch (MalformedURLException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - return null; - } - - /** - * Converts the file into a byte[]. Also Android compatible. :) - * @param The File you want to get the byte[] from. - * @return The byte[] - * @throws IOException if something goes wrong in reading the file. - */ - private byte[] mapFileIn(File infile) throws IOException{ - return Files.readAllBytes(infile.toPath()); - } - - /** - * Parses the String into a GoogleResponse object - * @param rawResponse The String you want to parse - * @param gr the GoogleResponse object to save the data into. - */ - private void parseResponse(String rawResponse, GoogleResponse gr){ - if(rawResponse == null || !rawResponse.contains("\"result\"") - || rawResponse.equals("{\"result\":[]}")){ return; } - if(rawResponse.contains("\"confidence\":")){ - String confidence = StringUtil.substringBetween(rawResponse, "\"confidence\":", "}"); - gr.setConfidence(confidence); - } - else{ - gr.setConfidence(String.valueOf(1d)); - } - String array = StringUtil.trimString(rawResponse, "[", "]"); - if(array.contains("[")){ - array = StringUtil.trimString(array, "[", "]"); - } - if(array.contains("\"confidence\":")){//Removes confidence phrase if it exists. - array = array.substring(0, array.lastIndexOf(',')); - } - String[] parts = array.split(","); - gr.setResponse(parseTranscript(parts[0])); - for(int i = 1; i= MAX_SIZE){//If larger than 1MB - int frame = MAX_SIZE/2; - int numOfChunks = (int)(data.length/((double)frame)) + 1; - byte[][] data2D = new byte[numOfChunks][]; - for(int i = 0, j = 0; i otherPossibleResponses = new ArrayList(20); - - /** - * Constructor - */ - public GoogleResponse() { - - } - - - /** - * Gets the response text of what was said in the submitted Audio to Google - * - * @return String representation of what was said - */ - public String getResponse() { - return response; - } - - /** - * Set the response - * - * @param response The response - */ - protected void setResponse(String response) { - this.response = response; - } - - /** - * Gets the confidence score for the specific request - * - * @return The confidence score, ex .922343324323 - */ - public String getConfidence() { - return confidence; - } - - /** - * Set the confidence score for this request - * - * @param confidence The confidence score - */ - protected void setConfidence(String confidence) { - this.confidence = confidence; - } - - /** - * Get other possible responses for this request. - * @return other possible responses - */ - public List getOtherPossibleResponses() { - return otherPossibleResponses; - } - - /** - * Gets all returned responses for this request - * @return All returned responses - */ - public List getAllPossibleResponses() { - List tmp = otherPossibleResponses; - tmp.add(0,response); - return tmp; - } - -} diff --git a/lib/java-speech-api-master/src/com/darkprograms/speech/recognizer/Recognizer.java b/lib/java-speech-api-master/src/com/darkprograms/speech/recognizer/Recognizer.java deleted file mode 100755 index f5d6ab16..00000000 --- a/lib/java-speech-api-master/src/com/darkprograms/speech/recognizer/Recognizer.java +++ /dev/null @@ -1,466 +0,0 @@ -package com.darkprograms.speech.recognizer; - -import java.io.*; -import java.net.URL; -import java.net.URLConnection; -import java.nio.charset.Charset; - -import com.darkprograms.speech.util.StringUtil; - -/*************************************************************** - * Class that submits FLAC audio and retrieves recognized text - * - * @author Luke Kuza, Duncan Jauncey, Aaron Gokaslan - **************************************************************/ -@Deprecated -public class Recognizer { - - @Deprecated - public enum Languages{ - AUTO_DETECT("auto"),//tells Google to auto-detect the language - ARABIC_JORDAN("ar-JO"), - ARABIC_LEBANON("ar-LB"), - ARABIC_QATAR("ar-QA"), - ARABIC_UAE("ar-AE"), - ARABIC_MOROCCO("ar-MA"), - ARABIC_IRAQ("ar-IQ"), - ARABIC_ALGERIA("ar-DZ"), - ARABIC_BAHRAIN("ar-BH"), - ARABIC_LYBIA("ar-LY"), - ARABIC_OMAN("ar-OM"), - ARABIC_SAUDI_ARABIA("ar-SA"), - ARABIC_TUNISIA("ar-TN"), - ARABIC_YEMEN("ar-YE"), - BASQUE("eu"), - CATALAN("ca"), - CZECH("cs"), - DUTCH("nl-NL"), - ENGLISH_AUSTRALIA("en-AU"), - ENGLISH_CANADA("en-CA"), - ENGLISH_INDIA("en-IN"), - ENGLISH_NEW_ZEALAND("en-NZ"), - ENGLISH_SOUTH_AFRICA("en-ZA"), - ENGLISH_UK("en-GB"), - ENGLISH_US("en-US"), - FINNISH("fi"), - FRENCH("fr-FR"), - GALICIAN("gl"), - GERMAN("de-DE"), - HEBREW("he"), - HUNGARIAN("hu"), - ICELANDIC("is"), - ITALIAN("it-IT"), - INDONESIAN("id"), - JAPANESE("ja"), - KOREAN("ko"), - LATIN("la"), - CHINESE_SIMPLIFIED("zh-CN"), - CHINESE_TRANDITIONAL("zh-TW"), - CHINESE_HONGKONG("zh-HK"), - CHINESE_CANTONESE("zh-yue"), - MALAYSIAN("ms-MY"), - NORWEGIAN("no-NO"), - POLISH("pl"), - PIG_LATIN("xx-piglatin"), - PORTUGUESE("pt-PT"), - PORTUGUESE_BRASIL("pt-BR"), - ROMANIAN("ro-RO"), - RUSSIAN("ru"), - SERBIAN("sr-SP"), - SLOVAK("sk"), - SPANISH_ARGENTINA("es-AR"), - SPANISH_BOLIVIA("es-BO"), - SPANISH_CHILE("es-CL"), - SPANISH_COLOMBIA("es-CO"), - SPANISH_COSTA_RICA("es-CR"), - SPANISH_DOMINICAN_REPUBLIC("es-DO"), - SPANISH_ECUADOR("es-EC"), - SPANISH_EL_SALVADOR("es-SV"), - SPANISH_GUATEMALA("es-GT"), - SPANISH_HONDURAS("es-HN"), - SPANISH_MEXICO("es-MX"), - SPANISH_NICARAGUA("es-NI"), - SPANISH_PANAMA("es-PA"), - SPANISH_PARAGUAY("es-PY"), - SPANISH_PERU("es-PE"), - SPANISH_PUERTO_RICO("es-PR"), - SPANISH_SPAIN("es-ES"), - SPANISH_US("es-US"), - SPANISH_URUGUAY("es-UY"), - SPANISH_VENEZUELA("es-VE"), - SWEDISH("sv-SE"), - TURKISH("tr"), - ZULU("zu"); - - //TODO Clean Up JavaDoc for Overloaded Methods using @link - - /** - *Stores the LanguageCode - */ - private final String languageCode; - - /** - *Constructor - */ - private Languages(final String languageCode){ - this.languageCode = languageCode; - } - - public String toString(){ - return languageCode; - } - - } - - - /** - * URL to POST audio data and retrieve results - */ - private static final String GOOGLE_RECOGNIZER_URL = "https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium"; - - private boolean profanityFilter = true; - private String language = null; - - /** - * Constructor - */ - public Recognizer() { - this.setLanguage(Languages.AUTO_DETECT); - } - - /** - * Constructor - * @param Language - */ - @Deprecated - public Recognizer(String language) { - this.language = language; - } - - /** - * Constructor - * @param language The Languages class for the language you want to designate - */ - public Recognizer(Languages language){ - this.language = language.languageCode; - } - - /** - * Constructor - * @param profanityFilter - */ - public Recognizer(boolean profanityFilter){ - this.profanityFilter = profanityFilter; - } - - /** - * Constructor - * @param language - * @param profanityFilter - */ - @Deprecated - public Recognizer(String language, boolean profanityFilter){ - this.language = language; - this.profanityFilter = profanityFilter; - } - - /** - * Constructor - * @param language - * @param profanityFilter - */ - public Recognizer(Languages language, boolean profanityFilter){ - this.language = language.languageCode; - this.profanityFilter = profanityFilter; - } - - /** - * Language: Contains all supported languages for Google Speech to Text. - * Setting this to null will make Google use it's own language detection. - * This value is null by default. - * @param language - */ - public void setLanguage(Languages language) { - this.language = language.languageCode; - } - - /**Language code. This language code must match the language of the speech to be recognized. ex. en-US ru-RU - * This value is null by default. - * @param language The language code. - */ - @Deprecated - public void setLanguage(String language) { - this.language = language; - } - - /** - * Returns the state of profanityFilter - * which enables/disables Google's profanity filter (on by default). - * @return profanityFilter - */ - public boolean getProfanityFilter(){ - return profanityFilter; - } - - /** - * Language code. This language code must match the language of the speech to be recognized. ex. en-US ru-RU - * This value is null by default. - * @return language the Google language - */ - public String getLanguage(){ - return language; - } - - /** - * Get recognized data from a Wave file. This method will encode the wave file to a FLAC file - * - * @param waveFile Wave file to recognize - * @param maxResults Maximum number of results to return in response - * @return Returns a GoogleResponse, with the response and confidence score - * @throws IOException Throws exception if something goes wrong - */ - public GoogleResponse getRecognizedDataForWave(File waveFile, int maxResults) throws IOException{ - FlacEncoder flacEncoder = new FlacEncoder(); - File flacFile = new File(waveFile + ".flac"); - - flacEncoder.convertWaveToFlac(waveFile, flacFile); - - GoogleResponse googleResponse = getRecognizedDataForFlac(flacFile, maxResults, 8000); - - //Delete converted FLAC data - flacFile.delete(); - return googleResponse; - } - - /** - * Get recognized data from a Wave file. This method will encode the wave file to a FLAC - * - * @param waveFile Wave file to recognize - * @param maxResults the maximum number of results to return in the response - * NOTE: Sample rate of file must be 8000 unless a custom sample rate is specified. - * @return Returns a GoogleResponse, with the response and confidence score - * @throws IOException Throws exception if something goes wrong - */ - public GoogleResponse getRecognizedDataForWave(String waveFile, int maxResults) throws IOException { - return getRecognizedDataForWave(new File(waveFile), maxResults); - } - - /** - * Get recognized data from a FLAC file. - * - * @param flacFile FLAC file to recognize - * @param maxResults the maximum number of results to return in the response - * NOTE: Sample rate of file must be 8000 unless a custom sample rate is specified. - * @return Returns a GoogleResponse, with the response and confidence score - * @throws IOException Throws exception if something goes wrong - */ - public GoogleResponse getRecognizedDataForFlac(File flacFile, int maxResults) throws IOException { - return getRecognizedDataForFlac(flacFile, maxResults, 8000); - } - - /** - * Get recognized data from a FLAC file. - * - * @param flacFile FLAC file to recognize - * @param maxResults the maximum number of results to return in the response - * @param samepleRate The sampleRate of the file. Default is 8000. - * @return Returns a GoogleResponse, with the response and confidence score - * @throws IOException Throws exception if something goes wrong - */ - public GoogleResponse getRecognizedDataForFlac(File flacFile, int maxResults, int sampleRate) throws IOException{ - String response = rawRequest(flacFile, maxResults, sampleRate); - GoogleResponse googleResponse = new GoogleResponse(); - parseResponse(response, googleResponse); - return googleResponse; - } - - /** - * Get recognized data from a FLAC file. - * - * @param flacFile FLAC file to recognize - * @param maxResults the maximum number of results to return in the response - * @param samepleRate The sampleRate of the file. Default is 8000. - * @return Returns a GoogleResponse, with the response and confidence score - * @throws IOException Throws exception if something goes wrong - */ - public GoogleResponse getRecognizedDataForFlac(String flacFile, int maxResults, int sampleRate) throws IOException{ - return getRecognizedDataForFlac(new File(flacFile), maxResults, sampleRate); - } - - /** - * Get recognized data from a FLAC file. - * - * @param flacFile FLAC file to recognize - * @param maxResults the maximum number of results to return in the response - * @return Returns a GoogleResponse, with the response and confidence score - * @throws IOException Throws exception if something goes wrong - */ - public GoogleResponse getRecognizedDataForFlac(String flacFile, int maxResults) throws IOException { - return getRecognizedDataForFlac(new File(flacFile), maxResults); - } - - /** - * Get recognized data from a Wave file. This method will encode the wave file to a FLAC. - * This method will automatically set the language to en-US, or English - * - * @param waveFile Wave file to recognize - * @return Returns a GoogleResponse, with the response and confidence score - * @throws IOException Throws exception if something goes wrong - */ - public GoogleResponse getRecognizedDataForWave(File waveFile) throws IOException { - return getRecognizedDataForWave(waveFile, 1); - } - - /** - * Get recognized data from a Wave file. This method will encode the wave file to a FLAC. - * This method will automatically set the language to en-US, or English - * - * @param waveFile Wave file to recognize - * @return Returns a GoogleResponse, with the response and confidence score - * @throws IOException Throws exception if something goes wrong - */ - public GoogleResponse getRecognizedDataForWave(String waveFile) throws IOException { - return getRecognizedDataForWave(waveFile, 1); - } - - /** - * Get recognized data from a FLAC file. - * This method will automatically set the language to en-US, or English - * - * @param flacFile FLAC file to recognize - * @return Returns a GoogleResponse, with the response and confidence score - * @throws IOException Throws exception if something goes wrong - */ - public GoogleResponse getRecognizedDataForFlac(File flacFile) throws IOException { - return getRecognizedDataForFlac(flacFile, 1); - } - - /** - * Get recognized data from a FLAC file. - * This method will automatically set the language to en-US, or English - * - * @param flacFile FLAC file to recognize - * @return Returns a GoogleResponse, with the response and confidence score - * @throws IOException Throws exception if something goes wrong - */ - public GoogleResponse getRecognizedDataForFlac(String flacFile) throws IOException { - return getRecognizedDataForFlac(flacFile, 1); - } - - /** - * Parses the raw response from Google - * - * @param rawResponse The raw, unparsed response from Google - * @return Returns the parsed response in the form of a Google Response. - */ - private void parseResponse(String rawResponse, GoogleResponse googleResponse) { - if (rawResponse == null || !rawResponse.contains("utterance")) - return; - - String array = StringUtil.substringBetween(rawResponse, "[", "]"); - String[] parts = array.split("}"); - - boolean first = true; - for( String s : parts ) { - if( first ) { - first = false; - String utterancePart = s.split(",")[0]; - String confidencePart = s.split(",")[1]; - - String utterance = utterancePart.split(":")[1]; - String confidence = confidencePart.split(":")[1]; - - utterance = StringUtil.stripQuotes(utterance); - confidence = StringUtil.stripQuotes(confidence); - - if( utterance.equals("null") ) { - utterance = null; - } - if( confidence.equals("null") ) { - confidence = null; - } - - googleResponse.setResponse(utterance); - googleResponse.setConfidence(confidence); - } else { - String utterance = s.split(":")[1]; - utterance = StringUtil.stripQuotes(utterance); - if( utterance.equals("null") ) { - utterance = null; - } - googleResponse.getOtherPossibleResponses().add(utterance); - } - } - } - - /** - * Performs the request to Google with a file
- * Request is buffered - * - * @param inputFile Input files to recognize - * @return Returns the raw, unparsed response from Google - * @throws IOException Throws exception if something went wrong - */ - private String rawRequest(File inputFile, int maxResults, int sampleRate) throws IOException{ - URL url; - URLConnection urlConn; - OutputStream outputStream; - BufferedReader br; - - StringBuilder sb = new StringBuilder(GOOGLE_RECOGNIZER_URL); - if( language != null ) { - sb.append("&lang="); - sb.append(language); - } - else{ - sb.append("&lang=auto"); - } - if( !profanityFilter ) { - sb.append("&pfilter=0"); - } - sb.append("&maxresults="); - sb.append(maxResults); - - // URL of Remote Script. - url = new URL(sb.toString()); - - - // Open New URL connection channel. - urlConn = url.openConnection(); - - // we want to do output. - urlConn.setDoOutput(true); - - // No caching - urlConn.setUseCaches(false); - - // Specify the header content type. - urlConn.setRequestProperty("Content-Type", "audio/x-flac; rate=" + sampleRate); - - // Send POST output. - outputStream = urlConn.getOutputStream(); - - - FileInputStream fileInputStream = new FileInputStream(inputFile); - - byte[] buffer = new byte[256]; - - while ((fileInputStream.read(buffer, 0, 256)) != -1) { - outputStream.write(buffer, 0, 256); - } - - fileInputStream.close(); - outputStream.close(); - - // Get response data. - br = new BufferedReader(new InputStreamReader(urlConn.getInputStream(), Charset.forName("UTF-8"))); - - String response = br.readLine(); - - br.close(); - - return response; - - } - -} diff --git a/lib/java-speech-api-master/src/com/darkprograms/speech/recognizer/RecognizerChunked.java b/lib/java-speech-api-master/src/com/darkprograms/speech/recognizer/RecognizerChunked.java deleted file mode 100755 index ab4a999d..00000000 --- a/lib/java-speech-api-master/src/com/darkprograms/speech/recognizer/RecognizerChunked.java +++ /dev/null @@ -1,282 +0,0 @@ -package com.darkprograms.speech.recognizer; - - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.net.HttpURLConnection; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.nio.ByteBuffer; -import java.nio.MappedByteBuffer; -import java.nio.channels.FileChannel; -import java.util.ArrayList; -import java.util.List; - -import javax.net.ssl.HttpsURLConnection; -import javax.xml.ws.http.HTTPException; - -import com.darkprograms.speech.util.StringUtil; - -/** - * This class uses Google's V2 Hook. The class is returns a chunked respones so listeners must be used. - * The class also requires an API-Key (see Constructor) for details. This class is experimental and - * subject to change as we restructure the API. - * @author Aaron Gokaslan (Skylion) - */ -public class RecognizerChunked { - - /** - * Google's API V2 URL - */ - private static final String GOOGLE_SPEECH_URL_V2 = "https://www.google.com/speech-api/v2/recognize"; - - /** - * API-Key used for requests - */ - private final String API_KEY; - - /** - * The language code Google uses to determine the language - * Default value is "auto" - */ - private String language; - - /** - * Stores the Response Listeners - */ - private List responseListeners = new ArrayList(); - - /** - * Constructor - * @param API_KEY The API-Key for Google's Speech API. An API key can be obtained by requesting - * one by following the process shown at this - * url. - */ - public RecognizerChunked(String API_KEY){ - this.API_KEY = API_KEY; - this.language = "auto"; - } - - /** - * Constructor - * @param API_KEY The API-Key for Google's Speech API. An API key can be obtained by requesting - * one by following the process shown at this - * url. - * @param language The language you want to use (Iso code) - * Note: This function will most likely be deprecated. - */ - public RecognizerChunked(String API_KEY, String language){ - this(API_KEY); - this.language = language; - } - - /** - * The current language the Recognizer is set to use. Returns the ISO-Code otherwise, - * it may return "auto." - * @return The ISO-Code or auto if the language the is not specified. - */ - public String getLanguage(){ - return language; - } - - /** - * Sets the language that the file should return. - * @param language The language as an ISO-Code - */ - public void setLanguage(String language){ - this.language = language; - } - - /** - * Analyzes the file for speech - * @param infile The file you want to analyze for speech. - * @param sampleRate The sample rate of the audioFile. - * @throws IOException if something goes wrong reading the file. - */ - public void getRecognizedDataForFlac(File infile, int sampleRate) throws IOException{ - byte[] data = mapFileIn(infile); - getRecognizedDataForFlac(data, sampleRate); - } - - /** - * Analyzes the file for speech - * @param infile The file you want to analyze for speech. - * @param sampleRate The sample rate of the audioFile. - * @throws IOException if something goes wrong reading the file. - */ - public void getRecognizedDataForFlac(String inFile, int sampleRate) throws IOException{ - getRecognizedDataForFlac(new File(inFile), sampleRate); - } - - /** - * Recognizes the byte data. - * @param data - * @param sampleRate - */ - public void getRecognizedDataForFlac(byte[] data, int sampleRate){ - StringBuilder sb = new StringBuilder(GOOGLE_SPEECH_URL_V2); - sb.append("?output=json"); - sb.append("&client=chromium"); - sb.append("&lang=" + language); - sb.append("&key=" + API_KEY); - String url = sb.toString(); - - openHttpsPostConnection(url, data, sampleRate); - } - - /** - * Opens a chunked response HTTPS line to the specified URL - * @param urlStr The URL string to connect for chunking - * @param data The data you want to send to Google. Speech files under 15 seconds long recommended. - * @param sampleRate The sample rate for your audio file. - */ - private void openHttpsPostConnection(final String urlStr, final byte[] data, final int sampleRate) { - new Thread () { - public void run() { - HttpsURLConnection httpConn = null; - ByteBuffer buff = ByteBuffer.wrap(data); - byte[] destdata = new byte[2048]; - int resCode = -1; - OutputStream out = null; - try { - URL url = new URL(urlStr); - URLConnection urlConn = url.openConnection(); - if (!(urlConn instanceof HttpsURLConnection)) { - throw new IOException ("URL must be HTTPS"); - } - httpConn = (HttpsURLConnection)urlConn; - httpConn.setAllowUserInteraction(false); - httpConn.setInstanceFollowRedirects(true); - httpConn.setRequestMethod("POST"); - httpConn.setDoOutput(true); - httpConn.setChunkedStreamingMode(0); //TransferType: chunked - httpConn.setRequestProperty("Content-Type", "audio/x-flac; rate=" + sampleRate); - // this opens a connection, then sends POST & headers. - out = httpConn.getOutputStream(); - //beyond 15 sec duration just simply writing the file - // does not seem to work. So buffer it and delay to simulate - // bufferd microphone delivering stream of speech - // re: net.http.ChunkedOutputStream.java - while(buff.remaining() >= destdata.length){ - buff.get(destdata); - out.write(destdata); - }; - byte[] lastr = new byte[buff.remaining()]; - buff.get(lastr, 0, lastr.length); - out.write(lastr); - out.close(); - resCode = httpConn.getResponseCode(); - if(resCode >= HttpURLConnection.HTTP_UNAUTHORIZED){//Stops here if Google doesn't like us/ - throw new HTTPException(HttpURLConnection.HTTP_UNAUTHORIZED);//Throws - } - String line;//Each line that is read back from Google. - BufferedReader br = new BufferedReader(new InputStreamReader(httpConn.getInputStream())); - while ((line = br.readLine( )) != null) { - if(line.length()>19 && resCode > 100 && resCode < HttpURLConnection.HTTP_UNAUTHORIZED){ - GoogleResponse gr = new GoogleResponse(); - parseResponse(line, gr); - fireResponseEvent(gr); - } - } - } catch (MalformedURLException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - finally {httpConn.disconnect();} - } - }.start(); - } - - /** - * Converts the file into a byte[]. - * @param infile The File you want to specify - * @return a byte array - * @throws IOException if something goes wrong reading the file. - */ - private byte[] mapFileIn(File infile) throws IOException{ - FileInputStream fis = new FileInputStream(infile); - try{ - FileChannel fc = fis.getChannel(); // Get the file's size and then map it into memory - int sz = (int)fc.size(); - MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, sz); - byte[] data2 = new byte[bb.remaining()]; - bb.get(data2); - return data2; - } - finally{//Ensures resources are closed regardless of whether the action suceeded - fis.close(); - } - } - - /** - * Parses the response into a Google Response - * @param rawResponse The raw String you want to parse - * @param gr The GoogleResponse you want to parse into ti. - */ - private void parseResponse(String rawResponse, GoogleResponse gr){ - if(rawResponse == null || !rawResponse.contains("\"result\"")){ return; } - if(rawResponse.contains("\"confidence\":")){ - String confidence = StringUtil.substringBetween(rawResponse, "\"confidence\":", "}"); - gr.setConfidence(confidence); - } - else{ - gr.setConfidence(String.valueOf(1d)); - } - String array = StringUtil.trimString(rawResponse, "[", "]"); - if(array.contains("[")){ - array = StringUtil.trimString(array, "[", "]"); - } - String[] parts = array.split(","); - gr.setResponse(parseTranscript(parts[0])); - for(int i = 1; i100){ - List fragments = parseString(synthText);//parses String if too long - String tmp = getLanguage(); - setLanguage(languageCode);//Keeps it from autodetecting each fragment. - InputStream out = getMP3Data(fragments); - setLanguage(tmp);//Reverts it to it's previous Language such as auto. - return out; - } - - - String encoded = URLEncoder.encode(synthText, "UTF-8"); //Encode - - URL url = new URL(GOOGLE_SYNTHESISER_URL + languageCode + "&q=" + encoded); //create url - - // Open New URL connection channel. - URLConnection urlConn = url.openConnection(); //Open connection - - urlConn.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0"); //Adding header for user agent is required - - return urlConn.getInputStream(); - } - - /** - * Gets an InputStream to MP3Data for the returned information from a request - * @param synthText List of Strings you want to be synthesized into MP3 data - * @return Returns an input stream of all the MP3 data that is returned from Google - * @throws IOException Throws exception if it cannot complete the request - */ - public InputStream getMP3Data(List synthText) throws IOException{ - //Uses an executor service pool for concurrency. Limit to 1000 threads max. - ExecutorService pool = Executors.newFixedThreadPool(1000); - //Stores the Future (Data that will be returned in the future) - Set> set = new LinkedHashSet>(synthText.size()); - for(String part: synthText){ //Iterates through the list - Callable callable = new MP3DataFetcher(part);//Creates Callable - Future future = pool.submit(callable);//Begins to run Callable - set.add(future);//Adds the response that will be returned to a set. - } - List inputStreams = new ArrayList(set.size()); - for(Future future: set){ - try { - inputStreams.add(future.get());//Gets the returned data from the future. - } catch (ExecutionException e) {//Thrown if the MP3DataFetcher encountered an error. - Throwable ex = e.getCause(); - if(ex instanceof IOException){ - throw (IOException)ex;//Downcasts and rethrows it. - } - } catch (InterruptedException e){//Will probably never be called, but just in case... - Thread.currentThread().interrupt();//Interrupts the thread since something went wrong. - } - } - return new SequenceInputStream(Collections.enumeration(inputStreams));//Sequences the stream. - } - - /** - * Separates a string into smaller parts so that Google will not reject the request. - * @param input The string you want to separate - * @return A List of the String fragments from your input.. - */ - private List parseString(String input){ - return parseString (input, new ArrayList()); - } - - /** - * Separates a string into smaller parts so that Google will not reject the request. - * @param input The string you want to break up into smaller parts - * @param fragments List that you want to add stuff too. - * If you don't have a List already constructed "new ArrayList()" works well. - * @return A list of the fragments of the original String - */ - private List parseString(String input, List fragments){ - if(input.length()<=100){//Base Case - fragments.add(input); - return fragments; - } - else{ - int lastWord = findLastWord(input);//Checks if a space exists - if(lastWord<=0){ - fragments.add(input.substring(0,100));//In case you sent gibberish to Google. - return parseString(input.substring(100), fragments); - }else{ - fragments.add(input.substring(0,lastWord));//Otherwise, adds the last word to the list for recursion. - return parseString(input.substring(lastWord), fragments); - } - } - } - - /** - * Finds the last word in your String (before the index of 99) by searching for spaces and ending punctuation. - * Will preferably parse on punctuation to alleviate mid-sentence pausing - * @param input The String you want to search through. - * @return The index of where the last word of the string ends before the index of 99. - */ - private int findLastWord(String input){ - if(input.length()<100) - return input.length(); - int space = -1; - for(int i = 99; i>0; i--){ - char tmp = input.charAt(i); - if(isEndingPunctuation(tmp)){ - return i+1; - } - if(space==-1 && tmp == ' '){ - space = i; - } - } - if(space>0){ - return space; - } - return -1; - } - - /** - * Checks if char is an ending character - * Ending punctuation for all languages according to Wikipedia (Except for Sanskrit non-unicode) - * @param The char you want check - * @return True if it is, false if not. - */ - private boolean isEndingPunctuation(char input){ - return input == '.' || input == '!' || input == '?' || input == ';' || input == ':' || input == '|'; - } - - /** - * Automatically determines the language of the original text - * @param text represents the text you want to check the language of - * @return the languageCode in ISO-639 - * @throws Exception if it cannot complete the request - */ - public String detectLanguage(String text) throws IOException{ - return GoogleTranslate.detectLanguage(text); - } - - /** - * This class is a callable. - * A callable is like a runnable except that it can return data and throw exceptions. - * Useful when using futures. Dramatically improves the speed of execution. - * @author Aaron Gokaslan (Skylion) - */ - private class MP3DataFetcher implements Callable{ - private String synthText; - - public MP3DataFetcher(String synthText){ - this.synthText = synthText; - } - - public InputStream call() throws IOException{ - return getMP3Data(synthText); - } - } - -} - diff --git a/lib/java-speech-api-master/src/com/darkprograms/speech/synthesiser/SynthesiserV2.java b/lib/java-speech-api-master/src/com/darkprograms/speech/synthesiser/SynthesiserV2.java deleted file mode 100755 index db124123..00000000 --- a/lib/java-speech-api-master/src/com/darkprograms/speech/synthesiser/SynthesiserV2.java +++ /dev/null @@ -1,303 +0,0 @@ -package com.darkprograms.speech.synthesiser; - -import java.io.IOException; -import java.io.InputStream; -import java.io.SequenceInputStream; -import java.net.URL; -import java.net.URLConnection; -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.Collections; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; - -import com.darkprograms.speech.translator.GoogleTranslate; - - -/** - * This class uses the V2 version of Google's Text to Speech API. While this class requires an API key, - * the endpoint allows for additional specification of parameters including speed and pitch. - * See the constructor for instructions regarding the API_Key. - * @author Skylion (Aaron Gokaslan) - */ -public class SynthesiserV2 { - - private static final String GOOGLE_SYNTHESISER_URL = "https://www.google.com/speech-api/v2/synthesize?enc=mpeg" + - "&client=chromium"; - - /** - * API_KEY used for requests - */ - private final String API_KEY; - - /** - * language of the Text you want to translate - */ - private String languageCode; - - /** - * The pitch of the generated audio - */ - private double pitch = 1.0; - - /** - * The speed of the generated audio - */ - private double speed = 1.0; - - /** - * Constructor - * @param API_KEY The API-Key for Google's Speech API. An API key can be obtained by requesting - * one by following the process shown at this - * url. - */ - public SynthesiserV2(String API_KEY){ - this.API_KEY = API_KEY; - } - - /** - * Returns the current language code for the Synthesiser. - * Example: English(Generic) = en, English (US) = en-US, English (UK) = en-GB. and Spanish = es; - * @return the current language code parameter - */ - public String getLanguage(){ - return languageCode; - } - - /** - * Note: set language to auto to enable automatic language detection. - * Setting to null will also implement Google's automatic language detection - * @param languageCode The language code you would like to modify languageCode to. - */ - public void setLanguage(String languageCode){ - this.languageCode = languageCode; - } - - /** - * @return the pitch - */ - public double getPitch() { - return pitch; - } - - /** - * Sets the pitch of the audio. - * Valid values range from 0 to 2 inclusive. - * Values above 1 correspond to higher pitch, values below 1 correspond to lower pitch. - * @param pitch the pitch to set - */ - public void setPitch(double pitch) { - this.pitch = pitch; - } - - /** - * @return the speed - */ - public double getSpeed() { - return speed; - } - - /** - * Sets the speed of audio. - * Valid values range from 0 to 2 inclusive. - * Values higher than one correspond to faster and vice versa. - * @param speed the speed to set - */ - public void setSpeed(double speed) { - this.speed = speed; - } - - /** - * Gets an input stream to MP3 data for the returned information from a request - * - * @param synthText Text you want to be synthesized into MP3 data - * @return Returns an input stream of the MP3 data that is returned from Google - * @throws IOException Throws exception if it can not complete the request - */ - public InputStream getMP3Data(String synthText) throws IOException{ - - String languageCode = this.languageCode;//Ensures retention of language settings if set to auto - - if(languageCode == null || languageCode.equals("") || languageCode.equalsIgnoreCase("auto")){ - try{ - languageCode = detectLanguage(synthText);//Detects language - if(languageCode == null){ - languageCode = "en-us";//Reverts to Default Language if it can't detect it. - } - } - catch(Exception ex){ - ex.printStackTrace(); - languageCode = "en-us";//Reverts to Default Language if it can't detect it. - } - } - - if(synthText.length()>100){ - List fragments = parseString(synthText);//parses String if too long - String tmp = getLanguage(); - setLanguage(languageCode);//Keeps it from autodetecting each fragment. - InputStream out = getMP3Data(fragments); - setLanguage(tmp);//Reverts it to it's previous Language such as auto. - return out; - } - - - String encoded = URLEncoder.encode(synthText, "UTF-8"); //Encode - - StringBuilder sb = new StringBuilder(GOOGLE_SYNTHESISER_URL); - sb.append("&key=" + API_KEY); - sb.append("&text=" + encoded); - sb.append("&lang=" + languageCode); - - if(speed>=0 && speed<=2.0){ - sb.append("&speed=" + speed/2.0); - } - - if(pitch>=0 && pitch<=2.0){ - sb.append("&pitch=" + pitch/2.0); - } - - URL url = new URL(sb.toString()); //create url - - // Open New URL connection channel. - URLConnection urlConn = url.openConnection(); //Open connection - - urlConn.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0"); //Adding header for user agent is required - - return urlConn.getInputStream(); - } - - /** - * Gets an InputStream to MP3Data for the returned information from a request - * @param synthText List of Strings you want to be synthesized into MP3 data - * @return Returns an input stream of all the MP3 data that is returned from Google - * @throws IOException Throws exception if it cannot complete the request - */ - public InputStream getMP3Data(List synthText) throws IOException{ - //Uses an executor service pool for concurrency. Limit to 1000 threads max. - ExecutorService pool = Executors.newFixedThreadPool(1000); - //Stores the Future (Data that will be returned in the future) - Set> set = new LinkedHashSet>(synthText.size()); - for(String part: synthText){ //Iterates through the list - Callable callable = new MP3DataFetcher(part);//Creates Callable - Future future = pool.submit(callable);//Begins to run Callable - set.add(future);//Adds the response that will be returned to a set. - } - List inputStreams = new ArrayList(set.size()); - for(Future future: set){ - try { - inputStreams.add(future.get());//Gets the returned data from the future. - } catch (ExecutionException e) {//Thrown if the MP3DataFetcher encountered an error. - Throwable ex = e.getCause(); - if(ex instanceof IOException){ - throw (IOException)ex;//Downcasts and rethrows it. - } - } catch (InterruptedException e){//Will probably never be called, but just in case... - Thread.currentThread().interrupt();//Interrupts the thread since something went wrong. - } - } - return new SequenceInputStream(Collections.enumeration(inputStreams));//Sequences the stream. - } - - /** - * Separates a string into smaller parts so that Google will not reject the request. - * @param input The string you want to separate - * @return A List of the String fragments from your input.. - */ - private List parseString(String input){ - return parseString (input, new ArrayList()); - } - - /** - * Separates a string into smaller parts so that Google will not reject the request. - * @param input The string you want to break up into smaller parts - * @param fragments List that you want to add stuff too. - * If you don't have a List already constructed "new ArrayList()" works well. - * @return A list of the fragments of the original String - */ - private List parseString(String input, List fragments){ - if(input.length()<=100){//Base Case - fragments.add(input); - return fragments; - } - else{ - int lastWord = findLastWord(input);//Checks if a space exists - if(lastWord<=0){ - fragments.add(input.substring(0,100));//In case you sent gibberish to Google. - return parseString(input.substring(100), fragments); - }else{ - fragments.add(input.substring(0,lastWord));//Otherwise, adds the last word to the list for recursion. - return parseString(input.substring(lastWord), fragments); - } - } - } - - /** - * Finds the last word in your String (before the index of 99) by searching for spaces and ending punctuation. - * Will preferably parse on punctuation to alleviate mid-sentence pausing - * @param input The String you want to search through. - * @return The index of where the last word of the string ends before the index of 99. - */ - private int findLastWord(String input){ - if(input.length()<100) - return input.length(); - int space = -1; - for(int i = 99; i>0; i--){ - char tmp = input.charAt(i); - if(isEndingPunctuation(tmp)){ - return i+1; - } - if(space==-1 && tmp == ' '){ - space = i; - } - } - if(space>0){ - return space; - } - return -1; - } - - /** - * Checks if char is an ending character - * Ending punctuation for all languages according to Wikipedia (Except for Sanskrit non-unicode) - * @param The char you want check - * @return True if it is, false if not. - */ - private boolean isEndingPunctuation(char input){ - return input == '.' || input == '!' || input == '?' || input == ';' || input == ':' || input == '|'; - } - - /** - * Automatically determines the language of the original text - * @param text represents the text you want to check the language of - * @return the languageCode in ISO-639 - * @throws Exception if it cannot complete the request - */ - public String detectLanguage(String text) throws IOException{ - return GoogleTranslate.detectLanguage(text); - } - - /** - * This class is a callable. - * A callable is like a runnable except that it can return data and throw exceptions. - * Useful when using futures. Dramatically improves the speed of execution. - * @author Aaron Gokaslan (Skylion) - */ - private class MP3DataFetcher implements Callable{ - private String synthText; - - public MP3DataFetcher(String synthText){ - this.synthText = synthText; - } - - public InputStream call() throws IOException{ - return getMP3Data(synthText); - } - } - -} \ No newline at end of file diff --git a/lib/java-speech-api-master/src/com/darkprograms/speech/translator/GoogleTranslate.java b/lib/java-speech-api-master/src/com/darkprograms/speech/translator/GoogleTranslate.java deleted file mode 100755 index 4572641d..00000000 --- a/lib/java-speech-api-master/src/com/darkprograms/speech/translator/GoogleTranslate.java +++ /dev/null @@ -1,168 +0,0 @@ -package com.darkprograms.speech.translator; - -import java.io.IOException; -import java.io.Reader; -import java.net.URL; -import java.net.URLConnection; -import java.net.URLEncoder; -import java.nio.charset.Charset; -import java.util.Locale; - -/*************************************************************************************************************** - * An API for a Google Translation service in Java. - * Please Note: This API is unofficial and is not supported by Google. Subject to breakage at any time. - * The translator allows for language detection and translation. - * Recommended for translation of user interfaces or speech commands. - * All translation services provided via Google Translate - * @author Aaron Gokaslan (Skylion) - ***************************************************************************************************************/ -public final class GoogleTranslate { //Class marked as final since all methods are static - - /** - * URL to query for Translation - */ - private final static String GOOGLE_TRANSLATE_URL = "http://translate.google.com/translate_a/t?client=t"; - - /** - * Private to prevent instantiation - */ - private GoogleTranslate(){}; - - /** - * Converts the ISO-639 code into a friendly language code in the user's default language - * For example, if the language is English and the default locale is French, it will return "anglais" - * Useful for UI Strings - * @param languageCode The ISO639-1 - * @return The language in the user's default language - * @see {@link #detectLanguage} - */ - public static String getDisplayLanguage(String languageCode){ - return (new Locale(languageCode)).getDisplayLanguage(); - } - - /** - * Automatically determines the language of the original text - * @param text represents the text you want to check the language of - * @return The ISO-639 code for the language - * @throws IOException if it cannot complete the request - */ - public static String detectLanguage(String text) throws IOException{ - String encoded = URLEncoder.encode(text, "UTF-8"); //Encodes the string - URL url = new URL(GOOGLE_TRANSLATE_URL + "&text=" + encoded); //Generates URL - String rawData = urlToText(url);//Gets text from Google - return findLanguage(rawData); - } - - - /** - * Automatically translates text to a system's default language according to its locale - * Useful for creating international applications as you can translate UI strings - * @param text The text you want to translate - * @return The translated text - * @throws IOException if cannot complete request - */ - public static String translate(String text) throws IOException{ - return translate(Locale.getDefault().getLanguage(), text); - } - - /** - * Automatically detects language and translate to the targetLanguage - * @param targetLanguage The language you want to translate into in ISO-639 format - * @param text The text you actually want to translate - * @return The translated text. - * @throws IOException if it cannot complete the request - */ - public static String translate(String targetLanguage, String text) throws IOException{ - return translate("auto",targetLanguage, text); - } - - /** - * Translate text from sourceLanguage to targetLanguage - * Specifying the sourceLanguage greatly improves accuracy over short Strings - * @param sourceLanguage The language you want to translate from in ISO-639 format - * @param targetLanguage The language you want to translate into in ISO-639 format - * @param text The text you actually want to translate - * @return the translated text. - * @throws IOException if it cannot complete the request - */ - public static String translate(String sourceLanguage, String targetLanguage, String text) throws IOException{ - String encoded = URLEncoder.encode(text, "UTF-8"); //Encode - //Generates URL - URL url = new URL(GOOGLE_TRANSLATE_URL + "&sl=" + sourceLanguage + "&tl=" + targetLanguage + "&text=" + encoded); - String rawData = urlToText(url);//Gets text from Google - if(rawData==null){ - return null; - } - String[] raw = rawData.split("\"");//Parses the JSON - if(raw.length<2){ - return null; - } - return raw[1];//Returns the translation - } - - /** - * Converts a URL to Text - * @param url that you want to generate a String from - * @return The generated String - * @throws IOException if it cannot complete the request - */ - private static String urlToText(URL url) throws IOException{ - URLConnection urlConn = url.openConnection(); //Open connection - //Adding header for user agent is required. Otherwise, Google rejects the request - urlConn.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0"); - Reader r = new java.io.InputStreamReader(urlConn.getInputStream(), Charset.forName("UTF-8"));//Gets Data Converts to string - StringBuilder buf = new StringBuilder(); - while (true) {//Reads String from buffer - int ch = r.read(); - if (ch < 0) - break; - buf.append((char) ch); - } - String str = buf.toString(); - return str; - } - - - /** - * Searches RAWData for Language - * @param RAWData the raw String directly from Google you want to search through - * @return The language parsed from the rawData or en-US (English-United States) if Google cannot determine it. - */ - private static String findLanguage(String rawData){ - for(int i = 0; i+50) - return rawData.substring(i+2,i+2+lastQuote); - } - else{ - String possible = rawData.substring(i+2,i+4); - if(containsLettersOnly(possible)){//Required due to Google's inconsistent formatting. - return possible; - } - } - } - } - return null; - } - - /** - * Checks if all characters in text are letters. - * @param text The text you want to determine the validity of. - * @return True if all characters are letter, otherwise false. - */ - private static boolean containsLettersOnly(String text){ - for(int i = 0; i. 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. -// -//THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. -// -//Visit the ACME Labs Java page for up-to-date versions of this and other -//fine Java utilities: http://www.acme.com/java/ - - -import java.io.*; -import java.util.*; - -/// An OutputStream that implements HTTP/1.1 chunking. -//

-//This class lets a Servlet send its response data as an HTTP/1.1 chunked -//stream. Chunked streams are a way to send arbitrary-length data without -//having to know beforehand how much you're going to send. They are -//introduced by a "Transfer-Encoding: chunked" header, so you have to -//set that header when you make one of these streams. -//

-//Sample usage: -//


-//res.setHeader( "Transfer-Encoding", "chunked" );
-//OutputStream out = res.getOutputStream();
-//ChunkedOutputStream chunkOut = new ChunkedOutputStream( out );
-//(write data to chunkOut instead of out)
-//(optionally set footers)
-//chunkOut.done();
-//
-//

-//Every time the stream gets flushed, a chunk is sent. When done() -//is called, an empty chunk is sent, marking the end of the chunked -//stream as per the chunking spec. -//

-//Fetch the software.
-//Fetch the entire Acme package. - -public class ChunkedOutputStream extends BufferedOutputStream -{ - - /// Make a ChunkedOutputStream with a default buffer size. - // @param out the underlying output stream - public ChunkedOutputStream( OutputStream out ) - { - super( out ); - } - - /// Make a ChunkedOutputStream with a specified buffer size. - // @param out the underlying output stream - // @param size the buffer size - public ChunkedOutputStream( OutputStream out, int size ) - { - super( out, size ); - } - - - /// Flush the stream. This will write any buffered output - // bytes as a chunk. - // @exception IOException if an I/O error occurred - public synchronized void flush() throws IOException - { - if ( count != 0 ) - { - writeBuf( buf, 0, count ); - count = 0; - } - } - - - private Vector footerNames = new Vector(); - private Vector footerValues = new Vector(); - - /// Set a footer. Footers are much like HTTP headers, except that - // they come at the end of the data instead of at the beginning. - public void setFooter( String name, String value ) - { - footerNames.addElement( name ); - footerValues.addElement( value ); - } - - - /// Indicate the end of the chunked data by sending a zero-length chunk, - // possible including footers. - // @exception IOException if an I/O error occurred - public void done() throws IOException - { - flush(); - PrintStream pout = new PrintStream( out ); - pout.println( "0" ); - if ( footerNames.size() > 0 ) - { - // Send footers. - for ( int i = 0; i < footerNames.size(); ++i ) - { - String name = (String) footerNames.elementAt( i ); - String value = (String) footerValues.elementAt( i ); - pout.println( name + ": " + value ); - } - } - footerNames = null; - footerValues = null; - pout.println( "" ); - pout.flush(); - } - - - /// Make sure that calling close() terminates the chunked stream. - public void close() throws IOException - { - if ( footerNames != null ) - done(); - super.close(); - } - - - /// Write a sub-array of bytes. - //

- // The only reason we have to override the BufferedOutputStream version - // of this is that it writes the array directly to the output stream - // if doesn't fit in the buffer. So we make it use our own chunk-write - // routine instead. Otherwise this is identical to the parent-class - // version. - // @param b the data to be written - // @param off the start offset in the data - // @param len the number of bytes that are written - // @exception IOException if an I/O error occurred - public synchronized void write( byte b[], int off, int len ) throws IOException - { - int avail = buf.length - count; - - if ( len <= avail ) - { - System.arraycopy( b, off, buf, count, len ); - count += len; - return; - } - flush(); - writeBuf( b, off, len ); - } - - - private static final byte[] crlf = { 13, 10 }; - private byte[] lenBytes = new byte[20]; // big enough for any number in hex - - /// The only routine that actually writes to the output stream. - // This is where chunking semantics are implemented. - // @exception IOException if an I/O error occurred - private void writeBuf( byte b[], int off, int len ) throws IOException - { - // Write the chunk length as a hex number. - String lenStr = Integer.toString( len, 16 ); - lenStr.getBytes( 0, lenStr.length(), lenBytes, 0 ); - out.write( lenBytes ); - // Write a CRLF. - out.write( crlf ); - // Write the data. - if ( len != 0 ) - out.write( b, off, len ); - // Write a CRLF. - out.write( crlf ); - // And flush the real stream. - out.flush(); - } - -} - diff --git a/lib/java-speech-api-master/src/com/darkprograms/speech/util/Complex.java b/lib/java-speech-api-master/src/com/darkprograms/speech/util/Complex.java deleted file mode 100755 index 5177eafe..00000000 --- a/lib/java-speech-api-master/src/com/darkprograms/speech/util/Complex.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.darkprograms.speech.util; - - -/************************************************************************* - * Compilation: javac Complex.java - * Execution: java Complex - * - * Data type for complex numbers. - * - * The data type is "immutable" so once you create and initialize - * a Complex object, you cannot change it. The "final" keyword - * when declaring re and im enforces this rule, making it a - * compile-time error to change the .re or .im fields after - * they've been initialized. - * - * Class based off of Princeton University's Complex.java class - * @author Aaron Gokaslan, Princeton University - *************************************************************************/ - -public class Complex { - private final double re; // the real part - private final double im; // the imaginary part - - // create a new object with the given real and imaginary parts - public Complex(double real, double imag) { - re = real; - im = imag; - } - - // return a string representation of the invoking Complex object - public String toString() { - if (im == 0) return re + ""; - if (re == 0) return im + "i"; - if (im < 0) return re + " - " + (-im) + "i"; - return re + " + " + im + "i"; - } - - // return abs/modulus/magnitude and angle/phase/argument - public double abs() { return Math.hypot(re, im); } // Math.sqrt(re*re + im*im) - public double phase() { return Math.atan2(im, re); } // between -pi and pi - - // return a new Complex object whose value is (this + b) - public Complex plus(Complex b) { - Complex a = this; // invoking object - double real = a.re + b.re; - double imag = a.im + b.im; - return new Complex(real, imag); - } - - // return a new Complex object whose value is (this - b) - public Complex minus(Complex b) { - Complex a = this; - double real = a.re - b.re; - double imag = a.im - b.im; - return new Complex(real, imag); - } - - // return a new Complex object whose value is (this * b) - public Complex times(Complex b) { - Complex a = this; - double real = a.re * b.re - a.im * b.im; - double imag = a.re * b.im + a.im * b.re; - return new Complex(real, imag); - } - - // scalar multiplication - // return a new object whose value is (this * alpha) - public Complex times(double alpha) { - return new Complex(alpha * re, alpha * im); - } - - // return a new Complex object whose value is the conjugate of this - public Complex conjugate() { return new Complex(re, -im); } - - // return a new Complex object whose value is the reciprocal of this - public Complex reciprocal() { - double scale = re*re + im*im; - return new Complex(re / scale, -im / scale); - } - - // return the real or imaginary part - public double re() { return re; } - public double im() { return im; } - - // return a / b - public Complex divides(Complex b) { - Complex a = this; - return a.times(b.reciprocal()); - } - - // return a new Complex object whose value is the complex exponential of this - public Complex exp() { - return new Complex(Math.exp(re) * Math.cos(im), Math.exp(re) * Math.sin(im)); - } - - // return a new Complex object whose value is the complex sine of this - public Complex sin() { - return new Complex(Math.sin(re) * Math.cosh(im), Math.cos(re) * Math.sinh(im)); - } - - // return a new Complex object whose value is the complex cosine of this - public Complex cos() { - return new Complex(Math.cos(re) * Math.cosh(im), -Math.sin(re) * Math.sinh(im)); - } - - // return a new Complex object whose value is the complex tangent of this - public Complex tan() { - return sin().divides(cos()); - } - - // returns the magnitude of the imaginary number. - public double getMagnitude(){ - return Math.sqrt(re*re+im*im); - } - - public boolean equals(Complex other){ - return (re==other.re) && (im==other.im); - } - -} diff --git a/lib/java-speech-api-master/src/com/darkprograms/speech/util/FFT.java b/lib/java-speech-api-master/src/com/darkprograms/speech/util/FFT.java deleted file mode 100755 index 5ceb4797..00000000 --- a/lib/java-speech-api-master/src/com/darkprograms/speech/util/FFT.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.darkprograms.speech.util; - - -/************************************************************************* - * Compilation: javac FFT.java - * Execution: java FFT N - * Dependencies: Complex.java - * - * Compute the FFT and inverse FFT of a length N complex sequence. - * Bare bones implementation that runs in O(N log N) time. Our goal - * is to optimize the clarity of the code, rather than performance. - * - * Limitations - * ----------- - * - assumes N is a power of 2 - * - * - not the most memory efficient algorithm (because it uses - * an object type for representing complex numbers and because - * it re-allocates memory for the subarray, instead of doing - * in-place or reusing a single temporary array) - * - *************************************************************************/ - -/************************************************************************* - * @author Skylion implementation - * @author Princeton University for the actual algorithm. - ************************************************************************/ - -public class FFT { - - // compute the FFT of x[], assuming its length is a power of 2 - public static Complex[] fft(Complex[] x) { - int N = x.length; - - // base case - if (N == 1) return new Complex[] { x[0] }; - - // radix 2 Cooley-Tukey FFT - if (N % 2 != 0) { throw new RuntimeException("N is not a power of 2"); } - - // fft of even terms - Complex[] even = new Complex[N/2]; - for (int k = 0; k < N/2; k++) { - even[k] = x[2*k]; - } - Complex[] q = fft(even); - - // fft of odd terms - Complex[] odd = even; // reuse the array - for (int k = 0; k < N/2; k++) { - odd[k] = x[2*k + 1]; - } - Complex[] r = fft(odd); - - // combine - Complex[] y = new Complex[N]; - for (int k = 0; k < N/2; k++) { - double kth = -2 * k * Math.PI / N; - Complex wk = new Complex(Math.cos(kth), Math.sin(kth)); - y[k] = q[k].plus(wk.times(r[k])); - y[k + N/2] = q[k].minus(wk.times(r[k])); - } - return y; - } - - - // compute the inverse FFT of x[], assuming its length is a power of 2 - public static Complex[] ifft(Complex[] x) { - int N = x.length; - Complex[] y = new Complex[N]; - - // take conjugate - for (int i = 0; i < N; i++) { - y[i] = x[i].conjugate(); - } - - // compute forward FFT - y = fft(y); - - // take conjugate again - for (int i = 0; i < N; i++) { - y[i] = y[i].conjugate(); - } - - // divide by N - for (int i = 0; i < N; i++) { - y[i] = y[i].times(1.0 / N); - } - - return y; - - } - - // compute the circular convolution of x and y - public static Complex[] cconvolve(Complex[] x, Complex[] y) { - - // should probably pad x and y with 0s so that they have same length - // and are powers of 2 - if (x.length != y.length) { throw new RuntimeException("Dimensions don't agree"); } - - int N = x.length; - - // compute FFT of each sequence - Complex[] a = fft(x); - Complex[] b = fft(y); - - // point-wise multiply - Complex[] c = new Complex[N]; - for (int i = 0; i < N; i++) { - c[i] = a[i].times(b[i]); - } - - // compute inverse FFT - return ifft(c); - } - - - // compute the linear convolution of x and y - public static Complex[] convolve(Complex[] x, Complex[] y) { - Complex ZERO = new Complex(0, 0); - - Complex[] a = new Complex[2*x.length]; - for (int i = 0; i < x.length; i++) a[i] = x[i]; - for (int i = x.length; i < 2*x.length; i++) a[i] = ZERO; - - Complex[] b = new Complex[2*y.length]; - for (int i = 0; i < y.length; i++) b[i] = y[i]; - for (int i = y.length; i < 2*y.length; i++) b[i] = ZERO; - - return cconvolve(a, b); - } - -} diff --git a/lib/java-speech-api-master/src/com/darkprograms/speech/util/StringUtil.java b/lib/java-speech-api-master/src/com/darkprograms/speech/util/StringUtil.java deleted file mode 100755 index 2a062134..00000000 --- a/lib/java-speech-api-master/src/com/darkprograms/speech/util/StringUtil.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.darkprograms.speech.util; - -/** - * A string utility class for commonly used methods. - * These methods are particularly useful for parsing. - * @author Skylion - */ -public class StringUtil { - - private StringUtil() {};//Prevents instantiation - - /** - * Removes quotation marks from beginning and end of string. - * @param s The string you want to remove the quotation marks from. - * @return The modified String. - */ - public static String stripQuotes(String s) { - int start = 0; - if( s.startsWith("\"") ) { - start = 1; - } - int end = s.length(); - if( s.endsWith("\"") ) { - end = s.length() - 1; - } - return s.substring(start, end); - } - - /** - * Returns the first instance of String found exclusively between part1 and part2. - * @param s The String you want to substring. - * @param part1 The beginning of the String you want to search for. - * @param part2 The end of the String you want to search for. - * @return The String between part1 and part2. - * If the s does not contain part1 or part2, the method returns null. - */ - public static String substringBetween(String s, String part1, String part2) { - String sub = null; - - int i = s.indexOf(part1); - int j = s.indexOf(part2, i + part1.length()); - - if (i != -1 && j != -1) { - int nStart = i + part1.length(); - sub = s.substring(nStart, j); - } - - return sub; - } - - /** - * Gets the string exclusively between the first instance of part1 and the last instance of part2. - * @param s The string you want to trim. - * @param part1 The term to trim after first instance. - * @param part2 The term to before last instance of. - * @return The trimmed String - */ - public static String trimString(String s, String part1, String part2){ - if(!s.contains(part1) || !s.contains(part2)){ - return null; - } - int first = s.indexOf(part1) + part1.length() + 1; - String tmp = s.substring(first); - int last = tmp.lastIndexOf(part2); - tmp = tmp.substring(0, last); - return tmp; - } - -} diff --git a/lib/javaFlacEncoder-0.3.1.jar b/lib/javaFlacEncoder-0.3.1.jar deleted file mode 100755 index 636191c59fd76bcf011a54c57791b37ab385498a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185707 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 z zHk%F#c2W4@pm32+2nwGA59&*K{VrZQVxw;VZN0?y=U?@(+<{;`2|^<9^{O-CzR&;x2r-ls;tss zmtTY5NlUle)aVZ-4+W}`^4hTsBWZFv)Sq z?{-yIf=wLk{9^1Exk_dvduSwUCPQ zu0i&93dCA7%imfQ?OIWJS_ij%y}Awcr#oTZ-Ov5Qs6RcL#YRY9R@H$> zx@6Qm#`toe{$;G#e7PSZOGeEYN;jKSfKuc#8e)uv+mH>-A(aL6AfqnEh`p9KPG|Bvq(y7@IN1W5N-t*|?#EFtQ85o%DAAx}k_Au-vX2A2F?+Dqm2QU!Zdwffnf0nOFo?uoySHb^9ouM76tPziC> zSX=3yu_9j6P+8Sl+t4(vVO8DY<_4VBq3)m96D#;F}?UU|>tX#b!{rz`e zy#1K-Y^5X|lqe%{N82i^dnK!yn`<`CuUozmPDZo4?MMgs+{x>vO#?kh7?c8VG&`&G zZH%d%i{V{v$v&X=4WAeOiuWa?Lj5^|BOR*osp`U;Uw29?B&v5=3w;;A^BdR;5>lbU z`S*spfQ?5DWO!o@1co=%3CHwbw0$MgM1t5BNc=H!M|Oug`KY-|W>!y6Z^nOLy<+DO zRtO2j2?)d;ZPqm&K;};#9`i2E^II04_7_mAggz;NR&4VGG};@^!CQ{MFNeZNK#tz| z*U@&xPdwnb4qD}y)PT6N*6Nzob>5(V^2NyBp8!@uzfQnX*N>n%(mOW}PC$Eu`|`Nk zum50#QW6HFfGfYZJGfLPoj1hKrk(TgP&8L19FhXD`rZ9OTsm@uH_+o3{dL4+)L265 z0`VBS4C%Et#Y}hLnrK?rKb7}qKFYju=W0G7VRTB_U$yiBekO4kOuYJdf93bT{qp1S zA^bBDWPMKjb+la_IKZ!X1Ag=EI^Rg}vxL;KQC`p;@U+=glY3l8-Uyyji&Y14kYq^t zu5w;_gf}=@dXH*tS<@QdhAsP~KzWq{XlP;fy?` zB&3dsf?M|w+8gHmSM50QPTE(39MVbrb+oEknR2){tVv&IW>2dE_Y+c))+3L3 zz-rznMzEHA{=z^iDWPAYM8q9!<1LPMK`JG?>6<2iTnhx=<+^X%<-RT8KMASeZYlze)Ucw4F7mJD53jEj6{^ zJVV>Kl^u|hx9`Qd_2uht{1wEvgu#ig5O=h_S$RMo@-F``-po0-jIv8e9q3<=+z(iH zn$B!o(c}&K*sq?Qdv-u639MC}e-O`OyMvxTwQ9#c~=%j^9ZS(UN+eS z23vq0r}c0C_D1_FfRd2fh~atN!F8^iD;id|;#3|RG2S&z_w$*kYDe4Pr5<2Yynd$F zINg(A7p#Ki`-au&&d$4l={{$=fKFK51JEQ7H0i}mw4JC1Jw3onh_tLvSVx)Mh)jZL?$Bwr$&bgEw|Mw#|-hCmq|iZO`{l&D3mXb#FbZvv}&(T^tG} zF$sER23A;#(aX3(ST15FVn-7jSUx^RIdca~H!EW9{}L5O32Qqya~EPp2|Hsqb1`#M zM>BH)0a#Zz7jt8KSg-6UeQ8&M(S+DK$9If2gzb>og=WnU%87f@TC%wVr&XQ+Eh$9l zfI=9Z+Z(6Jo196V#>$3mpI>{CFodh8EBdk;$C~Zx&o5LLqzW3JY2UqGA8RjpU!$DQ zhr>GpAKzjjdH4QUj*7r{cp&=u5JQ&gb~az=d#>&yYj-@EVb84-#x4Jj~>qrIWO5A+ZIQn1KyMUvD#Q_o&3F8CFk22>Z{!y zLnHeek+9B1ySdElOFg{@<^6F&rq|KKMn7Pvte5I$MdK&N^XizrJ40h2>gutoi8`y4 z-w*CfwjR5&L?LC}NvQ;kB>+M9Gc8| z5;jCiOVa{&YiC*V=KSb`2~BT3`u4lBbygi&gy;P=U+wvkkB>Ug%Q5i&qLkwZ!UM@Q zNS*8J!$B8)QemFq;-dCI3>^8UV-r7j5f@7}-F@!+5I$3aF5ebP6qk|+DsN1Q>XF6M z8W}x*OdiH^RdP(oU~ysyVqB*|j%ZxH+mp8oEG?8Cf~oRO*GTphvxJCC{hg~(@QO_e zL<*&;49j|XsqZ~b^GQ>W`Xr!}zw6Ry*vO=gkC+|LseAk;fVz8|yGtc7j!mFVCZFwZ z!)6!H7vKGFj>qsE!+hty^@sOEf_-eMk^$#m%bDVKc%*ehaLBgvG%TUaRZW!_zuB^& zkO_w!P_&wY9Z(RSAg!JnJTOZuIYlk*EA_fXKUv^v)@zf*uqy(;0w(8oRSqo-R%9Zkr+P{3#xOEc`MhHfG@0y(-e}n+BJOrdm_C5M~1E> z*1N`6ZI2QzSk6V<{odIbNSvzJ-4-=rnvAKXL%NFpBnmrU88Q!~4*Bs5LpP6)>O*sM z*n?3A(*tBTX0ak|bKuhB26|zTx>^|Op~;goPtZT7nF^#XC% zTlElbPho@*#ph;oT8SlAbKToOj;l1Kej(GXW;%{f5sfctUn-HGdvJM>@5b5HaTNGl>GrE#D6Q4F)k)}Q z<9^z_y#r1Y_*6mA=s)qbf7D@j6$YiCr^>8KA6JV!l+T$qRdP4 znX=1w)WQlFvuzlEtBft1Mux7V7x_g2a&TzU?QFLEw6y||r(==0zHONn6fmeeOQRjg(LWq}M9ft}NwOR6XAT#OT_uHhw4^s;f zDZbHk>v_9cC%r!^#RO}#@|J6SY^sndmM3cjJ>rw9j3q7G%FG(g`@L7oQk!*b0i;NT zbHh_~$W5zym$^DJ*I_%83SU`8h^Tcki#HQUJ36Mw5Orvn)Cgp8Fw!V5(6lJALkEDd zB~RkI5vWYOPG*GpVgJPrz*d4z;$cmbD}#ya>ff^(DqQHz)zEu0-!u(Ta!#*fl~%0z z?huVw`?VImxNFBDbf6QY}9M)ce?B`DOadh%$@ z5l$9nfwB?Na_y~>Ybo6xx=P@Cx5IKOcVl@dPq(_HIOej>tE>cY7`zM6aVAtA^k_*| za9aP9cR*L)EBVEJt!HM271}DcHhj+0Wm#N_SWv@}K{OY8jW&fF8ly@+_Nf~xSM35q zk*yy7o3M9{Sq6b~7vcnghk|auF(rj6HshC4in#Z*;xN&ut?U1uAYD3_nFeA{FISagesm37Gzs6;PR7ms??PkTmw2w zZr`*Ju!0HV^sQKx_aLo}rP*PNL`CJsn7Um=Jb7KGUV3#g(sL*<|czXWl!w>bhQl zi73`eBAl?WO`fabjac3v<k4Qi1urz+*@&`pX@0vcCjT>+?BAIUsXfRB zpZy6ELSw8V3xWLCD(o@2k*6Oeq2$n%CWpdl2u)h=E3M)ISu#vFTLUZz8O*^y3;Z=) z`5iNhwo}D(p%0Z;oeAile*4IDjjyYB2Bi3p*B}&h1o^`I(6O<6J2wLkBK@hJ~h+9k&0|7uo;E#6uyJ`D7s<${)ytToov2hcoN7TDF z>;&j>#r`(rTTp)$7kf!ShGJhlgYdE-h`;Pb*NGK~*{^D;d|Mj6>`ngPVUj%q7|B_Y zb4I^1%=Lp`h|U_q$`gMrEknaql`sME={J2J_zWtmyTFHrlze+WP{}~H9d#Epu67;g z3L7PkTW()GpQ_!?2(ETpHpvF|#i%wh9n)!>i<>oAhN> ztr;``k5EQN^3;;s9owNs@hG{d2Q4iaA1oW^XIh|tu5=_Y2)ip0;vIBxM=ygdU=P`W z(2V0&j^|UFC_yo`(;)bn1Hay@c>L!l<>8sCNrHx-45-Az{K*eO2t~~7^$QENB_0~! ze_)H^$7?x^h*b(*(4L3q)@Nz-R-gpxY<*QXy0_bh0Vn)ddxZugt=aJcmzLK0iGVuq zjre+V1$Z&o-am9%YsBzd*5mkQ4rU^wtXCn3!h*sKTxc-tsBuF9DprzNkgyC@Zo@d| z^xl0BTUg8@_011GQbA1BGbPnn#U zWe;F8X(1}+XIql>@#;?TATC>+!?Og9R${X;9?qz9%tfn!XQ)%3^Za)^mY4*Uo3__$ zOj2%UVQ2Q~>7K%?PdeK@cNG-bNZ$hq2d2m$y-s$in~qVOjY$2H7Ufb1f7$8X7z3Fk zUDTo+bK{sWlcME5KNYO@O|t3-=R#<$JH6g=3l%Ym#akd2zxYEc`i;6EO&(@!tGTl) z3%oNziGRkh7hIjF%G#Ybr&urFcWWci_*b3Y^%Av}$*erEOFD*9)Y($`PeHx0Lsr~j z(+o+NBc0oa_+MomiLWkkgb)lM89wmwLsZ3<1D5IQ8V1rv<%-l8+Kmzr^rCWl4&Pp4 zMd4qunqPJ5uX*#W*e#peeA$Ri#9=(eYFVVesDt3_Q>RGLuxe9PaP)PuFek~=9Du+r zPShT#W+kne>-H2Isu+ZRaw#G9>r^0&wEF?v5atG634fauPT~67v@Y=WzTsI&t!jPk z108y0sM~WpflDdr(M@$5$gEoU@Bt40uPK&QOA?J?rg+J&P~^jFkf}!z4_i$$S!(-I z*nQEoqq-Ot5|A%*Q$^d&SUD{eKum6EcN-Ja?gbMkD)Ngsp2^KzC*|)MJ^V|oJ}wJP z;k`njy#!hJ~!q8Z)dEqZi8n`jMP;cCetc2ry=8EkmSDX z=n}ysW^Lvix)f`nwOom&c$_v3c9>_sWeqrra1jj%yq$hh00-MZGeo+hoMI!?60Pef zDHOO|ZVkoF-aOTkh!8g8srt@&fCXZKS@YQ0E)8qA&xnw)m-8BQ=lCXOOy;TI{K_K-R_5)uh4 zLQP-T9y08$;YDez;lyfxB0?4nNln~Rw|611z%1_4FZy*VI?$RJ^*Z2yRfY2KJgdPq zRO|9g%%Fi+@yuT%sY)LR4_FMm6LVps{oU|VeW680z&(X5?5PvXO0mV~*9-vQJLATddK6%EqB zZ%^|(GSQ`Xjkt$NaumN=!S84-=$he(Ce9LGDNm$@M0IS+dmZEQk@YZ+zV`rCT3

    c;cUX8KZ)xbayG|JmWCL?zV~CIJkBkT{%1K;VS&?tMgKt?V409_Q5g6hM=5jEqQ@ z;j6VuVt(CIc)G%0w#0I6o5z}oZcv#~DB?eA1Mvov`zJPVWBDu#;`9hzRGlHwpSoj0apZ;Yyr?BTNeD83H;7>MG%!pWss!+TV&uz;_#Nv(Mzr1FZX*la$ zHtHc)@%Fwu0WSi|buhQqg!c*xOP56y3sOA}t0>G{~SW z$}f7mxtL|yPz8>!-&R0@>uB}z1tyt)iR* zvh-R2&2$(8qk$4_L4XO-W)a>o;}nyrwU)L<47-Egt2i0b4u|R+)yR7nddYT^D%N$T zYrPl@jYMy6AVr>N{)wiqGa|c;m4=UwJ1W-Fhcc3>hpRA0rjH^pNY(^E%p2Y4+kx0> zB4ZBhMYAGB)b`FYBAlD>D)U`rVKz@KR|gOG(mx6J252PH=&OFMw>D^g8#NrQh_muh z;TRMF#?{SG1Bi%cZ0gq}7{%jkO2`;MFlGDyB{kmfcS3ebUe&K>`u1S#F>fEu$!IEs zcn_XC+jZ3kA)d7$R>@xV+2x&XTI#z(aXz5-SnYCg8 z5$`)Y4%*?d=4i~AiguCK%2yWK@0%8_@%+tvWY$Dg1^fIE^jmb<>=)(vha#9}j(rBi zHA|INPfQE(2KK;35L9)_n1xilevic$9|Z34pGIfB5FRQH5eXT5g0OQu&RYU1lIpb- z_Q`g?q?lAsJzY=ye_gvm7LU(paITfun<#0j|T3YZz z`b5Is{rYD=z~|?b&c@?)^N#PFxVg>)Q0l8kw8oN#{ocHQ2xRG?U@Tqw1s|I~_&jm#?B zuswJsds+(h=pv1mDMgE0%9&ZWLH@e62)!aXi6i2j z+1sWHW%w`ua2*7{WEnvQx--(GQr;bu3r$Sp&|L8G{O6~E)+J%|z6mF_Tvy(ou@U?2 zt{*=d8UyCHUvLFxbI^ommHd~27=2K3;dGj!iWx-X5ODb+OF7*(3q29t8tRbyzEsfS z3)uUqhvhF(>9JxQ%A_c8>O^VeEk*13>}R}kb5#Q($E=QurF)VZ7d9YFxeLaL5Ncqtqa72A{(n}mZU6T@q&*sJ_^073=Rrdv#zZL^<=MCL+sSrd?A5EJZ zI1q70r`qgszTj-J+&`|%4dhcYyCWlEXdf~Tl!OH?`0XIi48*~dPhy~Xn9uL08e!QF z7FV9NSOKY1){N8iUlAeYzVr3`-M!O<=6;KDf+yI|Edq8-2s(+~)k(8A6H}d$A!aak z-BIng2xA>t*&R`qvy=q}4a4z&!Ucl`%(lvgC#kM=JR-}!u|JB-Jh+J}PN#)&d6Tmy z%iyro2bpjIRXBIn(q;*{FRY5sZhS>N{A>EtVULr z@;c>3!FbcZ-clw+Yk%7=GXQ%DYV?xX@*pkY*G)%fB0WLu$} z3Y&OFk4$rNzynZqg4R!+@vTGlFfb2cDK&GIxh`bD5$3P`6}h1R|7^^(F<>-PSZJKr zcuUmEM!kQ=a;Q)^vWh*gr(%$tF`?gInQ$1u04?_EW!%Y>g*Uz6T10>FDN3-Z8D9Q6 z@%5;(hb9|puyc6u%-5_TL*LUYQ)D;`t9=%Qe6eTVoEdm9Qb;J%CYZMT@LnT;BsL}^ zVk;Uo0O?t+khcWV#AbKK5_-M8`vDi~_F^l63cU?OW*cs(fxj}R%c;QNg(RU>We2FcU3g+XW#)+#p7g>NP|OaA4}`-u$FIL+R79g>bN1UY~PGN$|t z%6y5(T#QDR`Rd`yWpgNTWJplxK$XnlV^*HJf*ogA#o7oi6<4BjZGME zWltduGu86M)3&#b|DrjvHLYF7KImd#ZF5lKBjjyfUhl1R@uX^hLyBjSO7QJ%V?f>c zmEfHjXFU-I6m6zkx;?Jto<6d=nldK37Kw3rC1zFQh@JLx&hl{WM=dxbh%3I|(sF}y z$dAY?C~V(o3GuACToq8F-rJ#?s3HocO&ZQOBiNoNyX1|*q*sai8d5yRibpX#adaKO z1*ZiYZ-EIDUH`5Qb26OaS(D&Bc2kXcxRPCv2NO*0t*iZpor_G57inP4`xWRi2UoeO z#x;YtDbpBr|44amjfHB{t@9UEV^#V=lE?NkKV?rD?cgb+$HU|Wl^d(!23~`4#k8-l zRIxT>_bNA8Idn%Qr3rf23B8~Sc2(9Vs_fobM<6=5mTD1hM@hxrFmnAaUF8sK`0!hB zw@JkVIJ*cGp7{E#96*N&RWwD`*WQIKVr#I;0{0Qnk2#eT+uiV%UYl68G6m@kIa7d@ zw~dfU!_JNNxO0-9ls^$E8j`uN!S)n*-A&F~EI;k9P>aMlrx7Hy5P=Opv`tFfAxbWu z=F+}N^50leE5bR9*&VXfy+!QEUYb4GDsxLvq%YtR|0WNhsLd-4Q)raRaFCAuA;I2f zB>}3bHAeGb_WT=XhSci$$hJ3LoV~kG7sY93`0Y5L|0l!xsXw{8o_^Ynb%oQUYukn- zd{oV9$!ox2tNi)NAEj;5kzRW%)e9S>cf~#|Y0WswaW5SK%`|pIx(T2BoSYMvz z(~IAcZi$;yM$HV#pQ$<~re|y;08*nbrkeX$TE3Nw=}c36R7;s8yF=DZuoAR$L=h@0 zqach7G!U)opK|alE>Q=0z`PA<25p}ADk_fh2XfxGEJ0wcy`SdIeq;W}f$gETa-M$s zii!v%i};+;v9wl&&O_V6g-KokQLv^`hm~(c=f+$g-h`XG(-K8wgSC#l2=Z`LCII8v zZOfK)Iy5LGF1G7vmHSOy0ag@_-mdDs1MQDz^lz$@*yVS7}q zi#S^XFQ(%)brX6LKrl>3#BFVI^)ly<@>rpYZ9IgU14!C^PSI7_S61=ht`zy(JmRKI zq~feeL+93P5+06$Q#$B=xT-DHbwB;PoyAd1N_C_uCAtqGlUz|{R@x;^pIb#|#aH}e!qrl}MaJe<~aD)tM)MPZt~ zc`d)4ZG_n=4RWbpf4tyCMiHOSamA`S1S;su9Iwbr6zU2dB{(E_7Kp?E4pd!9UFuHsBtIm+)#7^B<4YEc4&4`j>dA z?l~T1#?c(Qy);%gw;#Qq{UZ#|$s_VzjopeZtP;~uM*K>0?jc-EWOPo4f0K=Wd#pzy z6Yw7H@SNIP3sH|O_F*=XzYsq6++GD~YXbHNamG$0BP7rei+#OFHOU8SLn8oJ%aq{B z%+#^*HX3mZYDFOI#T%3g4az=eda|M1A3T8x+*joJ;?Sb&Ijg1kMVD_%P>l~Ba{#(T zGP5E8a|PU$vB);u!000&^p7GAU%F#*O2(e8G0m>K!B;@n-4ajtL;v6e$X-ZUTtgUT zyIzB;u3U}+Z13`E$JYw{To%+J&dUAH0^5~eLG?0!lc6J?ad8E$LFixU_E=SoxGB_` z={+iVIDuVg4nwS`prB1Yw@m4=MV*t-ZiETT0rw;G+nT3vAKvLiIP$$DAN>?E&d6RA zvLt$tIcz`YgS{#a$yT<2I7%qrd#r}6zd`~M26oTiAHYQfjQfqJ;`&l1>q$Ika>85D zskprGe+z&JUd*QTg|h;iST~=kjY=u<&e%JI6cf2G)Uf`MVxLuy^}csHv$R$uV!Y@*r zEK}^a9VUn3Yp@AX^~ZQV{c_$9Iz-3FCt48emewbyOd8j>ax@$6K5nRH@;j(;nq)RB zQDw+Ci2Kg+hd-N* zjJk-P`{df_ZTfH(g-z;b3`$G#1rd%GBtWV!XhyEbyxxisPPWWx%?8ewaBmM348zxd zSwoXB3!6UWk^Kz2M{|)|f(1VUVH8WPJn1xBk7Uj0nr|B5Ptx)gkL z?!!~;PLT4ZuBvCyQkL29kylG7(pNJR=tN2--h|y>Qa6H4Hga8chU}uv{`Jcct4h`y z)n}a5ePg_baU~@3J3=i6zg$uQYI7wfv9=vec+?k*O7Not*X^ezSOUb$Pv7_a6(az3>pl-Ra-<9cBAnSB{x*h4-8OasQiicJcOEslgN@ zOxNuwZ$wgdxk19YhC@^8KUYj^8~EBM4GFAxVAH=U1g=$DLa#SREjh)$L(51+k#}=J z2sNQ-#rD}F0+(IbFCHxdI)4U%&91T7`sdjZHtX(2$SP6^a(4qBKb2Txr{CheAtYf3 zdptB}7SeSE7N);P*Zf8;Y@be)qvEK(rbpntZZPt!oegQG3FotxD5SY1Hq!O-q8IFF z$sIi$X1vVo%DZEi6b{a7Hk_MRr1z4k`7QQ~y{!_Kww={w<|cb2w^kQWv`HJ8QtHB3 zdb)w5noC(LhjMdi!Oe9#2xK|+yGUct?`rWMlrOxaM6U~VM2I94VmXB=d<%i8J{|!S zrDQL|ur8U@s*({x62XMRJMn{MKT^M9Y5W%<7bxAWc;sx@N}(BphV&87W&cu)@)n+q zR;mPP*b*-{l4pau37PZl{~DWHgCQqeg;=fIPUHS8c#}NlZ$9aJzbCPL)mHr*MRpr( zYh3@`^pJ05?+vG$>9S`_>%Y#uOKhHSg>N^tO}w&Z{(z|UoHG!hJUz7k7hcy2c>55MZG&-ml||svtk6N5dUxRS z?S4;Uf2V};84KsEyA90QMg&Z{n{Y+ht^XpUHq2IDovji{McRWsxn$XUVNvlp(EQ zi{%U7+zYmT&zi~o@}Ua^Gix4Kj}k}n%Cy7}Yyc2S)n&h2jlt$Ln8spGl05Lq?h%labya?i%vC)i70gu^)a4cSnmO9x~7LFp2S zSXQn@$dYbm8n<6i=TOAuIYecvI=9QMZFt385j%ex==@eSjVW68^DXD0Q2<7*Gx;zvV9Q6NztL=^y zF?TTgKjPbe+yBUN|D(wL@5#-<3HyIC=KmZ1Ka-Ay>HkNiOYUy3p_EOeEIm=hzrzgV zLF?(PBA37pf?L%`hju9@FU{&}7g22+^7H9fds#!(UOS~Ljvu{zxxF3cXdOP-5y+jn zzxyZn{qyzW`15?VBM`NJ*?ZIL|M}wo@tpTv(G>Rv(AYRQaQwN#Bcvws^Ur;&ANkz; zI&kdu{}A;5IO&aB;=5@5Ib-zS%Jchc`TcD8eZR8&eA2k?=nr=( z_;pnKweR8ByVT2xwf=lDzW7}L#_4*$7+d@Q<|*y~w11)%{FA>oevmI- z6#cDdPW1P8zE>W7AK(3vJ01-}#0-8Lci!gxJm2;D`3QJ^y{5@3|ID;L$9%PqND3bL3Va;AIGR7bX@fpI zRZqI+X<@mRt!0_K6CAgv1Hv28RYxrIhzxcvGYoL~R`s z7Ad`|%B*<7y*#i@cwtT!!~W&G)!Xyc`g46PyJa5}_j3~kzSh)e+q?0)GVz=@v-N1t zavGv_xTh-bNElPM3O!nQ?BK$z25Y!5SHxk|cNj5NtM^Z5B!K7F^#T(?cRA1MGm zH?U!$R-V7J?+YmlkI$20&Q4r8e2T|(y58;Pn+{(LK$Zk*sblN8M@DZH-|)LFbs_y5 z>64KdmhZ!#G_K!}yd?4xq|;n~@>YvVx{-@6+&-4{J6$@A=^3pj;48azmwm>pYTj3& zd{}CTQ?)UTQ$noMq*BPgXq0)nk8?M==JyXzWRk!X2Xo^0^)hDlaLdJlaM!)WS`0_1h%RM-XT?t zdSb<=F^qrwdlh47S-wnaQkaW}<5RIPFQj)To*Ev~dc9Yut~cH8bbl7@4Lq@Iq$B9P zMXXK7Y-lasbUohM>SDD@k;?rdmxvwLj!+6pSlfH`+QtdrCOz6ksy{ZLUUSeB^y z9od&93j>0UX(;Rn#DC~;7PZg7!um^PpzKXcy!(H@*wWa`wJfg~I52t%<-HO@h4H?_ zu_!(J!s_cm@Z!GOPb_GnZsKqpaOyiXDJx_a2Tz!KjWb8{Si0BD4sYJkv{nb-Ip_ye z#*n}dz+fs2T3*q|4Ej9ap9%or|if+i0dxUTgJSPW+Goq)sEdOss0qL`1$fM4!9b~`4j5NZWJ zSQ1C`<_zqAO=#?;T2|Axp5bzl-CIUucf;myH>yP_{ze`w46~^a4|iIDW;%)QNlPf< z&>Xrpf5NnT?~%cB4*ArsqV?SmseAYwV&cIDx_BBcK?W|1$B&_P_xlllBd$KVs4?XXf~Kw#Ptt|ffhE)`y`akk`vZIXbN+|P3bCcCV&X>PSX zh~7;uNy5!)9fveBRAT><%^8B${(6-=_6!FM3GR(9sjH>;HlwK->L4ep}?_)f))&x@SdKrg{9q{)gXBO%H;$@rveUBDtN8<=cEoR1r$Bkb<?@_r>7L^Lk%hfPx? ziV*A-4B8@$cV!^3-7Y#&#;Kke=QuN8rmGc7>Nc2aBrGNTwqH*3B$E8ocA|% zf;7AB!!xFtT43jRS?34TZRIM`c++o&i?`e6XU~pgU%4)93pZSxKpGnon67>|al>_^ zIY?cO+>RJW8o}&Zd)(bmzWU!;JP}JJV9dQnqGNq(iiUgVs6>#uctrB&n`@U9hYG;J`u5dXjUK>U~%QWR?eQbNy7ELV3Y3J{SmMe zw6vvuuMN>oc_2|Dw4))aCk6%p?_5EqKjt@33_{CNLfsuavr51Z!= z3&iOdg&zVb$XecXvWdatA21GS0X2~Ztgn4;o3}MzaShjB~+#unMD`3qj7i-K5*>nrRh)G>e0rX(J%Sr1pY7LiVqfGn|?mqBOf+gdKq`XGq+L_gyW#Ce@_Z@jG_VMLSPz-PTrt|rB?OUceq{UlKU`& zZBNrjvdcaLc%#Q=U50YCV_GL1-~3VwU!nhq5j@GjS~on)T8g$5Fx@(H z;L|UkZRs!YCmnhziE z>)3)LpqOjO9#D)s^l(l%<0WM|Vho0LLa``s9Kln8PbWZp%PDPl+6(8Ja%R%$#N>ll zUZ`VBK`i|$EPn}@(N$yC;u!g60Zd+1Q^bd>--EYTg)Z7+c4+FF8V@* z-2f(5bfOZ$v>+p);BEuAb{wiZrVcfZFk6!&89GldQYhKF>beOFrc+DJ^;oo zv73fhIkt4#ORQcuh%hdE$;drbq^BCLIrLtzYqX$<39Xp58ET2rTD0+AhIJYbI8lut zyuj6(wMLf-PRhZ))z8yL{9#H|rbp>*#bGc`Owoy$s@u8Un8%`5as`ve_3Ah8&0D>u zEZpkZmiQRQ{Ge#eg@2xyV4ZYs_^=)mYW?#GBNzPj2hh*9nuEP*gq7fx*srkd8l01z z2LG&@)C`pNZ#9cHd;?0fEQikJqs;E}B{2pxGu-=K+WjZm#xwy8|BjDQXjXP z&|Q}~amZ@?iR*<$YQg&hl2*kU*vtXFrUu?dkC@_5#eJ?|H4Dam`+>%X^n?J-zI~)) zUa2y%rh9FsYDiBCJx8q43GAL0@9Q~P3Y`TtytBf&47mSpQ(3OyHvMDWzEik_tJY4! zd-BuD->Q&`^hm;TWW?US!p!E`3L^!|Ko2J?usOY{RqRYPtz4%Vh{51lAb&b7-1qFS zHrRk6fDBWn-G>5@pCTH1H(^Y9+x3DZ<1XMF`Cyezt3p#U70NNZbXGErGWnuG&p3k50%J_i{hEs8xzNh>LC zYmP`|tN%meMt~;y%|E>tR_IYLnDp@c81B)58k=}PhnOT}iO5N5;sZrIW2AS*Fqg8~ zYbn>Sp`1Ml_c4J$e}(2Uu1ub&Ib$Pct$z|m<}pb_yH%o?jUK4u)% zG=6BEPb{2>aDc$ILUhvkMu@_$t3W~51TQ$!3Q?KMsg(QIG8C7rW54<>Vw=JlhMp9` zpr(#Byb5cQ0?{l-K|N0l*NWCl#pO?e!-TIjUC%mu>W~2r!pcGUpzHvhFDPV;w_*=V zsm!{$+{qaikjL&D2WPZURir{CNSn*c|CF2~@P?V{=L%*f_%?lYZ!F9C-FukSJOS}a z=Q_-k&RXa_K-p>=7Kdfu@w}|-)}_;t4LMXNb4fw<;jWMLUyPX8Nl4!Z88>V8`DdU% zQH$oU!RpuX^buusE^vERDzdwtjmBOUzv&_C@iXzEajy!-(YAM&$`7c;w0PEtm&v%0 zcr%arqYR^Y;jq;s3LFYa;>c;?qEYgTtvuu=bi9tSWg}8l$C;h0S%Nq$D^MWrfSBB- zgcLHX(FY7<%E2E =JPHaZ2?9SNh#1qrPuyA#!4<*H1B)3{DBU0@6^!HOlI~8z9 z7wx#!V}f9jI>b-zIDXta*)G}o7<+5oNEkFH?@~U@Q^6P2)L{9h85lQzpbYNvvQ=G} z5CTR;p=f;T1ZW5Dhrl{Hb*w;S&I8Y$?+{5|&Z5+ftteve3-n`V0|b;wRG1bR|87M| zjfE1OcT~4b7OcUAx7aNbY@bQb5gd!9NnXj1joCuld<=B?eD=JQ0RY86{9Dp$!oC}z zm>69>IO5!yOKC=)+SnFJZ5&0km_Z#kT9r$PsqZFq!ALlbC$r3U9FsX@EH)V|RTGO~ zMOg(NXrRU&ITV&h29se#$bt355no2U(jti`ox;D;fJ;6BlRJ#@Io@5>aZuc)_sguP zDB7@%Ng+gxGsX>YUDqdW{Ndq-+Z;o>cJEfh+GTjphv>opk$HNu>e~T=j5XaOl_1VR z=UDDwMY)lkWWQ@(Sai*FJ)b_?=)TB^;0Ga>pb7t}s5Z7nQZ)tT`T+tcO0p*h49qNV zQ?eU_m%bofQIB_-6k#M|ejEm9P0ARqWP)N&tSlbENf-s~f^+4t344je#bUw$S81ffevez(qC`oUoZ zhp;t12|LI~`VePvDT;-GSS~qUqncW&DEGuO7p+m_wI1a9CFWU)gTa034nWe{d!{1% z5_0>IFrp`NN1lX`XMAINF;_z4Cq!n|)0U+9_>x{^Sh^npx$&s4QW>v{xKf`Lr(msp zc&H7UA*S}+9;k>N@d4+VOq_pvI-na|lZ8l`(vjZuoh;a41I-4hE#8Na9&+XY ziL+Q034bwyTE5A&G)6HgSc)lS9j?g3B8X_ql((4eR?j9qlmKYya@LhKx- zPMd$XP4V5WCeF0&+Gp5#gedNQX-Vi?+`^&&Wj|Eyjv4J)}eWG?+~ZiaZ5uhx@3 z`!a^ta_?Fvi5yy^C!9=L^(&&p(?vAp{dvPL<=!>qR9*EMqrJTo%+_>XlC=;%Ku>Z;A-a<} zPh?I~6~e*Im2=H)D(5JN&IVCTE~w%q2^n+Ux4WXM{~8(0AsyOdjA&MAFGj)|y2*^u zPX>!x6Z1p>(AnZnL{0zuO>SYA(isNL?(>l%pqd^4HBAB@l0AYJE| zV(S59I1*{!;BxGoJ~kwgef&@HuxW3xv7aO(ju`C&_t~iGBI&rp`cR66n{cMExPu4#ijGL`rmfb;6^F5n(oa@h*G0& zZkL%CFu;ASRYTD-=56ja1kYmPd_H{%$Xx1YMJes<>DujUh=Bzo<$A~V{OS6ji-!+UjUpyW4|ujJzGgKXm0#6 zF}*EIlm^P3W{Ip_T^P&N;zln72))7MS2?JmFb^+0@THlX^#NvJZa6tLp(%kIHQSDf z?VP9qOo&SF70z8R@Xz<}XXgg0m0v9mm?puHCiTaV!DK$Aodzc}E^&bPLt0Eklq?D{ zHx6^9<8aM|kXua_c;GIco+zcxPvq{RlC0DoYkK^T2gt=-R$!d2Gkku0fCxQs23U^{ znh52sU$ZT7w~OhcjDdBa?8Y3Q7X|`dPo*ym9aenCR0wZ=@a$v7jAZZaCkqfI?$I44 zQ_fclyNrX9at~gl;VMHID5(rij1oy1Zn#NHo;)>)EN!y3_xXj@c_J7JQQ!hy2g$Vg z3ZmGB2N{Y|UMoSbo37J}giBqR&f}J~h(vpAx+UlM$_STcRk)em-*Gs0*gXKmqzx5* z7(Zf?xAsT)&v%P?-YxFHUM)7{XoA(aO)w7y!iP~Vr|^vAS@LB{xYfDL0X}UevcRUp zxDt8B16HGCVhXt7yeAt5M@C{in<`;=I=AUOJf}L$ zY%0Y(%tBBpbjQj2F9fiVEQpnJ;%^MgSvHkoQhwEiyQj+ou1u(RFQ{XfO{LHDT>GUv zRE8^H-Q&VU{n0=bE$2EZ)l?RLfzDP+pHd=w0?uUT5B&SEy@J)0mQIy0jl*IM6L+&n zymsgPE@D4~%jd$?Z%$HT#`T5CvlSR-PbIqh<$Nj-G!tGmp(-%QS5lg=1ng13Bqh>W z$wrl#le(nzJR@OB`EHkwNU2gztu42hFmS8`reMVjnEK*Fu#_we(P7J}N*GO7iXM>9 zdJ5ae6v# z9{TAm$;RJo29CfzVvz}EUR7W$vC1*@P{eGIS(RXBRzaH3wWBtt$TYgB!0?l{^swV3 zXBI66?@nN5m10I*8lVDU^$b^*7P*7TG0d!jAYx&?W>)Fg=W%NRih?PcwNtf3VLgS& zVkx~5T#G9Kz~51ElnF3B@$bR*j!mPH*;NUnzEPDLHEpY00@hv|UkZ<9AdQkP0Ta?G zWqP$eyas_`E>$AHS9aBvcC?VwuyEYJV8h;sTN5%{`STxfX>j3Reyxe}DU zXa`oesl~P!2Zg`6NTth13S-$ogmL76UnFkEM3DA^Eq%c;TPemiQ+z23F=D}TBp(3_ zVD69~uhCUf?5ubSebzUfU~FNR!!YntMue?tAlh~?OkDN;HX!6u)sreXFHz6zjXGYL}4k zJfoB~l0501c1$s=L`I$($W+tw^YN>uvll>34aOYw3B!=%*@Nr{ zo_PFX&2GzYaj&t#Kbtj!62&gO!Gy3*dowMKEn4-YH0|N8Q;&1Ca!}_jazlvXD=)sL z$$Wu-W*iq~JN%*_ssz92XF=As@h&g+k%$5;6a1i_LBs$O{FwAG%tq+gwzT4^S$#)6 ze%vM#ZL)w`Egg9*<|GhOd?E!~nFz^M-ePEWmbrAx=pGv*Ticc}`c>pAE{y2}w3&qI zh&w5@B%p$AMaO5wa2;0vu08=wq?80kZy8az&NwvLJ3KK}F`b7d6 zd|?2Pu*QakhLHYd6)ls?P~4uO-g68cq0yZ>Ld#;&kZFhg@Q_p(3MiXbzE$K$DWd0N zQi88C{^Q+3p zrpK}L^I|#^0@QN9@L&}LG+!;aUBXqPBkZInD^Y%m*tomD72cO%%u^+!HsxZ}CvLWd zG_MbDp|Npa*b)rn3>)y|slhSOo?n5nq$BIon5p``4r(rF9}n|qNZrS-j6sS|@p~TJ zbU6s%Ii4s;m`}Z^*mm^)@E&n%CQ~MFy(h3TMr$ zm*ZHAbmavEY`%{oVa$mgy~2rYy2tH>9ntvOO{7|i`J7HeQI7M1^%|iU<~g~AI(%~r z9J{|Vbt4VEoWj|{RbF_(i(f;bQdJL5%p54!VySU>bx{$ASz+VWbBp1HL^95LSLI=t z3}%JM)x2IN6wO+4A&C?WeZs_MqYlb~wBr#gm_HkGb%$+3xjHE)Rpyn+TNYpp)nd1v znYk1gJN}xE`58u^qHH~hr)0rq^2nGP@|!9`Qrg%bI797ZAMjw6h+|+`ePs;NTte1@ z)2dw;f(#Pv!!kTb=yGL8$|)%)l89*3+NC7kB5u_|4-Y-c-He}o+zi%(q~Ee5hNsI( z9BU|AC%3s6SC}N-l+Gm<&pV85E`D{$a)H0I&6}@TN`pa zW&arR(FmLnG;PKavL8dwffuvn&=Quwko!RJnTxX3VL5c)@!m%^YiNPX-(gJG;2{l^ zygF`@{*vF_F1_HBB^aH2P6L{FNygHAVRiw=p4oTcPwrK&XT0N1FW#^o(%>=%6R@Xz zj@EB1gS|SI%7z!q`NN9;lDZob5SLzxR=#nUt~p^CT`FBBD9V^N4xMt2*B$}O6I=2xQv*H1 z4Xu|GNx2U@RQG~Ba5ST0h-XO7tx|DN3kGo#cq(nkzzjVn98%0d{Mp_>uFxTAw#v{% zMw!IcD8Nu7RHnT(H+pDj3$IwJT!-d~C?Ti_lwM1RUYUA{%+N0tDXcfn3<*I)wcBFr zH`wH@QV}eDR=pQL!5iY(5fX{f2h>cv@WN6~EvOi+7hAfiZr7n7P?DvP3r1v+Qk5%% z5^sisx)KFlS_5oWle-hJSG#(5y3|FyM?=2*BXM@kR&Icw6`Mm?pXgv1Z=okog|WL6 zg6_gR#U0I;(YN-E7PDYbtpOG?PO~_wbPOY`{1mLd#CLSNj$Zhc5sQmkaGJDn%1tc# zRy7)jeCH77aHCvV?nkLazeIImJ*_F#^njIWC_b#k(r+W#hBeW%j|@t#7aB%q1uvCg zhi3ncG$@Cg8A*lfcHNT>T$L043U7%6CuJ; z%GH%3cNU!LHfjwQ$P>Flg8|ls&PcSCfHn7y5yS! z65Ly;!&u>&rR{yk#^y{tc*QIn-fCq}Jy_&PP(%=;T5UrmK*;}+s`g$aqu@X>Xw+rM zvd#`^RzyAR1LuuQUfv=GVKK_Z@~BwGa&q!d!v>V;uo9Mj&m*Fy3LUkWdCQ!Tyg zY^Wn^m~NN{y5Zq!k%N|k$~+6VXZl(T%RvcOuv2YddWV-0yJ1?ztY(AcX?oNHDXN@# zcxZMpAwjST#h|8+d{c$9D%)XQhe~N?Ee4fMryk#*-8-ae*pPLTYFZ^vuiz){1Yvz( zP*+%s39-^EcXv{A@QO{v9BLQU?BZBE7?ZN(S=22)3#mixj`@NpdMN);tW#0*{K9PL zBoV3~G0-+Zs7Jraq02qopePj!u7}y(p?)MLuwWHE0qcfr4xKF!Shg)w)u3cT+hG+5 zVfi8jrF=~za=3o_ek-EtsnWTVGz86apbqCYy`cLeK~7a93%el!nv*C*u2jQ2q+Vu# z%8{{MQGPtM8nZz$sOA=@a)Dw{3kaXgq+$?}sP{&6Y0)9NRsd#u0NkcAu#F)Kuw}B+ zbY6;McsG-OU8#jAQ_p}5PIl3SP@$5A_Y}x zo`xQ(`r~!um&!}AWzGm=K(F%S2|{$0BsuQwusk8=)JZKkFC`uwb%U|6S%jqaZ}%fd z>kHn5qr~O25)y-7wvEE0m0i6c-?8jGO3A)?A2wYPt$37{fi&!gdvn#LEhShZi@7cNJyQn<2 zZ|ZkVgKHsiHQx``*-~(bJTjPEw^wSxNeMZMGh8`<=X{P*3cg#|b27=nQ^59FiDbY@ zvB|Y(8yJ3bb`%Kxtsgsx9&FGktAh7|609f*n0%ED-boACG+n;x338?e_2J1vMK)NX zX0uh8=F~JTT>Ih1b-;)Agkdy2ONL!|XuJC>4hngP9)X1}jq5hGHNVGeK1Ps~QtAT_ zVtw$1TWvG9W0dFAZY=87jb6*(Nn53}(!Wr!6Oq$hIaKhQi7q14YGBB7;3>|f@$gP# zxuN{lNSi!|*>34w`%sg^1|BMH7l<01JY|Y&!4#)!NBnlm;SUN48&F?q_?Hoqr~DdVBVSt>M&u0?}E@K|I` zCJ%*yLRNl?JJ#QK$XsiVDV5IAzzhhAU7#Au1~+hSR1La5hvqF@YqINRxQO{HpP60( zfBzQy?k#j3Ol|3=vBTPoEGj5Y1&hto)RV)m2opxtxx+M-Cc^}nWqO4vp8&6b`ZN7b z{pKA$FqcV&nn?mBF|~?K72d>dZC8I6)I^M|A7_C@?=7Cs?j7FU*IW?g+=l{q<6sL% zkbvrAm)KAMoxZBTAkSO++jNnhi2=b-h(+g=Dss_ z;mV3pSgoZ@Wb<@nE4g`YQBkp#;SJWc95iUH1(aO$&=?2scWf0ZI;v4280JiCy`PARw8=B*IZS<3QQTlQ)B^=mc3OGg8}kx6M)LYh%N?FIrV;aj zzEEk)Y0(%XF&`e0R5~r5PHKUHy*hPRF%#T2+*>@*IWQA-b9i<^#(>O=PM+RBVwz?U zI&5}lLO^2}%yWrUtrwqUegmyN1I3>FGyP11(%1Ru34qk6sq>*BI_!x#u~jYXO;{-X zWsy$C>%GN;RYji)7iv8U)L{opxV75g!Ln$eF~N;$$Ps!bf*$2oKBjs1d)+y)tEs@b z54~?4#={!$#sbdtWG&i{`Ya}R zVT6&*3<`KMDrp#+cV7uZ6I-3evmpxu9Ay)w(sDmD+o`b2@F-CHoE z?(p+z0V0&k3q}v_z}(e3kdb($fc1U!aLi%UL%KM`Y!2(Bdd{qzg(LFviRC zk-&TB6ICyIr;*y~6724UG2f~?ci~2%*Xh3L1r8uffXJ{&qzt$5;}hu9V5v?0BQ?OG zN@iXr4~v?Iap8?4D+1iDiwur~pS+}2M#ORG=u$Jf(y;1uS&a0^F84o;+yeH4`O$l$ z{KwMB6HTuvisfvT2Ud7L9fqG#pQvFD$UGX=SW(+u-*L{1G@B_h4czOf>WTAZmrwPC zvs32*hjFwRFerEsmz5~T4{-WKL#mUJe=R)Ja+I|=`8U4fadNl)ATd|n(FsN9r{XS3 zG>&Al!*&QAC&AC*)f$H3nd~cLZ~~GpOL6<#X(S1gvKSGdxG9=dYG)CjHw9K&37#9i zl29|uuh{hGcnqLV6NGcQ0Ht**gLtj!M#g(-YmD9L~aqi}|S?*B>%nqevo zxCv`fF498-?O?-zWvHVxkyX}*&w}uG%&VQ;q99_KU~uweBur)4a*V>=->5>-K?*@2 z)OP)XH91zBz3tlncO!z}C1VzP{8v8vRYE$ruhiLUQ#ad%YtDq~9lgh;_nVNxj5 zOiCUnS7k$n`!hVx8z$2wjP(h)3eWtJTEOi70zo4^P16pPpiRI?h=3(OYpHg2SN-wVBovb$jlRb{L*tKC$vV8q*YtYHA49 z^PEa z7IC;6Upj_r#9>7Kq{A~^t?(6yxxu~KCw$-L4fQd(yS2~Bluv6h{M?8hv~VrIV>VJN z?akTfj^rq3MQTc@=vhd;i-A1BB&X(uA95j0yK!jRJq$GWv0TfEt!()yJQydc zJOKAW*Mzm`43pX`I!+g~MdS%dTBaja$_cw%)Js!)X0V$oGetUsm1I(p1@fv+Xo+~hClR)%@jX;1j0zd@&Js8 z7(Z8{Y4A`UD*=)=ur1ifG;biHLq7^!%V8yPTV!RUseeo6?9tQ;*i`2ww#{_diLOWi0Z@(D-@ zu8POu3Bd$mheTQK=-?)Ji{3qkp_X)i=zcLTyl}S$dg<)zSYNou2^{(r71W!;wBbT2 zg)vHJuB4geA{9*eAXA~^76RkvFca3M!^Un>>AP?#kb>QJWrhh)X}g74139<5d;IjI zw>#rj15OHuCEUvgc4XXtWsC|U?^4rS*o9KOC-K`bB==!sl!K|Bsy+9^`h{Zpbu;*! zT0E)Jps#}*qj+L55b7-uuI3xpX5GPK=F;{;gvD7sUUnfqY+2exSjCCYp~I)$_ke$a zr6qkM{oSfE`rbIN$#*01#9=vApZwlUKdg87dko^QiWw{}pgD7j7f;drQGO1i0^<8O z$AGZDG6Fe=0-Nhv#Q&(wLvq?3@Z>vn5AcUm|ELoQtsWnBjQb!4VuL@!Y~GOL3*`Mi zdgHqK4Wu$XHt0)aSh7Wwf#V+0-&czh=@5GDJmsIA{3jA z3PQ^O>~MWJyzEp!4Aa)XGG^k4#6CsXs*6T!^$*K}w=syQ-5g`ex|b;o2Ps!AsU8hL z$r)BEdp!XO#TIupQ0~h&t^*SZFePziYCmqUi?^VzLF9iUtZosTMQ@DdbvX-scyWe^ z(ucAaYHqVguQOR+2+M>o?iE*3J3qxB+(*%>rnK3AXED!;J|I!)VeKigp>mm)^>~I? zrc9;IjRUQ_fJR}s)moJ0QAzOiVN}xmfFcJQs|Y4V=}eZk!>A$P6Em_zzcQv%JbR8o zJpk9tq&p;Pk&2UsXo8@9k)wNkq=;N#%()?JF@K8CXTHAq>Uggu0%VP15-t`WR;kQn z07nh0h9*Y^Y#e16uFhA&FjzgTJiRpNonmnUbC9XL5AT%f15YH8$rY$-X`RFtpz0l1#Y@C-l)Cq9(@|Pi3 zx$Bl`GIhXm;St(D9{W;SyZo#^TU3^h#%OXIW}$cHF!hQIH)m6mCBJfO2y3QUut~W( zqo@-+5!R4O6O(yxJPNs)JW(Trm3}nQ6dv1QePZOFhu8J%X6P4etv7AGc+^z`PT@@% zt82eE<+_!jiVSTr2hs=(BP%*pD%o!gUM#oQf2i#5Ec)%#4obQ(rpZ(=rcYj`LK0#C z&`VH7V9kG-~m)8Cd!|MB&BxZx#WE<| zP!xNLB;5=H$+fH^DdEyRpgO`0P7KP@&3L6!S!*oLLOHewQw^R#Ml0`3uOLSvle4GE z5L%-1dFZaO+`0Lf+X1{^6?jGr zR^f*+ZYT^Jhb0fmI2-dbiauc>4)ep!#~d)$qP}wJ1g;FLBX@2-g^6#-ofFs+Q}E8m zBgfDlfwAPd`S21ICeO`>ZX#+%pNA*UO;k6Txj7#OgXmzKg*U}`^4!FtdGg#Wti)rY z+bknT&h&`^rNfYUhUGAk;WmDJ!us4i&1>?UBRqL-%DR5I$86Te9Rx}ym0mp0otw4u zZ~$lQtkVPgI;u+7hC5?tWjUa=Xz+tt?wr8q_{zu=twEF7YBoALm^7JXH6dufp8M^)JuxHO1CbH)OgSffCbB9-xM3SUQ zIV{tmys2~-!!)&dNA8?s+^6Y6?H}-I3Tv0};wYx0c8a-k!l*Un&I!CE9aHXbQi*oUmJ7>dS_K=9d!<5LfK71D8GZQg*PHxe7dNP=| zYIyFPim>e%g`bjMSxC-|(gnhj=j0tFCC|wy&EMX8tYsw6$;5X`o)f8;eSxzSN)t<- z6Dhb-^4u)lGjR(kuTT~or`Dd5=Q2Fc8z$E!jP==H$#ahJfB^Gy-{NAuRKK& ziuIK`=Zozvij#6vvO4Z4m{gVPGiA@o{;rfg=dfqb878vl0;2+N`H4Umn&gqhh*%0K zdrrn&Quf^RI|M9yE-)^3U7Wo=k8@h?l-0OTx$;ZT1E{f{W3Vb4HSTj%ztRdd?z3;E zB_QQs_Q~tMP~#r3)wnwbHSV)pAqTRUW{>!vv>uNa>0t!sjetjFjz%-y5|V7p(Sr3S z-h=tyth95=rDfY~QePLVaCbOWxX-q775wiB!^EfAnCQ(4_t}~J?-lMcbrq$oaF@A^ zy!yUBR^jd#uW%0xjRU!}CtJRpTLd%be3;~f3U}G_XSoS^VLCj+q_kc476>=E+0+kB zOt)IQl`+t+wV5)28nD~S38Myx!ziZ~c(0d1V(&0BDZ!|64-C%{-Y2psjS?g8a`s_W z+7mmrQW5)_$kd!4&s zqR>4s$QTS5ZsLh6qBDc))!@OwxK7(W(-R+w9Z~8&SEt=*E&At9A^~4PF^9W8Fj&c8 zui%YcW~naA0gW*k#wxGl8C1GQpEO==5az3udF(JvW8(DPPTY;13dCiD_RK9t4&h(e zA_@ME+30gXWI%R&mb5YshcsmU9@9xoK6npfa`CLt-DR+if>h_DB=4qq^ue3OtOc*% zVWB%YC+gg1v)gxkwOs)JdY!vW_Fd;btss}x)^p5Pox4nJ(zk8u>%8jRh2?Ucd%()Zph zI(J$ASDm{fn8>Famg?LmubGNEcM-<9&Rx_@u5*vQu{w9hSe<(yXadgqs<#MR<8y zMK{p@thxF86n2=U?t$Pz(brltfQcu?DLc0q zuR8Z>#oAuyE|^^BE^5r{+~?Xq)VT-73a{e<)VW88JfPSR+>b8mxySJ%=1sr)w0k|g zKzzPS##PPbI(JcX?>cu;b2(fy@ul!s7>7d!KA)Tz#L<40xlgMv_cC{ryEX?bGP@K6CY0(ScCghBeDs$ zFZ>#Y>BL_d!(-B(^heWz-;;vdk768$ug31YR*$~o%_N)fCd-Z7E4L_q&7Q&Y{Xk(k zxHWhpF^q6I?@U+K&8 z1g_*XYL?Hmq}$mHgwyByH$&*>5@f(~jRB*UX#YfD`WV|U%a=PzP_V3Q(J>u`XFBEh zx%y4TMW@Va4ZXZxcj5RIU}{rih3$1A9W6WBF;nl7|H>FGPF7g8(0t&?;tk=68xL<^ z1iPBhFmA>S!0bMuvG_%M7Y0Q9%4tPzPMdB&C?=G%4yUxF>(BY&LQ+|_(L$#!R;in+ zmR(pUDpqv^P=(mBDc>eqeATsr6t^)Ma(;NHf(Z zYFw=c`F_G!(`k%syU9Fj&kd~HpXY>QDPwjo=(J;nx~94AZt6K~DGwrybdpk0*i5u* zlAn~d707ZuDAexwc&3(cf?#?x(xgM+M?Sgv>Q$>z}DYYqh~Bk!i5i=4V{=sNhbOQUSA4$`Db07#NfvvPY{v6i{t4 zuRgRvuoh5;I8$xmYAk;9TEb;PzSQDb8D=ChJ;6d7YY=5N1g8(+`?rL!>ce;i^46Dy zGMNb-mnT+Xp&Ft^Ygx1i)rSsy z^`T+BGA$4|X9{c%WtA7Jxi^xOD{hN?Y80nLNu)1#jlLY?j`1vxHI{$A=m(5fAKC(W zztcj6sEAv$dbSBi#w#72soaY|rgGSriijvbbPPi}0$VD%=q7pTD^+dHhsFnvI%^!a z%yrLk)N)JRsKQ$m&ur7j-Sub5K&wv=l#2&*nQxCr)dZvY;J1-%gB`&|5JpIa&&#jY z_hszniswT2)C zSLKhucD+~K8MZPh!$jd>U{H8yeOlq+VgWoW4{Z=u2PlKAsZLNPF#`UMX(8#{T2wCz zHy9Eup5SFj-hx*d`8$hOz3gdnxJ6<+1?ys=x1Pb8eTWFD@IDW(Jrv1`^m-H@iX<%` zUVFHBH9*uJ3T4?xmT;zDR?`3X7_U7PYFlCNE4AU?CZy0TzXZT)57+1(uhx^=SP<4U z2Zbd^z{;e9H{Do^^O^FEM2yx5JWx!gYnBvV#m)7Az4p*BQI-~%PT|~`qYfA4vilx_ zd{<|Q4heiQpUxOSj>nNKLdkk)dLcPv@m7?dVXXep7RdXZ)xXHrC@0%^jf@vd7+=lq zu5RTkhn=s8iSk3oFn%B}f#VP5hXOy;Wre%O>s)x+5QQ+!?^GaN_uE=F%J3GJ%*Gy^ zwk*kL@kS8K!4qltFvmc3aDty@^7t9Ajdl!IqfZt@bG7W&kyy@d-=yM#kH=-7Zpf%E z`MA-J@ojZ^`N{&)yLSHNTR9u$GIT5a{;kL^i(iVEuZyX;8&>RIjl!0NZ(xswE8Z?f zPL&ckS-2=gFbhR2^3mCoF;lMe&=1nuQ?oDqKYE^8d%x1#=K!OB`3R@pRv_c4_0i8) zWDLSd@l=%$<6iX?Jy)%uNH4GY8JILaB4P@BBxY&7#!A?mW3_B_X+?in^>WmU_hs1Xh!>~5FkO#<@szIVnyF`9_LE+&8?*8N4HJ{#LorY5 zH`c=59qVP|OKbYWy5|ofmxb^CPPwUbR^5}W2Ag8;Fv>cbaXsZKyDQc%tU1|JFXcv(J@-5p`>o zBptdQ&oAbIj2L=vOW9TL4YS!?ScCm(c3X;30wZq~$MZ_h$TiI9^4b&^)Q>vZE3^x} z@YPmOK%MRl`y!Vc%v^28HPshdBtD5dH zH@Ug^QnAk-a9$x`z7pngtI#R=@B98$RkeOK^w9 z8kjoaya|llgo;N%4_aoWuNXl=+69IoG}L8ZdMAyk6!U2i)+f~4n_B4I@Cnwt8?{F* z1Xhe{2VgF&&fN6QhrGbRP{J$}@@gN4n8k6a1ZoqjOiu*$$Yt9|%3D0EG`# z0wy-J23pm5kyi|@g`aZ!+ao(TG;XNy#^Om{kRviU_6ux3w6^ZTc=#iJ5B|qjTXbcc z@Cd%^qH|UP!Pk>)M)C@L9!on_hL}Sw78?=1G-j|qpdSW{7VF^}$e=H%jATn958(4! zv5Mly;Xa%UvUWdVIEkf;r6hP7U={g6l1syQx)8NuOs#^5kMuA%Hm)&6LFctrZlPiL z5S;j`lfI*28uAI9lSmMsrixLDH`qaafNP!hLPZT^ukO{3SL$}FBYElt!QAhWC7#0! zZU*L2Yws&#)PmJM%Yca3=ff!^2@(B3R!Ett&S`~}IXQ32sk9Oy;6j#V0k;NbQw|c@ z15>qn{lbfU&-vopNLdcx`%6JPr%>C2*p5cRgJI4?GX=k&=YW#<_>r?!-lJ0%H&Ip5yLGu5H}{o zodErOGFT`a2^YPYI<~SrAm*)>k&1;HBGa90h5$r0wr>rVNuTxswPdpw@x{EdWEipuDh^i zS-P=(aD#MG&!_9B#9Td}K~u?wG&E|G|F%z3rrTdZVb)cV1XSc5XDC{y=v&UIrBy(W($- zj)5mZ;Msifyw9}FBzfOvj?1^1B%ij~F}|rTE0cL~Pyk?@@q5CA4A=)e{=(?tL~`BM z8zV==cmy(2;p4s%8Q#&$h=S6OW=aIL9H>2j`oQotLW2ng>()u1AKV|CUcre; z4fXh_&-1{;@pLf##T1yxXz}$;+pOljeqni@=K4e5E2nnfiK7V~YG;sQa960Vy9$C+ zcmN&H4O_20GWa{ZjxYqRh2C8i#?Pkd9;>qp=K_26;O1d73lh9d_!uTOb>YnNLcn^b zM0>-3zFVm3Oz?R(plD98?plHu#FgNvF{MHq7U>2WIz1LMASI#Fh*=8`aoKb zt`<&CdJoTqJA`c4+q5qXpS0Yj-MN~ZZl=!lCUGYieyeyQFty|s>aYAGwE&|j_bI`J z@cvy8TKQyR^}e9j42No!n~3RqbwF(s!uK6 zX?{B$m97}Pl0IsBC2d;nlnewtkoA!w)*lh7!_5JCF?28{OaaToC3)e;y{WobeM4Ko z`6ut~=7QWXN*0hp5NlFGgl|PmCQd$(S1s=stP#NXGh@M=~&w-7k!Cdu)sGg>BWV1RO?^N0V4sU zG!HktEA5aOp~dSndp^~PAeocl47JxTtRD#t!6Fg!d8(t%pPBf;!A&P+;sB zlrUWgL!!zrxUCTj2VXim^-HA2o7#@Qz#v*goD0HcZh=>e|g2?a{NdfX02v8g4Q5_n`pjuFs;44+0L3n@aI*a_4BOA`n)?fR=8FpjzJeQ87iTaL6L?XgA&YRP+;sB6c{}QMVH29XFwy_F-V4$=v%J= zwG+-IfUie{5K+iyzR1YH)JOc&B&OiyHXCQ@l zoPoU0*khx2+hZG-?Xl5&>~UaxM_o`R=~>zYBf+BlT`&i%1WYZsIfBf3!RCAfZZEhz zgfWc^4);iicqrYRIsD*MV1@;>0|RTONK`5UtO|FJbZQrT2@R2gqJ1?~lxuoJJaMqb z`(lu@5iKeWs(|bJ0sY8lYQS}%EmZmgY3=rtV_*t?rKOpLg3t#(wHQxlPV2C1r+S;Z z8Hds-E}5C~<)bS6Kj>YX>Uq5|4T{ODITWLE3YZIbSn%?d9|5VjCogpi%+Tx6zA{Fw zxB$654mYZ@z^GvzaM!bMf_V$7j_NRF0Gu8eb*;uTuyYjNJi{)&bwV@2=D6@;FcWIK z%*SQvz*KR;%&WyI4*w}FXlQ$j@-hVqF0n~=PGBCIg$396I6vFW$i07jvu)=gH*o+D z%9$si2uM3m5)(q?vxWdRl1_pi_xu>kUzm|-eeDGsPh32G*HSlSJX_$V!_X!5fx%(H ziK|O+O7mSS%)yY#*OTGp+J_jq1WQ<;EVx4;;fvm*mn3efaLPv-O=+}mA)+KUad8`x z8oTg27#O=x&1o`$Qn%m=9n(h2z|*}VdnVCkb90#INk_=nHD8;CpkNY)Dvf>1JX9HC zg_cW*-v?p_TSid#v_c_T16(Z`M#oj1eY&y41%&0PS+2gR`XS^D7TZ(9An>9cbna=v z8xR%Ih}Cy&h#f#EL2wymFvV3iOy{fOz#AV!zY3!UyMCK&JLWzv@jb~;lW#B-#RvsT z%B6luLyygECZTXQN52&esHzCF!-WjJk|Qq`yHca{aS|DjQ;jE3fI;~XqcFVJry&xo?|uqdy2kdHo~;3 z?}h)BgueU8(9BHv4u#&kTUFl$hRY?%zml}5i4&C)X-HyY^JSN`Ho5UvYoPAd=s{!1 zt1D1`HYG8KXJC@z7mRcs9Ia z{a{Ev>E-$bEj>$de1?cA*h4W*>o}IeK5XZ!Wy4D=`opS6KJ2AsVIWE7lndO4Wc^gR zcUfvsiMh{9-*O3s-oFk4mO>1@y%MW7aaZg_mK7;nUa42oWz1~QX7SW)d*Q|h?bhP4 z@m>qhfBD$V9G36p_R6FN$E*hm)ShY$@o{#mAEX}nz53~Av7miyhKcdpQ!z*FHWtC& z8>?hvODma|`qvod8q~^}$du>yfS-9!Mim~__dd8Cpz4S2bZkSmSeLr%g&cC#BrF8= zu??BvOdF*Bk^6sJ>8ZO=6L;`g&l;`hC0?%D7w$)nFI*YA40h%sW-&@*Psv)sox^_h zE8*p&ciZ>5V|@O_Zl8la74u}ru@v_1SS}l1TG1a?{f7kdCTduU1oS2qEpdDrzHv^> z?NmI$Qjw$gly(VmTOm&y-F)`5@9C(OnL+wqiKi=au;-m_GmXtK4vylF+=P6G^#O(LGMiF(hz z82)x&FCSs7=@0AvOSMyCggsKrce-ryH}a)ryjbq>WhYpEz+ z_=Hc!v}1d2PtC;5g~U zt?{x{A6#H;0`Zhh65aYL_<%1pn@jEETB@m=IK^eLq#{V_*@e`_SRgD6TD?boqH8&g zVC2>if!p#?B)C~~1v@ir^py`WQY$0Tk$y6)2OxvLgG0sq%q?^p4y*GfKOuqZ)If^G z1eE(hngn!){<`6D*OhIo<4~hImVOLS&A$pU4lP|<_}IN{P{C&wmQtFxY0!#7x z3pq%kJj(b5Bb7AkKBa3b7pO>o75DlCZ1?y$X4*#)9J5fW>wPZV>+{sAWpUg;?E}MF zxKUMxtW#Z@$rh7ZRvjD|yJJTpDXqLP1K&jXrUhUnHu7@VM(u3<1}O8L)T4Q z+l@>(ONJ|Nr*jOpAbJ?6etHo1PVY3-Sj(A)UzG?$>gR=<@>xFbwXP5m>76cqK|Oh?JjUX2v2$TQ*LmyRJ?eBTJo@ zVVX%zC*9^@;r~cGJaU1gyhJ|h(?4FAsh7UVg3p3Im76StDj+NxF6en!5-en(GnIis zbSRayLt-Ah-$^Gra|?X#L10QJoj3Z^2k?DQ!PLREEH;D$7NbMM^znI298Dr-rTA%Y zSmnOo1RxmYId8#f7~ENP6;E_6Tu3dpDh82HMHjMABraUiA}hODtc3eeeC&^5XRb0oyH8j+q-}RDl3WK()V- zTLnI%%cU1K>PzdkEz}-3s-?wwDv=<Mbz<;LHHHVB#xb_&FNs1B8W}^qfOVSPkS6 zBP!nH(^sL3@+lA$pYRbMfOc3&0O3y-- zUs+0wxJyQ-))QC@?*McRbjDZ4z*ty|Dgsv*O8>eTqp;}P$1rfoV(12@3?_=nxT z`K(GpvKAFe#bLP&L_6GkMS)cYj4qOD41Xm)2S@n(w}k1uK1p8k5VHq{sb-d`SD(h@ z_uORaYD)}U`1Zi}GNdwG>3^gASS!WBsPdH)#cUWGyFnI=1M#v44E%9y{pJ1;M`Tbf zq5!EM0%84iyzUa}AL;i8w=+r1QCW20o>PfRPEK0-mn8P-Gm;maM!OFenMu$S+szRj ze9M-wJ^??JwI~mKfgJRODHgCM_lY7k&9RIU%B~#KIT`K<)g}yPAsrlUx7>XoFf1dZ zNqMOXUD`?orL$J3tbSW*f zisEE$n_*O}Aik!HH|l0jt&^smuA4jaLBV1B^r&NMHAB@fH2h?Aeoym5<9&D)L|^f~#XH zQ(J88G4F_RxIVnu$uZDRUl~KgL_|Qv7Rcv|R2q^hip$$Zd8k@cidiTPOaF*@0RE1d zsettsdcAQ5)#kn(ZWou&aEwYrwTAtb5A1%xlzzZ8L_D>RNepCJCtp*S`!oi*RF844aLQ@(JfZhxAIAXM;_%9GDk8=NoS8$0w{$z)QSx zf20;yVZrey6s=~*sF3vH-NV$CP7V%;n3s_>1(ezYXL8dyD!HYgJ4_k40|W6hecTXG z#aG5eT94Hfcym9_%5dXNnt{PA1Rjt`c){G6E@cRt*BUekz(Y0uR0u#AYlqiG%B)mZ zd5c9>IFxS#N7|v+oN}F3Pjm=(YAkbg%I7i8Ryy`UO`w6h@MWK3n$>n2{{<3Rt<*=Ir+_2gXf17iMqMuHZ%o z)84-)OkKEgBVjafrts!{8cJDW$W=&qe5zF9-6Y8>DzP{h##GF0WtJ6tR za09NS(ddx`usq-x6!zao4wa^cwVTB97qzf(lDy$mhxyKjE#$HsAGK&{$;OzWrL{RP z^1w~CO+x*fWc%ojE!ane2?>I6@CE#te(M99ttt`f{m*ZK0eR?V(@RHBpOci$w>|E^ z(T!U;51`9da2bj+koZ{&;-Uu26XiezTMJpJlX{SO_IQEZS^MEePbm*CfhiEa4x8iA zF+snMku8?g{Y1MGH0MFVg!RG+1|PkWOv<(s?TRdKAL--}7*gu5gfFnVrVBHsPJU@G zFu15&wF~~&)ZbypDQt??KI}M9GSpid?teIN0!qYJfFJWXA7dT&kCw;UJ zce98v7|Z0g64W^mdbOB5QOvMJg}_i9w#lOw3>xVY=1VuWwU^SMQKB441=mB9$P9tN zY+TL*;qY^eyAuL~`_~0t+ouol5jsh^bx|B}!6Y*P>nUH%C^&N%tOCU_cF$(P@mw*G zD7d@dJQVT@$awp3SPWxOqHx&Me3Cy@L-Xkq_0uGQ3KfL)6gHu<$&@Zs^in`#euV#g zx9FXMDI6tiQJ2$-ZvFUhk6jQKC*E+U{_+pW3V9|^i%J)WZ`@TW3R4X!z?3dHG_gfl zE^V|2xtsgE-XRy9NSu)K#q480@sfPmpo`2uD-B7=9A|9JhbWMH6r zaPsdgiE9PHGxM-qxO1NB`nvE0{fB9_4v#Bv3zdxzC;OQEx;t|V72Y=H4d}VGK^`sM z(pOMCAG%0wq0WG2f(j0}GubdO@MeA`3@x)m2a4(avna6KtU3%t(6?F+T{84{)Thu8 zGs`M4=I@ZTsO{&NVZ6N?16bsz9X?!Hsm4GlE~71*K35y}rX#W{<0Y6CO@Zkh`F07T zZd~uu_-jx1DZrm4TX-^YZ*$wqN^W)>mPnODz?P^mo zo8q#E1XxMY%BMCy(it@5=cN3s)WmwTY`}JBwj=sv=1pKWmV6e_HR5UUisAD3Nj@ka z;;1UnVWtxN4(-riKbM-oNmJHaPw4pgy|VLeQq@5U(dBxNGIXcFlPVxeS(Qd}_)(DV zmC2YI95O~h$%&KUYt;PlZXvFvfYlB3YVq)>ucS?#p+{*c?&is$>RT4}K5R>%Jx7+@1%%aZ|ewlUbkg3YwFrznAMws>%nXZ!j*0*C&X9YxFB&%p{fD z9zVjqIm=T)XimzPk3Za9TOa*Ept((|WC9+CRgN0Q+$OG5euB}bz96J@r;V4k#lOf) zo8drMgC-e!8u{Mz8z0J2!v39K$8^2U_bX%I74|-jySBx|%rz$C>Y2tj?&EjcZbtx% z7UbG=WU__C@p2D~QD!*HC|39Ix2nYJ$>X;kI8-dA?uhz?P+e3!n?kht+C_h{$42ek zWFHfE*{MB_436rSt|_;jQhtgjBo6%dx(&abkt(^+jf3vyH@xX=u4=Al?0P!*iZy1$D{7z=wn1OXqQ z%Kr=`+MFI{eBjI-FkA!rgyn?j?N!>trgwPhD=g4xLEtKsOE(KNNv)6Dsmyl2IDAi% zp2y$Ostw27eip;e8ca_8TD(!FOZ8fmYDh&Syu$cpXXWT!O@>C?UK5O(R5qK2j}BQp zQnSl-8K%2c-x~OSwG( zKTK?k)v+vVrxsz2l@_=zt|y5LP8M?ABGbqLTj+7o2|G8~ZWV{Qp9Yp$Oiz?M&wXN7G;C)(I6^l|Wop-NGMV=+y5OiAJ=UI(q{4uXStYer zaE#@5A7h>cb%u9s;ES{dg&Ed#(l}T6Hw5KM=Q7j09!9$5o`?iC`_z$R_<0)XpmT>M zB}AmCh2P1lqC!5*>iG&G>FN2xbfn$0jOR{ujBfcu%c?5OE-k?2l36})zmmi;x-0ak zLXA_Rjlg_mHsnm42@wNxQ4QMu{w?+c1|OJ?QJs$B9aCtRkw>^tWQr2lr=_o)GR$o+ z%g$WsaH`b7G)Z_>1UwOSaL`kE9OJ1xfq@trj2SSMN8snY#F!0&ISn$x#!b-Uu+6|z zc?8o_gMMgw25h!Id~3CD&)wL{McYq{`pUj&)wmRQjHU8OuVc98zk?{0$8a6QG%S^; z4hD7Tb&(HKsSl72dHI-Cr^ka@dK@>z#gf+#BGRED4h;F8mL?*pMWi&CooLtkq>(%m(zvK&7}!Fa;5tYjVJF|bezF)Q&%HfaZqb`%nXhj`8?Um z!(RA|rki2wP~MxzO22565_$wqp}YiJLQh~g3l?}-LXW&-z6f(|#**POkgqqKq#PHM z={%iB=4Bb}Xwm2!)pVXJwHF`B`ytCTQxaQU;ao z4@7vnys~+OLo3f|dOUP#hjW|2`<2ZT;toy_;oy<7c^vj^9>;h#PhhALL<+F*LC*(+ zr5vGDY#dB!5CM2nHjmH4vw1`S+Bpp^9w!5ZyQPK{Kcz7Bg6TXe5mP!(NJLksjUcUSm<9`&l$Ws$ey-Y z@BSt34k+vPHLGt_1xFd7kPt!$99wwWe<3LId}m;d%k&k_W2(TzkkG58`=D^Sn09IX zZlMcKH;R|v3%b9ls&aFT<}M1Sk~I^whw~&yU!m+Ng!4e7euVSbD_b7!Q3Ci1=dm6? zAK^UqRaaS)H{G=sjuc$eY1(}jrW5NG&V!xf?%`V{y6n?Y7ek#B;erg?)h~3kk55*# zRWuKD*A>l^v`6y<$D?_Ip{r?oq8t{k{oLg%B{Fs8<7#H=Hr(A({>c%|lN@(gq%!+( zSiC1>04-s`NA=gmfNc*F=sgoxCvSQZdUI|rus2853ns2I-}EMu)I@61TL=oV5lFv( zv7b$xC~r}Q>XraXuv+a8Am%L9(5_aw0tgrk`{En zF5`{fg~R!1=dA`Ue^3~z^1XW!%*~*5Z&Eoe)v6)@7l<62!!fA|ETYyvWh~~=TcOA| zX=jsl$)eTCSgD+<6_7CO+s@GJY9%Ouph((&VdsExx8P@WW?H;^`7pVERYAS%UBB-M z+np#Zu4w$T?B@N-4}igHGklSc+*{Fz~tGl zR@Bv_{in_|^WMu~275uJi~Kxh!+ z@SL($j}DxAsoUu8)BYsagqLF7YwKByOY(XyF>V*_F{nKVD|)J=r0 z&|~%vplKZ(7^=bY17-2RMu}dD#xEL?!lFghYW61(2L65rOO|L_j0AwCcd}^vd}Nn_ zQ&)WGi-UI#hr%{-qbX0rj-+pT#RT91tg7NWy3NMY*bX#@SJG+wh2c7`tHlFfX}-W9 z8rY-GVR%&X$iTnff^t}+&_>0uc!Os8kqJ(4;AMP20Dd*83%mg6F3dK=8z#_1Y1vdO zb_oioK15eG@R8o8ROP)R%rxAA(ywbfYr9LH%(g- zeRpr| zt@UWcpYsNN3+7P|=$-GQRRpQjC^EnCb&dPOjOG8>WA}GzSDT6O-Lx2`DZ+DT*^&6= zm;nR^YtTm-%c2<$e9yJ=7g1m43C^3QHl!Fkm;p>qv^5?BQ#j&Xd+f_jmqEm_y169l@_xAJ=Sz8QwFY7 zf{YW4X46c%B2y7dnt3?`E|5VFVct07IGjo7Iz~l>D&#e?Pnb>-Kff;JimLIcd};f} zl!bNt<{-uQYEkJgp?Ymr&Bl*_JSJK78l4gQxF*#?o-dM_*J$q??UZM0N#Kg!UeK~q zH@Z~6a}{EOrVh(Hj$zH}9z1dGv_}A)c7qe-}M`2{;EX4dVBt!S8TNY48hA?A8Z%n}0hrfc;W0e+HV2 z^msuGE-@aA>?a zxZVD6XfV}Xv#^N`wOK-Y3O8=6=C(G5t;(Bo`AVW$?CwiP=J0t;+Fkj{IbBIJ$x(jv zk(y?luaF$>Ayqdtlb{Qg;|TN-Cx3o9Udh#<>!9a!(|9(=Oo6GK>UOsnV7{@>md^!||o5w$dIXNXvXooq00FT1tcfj~^ zfBX66z$a;wUo=c3r*-!HVE7|R<8t)xy9L+KIdb^%P8S*c`p%-H(d(3L(X|9Fb*GuK zPNPefFt(EZVVYXMI$cWrjy}JsCO=Tbo)_I12c(Kvqs-k+f0$?DW&>v5Vi++5L(f-k8gp+$1Z~jj-9tN_T|R(ooV@|U z+uR-kltR(_eu$d@kIPBi1X@>1Kr&7b7NtlIJuHUV@zfpnYdy zJUNm@jDC+a0=BK*%f;{-;qenUZ1SltFZpJib9h6m-uX%N^{cloJ)a!Ertx2OAn%v! z$-P%Un&|D_Dq*d8b@xP_j)^Tny%BRG}!EVYN~>oW$M|55-a!++8}9G zhDe528oW3t=#-B{jg@?-myAiE(mi5Xw%_`fo*bagan^kk~S&Q(ZtI{!o<0b1Z4goBT_Db7kSH?TMq$xP# zo&xU|D@2%I(8n+wr7s`aHBPM36NRi|c`M^kgQ zai|QA9n9XZDoq}0q!Tr}eR{I0kiEMM6*FQ|mtBIi9w#HKTEC`~Xn$B6Sbwii+zaF9 zH7siN$_}z{X?}qhGR;qn78-(h zf(9vG;iJetyzYVD+-Lq{vpA()RG_fgJz0rDYWUGrPa5>O>l5aiCCNs&8KQO39%34t zro6IbFi|HS$?}93?U~&6bzb{yZFcJ_E{Ly~cdiL1LLdkYj&k zA;6TpZ2vzQkdG_xY?nYMX1uEtRWXGGR$Kx6Cx8>13^^i{q*x1@Bf3 zZQK=|Od2h+sNRp>P{r};c38$CJJ%n&MWp$xX7^Qp^rBTRGdWRFA~}#M&@i7}9{n9& zE)yIUnFm~b^fSb*P1bWtd2BPv{dtRWZkmx5*AGTiv{%b~a}FKYE|M4Bu#PT<9dD9W#mwY*$;@^}RiP=sdo(K- zKeHxovuiwf&%9)2v-`-MbvT<{?DcweYj#$0$(1rE?+v1bigI~Bmn!6W$;@V#cl#c$ zrCpvSGn4j`naS~znHLA9e6#D_+cG$7sobT?DT1@JAlsWp^tUgHW`(rJ_*h-RiPdHC zUH^lll9|n}7R$Y~CLqFdX-&lqc*#tR;J&&(mnz&zaRlv<3c>M;naP3bk0<&%vy!pW z^K_zEr#_VO^y)8DoqU3jR6O*qto!@PhSBoDVbd}YJ6^_N%7gs39K!z*Sc z$17%D9Mo=mKjP7bhk^4)UNbCdj~N~xh3rDwuNe+b%x9>|TYsL$qC2cb^w-T9KwPq` z8tBW79L#3-45(;tH9T!s>vo+4Wp3f+{i|CIaTF}xsKnE)>bRLEqU{%@^TgsU3PJ_! z0q;Kd2f^6>Mr&Vbx>%o@{T*|KPQUk=q|d{G3>T-Gg2n?nY?Al-G!lvUZ?f|a0k5o` zoMYd>e05X~tk$K{RM2n`ez4me&fa$mgy(}E_R((I8i`R_>XQCGRnSx<5(Mt%8btql zlMyAds=I*fL;FW-aZ=M9n(szKN-ZFI#_XGf90t3JgNg0cU-2dx`)Wg0^@FZ4D5fZ1 zx2znlRJn_4wX&rP3_h#r+iSZ1v$Ta};x4nK7UAl)3JV z1|tp+;N~g4DYqKII9m4HCOGDob7@=kHkOk9GzrfySv1@!mp(#x% z!(<>ZrXUdq(+5+BG#1EYtX;Gi%!~-SGRm?D5&?P*zB+PZiK!MSBptTTb96~yLWS!i zR)I~)r|EprVMzvu7zQDh+$-=-_ssO+y~2ez_fTktrV6hVA@L& zkV573t+2>ReYA%3%44Rgx!1H)Z-(<~n|af8>#9>1J(y^6aS+Z5dXCs>@I;VXsjpT} zt4RY6{NP~8N=HJswcoU;>(wb(29tr0`sJY^+gUuiyPoy!UK&&8fHY=b>GRWAgyH3+ zyPtv~Lrg!HM++~Y+_G_t3aO0b@-9pCP4Qy_S!NY#{x5EkPda?CNMXqq>51;vfI5o9jMTp{b60XEZUnKPW9{Nz?8=`SiKlC*X`zhNfgfg zPTxGI41FFUyWP@zEn^%hFHWWVxf?V;&LjWLc?isWF$Ps7YxMZH_lGrkZUw&9U8cGl zOn%GK&)rIboD#JCA~1=y*q;($9%caHsjC=Qdu*PtytT z<$Jm<66LxZ?iRaJdJ2pMy3~1V@#IXmEJEzkanvp7hUNxJwf;@lB>-ot46mO-K)qxcM6=zNFv`(-1@WuP`G8wOfp`dY$43-?M z`mozY*R8e6WGXb8y{dIi5q+si^VZ_$nnWGz;|bbgN>NUAY$*n04x5Tj^j=uxJe(p1 zXTR&$V9VexT9xW#^+WPmR$#JvaEp;f^0Ico+@3>+aMqDZm-$ z`i!pZX0E-ztwrStCk#2`;EJcBg7WKE{_2Cn>k)i(_RI&^B_|Yr7D$+Hi0H=wQEYN&S31pMK>nFUz~@+T6Jw-0lnW1>mEB(9link z9P+qwkCh8=AK?_7^P#0F3zNf>p6@>zBmiUm;b~y_FS|mvCmj%=9ce>M-#() zeeMm3mBuoRr5nJjo8xRD5DZtx>%)A$vm5H2ngLANPRlVPEkz)hZuvjs1SLmGykv}15A zDk-fogY{l5wxWwxou%aDoQ|f8(VO$6B>YbQ^V!1Otv7u>8{l^JgT|y?^is##$KkmQ z=JiV_n}!`TtS4*?V{2={%8#+=gV|@@Ai3d)=)n5!20#u~c&Ml5q?079@G_O+A}c(E zJ7`Jw^^4@xa<>4q+uv7@UQ*$w3;4aW_Ts^@!CAs%k6*1p&rUqKo~>W`+Z%x^U)jS3h);_}EKCM`TbY^o$=%ti+FpCS9CDO^!IW9v%uC$ z)22iwnIX2>_?5`;69nEYp62`>Q6u+Jo{TqYVKux)a+BH*(vMI9TGvBd`&ZnsTn z^U6Giz-Bjtb>mjvUOE`FadGwo=a@Z&ku?Uy#Md<3&>B>eMNe2q?0N&xPDVbuIar$; zzxBMK0ZoPYvJF?ZJ{><0V+u#shPnL@PK?*Y6-PYO@+iwi+Xg?Q6ZV$H%i0*wMem7q z+}zzsS0(h`91O5O!AD{tO<)>;FQJ%?W9KP@CO+lr1xFLTgs9i8#N%c0wV0(?&5aSq zH^-`wPs7`_OOM4m_t!jky;K2`#&|~b3xco~`)xPqNqeMlax|xn#*U4Zq08AT*Z3Gs z^~s03!L|vq11{^HUl<%n)fQBxE&@OZ7ot_mVvtlV*P zHo|8rt5SkNn-d~9xwK}{G+-q$>bSDxAC^u`Lq!8kgTCwdpf4p1C1)rz#RL$-@-Lhi zuZf(&d@i+J(u+}p>V}ri9@mJj%84s5d6TY1#VKx%Rwo|dL$L}wUYjnljZ+V$e3z>e z98Slx&kn&AH3LC3pM;^NntI=jA*6?Os?n56eM$%}g1n*e#qM`7?gyLXgI>sP<@QY3%Cyie)j5=C8OVgou zJd8N2R5$jEhq3VXA(lgE$eGw+Xy9ISRVHL`8jxY|1iNN3#CJXc4)JMq1T@+YT^hc@ z7_MT=ebPR&)O&xiks9@CQF-{Y2h_p|<(8%`Y;$jmJuU>okV-BIYE@{>oB#7o(q^Z* zKJZ6u>1^g1gb>AkA2Pvd!UR^SMvx32Cy8OuWa#e?Blqp+mc_je!|rY6bLkj5CzTkJ zk(OOK9Cq4-Flj+=CZ~7(g1(?wI+lQ`#m7jG{V?OeK-#&h7z!yiZ!Yma+IoRx+NB0U zQNY+C2P;gk8CWli<3F|%rfvM8YwYq!dIARQ=v;9@7lvD299&~1-IXBLWSjP_G6p6V zetH|6VvJ4)*jRRoG=4C@+udMD^XT_I)Q-P^*+u}SmYUe->Y~LYHLbQ#6I`L)Q@t!l zW^<0Po>+JV3bb_UjV^_{q$f7j6$cXws=6k@F9wzN@UqGV=sCvK;@O%Gy~EO@(TB#X zcStLH4wDtD9!ro%tc!kBk0UrNSB)oNjkcmEOgKg=OBnx9^0--YZ!|q|(u%Ur!g}+q z(MGDA{5z}B;O9kJ0#=sqy}&`;xjBb87%1!|KUN2oA8mzCVsn2{S8}^oi${krmTATch6b;X77jpvrKkqhJX07=_nmsttTl~a zh|`;XF{R_RaGr-6e9#>Valpuq<9nHb2>QOiFN>kk7iHyH0FRa&CWAHuw5{#hIXjP? zW2k(@?u>7dMv9zE(??MLg9wYFm2^0-222r*->;z;PGx}a38abuBm6Aa+R z(FW%~e@{1lu}17x+8NB&bVHhHl3QmCtS)l_&Y*voxr!~&TlA&#J|EEC&@aBx`zY2a z4_uCXWvcIg?6FImI}8Y$4YNkdWl{{L5y*gVQ@_ zs}XrCwv*nZrn^cS8NzPKl?uUvoXkR<$jSsxtM3>pZ?Saz^(QPHc86E{+$>sxUf9^| zs!g$*J)1N?13z$%G`~Nf4*p^R@a9sRtI#wqxFSIx>FffYW&@ya4_XUoUk&=!p-2y4 znKwFbVgb<^Glct;!w>b3WN@O~YG2jz;W0ov?H~l3_F`m%j~08kCZy|lv$cF6IepO< z4*GG6%sCCo);XmW;c-|#+!c}7rH@B1c+SW2;Vz?HXBL{Wq@^)SzgsNsgmMhn`hhZu zt=4A*dnppsAKCckA`04)akPNM>4<~L2bgl$d_#8`k{D7E4Nrn+#TFmy*kTMY7wUKd zN8zuFLk07?IF-roMz0a-5=q>x-YUp|Sl4wZv8?VTp+rX3vvo*uf2#6mqk$4{wF^Wl zue@kKOx9kSIA$)-5J9HuZkkx!SMUpQsC!>G2b)>sNBaTKo;g1bk?~e(d`lRH2y1(^ z&p3Gi(1)EF1B}dA9X$V=!_(3SM|s%Fg>^5Y(dWa9Xpq07T_dL4SRH`gbk#x94@Akq z`4HJ(MP7V*9t~=EuG|Rh9lHjNx2hk7m7}8H@Zn4p!0;eeYa_i}96^=|QP<|5#*DHI6jNPz!fI|i<{?9eSeBMvq3>*fF|6?E^h ztC&`~6*a)WtE<&^gbgFVF?7sMT1#=At3_$LAi!3M#r??bsl?kdrTK6qG5w(V7>%O( z_=SVoi^Kitb#qwi3V8G5E6#@Y$d-HF{Z8$Qz^uPa2!rCDJ!t$w9FFaa%d-AEhli~X zPG=U%b)yCGuA2+McP-NfwOzy29ttoIPjA}oYClW`ryN1?n1)%}8j;G>9<4fVmG+MD z;eU;8l+9FA@3#D}C$8#zJ2su8-58nqwNgyVU>its40m=MdB4XN6rZUa+Q4#;Y^3v~lcVggvDmd_zMv6KdJbVQ| z)BVEnQXLGfQxFf`Tt=q}?_}BHj~p5FLKr9mwx32M$QY?kFgP1Y9@`wQ)Br5tQk8== z=0^v+poic}lfmO}JV3jZAw{?-aCb7Sb~m5q$SiojGO;9gm~f4YWc%?;ac|8A8B? zjn}*GX=GD%jXtlQf2fw~6(3+iIsL$}sh;=#FaU;oebr(sChYWkMhTt6PFy7Nl=K4zkt%DvAGuMdc4WdCnGw)jLt_T%th&a^ z<<>*D%(=cUI?T@G@b2nF=$4KelPUMtF~Nnxt^8Q?GM_D}t^|#t(;Zy2aJRTl0e#;F zxwfh*oe0pS-qRs)NY@ec&!z36Mbdmi?kobJ>Unpuq^Y4n{aDatNb)3dFIjTjSPl#b z*&Tmf9B$XIUjc#g$>E9jFiqp)@G3uk;|8_R3*@D+9tn9MTv0+QaKDD*S%}6jmaN$) zvfsCyGflbfes_6;vM;IH0uMYLk=H-<<)0;?cgnnKgM0%x)iHrbgG>FBtT8A$3kpsgS=u zIU@z(clw{t7T7p0`rV(87KcC^7md@xMa$o~q|Mw{>WM~EvRt>ae-G8_AKSq`^3bTop5ND{nJrXzjca7A2EpZijL2-c(}G@p#o?Ts z(nUy*PfoqODZkPGe6|3}>_xBgdkd(fpanQ|(el$-;lS&j)9AFHv^I}!iLf8PKLwV| zY+U?47PI@c$0qJCmh0r=WN70S_DtcS$;yBGQp2VJM#^@Q5bbQ9jOUj9RUHn}Ia44e zzAp-c%_^A_s=yf=xm!S_fvK>8rx%Dcl>x#6OF}SlC#XVEQ0Yc2IPhg~?N9nAP}Q#% zK>f-GC|E7uP#E{Hy?!DZ=Pr1Hy;aAlaE z87(*p@c<3e^#%>(QkA)D>^JX;|HI`!a*u^J+}|G1JiY=`P2ROY4ALeoyq=NRA48+->i(R)a1AswW7m1UHnE0k>uoQcMo5#O@ z1(uvRf&G_sm+xixd;|w~gD*bgkv^H*ziPGEg&h%1&MC-%uj@lx1%aq3{3qoI-ZPMM zIeE+7)&Aev%Y{e?`!PgDkayv-y*NsNxa97SlOizf zUGh86*Uj13k}%-db9d3YtGsR4m8T;tBZSZHM$5G*dSEvJUMW0dd$P5F{;w8?+n+zd z!^ra;6@{9j6Lf85C!OYJ=m+Ew2EZR+Yq?)<5I&%HU;#NRI|%KZUm#_jpXh(r2*l4d zM*egSAz%Kwhh2cL0J5qXlp&=d4;T>d%A+gcMZl!uQ5#zc!0}e@=ul@R?z=8>gq9J9 z;i#{RgSd-)qWS-BGGO^wc*7%%(5WKtN*B&pPx>dnDjIABB;YpjZ#HN>I8Xuo-1LAM zBNs!`lQ6UR!IBG}WiITidIsuXcHJp|7R7JMeBH66N5(~k^w6UNvhAR6al3x-?{vOG z98SmU=D+Woee&#IW2oblS?Vh1u2nMaZt-le1`@!}|z;}X1&jT1?&!~QXB?6qF1k8uQg908Bj|?$wjP>#o_c|IbOjvFfZNiw zLiWjXI|BbKTgch%zxPbgd_j$RRXFm3Rx?1JHV-#!}8+L9qols?}AX%`82S& zA}$Ab^GR*7%&=%}lW_Db(GCPvP z%#Lo=>z)jJ#XIf`yf-6rBp@(DPJ6dvhF{oMM;LpL%j{Q+={NAqOtq6P@4d<2 zzi4X-!Yl%r-kkBBi5=Z4xh{pqLjr?d4n*o4-do}UC-0zunpU;&WNUQ=VR&LkARzu9 z5<4)1CDSWE*bHt8VKDk*QQ1t>p=-`dVJqW9l)<#^=bfxmv3Nz`;43p$f<@IM?9vWdrHSe zE2SejOzFS_mNF*zgc)gA8f$75enSFty91fhWz~L6}O$s4$}gOWBV} zI0Z!#=f+gJ;CMy{;2o=niZXvcGDY=>slXXHdqR3VHaUfXTP`LJdYoPueBnu2T5?_u zdY3b&}ab{$m1`7_ORIrHzximjeE!^!Jt!n37M@W{K^^ScSzSF3zBm z@h7gu^OnE!-P^+z=)KwxPiR|rlW!Wf%tCQvBPFTMsH$LRIC<@ZW57vwhD9%3S~;6c zRzUnW&cjQ#z{l~fltB?wPYpl@&V%@tGNhpNwFWwaZ_#KZT?8K-91qXEIE?^I{!GqN zzLlZ1cm})0pn~kRraivPbM`NeA6Okh>)$v6W(X{?c&-r2;=SE9Ms%!eg>gFtrq;-y z(~I7Y+T)zn7)l;6b63xVNOc{ziRf5YxhV+gMH9Lqpf2Nf=g8IX7b5`6-1%J(5t;J4 zg}Qi+XK&I#ld&A2hL;wnKDmUyx5pt-SY@SeK;5Z+mkv zmc!j7r_-eN2QI=}`y1Etz0CWxHZ3rRI#`Da;QcQ~VjZ`ToU;qVMFD3D^EEhz0oQ8m z2QNwnPLA2eww&{?9KP#C$flW{F^DIwPjm2C{yD*ceU5W zsDy~}$LUHVUdX6b0cbS^j8tGkvB#S7_#}q_xHx`pGzh!MV( zc->>6j&;wgz-|YCyn1qrPg*zY$ywE5&pZP*duE}wH%Lj? zZh_8-R03IKo+qiVL;c$O>mT14V^o6^{fg!Ic^Y@bxk#K$4ihJVK{u~sseuwr9YUut z=(Ngc^7pbm@QHLDVg0?T%U7@gQu>^;s2MGTzui;}DJ#+FJ z`pBH@h5_|t){ITZo)LnBU1#^WwZ^8rD=&jRb27U^ix2>RU5*LB;00YAqtZFdoXiPj zfb9Dn#gC0GzCNPB><4=(%7h2ka#AAcRW4@)77JS_mPy-EeI7--`H?-Qgw|SpbgRwO z$%|I*WO5ksm=9o#EnZQWa^Ny}Mbz4a9L4ASdGaJ+3n96lJeeFOPXg$$C0qay8Jo_b z574h7b+8Gt^?82u~z1cj?L0hTX6^>Gf%nT3O6DO0y zShRcq10b<_c4Xh8OIt2_Wlp|1T^Dm7nUmcfDP>QGFF@zgBh=+x%I%;lAHyTVyJDO@ zzPj51v!tHvjGLbkUL6dEpS&){Fh6;h(=~2=?SVA>mh9$u#oByD*S**}+@reE;z;8c z@^nNCr9fVEKcBzgaX1=i9C!rlRgRK4kvW4WxYso^>}q>4G)SK zDNVH9ky(Qtmuhx|x9L5)kbl?-ZpzN-)c}G(eZL(M z>86#R92_;1CdAi8ZwC8yiNaKN%j@QFL-C);9b4U@;)%1px^GPWgX%6wGl#9))8T=t zHqz=&nrI;Xe_FqqX6h1lMcV|CHxG% zyBIWpAUA&NtB0DC@+(e>A8dsjUdC6ts{dmjS|Y@%PSsYfW%sc&_O z6LS@JJg}nL)uJ_FpYfWfI+9?-bs&yXX3f4Ql)l)DE-|6v$jXGDMDPrlpr&XQ&qGHq zM#5>l*w2%*@kb__eeL$^MD0KAzFmNH`?V_!stD~qA?@_iF?bv^aB7+qrd6K|Si>BO z!zioQ&0#$O8@Q#jxfub~1JakO_{B@s(hAerU~QUteF=YdyFhnl_(TI89WJ`I&mWA4 zg(~$L2zn48NOc4)(W=_x=t%RS*(%(*3mOrP*|p_-{9tO6 zb4$`0^hdn7%Zw=k`2Ru6D_Dn8nrec<9xD zuD)^^x*ceqJC~u`VSCoAMb&k<3~N)-j$f>Ujm22)oH6Au!=01VP<;+(^h(*Up7+Ts zJbQ>IvOKW~d8Qz*L~Ik<=PR#7pua~3Z2ZNATY{0QK;Es|GgFUOXrWznA(o>rIdpQy zniQuml~73~S1A6W1R0|f)5Qx{sTU8{KIbd-u5Jory5cU;^!wgdi>9avT_)Nd!7ERX z6teNF0ufv5no!FWyeGInF`=Hl%j23oK}VybZD=J*&<`i1Mf@^m$g`TYB>bSW6(qoO zjLnld_vTlgY|f(RiPx~bSsF$A@;Joz%i5z0B<{3tdg^wSW=zmDbF6zyIg#Db!m*`% z!8XE@UQ5WC+GtHN*AI)sVaj!tQTGZ|8Vur*11JpLL-~up>$8+o(hLVjYlfX{hI5m# zjBmQjBtkqzd=(vb_<0Cz)enGw_x=B>X#o@{c4zAy^G#%ojJ$6FPI(=RA5YnQYfyN3fr?h z%T9)>-=$ElXsGTf#M|wb>h=gD`U-K?=Q(b8v&RB8BFNx-kH_}97`Xv$r?dLy{xpoQ z1NbdJV;vb3{w>EffK1oZL;uN+^f{sRif25E_1}MP;~hml(}Dx12lNWQ)zdQ=st4%ca&TnAO>kE6vW$XA90;!87HA-;>gKD1YKWh=zn$7*~O%k=E) z3GB4Ja_4@8PVUIpd$jZ%OQhB7GfDqYSnIf2tQ8JLUly%=?95AEeSVes0`ihA$>qC| z7`<^ZI844`73}#t(mS>4cEZPK)p>|ExDEfg(ScGBH*Mn5}f{9iW<4jpiX zWBy=CQ&A99=WY>nV+!jB2TSduDQ!-BqDFAItG#XxFU}hyZ{t>_(UzQ%`u^s$C^P{< zc<<64IkeHwEo;vYn91>r^c1&`i}Wm7W!}PJNqxZeutE&)tyB!F++e%yn?8ttLj59! zf>;_8;f3a8lA&edFb#Q5;yGJz_W2(S{pPJjcE6u%MNQAlS5L$su@DkFH?1aN@onBd zE*Xu1|M8pN1`!0~vArz@uEwi-+q8+jcmKlh-}ooSb7L6%-8od=y%@~T(f-3iRalk7 z@-QcB9MSdZ9E=k}q=uzMH_nJf^`UdaOIKM20zN>d@0-)HOi;ePeYDw*>Eh2p;n{P& zYpPJ;EBZ50ytVpgpAUw@EaOM-(L?R1eDHgO2lRKm9Ft&k86C_v{t@w<_)vdW4u-mu zEt{>BPLGS(^LzjvA(!y zK-n^ZBw7sOIU!sXG%=#Af_D>=G9fM=!u>d|^Fu(QAPIqm_GG-x6YKLNSh~f6ZNT#q z>gBNwnb6;Z;8`fOOk7~24qOfIFTlN*(?3Ljw=+<-&={P;st`U(2Xp%KD~HkMX?*1{ z>y1G!q{04&VEmj2Tx+460(HM}ngIQ6dodby2vlj}8tDQI1I*32ii_BE1F+iZ{y2)W zb4)#by>7-PLa#s4Kg3_kPyhLq-8z-H&fe{VLveoCn^wt&;0XESJs#W6wim0-i+IQ?3jEmI)%nLWAPP>)hjH01z)d0 z4*}%>F%K=@%*z-6?+DypA9C!HJ_)HGYiAJCMl<^JD`4&|feWCfcAHg6KajM|PLaL` zlbk=q80RU-7Cq8IFHYyDy?aDiYg~biiS#CGUZ1COMjF%v^XTnE0Iq2I3^%JOkGRU7q5SUJQdyVRQw5pvFZU|JL@B8SLF@l5{^ zf9nana_`qEL<#n8pGt^M|1bnh-(PxY+(5L~x*4|chBL5D3_jps6JWOOHQE9jhc26} z&|o*e&+3E}b~+`-ITrSA4Hj-AEQJPNsgNg2Xc2Dl`xV%bdls44*zAN-EQop=>;56c zF6NWxVy>FOtXR$E&#wULH$#kN6&4AUr?LdH8uUGeRp^Rde?!p7Hdc)_1cK9mPH5Ps zb#iQ>9#7$}eH@9z@KGu3lY;jCB{u>bQ*k-ebd$QtyK7pigX4}3SXbk-K8l>w58b)^E zbr1BzWNX{nw~hx5;Zm56B_ry=gSU2Q|LOipDjrbEOFTcVEizPW&X1ywlhnC5~NhJE9x-oqKG1Ga08 zb2ng|YW)7l4D=V+;6d%H2S$&RJxsbd4ySXtQREZ$7MQf&u^0VM*$HmT(Z@Zgl>H+} z;|Kc8XrWPv2XL6KH#}iw^Y9-d&0b;#I~P+$aH+Hg%muro)`H~jL(|~>h^Z4q37CCX zBRe6l!^jKTVQ_;pi`TjePGcoNJ#r47D4d+WB`H1{T4b_Qg)1C}gkoz&|6CsxEta&- z5+Kr6#IQJlvYj;39+koU^XuYluj{vYMmI&m%H;N84O&3fqSX`EA(CYdkgsWKBy>P` zy|OPcT8$8U&%-llb8JqRyXy!4i|!vkXn}VZoUY0ZjQaHnMPY%QZc`h3hCG zN~QuRqU{G2-oIXD-&mU%nCy{C)-$P($K*N>S@_5QR)M0gm%8?of?_G@>yUnviJmaL;L8kZ0-? z*R^~KZ^$2tmlqy-h_M|cU1Vr4#!_J2#|?^rl0W9fWw)tCg{EMXAF5;2Q2~@A)AI22=2a^ zEE?#lIiZR&qNO76dv8%$o7kSfC9NHpK04_L`WNj87j=V7_p#KN(>f#ugZ>Y%D-^4y z_%@X#Y8XIi@)9cI%vjuMFRT-$z+XW=4gfokwy)&u>}vhwND2FIT>nkYM|0yld7h1IT|WD$qnCf(tP8~4QO5XW+b`%Xfm;@)fKxObnZ3*k;?gKu9S zGs{7O#F=x}9}9A2}y3GzYybNyXQFv&K4`#bQvlf+y(>E`Ab zvQH~#Y7kS(ww*=@%yf!sUMLLMYJvyWe&s0hp2x+2r_`BAO&q`&i; zLuWEYwW-C6OVk}}Qanp;E}pBP1bVv^_gh?+e6+D3aR4xrd-5xve(CKc=Xq*&+fHxI zt|9>L_BA={AH$+VgV^6xaKV(H7j7c06r$whbgJISC+9XOKFELa@9X)x{%>9S_#^Gl zBr#7;hD|r7tU#hpD`N!9b#gTxtv;EF^U-aN7b?*Zm_+zuq}{lr#fF@<2$RH8!yQGq zX-r({{~a1;iStE6oIifyoN+!|yp_q{R|~GJ+yKu*Ct|qZlSB8mqq@8I+adSUKW?b! z^nTHUZeZZ>jnTE@5dP_cHyCu@OM8n=A&3V^wEY!8B){$fqC9~*dC}Fevx4&whU)on zf#*BINglnR7d<-ZD$qY8RiM5z8nkfG?Q5K_7ic8I3!h`1UU)B3kY0GJY4FI8iU&W6 zQ;^q{IQ*Ae*5B;rf+|SFHW{?rSI!70d~)c7k4MT0pR}Ctj`ia$&792+~_ z@WBW#e8}AY!3%#B`I}z&?stn# z?TZIQ;evPrIA=y5qI!b*c+v91Cx;&Hd;)#o`Ht|CMAq!YRj$kPsv-fGYt~=vc8yA0#D*Sp812ppSA25l zijQZ?7oW5{+SLGh=Yv z8E?Oty49mI-ad`Sx!3ntG6q!BRnB8`}8-^{p7l~HO}A;J)$=*87KC++2M}69$`nhYYvDG+b+Zl!x(J-w zpq~H?7KiTDe8PJ^_=`v4+#I%A7oR+Q21=}{1R&K4RaP{98Q#ycodf%3%a`D-?XX$2A$cn(p(sw1ljFF40$r}%RTR}5Re13@TUYm~^#$EUAONsx!#|Yg%j!S{k?$+<@-?wc% zbsdq`vk=u4?Fta(E^p{FZrV|Tg2NiXubb0>MWm(Y=cRmy-(v=L{6o)Mbd#r{0CkV^ z5;)fhDuDlQ`k9}<&^=1DC^C{Z2ZmJuawl|#yF&AsJoF+1 zy5CPsL1TOV`_~5ts^g-|`DlT|<}1*Tbwl5ktl%EkzE9k*0X*hMUJ7l5#mbM|JEb%Hq}LTY`)?fn2pl=Rw4{!FUcROnJc~6oeDu!De%tA5 zcp!JZ>EjL_=WsK9T^u?k@|nKGjvQ@s24?Z2C<@B=Ccubx-+v z*+s!|7@T~n%IM5_Uxu?>gwB%^pq=4c5TN;8f^m~`Q(Fe3fBgBq>tBE7Huy>?YDF>h zM_?B6m zSa{ux#(E)3u}~bld}K^;$hjssy5(lC%Xu2c!HMY%wfO1iC~ZfA2Eq>C92w1ay=-`} zP4=wSGckd*TR9uVx1Ik`0IPzhJ5d0veglS?kzp5I9ZlLf@Eij#e&xMB9>^>EA?vKv zp=(H)7j;E|SY@A1kk;Nit-rUX5!BDy_?DlV*sjfw?XYKZRCL4+xBn zSjpm)yT#HjjAy=SCBx9YgkKDr-c!1~j12uQH|>6y~6p=JOp* zFavTY8tvz@Q*Sy{;ZVd$qfT<|5D%zvW5>gKC|~b{OPqJomv4SXWwGCAQFd%#ZC@*g zLx*+HrNCpfL;W)H>rb%jJ^yhGM$Y16AqJxpirzkQQXwzu*6r(5fcWRrBB+qgd)O?#rC0lbQLi)vgc#qeQK6h zA979{tdhe>3Zwnz423%U!=}UB*iN?;A-D0VN}^sY3~FOnO3>)1X53p;W#G|!Y_n7I zgrN@`Qpm9Q{X^M_iw|GUv>9wY=pWX8nf+?v`N(`GWZ)>B!58g}T&Jq-ZFBd-*5aglPJ=<)+Fszt zyT+|+jlJlJ!xmbMq9cWL!ti@kzb~-8 zs$FWvv!dxJM-{U+Kl&6Lm@cnh*KgoBxgLolVe}zSopwCPT&VnTM)hIv#|j$1(4}>> zKw-FifNvx53QyqH1%S~Gj6wzAbZW!tn>O@Pz%2L!YTV8})iuOCS0`NPypO(o^DAnJ z3sJQ2)c(3z_rn(s22PvZ86RUE8dy=4etH`tzZZ&m>;Qp)Q*|n$-HnjxXfsioXet3g zcL+uwMP$Pc3R>7P$)Sb!x;SoZo2Q5i85LcoXMjy#hu#ey0MN}YhZb~+e+KCvepnxO zixo$Cr<;^TRcS7Ft8Jc2hf=`&onw4w7k+*vLs3{>nNLAjsLVGq-a0=bZSQ$!cDxDgf51K_~oc6GSo8!+s?w2#aS}=IL zvJYSF_9k0l8h7+zH(B$}WBSPwOmXPgB@P|v)mA)w+)`Lcn0@zq6RX{WAFPPY^Kn6A zMPq8cMsq9BTlf7z^KM1ISl4H4-MuUtncH39A(eaj{xi|Qed0P~ssvV~9pbb4-Jl3C zMMv@N2}|zhw{cqKlEI|_c^~K%VozIPrNc@S(KF8x^VB~N#>=nLbQ)VF&Y-M~<@6(r zxZvDAjv~mSu%RNzprJjX zc9m-=(;Az3#|>52Woct5rxart+H)zkT%{IG>uSCCuc&;bSar#%Ut{9f5;T4DH$C^~ zFXE9?H^945@rg4Xqu)gPWOxV`9D}wVuFe@}0ZH*zpIOMPaI(Ei27~kwBWEgQjJw6u zC^V^@C9UYUD5kVdhObz)uc2Xw2gzw(f#3(u(I@P~EoQ39Sl|PML7|-Mut`&lNNVSEC&*rpqu+O{+_h#VKi3 zX?vOGtHgN(o(`u6yy+581vV&qUQL@zZ>X1N*WXCzp%tclJ~lAa)PQH<(QP__=5=+=8?u{Y zr#OIg&wS`bs-S@?@pvyih)hn@n?6yxXVz;V{E@OXP}K6n^s62#rID`k^g7wYcA>k` zV21bS)CDJ|SM|yNjT66WBj3{8>0VUXp@o6^s3=txgv4Wa_FkhZ2Ev@fA2zWe!}=Lb z2;ikjfFIVSqNk?}3Yc;wN_FgRpW$Z{wER&l#ItzfJ_>apZ7W2zNV5eiX&Q|xz(=7E zd?J3K8`J0TRDTL*uRQc^1YO-S3=V5&*%OLBqpKhxyd!10%Ja9{VU3-_DX%OV)ra*Q zMC&tfnvE9vP(HxQ3t}eY4PF!0`hda;Pov^ipKPf;*~fcqqlH#`SwulEitDLDu0x$z z=DNb+9(7~gbsKc}kCVd#XH>P zywb(R=~9~edT5d=Rph`2-p{%tN#QqgM}f6=#ZLGWW$74MbL4)w4a_Tg)#!WhJ-L5H zA&J^#eZ>R@Cnni3ApV6DziJ*vqBpg!ZJ2ImqbZ*cm2Qh0SX4++NhTkO=FyNbbY;aV zWjP9~5kdWQSW-;oX-$8jOwd~pF?OXyc~edDvsk3^X>iFrD8XmtRB_M*i6tdKF8@2r zuNv94Bw+{hXw;Qans0IE{aXB~=jmjK?jhvbtR19;rjrXg<2N zE-dn6`W0tk()xy0?iTt;J;7?m;;a|%@Iu1Yi^Vabie{&(!#k0_M>Se#!I#N$IS%(w zAKjf)2aKrPAXR7By@yG=3o|%6!rpYFzD))S5f%l5$q!o{VLFq6V*1Kl#J3@bFw!_V7fbPp**+`l_kWYROHnyC6`+Gv5y0eGL(HG>8 z{0rm3F$(eW7^&!BjOOnn{(&Mt5Au$N0i_>gsLq4Z5@QRoXC9myL0g9EJSb}PrWNx0 z=4@Nz!%%;>HGmgsY~k-D?HHWFVaW9B;v4`0YZ6IfZHjAYTq7*4 zU;kwMm?FSR^2xc~H+GUV0p2Z!*;u(rD-<(dR?3yZEZJ z1Ob*DB}8Hx|DCa-)O#-KuJMwhcOS1g&lFz zcFtSo*WhoOB>sHmE7}&qv~{EGoPp?;l`Xq^4HE4!6Z!XU=ORq$0X@uMaT-6E9PMba zxJ3nx@>2INSQa~5m~@@1i*_?o_>G0*z!WcxgAFay%pf(@zPcmia#$G-BJD4h6m*Uj z1Xp&I4U)nwj&M%aTI`NpH)3OEVYsn{i?>+VZEOZ+v^5c^F%0luOCD8ohn09Rr1(Xk z7xZS`v{hB*kOYSaa%&=|$dw@;2-Rn*fj=;}9)^frKi%0OG;WV2P~7eTE=V zPNSEaac?mZQ2?6LF}M#cRbj+;ZE%SF6W_^BTr@6A?vW5+K+?F<0X=$r<;Od4h)9}; zjDM~cyvfREPN3(c82ViWIJBS%>0>k2E9q%7Xm|80Xe>Qoi(M@i2ba%$)02W00E~;( zxY4UJDI_>R%+2K;^x*+3IfPzXL}J2V!nlCVdyT!miiRI%3ueJa$zm*xzJk7G%3Ba* zYgmC5+x5)Mgg)}yvS!DFdC!hruUCG90e&W}a+JyGxPX7%94wlPmK|VF^B*hJ?(FY1 zyq8uzEsK4)_!@7w!8rM6%Vb=aMlgNYzHW2M{CwBrSt-;ll{ekK$NA`xb7)T4H~DXf zrxs77QJr0IVBy8Goo=PXH@8NGVNnc0qJ5<;6b&BEwg27^O!)@Z#|%S$v4U!hij$Wf z95Q(j`I71(9#FN9=uYL*zUqVvoOjZfZhnS^4P6ba+B`m+$i=Z{qLj=UUE6w$bf{XT z#$o7?9o^oTl#oPA4_3tGoP}MN7K$zDWtewPI3rqIv9;>eKu|7 zkMzrsaeQ3A&nX$%>H)AHKx3866EgP<-|F_bTCAoS*Atj1=QfnqyB!~GrIq!S<6`08 z=cc=WpKY|Ur?ACeH)m-MCoS-SV<)C~(;k6Z-$rL(aASHt8s_CsfLG(US-yYLbAZyE@gC ze;{6dk;Png_XxZ>quedv+QI{CeBAwp39sx$eGje6cdMgLl`11h7E7Hsy6Dz_c(r_SD(#J+Y1i)+HmMdSlOl8J?ycj9jtU#8Ku%)|(&5=#oWd`6Wq>@&`+#(+ zj;MOY!9|3hKHjvSq@z>8S>ODu_{pS!5sw_&D7_Eech-HR;46Is@#U4uVh<@jl_!03 z+IPJhl<$w; z&!m445CryB<>AU+N8UVD^>fY#J%L_)b6A)$>G!hwXi?)TCA2EHnWNPfw+vy@2kjTa$>{`p zN``E2mXi!WrHUrH4T>k6Z`rx1CD)}Nuo{|)Z2vHWlj9D;&HB>+%E7O|89GvEO<82n zWzg^H#+eu4u+dxn>Uoua6rPNWY~QNfCkBs?ubaa|Ydq1HSY7ma=_U-F>X&%i-40At z9S?UcT9bZyQ;E=Q!2;j;grXhX!vwt~sGmT0X>^MTJJpsWcE1zVS^_=A3_>`ua{Btj`Eq>}nY%Wr*u$o$@bUuY15^Z><)B27L zQJS))-w?En_LCIN0yT$4W^PVo_*`WlA=WcI`87DblDua%vbf@ z>>QeY(PC5jFB&`Q^@}YxfVWr@tf~X^;>{IlY2qePR5j*!Dy?Sg=aCiu3~E+L$y!&f z*&$nRZopisS%`#%Y@KKfjX0quuM`$lz0zPWO1L zCZ(G_P?heb=(Gb2R$<3_Kq1(Y>*MFw#c^lzW+Ljpa=Hq&n{r+Es;WyGKKccpCG z@bT+4yI$Sdaah^R>0Z4Wr*n9CdEFeInBtMX(yII+OA!|6Rv9Vf*6l7qK?PA}30_AB z)n3gO#oecRLYXp(it44P)@mGpOc)DQK1v~%ipv-tJnABW>pj%%|iZB{nr ze9Gfl7ONJnhc;o!%FetX@CN(g#$7fCbW8fGS65PHOLPiLYfIW{=Q0U;=?Iye!ve@# zj`hYuV^(>MSD{g$dRLhTD&MyNR}UK7=F&9>=^vJ-r5)rgG_Qc;z;{#PtC!3*5t&zu zxwVL#Uf=EW2O7#~z$=O%o4V}2Iyhv~35f!@kFHv+GLJdaYKbk@eldKzq(2ZYo^`!r zXjf=n!_6dwQ5{>QlTv2hg89WFtW#Usc_5M(C zbk>oFNAT2}_QF)jQFX)7zIDLCXt*rXAlKK=w2yN{flr1BgMtBxDVMume_vfbEj$J# zjcbj^L8>I%YjLf*l<_*pO0v>kSD6Kq^m_k&QR6u&sm|uokoxJA1)q%He zLJX#u?_f!Jmodx+c2ky%*^Em#Uios$ZykS@@e*{W*6GIueaes{Cl^=W)G4ele_fTD zIKgnky<>{JZcdYqLwaynP1nVdhB#Ky(SbyJ!IUwnBg)ielde5%xStZVbZxy`7+%y@ z`VDsHWwhVJn25Pkqe+CW(2S(bJW?fU=KvE5Pr#zF+GUr-m#HH^oVM6Pn)Igb@k&+I zZr!<&zLk`>a1~SftImPPm z;^gC@#zQUbQMgX26QOv{Z(7s!X!B#k@GUvcw5}2xupv{g`XS0yWZdT1d)&K+&-8)t z6K&9bZx$R0kUv0|`SuDprh4--;A1G#$?pQA)?99bDre$VxTWlL|0-MCe=S!^?CEVdq( z?d?_o?mL-zZj(xy4~+(Qsri0unUnpdr(3oh$p1 zue;EgUqg|VMe!JL!_>P)Q!HkYwOh2ROIW*)935(5vQTc?gOcJGK9BFZE;r1vU1_$d}M%lx_qRr70ocdB#}M~4fg0zh@p@m(^a4^ zZ+URf(OfL_X!CPs&_C2=v>VmJ55$oI7Pl1`DPfC@3c(6(}MH5Ik@(eq1Ws091mD(GWCW`z1m5`UWf}q z6%5Z)J5z|Er`HGFygA5msCfK^yvB$9P!yM?eL^96lrgMGH^X3|Fnio-nSLJA#uke` z40dW6|Ya!30Uy%UCQ5DyG~?F6k)1S{gFd zWO7W8f0Pepj<|1veK{A0GJ+FLIy}}6Ep~~3gu}63x@O`Pr3u=QFSJRFo_(nar|VX1 zbaJXJ`_1K3w#-2Zzj=haZ}jkDl`0il=-(*iTZdc-0LWWa>F=(GN|i>@wN~j0sxntiX~SN+g@Z(|D#y5#vt?I~pk-q9j}}_|?%4HBE}}&?aXZrG@7wL%G(3VH z;n{Hxa!c}=V{21tJe`i=w-mnEIc_hiHAe9~pVfeiUx4Bg@UM&0mvU{AgOjR}L*acW zU95ZGUcKbHoz?PS`KE`wW2|FWb_71Dbg}MO_4nEoQ@|@j)u#6ZlpmHh=D9=#W~)M1 z6mV#XRXR$msGS&|iJ1)Ei=C=i7_Vq)zClhZ{g&}YIZLbn^pO3}K9;!MQ02qm9Nm+h zrVNY!=5*DLxHu|}+jI}<#jl(04CBnM`t~_mEc_d{afg_~BO|Djvm_k$n=MYmZ*()P zlj3O}AK_Pc(T_G+>Dc@2b;0cvs?#TTdP{%nx`QovCIfvG8E6x7GC)#uHm_L1-{^ln zTcDIUQ9%8WtQIZ9&oS{UV)EO%gv&p@=51viE}i3YYFO#*rK30sqLofR4Cx=P7mo%( zi|5?8mv5R;3Hger(M6_{_<3sFvCa>AO05MaB|11N()v`X8Hw~$Bz<0__0esRA6U-` z?;|cVj&7(tSUeaK-#;msSQM4Ud$61H{uGt)3l5DT({AN(GQnE1*m`$yU1|HiZcdesICA)M zYdB1F#|+hvm&z=+Zq+MP@zfd)-l<8q~0Yl)VkJ)-DFa7p3RG*6_~{LXNEWtVk@c-mBqw_jtK z#_`Kc=shOS4-d&Y?a?yzbFgvlAg$PufLNFgr7sQnvilYnKlJ-w`=ejv6z-m_ISKKv-`AfBC6T{=R%C$c`A-jhZ$tMq$_!%_lNNF@AbQ`c2sh_vdN{o+Hvd zwF7&%qs57n7oMmA4q*wWH4EQ_7#^_sL$R{Y(f~gCuww1 zGafCJW9o+4R0wNi(VY2&gN4=0pXh-T?xGEHjQAV#V(cj%PO$sub9v7dbYv|hhfZfc zP$^3xc9F7VoJTR=*n@^*Yn706h60%*W$BF0!*8@`98IMx*^D1~Tbh1RwV+gnmK8rE zWhrUDtP74;i)T2mTODI4UOR@{ze{n7XX>I>DM?lf9=l>BErrl{3vQykbUj-a zT=y1(HwOG<;!Km~`goKE5o;Zy_3!U2*<^9ZiaSdt_Q9^YIdkGZF7GTIzkU^$mP{96 zPjqR?bQLds@zzqp?s`lNU5&?YuDYRXC6`5-lIni9(#^k_qz-18Q^Crx|9sru!jhlr z)x%O^RX8h+<;UgTjJ46drG)+7lI=l1(c<@wS=z=H^*3PN4G(?wpJ5uTuei5l^8kc{^0y`{u>HfLf^&~v$xHDg|WZ^<-XzdZ5BZ!`05lIgbTJEJbdDA(V4HO9cRV|sV@^5`e*H~_O` zb15+4lue8dvH|lnuv?TO5o_)qrAR<>d^0}J(tfcu4%>Wo{%Vkyd8u4?cmwHcKG*$T ze&TrA2@LS4ZxCY&j4so}FL-Y$JJe}0h7hO4Jw8uOF>jp({i1Z97UKf0TEul*^{_n2 zHNLTwp5=$!xPPmK2{^@I3r_|uAFp+w9;T-m_Aq~4_-Yh0(+u0bI5_7KS8~-tl??ot z?7Wl5$5EK{8jJ0M_K%xO$BO+KS)I`Q?wwXMQN&uHK44;ptp+MD8!o-nrlvuSGlN z#PiZc;cq;|SGSy>$`9>UfbS?^&IhrZAKCG~WYJwHPY=c0_T!_)R6;bYmlw{=&R_BH z{q^U1=YDo8p4ZCfFP_NTMvLb}NT2Z1h-DUGFM1}7zVMLq11GE(?zg>&Uo;NDob#@$^u9xG8ke`TY1(@4`VKECx529(s;aA0s{V93=%SJ=9=N zAjF~m{F!2y7^a7wvm)BfJi68NUjd@Mu7!JY=!H=# zD41{kff1|tDptjU;^p|GGw$*CKloT*{p=DrsBq7PW`t3eS?) zEye8bs~hWQWC>){Gp9UZ&k(&Zd^Hs1fX|nbF_Y>&Lli{|nGw(=I)_q9;Ty-STIPe^ za!MJZA%&D7YOL>B2t&f4eOyyGN2M~DAsS$0h$e;^q6W7bN(LQ*&Lc(i93|H(OY|HW zhsqK)`EzdJd5KeHi2^h4yO1dvl_eVDRav4TDf9e%{PKfN*uEGZn+iC56^>z+XmsHI zQoCFx8&vk*IZCOK111NaS)$POtA>y_v0vtuHwvA(r3I+;M4X-_nnDy=qF{5LpOGb+ zu(Cui1Rvpu-@EK_VqmM3~C&=ZOYPCw;|CgXdaD8_x);rknZhL^XCG||K$^oU)?1~F?B z!)&tEs>>s+1@lBP3UCQ?bFjKh`&6PRn18gZMO6X^6Gb7A%8pM$z9_4SiK5VZRoSgp z^g7|`8YnQ9`GXF&(zQ#W%6gPI>JmvgOH35SpsJEMMiq+1#CwmKt@YOCrs<7%MGSHQDA0PbAX`T z_ZO7;bo`}v3qgNfNuo(HN)iQoFs(>QqUe;#;15^#dFZTFlIZbr36UgvyljAyL``5Z zJLX8#PWM2#JX`XTpG5&ybSIkYATstW(IjM^+;b_J1B%UJT{dNjLX?epw@{uhvP2Uns*bT8y|sWUn_rZAOtDSsZQ3 z|KtV76QiV1uwefKBaZO}wLFe5_bCDNgeX3jWs~bF?*^-}DQA{hq8Hq}`BGjyG$|}~{DlMBd25!7kK*3wkM4luH?t%=67DW}s1V5gxsU%U5M9Z|%;4S8eg17GS zQXr{EQAnDL0E|F$zge@R%p0zkxmXpa1W7qjGDQ@eG;enU#`MV9(-%j*1jE9N5}V2c z0GXb7wRrh-$`gJlZP)D#0+EfpuL|-gdD%2!PZ7N^RrY=R@@&kcde099r_hH`B{}be zPzX61YRnH!5v9LN0x3Q8c*WI74>hw4a#iV}X2|g-0`o%yjs(%fFhkT#J-;kOLr%#) zks*4#uB$RcO#qdYix5EbdB#t+>1|y3@utdScw3BZ>{gIooqYp$s8*T;P|j%b$-FnTXPp zL{oe+OB8k;JpXv3z#-2OO+>pSuZtQtFg!;zr2}(BA zsyO$`LmE_NU_9s2v`i7b;Nk9_z`!`kKA9qlPqMn5Qbd#4Jw+4)Z@JF#o|L_dHRZ^D zZ7SOlMvK!~u}YLbfPu+qIur>veksVS*O8y4ga+1o|n7cS_3`v9UXgv62#(1 z@};~E9%FJ^mSfH_ZO`mDtXuG6JZ!~NesrNhugtEJk92uquue_FV19bpVw&Om8$H~O zXwg-nkExj59^ZDk&)2%1?$r!6v0f-O?U(a{-NBX^z0qtvOpz=cBHfc;<5)A4_QXt$ zZ*CZ)TOcc*0>_DnSf%sNPAw%cFWe&H1q~4W#v#p?A7kSq6;4S`eEme8#pDmBsq7hc=Ui=TIUjXk4E-5$C0fUr^1 z98ui+_xZhII0of;1EX@spZkawbBqJm%N+e`@Gj!W1VwPfRSy&k-+3YF0ZVL#a< z#%_Xsp@SynWv@h<5RLM}TxqZ7JV}yKk8%H`9WfvI8U`}%z-?adxsusV1hl=oP>thJ z$>dE#+Udq=tshmBYVN~Y4+A=0#|5;o*EI(f@ASjLRB|NA`PYx!2p-4KMUShu_0nT@ z*DP;D+vMzCoZ^PCERLr-;61?SsA5BSGwl(Gyx8!R{``iMquJ0j9wnP=q^l^D~l2x&q*>5`)b4Yd;bFy z4{G4yX}*}j(b)T~=$C`Fm#q6e8GGjzfi6u~FM!8#1k45d^&>HUN#erjS!wUH@fkRM z(;u$LG0~-&W7f9EtlSBDVcd~wFUqg--_d8T`)xSHuYGl3~u3UE}f&uni z_t|b(iT{a-w}I>(`SUr}s&ji{9%bNc6p^_xB-IZLRL%>RD62hfHjfwDkB8D9uLq&| zJs$AZ{2zZYA=Wi8;h+wt{OdYy?{8MrsXDX?j&gDtwFb+0nWRTdc3)it7uG!5zVM1m zOydK_`5eCx#^3Wu4Bzv}KJlJMeAA!v$U*U84GemH`MVpKRTrD~GjTlw?>FyE z*Tsv_TiTqao4qpqD1W&PkX&@m4JW6)4|cg9@lGmIS-E_?yQPwzbFce`AdtH z1u2-?9w297?H%#(6-EC!FC4z`xNk82`k~iuJq(8tI#G^%%ywi#h|SVV5TnKRk}&MS zo(RA0v4POFlDL-neJ!=C`2QPk+7lUXdg2z6w9E@0OO2yx}weaBn9nKkh@Pt5Xda2&R0 z`?@g`E`2N;@HS}5ebE9uoMyx^K zC)gOPUv-3I@@&GKgIH+GrBKRO_P`r;_{L7D_3MYfT`G?zHrPw0@bP9HE+VRCPfzx9 zweUh2?7)`EpI2aP(ASYS55KR4PVIX9NQH>U?;rjIW<*K!z^R{@?2X|nfmS8Zyj};x zAH__dFV9vDa4a5<1Fqyp-%4Jf1b=##$Lc=qD&+(tl5cjp>le?Neq<{8d!<(k9p9x8 z?3LJ=ZvT5PWG~^hQUydxyWml;_n_D1k&GUA^20ZtkEoBHANG~|j%Qah+$1$qyE1%` zN@Z^_58c^iZdD!1LUD!Q4hvQJei2UZi%(IH6}O7;c=h_@qjCOoOoeX z8IniY9`1gmA7whU71@$nh_0MNh$t9m)!k*>0?4s?CtsyRkiVe%+dR69nnH#tfU*8Q zvw%HF5*Vga-h1Znr-v+TRMfs>k@%Y86_@@}`YOfAcPw(Cs{1LUf$K=-K-H$QK;ccV zjj3O}mY930M6G~%5BS%Q3qzCBI$$tzYl}RSvAe*rA{fCD*rD+=cjK>2wc1q>muVfp zNxiKH2J}5M(Zd$gmrBDJUMJmd{9rdq)&ziL^>-pR0u&gKYP9J0BcXu%{QO0y`zTtpcoMiZDyF^y7FqRlkbGZj za~3PcUn7TG7*nUp+<2e7>h=*mACR@x-$NY`Yq~FS4&OwdET4_y7#zjqVNw_fLOk&O z6w2~J9YtrQ5T;EF2j~bmNdnTwIQY0lAOw9T2~N_mgWaWyzm~}u#`lepU8bKfB>#dc zgXx7XfbpylJCE1(#9f?2&63Zu{-R=;*PqiTc&K;$O*#F&-+`U#50IuE85mwJfofY> zDIzCC=fgiga*I*_;3jwGseNF!0v$oo-tEZqBvh``Z`#Dey(Y|5G1hKTcHsr5e7mg5 z0IjpHzc-J{%A{_7i!_cimd$bPR9&j7#EhVTnZtk|2*bD>I>6~t(G}A=OHxxdciZtE zsMevYge%3-H)FW#49tNL|3zaX08M2SbS`aZLOJv>;iOMvTh4;AJ~ zu~((&M!0Mk`bt5Hq%SM#r3g?Vu20z`LrNg@CU$n=4G(69=M^1F*U$plu z<*yuJ!CUdWh|IreWyE_=rVSJJ{EK?MXV3f#!(hRcfKm4he+e||_Bt71TbwHEgwc$8 zoM&i+HcL(q(1vL@7Vf`mT1voZkMvk1V6;;71?DN(JiT_AC1Aw7A_1e>>mMHp7}jQG z0!DVhLEBo68D;=R>9T_f7|oK`ue(|~O;5nErE&KjT5PXX!vu`FRfQo<(zTUv(Iu9r zGEJC(5pX161V#xM)#LukSg>!*j|2?cK({?)lPV%{%4&Zzo3+seBLIPxw6!@LXYU}{$_h+VgCZbjZj^-IyIiTy!gPrWcs+bRt} zMSQY?Tcvz$awM7_jvhVx!YHHa#v%^7PB?BK>~TK{Dn46@`6k9|j@wL{r^`w&8~LxK z=U+c^Ln8g6daCJX`bD!WO9?$@^0%sYANUB{3$Lp#-U}+xQtukR2#+4~G~Al5V7k6= zIKl{lIgdONiK+Z%Q^9S^^Zm+C&}pZS$|q+&Ive9rdIlJ}&H#RKN>GCFXN8*NelvLN zfbk364Tu)HY8EgJ?(okA!rgPtZj32RY#h?~Mu&UWT4VmbIm#qn8~q)^e84aB{qxzv z&esW}LdgZ=8&{vw&EFSB`2($;U~LQOwC*>ORaElD_^o9TKyPt@-Uzz&89`b4h7#lX z1W9FopHE;*KGXRB%_Z&1)tVwj_kO{^(v1aw77k?Ocl)siw87#>qi50Pba8U&lv*z#R=8x&q~|ZS=`{3r*}~$(@eaDt}q4M zl*Qzy^~CsTz4?2FhXJ+Lu7kEw1F5vQFtQ?}H83CWtK$FpXmS4;dB6ed16PMqUEdc* zk#HkHPXvOkXMQLNBntXw*DJ1bV)GO|9qU?O_Y-RPg=0K8p5*lr9Dk3C?>GO?k7AW2 zUK?*(y$G{0iq+3u4uAhB=GE%;MeNF&nZ<6Zz8f}?)sHsom6Xe_V-!HFlD&|E*#E?! zHk*F2Clk56%T-F@Reb;KDlcup3e&(=X>vDIOE`R`=#4q3$(lc^g||Gj<60IJQGUE4 z#?`LTePA$y{FNr@9p@tW$8({4fVq~Ri~Tp^0Y4eG*lSQc6e~dbBt~ns46}>Y%GUE0 za}$?0sutV?;IivR+B80%yDWjW{)vDT%^z(X6|&=HNf@nPA77S0!p+nG-+gJ!?|Bzu z{DHB2ujl^NyP&9rn>}OAU)_;k$G*JMI!E|{sUJV`d3wjW7XI;EFCXBwrhlw^@Qv{d z3WFc}25kD@hQTcmVBYBzdkSC_!lxSC%t%1;OLA%f>wairxIo`GMoXwJeTDs-xd%Qf?NW?dyBPE0KL5IA zT9rX@(ZXNnR1`RYDu1&Z=*QwP=mpVv?9(2Er>)=aWX*b*UVy#UWZLG|V=4_v5f{u_ zUWwSnmn$$hqehP#iG}&ez3I@)L2bMpmV@4~fOA^sVY0!6!Nn60hTZ!9FT}$zJ2qkW zt5-8D&-K-Vw4Hlgc4hV+`9Z#FPAuT!tmGK1&i9Sb@_CoOy#CQ#e;<~1D2A;a^m$c1 zu9=A8YBZ=o7)qF8HFW!APXhw~L2d~U%RW_5;Wo*%pw15lTk)xa;3FviK?7(`2EPZ&Vto`8lwWq;0;XuO^2p6* zVvi?rZ7R%U$6PROUjFmr1M_a=2VB-ii#a4ltT6M^ia``r_z;&}K$w6L4aP_*Fi%6N zJMXnv$!Qo>KCXs*L5J~+O?BWcI?hiy&W;lqX5UCi?+K?}%hflDU{nXj;+0{6ZBV~E zh%`b2%s>M@nsB#*mA!`CwO?DZ`U*)~tnAlW&I85jf}PEC*+ZQaD3-*+U)YhW`bUdZqzCVz8eg%x?)YP2 z;(Q=lclGXwO17zRdHBLbf4RL*-M+m(B5kh|cWiGUVlzW1{=J&D-)#P*>S%-F(ZGyO z_6ME1%r5X!13n=cyXbPG1x;I&;kd!>Gj+^3I>-cO;$%tLI!FNLeB~!5u8>NY9&T5i z*C=_B1j2L#_>20X*1LiD{DS8nzYwKgEgpRW3-hiV456tSL>Fcm4@s8J5g3g6859<$ zQ%v zFq7?(xLLrAB6 zv(zgJ$GTX`{BY!-I(+TMxJLaL)kBoDb;CnOdSI;PsTRU9mZ_FKI)k+>aoCv7PC#?(}G zspH!?7U6?{o?LrHVu>E3>FbvpYld)X?o`9dggvB3qUwQU~Hb|YXm z8r0N^fWZ}J6o0_o%|XZ5BVx2}0@Em3XOn@A$>FQ3$LgVv8fLn!#!N$c*@ zrg0H1HmT}@X;9@aRxCJMxcqk*|99b4ojO<^PupHEHrL& z+qdz5z}1QQ6Y~N031t_gFnDjP;1!FnJU2KO&O?rI9?WxtT~Gf?qklIViwiqfP*HgX z43;SrGT!2JeuBq@f(lg{0IWyTPE$&(>H@<#SyOoQtV|+?+hQRNg!wDSa^;zvw(D<_Qu_)Y z2%bx6mpWQgUWMmparwSm=p(G{u9xoLRoZF0THQmd?JYK$O2)t`8dB3a;4}@v{4}6E zIG`*pQf^qcJQD+VaQ>b?YU+<2rUFK^ErbM3KJ62Ggf!s@%g_B`8PG4B4eTxN^_AB8 z8g$0c9Q~Ec>Xv}7J1v2PVa-SwVGa+hU=62WC#n_Lc_(aJ0;O9ROA#9r*#k_wYYp zml7YC5BR0Gf36l>&Too^BD0isff$e#1d{*q9J3!<5`GZbje2b%#S6mSJwDHL;okez z;xG!MqYH#P4Wh}YH-z*YLC+P1g28gAv2(!>N0pe4+Z9v~a2ISTkVRK^b$NIi-Ew}Y za4}Ik>EB++=>gvp_ZH5j72H^?UVf3URc8WU%!+?=vHhFA9eHwbOlc7#a?C?(b5%NO zpG9kOHQI{FmpEoP+q&p*w)RPo@$YFpNaXsyg@Z7(*DETAolxt)FHBdhhQu_a%vP&B zR?~e27=80hXFFFF189wVTPKYit2J-nAt?Z~_N^#r#lJWDfq1;C==V_L6!vfTaQMN; zx^Hq^@z7Dt4#4^~Jf4Cd2tz02_lP+HmYu_1oN3d$;xm<}4{$Ru@v|5)v9j^`Zdc?fb`M=9QNz9+{ zzn?8O8$f2$*{24;kW#+6i(3(!zHZ{u#9No4r^6+Pv!&0tVn+HXtk25$mz$2@hcWL4 z4^4jWptw&mK2bW)U_7r@6BS()zdm5qmq|<#bYK=Yz`TL=BIr`-#N%cx0bDM&$edHy5!OEmg~nX@{4$F3jRUELlvuhN0Kye&pF)zD#+4xFz$a z9PksYs0AmiJv`@b(ZfLi(rPZCDzmylCsQJ9ZOViF7^IUpZ`^0w7|#7_&~7 zF=D*4DPm>~U0okuUUluROyCmmi)iJ@rszE9V(P4Tf-hVxSiJ>ljIzj z$>p~@2m2ytdze6Grnt_Mr$oM3iSo!)6*)gEd?V|)gz-=!h}X@OU4P2{#0|wjc!;*@ zPal{<$=;Pln;0tF{EgcUOI{~;6IS^yQnfC5Z(LBXB~z%lm9RF$Y|-L`q_K^%!kM9c zto<$_dGG~IjIN6pY$B$?yMWcQ6J|O$Y+Acfj+j;Xz>z7RpbpK1QEh}U8bDSZW7YTlV(o9+iBb}xuau?;x5dk z;V$6c_!}MxNTBtPzs-96?Gy)SocKbf zJSH~CtQa)CU&{!iV6Tc&=Q=%~RY?VoNh%JwM%s%1A~AD(wrC53b`1ahJ59bt1PpfF z7!U5D-_ifXkp6Xd@4`%Qg#W}f>r(VW&Kw}-x^xd;tq4iBw19FifxOrK_oK6gRR5Oe znBrM1ILq|`pB4|6;IFg<@Pi?LW91zrG}${k{g!}|1MujxHFOolg#3xUI1i3;sUo`q zl!sTW(@v2OIy&N7wU{%Um=o}jc=MGp7eT0XfN-O_84&PdFflQ?o#P{VD@;ow_!Iv3 zv&AlV3)np$E#O-DfU##6ED|4{4k1-ClrBO41Nc&LWqK&UmrIWJuGvqr=`7BcIEAl4 zNldQZ6i-Vr=-ueF0tV&`F-g`J%v8nvMPmAAgHoLo$8sMAvrR);cs{f7gU)f!SXWu=yj&%C#>uqWR zKEO7axLk+cV@t$*gz%rthjqxZ+u2wxBR@T@j!?UY_a7MjDyQi^=Ti9BbGdwgxuk!r z`d`UP`;C>ru=-G^_)eWbXsxF8I_NjWa$26hUGb%Jz-r=IR(|yx$JNpu?IyI{veNdd zO{>b!jD9TZUmMO(wQ*Rk-Urj>U?qOc8ox=*WC{8Fk*%KHjL3d%h3)ocetTNM?0b0L zB&XorMsiH>{7w za^|suc6GmVSiRryBg;52=0?RwE!*z{CMOe7t<1*3-?!F*uSnbNQ4T?mNZW;NY^okI z#>MnS81!EjqXyLrKM3=kn0n-RjbD9YtY5pgTd~0U?gPfS23Dm0a_ES|Tr)%Fe$Kqf zosnzPLNXIm8Ev~Ubb800)P*-6V-JnSR_t@V8LQ)H8+_N{;Bdyo4;)jN7JD(TFn=Lk zA&K!D3|$Nlm9~%$1a`A~U8pG4$&R&f=tv6&!?w=Jy?+5b!Ss0jG2vbLEOB6P@9a3! z6LYu=%#s0#nhUP-Fa#3D)qh|fk^QV>ddOY#I_|HSnZbQI(-SjgKieG2|G@M{IV=Ic z_+Hp2=BX4}q$xh7YGZGcTz@14XysbXn99kVN+PT|8E`#$JSNv!O;#9j{piiZk6hXv@`+yzTw=B>;nTSu0=3AfafBHoyrty7xiRe33T3qV6<@WB$m87ODohf- zMqVj1V`j(*&8b%%5OQ^DD1KtK1^H?2W0N z@q!HA!Y5|CVE#K0BbMxFoJNdxMc8((S_?hqg_0-xn%QOzf@*8Vt;RJ`v!V1z5sGTe zs|yX=)(qyRi9`)kCNu)s)kx8h!Su9%{-A=erRIP^VqSw?%B7gt8YuTdT7jH)5O5 z1^hW_ZH$?)eTj!{knIYL*lxleIS47BQqLfP!#>{Rb%`#p9Us{Zm3>%O(5Qs#_XLwY z)7fsey9Fl(HY}XjQ^gU56XUx)b>m%XOcWN+hMdWnvDz7avB)Hrv*c{&GIzDB3k@5! zdJaWyo6dHJ;&Cpr9R!ehKh`x*!dMB`V2l3{_&lc(7Bf zNR7w>y;6OP^WYt@L*w`gLUQ6mr5;(+tNHpqi4p7dowI?NT*b`)Zs6R$8)vUS$R-xE$2&!Ns3jWLz3MS@3JOOu^ zM2V52Xhl{$X~TLv;+jF7*?97#V6JxH9M^H!4wp4y{6ItY7M)%w{l3G&=DN(<_aQbz zEF>3Yi@*b}6ppV*Hp{iGX!HBVP!C&$f>S9l?D*#8E=(*8Ek%*Kz(s$|WZX-y@9LcO z>&J!ZismH-XGR057f|UarY6OJE;=gSG=|Hn7h^Et302?tWRqYFb4vbt3rSDvtZIja z-Q(CPswiTTRlj1QuATx8J$Pg0X9Ji?b}woAEblM4?g<#`?ccivEvx8}CsHRvs1ou_ zrJU0#7W=hQ0akNI?DL@_EpB`67OeQ8KC9LD=sM;~a;j>D4XPH>NRxqJ(j?)jLrY>d zb)8)~(}p$BQ!sC!*s4V=2dF=E!ToXqjA1roB z7{6dm%xKa1ieB{4@!;b12`ip*c|mN$=d~^lra0`hY}TMyl7z_LKNNJ~Hc1hzAvE`I zYKUUrYZ7`rI9gPKbqKFo+;=kG2eA zgLya(OXZz*wdhHiOG@vAAt{}Q^V&kPYA($})>Fc?3V(6IN!n=f`@+ZswoPmJ4U%gi zL2-aPMS=XrJSQyYlz>+*3{3e+Ul(K*Vh8RE3+mC|haA;@bYv2k ze^9!sUEA`4ey*^SNWu?G&<4iXeQ#HGWM4QiE?7qL7}90Iovc8b?8`@z!tG_+Zk>Ro z?PkAQ9C?%_5Ey_4+{sz<2@ms5tTvMNiBE#MVN*F&VJdSz`)|ibB_?*D~g}!K2%K_L}wl-HL;FN`|t8OhIl_Vds z2UqIuQA+{LL5S#LjN;vE7FDqeZ($k1n;o*yEmTIlfCS;ec57V{&5 z)AmvXCrq-vbQ;trwmh@)L+-;<|8iGDv-A076}*Tiye^FOStny&Hrk#+FgP=rUvPiP ztB65V`A=o6Y^VB%{A}mO0PP1$@!@Dt72w7FninoQ!p6$1M-!2)xgOaFaLp#nDPIeCjMch9KoQ% zOe32IT`Wwq^_6Jlu!1F44^fx;kR6vKa_#hzE!N+MxuMnMqhZ1XY2Pr|;o}#MnV$`q zMwc7}F8e!kb04a3>ZT7&@$>s)obM9@uG)>yie4DF7UMUePu7Wp$(qiYJw0lm;Ic!S zfW&(bSgbidT1+~2Tx#wmrV0JAx6D@m#*yDp&dQ@mji>AyYwi@h;?0>#NxVrukV4rj zWIM*FGs7gaZ{#$lRAr_dU`u7Tg>i>}9nP7j-z}O>l}r?G%$m9vW=Wt(E3QZJC?_Ss zyDALkm}^I0p6KIGOu4PaPx#-v1rA>ya2tQNnC-I#b}Zngh|8q34I_3=d1YYxh&Q() zhfPvvD1iWn0!;sXyFb3#4 ztQU_-xg(<6eVTo@Q0^LaTCYVXugyX^FQ(~4PnT%7>uNhSaW})8;$Y|pKq%Vtod|nU zwDSigHG_2+QvUj$q&P-YE+O8_mdmj70^fz1%3bfRg?#+PWCBNEq||!rVNn#oLvjsE zYu{-@l8sB%mcov7;q)$Fa=3mIGx)_Fmfb7O(7~f{@kWO;?AIM%Y-(YLnjAA6IK7pK zCeyoOm`A2t!DhkH?v9LJr&PVWJ`7V=S`&Z3|9-YGpPy~tkwNk_wivhF^UXb6CCr?Q zsx))s&~QYFD$9vZU%1O1Mw_J<1yjSSFlw&A0V^U>YhZd76Ct>a1xf;CtTUKi0UaJ^k>8gNH z$XKC}AyrmME28rj5(YVrQ!2#9J zi5V`-n&M;s1Cv=Ifst13OxE|=gR9qytngip2J|~eh!<*+XZ zTi8RiJ3Fu^657WXo=1x>gY_JpKIK$#I1=O>ljIy2cQ2j8fR3AGXUnpv?q)fQ77cH+ zzVMW|kxg|Pv!c?K7#NYSTPNM)oVZ+XLZnYg1^Crpc>l~KVS{F#T0xM9`75?ui`MR2_Q*oHX$goadu?_Sg8i4O86_o;%#9`$1*$ z%_`H~XlHgM3WotVr>K%q!akY!8sk}y=zPkt(pMF4c#EdQ2j;%@)s^d}QWP&{NZ4x? z*USUSx#8l*S70=WC0G7~S1tfQX&>Mhoets$@&==7S{I88_r*AfVEls4yl63x*Z=`^ zTL{mbV)}ibi%EV?f^&$Re5FT_J#S^^a_3$+5!=?!M>&5AX7}OA&kUg2-g>OsvZWKQ zGL#&n6T$a|@ngyGs346mr;kf~OuS3w;$=1+eCY)9SxY=!>yWw8DZ>6fH`>^>%U`=) z>Wxg626v8>^pHbOx|qeSwS^)EeEB*8+^Rnzggo@$7ov%GA4xi19JVi>5qd(B_Q~K4 z##ptXqkhF41pnf!>bzSFO1ca7Tz+k7??EKBQ8w0ff0G7&29N^75Ysp1Eu|+C-yose zrO#p>5kBdoDD*}9Y$&l#=Gka6ykbWhNQWl^M&q<#>QVwNf&KU`XMLd7{H6-3|b6CP}-h*C>Y$*fL z;1jDNN%pjBC3VF~Sz`e{y8qw^O<{Rb5APeA-0Nw%NbXJ1?A(-lD`SH;-ZmUW`@%Sw z{>~fi5ku|MRr`|DwNG6La`I!Lq+H|?6u({O&HL{ys26^f$vnl3X7-^ZO$E{nhQ?I3 zc*4cq6vMM058r{kFgi7jk5omH#U(gc@he5k^fU$f7k$o@P1hnsW_U`kkIe9Hc4MmV z-*!W+$;O~|9HyT{(ZF%M-@+b4GYuxj_xoes|n z?}tICJ1@Ljrfp_Z|7NS(#IkF$nf{mErUA95@?x16E*kPf!5(qRgE?>GnGz)Bx|_)! zIGMOYD+9|&rnVq#^ig$iC~=|k(ZS&F)54AEJo3-9aQjk8p*)@)uAtV*bA5+)1g*(M z&e*eVqyqv+T@R(R+g&WsxT_WL*nA7^o3Xd){Y+KCo zkrh5zN_}`*xQW1erG>{tBQ4z42GYY@?97D&WASRbTXtCgCp_UztTwK^@PH#PJTc4* zw;qPn4vt1!wtAXXTPJ|X3%4C>X`+0S@zzIPxV3q%yzqWJ@r3z5(QB&k?dJ;Sg*zpM zS-MALmaOKyH$U>i4Z}V-o46-UHE#?t@4Rr|lgtY@&Ra3;ywd*?*8lnOs!o%jWAZWT zcbZckK4Gi_zM(j#T@r;>9#+BNMXaL&ePf`I!dQ>qYI`v#viP=qw4#COkKcXwUrl!g ztK-EK{OjBMnd-*Jw@X#DfBTDxiJ7$4^H=s};J7=s_mIl{X?tS91ZfU0Ffj%HQOr`^ z=0f${3SXKaGOZxIvl<^9f%1x)b$g4Zq&k;+3nF){rt4O zDPi&hh6zxps;Xbn6Em+)*V>75v+ z*Uv&jWbp$u;@9#bIJ3~QTnou5?=--yYqONvls8_m{eVT)vW4%|W-g1Zlc@=Hh?V1o zqQxsvSoV4l6EJO}nwixEs#u*IkvzR7^|HIL3P zrZBcU_Kq`{?=iLY%{ExO3)8i_G%jy8d%0EL$ydd6H#GaJs z>=*fb0fA?p!RITanaf2Q7MJzrZliB9mRD3Bz(vH4Cw%DX+L7mE(!l=%jsuYG#`Im%RN}t)N}$s zmMnE}x(756OG*VDLmpr$OXr~1@TIeDsT8N+#>!xk3C~(6qWTC}N&tO&3*WBA>cvyH z3)G`j^s^|}%;#a-wFE!s+8)AE0+egsf@ck^3Bydt zdGy5%+j`Uzf(MFXoKOoq8Qqvc1vcTtyhi#^1Ay08)fIrC-DTD^6u_cDubnj00;KrY zsJ%g>DZ>4Nv^kCPo~KS@uhaQSbHy19k%I9!@REZ|9LIDSZsJZ-5I)eP^<+~xK@9pn zr>@1ARdVJjesi(HyJ$E$224&BEmeMDf_qb zF=qLJ=W87uvBRP8->fed7O0h==%fwU!3Q-_K^we%H;>kR@KW$JS3{+QYZus$EAzl? z5@^8m)L4fwK>Bo%cTgV^)CF=nk`0}?FEOa@xi9l*>!Zc<^X_1yQuzG|%dzJeY?hnX zykdwOLdh+Aw4bm@Fv)Mipe=}SdEHE;gDA|mCJ`?pFi+8rWqjc(wZNOyQ+^}C_6r7F zqQR1m^-m}SWCP+I$7!`67w2G9GexMKcSZtkp3#yRUNe}Au^0?kBYN5sJ&jfc50MlDQkor=hbum8?8WZhObMSgSt z`fZ#X<`&y`wiuDpLoZxnzhEnm#uM&YV8l@<%LMitw_6ZDwQ3+QSc)7`N!&udNx* zs)KPtgF&BzmkLc-Jd&TzC7oJ`tB8GoVKW%-H{q~Gz}Rmlkw%Nvv=90Q^WYZ?2TWzn z+ayS>i>K?}s97Cu+l`jMu)3hpcM-X6$p&{0RTmA?%@$;s%Bwf}r&ejw)p5dqS7nvE z#i5tZwfn*2UEmkG@1X=JDkum@36)6|PB}QkNGePqmU~{$<_Q6|N7&~-37#Fr@(c|P`?IqE)DF$Fh*G2MkxHVTKjxmE9 zV!qO1ah92kxEVdlW1%||Mk^{ix`uSe=3{oU4$LtO_Gk!s{=P7s8KdjzVle8-_3+Zs z8Xif+A$o-*s{(HN%fc8bgTk61m==*NoLwUSS*jr4;NbXqyW72slM++X`vxDc*Q+lM_V;yT# zkTO=9dJWN2X+<|0Y(K2aJWb5_}MUS9Ij3Ao0 zl-B}mp=WX_R+ch_VJ1`%e3`FMwrg$0if*Ncr>&x962}i-) zz)0*z5B8o+;Wt*jMW!9^U_$6VrpF+RuAFzq3>XtXH2AzlX%tT0gXJV{euK&{*0Or_ z_*iX7|8H{6PP+u0Q+~EovG&!cg%Yktz;Nylul*R~u!E}+YGL_KTZ89@&8HZ0M!?09rP&j~|70y>!bcI%&g)YCAII!vwKbgX z%cVyqGgd?A&JyPdDTY~P*R#a3d7HXC2?f8HlE4of95TAp#|pl z%4X`NRtCRdu4Am`cK@2RbiiFUT4FSfEk6`b_vo>l588ac3fq%G8I0S zYyE1miVj)~5@p6QDDC@XLammvhYwfP>FwA1Py@e>*{y&)t$V_ z0!t&{t`yY3@Cf~VVdP%0E}J6DmTeQ%ky2zbsgpuxG2Jq35uY$+)V&0yDafC4Oqjnh z58mI*^chO_ElF~70$usP8GEdK0exfLLIxf)tr0Fg)BY zr77z)4!F!vc@nx!5p5{rA;02a!Je20;a{9t-*<~fopHgW+pv5_lQ+6ZdR0-ff3rvt z`-vto{Hk3l4^Ki~%IFHK3;`YFFxgqPxT`ps~7?>?QcC}Lg9to%CkY1-? zy1Wf@MqobRIX_{UbQi|^Bn(#l=W1b>pQzO)Ubl8T&v=f3Gdk}<u=q;JaY_X4d*tE0lS=h1Gxff2# z^-u~Qz@Xpz+v!xA>>FgcvDVL1d2RTk}T;nmo;{Epnj!Q z>C>jPx)&nqwxmQ8MpoW_6o8{{d?lUbOO2k|a+|HH)4dVGE?Z01B@cG3KP3)KDDB#R zrqLEqaY8$d9!X-piJ=#Rxj*YL>rI~4b?ED*AHu%(D0Cp7v?X*kd9^2CmJJbXzbHDZ zdkde_D|;;*U~}?VHAlJ4tEJ>A69qQMc6qgZT2&d}yUs`oW3G|4V5S?M$i8~es4eQ( zLiJ&ktShh7f^B)8=gX5Ga+b<0Sm%US!^r6Lh-+=Yg*Ih4N%o@h(3IBZg%Zyn3%HFi za)jx;NVT?eAl=&bi52DshU8%t_iFFwxot0aN%qs_ae{UAo2|%pvbT;R|FoE|e#4qN z5;pEqavIW6;V`eWdn&Q5E!ozKQ*Ar0ww#R7$dN968sU<;Vdz5}LMsrnQzV1q{wv$U zI4*U_ZxZLzQ#S81#gYu}Zri{TsuIM80t24007^?EA;3qOR#=-7m~XBgc0idHw!WU9 z$JN|C6;*!#ZYzh}y}d?_I=IeFmcup|f5~*aAIe+!tO^svjQofEs2t|zYg3Uhva6Eu zZSCPbajNRi*hYnJBFmP5E zp$Ue|A~4~yNDQ@~RsFnN7Q0P}Ll=-u1huop9wu1ROq#z=Y2tF)~M*N8stRFu1N;t;9HVY}+(I!vhiX2%m*v z#`$dV)Ell5MsvwtMXN>ftN58^NFqLYa+J(`QX5JHE@3Fpx|otKi=2kLENm&dBn1S4 zUY_zZwuwN`F_IwY3Zlzrv8h{|bl80sfeD|* z<`s%KCmYu_%^ie7Au`fuv8g(S`z$sULyn80Y^2X(Q;25^J^mGTv7Tc~pM{CAHm~)Z z9s#07ld$_N5~F!A<$l0tVINrMgED7PmKl5&2J#RgTZQ8K@>y)Zx)d#znBhpi4TT%r zXR)bJlM+XZ4$5;b;+xu^~l#$6UE&^}xi4R5=iulbl8;FWW&Y*cL>=L}x( zZpCI?-X>N{sRC2*HZs~kPQ4hsYyNig@TylUe7x|*blg~Nr6E=5MJ$HK(DAFvU(9Bb zRx1Nq02tWbt?((l7c*$D{xM=mb9~+?0ayGcrcvnDv1@=^)8H!F!4tO#F;#OK99?RA zyJpPsJUCwA^Nd5Er!c$j9io}9W1r1ef!}`V!rAux94ER>OInMEGuOM0=XqFI_0RGC zjY`6Ink}fSB+ke#aAoLN3+z%eM8RoyGdnKUD*pnQ{|cX&8~jcNd4AlsK%;)yVkUz zQ!{_ns?o?iUU0opsnqxw?3-?%Xp>G>-x>6%y1@3Ie@V1E7G8sx9$2tP2GMgFSB_NixI zjQDu0R}3)M^pAD_xFf1~A1I`gf2?NLi&#fRJrxb}Cd^uDC@S@i441)w-x!IED&H(H zcEQA)gcUFxKgeaVEwYD5mM1b8O_f%aiDGv8G?9w<8B@Pz=|k5|EIea~)3v1vP~Vt? zs0KRea%5F~1zrSrAdbdS(ZaNs>%jXAM{8#F$3d3=bOp1op)$^H`& z%f(P__PP$I>o9}8J_-xmtkoRKn+NF~9uAT1jQ6;VPuFqm%RhJMkaJvVV zaFwSoG1}IS6B8B(X>lDV?0Y$VP`= zE_LTNGfB#cSTn<+H-=X<&_f#@so^(pOaXiK$x$HxgEvjE4~p6z$-%lA*QJv&<^|7x ziJAZUabbqM?6%7L{5K}ni^0KMFMCqxh8bS;afp4^wV;egV(7bFaErjzh1ufBb*+W5 zqu6hI`_f3}r(HwfavCfy;YzW-*EAE8v6IC+xE~nY#d<-%)S4#*y1Gg@K8H9|kVyr<|so zb%>-V^Tlj>i8pO7OU7u|pa{#yOA+8LI_0c)(74an7b>jNiO0d+`IE+ za`7WWTXB7JG;Inht3rlk4h|Yr=%8OdcEn(96Z<)Yt2l>+=0KD31C}m1a^#0GHG^rB zztdcp=Qaj@Ul?j2R9$*FpTvwK!5byC0wYoEzi~l0bugelkXyKn5Y8Tqi?iCEZihXt zT<6r*c?%g$JTJfS)>ck^#WR zYk?N9pCb-$?QMI%&whAVo!?-1H%@b-cgvf6_}s*4uu`zU)Q9f1rk31zsqMtyS7xp z?d322$s~fiH+39FDw`Q%h1R}*@ptsUWK4|J93Aw8pH-# zT1>b;@~tZPcvF*8KMI%)b$B1B?s|+um19s-ZkWjot`znj)F`}{T8|v-M7B0Odl^65MOpv zXE!=iT)_uCJn!2v^fG*3n91^%(dVoZ`VM;qP6!qGS2Rp8;$)TTZBeL%e_a#v7VF6W z=}-P{79MpB;8JdQ%KH@O%D_yQge+!CImIR33c9#=!&HToD>9`H4?F8|hvv~ia1~LT zh-npSj+4Mmd(r%VgYyHzG|xduOx2jGtT=7yX;)Z7@&j_wsp3q!JDqBd9|`?MhQxTh zC28-|V}C61poGNxePbS#vp=4Y~cx3M|Vvsgst$?!Yq{nedVn zNDRH*H*6{>dz`utk{IY1!1Ra1S$&PF%gc1yBPTC{qYA~dO%c}`riX4dh(33`*H%wg zG$WL&VMa^kYVf{PXTnRCMq+rf%|5kOKBn-}TXM%3*ZQ|bg&y#X?LzYz`)M;8I+*+i zCU&@Qx(&U@z8E)@CO+MxG#+a>eK0gVaqsGddx!+CgIw?tr8)KJ0K}A~7lF=PrG3Db zEqKE$f@+u=&ruuF}|)2hwdOGhP59J=DCoM z&F7$+v$*G%tmzCrnJe)DTej;B^RaZp(E8;e)EIluPk5xuTY{mU&lXRK zJ}C+Eo01K^-=lJvuSgrKZ@FvuI^rohA(BkM>X*G@d_JzQ$ayxSJ=1TI8Rv81#7~d1 zqkJorOm=OtV|+thX|KUV1s+?BnU{Ogd5}4~QFhXE`NIC~r9;U%CG^+})Sr3A3~+SS zyFF8ODKR$pDeKm1z`wsRUipep<1t$Ka(_HJa1T8rvS&5VyqEwNPw<582fKt$GMeaqCz@;_(n+O>Oq6H$64?N_kG)_ znpYgG0as-XfkZathH9Faaq3H|WZb~_3i1^1O zwJ5H8=JWI8Y<{L({1Mi*?Q)x;sWRGGGE->-7}3qG6TGatch?_x0|M?LyJdk*KS$8K zaw2lNn@Z_L(l*vt0TE)pNf+nJ?JyWBnTZrH{E$-9Li0VLt!aHM+0PvJ-|0`*?{h=n zFk7Kknf_-hXibMCsAWrT(vE*wPPQV;Y=Pdc_;13^4W8+d(x%&qAeb)%N}&#?qJ0Y9 zfxa?kiRnKPaJsn-upF8!eYI1t`^htEf^>@ zwqT&tW3k3KjCE;Zqbt0NfbRwSy}`f?KGJGEoXj$?PkhEoZU089W3e8Ucu^vd36UpN z@^7~3B`{#TvBChkdgWTpCTE=t9?_7K-Bf;!-S6?WeFE_|hvQ>A=k{X_QP{2E0T& z@4pu;Wt5n$$9^sh(!8?IjT^A}RjZ|}ugc4JkXx3+K70))CU%NEiHWJa5!fEP>;9hz zJ)Qd^bi81%?J0-L=wB^5Ozgv#j9<*8{M$%rdtoI@@4@8^xZ;qM2u7j5Zwyo|x~wf! zael%h-5AERuPyLlQBmfwU2y_)%GILk)YQNsn0RXe+b?R3bXm4&B*K74MC9~~))jA8 zi~i73^-)?9v*v+3vKO-=-?Q1MhK}aV)|xW-<@Uyuy%(c1Ffq1tLudQ&+a`hkz2Ekn zl_%v%rYMqC&?%t4E)Q}SeYy(?S-Yg@FOPt};JnjDFIajaF;;hIk|`Vm_fvGa@oras z(|BY!PtXwyjhmyk`u5-n&1?G$1%Ww57n`t+?LRSo;fSO#qF)fxygpkLdEF|lO#18` zstB0l=+^TE7oH~)!}#y_je!~jyi!f(Cp^SVCMeey_^_zMV$`nE$OGeQ@bbW;RP50S z?-j6k0t+53I<T^&%Vf)^vp zoEUIL;h8IN1BfYThsCYc`#mKMBh-G`$b4N5^SVtL; zdA=AKrO`q@a^TlOa10tR;rs*_}=+z64%rCFpqIt)^^4l)#r(FFM zycevXXJS0)d0{G8*td~peHc(1m=Zn zct!|6q!xHm==i1BlgA`ME?rsnPH&I=fs|AH_c^}H}mqtXdqTe=iy$xUB696DKSMdh4qwr8a&=y_qJDlg*uYvoC@9$yjk zOa$YJpp236My~%Ik$f=+&J2bu!CEx!8tsTx#s1AL4SSkm-7R#fD0+~2nV+yD=(z^L zdVo1dhZXd^5Q~!9J7ByqKj9I{90X&QIY`Dda~dA?%!zsnt%G;q3zeVnrSzcZwfYKr zVh@+R>_;+PSM8R%olGis+s1fBw#_^)4O#}s0MFD?7p$0PVm#)V7@mQ$Px9jh>kLDg z@+CJXrJ6j`ForD3Gz0#X)4Cd5{y~Y4-2wwqz)TH?<+spoOy#$`0BjOyigi-ND`|2r zDTyx+b%G*1%5!??Erl~lWTGKz6To`~d{bTg;(vql8^U)}wJ9eEasvELrKUFipWVdbtco%n^_57?N< z-*EpobzUn^{h3Ph1@n|kSyvvimNzJjv`AK39RUefy!QPfdfW``Xs_FIlEw)SdOI!* zBsgGB$^PGz4yh|Q@xhK~D=-|m-FVq0M%x=+jDBHJvRx%3b-oJ#<=M9_Z!Xbzc-FF_ z4Z0V!NGM0HQ{FzwjiIYAVN;>}fg?KU$U9)fxLKtLcc*tsfg_JFvtF?)C6jltEhRwA zi!2|1Kf0&_y=tqnR&=`{_aU|8}6N2W0bm5h%TC6WTn z(6I^!B~!Y^Mo+o7bj!dR6i@*-`qMAWBT5z9Tg@7yI>6JDD}CoVqvxYT-MJAJDSMq7sFd*8id#)Q2mQV1N!x6(JcelSf-)a zl&syO@D5_@;5NTp3*+~A@|fb*DdM6M(+qvGpT;mU+$squqa(uM)!LG#oo$Y3x zFx{WoG~VnCmKaDH`pDoYCe!QE9mlb_mprD6ru=v^jjrvr`%J*0iR@1hpZ*% zdAfvPz_oz2cITsoXqOoWRBmaJN=9#G>2--N&p22`LObJ8zf#m)4ch(t9yMQdVh9Xp z5yF#Wpb%H^xtU*`F8?cm76}v>BKq(*kT= zd;KZbP_t#V?2@l=Gnm2otbl)Iov>`7Brvy>`=R2BV1>=(>DMQGW(s$hiTWrAFi4VC zs4_3^q0CREzV&N)=w)W{7mUNJm%zgBQzdA0E$_uBJRz-aQ>~ZM??q)A+$Ly}*ZO-K zx_AJMZDae0uo&XWTk_5R^@NGuZ&=sz5|bNRSKI}5%v8b_Fn_}TezutPvjwi@T^MZ5 z2i*53?EJix<_~e-Y*A}wx0r-&Pq@Tjku^n&a4#)oQcUU1CcU(0KSl~?mxUSj-y7TK!)iMg-kT?hn#@+UH+ z3Jb>1xRwXZbuAC{dtJ)|g@0VjW2wE57W*S2Qdm;?ikX0mu21;P6m%)9F+1a0-iyi9 z1o7p^wLElDGJ~G-Ag|?Nj33wX8d59rS|0fFx|WBP`nZ;d+I!cvJh0|V#_Xg()g|Wx|Rpf zlh|-Auh|^0Yk6Qzp2{1KTfP>4Ef4E;UCRS+=CwR>-hC~Pe3aKUlDIE;)X!ferrhN3 z*YXncc`dIs`X|OH7{$wfZL+rJc(y!q)vg4s7qd}&>&3JOrJP1zN;!Hl@S={sCzH|J zYjxmP{d5H#Tfyn}?b#Cono0X&m?^WqSs5vO{rI;md3$n%WP(4&{8w_OSslZ-m$nD1 zbiCh&XY=i)&?jl@Q7py9EVx+*6Qj!MOy9Jp-*Lh&XX6kuhZO@t!nwsVKibsCd?}0l zAaZWu<_d&z^NXs3&RI6ADWPLCy=PH=Sg|~-PxaEA3q@6zna7jmJ2x(t zFFT$}_3{$aD*obpdl$rx)~m2OG0y@))bDZC3ue+VJHybTd^y z3?-bW-Th>qv8oT^65;laO>FF~iAE7RYs2D$lFZf%3#$Av;JWTQW0 zGqLUi!`+TwS-Ql&dR|uKmDa4jzMfY6Fv=0Wn58PU^&l>JVVYGtYxl33ok;GEd!-*Z zKi(UCUpc@V!%4)iVxsK$S_^&qS}%?7TGKz){V(a9aU)!KY?sWgjUa|YO_;$p&!d}i%; zI0@# zbPxILeH!t_SQ)rROdy%dvW7bv@Ieol)v^S$D(8x0s=FQ-6}d6?YSs)4P1Q}fmmmWF z3W$Kd<5=*HxWlw;<>!WzYy$J}SSi77Dd#+eZ^*6Hm9L4j!cI!2=$yDOaV|QWdMzMa zAa?JjM@92~v_I~5z%9e|72Xbmh||Kxf!cs)o>%dB?)0`3lgM^$ZCJ(7Ur ziC~Z*0OIRcv%oYN+9j&k;X2O)%b@DSV0A>R@=?Xi~v|_v5yH~`CPP-ihNS|}Z*CfRt5;@@I!H14HPdM`(;~pX! zr2R|ct+6=pU5j&VZ=VJ|*lES|Km2~ZG4VK*u#8~nmC!|z7^9f^_s-Vz~#+wjo-j<8JT z-!N59+b1|@Ki8SC(x5X0cG9c6U}Ea>@?297j88OAg)q?(gW-ynX~B^1q8barw4#y} zmTXb%ZLbE6Lv4|F+?)g31(=M@UsVGRdyghOyL&w*bF_u|CdT|6hrN-T`FWs%42G$x zGles8d&VkK7Z@aNHX9zvN(cO6LYrXwg=$H}2>&otw{8~k)}T-fpXOm1?87p}_|CDY za$w#4!`Rdqzu@KRn7xoUWtQ`^>{syLc!XxX8LXH}kIhPC2&ce?=MMV@V)4%;jKw_g zTg3>=!6C6cM(1pWgRiDP$lH#@XARa)wn^hC1-zLym6(b4M6Iv^4|e$I9cO&GmWxR- zLqY1uH}~tQK~{+IHR}UT7@H6q@h#T26$TAapkFVl4F1?uV=PK;f29WQgyh6$U3y07 z16W{~`)&SL*WVat5eyepfSX74*!tAKd~*e%#f?D{wKcZijECoa z9-WKnN!&m^p)M-5gZCOQP+ z0kE#K2NXVA>Jpng7g9XbCAcx@TlI7*a>_HKSaCV1V|N1aeV;>q$ZoQ8 zBE*T@x&~?g{42I&OFuz00_>d$+7GJV88o0WX3sATwd!7O>K1>%fIGj2R8ZozBd}IQ;BZ zA66d0SPNM>e1uhdZxm3wb8T9UCu)Nl5g+>@#mL}Q1I7<@3ycvA_)C}$3qA2?*vRuU z%&X5iF_ycwhh#_$jOc}I$vkCYXkWi0iVmwu_?VY3uhUJ)Z~OS20xb!HNqS+?6f8n1 z_W(wrzwj4GhGw!Yqm^wJ)EM8;^6+vbJ6Xa_X&s57kgkPc>GqWmHhhs0&cQkhxq-9F zWfe>1q^l-aM(!qH0}h)~Vg`w%HGUQdpgp`L(kgHtNVZtH&O8!jux!vy2y5BS#|Y7F zo7@@||DfIACp|5+i7c+vBcqn|Jv)AsNn1HJ!RoFNg#8IKuE*N_3xm&a_K8UVEHc9| z;x^7JF@I*@wx;xzyomW3HnAr$;?iV^5aBrXm1=@h36+E@b89ds-uu9%x4sorqN+ZE z#inPyM~G^4xw1o#NwveW0~gojeXXkI3-6{E*cGIo7z+Jh6n#;Y1moYj1jI|N>ht2H zrr7pZPT6{0)DJ4M{-NEu^kqKJr5a3U4|zA$#346%Hj#z)2Lk&7kMkRZ4MSsMpye;hvcDQ*v0w z0x1auG-SiUd{{=cbk;Z-g!f$+)K?fP>q`h=j)n za~xV?QfD5Bca&Q3D-qNbzZ2mK^XOV~X5||UVoU9Gq{9H(&Tx~R^xG-Fa`)`_I-5AF zj~F}=v|YUL;v&;3eqR}R=LTklU2pY)pd$RP4 zRl_+#vyNeE3(W8EKc6EY3swn5>TrM%B#m!w+>|M-o|~Nb(UV2k^%LGhh-%@`mjoPOU==!<$mXYi-Yf9TWNzQQ^fV5p-)B<(svYIN_q7m0W~Yn5F0 zq|Sg;qfe|shbT?@ZLFAbDfWR8wf>22H<$z>0eEAm(R|++>UN{+q{7c#2RndWTGW_y z_FKASAv>WHhzL3AaOHu%bA`Pm8Z7 z1KF{@IObJ6N9(n_%nK5$8%;|Dim!;i6>PD^H=Zqyv_lHx@$Qk4RQ4&zM-x+aU3{^H z)TO;I#-fJET#5*Bfv6Hz64TnST`s}>3IFps!a`5Mol>Z3#Hc|g*majX1%AySE&p~E z%F>sJxA5yFswX|4u3rq6ki9gJ(d7y75tTM)e?ULs1=1_ri-h}fACeC=ez z%L8A}q!Jm?2K8)_w^-{z>2-Jh1Q^_)&C_N3;mzu_X#mJBnB_ORYr+ z!yODg{RN?1u7_#0KmP&-5qQLWz!mqM#31SQ1Gc=Ugqz~fg>h%w_l=?c(oD6L4nOdW ztyAb)NPCW?Eos2QnA>G=Z5AoIZapM1ipoej`{Sq#EP2`sesMvYxRfOe*v7Xj+@PxF zQ2L@lTID*MN6u@xM-mR<=a^GR>12A@Lm6apOg1}z^cz^a2xg!`htF9gM)fhYa*pu=*DF+-foKW~J2dXUTu zr}|4VmKgWfCz*Zv>l@3+x`FuDg`v)e$b4E!J`huewc0)~yl})%bZu&lC0nG3+6-F{ zZ2`xViFCnUTl?^0wG;U2ZP5S0}zSZ zrJPmf6yh1<^4T<&nMe-7#CmtOW8O2a+$JUMGs~sXH`cwlbpBRlDbRpAWA7K>p)iD4 zn%eaxycQeWPKcrl-m(h>CO5RmmT+NY8kOe%8~o4bh`sI+xY&M-I6N5_j7@X+z4-p* zB!+Bl*s=PAH=|H4R9R!?VzCe5&6)nvSc(W^wB-ZC*wp8m6>Y)@a!R99hJ$t4stwax zV3M*g`279@A^Q6G`@6A!=ihn2{w!ss%MDM9;EkcKgcB!W|AC>6_XC<_Qa-%b;h!bHeN)*!DZ)CH zXT}H}%iZFs-&~y1LLibE-2Abfu#B;eVr$Z^q_nr@>K}DsTP-+`LtAcE!e(D1>f$++ zEzJn6l#kV6mQma*tZL& zvkXU3nt1Cxn(i+>l!;Yp_ZG`pJf^LDI~r`NI}^ z)7Cve`~XUF4zOwn1g*`&97y5u=h+VsQwfB1xt|tvX?aHnYCPaJV#@fzz#a)>+sGi6 zWd-Y4{(TP1-TOdP=4LEdW-$*WJZ*Lg@bB1_wTE9sXTbGlKcZ>E3k!j|3@@zwsN-F9 zko~!@5d~Rc%W|u%vGOcKuT&|a7xVD`yjU@QJ}8~AtWKged=GdW)q_tAj(a}AYCR0T zVZFSJL=ffaZt4dt8e?0@If$HBIe;z z`2!XTZ@;j;Z+rKOS?Yb5z@lKhP1^pSzw%42WBh^nBj#+sIh*GSVX0sSa|H$z-gMNh zN0+Ve(>XiV{hw4~LE(#s-#!PL7Pbhaxuto5E_%5}FoY97ui9kX_>T1LafiCTrTh@JfiBm>`wQ0U zRDN2UpG6ENGg#9*W?EnZ^qG6oyhI zpJ25%z=5C)zZA_NBTQl{4cA)SO(a<21k6odFi*hX1=Mz81e-JA92QCgQ+*yXL+$zE zxdnyz2J#w>&0$vQW+=#u+2rps)#Z*hSgCTaOe9mDIR6^WIklf_>j7r`iyRF(@Syw^ zpjH8=)CUywvjr;|IJHwOvpeBG$_Auk^*!fsJHIgQ@(D8l4V*w2hOy-n7H)HR2PVy^ zL@|St=Sj?I@|RGmiEOvI;q}Q z(^J>49jNsD8zZ+AiNWK#BEZ~SfK-^r;{d0>e!Fa-9Wiv4IP-}k~x zObeCVE?C7V6EiB$jz3{6s!gX+VIdXa7gDadbhaN>KYGPt|Cz{S9~+$V!Qx4CU zia_Cvkp^W@f$J>ghy{nlvXXd(n+(CRaJE5xy$7sQ1hvFRFe5Uau#nrotV%utvv36V zp+ptg!vgdM8r@|#1m*8#Vg3=y-n?;Q(;*Hh>1xR9U8WAx6fELU>zbb z10R7qOg><4o{v^o4l38u%L`oV592a+u}LIuHJzMnn&lY0wq9(Pc@AJXgqc!}3hu<0;!%I&-f%hi712+>=kPgsjv2Hp*pcyW7h?>Q$MxB4u zV`*d{QmYrU8nGnSoP4qBBp3`B!eaKbSNTvumr(r!oa)Qxi1*BGmRNBFHU}WY`9#OA zeEu9#QWi^a;_JpW!@a>%X=RBKm1i))R)7Bi^!ON2#LFT20E6$QC=ARN z`R7xC!8CEkBrjHds6nox8|Y%5__E6UPgI|Q!bi*nLqz}m*9XS5&KoZ4W5gWl8Mj!I z3twkUel^`%CISFnxRL~x;&)$+?#6uT3olZ=&x<9v9JXJW;JjyU)eY-4PZJMfq!cX6 z?!@IGEY_I6zsHJc6Z3bHC9|Q z2gf^N`D(VsYtesTHcMBnMq5^#sm@|fai*eJi(;funFx%}C(cSmy0l;5QjgTYP^f-i zm&Y_)G^};y0Xt9U0`{ZJ6`&N zi$M<)*<>#~Y2cz-iysKnI%{oSn5uI$Woy9VOnK*Wv)mlWnt z%&DbF)q-RIrgP@Hs2E3>da>CjjIS-x%?VyPvqH}cZ|QruOeNU;Qynu@ge);u*L{(l z9#X+MU-<^AzeTdmea;z!EaqSwry`of!n!{{bR)V(XVMT?+_29&aoISo~tz~ zwL7U%0W;5EytU^w{`@3w@+WUb5iV61hCRc^dgcV?+di?{7dnM%y?)ug}v zKQZ{#H~H3c-TxQ$%{*3&EyE$IBba5*ymzu|T0t&&_^s73o^5$yUVio!5A-wEC3dVY z0l$om)sn&)F69aucDC%{QFZsrj(F>o zP+@D)#6T2)m)03em(R>ic5?Sk_IddxJGtj32PU>OIHfSIo9;n^q1N&1!lah9WQY5} zKy3AgF>HyUy*htGo%Dt04~ZCBLJTq2rA92b7)ToLw8J(2Vi&UR7*V72opD*qqMl!u z$zg3ev*H#0Wepa(7oKsQdbnF#W(|%&6~sxkmQVfW`V`5+%GZ{Yf^N$oRhNt7b;z9R zDYU4g)vcjYrSJvDz7{t<8IRBSh5CA^9{+KN;;q7XjV{%KU zyiOmOmW1#-{Lejt&X^lUW$F(M)ZPoW_SFF|rI@{#O44s!COcx1t}mE2>HI}v=J*`Zcsp>6 zyW0LlvvDI51=fv8@oc@N+9zhv7tgrR56r|N@t;te0X)Q>M6FAvCrO~SW%nQ-cT*R@ zpR5vEFFwz3CxB)bTy8lG8wQTg^?d)TR=Ik6$+X>E5bymX2jBp%;1sp_k({a2VHR^= z406k{Q>Qa>SQY7wBa7iMp13BwGLXHYqYK*|jI9+y_{91;Kaya>Keu;{LklzUG5Q>&&LRtOV9$u4ZzO^$ct2lj2%T2Dksg3(uV%@|fSqCh-zJ8II{yCtKjX1_# zULg^W>`%Bz+Q~aIO8edBbX_%dwLBtex7M5~XRoX^7NLKMAqNNhF9hPfR(5W*5PqvX zQ?$`=#*Q-rWy8h<<{*zcI&`w#`1Aq(-*XCU`b*kS|$BI_Lfp* z+ol<4m;Pbo*+u^IFazzfsR#Lp>K=9am<&F#H1>m9gYs=T4Nj?@pt7_Qp>L>ebc3<* zg;mNp=+WLdFO$PAN5(KzOvH?_e}wT3OE)$jF?5;2N@5kJ-k~4JYbqkNWoze}WGT{F z-Fg^H9b0k8$Y?mhR@HnZHXQ1cTS@@ayNs%o7mS{T`UNo5dcSWBRWpN!Zg^O1ClF^I zMj=%G$XsmNU3Wf!?KX4WE0LCz;9&m;OUjnFo)MjS9G1Qx}5jXztkxSj-Nr9R{S#vi~X&6kB~nu z;1cGVqjwa#1c?C$#7!jL`TVE>ie<{B(vI^#ziJ-MYTw3!_=>F)VP8IW2x8-Tmk_qJ zsX~Uy4kTt>PhzqttId*q@lm~n4F5i`pX!3UX6HJ!rw$pV2 zw3HF-k;|XK9=i{Q0z|OKws^V{7_2avxm1&uUNyQ$VlMJv?bfI+Dc&PtkM{_S;yq$l z74Kp1D6$GM-XmtAc#qw?L^MTm-=F@gJ>+WA-z}g2E5beYdtS;3jo{u9g?sGDv{XfV z1n9vYj!>*e{9Lgfd&unAIhFb|u%>)t`V#NoljsO{beJGb&NQVTzil6FlO`2&<}KY z+zSGgxGMzK1sh8^Uk31)iCh%BDbhxv9tkVfBM=Jqi2YQshn<}%4R6NBSE;k$XkD=y z&eHn{uOHR3&3m*9_HD}sNq;Ku>lPLE6=@mhQUrLglP54x1c>>7I~*l}m=&+m@4wj`9TK>^sKG=UkYscgo|o2URYA z10%roPG*EGGPSLu4ttZn*XGgP+jXe5DI{XVl0AM?XsjiR{&tqW9`lhO1pi4uyF-k{hT?*S{hQ$ z2ZmSheXhv6&9cy!r_nGTnFAU)gWeG5#plqJo7_4uu7D?{{pM*@b3Y439rQGI7H%*M zF8694HqmGbVL+CrYBAC~Owq#-vOv%gG~ZXr%I@&?2r0){z+L!~CgL;Zmj@cX@NvuK zD{L%37qJcd%Y&T&&rY|$RW%hXzqO@%<_K1XFt|>Rs1NV*S{IuHEbswu zrU3tsd4O4$$3mtntuyAzIK&`wt0E6AYkAb0(!Rh0KsrV=+RpW529s+fW+$J$5e#1#SfvNPmF5LHD>O1`Q1=^f$@|i3?8^k>E z>WOIYjB=Y6Hmc{t;r*`v@L-t*YXE>if4@%d&}Iox+d~-M)sYWDzw&Uy#R4kW@}`x2 zQN@Ng&*|ppUx^uq9Uk=^33iafM9{7BCv|ZDjaiQe1v+L<#nM%M95Yn>RM^x{oExl< z6RcgHubFGlubDe0r|PG|F|QniUBmMBEnxc~7aBH#6Bw9Z9*k&dAOieoSxwt6*gLVk zihiNkOWbQ5-qV9O4?K{L`3@)0wES7wK8+1nY&ESZY)Yafgzcm0#7<80VefLIk1AW) zZUMvi!9sC4f*)p2fDED;9w&T-=?g?U4`mK-h)NrJK|W%nSE8eJ#yVST$K+7cyb}O)m^lfw_P@ z0v>Ko4GeS964uwPhisFaR+swIo!7qLCZ9Mc1rd`Hj2}>*jHy-!@Iln-7)LX)z@1bJw5>;7tkuS*8T8k z%|((KEd6F&j7A=+Sc0{5WnLqu^h9Slll9XqVMagLWHDr}Ne^OkPC#T2AhAZyxjH-c zVoaN#k7zr!rJ$i;LO~Mq;Yti?w-#{u72hM1*aNN4neL%Zh122B5&LaDbSt}OK#!D&wjQ%Jh4}l6^K7c_KB7=s`V)@zr>=YlZ>y(Pie&Q9Q^oT( z+G$;Ikwy|2k#0P|oNR-yfUXo2tBVc^@q>il-vL5&YY@w#K zCY@kk%6Z%l;)_kU{*=XaF51=@G;qoIcrI^x@Vt-_EI}aO%YO#4tPyr9;{b9H6 z#B^A9D{4p^2oFX@^*3A2-o@?@|1vG3+#(dv%%&2?#}9F9!uE@?sT%o+Dc;)Q^QdTO z(Bhr;i+RWc`r^4-5=tF6xr9d*|4xieX~D)iQC`H(%v@w!V@Y~jQ<9}afnQ9v6pKSL zAbhSvf_^*Y9xUwPcz{-{ZgAe?^iKtMuv%}t<@0(rx7t7>; zy;>~iAYGN~T%yEZ{kpVY^veSVNhKAP!oUkBgj>Q#my^Iqbf7-jPHrJumQtsWr|Q8= zmM^F)ifG_51I8wH_N0#y>y`oafJgcRL0Kej*KVBB+#G}^Ks8_yd$~uLaKAxP_Vt6s z_KrEi>`1{?(FtPQ+O5?KF7;vsfsv3k%$&U5To|1iU(G2MNcuV&{j{40O(=q{eHuvH z12S?F&ixC_An)-vnrRll&}|&IRs5jn`Z^#z2OE$}L1Im<74T11*#al<5&iJ;8StX< zf;UN!h}02c@`SC< zez`>kQ$8hx3qFZA^bj^<(?sbbrj$J0$Ze~oBr@O$ZKz}inW7-vESyOM?B2t`bQt*X z1jzq)wal^-{FUp2NgZBytbhpkC)BWs@;_vCFz^7p_>}(aOo;!2S3pMh#|37q$&gzPVGs&>KG&3>XI-> z{Noq2I{65<%P=bgeK$U@Xu@dUzyFG-1|@8ER||=|*>Tad02&}r%$8aMmGQ&APDET_ zXZg<$48*_%w{eez3yVZUKW`FSztJ~Hj8vM2LcUht!K9f6@Z{Jt@rZP}~ru4HmA?3b&m zV%<-r$x~dinUC*Do5u^U05Cj7o4xPx+wZ?H{0T7Z6RE@Wey5vuahR}BxExS`VkKxR zh*_5!c5*bZ5BR9TZeZMCniw* zYlmZ2zQLmOYmXh1lGZuo<(6qEbXe#IM7!%mumL4fp*CH5R!!V;6(>Bg)3>c1xe^g? z(okva5Vn%$7QzMRBw_nSXQPoE!COo|VSc=zQ?ZCCSTx!_#ege9GcE);Up|2TWIexl zG4psm-Oo9_!XCEq0fg}jeWH)>CGaQsBIP@L899aTd!Y-XMgGTdsGpibtRZS+Ugxf{ zRy>sxTiIp0e*7V;7rzB*fSS%1r?b?6kBbVwNX;vd!Xh zYQjIS?}`y!hYF|eZ;p8GlicK=3b=f_f-cNq;a~h_)NmnwlUUt0-?Z0dhTv)lMr*<0 zMSV3TRT7g#LZ=FuBEyL<#{ciIzhQ}Y9@hD|FyfUR{g+}(`xfhrP47p(H<86CvRI02 zhTo}zKR70tz7yXEe>g+-TnNlxH%8{@h8)Em(=p7hk`{?^yF4(>g4BlO1&-vA8sk^8 zX5lo?yy*70`Ud3-^Wa6csg1#N7H=%8s)t;R$&Vap1ov+Q?faN%m(f;ftj)q)NBO`^ zs`J7$1iH>pwVOrOuJR#eCVStBS^+;9MAMLy(0K+ssbabppfdfiS=i%~$_qEB)Kp2} zSAQ`Up%(O3T9q3eI?4+VsXTJ4znH_TCC_s!-OmxFZouwVZ>3Pt3b#5iGu-MgSmj1< zd_-Yi&~U527zt)Ni{4qgx&U3fl{#-Hy8WUaF*c3RhsjQW52Mnve455$)BlVQt>ISB z?{c^LixH1;w>rk`bgSnheA;dBD(G(YR$6fivnv0kE)q7)i}{^y^L$rg%2ulpRthyJ zvXzJ3NyEMIVx$NAXFXL$putA>4!dFT!oaPLC!91J;vMsYm)ZvURgkB=lqDB>xYgf} zDKe|ct&UMW-Rdvgf6QRX@z}Vf;%j@@@sp06_6l2~hg%)%``m8z7bE9`e@#7-UNF-E zer~sVY)ZJ*o7G5vesin8o4@4R0~fW=8_$QLU50Ef;=2a#WQF#s(Rt8$rvyB5J1=;t zVRT^L59HZ$gs%xh+uara!qiu;MfGWj+ZaqkC9awI8H9iG!=8SPVEp$5yG9^iAuw(( z1)cWP0r1YgLXQ?r1;*ub=`M}Ii{4q#2IaRW{|;T~v^YC2o-gdu8Fc!>E{>bCjX`1Q z6245@bNmihW>w(B@C}%5BM0UKt~V$r=m*9h>F@((#xbb>2^Fi%PV0o!nKIoFPmxk4 zJs){@E$azqtleG9sydLI*6N>k*RrM*4gGy7ZccK65xRM0e=#&r##(N7GwUn|{5W3` zCO%?6(%E3(z!Ryn1!Xe2Ipkhhax?i^WsGkIXyCifxktDpon)8GC8ys3%R(>MAjBmv zQ>^p};y+{uTI(FKbV*<2;d4;j@s;?6%;3D^VSjZ(t+!NwkGhpOg1XE1g`jd{&uf>4 z7u1n_WXdq+oMy^gtQ(+zG+EWP3Zdx)H@m~~%wF;Gj?pH%qx>=q&LS|Zer3|){o$~t zVGoQs%Eca?w{2jmJ@myC+IuWlW!Pg*r9b?|Acb@^s|CR^9lgItTZ74G)h-h6X1*^! z%BMkbhi#alLO;Jv`A@>^i}i4Mm8fAmS}aGZ*ai9}-7(gqJ{M-(d0ENmt1A)+6^xF3 z)KKE2<#rvL4a(;0qlQg*Y-$W>iFRJ4>^+O47nErDWtewRw}eyM3X4g3>{reEf|ULtzNbi$Q4Z z`&AFW>i6mX$%=LueBKF9=7t!?l1kqNosVuY*1YE>&C%y#)td(IA{Ml>>ef3em;kW7 zyeU}d0H|%EQ`)y$>bxxL{|k?Dx4uFTth}Ay=a_d(-nW=&=xFH$;JX=+`t*n{|I;ii-BcuPjvlesC#=TjDPtrg|_haqK zan|+fcfF?y@oIY56MW>m5XeWlFr%QGT>h$A*Ck_4@#J^SVd;pMzqEJNtK}2CR`j=3|LCYQDk8w&$DqjTFY81E7nfsRm|VbM3%$2F;0IkHBcm67 z?SqKA7e*-ku-k=|{xjH^k6`?w;|S#l^hyD2F2m80*ym5gFUSuJV;&TP_u(wexN2Rk z%8E(bFU%X1ANFmS!eh#Q^WSW-^wdwx!r9o2WwD9jU^5KMzr<_~%u^T*e!3Tf;LjI^ z`y5|ld2XX($sM*|SofN1K5Zz6q*q<5FhzTCRsNnX(hzD~RA5EzlBN|+A!wjN$p?U5N zS6RNwyuKWG{NuOOnb)qie2i=&^2=Ehwo<_5u4Gr zXEwCqeqnTh8c5kTxWYEzFqZ%u7b710J01phzA(yE3^Tcr?E66^{eY-{H>MvH#KyAQ z#ss`Pjwdi18hbur)1_eV*q{XuvKi01kJ2~i38v*_{Xc)j*IZ}#6Z1#B*?t4&_n;`Y zI6+^50dbefLpQ_;IF}|*>0s_O=POo#(*Uz0Hma?FMI5!>BhVTE@DV2n-VvN&i8nll zC!Y+AF>{0WPoK0n!Ojm8Cs?+bmcJOy)^H{+%qH1x6mY^!Y%9DMmVXPndWp~jd+>C-h6^3c-u*}Z_DOoMwZVZgR0^NAoPVanuMq4uO{Xp zr}QV7bztxvr|38iKMGI>%<5&&tW+SZd`2Tb;Awjl^J4s9?`wpWeIR=vZ?0k}-M_mJ zF$g3!`WD*RGBO)bT?SeL@&yCdc%S2U?x{Tj?P`3tES`OEcaB&T1D*!c=?5xp9EvrF z+XlNe$bST=WmxwBD>wz7f{x`lt!I-bu?A2-C=oa8Hel5=J1Z4o>1}fYUdkR%#KB6% z1Jt2yJZLX9vQyk(*%v=AUk zM`~o=e=Ma1uCh&}FZSpRJv2tX7I}*0azi~HymUGSFCLc&v1_Vbr){}dFD9m9muEW} zb4Uz5JSh%ObR)zsgc&f9=cW#H^|N=}axbPpY5T&wqT09H4EMw95kTy?6mkDMYRsha zuu)s*M;09n{A5Zw{u08Q;LcrA^0&`4`1>D3;vW{&ms5$BN-p(h+( z3dRoc#JnCunw_AoNZN_|X;z#$|**p>HYz2MxeoLf{>R3K|VH?<^aDIju(nFTE8mUhl zcdWu2z*-7U^m#0HejJu+7VZ-F4W3r8!@8>JSI?s+|sSAmi0VUH5PwrPcyb$a{ z_C#0*XtsOAlKw7nyHCh#hUCX?*r9DaG2jvd!5EF=@p`m9fJkGtS9Vh!*f*AVv@-CBc0Z4c$ zeJ?Pps_1ZHI$JfC%9FJiVjb^T)BAB21SI1N&o#@n*<$EfWL$)CY!>e=*N9#};nF{U zG3~;8jhMmCxia$>g#`EG9bo-=#GrL5?kEx#){qhGhE$=xsSv&F>8t*sj`@HKDg-8m zY4SHb*2jo78K?GQ8ZTSxu(?^~mBproZccSchI#boM1>N6C|XaFkTk6}sBsd;4&lk$}zZee%}aQlr3bsf5olW0;X%;n}7bL z4!k_4^Gkh$T@I=rY|6<*Y+uM$sjB}6=BTwKONZo9YP#6^QEIe5Ko?j4OTW%*+U$*s z+xi7;Z?xqYiqh{3vkLo@`2+o6wJ9xe{?KMgVmVQ>o~X-S@BMn|Fq6F%aztI^;{JrH z%lcZ<0MxNuFMYvE-QBo2T9pozlU|BZVvbD2@zBFodXPd=9gLe&6|dfSkG*Hfx0*9lTsw*RfNL;R zVk*0oUhv!>BbFDfGU9$*ZdCTTZJHT+_|;97f-0aG>PT}2+TfOY&8tagC#-W`?-3mx zjdPy8@Ko=jcvs`7<6MhnCfcu1oE)6qRZ}o8?B5rHRt5vNpSMnSx}1A9XQxmb+Tj5m zx*ba|Qd`|ib4twerEI#q{0HWEqtm84m!GGG>Q;H4+LCJesNn#TZ^||IrVAr29v8f1 z#R?4dtM3c5ScN{G>F2BIZuqXRc5I4mioRQ?^ru3mM!J_~Yg~2JYd~FMl6pY(o8ol2 zT)SAky%P+N=88@k%5J`Xz4`f9VtSY7HZhf_sMZir=UmUsZFXw+ZT4yTHaoTFHU}m) zHJGF@u8NLio>WDr49nu#(;1`0CoA~g;*%A8LAD@sR-p!6vkS4qo{1Wm)Z2zQ(|=&x z5s|<8H%4tVr})vS>fyUc4`<3cGg)pr95WWa1`v7-I(eQQu>D|@@^b_!-C*|mJhEU8 zCFV{R$_~HGWclv!>?Dk08TbV;?lGAxhX$MH{E7!!(581gF1$(}v_zSx)eQ(O-nWho zVSI!*S&Y!Z;kuw<>E;WhRc|pvz7nv^xLf^f;qbFyB#v)CWXA3APFQl*mem_Hzyf-? z28-~K;fu-!|JijYTDYgsz+U5QF+S0`htg) zG)E-8u}jN;VuEhtSO3D0{y#7}A)0F_prp#{h_Ta09>TRl&%)fb+^JXvA{47Q=l=)A zYNUNviq({9+&RyzG&;K=u%P7jAqeJ>p&HRGfR|rXZ*Zv@uOm_evHbe~LWE-?e)Aug z#TNBbYUQak_)OhP&+yyOLW%S6(-=K9cb_&cai0O}kkoUJ*dk%vF>x$Qky}_Dt6@G2 zM-2)ImUQ(vY$Q5^HH^!Fg22tDgZUK?w1d2ZHQ-KvG=nLU?wyw|TKpG;O8~ZD<3ec<0;yGlKXfiYB4SR{-i8-KQ2|l}tIjnvy!>;mNyN631mgx-_ zcUa?E$aUo5@;VZhPWr5S#1P-sJ65L#6VqH>E4$S*x`_o&ol%E-@{{vPhI`8R@Gnf# zuK()a7@U9)1W$<1)HNv)=5@rD{4_d)>&Vb3WlhU{X$OG`?I2G2Z`#3uSr*H-5cHN9 zlz#WV?H>G45lh%3HUcDh#L6i$Ehw@V!e~Ji&CZ+Ti;w6!H~xg7bK~z=mWDTT z76zY|vrM>nTf@LSKh!_HUDCl{VdU^c2ljT!3!kJ5RsW0>yZ)gecC`>8akNzV4qr^o z;`?6i$8)L?EBRqOJe~JKmj-8wt!w1g#vSwwjS!& zViY;1zI3rOqal*KsR)o3{hmmcYosC@qLW&?3~>furn`&u?qB>joUafjREWe_WzJ{u zW~%+P5}<8d8@?X-`$!OKLmmWUdFRg5>@W%7f7|33rQg2mvdz_pA3%39LGK zxK|Id^Rh+?R69=|wSYpk7TF%4_{OUD0EEC_4;V1eAi(Gw0%4Gk{kjYwxkVIOje1$KiCh;9>%}Htl&-~EjPA6Hq zlsGe7Dv%;)Nk4bFE6sbLWm4-`MTmb7LHH zCsnA!c2JFR3OCuS#e85ww+Pz%)Gd(1jHp{9(qA`%s-;z41_`o2D{436&rOBAto<<< zHH*TcCw3>;N|f+*_~&0<{5nUlI5r-M9=}7LV!qLSF_4#xfK%}1`Ec*+VP#i`TlAt2 zOlR-gapa&7Q)1<3czIca$68=Bbb^6)Yq;l_p%hkFc-DaN9diG~2>CqPisHqm2mCY2 z8($+HYBLVE6LvxULW>y#R+tG1%Z1gJ3LM&Q(8$h0Y}Ue=HYj#XY?WFGWynv~;@;`r z@%rBRihAfzZ63F_*j8kqnFQsa(@ZOL##pU!>r3;6FcLMMZF0zsp%UI(;V=yEP)TpN z`}ZV)wgthRu$ zhb=;fID&!7p*Qpsp+{13oxXSB335u?s0wQpz1wk6)L!qu9|hJDbjpt5vq(|V-{r1z zy=gY?7GeCL|H#mt??g~N`)2w2c|I{ZFTRk&-IQIYWzjVrkt~J*(~>(*h07UacEh=O zf$6H_uXieN)$00#e-AHbW3{{)*w$HFy(_vyp|5tnPQutddUSn2+X{AaSV0e?JF&Mx zODi#XzD6TsX>z|sl(351BTSI(;6?X}D^A#h0uqBLVkb#@0CA9ZT5>g~O3M|e%&4R; z3f>A@@VF(FV$Tty>Vb?>u-)bpno|@V!tyYx1buRdfSbHWzdPV1ibBURvI0;QEK)2c?hDMad zetRips=`0oqoP==DmH_i%fNmh>&O|we$H>a)4Azp-kBk0iN*c?EBT^g_L8~66%cHa z-d#L%$cw|swO9(jhy?6We~B4i*UzW8>eM}EdB2Rh6bE}$$S7t_swczmijE+E|Haz; z4A&CJ?{c`0$)*iXm}9vxa^^Wub=A%{JjluzNO=5M&H#vDjmr4FGaXko$hPnXv53X8 ztVVg`;?3?^nrVT&cEU{T+GGQ))<1vInH)T+{Nmv2^VkC>6p3LLqd;K(BQ(! zvb0H`4i4*BPA^R%Y(oto{-jMSoAuzpj{5b18SG7}1S3<*&gQhCve)Xz#kdd8|EM1v939NJvwM9tWsSuBC-dR_9+;iHi`BwR1IR=PfMYrA&apEL0l9 z6SmA=SPUm#1}5m^A8AFqUJGj09qD-<-@3&pdfW}S^t^pVz#6N;B`g9Df~5DuBjj|p zAD-)>ND;!)^w!6SL&@y$EFZ(&3mkuLA3>yxtz;dRsyFjW{C#0~wU%lJJJbipxh9r# zENV2X>A)x&#bYk*JDjJXQ~glX%v5LlfMW*()6_yquT)9`dN>uax#-)nPEZ>51GK25 z2HQa@X4SjDTP4hWjc6z0$ERpO2`8fWmg*y08R?9Ts@qnhWQ+t5J42XMKWwez#LtY8 z1U+6UG0YDMx@2GiUfII!ATGP4tWld>(iLg&v5)!;vNiUF1Lq?~lk{c~l`VDmpw;3x zh$<`7(UoDhi&F$#6@nTV(+oBhJ{+HyeUp$y`t?zQh#eQGMn#5uyGDIMoqKe##r_k% z*_DrQX7s{aTmm*e>)SkC8v~nl5mOc8?2`(3cth^MtREV%`Xy#+VI)yK-YBV783mpn zgZdt?-}Q$yr~VrUb)LGs!%=%=h;YkHFi1t1CzGXjHy9@4PQ)-hPPw;hDcph-u*aw; zMpP6}7-F$gHmIql^)`#G>=Y!r=gdj{-@FQ!Wc9x&D8Yf8`S(eK#u&W9Ic-`a;^TAy zHaa%HcIbMmw6KJ`Gv>f7DpdXiXFjfJkb6nz8}ey@zI)?pIHNW*On{)hrHEt=a7Lhz zvXFXVpEPPcejo0a_+9MhnD7&J7h&eq)l<(@r2AqUQpibJ9{lKY@xIC7o?PxU>TLxt z(RcCd!Z3H{`^M;+x-&omr)7IMgeTZoSFkQtwA2->i?N{h{KLZ#*T|#r2md?6R}`hJ z{zN1}KHuEyUwIEX4C>K6*;`!=2mWzi$jZPu3;LMKTn(bI4wqrgXj3ttCe> zbxQkElc*~uJTc8%Sv@B;g-=W*3MXc9n#gTbVQQlbxzOPz~KApRSBE zmg%+~5xYCZH_h#+>`(Rq|8tLk$udV#C$xEu~Eqk;*tr&5*T-UhKTbD zdPcwZB~FcN+n$kYCt1H0x)dV{wE=&^+Db->cPvH1`9*y7;Ic3kIy}5jNnnDa6T^^m zwGT{+UakX1KR{O!bzxms7UP;yyLNTP6`1y?wN$VYekjiTx-m>I`o1u(8NKkyP*bp% zp)3YngFW2M^%k~jbv@EMN^m})gcC> zme7u&DEYoI^i*w6wspy1wZh!I(DRk9p?eU3lH!*8)+0hXF=}v+Be?z>6KThZ!D`|d zbFDhNT^FUEhL&iUbtO|9t8lFleS1vpDgpoe>%t&7|C=2Vn?j+_A$!>wGYk013~jyD zqiWI8$>%N4)>ayEda|~=*xP1HHTV2mjz1V_bqC3#u7Aq8)W!HW_@B=aO&sV_cg0|K z3rZ1#8Co8gLxQxVG9Tq_@qbj~)K1b<8O6J}T|Y1)U~h3= zHchzQTN_!^$E65%_LXdkOO*7f42kfF3Tv>*5EajH4yBc+8QIs3iQ^nJaq z>_~5KIz~J6QHIZ`N2kJP(4aFzyJP-LbmMC9#wWGMx^Z6V^46|%e29rnn>V9xb}M)E z%?me~LflDan9~FE0i&JY1(*K$i+rZT3>pZ`8s3$<$x`jwUfU4>0CH%D{3w(+wHfr- zVYbV==Vg+)1&m*K>aLHFi&pMF>upE>KSmFC7iuA`zs;Acn*oORF%bHIA^$LQJ@N3l zJ}9y4La78Y>;6Ye7yWR%%R#)dv!X7gF=E6TqRrw~l4SJ-S~sb8U4eau{fY1}Mybal zUz^Ys?DdT37U-|UFXV7g`3ChDbc=Yx^LRgT$MEaEZ%mJ_g-ci7r5=U#j<(y)eHdaT z&HXO$s>FAb7u_onj+x+B|A+W1JIh4@J@t^s)yM`KYJBT?)!TdNeqGTY+nq>CirXp( z;)2`3q5H8TEMHu_fe77?arRZXVv^g<)N#b^@^TAqcRW8XX1|tmI+EWaAMEjel?;lC z0)`nqFj$#$zs9&;3Haw<7sg|LwtL_h^Mk2f!pbMk^fN8R5(Y|*8Fo@s?W!2v5LL$J z))g|e-I=3ov#m-)X(l#I?}7P%NBe|p|NKQh)8QsgC(P=8ku#kjizncaP35?OCi)XG z1nR`wt9UXq?TpjSam}kM(kw!ojFq%@k5I&$4BlWyu{2^{t6$4G7(=HL1_8PaJ`nl_ z3ya81Ogyfv4?<+w-{E;(+lwK|4!ym&4q-97Q|=Kg=);A?B6v86zS#rMM1);=%s$6n z?p!wf;)&#Y-w7w1N``I3s;E3nz%;P^L|^YQyyQ=T+tm?6olJ+!;KN%ISMKwCeALid7r z=0lF?BxprfrW0kCs)BaQ)612xz>m6hJB(j=#DYc)Ii>haw0myi4w5iKWmQ(8nPMnv z!c5EOhCTEuF(^8~cHdz^QXA}#)pvWiwBqRjXlx5+Cu6pNZ<_KErX7Dp6rDOXkF1=q zEv4z&oxPPbEEUk<>Fsm_6EP==kv%xzsrJxY>CbUK*;zPG@Oi>Yh_1;p;JLwiAI|~S z->X8c#Sl(QBMOh!Y3ZE93v_#St(5(!?s&&(Rn%G!RD}I8>1?ARO=CQK}|NZKo^}tw%;Jp5N zr#7FSpWOU_serW@@pxv$x{pj4UiX+`D%2`F;~gwu{U@sXeyBmw^CU3`{xBPLswMZ| ztWl5*J0u}BZbq`z2N?FQYQ><;ViX%qrLZ zacjUF)Z-=+lJOz?UisLY<)&K4L?MvGNcr23c+UFD&*I%eLe7(j&6o_G=F9H}ws2qf zML}Ebf3>UXS8Bp@hyPGFkvSvqxJtmCeE$WY4Eh>An~INWM9y zgv{hBqfjXbJjde?X}cmM3etR zyx=e-BccXOG}U##Lf(D9g&cYJV@`o6DpQ|7d3a;@NBXtI=a2^fQ)K5}T1$f2?&d-i~}T-PVrTg0o)2uN&jl5v+-USAb4TS7|=h z#R&|Z+W8ylW2d+`Zh9ZdqD)b#N2j=djz&6brr^SexkRVzh+N@_6XMCh`pAjs8rZ2N zZRu2qT{9HP{+J_gBZtJY63`)zaXq)i;3>@OV@wE-Ta9P^BO1ftsizE6=V zll)2N39mCm@pNONIDwH*U7r}K@IyUO5<{PG{zmcyXVJ-CM9Vvyn7h&NJFLr|5n|lvF}V1v_?4Iyo(nb~IP8U7gHX;+Z;`Ckz!cypQJ5 zNcgbmSRi6Y?GUu}JLX9`_#OV|a|Eow7rgt&2vuaeVX6QL&p4dtGU}cu)6I4qPA~Mk z3qOvvcEDJ3G4@nV!{hbrwv~***@WhziuK1!@qrw2CX7_e8?NDL}#_yfGMhQA`KUT6+p7Q?3){7@fp z@k4!Pj-Zn{9-!Lz*BiKySyv;MI_hc|4;Ue9!46M`jNrLhHo*)e_SEMN3WyiG4$uSU^mDH24*VV9T$mKsPXW2ai!PdK;D2dUfx#+uM#LgQb%4!&9 zw!pmbQq-x#>@5Tn_q)3*SOn3h8=SC8{ZP!fbt@6>*iD-I zbH}djH!D?nWsStJYK6hOWmOAX`MK}97pHkyJ66Uxs($H}Gmc6tW^D~SmEH?wigBF# z37zq;*E@P)Z9Pq*SG7*jBm?%+8jewE4gKCLYxoPY?1fLk3uE{cgIRlh$Yj=DQcI5#8RP=;Z@4$>>ZW)@Py;{ z2@m2qXDRSV^6s37Az2sbtxO!DPA2hlwKB0642fI@UY&isxDj-P-7exI|puxPn1jXYRWthjwITSk?=B z;c&Jx2{>Ar1V*(kVo%k|#NN>q;KXE$n1#BToRx+%O!8a>*RjC$sz>&Mej}k5=4^Lf zdwzlMh`iP3JefW>Z`hle1V(wu{s1{L&-SE2cSBl}M%QrI%jE35O#EptlQTvn1XUd& z$Do&q?fbf{twtGME?A#B=SS2vXscXoWvz&XsXeBC#lG0L*2}dtJ zc^>sqgoomS)yyO@YGx8oP&1R`MUtYKiOnLq$6;2A6H;2TeaHDoT(&Qr`x@aDIQj;X5Wsy;I?A29lwTo_!BK4A1UNsRY3X;wm^WLR;t0w-NzjSt|Nbj3i_~_kRhPAZGBaWCYmylCHMtOA z#xI<=dINMcmAcl9Bt_cqz-G3#?nj~7d2Bo7<%QV3j7_O;|AApwlV*9o=RQvFLR~3e z%_>SPw+wDyxY@61H!l)7Za`g4660M>5<}ZWKF|+W6L(ewH|ErC!fx`2PzpCoX5Kwu zP=nksF=8kjOi!pSI$S*ZMGX-P0xL>sKu|hJl!gm+HA#$jHMuYdu4zwYdJI=CADP?h zRPOuhv(g4Tk;euHBDOQQ;~!u1$u{od+hD0q6!nM+=$g4Fxm)!>^Wq%x5mk&y9y&df zbKJ111SH0T87@rY8Mhu#9?aIi@*UpRgj|+V+=^Q znD%g<`{gPT8SEW8dtqeaz8(q;rsGUpI)h zCV}v-CM0f`C1R&1gE>H0euJpouIkP3@KEs6b*?$J{uyhHQ@lS$=#JsD^wJexT%MPBOVUt(N?3hO65)+aE({b(u+X71wvC4RiX_?2X?iL>9oyikC$GX_qUYA2F3j@f zG~x2UVAR>9JyE*WB5O-mm=^tj;Eh@y;fRq4_4C>1V7> zl_X}gIQG#Ku{cfD1EFFDd7%g+YPk@!9xaX$b^hqr1EP-249VPN?y+}*4Q?HCNKtE* z25POY*Eq&In_QU6Lu6Gga`Ez+xy?@TzRf-@-)5)y+~&ZdYuKpqTEE-}f<1sEwXL@Y2O`Gila}+A+28mY6$zsUFw4-9k|Hj~5z)bbw z;B1N-9s6uc^EL_oJ*BaBzkjj8ZpZEGhSlFaF6OLcX?BfS4Igm_Hb zx86T2VnY)XLc5eAyU)Kc{1q_nH`a5@j_e4$w;Yj7%&a~U*<=)Nu-_d^zhKYIPYipY zV>5?>Izqv)(h&6nGgV)by>M;}$@Rvt-d;1^Z`^9{l10#CL7JWZ=UP`Iw00k8c(m=)awni=+8V`3+V3R!xV^^m-?Aw-eX4}3Vd0s(cS&$Ul*n^1*aKDWQZsY#bL(5n8JFTlaFA!s z@3Vuv@AKpxhGJb46Ellb`6+nIQl_qwv|5>q?3PH(z&8D9HbFW9%A;Dyg!;|5cj3EMAx(lKIC-}EP_OR{Gt zya=Ty!>W+0BJCmIOwxL3*KhI4(n<`|v|d=|52k6o^R5c;Rhkw){K$N1>bZT%xfefn zXZfLaOxV#9gFFDhS#}`5%=5HfjE6QC2xJfUW*QdO?nxLw(3bm%aqenI*dI50Kh;TM zWC&q?Cns^iib?puJmVgL+2M(y@s5voFj4D*m8f-LXcWn3BB~|H&=a+Qd1P2=AWQ{t z(9nV%Y-xDGFP^)>?7QcR;NUYs14qeWo4@EDYXPc#VKszcqSgh=LvmqYN3mC24wH8Z znPB^To-bMMY=gWy!2wMu7Q!>Nl8Ai7>UXf^3(x2tO>%zcHe8JMMynTG0)5tT?L5{o}E$UiOJgD3M-XfO^d||7an!5*IOplT{e1S58 zc&#YjHauq(7$p(qPjFMo2TJSoDYylyM91{4g*_ zRa1Ee*L1yYyjCT^WQVHGz+|oD5&nRw#u2HKI}i3bILY}O{ru)vj24{}IN}Mr+qzGV z=WD$f^%Tja4j%l+30wHu_Lccs5C%NLje5?MIf?mNWXk<36SgRyzC2$Gd zGPV+f_yaN`FKX8)@4OhhvlaE;ZkmFubgsYH)Dp(}_q$Q)wPXH-9aZ_dpZJ~?A!1pi zVF##uEi8WPG2qvQVZIhO?90=&xW8BhrE8HNdw@XWSB!h%eP@)d6^O8J1_G`N5-u$( zx7^$QzIme2FcemMa3*U((#^XDQEqjNc%sJwR?+h-JZ%VDM-wRxZt;zr#RX57rWc0N zb4K;BaR~1$>+tao1f_hyk0hOAilnEnG|cBof1a~N5fO$!Y?fCSsIIE4fbj$61ILIb zMB%e2mAVVQ>Vj@c^kIX%as+a=F0i>`5*S#uidUA9RjjBm#I^SNDj8Jm(0JJ4BQdvD zz!yRJ09$ftLc5C9ws@n~V`z&+uA4 zFBV>ANntzAMJC%lMZ_ zGP0?j)x^V8>m#?cd+=@P`o5-Jt6RZuz&-eZ2@if?bXkoD>TFd{q;d~_^&BQqw#_&? z-Pub^*J1Q4TP^i25(|o1*V(9^aT6YVqq%YXr7t+M_L8l<<@98I4*Wov@ZcwgSFZZV z5G5CWJTv##3ElVCr=|UMI*cJ>>dIg1F3^!r- z#*bj9d)_0Q;VvzT^H=xZC&vBv`Bdr1E{f#8FP_vE{(B>uE9UzqBe}wFxQeItJL>xb zrVl^K)t&fB-&>qIJ8KlM$RazIJMryQF({Ner}5Nz1r|7?2p_(k<8@EGwx}J4Y1R>8 zSX)f>d@NURMEURob{~GSO!wg@hU%R$(Vl6WV4+pI8=bq=6Aa|sHKw|=5Ez)~hpH6_ zw=lbO`8UG-_tld{b)bx;J(qvL#ZS2JlW%I;)eYfv-zV(u`@n?zJ}|l(C7hW|df zru**`Lml7XSz`6_nYqPI?7qd%xj9}Ed+u>y!Wk1>^3#n_r?g&oBh=}ZQ(Cg?ROp}F z2-Qp|N_pTdx0==bawAl;o?LE(gx!r07`YLu{pE5aRBP84wccJ(wGCaXeC@euP*S`4IxX{0LR)F5yOSguDo~D^62hgxXa~FuVx1 za#`!`1^0&sC-=sk2!RPrJ~4D67(7JMwzBiXeve0}Q!VV#8y^ zi0W_L4Fx2I727^*-pZvuQ$B6FDOu?4-K!J&Z_(a)Avj68u9A!~VsKsMKQQ?D@E;gGl*@lmdy6tM>)f#W4-!Ky zt`EN%12JiQW|;AWM+BoC9^L;AXfFf_!|0rA~Z>_nKPw^BnZY_y(2R;$ z-A@2$K$pLy5aanh_qWm{4HcpdCMf?;szjYsdObQpJ>8D!Td2vZ+^g6TGbM zb(QEPj1kkDM(YXF?e_kPx$gTH;L>tc0!$X@&RzNrf;Gego-F@Aoi$v+J4tUoM?bpx z6&7uDe`nXv*L`HdabO3)tvp(1XS#pxH?S}Desgpjn2cL;jYAil?hB;j0E~EkU5*1t zB-q61IWURE5@+-rB~7UV@~+;d=jwPwL5NV$3I304Mg1S~1%$T_0F;yyFlaz6fntO@0?B`16mVsBNzhR%rvD%mA^HyzbpJtOs8#n7^=hG(yYRgh zU!UcdInQB}f51*g`V(%F@&U^W8_CCpn*?pWgfi*C~BOU-I_TgAfNNJP0Q4 z=Eq83+3uGEp&rH4TWJ7riHm?M`??R?cyd?*{Pysv7H?DG|&O)o41Kf7taFiqtI z?FU7c9Uo9O*+9j8v9(&%1iVYDYF3F27%=M>R^?ju+fKN7RAyq(GXYPaaTn+2g=Gh2 z&k6iOH}-~30Pn1pTJa*S{Dm8@RGxVLVlsn)BcAYWHG9V+n-*a#)ryL{9HC0&0n2%E z{i28eizD0s>2UomrlLL1T>|&ruoG?8D)%pAG>lTt&YD%m08ds;v^UfvAD?$72T8Ea zIC__VUqsUiP1$y*Ju<+WyraNB@*lGOG@dhE6SBj8)ESX?3%p5gPwI~^EVt+!yxj-9 zUHUp^A+7*VSju+dYGi*#e}@QK7nN91R+Ph@dEuHR`h6mF3L{DlA2X=4$P5!clAv&Q zT1#5v&AC-oTvKPZ7ty2axrld{3lweV@Es}!{(h8nOFEHyrzym=5+6@1%|BT}fGI$JUj<6&blm zXV?wUqUqV%zqSL$36Xg{MtCbyht-mNbWwcs)|n6Zn+_P`@$)Uy*dRA<}_w)di>NA+9CG^>%m&t8>qU*18BIi>Y z5L~D%aT8TyWsfYV8>&z(Ia4=NsyL;9rmJa=ShQbkB`!(E*wdn;xqhJV$5v?R+1|pp zQ8PT=Mm;&F^V0o;ZsIe4%M1yo$m%5*Yo+JQd1T(4kC!*m-TGvOT6iG?4jV;a#@F?8 z8B9-&UaDIx)dM8M?BcT~#e?13{yjUG`!9+|Rx%k9sP%`gcWrznQH~`^6nt}75E%|O zqlpSWB;oO6`N{7yxJUlpxsB@?-V-Z%1MN1L^tt)+BS#xy95huOjuFpY7&WC_njnuC zfnflI3tXCE5-cn|5s0~{Uit%BI|V1bODImC5e_TY&G_=85DYH#pII`F%FLMeo+jtO z;Ax;$DuU2BIM2et$G!8n{<4tPNTm5jiEOufof6IGRT)j647fmoHr z7vmjv#u@db4&~%bz*J{mqL>DK=$pDHc=SL==wB3tU3rYKJDfq?gr!-)Tv#&ZcmT>_ zqq|uoE1yhAS)$ceTBh*#EK~eVg1H~oAh~quYrnJ799(HJb(x$x@ zOk!wRl8(2^CnocZL0aC)UX~>2cpovGhLOkQ860rrB55D6?_gq36(wIuqv;DjRG-I^ z0n9FE&2_S_%b9G6v+{_Ygmv{Q^&Y_*1Oa-aauc~5QH&j!JYvk^BBS=i&(u&dU^;1E zcH00w@*^>_qB>pD!%Javn_X>Ap6>}db-CX7K_{&*Vz{2^u*GoQJ~OZpY3&j3-06D< z0r~ZHe85$qe1WM@v8gr=a&S_lh`v5DeVB;G^{XI(o>wXRh%&j4R<(8qeDf)d2rg8n z7>XKUmcz11P|JFX8PnsiE}B%r!(E|)c_&3hudb9b_B>Ed#dTh9IAVN5x6tE^kt*76 zoYQ$JxUn>-nPIHoeST;xx^I%y2D-X-T?DegoW@NdGji0k;Q8_tuAwnxgbQM2Ux4p`>1doBfDtKAWd& z{VFnd=>yf>Tgfk`oJTyl6`M)%Kn)j6tRT&qDC<5<%kvFX~PHl7Mw}Dr&U4| zdv%s`{=-v}i4@qh>M6$(ekD)UX^^v@0po|ba9F=Cq@9xr8ActC6!l0;0V|Q%J86B7 zX%HG)FBYT0^XYIbQdL!tjv?FywnX%TJiQ6Yj|cuHsp>p)aDidI@GHU4RGyquq*R2? zDV}Zd6_nh$jBmvXuk)>|f!<2jv`uCQJ$Kyz&$51EKxS@9R(L*{ot2SGU8b6zyA`5Q z2p{JPj6#FbP1>JieRD`mWz%9#MUDUtUea^7U>}}xWR~3_J}1d;BXSs<$J<=J#s2s0nhU4e{yUpGZ$GaS2-ZRCEP zk>St1@oA1TIsZf3HQ`|dPZ?_W80}J~MyyJ>OPT5&B)&S{?oco(KwOZX14L=jRHr5K zW#TWijh5*cgpQu=Y}sIGL39e-a~Ex3liH>SCz zf{q&miT}Be)%EV@F`0kD2+L@`VKnJrJviG)7XdduYHxmjWoo9i^T&noJBcSL8hrxl zx5{pO32o9&#kj92pjO**#=s$KE5I@_M5O|I8^KuZdDxOzY< zi*Z%b*bHm)8%PmmPt2H$`)n_*_RWtcjW?1ttO@?|xHheAb}NU-B&Y}R(r1r0Zj0BT zA|riLJ&sA`PD2v*RW8MPzz892egpbydjdg(a1o_t$T6j4C2n;%{?!AjW*sEyrIxjM z|FG6!FD3#OnC`3=y;AuNO@$_og0#O4`~gd$+7`Dq;7Id0w&w_eMPyYgaL1%xF~n%c zf;B*i%YyPn)bciOp-yonOtWtk><2`o&}nV%E)S}w8P>=Jk&kDHNFfrmCzWKHgUhQPi~AF z26-GNQNf0*%N@2OqbDd}S+z5jWo^eO&p&nG0a z{=Red3f4h!j(vG#2te|gX*cxJ!8X@U6k&|CC!la4D1C4Gwijv$4z3Gg$V z$*}STF{GctfPKVoq2fG)PTeMs-vmTH-9#17JZ_!Ln~g$6Y>3#`#Uk)1a;@OvI;q(p zwU8`ET^yc1$Zf4Mv96O9a)W&1*gSheIG^swVhx0oWn<}a!F0VdMh9 ztMR87b9lTOECAgO_)WDi2>%HyIFyt`!c2*rk1C($fS*iN^%kulIh6AhC}8ZM;n8i) z111Ym&9cf;EW1|j(U&>5a`4329?Xl=I@gdIY=*2@_)I%?&a4-ST0Y0rDH%LN*x+%t zS=rf(M9-aVHV1Sv$VqvWUfDF)*$?h~ps`N3)2B~FIonG*ls3IU3YZ$6AYB~4k+~K` z?_Bh;ljULHjYXT@i$u@mexhFIC#1@cwUbuDa0sb8xP!*C;NW`ygw(y{Pc&k3J6YSP zN2+R0EzTQxPU7S)s5wz1xKp;T6Cfp_o(aG@-xI>D9j{ZPR|-46^Eys$<09~t=AZ}O zib->%IG_~UQ#7RxA&uS>zh7t!aw5+*tHwJC@T1EYxVTU!y-T9KY-|MRq#9~dW_1dj z+NL)sZAN%NcS`Dg@FL}I9rChGy2U!{`-<#D;dUVg!1qDgyfc|Zo$v$~1?9HvZ6Pe+ z9@#mSAp_r-G^)WCMjpi|(k}Zn&TFU}fOcn0S^bI_V}68JFF;N-q~%Op+QY_4&M|}n zo$W2W+*1AA@K)T3&vv3!>a0^qvb@vVyu6KAt?)!9WY8@;+lQbjsf6utwIW}oVokKA zeTGq4Tgz}c54yN|ky>TEM@!H(7g;^J?Dz=|KlXMKg=GL7G7;TVBMP#AN6}G| zhVvXZ*>gJ685uR%co!(sNiMa`E5T)u!V_GJs}rehN%kjukDuh&Pg14`KX! zk%*432*Oo*6mqtw5H(=Jc>~g=(24osp^e<+c!SD~%+?V`11c+S?F_SG?sV~XgFFjl z$-^O(N#<6sKdiv(Yv!_IQ6Nt@oFB-1%Qfr&{qV4fHw z^Z{p_6H?^3`iLig^$rVWWyXgmZhgvykeCoB+1cS8 zVoFmJib~SFnCezO$v#h<5^w8yj1ZERhSs>SJED3Ko$o!;>TeX8Lluyzd zlqNK8PX`Ak6>7aL)noY$KqOVpbA+(5HMDX0^kJ7Ij%nut7k-fY6gnq@-RQzDNt2!z z1%UlN!2T*-7)cgZ^84@$Tr1u`Fp8}8(PSY=t+tIw0R@t-zd?Rop+n)Nd2{Y9EG98r+SAs=nobM5a5Ivh&gp}7 z06Fo11GQ0L8-n1QjSxpS%%QU9j6YG>H;y|f@z5AgI!fDC*=TPQ|0TZ8NMOR+vX172 zK&S@iIwoWQ-HizeiZ_csGud@OS#)l*V5j(C?ExXdAcE-60islALR=(0p?q^~41$e9 zh#`-XnGO(eokW?~(ZN@({|*7yo4lb?KbfB&xFDun(F3Xl{T|7pJ25s0lWRt6$d=4k zpF@NYt@K@|;52AL1ePkyXB*;{-WgM+Tf1fElv|s8Q+S~uevx|!y|I$qrlNkJHz-ce z0I|u8gf^L-i;sJMLq0dTuC)T>hM`H5CUrciM&xWa2&PG}V-3*R41LB}3xcUo-brW1 zhcu638Wc7%oR9{2MxPj11d(s3J-aOmzcGcG!9vbs;rbSa)Y=8{@Bt#zpmxT77arsk z8f6$sUu{^5&QB=IDpxIyx+H7!8(`w?i7YGvm=aoup7jpn7Y>NyK*F_fzw27hkKW{^ z#bVn7U9M(j7*-W6f-?v!<0{6Tw31!LYsNO$KnI4bX*beygx~^L8DbfeB1aLUAe7uM zP?$9!q!BsxSqq5@>j2vM>}1R!MB65D1CIP(5oF2@4D6pZgKY!q)n=!UzEhPikpj50 zE-aTUpSQ(DEC6KnVmtBoCf|IrnD~O|7lpf;72Gd4AsLXdTC;+L+s_#?i@u)Zt`8qb z;4y@-PVwRK5tb#V%dxUR;FU=}3xvrMm?v6ACioy^Q^Kyq57<(qs# zm|ECILH{oqB;zGi(KLtRZN>;lmG;CC0vFnRRKpu0*VqFPL-muC6Uc{v7X(to5E?!r zy8cOdgSai$0-r{OtTcO(+Y%;=*`ZH`u7CC>3L&WgH*OX>fFaHE{XY|yeB@3EAL!xPI{Hs&lSV%HQ2{KELCiYLC* z*AUH>BDl6Qk}o+#Q0qBDM6Ws5G~Dc2+N>>e>|G1gM(}$b-~)mF>nI|DtHh%Kzf#HW zUh@@1USa^2M-SEP!s`*^LfbmQR{OXppvPsu%sv9yPn9+8R4GK3=Q%*23ZO1KWPehg zO$tVTij3KWh@-6B6!8;k725OWe0#(SePVR*W#|A{Wo#Mws1{`d7%j&NS8Qlk#qF`S z4K|1@137=quuA#?U&jFxldklrxP7n_V<@!~ER=TGOVG!SVOmFzqTfk1S5mDq@F*3i z7g$nXsmjf)%7c}_n&TE+33^)S1g)JAJLiyA#XllIglt-$LMQ#BM$>FmFu<*pBFW-; zO`}(zK65|=%er!hLDL`=j8Q@o*t|yG9$26i7my-VFwcu~%Hh|6Od&uzPQt{w&18yc z%H}$uRMNGub_Kg;5a9rx14NR2d!M4bu#cKWO-BV?g$-KwT&HEa3xzm3tPy}0y~{ADqV|UXk?<61*P(2K%}cK&DHuJTV16i+ z%LNA9qso3qwUBSPJ&*)@g-hYR$*^omd;?9YL02W!=`l$eLTGF1ya=JV(AcKzJ=D(2 zrWn5=vSw(*_z)m0t%g1&52YcYO2iB~z#l9vaX+5aw7}a}@{=1MPDmE5ian8JX{Ap_ z09Hq-@qr=7aE^l<$NWMMO*K9^gsvI>0@#VdlY*`@EPgiwy`0}e*kds*6biv+W>}36 zjz9WDhE|Si4`*n*)bhYp&}-P5azIBXX#lLPh6jhJ;UPdI%FEkb>UC3w1Gl|@lA7|< z?E;0Ow$(0dX7>Vbg|IzEJFXi+X$78a@a91UpuG54pk~qo2s-qni%6c@$q3 zYdR4;>_QiMB*a1APr~cyHDiR=1^{fc0pj3>DIB7Q_9ybkWtIm&F=lyKYh&}D1KD-k zLm^LSF+z)sUdYw+a4DrwphS>j3OQG|V0tJNXHt{#4BS@DBhx)=Pvk5xh?8Q2RJr=d zP%CGbt6%FURQbfCn9XUm4zfsYRr2?)&D#7zfe5HiWN7KU-PZm_hOXG3P^nTDCP9m* z{^te}`u+Tw_o@_KEeU*>+5!6~RODQyv=I%zkaqsC@?U#)7YL+ z5uNLNt1^+%lj_|jqlSf2lN|12LL;O2QdiP)arTtLxW*yKrb2q5Sc1Gg(LTmu4w!Ze zBD^Ttgym;ls+r|_6dBUna>?);fE=1=!XY3=Q<+sh0)^r-hMh|8qCzX4WRGVzVVd8c zU?`O=0ARdep{SvD2~i21>tD}!qDC?ak5AN4zY<86ymoQeqe7S@5Ui| ziK9n7Un2{Nh4{>4$`QHAtG9&vvUl?q!gbaw{Dt(13{#8taG2+k1YQ%?**6O%N=RT$ zq}F_g+NfBqc|gc%TvpN`xQ^NY`_3!pefkC~rt1dlsIb9`=(fQCgzW@@+}M9Ezz$bC zVgFN7o<|r^D&l?w_CJv=>nU*m>8Q{e3-_N6af=4?Z%yU>6#&*h9R-++GJ8jp4O7-X z9WaIBETm&XpCM~U1KJeFK4g6&Rr6Qk9un9*yY*-pj$|j$mj%4PwVn4r$6p{ofcbZb za{sFf83p&BgweOsvPTut1J*w!aE7+>x;M)D8^rD#hY0IW?dGh%&C7Uyn)`I#pO(h` ziq57mm&W_+ZtL&IP*V#R`lWEIjq|5D^+5b=j^O;gZB;h|q__PEVkoFxZG!O=VEnzU zjK4#KW_XvVUJDE~zMlZ87)hp$G7`-NGLJ)UW#{`B{9csrU+{}jzJIAVj`98E)QUl6 zexkuvMtpy0g6|IyAv0^(EzV?WE!d@f?Xz0f8GR1uPr=pGsVFW7M0C<8a=~4Q0%p0v ze4?~6J8nY^IR-{@fPAb%afnTGJUCwuI*1!xjX0Zgw$T=9;B{ylHdXP<|nKF z&ZA;nC+3mcOYRwMO94ZELm^el`;LYs>>Qbkit+5*jY7KVBfPH9RRWE@$1u_gA9|+y~uFc=r-09 zHf-K8_fz3LKg<%z4|I4?pipI(z*m=P6tm$`p-84o#3*(Zp;$LqYW=-I1BIrbba;G1 z!HD0N2rCdTsjBu7Ev*dcE`UAthX-R%N zYx~|Agq0lrO<|Y0YPA@Grt&|%i^fnejQ64;xH4h$#D!h!1aXP@9-n9khS4@O0up4x zZ$RP~h#fCjBpA!nrl66Om|a_4NHSm$X@Nz zg2l~j0E&eL@+F?=E5`8fVpqH1csGW`B0{X3I>0tOZZ?R z@n6X$=>VxDU!={qiz22J90gu531uHKKIE)b&60)I+ucaALYS0z2TFRtYnUg36N<|I zi#+Pp1C2h(M2>!OjEre}0%SmiHNEUyIIGiKrE~F%7rt_#4HrR&WJw8XeddZ&4b>u7 zjK!eDh(8r?S`&+dthR7?D2m!G5K(Kj+O37^u67Gj^;hu?K0aE7S@lJv(@#awgEynM zH4u^ONY7>vuA&OxBcb115IOjyae?_90};=GC&apoc!TP%MzpdhzqCznqzpYYp3sR2 zJz2zLM}assVPPS=-iC69t!;9Z zLokh=g+ht-PK!!Mj3hq6!#1?ut{>5+_i58QA`OhTJ<(&7r4$7X{()LI)RC}(jnYAK zrQ=}Cv&9aZG2JC!s|W`TD;Ie5unnnG=YasBjj#=eXxK)82(M0kreF#(6fp{NG7jz= z$hGs9xm^3KHEhEm&TlFi+q@7dIFE9jt;wYYC?rin7EcIelFt4rsPNTAyV^_hfD8IfKbA|DdtZkBx>a9eomt5jwWZc%Cs`$*kUUWsrk^ayAWNg9Ft(;-l;F!DIr;#es_?_nWRq{+aO7dSGjUFoeeOVwe*)NjqM`msUdc2lSgHJsrM#E_j1jjIoWxc*kpyiCzbQgp>L^ z=Tfqg0G*zz&qvNbdO`**fsJbe9C>?5r)Ry|66lwGm2_~vlDDg^nG28eyzty;m_!m- zrAyf;x&fXAa3a;Uj zPfSiKc!-*)P;B^G(iW|WL#p_qmm#%5E+JZih*GBTVbgwzUc~Q`8!ARB#zMMS8m$oJ zq@45w=N21Wq&LNOhi=RuzC!xd0O54qzRprp$oJvklqS9Ins2of z_)%o|Bq&u%K#w;h3GR}RbC3}%Pr<{^X&C`|76=~)@&_6MVL@_(6j_2P1{}&BQgQAm zUo>(9@N9(HM*bF_aOEc|&`jh3LWpWj;Ni#yc@B_Tbr=TWFf+!xjNK*)a1;(%WNcW9 zhO-LbX!6z0o8MSj3r>XFS%$5E0(wbVc6h26koFOPA%{$R&20McujV9&vJ4m(2&FR6 zlGHEMo-!}e2wStku&)4L8~tQ}By0f|_!x2~bpwtjXJ@HQ$NZ-3A;~6`!HJ2W?(xB8 zVH691folf5KmvZsE zgH6@e0~yC?Ti28`PAORBP%kc|$%w#vFsIP(BCahoi`A{o^KPI|cw%rEjrSncGniUQ z@d{hY3U)dy{~`L8-_z4aD3pO>V*Y#*W)Tij+Pv>W2#GyG zY1WnslLc8`_=XAl`F(qFG{s05{gvpB0PRu44 zBWwI75>4_FlLFF6KSe<2;Kj2|MI{G0kseDhqViWW{1-FmP> zkTi^#Fn^vew}ON*JZGwuGsMY6+c+tsgeOknkm-b8OOoY+X^R;3Y!4(!ES(2V7fpjI zE3_qFsGJx;CR<>wht9dM`P491CwRl7T5?Crs^Qe|Zpk{^wL%$81gZ2|F$k`enRs#R zTA8WI1!eaNS3<50y;vxl0aILDEcE4`{bHeH7`?`e#m0h*g;FLk!NSF2ZM#?;A{UEo zD=rrLh6pHnvDheZu~5E_Bm1>6ONkc^Z~Oq)h9~MF#2hyZr7n@nOm7z36}ed`Jw}>- zxmero7l-f_WAEdN;S3z{hM{fdE6HvcO5+jk^*7xxlv}>$aKjh?H_Q|xk6kf@8;o6c z#c=wPOtIYf4MUR@Nl|{!2_h|CC&PRVmy9i=-7>b&cFPdG zNjcs!lRU4x-!k;o;+G6%dMPPhGBys}Gn6W(F2883Z8wcW_^PqZ#8pFwXViGr=osXt zp`$bW8sQ{GIbJk$a#jvc)Wd}GqshtP57IaAKqx zFB;n3?$DgvL{==01V?d51H3Oypn4k^fHb4826H%mc47D3X zy1KQELMdb&;$#{i1z#N>p);U*KK6;#P2v9UD$w?H<)Xw88lK3a z$y-e>jGl!MN*kD|8V`Ab4Wprbh{U!K<>P=MI%_)Ca^P4y$auM+rB%Ghf=E(}ZAw*8 zg>3B;)&IIbK^3FC&1vwrcG~*n*r_bo35Z->jE+ZhdORjBqK@z=&i_&a5=cQlC&*G+ zE|P46s8-8Stwe2hAp;z1UP#3!#8C>vD1?i$R7g`@7?}k*xJs!f$}!ZQRDDdJUla6| zDPCDpv&PO7rID!4t(|YIV~U8XPozTx51hzFD*Pcmiof9!qnjyumzdo6(66nn6xkt_ z#S3byBAj2~mEl>6D~5d(Y$y$i^*fa>Tpu(Unq?NErD|GihteLg)Yh1xvXwe-xy%b$ zMaUC-(AiW3F4-YOP1E~WfUm2mzaW07BYmO zie=nx)&P1OIsTmFK3CCdEjgp3t0cLgVYJ;GVAPAyU27*eI2)u-;OGIyiSeM2CBK5P zDpMzsq30XhS^;S(wG7`$jk5xI+e|19k!o?2oQ5Y>q`n;OM=%$~vslE}#?L#K6(lU2 zO`BM{8Gjd~Ed@xwKtU@i`qDugums3LHGEIv)ac|*YkmqeEA*FWviS~?DHz?9 zL2&zkKmkTw&#FM)#v-f?qBUV^ZdYL2MvIS`e1Fq!ynLK9!9NzWHiNJsMt3Xe)~DI}5T2 zi;E3XNyXY7vD*ewi4Glz;KHa{pqV_1p85$2h|OU$*kIKf-=4W!8zg%5_{4%F#7b6P zmQ}PvtlNUMV3e>I;*G%VQml==S@D4`ixk?US%;s51|P*Ik%lm5gCmjuDrBZMgMjde z&{q*pWp4!tJ_KckjZ4O z2vcgN&;$B2o>Ur;c$Mk&<4V{X&O0MBBcbT?xy|cVA)4qDK-mx4AowiGJ(0om*=ZGsG0NlyA|^{# zOmX$XET>K&&jCWh4*QTCRhZN}K#Q-dB2(v!H@aShIP1(3pI@tu2!i7fW*dx*c)pt-q+=*Rsng=h)VE;c9g z;xPybjLbJyI&;gF9hFwMKs|DDqm{m!A=a{bq|%uTt|44Dl#j(?$==&@i7$mi+7LJW z0O7oh-lwRZ`Kt}*o4rSPoCoZpr`%a-i>qs}Dv_VrtW9r>1w$*Im{l|yqS314C&0&- zr6YP_PN9pHE7Mh)fDDrLi=n-QQFqAfl5)`@i(RX^Pri*8hxhVFMPlzFtyFrqLdP}e z0aZ0&KgbYn8^+HcBGbbWtCEh1u9K#aI0gl+|ZulSmqGHS-$AV{{)1m$i%A3yAIJTihl|)L|5YmsEfZVLj^6z!tFXh}SPcpEZgcxCPx)*Hb>- z|B2fyBrguR@b*MJx#@?3>ZlbNa> za4Ucni&3Iw|G6c&Rp9NaqF)xtyAnOm;rkT~QRA3_&>o^uaEPGtbATwaR}pCREL3n% zc37kUm!Bqe)5AuPu6u3!YY^-vZfwfRA}$-O`S~hBx)|ju=zg{_!%9C1yDrH&`)^|$iU8O8HBR(+97vr2zrSvl$=a9|wm6Ex% z6271l6QydU>@U2}6nM)o5Pw?j0h$$~fcE(;i7amT3g7OigJRH%-4Ms53=Ja<)|iV#|^;X2C}GO39*@D``W!OL9Yp_;wy$sN4n- z0huAU?eF&|YT2JSN47mN;?G02E3}17QWmS^jwjrP;*atSR?2I$TxrVF=LPH?AmfbTsY^_q*g3!b)`X`16E0krm6{$nJ_U(-TIZAvYNdm=ic$V1q z-f+DV+9jxO%hLv^T%Vl}kC?O#peE`rMb!g@?>c`)=oYsJ4&W5T$XQeaxC@iiOi?=+ zW4AgFSG+NR-TK6odrA~kd;}|QSJ~tOFH8M|PE7P@d;~KL9|><@7v+g(Ii{^>r#O_e z_?1kfm~On`QL5>NZR1Q`5+qW(LWuZO7qoe8M2vvn9uOEJ;4nP6X?`DnXQpIppYywUVzl@~7X%J%xvY|u+EPE1 zN}2wuE3yd1DLnm2Rb@O4IE>Bq{wqbJiB*xt0zVbL`Y*`S9 zVd+u;p`Z~(~Gu1gN49-;ZMgbT64sf(qfuOeW{Xe(lFjzb76sa8ucp4TL-pIX;z z66LBI-)j=psC%gm<bYVO4(KXd$NQPgE1rr3YE4_zhV~4B|O1c2_o~QY_POLnf2Mh2z@MbJ}FF zRI?E(VSnt~$~{zQB=y#`HXAbW21ELgDE$CoZ!_<6aHMx=XEB-ZIOOQCcO{Q=z!S1E zVjSifS;2xV^C{;iifTgH8H~`js3yD0+zU)g)`rGUO=(xha?J0p>~((4K$L4qpI7_T)K24vb0^(YmP(5q7@q zO${bMj0PcH5r+Z+rlA(Up%CZ=1Nyz$3xzjcgT`um+8{$XMM(!h2Ubo>>cPc<&r)9I z1W_p=PR-^d!TUp39NIXqxrZmn1vU225=e}FgA@@{hoH`YIzDT6F;@gglbga`FMJoF ze+y``5x@n;MrcGEa|lEmv-Brq6}$(yMEW;u84GSmTjwU>)r|gbhvTg{%q?+&TBs{U zow7BD>i|H|Qx9xTt)Mr!+O;iKHoQ?0`2pND2)o;PpW_gQ!rENr6mw&L9&sw=aaNq{ zEW~42^HZ1?elHT{A^xI&71|<3{Vc0lG#W$OFz~9OCqN1mQq;!*|JqV?Ucr{b_k>!1 zMiD$zN}`8SP5jePO-0azyR3I>N7M^%JZkGV+_$x6r5(#{rA#bxWL=w@&u!NmoD~!= zPWe3tv{BzEHRuKiwCj$0n}<+M;zk^AwB9TLjtP^PvYc@BY0f&BVb^E|5WfMX29(X- zhO>@C)O|8Qa6@awyk7IdcCy%p1k;Gr^P@}8=WTg~YqUX~m>PI}lQeIcx z{!p^i3nDP}iEO$IZEJAp#Gn)c_sL3myNbI{R>}}JoPny8+we%ieUc%?0Nxb$$=GK8 z%$v-fY17!Vfp7%4PdWgqh%sS@nIc}#L-tk_N@=QT0lPml1RSUtW&Z9Ngb)IyH(*1GZZV|1a zeFM&uJdEz)o{XkyLlVSB?1nl|^2CCBCAX8iMlxQ`ZfziPUh#=y;kVMxVs%y>odd*q zk{2(*w8DbY;PfJTB{Nox7Q81bB|bcgLAG`i*(*T!+P5~Y{m@QZpXNR35EaVD`Upz6 z7&oD@f*t#WB;%SG31)$k9P;+;@SioxXb_`}hH5vYaY5uY@yh^^Y?g?lCiyI}p@qY@ z7I-5$omrN`4sS--u8Ut;^2mfIBvQhAU@y(^4T7xVqo534%?D{sNMF_#;Y;6E;Y<5> z$w)__lvzipvX#!kr7xYONncn6qwQFyAbnvagY;!<9i*?7ERYI!)pFN<>AA!40n};@ zpo862`fa_d7HpI%eOcS2FNL`DWe`YT+NVli);8&DO(+y0eJ$6Puxus7B1&I6Gkc<% zGzRHw)hLfu$`Ds_Y$rHUn)GE5lfKAa@f3xxwS+oB_@d3$5WL0c(hyv#q7flXfs3i& zTMyC}qnpZBHR7K=e%TD&3%~>~0~{F8fQyIhXFeuE=XA#@e`3foQ7H@F2>cD@DV#3T z(;Eh{8_Y282i#y(HWhXe2wnz(U;|$v7JA^b=fsio47&4q&G1xG@=9BiN|d|kq_!5H zP-Tzy&{;7UzcEB{O+%oi%Rw&mw#r=&5xL7>XSqxJcbP~>ptq-vP^BuJgUekyOMl{k z&j9XU^=)*yOIK0FE?Z?2yGR4>mjLgC`yMUO2@L_^YlPBu?7W2eRDzcvevfQO@ zm%9|=a+g6McWIw0cUjxyE;5Zn4q~}$jUZ?-xjU@+Da=cMMgTuLf^w`b_ zf;Yj-ASQT`(-laQ2wqv8EFpO1!&Nw=2x8<-C?d=Wa+e_zaJ6M%ogM>&b%6UP|Ca-LVWm*wnt(F?AzH3%EFl4RsX99QQKG6 z94Q;*K>VMWI~^kCPJ0LDPHInt2#L8fYo-;50F*d01&w4zdKWY7QA)`cAE+>2!r(~> zCS@Vj;F+riSKt#mH5fc|h2x$YJSiRE@GM0%uUer(Q;R2cx?HKo!w9km4^xAH#pFr3 zGPApqSIVZ@+@wiMqpmeVeKM?W_?>EQctVe}-QbXDE0deWr4ai-S#pOb$p~#Vc^bsG zlp;KD0m<>;w*CG71hMb2Ef!CQjQF!yJY!odo&?d@2HvlXG+S!&q}*XwOg2K1$HODf%we8 z6-S?_$<8sEJn6isg;RF97WfF@6FM=NJn0aor(p45{8FPCLPvmKV7YE~2hi9oR%Lz$- zGZSiRUW_Bfwi-JPV%tf^_7(wY!Fs~R&b|44{9TNlu`R~V2q9yqx5d~Q+XbUKAVr9= zGv_3`ZN|==p`L=ZljfnZTeCgcLYTFa=ow#tuyzu;3&u{)hrF3C3BpDS<;E1NtqrUW zZzx2Jov|&(PCq=Gu`{>4OWO{BAlvdLZBs_zUE0oYu`^j2etjlOw{a_N!{yGOSi7_> zxmM#hdfKIJB&X3qYEz|cZA03|+a_(J{~&E+1SV~(Q=k$-%pnj#^Ip^^>LzXLI>m3~ z8)@6u+NEte`@6KAHBp>OPAzTHc18-wAbaVzm2qfgleWFB(zZcN+IEOY+tw$fZEvfz zoi*Vdr0v}DCT&yd;9|{BVPg6~RYqKeZGuE$o01VnVVf3f7q%Uu!Zy9L3ENp+L{->s za~HPzaVu>1v?@ z5Vfy8RP!hscCvc3ar!E&uuZ!+?f&PDIChz-Wf;C8Q#I(VT8MIp8soh1hMfw#`d_mskZ8wTWb`VB@6rF=Bh%h}sTO zQJdZ=n~jt9XcM*D+(qr45I$&faL?w!Czz(LU68eVw(!EVW1hY7xUJs+#AR)TsI1)! zL`dvuueY*xZT z%4MiPk1Mw)r0N4EPRfqo9pV#%++7a1qst(&(q8vtYWj0RA;;n@HIRk9FfJ( zOn7^ei@A3pW9BL}?kvq8#X%D>y>fvV_#rb&>nuxAR#*cW^oa>ZRl>Pzo^EgktsRgG zFtI$UC37e>wmS@+2I-thihIzMRu$jq`wg#w3?ei04kH#q&`Q{-RdD=RH2+GTs>L8@ zyTiGniGX7LCP{w9^R1qw&M^ttN9}_A2glSkJ{&^(bb#z)K3qdf=;7$n6!K6Bg@9Pf%# zHTN|>f^|g z*Gw`*za1x3Od=0I3wf-b3H4bHo8(4ix%(@5Mnc&c!bG+-yJJJIhZMkO1j#{5ZwLg8 zW8(9q83AzCGz=IO0uDIzU^0XxeA$T;3m<`*BJ*K8GAih5wj{_+xL{mnR2MD9ls=Ve z#?6@0r*bKFPw7*swwmTIBb9K;-L3@sIJwG)U{NaL(w#}KT=*p>^r=)Trp70T@Ona@ zN+oktcQxf3RkMAI%9x7-L2zJfROS#PozdSSLy6!;5%;v@{uEMpi3H=i^%=L^rf0osR>AvU>-T0H$(b zcjQ@+09mS22D=D_OmczpCsV@G#vC!7Po*kAW5g#^>&gNmSCxwCe0&)pbK0td6ROoB zVPxlPHF}QU*9uMO*EO9FLuL&#sIWC?I-e6VEa8O&>=LBKbUyx8fZ$7#&L@luORLyo z*EN@M@{8EfLGtxfuDoVVphwH`0l5A^T<1!Ru9nActr_}Ld(8t@F&?i8$AW2p8&XS4MZb|2aIWnw}Y&hY(vz>%% zQ^n9R8g_}l3);d8L&vPSfX~a&p~-GoD7ZXQ4oG@(y`UHw0cQQ(+dCSPRCPiWCEV zDXr-Ufo9QwZXhH+;A>Jxt@(TykDBMKewMZ9PnsLW7faIl@Zz$D3i*6^{iRYs!s;eF zP_p{k?kW>0L^uNPK{CMberY=0qv-uvLG_AY`wT%yr8o(!*d82Ndjf@$Ad=I{MH&3e$3q3m8b|g6+PB`^qIwLxfHscx%TP%k91W*^|Ia;~m-VC^~R5^PLISn1O zh?%aleROMo3iQsN@V4|&EVb$}^vtd>4JDy62yTZQKJm!zS$+QdQ#zP5>*7iyXBKED5u$?%-tr3jm3Dmco!|LkvnYrp^A{z8wbzx&!?|H6Njp5A?UPZ6=F zu=1|H|3E61bCciw{QUbJc8K0rf{pCN#72xXHqrLm}`w!;< zJoyq#n@0BAbJ3_2`fBkr{%u(nf_+WPOZ(K{{l;E@rk~f5OPDM#K-V#}mEQfC#z6dE zlb+8XWvI3C04Oa~%kTbTTkv~(HT?XG_y7Fs|MN2{s$1!X|MeFqN=P@URD7Ra`PxR} z9sYw%eWZe)>A^4T!Jp|Ojn@Xjdw!zoiI-t7b;`FpE-&khSu#3D5Wc3%5eH?<{K`;% z>2tb8UV8FN8_Re0*B@-V&MhIu(ka%5&wTWOh124%e|z&6ea5HEd(mc|(j$LH23F&y ze5nVh-Qp2FC*938u%=~IAQC-hh?LKs2^*5+4+A!Qz2hKnjrIK9&EC*A&ebI9HM=hM z`P_asXszpd_ix@)p7v4WeEn;G$BQ*)ZkMZWxbDZwzV?TG;(NdU_@1Q3o?4^^{`2Ry zLSKd%DNMgg%k-gAiqEp1K9K+7adHj3UY{G$`r0VniGPJ8Y(zlONi|IMw-+z}kK2obKl59o1?c7>1(2D} zA47+AIe#X^l(eB)kB<@~+A?Ctk0B$yBX_=i&omgmhpyh<$sejoDr>UTG|Pfy-# zME4KeQWxI@q5dbbleC++!8_%PYbvOIatxn`wZ8#5srznCwkrnR5G)U z=EOh`P3_^5^7a4r23^lLKHZZRf8P5zPZ8PP>g=@r%z9Cl_I&blC+qbgQ9h$Jo<0<= z*2Y-z@6K09z8&eopVTMGJAIzF2KhgvqgwBQvCEWPf7#XjtMe3}V!ei$D8;j$Q62LrkkPNc&sf z{my`YvcEp3ORe{oi~(hCEmQ2^d3;a)lcHA!Q5@^s-~OX_9wrj{{PTOhl-7AtezVO~ zAHbhwG3!~lV%((biJqN9fA4%vPzJ|S7R2<4DIz`tPhufbYO&KVyi*X0vw!V# z-%MGIwvKr>9MX2>b2xP4)*ee}RJEeg*D z=oj8u7+5$?_rnz#-nRE^JCA=k`=Z)!bH=0jHNJ3O2X=v7)0&6)P5#;~jT66_gw!K2 zeAjg6+gIq4Y}d^BhD7W4!+sOP$v!K*AG+URExxgD-H`|a?rW)N7D$s*;6RyZEh)oA z$-4E$?;b3>ZrpFSvnq?V;ud{=bItI?1C0r&@jXqE(qi^`z%^fA^k(3i4Wk-?|&)4e)9(IS{`cK)U?ohYnc3vp)7?y^SaH%UOsUCFljBeiunAY1*@m^@e-gc|z^-;W=UB zX{14fkzA#)y-L|OWH8$LJvu$&TbD#`KRja7*vQH^m)AgGp8l|%Bz^X4XOw6QDE(^f z@qypz*V+q=4w4J6|GxU)(-!(al93oA$W`Nvhyt6vx$NJ5k{n~uMs9YY)@Yc6ikKP|JR{vd`_3uTml}r24r#gsKg|gZkd#~85lGr1h z(y5sE9#QI2$nk^Za>fV8=<1{};Q2L+yHOREE=N=8vPU`*xRE~^@P89cNntv}MBo&{ zlWBzSj?Q_?A&BQFh$nVr#Y?|Dg-YJvhe~M7D1E(A&Pqo7S>ppV1CE(U*OX}^ zjPicDzc%^NKqI$%xw2im1_>~{|E0eax(a;$bKF==vBkv*uaSy^ygH5<*qm#v!z0=h z$+flGuIca2h*V0oNNXVaqLX9Y8F!MW!%6?| zSMuW>Z%4oHl1a_vP}>7pbTWT+jwvLt`8ocD*p4=N{`1R|v5B>mq;T!Rwy_njlB$oi zj+B|MJU+#W#J}_hegZ;sVkSA?)HtteblW&#?ciEc{L38&AQGzK)z+z$mWeBoTnwW22Ub+;SgY}2D( zZj?^A!B=IdYwgd^T;urpMu)0@N*=zN^@%@`<6t+{t_%n9_xGaDBcZMZq3&;*n`~~)GxAuGJSlhZrTw+B zwJ&g3ooame7VLL~>|%PXb-=NCtHgSvOWRrRLIE1b#>d{Os#(wUXYpVn56Z`itUF=u z+8*#K4c$32)y=$#lyO$tN9s;ny#D{Cz{%0fmj=e2j}zTxy%;NzH+He>C()b1cOlTn zA7Z!sw}E%MbX0JDiI}Lgm=nHoZU|(KR-0;Y?^Ni<`vNogrIX)3I8F7l6gbU5i0|YA zp~)Y}^E%gcBf_aJ`P-{A9}wmZyjP**vF(Kuh-rO(dFrmwdy~ISvHpc{cWnf{Nf>ru zobI$w4>gN!++>GY@Hd4XV2o}b>XXk$>v8Dc)*41?AD#uFqEzfD@>>{w;ajIfU-Sl!ki>p^kv!a>N?_}TdTou&H51>}(+OiU|jD*t-LNrs_(uc(r4 z95D8^VvcQRjC9(M-59uE@i*bs+LT(?8sEQMcDCOox;6WUb;lo(Bhh(qDC4mcpq)Lu zHqQkAwJ@%0uejF?yJAD=liYudr@JFcOc-CJN@7sBIkHDnt8HB@tI=^ej^tl@XtEWZ zYyOEHTWg}Az47B+%UI=Jch=3UD9@L4|Bn&rRh4|HW%N;*4J3~0+bin#fSvli+cmDe zwXRvOOXt{Y@6U&bwXHD^{MOzd*7yZql0U<4%hg^kB}rH{-r)D82Bpno#GrR?sm`4D zm5H_PTOd~93x9e~B3!Fw=R?^XQa9r9-6hrfjUVV6PW7amGuODnzXQ~-(;Mm#>=A!w zhWmTV1pOXl!{DnGNbl}YApXs-)6JJGW&DL}Uym@F{UVB9AA=(hBJ1X~=DSM*75uMu zKXZMuyFQtW6W;CgZL2`ueZ?c5i7 zgzK$1Nzl1|Qc9=_kQoPaXDzw$Ullg$q)K&OvQc-&OeQDyu{1Y6r}yUE-5lx%@T2NN z-u;)L4GU-eCFW!tqL8D4DrKWF4<*S!94VJt(bf9#{`#9F%Np`F;z!}PoZ99C3g57n zu7!&eGs&`2#YK8h_WZ}b6{`1o^(^kV^w`h-k%CEG?u{f}e&-+Q>N^+WxOGy$XIAdi zUr>LmbaLk%b0cDZqiWIE)hlvaaLWBDC?+phrO;}M8GK0%&xbS4J}@i+wXYF=_ixZi z-%u4mgXH}EB~`g*bnZ1KHwJ=hzx?lY?saz@P+8Hl8-%XDa9!R*PrFUhn?v{~kf>`7 zSCFIx*^j!Zy#kN1TRe~a@jPGGw$UHvu}aAfTJO7}$@H53)t%iDHDG(7fs65q8@UJTSI^GK2i93>pKG|dgOJvVAtpGwRnYKHh6(>z2NQtFHQkIINzXA#XHUg zzxh{PtA0G;P#W+P^Fe|CQnLIYX6P?Qrg9BV))ExqGhiCj4$h7rWw>9Mmgi32bgO3% zjuZdjX174GzEJhsdiUSnd2e@89;7WvbJGJVTpIvhQtB)D5#=q1tAjlK*T9VZxA*h} zKBugr-MHWS^gw%E1p zw>qVul)4G_L-K%~=anG$wDWT>+d=&l{GE~STZ!nAS6umNgNon{dgJuYQ+lB3_D*j? z(4wOx_y1iWUjbzm%R-tQi|N1gV0g`VcCDx1Lc!VHGRL6r*ZhCq;@tCM7}%~yS3JG; z1-OnN3f#qA9P{o2mEZm9%C#zd;ktuwFXwyjoT5&vvz}DCzV6O{?cPN^Db*ccGYt13 z-{icVhN3!Ix^}7wW4UzL0*R`(9;w%dG@N2VK)MM0ynb@6QgC1hx~9Nb?E(Ch%#--0 z$YcG=`VAgYzcOUyiwzp)zUjnO5uR_*@1gfq@cr2(vd!plJN+MGZoCxQ z?o!a$#Rc`;L-id7>jeEyB)xHm4+s1{&{(+v2sOcEee&=JnUlWJn`cDj2-Id{;|0`= z@~`Z8WFWB&d^f ziErJXyR;PxcA~=FU%pd4aGDTjCZ$nHGZ6-=@eV8D)fADE9^=y1wsJvA0e=AvsORhCa$HPyx`mrBVZ}qmNH+i%jAEDiULr)XNv zUB6RnurpeZruaKUI`{C%!v;VLBkWPme;}Fc#77^#j7+%;SGKn-#iKzjv*R06<6RvL zsxEh|2j-(|EAjUinv&bl6$Vl$Jr!)sBPb}Ym49!@VssHB8aWL?76aB%1e z3D~ZK|L-Z}js94Tgr;qDqQ{5)T1yxlFmC)8;M4a?DuW<2I`uOzgp1Urw_$IAGrP=T zb?@FpVc5UDMY9(&rkEo@-5Cfq3O_vFFq8jiuf-GjQr&K`OV#u<=uq0@+vM{v1lavF z!`q}lV9*2A_18Cly&xSsY1(`tg96WEPMo#;iPNR;S+K9tA@CgU_|czA zs1?p&hEIj9br$5>j_BVH2A-GM;Y;CG%3}ki|H~GSdZm|oHNE&BE~($kA$ZaKP;SE3c7q=;e{=dEI>U!4q-abDtmrO8+Zc^NfzOkCWW%JIzG$`Ji z-S%j~%S8K|FPw6zH-RiH&it##zDf4t9I}8tO3rZM{{2eKHcLTVx1*{@Te(XuBh$XT zqh4}p<5@rZ{K6%66DD)YV06E{!ovnhc=L`DmFA4R=rtjJc9Y@ty>)F<46!%YRQ=N> zAq_NbH&QV>x_%1khs+DFh1&#ZaI?5iZg%5A^cL1jjeM`E)*fM`r9HilR0}la-XlFn z_2hj#&7Q@;^yuqV4-3~&UFT_e7{znXCtqfNd10+IhD?UqA1FS)@O8g*um7Q0v0!Sx zPSJO%1B(i~JHP%L&-ZIN+wB7nB>hVZ=!>?7mk?FB*c7M%KOy2l0pCV z{X989Qn#M3wI*KMFBapWqgl2j8z=Q_6e9c|tisN}x4(XEMer_l=H+7!2|L^~=IX;I zLqxTN^Hp5Z;H%)*PdK$c z^GoEsDXQ?6`bB&89ksbcKh&@keo!NQ3DA)IA$0uREq%Drg*cY5qccoAZ%9rnTOTcQ zKR7Av4gK2rRkg+Jyr+gn-TBbmYAwILd*EJac%OeHg?yICYg=wT$}T>3m)Le*-M??i z!EL6%N0z|rP^rLPhS|Q9O!6jr{5rP#i|rhJIMGbp*YaIhsHKZ3Au8bBcJ@*jlAh!2 zj|P-}Oat-SPfG)l=jYlx&-EvF5|~vBU#@uHjaUCE{r45?mR*~m@9q&kv3if}2_LS_F4y&m{JU=n zK|ql-<-~9PN3--FMR!vJz z_pW0>ulxG;^4TCKzJZ!ta3jHv_F9&TyC~lvNt+#p`|8)++vUN3zU=Cb3%wbZZ^CzR zDq=5t6!viGaeK}8d~Pz{O=9k_E%$lBb%!s_bw5#D#0|GcN{{293bn6?Sl(FFvF$r& zsHUfXl{_~#hBu{u-4b`+Scd!{MAG}(7$qU%DaW+DSx9zoK~3=x((`X_>>OBdxH)f6 zqj;TMapR*9?D&XuJSr5z`@WTmyu0FVGvVA>GH;ADmPo_Ox=;|qwHIU9zUztIIWWH^ z==}w+6^gH)8-H=l;k=sJbUU+ZG~LfEZ~4Q-KcYjwGPYd1;@vqbyc}o5`}#ti#)A6I z|NjtKRV-d*Zy1k!!>_CvyFOGx>NlUMH*iiGbp9yBgwJN3k-%JEZV#y|pUq?bc!CIq zEaVb+NE!1g6yEs*DfxqJVRr>1-;yf~NxiOfg&~}G%@L$iiHfbKnD%c-)7(GKm%=R2 zzlTNr(nZG;NH(F;Vru+XyL!RShnLhN=p~Pxzfrp;(OTOB?m2kLSB0RI%OkVp{e3YN zO~`xkrh*`p*Kg)<;bY*fN zFGg%(bY(pTD)wTJ|~o;MGIx^V|ZEvPLx?uLl2AZog&s zTctkOe@|_{{ina(^49Z|S$_LpZ-QArpT2Xq{zq;8DE+tpG5YUc{??w)+r_{AZ|VEU z_5Tp=JiBKmM`D)q+kfDooSsYi*IRxqpJN;r+S-vyc>$>cpOVAv-iu5T_C$M) z!hiV3$N&EAGRnt)yEE$l{??vR?+|>_`P~v{wfohq>8sV+G7fTHZT8PzQ|WhaOeK{}qYw`8-wD%UuB|ElY0*Snr-IrWa<$IWv}Rx&KRe6HX~Kg^-?yBzPUQM5nH zIb1orSM9w!0X~oR@V-@9!l~!;&A3Ibl|O3FolqrbEd7CjvchFn*Qp#<@XGGbDZN+6 zqd8_yIalbWuj**+^EoN!I;8ZGO23>TJ5Q_vz35u50Q4 zX9?X+bhuZI>T;@bT%oci=0@scUd-x z)1EDrOkcIyA*?)S*`{~NrMLUbMjF(w-9c5EQu~#ZePzxlS4ge&Q5|*ZH1UjY4^IrQ z6@EwIPWYZG=p1i^f8`DJoV_!=bnh^)q4nuco$kv=_M&sgd1;w<+D#dd;B;x<9ppO$ zv};w9PD6(T*y6Ju+^eRFRS++*Y7k9pi5b_ka<)x#HE~IwS zC8vy-d~n6~mMm_kKT-+N!z9JH(=?ImZqpMVkaI=Y(G(4>x;xd-A{M5Qh!oW6)@8^S zA_m({aVL19gf(Rwm(`S9rNd8`dqyWUyyTq z=h59KI8)|dAkTG${xFTEIHSbU;eFcNk_dA()Qs-j`M_L|dWSD(LSJnYzDQ3igB0vqet{{jjId zm#xTj@~-wGoz}^FKiCHozYdi`KQPF>fTIhrs=_EUv#J`}b8t^%?vlgH@wphPMeMARb^TVs#Zr`*!d#pi1LjVVd%9hC2 zaWbRnDknoHhpMSpnbft}xyME~4{Y9#uF1Pr8>NRTHBP6w;vCgVb#*scduz&ub!o2F zd!)LeQ;XQD8P_W}#=?SEK{<6}x%8ba=;pOw6WFKtR87klO>a8gIFLFaw}}4B>7prI zT1Dukb)UWc)FER)zh;YaY{$Rq-GL%-rCU)=`J4gqI2**z)#+4`60s&_okw*%ssBcU z_wf2Z(%{`7A%`9)60KXcenAdJ;uXD(BJs#fy1lP`d}aB-DD1@@t})9E6~|PNTd5JW zd|}o06kQGnk;CnfjUqNy!`-*mb`>LfrY|g6rw^v5Y{gf^EKl+y7^7kwuBuqMIjBCc zZJhM1sSWF&+)VmFJNB#dZFrWc7{*yDIlnTeLv=cou_!zmc28lJ#}c8Us*p;^GcduV zdNP2gU@Hf$UvSVZg(yvjt3n&LWWi~UZP=txmGd5}NBQuEq7p$)S%;}37Dcj=0}9H` ztsHOTEB`J>mqg#i^6^Jbpu#zN`au1&DL9YUxXLe=v!Rb%`dOgSf&v8*w0t3Lt0~38 z5uJJJ@avqrx&$WW5-S<%^k{+!)!+&bl~+znBly8&Ka7bI3VKm%^!PYh8`!E{p&8t9 zf%NJsA5Vkgpk$s+%BYXX?2XTF{VqMQ%(T4k-!5Ze9$;LQ*7#Iu6sXT|pH$~LGl;@*e%PO=Z3te+~T#0*nYPKjF+RBMD6KL&* zjz#7vDrUInP;iEdG9K98{3LJ=rnu?-PKOj+*t~F-3(?>?H1@R~J}4SS)FP%FY8gw{ z+Mx?e1(c<@%V;A5(F1(dXvgUypt-{OI^=H0Vft6J+1rqgr81z*ULmLFX0iKqh_uPI z^)zfky8Q1FY}|wj=G|SLSnl_z$)iHaG!#(^2ynRd-_muAueetMaeJZ^><6dY00&+Ph{p2qhzj^nO)lo&dr6!6~so7|h(ScE#y?)j5AXO4Fy)b5nwLBP= za++k}e#cGL7NiPx)o!t5b=%eU;b4ZXpgL{)@X9G@;(-v*&4grZp{jX!5eGsRM|s_i z&UjVIIAg&rkiMDhIm=Vdo2d?6gn|}2Xp_@JN3>iF9t#^-37Y!Ism@W|RX0&P*qp_q z5X(?K-c)Qo;(s+-Qd=Oe3YZ ziwHux!B}RCM!QZwC{X3Bx08&0;5@;Jtv+{mAJoydxSWCmRa-`?9_$(~4mz&DEFvaK=yMAFtoniQmPU zxAN~eM`UvL7kMZexE^r&Q(9Lojt##{ii4GXH;G5&ky*awP}V-88)S<>-`}2sd49=> z=h6dXdv`;vbKS5l-t|1#G3PTFF`*MZ=g%J)rd}F)FrBCy1gp)7t8n=g3(S``o_1Z(E==?5NQJw-Y0N+LK z{2%kRZHUXGq%y2&5K6kJ8|@bjGQYulXHrX(%;lMWA=9(dKBDRcB)ZlSqzze%{ovB{ zTU~l^mdxQam&;ix#hryjFrkpp+&m0w> z;QUPgky8xF$3)*j_$dWWu|`iGV}tIjS;ZWJ%8G+-=sLgSluF$Ql48R0{m9(%u22^Y zmZiAm>2QI7d+61fdaA8mHz_eo7gXVLwljQIXS&Vz2gXtF{flOuef4bkGi@ild*+~L zMs1h%5m$|j1I%Za?y$GPc6sTF)0NpS>vN~U;^|4ZJ@d}McA03}E`y`C%S%q^YS@)7 zyODQ}olUk_}w0vRJ_7sz*Ny}k#uXS^Tc&qw{884%2V3|y`8!zu( zIeo`h>t%3YzP$9IAzICsw3UaQTYkrF%PHWvC4^(Xe4AhT1SwcdMElbJ2{Lm(wY&Hnz=6>sbaSN*%(ooz^c3 z&U2pPp~?9`8Mu=G+6Ii6m$9)C!HB8!qz9y|Ov8wo7%JJcgojRA6dfIBa$$FZCQOAkTbma#MY#`c)6Dd#QpRyRrhh}N z+4F=Q)9MgLMzfQf8PZyATC}W~YyiBRNzU5D>>p-^)Dbtx2}aOp zZMzhL0Q#1q+92Ne;R78yJy8owu-k4y)y$0oT-3HWHNxl9tS1=(5YC&U?XE z9B*UJAC}BS(~_AulN%SUgoE2Hr{DGkes_^U*Hz^{rG_5ZDRtM`VYlS!D=nv(bZVM` z!L}VYdGyYWWn!6hE_j$S6TMB*Fb<5Fn&%4ZqSmU;ch|FJ#}o_NTh&~tYhoFd<`aKi z1!osCW-haOyD{@lT%bQWHj9>Z8Z(V_V{AR5oWINUN@7XoDT)_LB&sTrkB$pyr>F_={>7d$#+a^=OHXx z6;vfxJ}Vo2MS1ZLuyYV*nm7}a&9Vf{R11Ahz)ZbXgqdDiuLu~-)SKln)5IaD^mZxy zlZhkd$lz#)O=aXpAgOQNVCe~4O;Zgz&if)(*9C|r0=R}Hut2BU0Dy>r*+36Q%X6x!D5L)Lr zs*vbPRoXbzTy!{SKL)h%(u+p?pihR$YRzj-K&z9}JYmHLw|XTPafR_{q0^Q6ut-%t zzH?crI>fs^-ucOty3LD7pzGzBBNBVHXrXD#JC(3jxA0yOu(oRuD#uzryEyHx0&*Pe z8XTZqJx`!rwNRA@26weu5$&pV)|(|jyLzh}?V32el_N`1uktvf!ZZVhc2yx@R?H+S zlN>^<5<)$2W_v9SJHO0p-AbJj%bD=YXsb1U8-FgJxG~19vq5bi;<$_j?stR4N!6= zXk5^|Clj2>J9xn{{lE->ORo)Sp?V^{3NE)Ms|IYHT1g!gT4=oy%TA!eQ7zw7&0P@Tx7@T&dsgCp;tgNZR8x?VhO~yE!CRghQ=}~b`ZEWFWrEsqgl9! zfv0{XLvp!u!X_{}Z}|!+`o)3xg5y)aIN0dn33XCU>6z^Fl|1rWDDFCMm+aBs8xUu_mV~nJo>pd|>uCPcgj8LO{Jlk7)Ag@L}ym zsag1&gBG|f8tojmVex_=427Dbx=>HB5&FYT=|zptM(PKZZgflV;6zBTLouHM zGS+U|To;^zb2+XW9S!#@Nd164?Fl*;0UQEFoDfl@enD3d4bL*TCzSi3=b_KnIWRka zWe)5hlBc0#Rbtxw2pKZlX9*cI>0Ki#!kY~ll{>=qEEi*cLCw0^*)Cov`l`c+w0q=^ z-v}{#CBUHb3C>^@B0TH11F=(+bJ}UU8WbGtPhXismE`6Lt?0=14jDp)WDS!{@a^gZ zg4~%OZm{!afTkv|igQYlz>1e9j`Y%f6X(V+)bQYlh1b#NOC1RS|I0a2eA< zt(8-x$2la?=1_OeWJHPJ&;TejM9ZRD#2FH@1ja=dHn@!CC=_ovq*d+;*YQH4{iNf$ z_wbP&j zAYTYHO*cH*DKFItRaZ}aq92}5oOAm~Hf7JCZ!e4Ltv=dlxe3gs{>3TRbnqZ;Rd~} z;1qPXXcZXnNhu2N7tn+v@f=hpKsU%kLSRTObS~kta-!EKKOkeOtd9%`7pMY#%HIBJ z=2GpsFJTNiNwlkfOhzVk@; zuHa}xc8?rnNwpAd+BeI9;Y$-FWNuG1TA?41Gu4#l89=sZ2{Rm?TBq|#FN93G`Vh@A zDh?B8IS`qrjYIH^rPzc1fzD}LJ_C$L)w{C}4RVcLJr8}XfHaSgiB7Ze=q zT|pNX!9$UGC#oHa2w4)d%;5AA+nd$N5lo`JpOq8Xg@0xs=be|wL^uFe!Jwgz!lFON+$M3yEfwlbQ zI6&(P@P8uC;lXJb$F?B&3F-=(*Smuwch9BM1o>XlUfnD2JUq5_$Z0DqMOAij9VZ?m ztC>P#>k#nS$|;W7_c3=WV}>kl=G80_ykg)}0a(hIJJ_l9i%lnNrSVtNJnNmulUztP zeM0B3$zWTe069M#pkHZUa|FMSh9wZKZsB`Dv(+}BYB@Tyny-w=FNvaL?$O>deK`Kc zKm?JSL8bYOYvw9DJT2ZX+k}BoM4_&T1 zr=b4qIgI4Du=Pq;hpr!ST%S}&iD6bh(osoe>+}G0K#RY2eu2}L%Vq7$k&f50vT!0a z`;kty5u2o}u)=M0>QuDjR}6dQcrb;m;)KePiL!Y>LlLbL!Lmiay)+Nx#KbtgR2S7R zjMFGeI?jZqku;u^<}iuhA6|P0#!42#KE5exv({^m92HB{5{%A!^?;1X@U7THZO!rq zogQ9nN&tNpa|kMliIxe8h@e-h2CR1;HEt%vGz#6yW`*tka^)u7EfC27w6onU@bRz| zjdxUT4!Zp}f)O0iR;!t$fS$R9Qkw?c%xT1`(J#n>MyomGydiqdG0MwDU1jc)NI&OgvybdJUvM zSOviJOCv|xsJv0wO|=`$IN9hQ6sKGHFo1nz!8%Kc`*l4|>Qs2N)kYlNHJj=b_C|u% zp4`wnEQQ=cOdHjHc%jd?LbJo8RXn-ccAMy9ij;BYg!ovzWojGM=9SRcsCIW#&eL-Wwu_g=q{BPy^EiKKc-Qsepkis~OoHFrh22RP-UBxc46R7R=u<6GGsNvna5R+V6BTu|;x9>C3mSp!JZgA3W}I z)ZYnoH+gSR`H=Sr!J6g$<^cus=?kJ_*xkp81;=|KJfW+E514Vv)y&H(^Qp+Gb%XQA zbSS%2;qY1o#0}?gxu~jOjX8_wCK#YqGl~cZ-@nCpK;P6n7)=iq_svW~GIv^EtI8CO zHX9t78nxrDp9y6F@}xV?txmtI1=X@i~o$6g{ zcJR6xaxHgWvLp_w_3oFLN6WO?1%rd#sW*m0IS>ZD5_oE7J1>-`MyZnlQALmRI**P` zx=FNGE|P(sJ06%s^cL@_sp^OJB#naSpyTRiI^y`~&`RhuZhd`E<41d{Wq>2N#CGl! zU(k!%)q_r4d)JX^>4vdH$;BNobG%D5>8Ixu2lgR)vD+PzC*0udw?lAA%R^!6Q0Hw} z&>R}86;kkiY@&Db9QBJyHx1j-rY1uCMt@!O6>uL()$>t{!PuOh^ejK4d|Zr0vN9v@23i-j2QHUYj&Ez^SC)Ez&QE1dTnKtWlFsRBja|m^; z$F_M9(+<{NCJowBB|~a;l~=6tJXR;U;ZKwJ>9)faS~sx*i(^y-KBP!NLZCViaEp#E zoG*QNXps(j5gzRvn(jRZT0$h=JIxryN9Um9z`=3`Q1!tdBGM&KX5z}eh$ z5bVIeN}R`S{$hQKnz4Uv=D5ly?Vq6o#mwOSE)kTwIZa8rM@})ACu~tNZ+ZYdIcTlr zQLVfq2G@Vk=D2qbwL2-};e{+!Wa@G61CP8mj&O$L{<8VoC+#6JMS^r-Zg60Y5?Q>{ zmB9vJ~{D$W#QLKZ}&TWKsT!gOl* zo+MsMVYKE@44u$<{tXUWVM3I*cw|u?wz7=ZvK`zTO>v$TdvYkwW=spkd3IiArs6!u zD>zVdtGp}D^LWr|Rh*%Qgjy`Nh_~Xr7(d)n?Bcgcq(QsV%I=D@7>csuY(@f8oSk;X z**Q?0cjuK~D$cw4^%K^~3N^)f7Z2sFinG<(73alJ`>r^Pmn!QY)>Ec9oBtv-XK}o8 z_fr9E<729`(V;p!hpL_BKrL$;WZHFSbE}xniJSVN8OtH_tvj#fattYspZ2sFo1TQw zovkxXcXrDVHQ{?mt#93V53dzcOq~4^Jp*d1U(6S9we5w|Sm@4XBMaSmV;>Ji**;1f z7G$ckRm}R==1r*1X4Ev*+2(~Q#$p#(A6a!?%>(8lMe(2qD)`pJ0Jpv=iq@NS=eZ%a zOnG+NwP)v0eO`?DZtC-`)bm!KZ4^U&W^dW-JrqJZF+sTAY->%GW(zuLO0yerU1_%Y zV9KT~cTPqumgtAiQHTSlu#1j{7lG1E~&Qlm|IS_;p zN^|09J4|?*(k%KPYe}Wqmg`?png`J-t~3u?V_az-2%2g-^JFMs)0rpjJE1dAI;~A- zo)-Cr8u21dICSR4mklhz{0zjLN(gSW)J~WAoT)M|n*U5?HriEYXHaF9xlbFUuEWIx zX{gLrsHw~{X&Adim08v}H0Jw*-F>9SEF&Bj`lF*vW1cjGg~mJ>zrr+T8ynM@opz1c zIHu8A4yId89yvp0mMHV8k5Sj0L?oC-yb7!ap)=nW?VNyzbyJzw%o*wj>`had*H2dG z{jf+^nK!-Ao}#=6k2*koS)@r;`!}QWg}%I-hf1TqEItf6EU6vaSBb-tOkehDv3G6S zguZ;ovL!f@O$$?o7lZ$Vx;)KZ$`pcP$?Ebn3#+Tkv%|RLLrO!jsmo5gx@;U%mv5dH znp@SEdEAslb=k%+)Me`~o4m3i@@{ZXWT?x|p}KsxwvpB4jZ3GYE&HOSo@tAoy6~bi zBb4RI=vJ1(X0B<=x1%ibCG|LYK_NlXWW}B2MHRZe)n&>$OAw@fKLXc9W!X7wgb7bm zmIvdshq7!d_Ge}JY`;1NEN^fW%iA9ueyKXh8)^pSfK|LdJ3~3HI@?^65|?Y2JCOn0 zl`rmjW2Xx?z45&o%b`)|Ih41XeHYHLE;otmheLUTHYl%i2oLfM2<7ee%9Q&Od!rei z8)L7Gr9q&sG-Fn$<%`l8_J=7l61clVmN;JPM~CrxKPMP(zlWX^xT_z+nXZV*g6Q+}Kx!E2NQc#T2)t`8*72HicpcHFSS3E%BynSWN!H@))V5I+HR zyFKYC%=rNHZg0d6It0r{f#}`dnukA>Q&-SL?>d9%UC)4ri!LVCWivjzgD- zrpIL!!fXokRR?JA+mc%JgHwI}N|vA3g|1^ldlnIGv`w@I2x8-CoN(Ma2sr zmO(4L^I`Da-gt+M9K?Oy^uJ9wp?dXhshj zQee4xRZJW73J|_4Yd3{@*5y>ff~$Q?T!^I*dv@{NOxITn zAW|L;;&*k$eK>sANJsBF1K?f%oSI*+G(I_cR~C5<+vpc$*7R=njiq0y@wy1y`|(%4 zX-OBp7FGcz(OJ;blm$QaB%D*uw3U+}%>b9olHW3mhCaW1ZJsV9D`)7g$QocY&o=`7W^3x*n(Xi~hO{+|63a z%fQ{NGkzJkujh3cxX<&t4BY2_Uk3Kx_5|~F8Mx2>(`Dd3>&t^H1Dr1dJMEW&o#U5* zg989)H{>KQ1N$5aIU+}!kTY&Up-N)S_RGM*vCF_N%6|Pausn=iX-g;+f1OdNa2Z%K zZ4q-p$jyTa4yU~nuh0&p$VdUfoc5c*&heYT!2zH}Xkck^6IcXKI%ZPP>~zKx`bqbC zy$ya7SU6A5DJWr`ri2Z(NA3JP$jtC@@-L4$=XQGmW#t;x8xehpYAzs2U$6cXVrT^SQO^70{y z2wg4p<>DPm)3ThlTfo6#GZx+WxCJa3TEHC6%EfD#xCSg$f|&srE2;7`oYrRBDT*m3 z-xuXIVCe?v;&u&KWJHZwryW;n?&`+t>#kaRXIqNmt=Jp8CH%K$9_eGzAdVA(4DgDJ z0*SV3z|Qe&z|JA^T=HxY2`HvWNReUY4v3j)z$t2!)^NWD92~m_9J1_n4OotFP2N); z51w$7o2p%3p3*OdbH2V6b$t}!&@fiSDXfC}x$3nt3JtvN!G2$464Jt}ZxsYXQRw*_ z#2ic6YE+_;i<=er44Y$Eg-Q7EE%^n3XZt{F}KdLlIfN>#2+tU}djD2(Q;KIMxLJ z%3EnUdq-H|(N|W#=+B?}{FfdG8;`=N=)#KTVGhbgZGE>S~pb@R)(gmM{SI}6&HuNMc%@%8SX3UD?e|$5i z9!DbEc_96x=v8P4_UdI0nqXf=GnsMpgq0n=#p*?ezPtSO3VDC*%{P1GTF%AW6qTZ< z!?2YUJ>W7@5*~=`eCdD>+37($T-J%UC$632Ph1BFPh4A;eBs*4jQ78-R`$d->ufJv zTchHI>)_aX)@oANf6l4wYc*xGlyAigpI&T5AjVX&O6}9CF7IaKmO0HkIl-}beu={# zv^=ectA&5`A*kEqU+W;T-ZqA8SiB|Z9MdIZ9{h!etHtv03K&huuQ1(RI>&V85=aHSm_mM46zK?8$#-q_zEqfr@YHbfBTf5?c zXF7b}C(Ql?^r%!O8qbLZ8%3%RCxSBrGVW*Lo!>j!ojgAv#ghuz04 zy?a?`8UR+yhX}Q{0c5MAoA0>L>pcWi|v^O|-lpkLF)ssnBj*A}Yc)1J@YU;@% zY#?9Y*d2l;lPl48D*gUWQFczDHjJDC7kM;SUUGzyp>+7H&HhtFFHFHwq-LV82HL!c zhC5rT*JLbvGmR9{s#i|2o@@^)qNcyF<3-FAC3V-r!$~k}IEgFYnj8!m^u7`U4_b>| z#Nbg?*2v=HEe63Tee>N7$lFWXa|OB*F5NO_OTRFV%VV*e&OhhqSIS|iT3b(ofl6Y3 zGRUMMyNVc7a8H9(pYigW&O4`<$t2_0?XKYPxo6MQ7TB~m5Qd4V$p`6dcF*DHMClzd zOcx_HJzvD*?*enkpIaQGHBBZBUJvEt&1!F@U8?IB7O1(}Br;A{pvqU~;2CqF$M(*P zJY$q?vfC(Iy=;_ivd1Vp$H&xVDs?T^`9SO2A*2NF z-iw6mL?gA8XdL)dCX(at#0E!mSGv$n&{--XTHy+{GLq3IYI&OJD5o1q6=jas?{+Pm z39S~VT!*fWP z*tsJg2q5R+g<;Fm*4MPBL})C+RvC6U-AZi*sUVii{?%#Dit|* zDIHI|*QPh5FQ@uLp>o=iv+|y?5sYW}HA008UC#38{BqhF&q;vlGVF~)dscmv{IJs{ zH+LFr!lUwCcY6T#a;jfEl$YK|<#PZ)kpw*-PN(4Lh4RP&E)6XMo*A19qcAuG{4AH| z6Ia-Dr4cm&I&LF3onH8zh96Us$75k(?d@pqS8l@I^VozF%{cr2CX1DC{Ne3L+1fTy zPXfc28E2QgFRdrtLoj7Ic;B}ln#`*j(=Xki&DV;S;0Cjr1IqWIu6>*vpJbghNX-ZLEWe`i3zA(-PC^Nbb3i(f* zscq|i_3$o29j0`d^E;MME6$05{1X~S_MbQ}TH)krGH8#Q$%=KKGc7~-Gh-3@QDWS4 zehWwLrFr&+ANbOfkaaqWbyeVk5L3uqKYCRkT}8{IcEP+e8l!I7q;A!r-*UhSy4pH3 zj>OK9b=K_p8@&s0%b2_YVlT&!+88JaTD{8)z_Tx1={h8UJ6dijY^?&ot$j5J@Ln8| z;kO=J{fOSSGF?pC(ZM-&aPtn1LY;KM7g{D&u07P3Y-x&&(7VQ5yDmexw!Ilx{kdWK zdg@me5Mca@x_ovHVyYZEzG);G689~l$!J5`^4**@e*(U#HGhWd1Jd8&L)CiIJIvn; z!R}NKME14_ouD5uC^jrPcMfpX0sj>A8h}LvN5dIJ2Jqr&5%vxkPQg-%LH)Z-Nci-E zl{VsesS7emEC?-9G;@ji9AS{827TB%mfC^!JhX#EPdjRF21#nFj{e{PPjKd-Skxm^ zM;=>E+Y*cC;aQt;ZxP!|C2!@$f|6-Ode&N!1AOpT=BT4i^Gs1dly2dVrt}W?vWnsq z82Qo+iyOy{&A_=SMQNF~h|ci^kC&c;&t4_ExAzyu>81r)?;W?$IA`LRdw8V|M~6#C zEHfSqjz!br!N5lGpJ@7&f9AYs#iu8ZcBl#yi|U0Vj;}%ZZ({}e5l4iYJp?p$1w0?- z_*U8fg7NEuFdws~sNBVHpi$Y+5!+P4h>yZ#9+hhArkZFpo_^F1jHBi_&A=iwZPoMm zc!k{*(M8Lv(WPZEp$Ko)D-Gd2&a2Iy!i={SMLgXD{gq)_SPPhW^s}98Y$W0+W1J3i zkC6y`sPy3qoXk*r+E=8=1zg<0k~Oix742=nn$N8Q{`xD+1#(P#9}LQcE&fO104)5K zIJi=IX*2Aoy+LVgZG;nFPX90<&m{(y87@Cwn$M!yW3gpOptF@y*g1^$!C@z9yvL+p zm|ae79O|FLTd)hdjGNuI=`wC)QzPY9=0MvM`ibC{TE>nb6S-8Hg@>J5O|zSfju;x0 zb9kw*44OXwiQ&$w5!TWrnJyYH(D+O91rvi-D<{3NUB>2V&(2$$p?56~Wa1Q>YR2X( zcQnq8%}AhjBHQ+yiy7;p9uM|1t2T~gi;tqXsctMr?ZkaGb$uTi>QrG`d^OD8s8tT; zES0V|{l`0n9?GUgz*OVkAK!w5iSmU(Tt$?JSH4~N&F?fPPHVk$caN6BvQ@Np)0K2K)XYA=T# z7>()*k1u8bjDM{PLesmP=95PUISEmF)&YS=r>+!z?>cQN&q3F z-8>mLw(7vl{1&Hv!NBpBLJs%!!);@-I2(2k%+T3**`(m;G5Pu+^xR8RlLBO3zaR$| zy06TEPNDNFnLs7a6y7SAN~7qQ7A6t;gS6t5*FNo>fRR{Cgn#0=BQrQvhkWtH1Z_Rm zYv7M`^;zry_ST}-Vmke{-~)^pnK-JuX_?&GXqgfjF|yXbCNHL#r7G&7p&_Hz)cY61 zjJly}tcYMRDEa3|+w)uu2gNr*b%-ojrf%_X`j4DKH%+CJhn6Wu_o<=-&v>S|+~AYT zT0Woj5SI?(qT{|n@CMZ5gOL&OPB`Pay#LC8r^x=N~am&D4geGaVgDoIVH~MD+MhD)Mcgs zkZik=^o4;atpv7;w$fP`9TNMMen1V>o>{*fnqf50FZ9d^KmV=6$$qj+FOSj0X7b@H z?yScfBIq_?mPgpM#MX9?d=YU%+o9*0fpuve zv8RcA2^FYwdts3rS}$bX9n4dIli*;$>};hRpV*1?5Q+YQaawt&xOMzJrN9FFrF~r{ zcMI6@i(^hdohj#Mjs-tk_06Gi#=fzg_Rzr^=A3i^m$2HQrfmM*K}Lf;m1^Asv^&S&fbUz86Y<|@`wOY*KsE&0*|sz8av zy=gvt>dj>Si74}w*$0;(JOOV_;Le>+&C+wfjPv+~1J$DrV>nSSaB|=_TySDQEvm?i zgBi??;Z6UMQw*rNiN3?~Qwlu=Iz9auV>D0-V#sh0_@o#}K`L22h_zF0bwcP&ZDX z#4l&j8AT-dJi~TWqRr=7hY(-_(jVQu-!xQP1E@d!p^Mu9>dzd8u_i$MF%jzk^=F%W zFa&sT3?&|48IU}3Hn4e=Zh-WtVdj+dQEDYKPCdcGQ*W_?sYie6^}hg7pQmf69EYeI zBS7M}F4YkK0Fuu$3En5xd>-+r&5wjff2sxu`iaxhN9!3HWi$cQAKBthDtpO`?6j8= zL63K<5(3;A1`>~Nh$D||4Qd`m8ywwhml;n+wWmfR-{=OGoO%kCOP%@d?mvU4-(sdi zjE{c3p|TSRerbAMffc{Bp~)0WuJj3b`mM0q5`r9tks}uUL1e>(PJeoXOBv|&2iP%3 zr$25`G<5nS(E}7utlR7(S8x+LUFZ&{wQVMQK1_-r|0YtlOguj1F9QR}REFkAEfYYC+ zApD-gyoIAUdcwe;r*d2Y6c_psYYrs&BkQPqIMVzP|KCcqh_PZrubk08X+U?*2FA(q zoW#Uhsk6{I>-Cy?1v%?jZXZUOZO#9C`&B5Xd_4aIu1ovWz6;Bl-n%t{S zw7ECU>25=59CT1ZsCyS$p4P=yY7Bza%Z7>7wo$ZpVVu8vOYaOlwBE6Qg7b!`-+86; zDdKEs=K3GJgKZW=xBQ-3M1Js{d2+jmR z{ehdEMT*Mv)CR}~&7)7HkCXs)(%-)sKs_fAH9ph2tEUeZ_a#dKQ&W19;fN(I)AhVlR6}PH zv8&tH_;7goQzsyc#OF#)_Y0oRTpgb7^&&i-w0;4@u%{qA-Rntsy0o4m7VvcIEjT7* z^c8nWQXpigkuvUds&>J_7{J94ov!myA^1S2oA~|y&Cuy4a1EVqi@>nxM$@sp`b!`K zi~gq^cQpf@9!m-Ss8~vXr)$lKrv;Qe>JFcmwoNZKINeR$(ku4pmi(0&3-_&vPWRPC zH<|P=z12jg`_!hJOs0OLYab27SDk|aG7{SQ4TJMf<2O0@~7fZW!Q76 zBxeygy2-ALPrrS`TMWRbTklz(d7LrZW1LZ~7-!7(JkHMXQFQ_N7dBo(FCVc6BzU^e zIs^oMhX9B9MCAJmo-SL0UBJ;rcC~<7GrbK>Yn-O`$gj-l>h(2v`qL&L9ae_e6o-|n z+LTy{b2Zxm2#^4E($rIQD@!TbdeeF|N?#~QJrV$=E=6v|%;Wq{T0bDCKennYQ*a!m z{`89bTSTdgN;i2YYV(WX*!@k#P&tW~>iz!h#Q|IBsB6^gNQAmHyzwFr5bEAlM4QVTn3;U2sT$+a z=i0wArvt}Le7ej`gC&~ELK3J5pW8&I>(N4m zB+%)kIU~v|1<>i917YAYTfWcviBm- z7-E~~HpEsh4zW#jA7e1`kU~QKlR8R7rRj;SFyWlbTmC>6F}jdszzAHr?Y8}PiN<8 z9)+F5BLng2uCmZelvH}+(<24&=|NL|r!N*eI8u~X89<}wFN~v43MDi;HS!l{;RXuv z>D193pB@^x;nPh6_hI~*##!R~x1TvLdaR63XOAX)x}7BqQ7ttG#(hx$(|t-4eJ2agwqS~R()Yt}kD$}~agM+fJu zig$a1gD5-(PuGQr3k8iUdD;yZ)p330y5X2B+nX`*CP89UyF%#Fft5}{U;uT}T6ZASJq59+rXv_cUFvWgtUC21rKTJQpv%wTyQiLOKz5sRvRh*}dyT{!_!zmxGn78~YmF{~4peP96xYSG~4I=i2m>4`YZ z4oH7mV}P0948Yt8QD@5>qRy_P0N>FS22poyiV*d5)*wVZrzkDcfT-s$XixDJfT(A> zxAzz1$fH2m%Lqv4N#Q3BAnCwN@$BFb^>i{IMBPsYHi-X3_fP*I7%y_v3{YoxCV;vg zZ+r#z0>NzS&yP2TX|~geqSMXnZs>H zj_F^GXPrSg*HVEY8T}vwj;<8m)O8M{K>(h9X}i9r@bt7A2~YRsYR)GtW^V#kdv284 z*}k$s0OKcYI=A=0rfc&n0BX*Wg5Ac`Ay5H|Q0>1sFkOvbs=or5uDZY8@BuL0=wx`1as3M(Zjlx8{nHJxdX{WV7eVZ40NtlG&mydYp_p#We(Il1E$lSIo#kj?KU8B z>1GceZg8VUM-+O}oSdUw8>sW28OcrM3|B&Y%V7hX2R|POVR3!k@O}Wx99?Vx$ zx8C$0IYlRe^uTist6u=qZK60ZU3){JYc{v6GqLGBjc69;d|9X^!RbDmq4IBD z92@Bb@Rz{p+(tzQm^{G~oh}xjLD8dUW!cAcEX=Oe?FtLg z>7IhUFj!0JuFpGk3vAZ)tgE`@#$`=GI+W$di^kXdhF1Er`v|kQQIwT@o)N% zoZ@^K65T9c37d|2lA!6*6}pOTX0g?Trl+F}u<4ekVbenk0X9ABDZr*j3SiSC2V&Dx z833pI>8P1acH(Slv>aGagmHW}JA)?`VAFjv6Pr$@7m@;Nv{zhEBsSeAb2Afrv*C6Q zr|uh@P9Nrv#Gu30z_l-i>TQcUxiet#;|H!MOv7rqjgZiE-%W{cb=gd4da_&+nx0aa zl>pidpy{^Ze0OYm6rrs$Qz@b8wqt#FXgU)FGTpKaXu7%g4VvyQGeXmaMwJJ^Puy7v zO!pmYn#m!yGyv0MPXjPr3jhGNvjT3=1s*%pK(h~;V&n8gly(QE`)H2+rT`hY9qmQ_ zk$;~kAklsPoMMff0w%gl6O>C(x^IeZZqx-Bpmeu%0hIoFVFZf+Q$i&+Xa` zv{&G*Uk9b@dLqKwj#SDqPn~x_>GpbY%*AJj+BZi}|94VT z-*pbHG4_q^ug9FKZoeTW-L@d_56U#dq=!|>FzJzkCQj-AhDoQS{vMe0D1&XICCf1B z5cal)n3KI$OnOQHOuCeyH_?en zPu4c#uw8p1>)gB!YhkqO zln0)8Q&FL}i9?Wkd}SfKJ!22+?S*^jZ?B+52e0Q2i3X)5qsf%jIJWjpdn}3N+a5t1 z<+9tem*eHjdUM!@_{!SpIa^nF;n7=Gzv$7Qdi|H4u-Hq@BM~pW?gyA24`+Qliw~$+ z2<*BHt?;kBrJi&2hLs*YW;Kjn{i)|OF8j8y^H!f; zM*NXEco9YDo?fcm&)~z=6-xExOvXjS(@Oi{qoaJ+ZI{R6m*VA?T^MlDQruIz-;Tf3 z!R;h}ifK1qRl7$3c?xLv;&-Yui709EfpPde(FU+yBG|}VoVyj?k8XV6Z&!PoL=SXY z!_z$?xXuIwoM(h^ZKWJwA_aOu=#sh#j*9Q!q9YMfJUZHnbb7)o@^5!a?&0AMG?3cm z@ESJWpIL_yf%yd9I(*#1`+A9P&+(E++ScLw7>MkUXvTF9j>UCP96g#wo@|PhinePO zs1^gPd#xFO-P`4X-4lml-0u+ZiG<+P@)=1kX_5F9jc`ZRLW_ErcfOG<(P(6hhCM^w z^?fp@W8xTxkBjfYi?a}__ruK?latRcNg0Q+T;xf?-Fd4OZ>aBv*f8cIh`G$k&UmM` zc3SaJ+IUq_X68sQLGJqCd%mA6-E<;UMC!`F^1#rNy*jRGXAa*65gK>=@Dl1exRi~E z8@$FD2cUG7geIN+i9bi)yMF1|$BVQQT%C z5j#uMgTaS-Uqru+wvI{zQd2sjJhQ^C`4ECL^3kJb38JCa1g@Yv$Qs_Ot#skpy?}GtL72(y+Iz9KXDL+AHsBJMgd|Ej5|&i z$A4p4R(lD+x_Ngvp=503{V`dlcmhJ7t9Cj~7U$sEYFWs5%}=-JOY@SvKogFYaTs1i zo2i5KH%pZ zib7mwV~_#OZ!rh~9w^$2k4W%M#=RQD15x!@;~i4SEA0sm!eLkja=UbXL{P@dX%JG- zExcR!KCF`mGxOhMM>rnjY3kE!&bbm_2SLo!j3=U+0D`xwBuBg?u|HX*Qr~^gX7MS?z4*FpSNXVj4O+=Gq4=|SI{C3y@9>#6 zd-i!BzSCyoVrnIyT67w3qv{u?cy3%EO`HXJ;WQq=75cq4?G;{Iy{?&7R$@@IVhFd( znfd3*0M8T#hc9m1li3?)@Ra}lOd;bgeR#5r8X2eBiO|0((Dpn}RmZ&!{${l_BE8V# ztwszK?fLT&;m34nW=je7^pGd|{bsqGtrnbZR!Lj7(TvFlggixuHi@`vv0@mI>@uFu_UdVuySyd-OEv}uTiy?_8-Df` z5v3aAD)#E~)37Ba(}C8bGa7T_QZEP%wH_#`MneVV(glaR{)aS?O0X=DIx|>||85Z}wId26MNP^B?HIn}9Q5Fmg?lj4CQ|&! z9K~r}nh!Zhd~IzfUy2YULp3p38U6WSR@9pN-bTmQuXFeuMR54GqR@!!ga<&qVHV$0 zH!?e$7IsdG^`vSBo=C9QIDOD9#hiRX0&h;r_>2e%!iMb#ED{YxEfQ_7j0OkqH)b01 zpFu?ZJx4EtuS^E5hVDOdiphP8d0u53+bt*J_Juwz#5X0}w8uUgPq!9rxbcb4Jr>`( zv=kP9xMR@AWN67@=ik9ox1b&irpd!GRmH<;d-K~lc#J^v93K|#ODpyK)ctJO*{)z& zR9Gq|{TP|26@TA+1p*OTR3O&k1*$-_M>9A&n-(p;tr>I!f-N|+BR*l`R2STZF;R5; z+cUq2rg@n1&SktA`jZE>z4;=K#THb~o+-s)^hy&9=i!s^+jp?S_(Lq?@Kq(A>SfPO zF|@f0kBHsFjof0(YX5njdIF6~*gNyGhjm87Qw7;k_}?ZpR0W24ogtEyLD- zX+Ftp;pr}iMln+kG);FK@)t5)v^tlLTC7lWQ>YkEG(V$?-%Sd6;M;RD2o zQFrNsaYl?foxU}PoKud6Hf0I~U^ki*Jbe+IR^BNzNL_G#JxJaC#saQ0NL}JEUYWM; z{1azVn_TtHQFB~;!)-<8*r>j(XrCR-TZ;IT9_Pe@ZCFhfj1BEuIR&G#Qg+JBFC%Xw zr>tB68wL@j3kRoTMyP`XI7x^>N=(o43*BQ;Sw}}Dbg221v<@U_)W9AXg=Cdh)`&~0 z{Zez}(#v7cTTj6N;XllHP=EimG4KHf6XJifNcbtVyXEKpt-mB9-ye~XPoi6VZLF#mI z_hv!rbe@(7L1$|@g3$TQ&h!~Se*uo}{x2HUjurF@Qg?fX4|%wG^SC1iCbrW#0cqcq zAXO`T<5GIBTotfyiX#;>4))EU&A#az*f&pqDDGk4lnfWQF&H>cZ;T7hjqawb$+s$% zIzj6f$9G>%F&LEJa=7Y(#bxJG9SBcI1E=>4Eu2AziBm$VmFj7JBo0lS2S@}rah}Fd znr`Ae=5eKo^9ZUt_rH&j**Kl!M$X{C$|+4zJ&{&UYnmH5C4wAIC)lKg}YBGibAMW=?;7f#oao3|sE24A?k>rj0Wg zuyICb!^Y_o(QTZ2v(`mPHI>&9C!J+!>G;Ewgt0^Itr&)4s0Z+PoOgR>4wv+mSIZ-UZ z_Q#V|B1~@ou1%XU&PrI%C##@~Xcazl;Z<^u+1~sUs?MI{gMMWV+yr?nFgeYG-fUB) zZ`Y^D&-%qfuQpSRjTvq^jE%iG$`I7phubKHG#H9@i_;+p8(u)8mD7ZSXTS$f+{o$D z*Xm%?&FW|iH(Jpc7}rv?>7Msi)0#0W=V_JV+`HOk@2{IVW#X@wnNzA>lBrGP7#{P5 zo%7f$uWsk`ba zrBi0c({lIQ0Qo9*j#)aLLrdqe_cUqg^oF^mQ?}HdES<7>jb!Om1?FYx^kKIYHeab1 z$^bPUo>C80Nz+kLyvvhhHv~&h-md@Zz?p|g?98^Cz z72VS5dkZa{y3lkpX>2K9Npnl*sfQugnWFA&Jyjad?zknS@_i#(I>iW)44qDzozoaJ zb4rFS%#QcJhv&oSd^U@AP8l8qQC2(V@rR3P=Zqpo~zf zIYlMn$#N((jCvXGS9O(6@680A1fs>0hndr*gyqorF0Pw7LkzPPHtnpIwt}M_&EmaV zis!?PoW5|($SLdK8LzH(f%`IY-jiU#BSs80eh+>F&9_kFt={8ieW9E^%>h{oj`@6qWszjk`VKXzd>nXnA zuX06jrGB`KhCa1^P&E2X-4IC*$xVUBZm4ppd8Tfta!KHI{u*)xx20~-B(NpXek_@s z+zmg~^_TP)x!3Br5IwESRihVRn;`%C@!!5RxxLs0Y|bd&O(y?whD?eMU|%^8k1fLo`w^yg|47^7=Kz6}${}U%VKH zXf*#u?OCsU)nvAE*5A~wee=>6Qj1x_;ucDcjb99B3 z9^GX%^d5b8ct-WN$`J65>Q5ZikD90q29CKys%5MUq z-A>8}#U5a10-1^qbZ*i|4{tN*PSsi~RPI$`H(4Hsn|LM-oE;qaAeyWm?E%30FG&Qa z!TK-fp*pL`%qA$?u^qIpjTiyq*JfAXcRdBV0nqm7C&QRWPXY@cJ?TU*Chq@Ez9uSX61!5YO%R-am7W~(s{tjNu>Rl}tUqzo`w)3rQ&_6O z`n_6&^?R)e>-Tm!tUqxG;%{OvUi-xB zL+yW@M90)I4$Li=rndq6=cOB8N+Ygc%fJ(FitBH(>S0dUn4NrM+<^Ttoo&7!-n-!X zxs!7iA5xv1g>NFO?L+$E!;BA2t_saST&1r33$XsChqCF)dFDVfZhDXlu#wW|xcaCQ z+Nugy?VV92%i}${^ zB7-Kjzlp8!R9D7jd_)5><++LdW(T@o=YWk);gU2BD&w|OnkpL%JKb)W17~% zQi}k--{~}EoTH`yUC<-&{g);T*zo;We@tYX>H>8*v38_+ z=_yK`mK{EDcqMh+1L>lNG2MUC5%D!=UI_ozL=o>F;RCyz0Wk?5%%yoF2R^Xd;Nx!E zjTTFI7rJR5Y4NP?l$|@%^nnG3VsYASGc_+>dhjkEePEXpFkNKH22&G}O3k3<3#+!J zSoT^jb6A6JI9h`)$8I31t`S`W2Unuq33hc0Lh8*4792RiE_ltrKm-s=>~go`s)ilWGP*bxARqoy1^0+H&|k*8!UDAfj($+ z(cECl!B(T2_oaDV5>751!d9J@F9t86Sqh0tvpi3o1c!G`F+0bE+X`;5CO3msPk{ctd`6M>|V6EAe zF&i0EHsJ^h+8klQF-KV9EC>##^#pS1MNf#Y(ao2;xrkj~t*pdx@6CqNcOG|BX^I0- zv`K|S+Zp{}mk}^CE#b6`y}C4waZx4b&^wd9DNq7EPgT>c3g)EJTBoa*(QG(~E=}FZ zTu4nG0jn#gD464(!-G91%2>oi@oXUUQ&Yb<9paGqOC0V(KzI(7eN9(b2w|&*O*yNj zE#7E{h`gCn*mKcvg~hs|E9^43RYqsK1pZ}Ln94R>bfGH@`$-`Fv88>OCrlR;Zc5P; zh84~mMOg88CXAl2pv@DOIMf5ibnF9U#Qr3%_wa*5h^(5Yv2!G)TUU5S{CllE!K59| zGT0CjX7;@uK`bJa>gX7Fxe`r3*i~-k=kf$U5<|UUO#>PP-d~4jQ9K_PeRwNZ939$< zT~p8d*!U854!vN(fpiA2)}mN@DId(oKui=H|9z@iNJz!FU#SmI1tW-$(LfQXYz70PEDndcOLU$mUS2?lk^%cJI$9-q8iNX)nFNI8FnNo~++RufvKBVstd_QTqaC9&PfJm- zf5HP6>xLdMwLX~%g zTR4HhZ}PZdz*L$%jk%Z8lHM+2;%7eWP7S0Nd#|3VSTB4E-m|wDJ`gm$9GW``@NeC0 zW2OsSPI}V*3mp>|F}2JddQy|eJr^}Gw9w4cR8XXePk{He2cF@y_6ct`c?#}twAb|q z53on4Jlxi)VG0d2nC{+*Cb~a3K9-_`CcGgz0p|aS{Nwez?h_;p*`FD0yna`S9V9n( zi47UozAw$lI0oy#oXvY@9d`ReqZDBM(G3Rc*Pg<*q36s?6Bh+o|D_G+K#;!9*kHr} zyg)<0gibVoEcpZDwDL}&sQ%#mI;vkMi3Pe*RDa?S;;oGv<7ZCIsQ$!JGhBSb4WvK3 zt#7D)<;6)U}%3as9f;(#@|+htXwlk?rR6cT7K%$7<}qBRq-I zRtwtkI5XV8PxHN3x59&Wmx1d~Bys)0@e!51@}C$zkp4f@f8-R3K6ufJ>wj@}&nc+e zCYoE7=qOotmA4@>u3t~2PvH9Xz`C~M`n@k4*RS2RrsMiAz35;ST)!^n0PRy`so@nI zpW2xo4+>0}r)^{w3;v?Mq*X6oy^5wxVqW4k*CEzy>r2wI{IIl1p`aLkrz z3^!#u1C~r7dju_sX1OI(9&uX{w4})svnfc4_S_S+e!&s96pc`2?q2$$dJbBmGh)Pr zx@aaXnL(Q+Gjsau3#?novF4y9sSH>$gQg`j7_ekUU&E5=lh7@hy+sHT-7=enAlYmN z11h*Bv$uyQex|6076Mo@Wd`gNv_u(C1TAUu1o(=eC5fgbGZ?UBN(sd+i>;fxB=tR; zMN6iPjz=lEW7&zXq#@Jh4}TurBc5pW1|wsb9aEk?Z6l3~nV@LLblUBh&T%_taHuIe z4LfF6Y(id}X0El>%edyQ3r|K;aXV&rkBOy-uqP@HnsJv^&+QbDE)Ah#E$~HS zX3S2IZ}hZ_-e0$3_Rgy`ZpG}4hfvzmdV^b-R?OZArg1B#ti2IAiQJ#c9R#j-eGZ zXtQFvI#C5Zz&rW_^ho|zst?*NUA=GT@_NAqhtX0l_(==c(Lj@dDtLpx^g#G})Y z=?!y3W=FJV*Y-Ld6Lvdg$BR(OlIer)DJs$X&<16|P6m|gq^QY~=?$eNGibA91_zeR zOxyg|lbl;Jy$o71gEmWMaA3*wJZZ`FiRhM0SyU^~{5oVi;+81=yiA$BGB~rRsM$KI zlVIk!C2CJt$&@K{4>*6K&6MdJnldF%cBU$y^3=>v-Oq*{Q!Qw3g{iXRx!W*h#w5b; zoe&_JGJ9vV7Pn>gL9DZl&M5R0!j>7d*)pBuw#?x0DC%_K4*0W)t&jThW{9Y-$(AV_ zb${71b#s_Gg+)N3U>Fv((vPNNIu;OR@a_xGaJnz|cdfRE8=Y*KeZ!Ne=cyLWsDxP? zr6D_j@X>TTn~LrFWzpyvK60p#N z2ZWSk=VtBHZFj9UbbhDNej}kOOZzvkZvk?sHGp<%G=mg5B(a;r+EdWCoaj^DU*JIw zOCe9-;np8c5d%TMP2ts^+u^fQ!-e<0*%#%sXmAjRqxQwSFH{fLaJRSa8*&l~{Zgv7 zmWS$;S?mBD9-EEE3gQQw(vv;t9H3D>OQKPw&D?ypD~<>`(&W)cdc0&KF>>=^7iaJQ>Yp!t z53R}jjJ^A)>L|u#?po6dnG>5E8$nuUO2<~=DTrfmnsYC{FuaAOuqC4Rkz>LunO6W@ z3}2Z81ail7dZEwT3ULgxuMwM8j<&$8J9NB+I&U0W9(KCn??F`8nSkk^+l`y z2e%whi9}aZw#lJF^Myi7U?7{kcsW|885GnYlHEc@rUYkXn#S7r;t)V(Dee%il61Yp zo8iz%bTTspvV;xeio<3T_Vf9Q#PvfDw6Sjsz+Ih^5NK;JI zl2Z)784cQITzpYKdrm;l$>y2gXSrQeaSnVdUzwvAXdx{so(|=H#huqIxG-!=SuHu^ zws}rm!*UKWxM|M5QMvjY?}wT_mKtK^A@*5as$F`2#!frTga$i}^m$`oR9qt%W{{vU zC}_J@;~eZ3Ux{OSLSyiSrEXoNA4Vv#Ey^r;Y6R6vB8CZ$p5BOMhg0D|d$AO+*eyyk zC<=E?y8{Z2(rx4-8NR{ou)(31Kr`*+9NlUcp2C9F1|7d4*^+`nYH>9%lb> z3-f3edbzUm7}<7f5Z0zI{t}5GaI=%QDUgEF~asuRp6KjaPB0JtwaxkWqsY!!TuV`bJN_Qvq14<4{;O+*vBlLAu z76CW4bko>r3YvYdG5i+DBTr*|N{Z3a2p%UI~$f(>Au4lOz`wME;-3WmX()Z_o zKv6CsM^zCnep6gY-i?57c*rXcJoz??ghs&qlWD(5mJI;5uRda45PdWzj&*-bDL&-5pcAp_DMw+;z`{s7o5h+ zs8R?_KU@y=NxQf;!7NeIY6}R5p0^+!CVUwU=7c;CiUZ0ept_{`xm+RACg zIWM}lOmE(P${fqnXo@~#sI^h&zQs*$*gadsYSy{m2)I7J&oqmx0wbKP4vTzOxn}!x zT4z7QX?u#vGPUBmI(qf4(J%Nmj&W#Tz4o%7*n1`YW_%Az zArA_)l!2X*eV39KLc0fIYw|#7+(8QR;jzRRvgy~4__}Y;zw=r*j$86FWP-&Fvja4Z zCZSDePD*;amSzbiUs1@i=<^)gmp!Tp|y2rkDECNDvqzuMoF%g*oWO^P(}t{VOH#dm;wpP0*Pg{_=>Z z-&B%e*tGO-zDM{gYQbQb;5F&6a}JMqqS?(XBxGT~_D_p^VB&TX319+x@!_!8Y1VnC z*o=5g1#ujyX-SpGJa%JDVmb~0a! zEU$z-6hSo8DSvFc^RF989uT^lWdSY<^RW^wS8%&6QE)bFzm^02kW$9eeH!T(PkQY@ zdw=Hey}q|hfzPxLJ4gNyj+t9UG4xo%{(2bs; z;9$cFy08qQE!`_Id-r)SVs^^LP(K`JY+}$NxGg|`ldhIe3Ek2=hCt~G8Dx=@W?ic#ZiY!omM zD2((+6-9~|1Xxr27pR=XUrl=?gJ&&i)ef3{m!65$;fRY2I(n!1j!N+YXC|&f_>5re z7oS5=PgGbuI5W-7=vb0Q&mf+My{%KYp>P(ts^xQnx_}Jeldc&|yr`Y78TfEmib7k& z&>#f2Z|zNLL%aD&3P2h?I8k}fB8^5+8#|b#h$NDM-KNy#=sszTPc%0{P?o~l#mi-rrzo-F zApK^55e4{9JLK4AWsSm?s@>2%1Ph#l)6Q86$ciki&U<=HZ%*OO(5-qKO@{)}t*3f} zy^)}`8)##)6qC;ea;FlMen5id12Ms$Xq8-1Jig^7`j|>(9K2Sl8MKvls`)s?lmct= z3TW(9lU6KDDLsbIRp}3T7;+Mx5P;VT5uFdu`(gpxizHA!vk2Rd7t(s6YC z|0sKN>`Zc=Y1FS(Xazc)hxN$#enaK zI|kpeW$z)a5l<0oo|_x5gW!EU_t`PKoAeh8CMhbW>AWHmt(pI(I?(QCI1?23Wyheo z#_DKOI&QYIrVF7q_7jQ}{N3(~IPt~Jcf4+u0gnUrX+W!GcURD|xcR!Gdy4)Y$v%1D z>xc7sKUa46`nIX+(^u5DZOcvbBRlCA-dA|7uX!A&J?kUYN_2S{_UUMcuOO~Elc#8H zyX*=h=i4}Cr=FM@x}(p_9{F6>S_dY>q|I+TC!*DUlkHM~=W3*szrsOqZ{vIm2fGF* zvd}jyui&78+WUSc3H8LcSDz9|Frq~ zFxRm}6CMnXp5ao##pT#Rs{q2coqrR6f0*;^VY* zsp~ibJi6D0tbPQVfEYS$K44#I_5iA~0(*q-f*bR;_ z)_*48A1Q!X%f|UOPD1MXg567ZMX;@N+k*5Nd( zb`~g%nr9%0tQgoDOy5X7&*=J0Ds(5Q0C$Gn%u+p}pn~>TC>f-KoAL;P&I29ms*K!j$6WW3GSfYD#+luIRQ%QYY@yU|~NUL5TQPfqwl$!@%8rHO^UUybuSx#uFZ zf*#<1O=2F-P=OgC*m-eZgDA^}f^x!fp3==^iFgWSCv{JL#w`)SXIH<`7V= zpDrwD1&?jf3S|t;!gj@r$sC@7CjJ}@yX|*nc*SA6u_A$hzoz}8fV8&-{^UzG+HCTb z_5!ehArs7z)Xu+M10*hjt?V!@#o*5&rqCvpLQO{xr2 z7%YS@U7tpK0OaAq0+vf^K!Y$6>BhLhF%W7uI1^3Y?%2m|y|yKsRbt~CaHBU)#EZbl zotsNA4TpKZ>_XJbad%rVu4j`C0W?Wp1{a9~jQ&aoUMfM_Di~1h4L*CFW8LsG6iz(r zA~F5!RB>?EPTY(Xn8oT0a61HM0`ws;3s?g4eLc$v*;8N^IQ}g#i~c`(5bp_f9pzyH z5Fs&3D9v0#f^EW!M5dJw`;eFyOmQeNui?@Eb+tL|60>tmVqV?jy6SaDC?P~<2c#e} zFUIA9$jmmo$Si+&iOhppxgmXUq$n~E3qKMfv$%eKgviX#2-m?-n4e0$T>O; zGa(p{?P=cPsK}~Z>H38~tcuRF2+k954JBtT49dkKE%c8pIn!+4 zOEgc5ICv$$Bxl)Ct>sC*fHO^U4w{m)b0|3vK|fJyGY$k+hQ>%P|y6;r^R=N)yE+3z75jT%nHpu17;sZ1rO zTCyWP#ZWfOZVZ}cz0QHDkXHb^Uin0FEYnZG>mOI-k<@$8TI%Y$$e`(#z580`9xoyG zqWO|Nz!hlO>tpGby*}8VB70+%7?>6tmJr$unjQo-4_Xe@ccQ{_WJ|r$UC&<64XhUf$u5TQ#ISkI+ z-$T?97QR8l!q*wF@bwDt`Z&a2Y2quB97(w)?^tQBz5T6?uLz0sgEAXm=fK8S#LATp z`3(@uZG2^AoDVn9-3L#0C{ksDd(b-k`&B~PeNzoGxCB4U#8<|GH;u^br*?mloRMfZ z@pTUDXS@cO_{ul-%kJcq?q{2>y92cBY$1Xo*8G0yS)64K(rPSh|I; z54KzQ?sI)G%)(dJ^GNne^4XenhO$*_M7Pm~p&`79H&SH6!q;iH@C{Bw37b<&bcg06 z6cX7682HMjP4S?0hrOez$R69T63C4J6JObLGpv*HguujC_TWOJ=1#Pm_y)&Je7y#U zgvZ{jwC|M}9)X?8;9mgEKMZ^i)I07PeA;=r2A^J%Yw+pyhimZZExQH_nO%c}rfaZs z+%?!au&xk#!gN4xbD`hn8Qu&$RHc#GHP}1huED~|uED46mus-lFW2DH*2^_m=!-N3ZAc9}+8hjl2 zV2PDogN1y%2A_FeuE9cQ*I=jJH8?ov!;EaPD!9nq_Fj_WOq^VU&zvvU;G|;O+e380@trg3OSvm_f%}oT z20QJp!On5l;NX}^sLx@(R#G=;{w7mck}x0#?nwTudO`yYh%^0ya~iHHNM8&0Mt|x5gtNADUUci3rbL%H ztdq1If6kzLu$?%u(&MP|z-_RF_DU&wPVr6eg^-O6O5C!Zc0C?KRGXdR(~XNVCB99vobzEj+t%{led_VR_`xLqXFs z*g5VQ>>SvlOO-Ps1I6lyW2D3K1LsU;y!9ah#!k#@K-p9{A-+1k*rndXK_3q~RNAMc2e++R6jR@ni5#EiBnQ$LqW1aTiI0xNj4IB-ABgTuZ;D|2EaK-UvH)2Kv&N-=sxL~hT z!G^tId}1$HdZ7_}+hxf{I_=$X4m!#jI1v0s4An*)lb98@GtWw^P%!zdv|94yjaIgW zF2Jm`0z+Q^R4d5PfyT6g{2XX((CkidtixUd2E@PNL*}i(ph_!ejY0Q*__Q>^7H=*A z_dnJkHh$yvjYjJNw4z!3Ja47b-Vf)Xr>ub^!EeM^Rai9mw0Jwyv}n$X|NHa&Oatt% z+oz>esOM-DHFCZmj;QFia4djZm4`)@BI8(vRj$_ONL^R_rKfVb#vxjF!+n9AT}Cy- zcm8S@%T5|K@3Na6^ZfWOr&?e=Ht^vL6Ajxers+r=IrVD#Rg?G`V#wh&HwhggFJu3D zlMpE~xZXl?q8I#C^prKnXz=SkU~FKF>CbWh&DHcwtiq$~&SGhM9)_fWBSS~4+B{4R zs;y(ZWuZUq?VmmkO($lVseKgz;z+%>+Z9gEGc+1hB!2Y_pE}-0#m^8cBoQCq#iApA zvwaUk;}ksImQa^+wg+b-377wo3fdq?n}ne8XbaO#HOh|CAvL2i|G-x7ovA4)GKH=>&PW6E`ZSE z`anJOwD6=HO65F9A%{A?>2x#I`Tu)x`}-p2-qhYSrX{E+5vRzyvqw8jA{1%9(tj?pQr`FUqf*)Q|ja=!zMb7ETqo{Z(p1wYjg zC-%=!jR+@H7bh;KqtIHFGuLWRB;gq+)#Q@?%FAZh^XLEnbbglKw9zih)Om?BZSPl0 zhf^%+*+W|vr((&$qV-v}Nmg}QH^o)4%u9$Y((M~-+3}z&%kq=y zXdK0dWQv-OU$d2Fc>sd$h%X(SpV@r`92>Xs$6KjndE_aJKL_htJq1E z6H=ue$|6_Kbkgz*Yj-N4IAPQvk(=!>wlCacZ-t8$Y9pg6K zX^-h*0`t>k%Rwtg=&|Gf=wn$%@=WW)d5t{hrt`jVj!MW*N|a73uP1ElCa+nK9(wri z4R(~pto!4dGhu1R_RlqEBhdN_%r;9L^BR^Kj?V2?z@xNfK&P$-6_@1Q_u+lCHU!zZ zzsL~ZicG0|BI@SL4!$Zcwtq=iy=wnWC92BDUZcDhYg(IidV9_EM>tiR(Ch%O!`g3l zDn?3qQBSt``?gpGs8DD9H2dJh4=mPzv}j11O+h7-Xkv)d*L0=9X)3VjH>!=H-fE{{ z7GuoOtA_o5HjXigP+#R8p^q6Q^Ey&S(@PtZ{IsxPh4O=6e;PJBC#GS^YMbke9)@3& zqoSm}ErX*+e4_Qi(d2-sJ$9rrwr|)b=jWU*yf)b;D}-73fgEBzmk=*fo&ZX&?b4S1 zK%EHV6ICr*`Qm9ZsrtV3CXsOvg&=-%)C@DKG?_fw08NfI+ax%Z$D-Ru-)~Lsg%Pxl z!;n3eN;G@dc?}h>DE~%L?L<5TuDXbZ+)p|VKXno1Q;r8is-R=67msj1a3Ofwl4B#e zb)y@)vHDCU)Ye2R*wr@<2Tr%a^yka6`<^GPVe7w!c==b1{O zt>Zjfw)@2a*;;`-5VF+u8L-VyK$gPYnQpjiox=yd z%vxEvJ`1ArFzexHHcMQK7w?2UV&@UF4!7&4H0E*{H<%yH+u98NYEq9E#axq+c^U6r&mOf%F)e=H53 z)?mTl6!F@2nN^kT@lZWx)B;+Yh{^U6!z8!S>;^y0By-Wx`(jX_$etqJNoz!q$E-<$ zu>}ywWZg#Ub!&ah_4jGgrPF$@{+ml^YQLzm+Ro{P7uP^@ns@NdB>=S88K4&lNHx=Gkl52Fu8Ai0 zhS!_u&R3(HqvNaH;%_8&f2vXs#nc9qEKGD*{?1^>RVd!g?yed%WRcsPqf)Eg$&h94 z#_Pw0m*sM`?%GRe0&m$H;04b<;By8}#L2)K&b0++4{DqYdRMU#w&0?XwsUhgL`Ivb z#MUUBTEon{#zszmVU|BW*y+$+W-Vlov?j}R9vAQaW{wEiGEdFSR$dIf!A0c%!I>sD z*iS+p>jeW32SMeWBpr$6p8gWZt{{5& zDs3iK&|Q7m+6@Mm@{3;U=MTu)?*h-M`cK|407QPFw36l1mS00JPBC8y?Mwd;M=btC zK%D!{QG6|a!^@*hpmWRM4_$ZpvS`QN#ddV)MjdgK=+drsKzIqu2JJP`<6)&G*7iETt9@wS6Mx_GH^&4>ET0Zs!C0(oGAHj*~G^FeYr*-H2r2ow& zsy&wz{fzmK683Bi`tD3O^9$35r7j{9R_%2gGR{BtG=)^uw{=bzrYfmoEX=V-YqaFg z#X>#WMpg}rs)w7v0eU@|qEcsI7@De#Sl5Zxb)9|?oORwM&}iR3y2s)U+?G?qfy!2v zWp)Kz)&%r5eC^nft%g_C=FvLMw;DiYE2fYkP)Ry~%ETFV-cNO1=Z(|^|86G%l}%84 zy_0yQt&(9#ZPg4~eqrrSB^H24)^O~ebr3?#jfW$Z92z2#i8iFN$&}ko52!M6jxC-6 z8w0~CpI!j`NGB199Ppa zzcWCQO;iOpX#E9d+)G$US--pHwR?uZnXU*uGH{o=vUp$^NCU1+9KkDJq>4Dxa=;L< zOdlvFk&q@}nK;|dJy&5byBxSkiC8w#!q_P_?Yf-i&Tso&=T7fqAeIlqVkP+B3qa&) z62LR}Dqj$>Y@&$0Xp$bR!-6XSu}m}&%itJdsoy9V$f4hCn9CS>bgSW^V9HX5Bo~g7 z&W8n;5B?4xD~Buzy9Q(_Z^n_PM&PFU5s;28MCA+#7pRlGfsmu0PeZaOk~Z!q3A(~m#1cs5Z>o)A&N zvxsc87teD)ebET2=-EiyzquQ8;0eJJ)z#^{`tAwXvdM+I?`ydIwEZn^sage~=b*r}|viw+EhEt^Oc zCtypRy`Eu9J*nmgVN3187-`rsEr*j024Tx!ER&%Yo=XN>Mt=xf>LPtfdW)c=f|9yK zXNE0fuDyiCH*!gE4gj5%t(-t>DWRg1)`%bhTLwd6%SGeVN1P1CR9||W(yFA2`rY~*I`TDcD3gc%T!iYWfL)2XOgg`E(W_&n(dHb z5t4vgCfaWZ=O}Wib?(3swN-7sM;;wBaaOlX59Cre#C9?*DE@s{Na;W>H$d({E}wH% zZ$i$_25t`I5@aBk+o66Sm)kV~D$U$TmtrytYHBd@lULS^Rn5-MXo3x7^ma-8#sa$xs1cXYpB44fn4&;jYiml zi$>b!&D|ImR+cDX$rFiO#>OFX*$NUeror}e_l;bN|HFk^r|PRMIO>Dm#2>=U_B6}q zL&FSG&vWtcsIa|kQo3S<@QAGynlsvBJ{*g<>?O+0=7>tq={3qPiaE-0%T-l7qYXjn z{zLK5=8I9S#F71=-JmwW3;;+s>mcn4m9us(fleg)ynkR0+g_lV%Qv44;`frY@j7nT zKG8G?!*?2YposD;6x)vL;*s2z&jYcoBnMt~OACQ2sfn>uFD$T4JXLz<2eQ-4{B+3) zi_+lmKD)5bCUEh5wOpS_PqtBp1AsHNjA%mkswqU0! zvOw*;XQ##3Z*^FLG~$p|!W7{m?TKu-)X1>crvJLB2g6f8?gpDyDKC(`t_;0_usLeS zUO)$o)^!52Jr)>{@JMsr#SaQhPf&uJqjqc-to4q8uQbV+W=k3jePU__ZHLHid&3Qo zxjB46p^3iWWTlsxCHCOJd^IiGUmLVG@v$=9@RnOKbHvg7U=P8}a>`IkJn0WL!sNlS zOafV|o2WI+K5Z1%N0@;=oMn${FELHEyf{#n-q&i=9{^mlaF zf_f&vC0MjR9O@l$U5i(0y7z7aLhjHmaydeX(4(xU#|z140RlZHhc>N=bL={1m1fkc zAJy}KR;}Ku1t3mVy)FYNci1f&wI`}hR#P!({kW1DY)9c&MMKW94kW&yl{Xnzk!4hDJxD7lj{T+nchA%}OxcjiD$ zAP(3xuD5>FRC$&6lQn~Qr?#>IWe{iyy&(N%{ZeV)OF##dXrR2^Mtw{Gb;?n?&HTxM zhaMr<;OMhfI`&lBp%Lx+5m;Q~UiDrOY^<}H;B9Knhwd;VHDI{T0i$k0$#pJY!Zvn0 z_JEH6#XGEUMan_#j7$pJNU~Agl^CqgNKt|~Rn51nisuS&=qt4e^qrKvbxpVHH6Wx? zIRbdKO5)Dc9D~wG%MT2WOC_c^R|pd@8y^kgQfrpN7(ucB3O#e8CyWV#gFbBd+_h#G zu7zF6s}Ui`Tt2cuERLmDjfh54f6$;hX8}v52bDv0g+hfQx~_vAfyKABTTt6Lo7&Y# z{Q(D>1qPPCssqFuy7>pSd@+~;ptDTu4cR`?6E_4ngq*)K$M9XLb0#|sERKA3s83)V zE=yHvZUuo}^K^=FNJ5q$VE==R)h{k_wT<~};_i(TR4X;}BAl>enkrSF=wG(67oNK+ z9**tEz#W<16iCUjyXiY|D3Oc>p-3@qJ3Jtd_=%*gF!;;PoAu$4o%h0Mi1DVYh!V** z@u6WdDsNo-0iNl~P{Dt{zG#lm0l)?4TKosC!rrmPtp9sbiCq9n7zThuSQr?b zG|5s_=^G0DL>CsfHHa>3NRsAVX2)?}lF#?=N;28D3_HYErM>Gqjq`r4T*6W=5r>u` zC>YjrIY{TGMfjXud!;tYu~MD>`V#}4CW5`#-R?-e`yCgqNMlAYvQD_p^7Y_!fr7v} zhDLs8j$wa7+o58XExtVb5V26Yamon9>M&gN+m5Lii6qwHDEqHiN1dUjO$?IH~QIaFa)nnv9rH%(Y8|k+BP|%iB)G$B`WnmR)d5{C?OiiFT@57icUHH+aou% z(98#I5Mz)UBZ5CyV*#0E`9L2odCD*R(QZa>(!>oFnXDvEHLb>Dl@_}|; z)!{*x3(K3}Xry#bssgBbYl&@NcN;(Se;wi=4|(A;Vi&Rm^f))GLM4DlyQxGia1t@x zq*Z;hP$tNe0wWL!l+l3u&f&B+`q~f3xF|rhNUa2#*x9^v{EaxN4c)hJCTuviP10|q z1WmMPGT29^@zQ&w!jVr5i}IeXQj298C+{upIj4Y@%N5+_LSa@lixb63WR=~IaMvK}fu9T@iAV{)d9VM|m+ejtGFo_jk7#7eN z?^^jmzfjj)o5yZ(uxY>LbfGRgIGTGyYv?uI(W9A}iuf?wFpL3PSc4)ZX8fA*Xl#af z}CxQ{{gH8T1&>_u?t#%aR5?X1fY>JWxwkvNnOD>@nO`QJ0=SrM?O)xTvhEawvB#Dk5EXXv_WaV= ztmnhuJ+gIr1iQd?v`94tQ=H`YpeJmIf@8OF(55faj9MQ_J)qk=*>&im!lAZyYLVM{ z=ypB11Y~BfVI~a)_bZed^1j!65;wJRTHfn;8#UymK|jBZ)3=|>I*>Cxre)LH`>z7s z(}gzUdX)WDae=DzH1OUsT7S_n87R>&o{ad0yu{iE-+;Oj2P{@p578RJUBd*%$u=x@ zZE)(fEiCb{SBN4VFQZ!d10+eIHI>96Ki4lr?bUwWkF&uf3$Spu%B*8MpOv_EgRYRH54Mal zzKy{UGJ1=h0hc+Pn`fK%7h_4a##bM&7<1v((_YWfdk{aV;JMuGIqW6SFZzdd(coBp z*NR_R|8A`>ot){0@=n<`s>3kNKKEY4RqLYQ)SET`-Wn|5J1>v7Zk<<$veqmRoZdY> zb?;c>jwXR~dyBuz6_swLQ{bNGcb{SG-W`Nf=LMVSWl__EW4<6w@nLFJUY(f!|o*Zd8LV#374jOVK`0;a0W@WslCK*3=c#!FI zEu7;`Xn{ed(_c0;W#kg*7TmvNv8ST^>20K&t(g9$4(R=5 z!-oBC)PPoZB!~$uzqBg6#&jwQWVO1yo20Sq#!e+Hi9ww7qGJkUMjd-7k*c{TeBd7^!mCq66>eFh8lwmwo^w6j9uuC^$RPL`y>G0dZn`*Ng|k)~o?qi4o$ zg!4}9ctZ=iMKDfyg6ysJDp3&_sbgy$xOXDnrf#;mLboCNp(Z&`HXn5#=m*caRHD>e zLr0j`Nr}Qa=m*bExHZX^JkaNxWa#IuaegKF^t$j?Q$bca$L&!k#N`XE0j}_R0Z!XH zNxs`(mip3G#{C?&k{HTx+xRwr%3%WbO@E&rTTqmHy#qcd&2l2@UVzV0xps6^z&HCv z6J!p~_04qPoe#3$C1kH?|0Zy2X%j84nzj*5w#c2>O%=%ZzP#HifXuzqI5mw!qvJ@E zCi^Io$nZVslLP44Y4b$-O4DcfyjK9sql?`9LAN7JOo67P4ZAf)sQdNEcxnITOer@P z81OPOExO#esY1++DHY7Zz=xi)v)P0vYx{0tnWMy@Wp~hLd5t((>PX!f&>)$~!9R9a z%&=?tHqOC)1KESWN}LiwE7nJ}48zM+<3gTve}(81%K~QZa!8);G)~bobBPIw&p;`uumxg71*ac=uT1DvQLJnZ28PW5EkI!Eh=vW24{&=;TQr@`7{XIE-DKgltpDj z1VU7H+C^pOKvWjb=PW9p?ye+g6~9VR`BWcmT~!;Q%0pD%h|uq%^0LfNE_K*gg{Zuy z-)}gPR)_osVcDj~g=HtLQzR+N@z<2A7A>D$S~jIgNSX2;O@^g1IrS|q@9n3Tm4NL$ zrR4)PK}gG|yEM3CGD7w}6IOM;xeo3)FR@^D67&jtS^dR&S)lf_5zE!3Wy8a=w0!LD z4$+uDN*sKM!m>9E18l1%3(G_x`(3Cp&TTv9d?VzR}G3^AENZHUR- zi4-q=w?hct%RB@_Oy1)yNZXoLv3304| z;?%+$G=yYv!in%iIx#hLG&(aiRI)k{?epXUc$!m4-YZwAKfqX0NZvmHW(g-7F5$Xg zp1A;)A5*ad6>US9DIoqGMk0L<&p^rS@Lux z8zZg>iod($Oe0t$GsQ-b+jC|Cc@af*0a-Euj69?8{GfpBv) zO4!N``PlNyWdT`I9VA0D*>5*#Nrmoj0U5^}3k0dZpJA>A@z^-g2|GALJf6o6Xo$zQ zTYreh_b|+tp1mYtlRJt%b0IE_GTb)9bc~~%Y@5+W?E#BFb2Y@HF${3!7mpxul6TDL z$ScDd`f{%lJ7$JqxUT#f;s?xN$~)0^_y=j`KEokkGszvy2IZ>400Tk%zR{6-26y3T z+k=YBGM7%Q=Cu5x4iDI)C9*~Dpq|z3acvlrIc^MlnB$J;=%zB!%yEa9dF_y#hH6(` z6dM(e6K;(=$_-g=sD9TiaY?!%t~1OI7c=S4f#K>~J~0NAyJm(v#CJ8`G@~`BXZh+G z=J=ROgo;5w&`jA8PX0j0;g7VRJ~(1XgGgCc{TcWsa>~_)0HC$h8e&3?_r25Utq-aJ2;X&zN*e{g(}AEY^4h$ zXj`1--Ods^i*deP0tU3i^-*+7TpwpQ#g+4BhvBVm8iug2TWxrN3cDs{*_W^>#bjK+ zXa^MIFvKP4cDQ7~4A*B8lG-T1{apC-2EYtgwrzxD)_qhRqScXwNj?59Xm$0=OSe@I zqoUVT99#8=aSTRFB&~4CfDx|$8e-mP0GHefSGINw?DN}>s^vrMm&uS26CcTMcZ`bw zZsxZ;#8ND9k1-nprP23pi22!v`|S$3Q$V<&>9-3`^4krLnMMem{dVP}_vI;xX83z^ zPz`7-|iUDizoW!w>zkwf#0ss*>6`y?(Mf59Qy4_rP*(HOb8HWIUBv8 z-|mpehRJVt%n8*aZrZuvfWW8wn27lbWMj+=pHY)A#;WddWa!DD4Wof4iBx$3WL*Bi zV141Y>lFNU2W{KnE;`nH`R$IifB5YV;!!|NhP?Drb9VpXw>t#AIJv}vA{4?2!664` z#y&6C-Qjo$E@h|bx*HsHW8atSuGIK;-IcFq*Ij8`scSde{p$7(ONtW0k9-3^+)yWk|>-Qbv!^)T~C z_uUe#pW?hXlchIsXD+y3q;I)cy# zFA|(6FhNksXuxP6j=MqAao0KSxa%C)rwDC_wmI&~i4)IB955%n<%BND4cEKij=RDs zBbUI*>U49T$4*InbuyHs2c&(mz60kugKoR>1sE2qU_D+B)aZhH?MkmtzWiswQyh}g zB*4H&u^gLx@T=53@rpJVTR9`cMOVw?c>+Wt)8%BEqFZ9H#)0^Q=Ctb^ciNS6nD(tI zDlI}36`QF+D@UhY*?%h;ugmr{M=vyMA;heE?aIn$EIlnD@z}!EOHPoNW>5~#-P2HR zcs^3Da=P$DYRT_dXcN24X;-RaU>jSH8;+Oo+LiW<6cth0Tc*?6XFQl#Vr{sho7b+4 zLC3h7*RC87EtZ^)T5WlpyL*~LXyr(IiR#@DtADv6O#w&*WQZRx;vSY|^S#5&KhgBs zb&h-O2FDD?rOqA!dt!a~@i7T7;(S>RIXg^-WWU{O7o6m^i$m($nToB|^K6!p=&AwAoC|9P{;KQqtfrc~#(-bx>s|l0 zqk%6*sp&`2PgWd5fp4eLLi^H){uuR~EdA-)C0GB`+I{YoCRJy?ILO?AC{+YIAoaj!x_L>%#kf`AWPw?aW_P~N_Xdce`%BEv_d_J^i1vIX!9n(i&&> z9H=W$r*{P(-4WOl&DsoXiDqvGwnWEv1h#aJhp{}h$ek z)5oCe(t*=CQl&pjxInnE*V8Esyl!}#E^#NnFvTquV1QTzKRklCg}IduUPb&vbI#B? zH#ub_(!DInz$-+=Bip8$C;j;VqCzuKx(=?2k(#yK#uo7|w{`)+<2^#AbdrhDtpo;P zaf8_?F?DwgBf>HIFxwY{M4t4v_svgOJq3D5m^#@hmhwK!1IgGh@3UPASFY{Gg80nZ z0@Chx;~Wnv8JvSUw#WIjI`CBwD(US)R7qp2golmu&x}#djwt8ayR|(Sn!Kt&uSh-=9Gr+^A@Sk9@=_u51Yy#4xJwpo zME9^dDue84-F4@8YjrAcJ)MzOV97?qa`2pvN0+Tl8x~i0If=wWN4$Y^j`YMaFVVA* zju(lC&SG$RCLTKLdIksqG^Gg%PFwM6p#$v;OSJI&_$w7g>j7 zNErH1w~pAc1pW0VrrJw%2dxEPm05B3zR51pF;V9gJ%saQ(1g;1qfligMK%$7W#}?K zU|_1#o^>cVrep9b5tqYPr$_P-PET2fWTs|h9Xbnvmgv8E1lm05@7*>x0)dhs?e)1ppg1u%LUGj>P0iGy-03-of@9XZL7Nk@(623d={JWxOTiR^>$&tl zValO%SN`*Imo_~DE-eSB`ahOIG=1P8G6-He_u^UUExI1<$`auCPhfEDRYDq%Mo{%G zy_kV&d#_=Cs*eB_`| zkd54uOf7A?ky8YhVKShSQ@Ng0!A4keH@TEysL2G&hsBiAPI|JTGdtWYk!;8r=9PUW zgC$wAA(^Y>^MfOLUy@^HW(P)Ij_%zjKY$VG9*<7nSt!rSzll%eY=3pXRJr{1lE~n9sT;fcPtKYbcd@ylCc6gO|tDM7pIPn`b-;OHn=^2f1 zLF1T1Cm$x(b2rYE@!vs1PMtNE0QSrpHY~^d6C05a@!SfH&*f3JX%5$s(!dZsBa(7J#;3+{QFq@G5pRwbQ_eto;5u< z$fSLl%_10d&u7;3;8?^m{KUmGq1Scs>`Q(z@n|x6=~lWSo6i4M7`=KFncE7K{3y}j z*bGtRwg&8>9Y}-z1ZvXSnqrazY4T;`B=_jEU2w$O!!S+v?n5i=eI8DN3od5+am! zlW?@jD$-3Fl*(&W24+;J^%pQ>WeM@IN>N~MSw9lWUqa*%HE)4`HnOJ&&Ftymq!}$p zp+km9r#Fm_-sHde?`ETuY0IFVIeKe5jVEKG4Hl9{(A)lKyAc7wlc?WbKCm-jb-x!fgl_Vi28h7*gb-gvCN7jopxb5uE)lU|G~-1N}aW z`mH;=AG|nB2qT@l|KTi%kmf8F919cXzrk%H%WFogG95DdYud@K3o_!%=zx?sTQ~qa zmp~Y89GbG|>&&;uW!y0P06K;sI(0OF?6T7#j7Yz2bf#O{XcJ~Q#Oox& zuaz5IWp;>AUM@J0pgdDNZb z6Dlvf`ewW%+W(;c%_S)L+(f}C~UC9K`Chu)dg zFC#2EmU&%yW02Y%T!RK?iUxEe_7jfT(L6w&-h!QOv<7B^PGDwm49vWvxFM|W)&U=6 zM>Fr}9-ve=&zOjbZAgW*>ISX9xbWUXi3z_&)?lF_<4J!txTK?*7#W8%g9e@{O8Xk- z{eLsZ@XXsgf?^q-c}0a9{>9ozs$mV!ykkeS!~2n@hk#~q6w!3jAWiARhDVFukqDUS zh^E*llpWWTj7r3YdA?8MO#+%e-ChFDsJy)f-D3%>NuQ28#6}kZXa-F{GdK!pW>N*7 z5!Rmd{Q(0sopwMoI0k5Xl>jt-g*u=qoDPQpy)Zj{auu)?BaSsb0?@o2(UtjkdWIXI zc{`(96VQ~kz|4<&taic!251INK+`z@G^NfN&K}yPcV;8+768pVU`A_@rR<0~NanSK zzbky?h~`}lcmxs6EB=mYVhoUSKr?7QRxcqd2Q-5NiP>obG=-is?@EJhW81C?%`U`Y z@m$M*=B1*<3n1zO&w+Izs=EA4=#8J)aBqT~DUkihO(Mf_HvWRbvSWFMXhsu=H(tTZ z!z?$tP5D{OjbCV>OwP;__VYG6H`O32#qs)vTn~Xr3fYqlgVS;Tbx&2U>rIb_^!sAZ zH%Bz%%taGyxkVFgwty9cqMn2x`WDH&9cLb|^sZ&NM+y=K$2y?b|8tY1b$20xUzGF_ahk^@QpjjoLxu zQY64(C5FQnT7yi`>lH8OJ1sE=F83X{k~hQXS*A-w=#O_`nhf;IhU z1gt5mqVzQM*P~Bh%E@t9GdKooUV5+q*7ROEta<660#Q$Ht(jm=6*?h_l6S>>cV=8m1X-ps2A*Hqd6r<6Sxz!a)-Zyq1a~m1t&@=`|psrGH`~ zmj)0?p>wABpyM<|ghpVReoC+gd32yxZS$1axf{0bqLH?Pb2mDie7r;nMALVUBbu@k z%6yHqpTI9fvrAr8#m`{J-X*E2iY2sT?~;L}y)2ngChXX|r)Q-hdzZw~Eu7$#1OGqR zv3E)O%7m+G$F4;>fQVUH4Fh`L#!p3ye{*y9vXQVIX6*Xq>bHlPvA4M`*cXT5VRX~A zawyd7e5H|Kkr)ZBW#o})^B_kyN8;gFQf-dJ!&r!G%)l2?gc-(WWi>aC#E%C5N`{$Y zzrSK6o?73=*)ZsDAOH8KPYLhv)Nc_ipJ9_Q`PUh;GzQXg$-74xcIK{YegeX=NnWy- zRe0}`B}(D%eK5)35G9OXsfpWaspefI67ozR-{q)J%s1QjFf^|3!%&UIi*aF5=D$%W z>s7D9WjlXc!1B9t`@l(kz^_t2QF9s#d_9KC+Ls3OJ>EuNk>xaGo(t&4$5aEKShub!dnX7SF7x41fJBmsVWm%Gd- zPh0np*QBzprcCF>5%b2Ae1cwcDRyv7{m>;$r-g@8GyX1t5zUknX8c_u zAFc@Z(=|`R`5?lnotR;?uf0a1TQ7k;w`R%CaSD@ijwDf3jXgA~UjWKR$#^0L- z*5PZhOW1TXn9&z&*E9q(jd$Y`u_v(73t+=InT8oZIbp^h9D66Q&ghDLG|c$fESmAN z*)-#4$HI(1I5gVt5)5B2mEcrlVKz?JD8MkvE;6y5u~Iqc8f6*pl}GsK5@WgG9dJ*g zWAQjg#rQ6;&kb&%;>KzUVJpEwF{2 z1!^DyEcv^H>NJ(9Y6@i}9E0eRm1E@)%xT^H+Kj(TnuoJoOn-4E_C7rlRmfJ_1bf)= zcgd=7B7Jd}SokyS_`62acT%^}1h8%eAOIToL48m2|2jYdRJ-_brjp#Q+SKdZ` zN7(bnYUX+uLx&q1NY*A*pB4A#@K`f-*yg|6UuSv|r6*&I=TD3Nod`$<09>$7$Dyds=-Ky8Z2>eIxe`GnHsE1w7C&sa`hLmjWwvc zOWZc1;c_f#Xw9JI7n_+cP-1rvy{k2BHS@50*H( zG9MaQ)=dxAB~~0Wjh)T0D^Mz)Y5lmb(dYbh-W$$Q$<9et5-B+l-a|w;4?sypSl2jx zFwECovf){1dM+Ke6127vGtLrgBYUuF!gOw0*2ieCCcIH~deKR1M4~&lnR5iPd6BIf z-BRS(^nqd8Zu3q1b2mM52Llk`ubH#OZcmIIS;`F0pvq$Xink z9MjgNxC(K$pGbMpOyskdOO()>;w&&JEL33+r{(mRi0eUKJcJi}~Zkv**YxK*Y^%otM@GMcylF(}?IaHs{?}hfvo(4jfmIj7&oPw~q zw6`6Phg3nsST8@!ug4G8M%a>zM%w1h-B?V+ffAE$$*K+G)(LIc!x=cteYE|k{jD}k zPd3jNqv(*{B5vVt7ug4uVY-(Z{8%cQu|0yNz6<8`tXOwv8p^QX@b;G*!7co?=lvse zVY;Jfn0p6qj3jP%OGq2KFmJRMz=O#vICex3{OuZLJKSPpSX9#$BvoNu(iUv~{cq5! z2riFdKPRz#9j2lOC?4A!Q!n6;k#i;wV9L_d5RD>mtDu|Shm`2eh>cMPLeozgj z6Wt?-t_mDC9*awKG?Dn=K>2R+JG}K^;qiV2JXSEH^1xPiR?WGTB!IUZy9a^WaW#j%X35I6PC4iGyjk*9- z3v+n(nTjD5L3%ca*E=W~%-bDQQwJOqp%-;;&PcpdhOlivadhN34{ACFQ#Q*xP;H8eshF`)Fl=&BqnP> zbL0Gj4wf+1*Z!BBYW?9bLjy}RV6g_$jc0PlYe-6gD}_mxLens;o=n4%1gVz%nW5J+NxTn(G(1Sd`G#lrLnHhR&G@@U#l{t*X#E8qWM=#v zf-vLPQMwG8uY&+HLNnv<672WVf*FHiQF)BPrTn7z{`muP_Pc;u@uv;*Yb$1JU#OKa1!|7qk=tY5V`G-Pu7Fk^V$9>Zcn<0#iQj%>%T z`zv{P^-%(18N)^@r8)ny)mOugU)SqG){u&)T+0I^54Y9R4fxQ^ex%P)(zN3bj!&tk zkNL?MVcGwa{x_GXcsU2HcKk1nz918=Qmxallpv5lLdIS)$(@W?E;Z<%lG@6sEh)MGpa622I#9I0{>4QU#p8Ucr>p2Mo4!+F{F) z^a*<0xnkR3OJAK1TMp_p09y)OJtB!tTuTv2x~6M5@%M%RlYlK{;!lo9qMQ;DNxB4@ z-w}}{(S$9X1K3i&Q3FNngDR0U^276Zwrg|aAxOFeEUqaci7y`fc@Bg#!IdzPY2HCg ziL=^gnwW`zasVxZ=7V$)l5)^8I1rAVHqcT+w`L%17&aSwb`|JzA^ooE*+mSr9Mp<< z3FfoKDX=<(QRXnnXNPSFf8P)&#lJ9X&M>0WeUtfu({cPAsmei191c;zU?vxWmT}~w5#6Fn zv5mHKb1!=LY;RVgxOQF89_*WhS&jxb1RrWYV}A`wWF@3hRCC#R||e zCWfG;a~!k`j)9hA(Ei*|OYfDVmSfbHfG3m9BxkkSZLqWTeoVNRXt35d0Z?Y^W(#s% z5G}!$-ci7oK@+wNj=`3huG{FFgObEI09yu4*fKZ&)a=kNjQv;mhw zzY#S##_&4C~f|r}#$>ZHBa)_wK zZ|ni;RT_L5jc{3`L$royVm*%ssX)~)_;T3ODN2l$BeJVB-*^7RU^EW{AIIp~u_4iM zAXbNDPfZ5}Yv|AlIDCmyI2vIKFB)l^ICrBh2oo&PKO+@&Y#&E21)f{)vG!y54PQ=y z)c^oheYOQhZKnGya6`2-@}Y5dA|1oS04Qc=?0wv23l#6zagnyqtu@DGL?@Iu5vEyp z_hEdeW!YwxQ}Wh3bgmjI?mLMTl)*7kSw`T%W6Nv{wGoUsXf%Qlx$WV&aPROE=t!b( zeg6U}K~Q2Am}B7$A!BE6h->L`baa_6*!&}W`~fM-Bhk!0lHIA~dawvBkPY|r4B9GY zS$5M5c3N&rH*y@w#zv17r;((WoMd?F9A0srFVheV`DzNDt#vSbwi%ud(^7YT2 z8=gAH%}mEd!b|5&Vv;aCofX-NBV5Lj9n57%S|h=@Gf*MAs^C`L=J?Fmrt9ZlHtH2>3}W$Z-HJrvi6o8tFaa7Z=u2Eb+|X zu1VfAPYKE-x|k8wxG(sg_-r_CzFwiW{_1-+UEN~MandFDtbkhmKEgJ?0Y`VqMH8;c zK{6q2aNPDaIA;6mRl@dFlG#|OYTCYfvtauwFK*q(Fn;x3x$$doXzHpvX1q9ey^LRF zusTd=w_cb~C0e`mG-{?22MjCciGm`c3~<7vOD#^0y%YTB_6Cs;_;h0W7=l4@1a1v` zJw^|hFj!B8R&$Bz4$(#r4-ds(w9km&RFP1=cR9ImG8uXx$`&?_)e#jTf+^e zeRFVCv6)-ic?a-ZEJ zpNhyliAn$v3YwlY;A~H{m^cs@dcpHRb8abZ`n~G+6!AO-Lba8QY$C7|da*sxqH_Ak zC0^lLl*SLbod$ING>+2DYiFNCzEHb)QeIXfdMo6pef zjHGOc@iYu5Va&5Lw(`N)El-;~b^H;1i-{JMbDWV$0U}8<(PCz>J|jgb;*=#?>{A?F zFsfqCJ{=P`&F>t;O@9q1nFFpBz+LCKsWB6J9Hv=(IL&?Ptpvh~Yjc$(5DN)qE+nVN z2#SISEfQ=gXk=MT9Q0u_cd}+#d}yQukJUI4yNYtsWa?@I*`?9LN&NxO4HR%?gX$v0 z;dJ8*rk$2invrDjp_dz3+c-~xaOQCo1054#%U|^b(=`*&3rtZ60i?5KfDmnz=$%HA zMRJxWSxg+merIPa7PG#<;>c&mKp*Yxn6Nf^UA7KB3j8zw+rXk6q z3c58;P!)q~IEO3kk>7NuBPAvLBcu_;3GT=={e_&vG>gH3JR-DVbDCyRzcC?=EXwA3 z;VCNikci9xEYJJEEQ=3^!6I1VWRt}yr!616RvrOGl%d0PZu($do*UX=x!@qpqJE+v zR-B5ft)%-K9dIa0y3Ckwdd@cl&;WEO^bMOy{Y5}eYugEGFER68l=HL1%M2%Kug-bV zx|5vdvpz9cWyc#^vn&ROSr+wJo*3z)ABjNBwwty++?Zui_r}Cm+OWOB;C8mbVN%B| zi@L?@$|aV4)1Uy^8Ke2g=ns&mg`@c#GBu*~CAwJgn==^d&kqb>#3Vxl9L2F9Af_!=q6HG7JZ&LiO2FZ)mfbL3$~LX_bkiz!~1eu7E@lZrv}JvSJOcx z50O3dak9R<(k3la2Cn$I|_f1x7G8KF0B-%Q% zo6Z2T@U{huah)+*LP6u9@r*OYc+lm-_$D~&9qf@2#2Rke7g~hv)y@yZ7FIWS364=u zx`0p5T2YC(G4fv-K-n;od23F+m*xUSAoC7bbDE1XXl<_b*clfEENibB3QVc@rRJXp z(NP9M9LxiV-^TcN;=p7O;A)z>VA!ip#JQDE2+7Nu?@bGB5C`po_8%wnM$}QiVfKCf z{UDYte|{J%&<{0%F2Y*41kP#N%?7YPm;>5c0 z$y=fq)k7l2yD8a%Zi7!Ka!gkc^Z6V|+LZoUp(1 zRtLtY9sM>&TYh5cSPs}yC^_7Zb>N$P@NcxLc?{U8zd*V_qvaP4bfCm@@3t^0TM}ag zu280PUKQ!y>b3c-3!&7^oXhD#y>@VhB7IT=7rb85jq!dLZjRN4h5vwc;1c_+6;H)w zI7hlVWMuBnB@Ph$hBd^{paU1VOu2b=m@fgAghy=gMP!$>{$c~0x`*rwvqR#uM}#xD!llld%v)tolCx)m^Id9PcmXL`D;Nf5~~WlKFuw zd8%2l`Net_?-Cu}o#gkRC(Mh2W4CkArY>52|A@pPoPwDCt=lHN=;+$1NpATeliF7< zff##UL(SR={YAkgZm;{*ZnzgLqw#jKw~?$9KDTza@jqsS1XB*(Gs&J?Hu^k%6Mor@ zY1eUA%4~F;=~I6}jdbGyRjF}Ci8`~Vz(aRWQa|k2tO(X=+I(GU9rr^`q+p<(OR>|! zRI5ZRRg+ER3lsL!_<=ace7L36YK$E?ak$`F>DQ$URLb+Jvk{&OI(e5VA$hcPgwX3) zAtl9f@fBoZi5?UMDev@r{xt#xx6nXbVL@xIi9bZ^8pDR?ihQ{lgk5{K40s()R0 zGl|WF6+h;y4%7W*kD9op*eSb9br^<+Qn3JRi_fZ+e~$*Ag|H;FfRF~6J+1cVB35-5 zjL*BLr1pQik*WNBA>ALYCh-lwuj^0X^%O^CiO1pfOE%G(phJHFPHlD`5MJliwBV2$ zSJQ$&XIxDSSe30MeQ&Sb0L$w&FDq{0NW}wttz=3cl@i65zNT3Av3R)L7LrQRj(r^< zN6PrNrEqdrPGxduJzPce7dGHue>fWyjHQabpfOs8s{iKFT{|Ixe{CoXN7Vy(aAWH21g8@##+MXmv#8LJ9T@-e61ON&5UEWdBI+%=tj}p&NnyU+rdU4y0 zz{GkX!JU8|8_-$Vl@)ZWFm4Er1(1^(Ru+>a_sHw4pDR0ZecO!n$z}Cz8*>krK>k{h zvYqo(f+rJ9d%aSE$g)Z*q_@>RVij@a+4IR?9(x#uV4QE`7(|SIh-Y?n$x8Qv#R|}+ zt#wp@@x?lEKBL8cf$dW8BGK3)e}&WF7JCtScbATM_|Jd}ag*!vE{sPEvzaaN@gh}0 z-?hS%*Io|0&d(Rzwk>N>DsW#x7q>jKP@xUaZrWKlYubEjm?K!C2>=Gi&TpxKp>lRJ zy5^Uhe-xPFws!;HP;9ixIoG<;;9%M9nB3wxi+wE65k^V{7kNi-;=u(*jn98S;ULg; zWD7(_g$0AO9+3oU${*v!y$f;ym=_o3rGzK@)81l^yudehg$cE5&^NP9c?rCrp_JaO z00?04GaE)%(rtWN6>1{%c@12Kq$zTIooUrZ01q1|Yc!2L5E|40GEOE%88 zaZ)ap??3*d#2B8j+PcPeVRUW1q}zHsz+ktoF9~^v@rBqm!Bje@#dp!BHW3 zx>Fgf`a;-Zn-mTH*I@zcKh`_MqZ<~(}G*$&=j#Ja9 z?K-a0gP(udYve%FrO!xC4!~!p%`NFGO`jq3UIBrQy9{79A0*67gT|x{TU85DGyAqZ z&&WC*vvZJj5hZGYG-KLx**z`7CSZCR^!$3VaquBE3!S`Pcn#cKVj%(qY2XU3k{6Bv zGU$gme}%1q9MToh@Qfq#Q7?RH81UbJ_2LlUFY6;(W&`Z&#)UiSen3aDE@0p;<5`;1 zSSRdD#l9|(4jb;|6~GbZY}P!h%oJm~{Gh3c4~~g)a#j$4RMDc$aJcqvSW?k}IP^YR zSiN#T4Fp|OamDHCH!V{H8{V`VT!c)TImoZaz^7Oi?u3GU?=X#CHxc^*LuVcaEWvCV z5C#hJxq7Hn*>Wf8(quybI@0IBMdW{@ztUNkN|3e+2I3nl4Nzg%=mySDcg_*oTyJjL zu}X%BJgPZkgox}Ayo<DI$-92-FafCxXUP0w&rJGO~og%q7Iw zIE6gi3!$GvMm8hokdZA`Z^+0_yNv7{$jD~k95S*22U$qwS1BZ$seA~@*6J)IKhLlG z5|RfqXhY_(u?iu1SPYR6k_Ey|Lb6Sc3&~Demq=2K!;dLa$*K7kk_XhelrF`BF$>A! zNjF|XvKV=fT;iA{Ng-KcBEN-X0x*=47nBKsGKE&h&;60>b{wi^%$7QToRVT~Iwq~-NybxB6ax&Kh#b7Zieap#W`o=t3aUfs2v~23akabOo z9kQ?(tG=aWo^@U#Xse;y)e+LNbI=c-pOltIgL#fi%RF=c2Wfft?l`4M%ezmH&|%WD zaBhORw%FkHkd`-f-!3ihQQ%o=;xeP$m^3Ua&$S&o{&*GQ?}9d+BrQ)oD??hI(={k6 zEi+*zrDdmGT6PYkWhP{Wv^<$T&!uI4l+yA9R77c+Z4PN!)eYi!xeuR?)Y1wI)mV;x$94mlawM8|Th2>2{1`3(7$db3BZ1T64pv+d*(Mrcn z9E7kem(yEV=3r7-o^ObG&*jlhaXn4TGv@{NTXvoZ*b=hxM9>#@V;+~CAuEeEV!mYM zdEHnA@&|vFIQSA}<>?9V@}db*c>tJ|PT4TnkW-8lDDq7|LX!8)F|9 zy89m2E1HS!zKH2diRv;GF=RA(sL;;NzGQ6)InUhY+(y@Fx6uub+2~?Y zuvXAWcVDLEu_w|>%WSyES2u5$r32ah1)|%@>B@oZZft^aU)V20l2f{$ zW_ng#*lfcPSNdRp1Wk4KnXr05i9?GT)Ub&s&{UVB=$5)Z%x&-I}&OI=yWBUvBG zXKT_0$~LVLnnoLjhT!hqNMs31U8mhr*Ez7%lFt@ z_SVjSztAX~sjh6b8J0$`**LcD@o0moZqPK~C$G@ilUGLW?a3P)dh$x8*^~FQ zn>~4>7xd&k5(F`Mdz>Wq>&;6M!=Lv@#FpgAd-{2K@*a6`y*zn^lQ5V>iu^z_gn?kN zzVPIA3ZA@Y^p_{^8S~}Id&c_V$$Q3qdGelFQ)7s4xhL--zTqWS_T&}v?a6!Qd3o{* zojrMjrYCQ3(1*!HuI9;mEQm&4jpF;8JbBNYFHc@+^vjd?%>MG^J%U(AI*-F-Uz(zq>(K}UgT_Gq1^EMi%hp)l(>W>Pmat%U)fMp_&VHI0cz2uMEKi zVqw0#a)yksFw;SM4Kl!-5T!B9USN9{cDD<(g%>uiTzJV9$Qn6BP|$Sbb&fmo2FFav zrOFurd}3+%`Oz0#FL1zgMy*x>(mU;*yx=5HUOUA8;->W^^OqqCJ)c(D~6(KXBz3**gh#Ek5MIYf!A_gPf1 zhbfoh6MLEQ78@b|uGC1Uy&L4PqpX1g!EeM+?Pe<}W`*s{v(hRwNIomAmOOc*iCx%= zS!rci_xw|>bju5k#Qm%WZnu4s=Q@xCPWQS+xt!5 zSliyo(S)TbhO~)-M4o4%JtH2SFj{_b4Bd|sse>Gy8H}X{PEiBULrvF(Xx-Dq}{B&NJdAFe9viqZQxac%l&;Znlwh^ujsT zP5z#vz%Rr&VLmXDX-Y8GKc=MXmdaCNoS2flens>3-Xo%K%X>sLN_mfny7Rq9M5mYc zi0J%Y-H6`7@CMG< z64&75-)t7~dS%Uv6+?VmUeY37NBe@qKKQS^pRC!3f*+63V*6r5e~kKXgy|t3ouWdl zS3`TrOm&TBK#mO7u?RrTVloS-tMIW~gCIX7<&~gyZD{bkha)MNBtlVp+Nn>a7iYbG zCAr}1%r$p;$k+UJ&Dm;Gg%RSgB5 zkXqi~BA+0#JbTNex~Km5*VjQ(QF#wzjf_Iy@{wxGJ{$UVpE2#B&uTOCD#Z3Y|0H?@F0cIaC}e%F;lK78Ho#}Xljd_mXQ70$K*94H zsM#h7Eetgb7Q$`vKsUx+=daGZd;@C|GXcwzX=)lc%AI@7Yd3HfNgLNRAnHBTOrkf> zvmB4>wXsGn6HNA6 zbRau*5Cmi&7tm3pf;VMm?Y+JLKo)9mO;Y9_Z^%}V38R&Fgif8DQ7(^DEEiE;d(D!S z_-$g9@ES%<_h)zBy z$p^`2VUmajZa|_V`0ArB&4TAYNxXs$Xp+c-=Z8?UVIvKqo~tS{AFA2*kpyqnH3RpY z-30csc;HdTXWlpBh&GL|hVWrdi}Zcqog^!avE(d7B#v!ipK+~WLMWCeduPcuA9QLc z$-q3@H@J-n^CJ_uh%t-0RjP6l|2V5j8|z(p^RlTTR0va{HJO0%g=R2529K-=@39JT z-Nez1C^~Q6MJ@@62H49h8x)yp$srW3NGdL&!f$MSC)A+Tm7}u!qbtrBdbMTlmL3N z0||N~HIoR1;n1Q+ZtzUdi~Mm(at-cxSgj@#a^^709FZo1;eM&Stm3ng2|}3sZIgIf zWClm$GQ;wCxkwy(X8h_!D`@SK;9Am<>F#A%Zk`g+>JZ{2_d%#7H8F{6i?Rp|)jSIe zv2m}H+?rCRHzZ3;cmm_f93`I#t_`fxETdxI>Aivy;by``<_}2nA0HGsjVF0wlTXeQ z2o(V*X6bbqLlfF(QYbG%;ThRH6DlbgHWC{LGGUA|>nbK1AEcCd8YEQAo=BWzJxvU~ zoe9;ufUzoaY$(8a^HGiB0z!S}rL*#etIKK%yG?Qfe90`V1<#BuKI4$d^_WDLo+PvS zMHXvHwxwwEWr8wYk{rcB#I6ZjRBAH8jwab>d=G203;fG@mkfO3nPk`|(ruT-#!eUa zEVG5wPN=y^%@9Y!tIs^jNP|@=Z-MifFUhhhJ4YtM)w+Gx6-tor+XN14mch@$GfPb- z1YMzbi*S9kpGRRD^Q8Nk_X>G+(NboyEF=MW2xaCDp23@X4Y*YqA7fAOVw1gxTwP;u zrA@Go%@bQEwr$(C?PNE}#y+ua+qRR9%?&r&7#m}6zFT$w+&^7CGyM+U8g_L*?UkR3 zLtt%agERNyK+eDnsFh1YX1^_BEu)N@BM18vmjuhwz&1fGi$Jrum*x=l0+NkGCNkIv z=-}n zHm@xLh{FKW(?iXdEbvrtbNmwMMDsL(|2TqMLfI}Ij?7_mNI!`V7AAe9KEaab7(wpH z^#slrvHPwWMOM5e235KwR$EB=Xhg6FUsGCq%2~l1Y9n?Yb0H7+9LP+o=z} zWB*N2py@1L_^mLX$v(;O1CFIK?GN;2i(n#|esP%QFEp3vTY~DEs$buQn8n`3yfK{8 zBV7|OP`!=~D;5YkTnNEkNflyn8s8VG=G=m@f3nD1Gt9B2@GAAy&5|G6*6Vt$8JZyj zCHnT#C9jBx(hOjK4cu7)?6ho}v|Z=-#Ko&&N!3z1qjg;T%o3qSJ1W>hLc4rH$b;5a z`#OvyB|EZOZBxw4hiAw)QWm+H4lyg-E+;yfPOYf7;J@s-me7PfG16wb7_Z>bbiG?c z!D?|~I9UAI(`IC7gjKcB8B1pbs^ubT-0s8@-8&=wq9$u543b=kwemzbY9U6-WC{=z zDZ4mU)ZYh%go5LpCE(_yLx zs>pxD3I8e`U=6Gy*tD1leh}@^^D@Y0h&V;}J(Rfd z&PghVvh+7k8n#jfZXB%+(M(R?#Db4#Efd864SlV8E=pX2juTD!b0l;SF|71Cfl`63 zI9=y0={~-GguYW}bCSP&lb(M*H|~4?R%Z#xIoII-Gh-&y72#*VqK0n13m>}&4Y*-1 z1Dhh>%Ec?N1lyV{M-$W)u{s=4MmxtP8JimVc1xfK$tA_6%RZVf0-@u|r}D-g{|J9jfZig9g* z++lP#6!<=wL{@McDHbBh$is@b9VMpx`|$kkle28N==`?kz;muKq$M1m32$6$%*RI!=?K*Ywc!7jkaVM7V@+hF?(;kCP7l$OwpWfDCA?PoVF7 zR|Gs#p*4n5Yz``YiK zaIdXB49S%DG3yJGRJ_nlaggs2pefJ;Oqm}*GF)6P-1m0vRcy!41294c39v7BC*7mn zC7k5oM#Mw>l2mh>7DNO-36$%B-2x(O!xxPxKF4tAR#Vi>_rOTD^?aH6XnVx@nK$lL zQ6!A{*9EisFTArfNLI`^FC&TJQp_QIv}La~3_fTnYL9+f>W9CtEC}n!er7u&jd-j} zbI8gBBoHfxn+gP-NB-Gh<2vtC#csaWVzCXoBN+)(YPR+k_c2A8?Fb84uk`Uf*1 z(?{zu34!06GNc=%A7wEQ(^&%`$byh&Yp@~UD{_@Krkbfzn-zz4y?0iEanzH2Hk!v%@UO{B8{jE~7n|@a~@L7DFIaOIm zPa?tdY4o%9Qe<#pv7?&E)okxX1~ifd$q!FXlKXfT8!Ii|E%xdUBQR`K zDam^iO8{py{GYhOg%lxaNlo}jv*&jNx+vLdto~MdwVDYE0Gn%pnx#~zChP>x#q#BEc>_jNRg)8-{A(b5H@pXF# zQQ1(%$~xTv?_m3yDUt(>W*Y%bce6)8R=tB$96cQ8F05} zt)v+Mm6H^)F-xk(b*ZOQs{DJcH1xXS=CNYjx)})8Q5LLO_FkUFTnJHMSR+Kl@ax7>mhC;_Uu^wwdSF1amTAmAKxe zFmQ_(r+*G~L=yEm4C&FsGtMO?cRnwE(vz^_YumE8K~Azw7(6W83>IY#U+Au$lv5${?6j`&krmIWjaS*YRUkjJO_+?0u>AV{Ou8*bH)6PnzJc zB$?CUx!gr5tl-n)8?Fw4*zW37deGl$-6-iX=P-UO0bX>z0))6HWt;GqMp(X{U@Qr$*%!Y%6`E|hlvJ+bC{|;kL&`zE9O~xq-=zB@ zM5!*U6X5B^S-aN@BP`tp4eI9g&QG*d(3|mnkiCSQ%p{T7m8uU_+PB0aOkkSLu$fte zvVqa<=fOPZXKkcXFNu;OnXQ+xyF{5TKVGgxA-Z}h$PkL^((&G!>7wgpY7(hhr_tyG zkd!mhS*)c84gvk+6%$Lvpa&=op{|*<{w5G&-a0%^^27q;3X@Ex5evLQejo)h;SP4{ zgr(UtvW+N9D$;OFWf_It5wtEy3^|AT5cAmSfgA(sIK3BMaZ26v$qK4wais~^A zRmasS2D}s^Yu=K;K(`MQpECBs0DI>Upq9N>E**Lnfosi_5&Kzv@v^-lb>3kE>T}u` zE2g5QZ}56!$`Z2MiIW`7z$`Wr7&D5TOw(x8CLR;+vWQ5{7NaUCoP|FP!vv&L3VRXd z$Lroj?W*`50rcL_nt5l-6inDt>_*d`C@w_MPW(xhpz4k6t;nGSaKkEmSBLS+T>sES_As);!;5$8=Q2JX zOe?7Y%pbDQ!x&e4x3(WXD#4JwwG_st6j4V)H4oM?@rA`P~ zmd_yvRyh%Qw9bY8h-aXc0(hwD#zi$a@EV!s4du zQSMP+Sw3L2<3EF#k3}10-z@!*2$>m;T(44!rCe)*lX>>R;;#UoN_mq<3%d2PBIqj= zbDN&Ca-rU?g0I${uZr1JyF~V+In1I)=q znsKhF0523nf{M}{!p(HI@k(E`g5Cnt`dQ#l8Lr7zbBqN}P_jm264_sxLB7*;5cj-> zl|AwU*M96q4VM}p#XTrK;)U)tX2zENnpu>dHbyrCLJzcRfW%ya)vnS^K} zjoWQhgo2qBnix3VW`)3fN&cx&6xQCYd<$mYWR{9_s7r=!7FEWkz=sh9WyTqWec()6 z6xm)=LGkG+N!5rl7DWb;6Y5%InvdYiKaKs0W7U%RK&%E53+Gn@LA=pvfXVt9npDyr$dzO+7}P>&$5BsS?CTa=Vu*+ptSMHmWJUm84Fz&Us*^ysMXt3-Fn6}0 z#El+I4Q&LkhvLM6WoY~!r~|RAEIu~Cok!F-VuhxIKQM}XBrAT_3KO{pvuTPIbw-8- z^9s)47y^x6U`O0}EH-%{k8FS*SVnLM2c8^d%`hNaasZ$UmxP>n$gPrM7ihxi^4D}i zzs7dOI>q4=y8H9!3fjs+HJEgDDmgae%)vnOg3zL%LazZG6D@N}XvJGY(%%-hl5@rp z3l35(48Odi*){nuqugwhZo>G2O*=@^gBR5frjo)252k{#zHRKwB|yt8NYiMpAD>dD zNlwtg$s2x4)2azRhv-Nuj3lT!NJWxl)Qi$)!^Cbus<)sqlWr!%YHjhJsj(&qr1V6t zuc|0xLJikZTSMyLhO&p_9fpfY`HrJzowy0xKoqPaR=ocQ%nV-2Jd)DXLxe$eW)xli zf`~Ltg_l@f#alJ%Qu(|gOFG`8k z@eOeKKwPIiijW%_Uo@6)FOz)|v~&4ue8$SibK>tEOm zGl;T<1?mRl4?l{ODSV~;zmD_aFZT>3@M5S+K{0PAZ&)jk#{2=eQ}A)1X%AF$Xfgt; zUaCnN&5WL-SBSUR(QCKRIHiJuMvjo17GtQ`%-n^lnik1<1#J($GDv&) z{01rcYh&qb`C9)G>~?)wqN~%B&{D3|=s0eW^rB0uy7)N4FW_i#I@7+Bg+MuxCa=EHRQ+pP$y?HkAK{W{1pv%^5~PX|l7S8&bp?1T z8guxw5LhZHWqDD|{INWEpro7ettm!6z21Um14E#Ca8Jo<@FN}%<-o~_65UU*!fY_P zKG!@VqS7>P;`QOJd@w!uBuF|vkmVj*3xEJ?Kqi53YRckpLO0aEk#7qu5rfUXX;?Jkg;PUuga0@MIX$D=gOl9W49OOY9v* z8{`|_V7?YqYgJWjI5MJEbzI(AWBBrVgT~VNA$JIV8u{R$)+hfbW9u<`CVoho+bOhX;4A;0?0msK11U3Qze<9W2RaJc4MmQ=Gw4V$QNKkhNf%E9UX71V zOg6_WMvg5QPb+ldK3wJCuJ4NQ9VI~Vw`!1z*#lh(Z~cCnw&sT*vCeqFC-;Zo|4y5RK|lP`rU#3B3d;EuRFl2q=)4kg2JUo5(lZ&kC1l zh}9BFwCQM9bAjm+G=$#ZEJi8@DTC^uhfdvn8hXKZT|&6agEYfUkG@R+2nI8+Tn)VA z%@7?$-k-H$czBhBqfF3)6a!TRBL4}QNSfz71S>|fI3I^#8*V~vKtG*EEDK3XwvcA4$> zfv7;fsR7yGA^G-1A+j4F6%9n*2-`8f0H_wVKr-QedP=r%vewFiI!wMIvBtU(DHB14 zXg~5x2!(Y|R-?1@21vu6sa>a*AE^O(159&XFOax^48#}3=YphwH*CT`MrT6ZCyKI! zSB&CA7F1CZpO@8eEi+#Q-bX1FS>}brq-4BGh&{49nuccm%E$!w?!!QNw$e?DU`)#e zAkYgaKr|Hpr;&64Xu}1+`;b@+dy^df9aF`0!G9fzF)&VA-9e3;#wUT)RNs^!_+UIJ zUn@us-1>oIZ>2g;bBF4-a!Q*fp*07Qtl+|&c z$jwV!CSuixP#ikiD3oncaF$Vt6DFGnzJtREquC_!utJROJCudO*fPDUFyYgL?~xg+ zLjBahvRsNPdnWrdIwUB}k$)Ru8>g1Aim@EENI2C^g~v*RN|Feq6a`3xP<~n9K`Vd` z!4&a}0}E)VTESLKY;E*Pc3rNCMljxA22EsD%o~7>H8AJ_;`V8;K?a3MdojImsZeWb zn(QJoWeEt4Qi1r9-Z|-AR%p|hey~rGMM-0E=h!Yiy4q1<LDT`b2!f|c_ZGy`YZJ5r zDe)$Vheg&>j!V-muFz_+F=_;)72}mNce*u9gYBD_mDzY74IMv|N3XzuCsGQl0)DMyN_QC33 zibOFC1%Ue^7=EPE#XTg8tZ$tT-dPrbC@DOhQT?sR5jwmKx(Ia!uxt>F3Y2y`1Eq|L zGPz__eI_L$8>|Oi0JNfGC|W>6mST+^vzTffRDd@sVhV^01m!q?4U5fnxyK+JVU*AVm)(Nu)`c$iBk|QQl%N6JF$_RUPygNpWdcJoPv{ zn~RXaXK&a^EL08vyRw7iA^bx-g+T=7KTt_gjyrN!n9TGX>j#hhz**pZJIrSMZ=;g? z*CIa@f@EbNIf@uwGc`ACNt4$#AuRyip+O1lh+bjq-SCfScGoZiK!;A8OKM zTng}I^fQVB*Vb@k?R1?+hzGOLSQfAh*#i<6ju?WtneMhYva++wGDP2swk2$;_#l3dYYfQ=I;`SX}F*@z^NiYzURnffdDqGBFM^Sc`3 z(0uHn!9TjEW*ta1N5=umk_1;YE21cn4Q_znL${7OyNh^+awfnj$4ZyrnmGDeCIh8m zf??p0X(Q0udr28CNCp7wuBOA$Z*>e57;QqN9l#wh7ug|dFa@)BIuR+2WHU>5zh?Zc z39Ux(cL`m8heKK!tmvqsX|Ciy{KEK5AV-TJGFQPOO_Qb74xj=ZC4q$Q_Jg*o?ECCS zg0o@C$_Xqq)k3zCsMLE^i<{UYOBh)Y?=irBgsE%*SWjk=RUyLlkuIO{**74 z^ej=`CW&$QqVcB2aFcF8lsMwBh6pCRY*DpGe)fKG#2dH@mn(tmR)Ownfwxxymxs7T zF^>Y4gzE`T4*Ju_;zX$=gfY0b0l)syH;dn=oW9;BB>}L}L{1#J5*4wDWD7*~9a7`~ z{{=TxX|$_lWK!COulj}hiL3yOk`a@_lG=hK2l1ZiFps#I2LkP!n^a}+*g`Wz{=&=r z`;y+#0pEia093N@0N%(4qr;xo5TklfJb=s8p~Qms3m4$0gs60Se6o zO9r!DjWsSK78aY35}PD;NUAr=EQgnMke{Jm9f`g;*P;g<0qjXR9IFVRtt+;ME8q%b zVy3~OC0b+noC?*y{`5Ob;L8=_g9$R0ClB)1W?D0?mCZ>g8Fu&L=XNWW;NI>GRsG^TbxP= zxWKb_$2VziLJ^tiT}4)z=@)%683&F)QdTYc>hTtz0D36Uk1z65zNa56c;t%&N&I1R z;aje#2LoPx)Pe!+mbFb#j!mSO*2nKMOTM8#7(vV3npmjB3qM50xD^XrjxL-7^i`aRM+0Pk=F&)^3@C6SBjlg=GTVg;kH@t6A|Pqa_6KgPK%`@Q$bUp@fX5 z_M(I@t|(#s0Ruf7d`k&jwZAQwvDe?n-0r%x?3fL8!L zgzWjp%qe}$&WQdQ(Mn9PUK$7JsUkFD0S}rmf8K1~Hy*?;( zoCS}+y!b?dI^?mWCRQnY9Lb!G2fu#gXP_QwOiI`=>nseBNUoRwJJOB$fJ24x`_cRn z&I}Ct@79rx0{p!1s``n|zj5bn*FWXfgzVNoCt1kZW0vo6(X=1&$-oCJRCmEf9d4V7 zx3GLGsxV5jT&vTj1!0z^e0 z`AWo+_Ip8Ixb7LN9O4?I52oE>p5&Rl>jV&S*#VVZb>D?hSErsk`|=I^Ne zeh>HMYnUw@O24ajg)d7y4cq>#Y*9De9@+Xm9RGRXP@i~zryHG2Eb3jmToHaf-`%)2 z-ZHjvW2oQJ-_C!juZ*cT5=JkP(M#9%{)ZHiTE1R*efi{k>F9idy85^))VpKtq%%hQ z{%*+$L+&W<^N=aPi}RPY_P)CQG5;swJ*{xB@}|F)k)SZTpZ>uSE)OYwgfUFYqp7w7x4D8^YwfiU6m2TGK z7hASQRr&uOn*ZG<9Acuz=lgYDBV;Gz<(9w-w;OqV@2q2}XIj0Co|(~p+&Tv#dD{+# zGGzFjHFC{gVSXVtukT)_)(A|kZni&4W&C1UCE;T~+FjCWp$=#${QLU%n{(Q-^^g3| zt)=r^%J-cgd4tnP19_?DETORqD@&2WJUv*6UcFbA(?9F6Z>?d>` z3ak&qPLT!s)4IeIa}C_{+@#Fr6}&=}Zx>*`XMXDZbyVuT`Pg{npq_cc(f4``l6dWP z?m?!3pk1n2zcya_sxO0GFyUui14&+g@r%;ERwNCY!r^RTVG|OD;*bQZ*8THYyH;jL zspppLZ2w{pKwp6%{|31&$Jp;?x3dXJ@`qRqsh>a2-Binl+con?iXJ(*{mQPj5z^cJ z#_nsEuHs^^g1awI%$s|_^_swtXMWK&>qU?f;oKC@>@7xNJX-^2DGR>0ts#z3+2J-@ zj1Cex{oCvh#d%}z=~IL?e@Evq%2!@bJN$?krPM_Dc%he_ZXB40_9o~u?>JOnT8_eo zD-@3X?sawNyvNBN=UL&+xxy#oG5S!UAjHIphp`wrZ+=6Qq)D%&nY4A4v6N~xgefxld`r4MeF6N51wcMi>oSoph zi<|@d!v5=C{_EP%pQOb49+(8)-uCz2RNcD(Mz5cs9`ZC=*6sC| z;->t=>-VSmq=03RB58KO=_ejBT(e~R1QWxYIH%pe0i51p%-MhfK2wsg&6~~9A2)-- zKW<_50HOh^u(H&w(vt+=X8RwMert`o#0VpM1rg~>H+^RY&UBs14+*%9EADfiy<_?b^LB2{4`azg{ zAMb;+Bcqv(b6do8(Ofecbk;~CjIS<-nL~37b~Dp~eKGbE7Dk4UA#OfkWnl_DD}UN- zjg3BNa|-9{t(lTNMN05ya%Zz@#bMXL%eloMX0L>4a>OWn+)Mt&7z2b!*Zl zd{%OK@-uGS^ZhEl5p^$-kqNyE?d%XKA7~o4<z3kmwy${M8m-As|iW){4dO{!K_tm-v15B3)_UsQdjP zcMS&Mz9%tI(_1Ehxit&sw?UciH+w4*_uN22#m$1X9QMIh2E?&f^1(Z?j6Jmb2T_Vf z!$0@q7u?tkD{@g>^487g+jbGb%4b(}H9~_EpO`Mj|FlOUJ_v z9Cm>mdDkMn{a&lZiy(spCll)(cS)Bm)mt5i-32V%kDoUW%vt&(PjIDjncv->yNOfV zJ15((LPSLTPYnU%9}4k(r5`!F3>fPAvtUIzN*h+)WzRG)eP`|tJ%CCvw6VB!w_&Y? zZ#h5XUlsJK|N4(@`fbg!qQ~ipB@>R9?mzJ`OB(&2eBdotA?O0r^1F6r0~b~p*A`;o zNFAq~eGX_z=M+AdAG3&=XG&(bU6**P5Epm;IEAjloIR&h({Y<4Vv z32V~HQV-WqCyRjjA)cbKzUKhQGT$5l*|z{bH@K|6*y;eaM9vQGlK7jSdpLbunA<9# zwG458Mrt0c$5iW%ZM|I3$oKmxjV83Wy7bGMG6nS7HPk-${^WDLa*fiC?Xd9X_6_Qr zJjm?iI9^*?4es4Pv9rs)Y9&|A_H2^USIA|1|J#LnkMNd5|2H-{7_8a3CK$Fi&2$l{ zs(Ed$glXA?M@yk?0=~ihEQAsEzx+3&5%HN(!4J7BQtxSLAqJA|XRB!YtVZ5X#w0Dp z@V6GY;>p~yr=|QUQMcT&hw_-zf}?|(5{}giHeeG(h?B`7%f3U%5kekemoBuuwvV*U zTlJt8YuIIs zLi9;h5kv;2=x188xY!b5vzw~giLps;8e|6fbicg9teO3X)B6{)rC@WICscL2AbQL< zxX~Vlspr0wTZ5@Fpw9Z~EC#ct>k+e-CK5mbluY+s4fWD2cY@ z{(35`l@}Ng+u~U{Q=!c~OD}Mt-Yv;uNBs*V94U}|9sE}l#$wu|!9R-Hb4`4M>QoVX zcyP|-=zT44{dNV}in;7fy1eK(J2*}Y5Hatg!++b}pYsIu=TDlRIu4)i*j}MN$&?zw zx5o?Nd&s3OCJU~9$37|eI8P)Q|Ncr2b;u**L&Dq!2b zl?sB-HosaYIbOXsycgxfyRwC*XNkVs=${42GLM4Q&bL&4zt|dl%*Ag*ad_&zBdGtp z$|IcpW?t*iVlPn$ii)uj3}icI^9^m?1*Sw(*{2zQ*S0!qc6UKfeFRy&lsQx;*p|AB zBLc#dHTC|?+j$CTbZ-Up??1v<+3(;7$>bv=G#4xGc^L2h5)y(Pu|Z?`{mqQ!+Vgy5 z{_!^+S!Zz(chIawzS;v8nlu)v64LT->ypO_)(@E}%XAfWVVal4eJZpaM&hy0gU>p7 zH9IWS=Wyo8cB1wVV5sHm_R>VCIsXC?;kz84+|$HeBgndk&PY<~2g!Hf!ikSxUfhvH z|0nSeOP6!$aWw79fgg}H$gU~ej^=ID&_pky7(dWt^|rRSnf{z%UQ2KYy!Ebq{sDo} ze^YH>{sv1NCiBVB7*tF>lTO3=@Ilgl3wyJ{w)3EiP?xjhC@JkVAnTm*qIX59`OFgY z^t0ES+@LQ?@Vpur%(&;m?&jzcZFj}_xFt(XZr$6rIOJAkDtZ)MmU(^d>Y#77+gaM& z6{~qmu=^A-$CU@ElziD-D;=gF1ymg$9qmji1?lCwsQe^K8U}OE54m`&&b4U_8z$U| zDFg45&s9YK?ao{Jc7WFA4^SUJS5UQ9x9fbjGZ0Sdu#TeL8N&d-n})Dy6(u^CxEBZ3 z#&*=kA+33D-st7;1I3yaWl4-bjzQ#@YQ)MJYoEV79Fc}B>SEy0;6eA9LEi-k#i#~@ z-Y%lEg6=+7jR|t|>Ob`?&s3v#aLUXP7|LyZ=ofeKMN;Q9?A|C+h6F;{*I4h5bd^eu z`ZT=vu3V5b)b&Xq7g*-FV>PV%p!8niq{L4Z6UX`ZcT@wAG;c|!wwcth|F~gZgjw#}>c}31nz!r^kr#7;eBQJ-?j{&e_Q@+yrD&_? z+_!azO{2R&GkVNKYEm-!hd{Io9lz_-UEJUPlK<}vm5}44+GcjJK~y_yExG%jiP6y} z8mWt&1~%oYN4<#F?tN>O;e+XSNtYI4*vLH^@!x&ac^|wiz|R*Ec5?l(@H#+d%9W`* zG`}jx>^1!?UQ132K;rb>&DO%<0)+=uyUzIdLNPxQPHEW(9@>8dJ&XV?C>PmIrM8@39-!y z_*W=jl9SI9E=wrL9`B4^t#I1ViZDehrxHWLElDb5s-9z?SO0RKcU~;+C6zuBDvntb zbj7OH{NR0}_DAhBDfD_;PvB5*cbi8G#!PYuZFnwEhvtu}#83_bJ^e1*fDgDrcg?666zF7Y0%}TzAHgCK|LoH^xEu*BEIWZ%G`J<6 zMTX4QLuQVHpM0}V@D9h<%uEV7EjBzA8FrSKM+vB`%qLO69TseP+;>`nfUB$&mBpK+ z@@gx=Z8u*eI^;E0i@JSR)HOq%z6-&%BlijZI5o)h(>g(m^CG2))lw+qMiNvcaS_6DymZawDAf-@_*_SbD39> z!WaA0`6S1!6cP{LKSBF*kK(GjxUHpi(9Oy&Z)Ht=*>1bTZyYz`ov_jWa+Ie%gJS-^ zWRXfdbXG8FAEa)E+@kn-Wt2I`0(MHJ#`E`Fyy9^cLH^F=cS&+mL6RsvDm;l1qFj^d zCJ@*B%&k&nWf-XzD?!w!a=h2sQkj08g;jpkHyBHwul+q|=p>PO-dV+Hrx3K!(ukC8 zjP;*C^6#(jTdcVo-P*a$wwE^6cG?O4Y1|=@RCA}QV9%0yMBaD~xgCp@PQ5TID@k}H zx#eHH$j@#6=nLqCed&>}_phMA@&EKo*Mm$iR84t!sE$a$<6C`VfofWy+O{$H7-zzG z=!|o~_5`OlGjIjF@|%&Q&fH>SzV{%HG&FcUW4HL;B|U0OD)x+2mT~{88O2HQ1!LVR zO?ys_eHvg3QlS@xnp8h`{>u|Szqg06coHjSzRTly=89Mdt6j<Y~6gRE}k zip9@RUbF*dR~2tc770%3baH#dPii%@^`5sdfB0S_*Ss=9}HaK=IzyP4@9Wm8;D^MMTmW16bh1jjSmU*U{}GB zD*?HzJ#iu<#Yaeg2)c4Daa>IA*9TL|GT(0wd9pllZ~HkiKWJL*u7rZI_ERsLlk4nO zcAeK78gjzAtmhTsAf)KM+s{=P^LSm!-eYtpzL8ZE>os^Zs0AY*(VtJ`56{gAv;ZE- z1iE88szNWnEmX4Vp0`|`-@7k~^I!h$-(;UN&17s+=ea+Fbzi#Ke!BQN65$~T)Vzr@ znYZ_Ia#Ze$&pEajr+oCOeDP?7(WR(|)|rTKAUyy=N`u8(ZNFL={V+rOzQQXgiw;N0 zgrfTt>;y4Rs2e{cI%SLc3ZM|q?shR=v~B3S_mmrVDQ*6Kg52hHr+^^)EGJzxQXL@R zz(|On{ViLV>awV#u1d&gZ64yao+@xvy4dQ*F#o%_;#^hv#He_zB8CVf;4*dN1gF~u z>>(3PIvpENltb6O0U^A-PPKkEGst{#_r>Eg_ladWE0`MaFF@Pf#DwMzVcJBNN9<@% z<XZ?7X7V5O*5 z9jHDw`Apcj8_g7IjW7eB4luT@-3KjnJuXcSP!s<6T=NVp>3~-DySFJo+K>EPCg2ww z4qfeEKJ8=Ms)ogm{PsB_Moj?j2h6Ef{H{is!>&mz6F9HD?y;XD!K}#ZWEw7ro%uOWf?s?1LO+HjZT8 zXHjjW@6mE@4=qC!FAQj%S`W2xKy)8xe>ewAFAYD!J|2`GwY_dgo+fie@yZnMT^P)9fKQy; zaumF-bKGVFE`&a4PALbYkt@uX8TmejtFM`9=ysm-Rm}XP9jPY9&opy4>hSbYUKb_5 z$ehPU2BN$keKR5dH|1e8r72C}AwN+W6EEm1F?lp5Xea5Ar)LmxW0i_`e+mH+x~Dnypg4ZFLjhDabZ?T2k0 z=8i%qw(7M0UXEyRdayfed63Qf*Oy2aBiMG$A9=f$>ownOjjb)%R#GI6AVFtT6KXDK z^;U_Rr>a3a@$QJeN+wQ`qS@FeNYzrK&qS7(#yVEz;^jjps0_e&N<3Q5c6?S)LqCD- z9`T)Lm0dcq$MbCQ2}JOrd`J0pp{&>6*s)UO+C?$*YkRp868suZwW zqg;LPM4m$B?Z|wl{DbQj)GB(ngPgAKXVJzCBa~zFznqj5U9fq4D>V!LQrK4&um!Cd zDshEDJkQ=6Yq+wjz8=3|Oc)45|H}&gcv6R?niloUed=z6c0p*NL(3-pARNJ@RG_o` zyN?DzDj%qT4BJoO{|&>hPM8{8qCq*Qe*O0gx~?5~9H5Xjd!BEekMRo^cJ`krk_=Y5_J4E>2m zn5+`~e(rM7r0bo za@aE3Ukddi^#u%%S;(@s%NaJqMu54>J|R($ixR3c51(^<>~Xb`EAaF$vfz^lvOJ9< z2KBAaN$Ge0?-%;~PW-<;G?V;_7CPwXCl&N9z=fWd)!*?fSqaN|qN(FDrSAbT6CuDS z8Q8%4KKRc19Jo2+W|9R^80?x>w%eNu3eL*0CeGE{Su1{R!*>cTp}tyoQ&N6MFEfl! ztg#=k$|hN%{TYK$T`79qI+9R1(!J8U#mY}Uz=E!xl&Xw6(iRMXKqs<=(99@*e^xc% z^Lto0qry93*zaQp6YGw)GUO;b_E!O6-Me8Y+#h@O1m}z%BHXUS=ZNBv`=}Ku$nfy2 zT%2KGkuQiXWQ^UX^Z{tt5U3?rX@{U+P4qpoF?BhR){Re_UP-$9qk5{3rOh`(nClTP zN{s7|F~#)-j)y)1bC!h*>G^N@3)dyeoOPYXFrtMI%LpTTAwTR!DLgEo>@h5ai<+D{ z;R7~PW?XZ)3*dI2;HJn3!DcD&fAl=yrt#z2DE(ByAMw!gP!x@wC-G0e|2-2c5sqwt zU3cVP*K(c5z|j`QWa}Nu{JSzleAgoY>2-N3G=`$isIdPpT1{WFtnu~2xF52w1nC_3 z-vgOTQxfciR(AiUa|75( ztsM(_3!%pK@6q;&Ul5hDcvf3U7`Y|8XaVIAr|f{M$`9Lk&)<8ucG~*a3K9Lj zzh*bN61{uV<0ar_gbI@RnN!ys7fV)lKXh5FWnj=VE4@wX!Ypa}9ZsdrI%=mXy zszLHkO&6GP-gYlcQeWKVD>t^V>C5<)vfEP0A6`z@Kfp(dFNor$eKa!Hikh6@y_U4k zWZEr=WQsn+PIMFG=bKQQA>_LyfMP}F8*Tz?u*3qcKCm?X<#u^X%|Lid2GjN4J_n#!dTTHQ-9k{Gq>gJM|4|0Nl8U8isx1P`9jevSXI6K6mm- z6(O#yA$$~Bi#1jk*L^sZ4#O=?a1fMihLl0NbUis}%y-Exd6Rx+4G;<4Rv|xJ43cVT z^&@w^SL@o6@|>CXk1MyhCEKEX1*wJibM(I33~w+sm-77&W8W0yS?q1yn8vhi+qP{? z+qU^@+jdXewx?~|wr%_N|JJ?rJ=~Y?Ehni;opW~f+R4t!N}3CQU!&dg*?8`zKNzN&UHC=Do+9zb$yrjOurl)lE1oZFvzihr`#0MdlMI`>;16TD$amd*p1+6CYX; za_97-J{GIKH-3&1iR7UwJQrNzOvUfEgwCfpQXG=s=*oN!#2%jYtR5&ROSu-%PoD+N z8vP3pc0trq`j7IoFi%Z05lc3w#c!XM63ibZN>Y_LSDJ62`)>eI(t%(TJ{4fg zgwyFy`R`AY%2W;jP0k8<1s{j&i;yMAlbr`4Aw)$==0xYG`}GB5tID6y z+!3_W5B`cj*alsH?U{AkjLYQ#dNOlM-gQHlMN+`<=yMoReoOo>4tO0;zH^tHof^F4 zI%*Tdw@JT5vv7b?`hS)+ATJB!kmdC{n7WhBTx~s}b)* zzzU}?f-OEJ7#}bs+@d;}j0FC~zt?k$$#?@}f z(Xg4-g99qNvNrf{eCYlokCK9*Cw=QJ9hOxMv>Lyo^s*X64!nIk+oqC|iiVbS`!NOF zGQ;;UG0R0w0l^o-0=NV&S^~Eo!W_-0_kpFLdnzTbnl*)jj`JUP*3y|!w?w452z13KD+GR-T7SxMVvgyjW2>Ob(|74{FZ?d4!?f zdX<-N8ZNRm?3}FdEzHRq(`yuQG4fbq_$RLD7d0v_jTeWrL>~R0MGD`+vioiY%iLMi z`bilwiz-J&1{ZJ>W}55}c08eEI}5d^QWMb+9Y5My66w9Z#pkPP?RyljJes-KP5N;i z@t*)XyLy|{oFzDFX2k4>4-wt!oHSCmIiE|cKG2H7HIB~s0Mi;K0rnfQP7+!gFua*) z1VLh43ff2UOWEVwYPhSmMWgb1j?G37=fQ4t5E|TzyN=6lX7s;%mLH#6M{Sc%hx1NHSEa<4gZ6Ko9Nn## zGQl6{^v`?N#Ds6Vs%L{~W4!$V^TR0B-_@c07TN1?_1&f-7~D}glOWo${AEoNw`crx zhC%q44OzJlP`_7tDzz!IYXySj|F5CjZC%pvzN8A zTzATuFLw$T%aOA9kTFUBlE)-{zXD>m1BjMiybB^-{R3&Goic*w@!_=fzd)e?Ey)t} zjWO1Km7Dp$+RXVBmVBTdAb;n*%bSneqVzZeUy9q3vye-c_ajycGsMrn@{7_W7zT2t zni;hmUo0%TUmlWll1n@BNJE4&Jzh(TMo(u2B8Fd#dQ3u*4TQj=*n`){`ZZ(^IyH>W&{r5 zC8{7V5VL+dFI?_+qK{a3*UhZ{O&s*19Z~Q$R!Vz33 z@`1Zf=b?zdWxhK+mImlrE)OIGKhJvM0_e(S{y%q4zwo zppNe=9fZ3j+435@d`O1x*wm70o|w)ugg#uR1h(Ds;`3@&#rB&DfdO#w%}M#TfzYq* z+{A;+@+tc;IscWD=eF-jyQA30Z%@I1Wuv29v3xF^478Uo_|3Hlywt;+zlmEm{f*G_ zf9t!TYE7~YPlbP-)?rKmc?3}1GlOjJ5o{;R>F3zWQJ=*bmer&@(Tz`WI43oo~*cv-IJDM2SK>d{L z3@xFUSO^#h{!?IQ;rzK@`G0HK|EHFRhhE0S*38+QfQjR$N|9d7!rIxyk$_&z+Q8XF z#Kg$X*o2P{>VNul%be61PuLW5j7}wG{{o|H$F;_w=rCi)I>%gaqfywkm(XNcMHy9y zlyzK5xA+YC?5%dqo)`nUveES*YeWbe0)q-3ORP!Mu*3f+`&o z)y4UJWL?^Eb=EXqjvmbk%p^oq(`r< zuje*^-o-F^a})5n6Y6^GZPaF>vk$)lGdXFAk5J9R62%5jjQ7?M=>4Q0$`a-9r8%GD z?P{CD-fY7TF!QZPmnpUg1uJ=!{(duJ&-{!(y3V-ovbjLX`Gok$zIxlfx@e>W&5qJD zJX>mz-xt?_@S1CWdM&mZa)^e%d|!m6;s*ksY2jYMr%lXAF*w;k3TI}lt=T!YZt`WD z-ywImzFfKB$!OB}dlN~1)sPBkoc25&YFK%_n$8YYX~cR)djdAqnOMbs^K5ap8Q#4} z_B>#Td74{xe!6zP490FtTifyt>1r^#-i!dm0`QOTKJu-|xF?l5{J$5WxjJA&$D>lZ z^aEwhE|b!W*(=hfY)=BHAJ?q7e{thyWjVQp>TQ@`mSf%kYCgB$U9RR}Jv`ZTx#W1W zqZ4NU`>UR9HaM@w%dnZ=qR*Y9^uO6(DzNv~WG*e?-%T^uEMn$&zrV=7PhhhOxjUhm zw>2cauZw-^nYY^Wg6yoOe0Z<_4mH~33?1tN`8=L&&=NDR`O;g2_f~Y3>~6;g&EESu zl3$izp}D5omdC&!-6?tlb$%1Oszst)`rSWsZ9igu;&oxu=2NGaJ6^UmxL7=Ho&_Ov zFG{!dNDiNTBWzn~uakDAbnm45fQPc%{%Z&5PJf}1dZx9#Va)Ab--B`4htxRDYIvO> zyL?4{MyHW;XWg>n?g=cj*?eVhbHy_j1eU2ezd+-5<@H-}d0oLncuqHb=l5fCd5MSq zG^E1m&F<>;?-~l8@Me8#cdnA+e&yroTJq2D)G}kT``Xdt&`xP^w2eU@a*keH<3K)T z={VLj@weaBH0b06rc^Jn+}D$Z?LmJk4#qmZwy(GC(r2Nsl^}uk8zsv0s8??Q9Thie zp1WY<>9((9!~e2fZ~>;}O~h1B|5DgDqz6dMVbc4^%w1AcX=YxoU9}bC7t5hLr|Y(v z?EBa>)p$?g3oz-u~Hh<6v4ln4?O%Pd*BJ z`lStYy~RP|im(fNY+lUK#L6|Qc*CzHj`wZGBD_-0DK#?h6=%JHvOTalo(8&aU1tK0 z(I)6#+pO8);8CT4#*T$&46yvO*_FhAE}P+lQw3F_ixp&2=adq3h(eHhRHB^W10=J) zW@k6)WL3pC$S#osZCwJCjW+g20LM+P;ZdkK!gRU-6WaOVc`h1g^9?x{H;4L`nU@Xr zh{`(%b-J%JdzNs65QV zmsvR*SQorB#sE3qbbVxcat%QqJEuh{L6sG{Jetht1=o=L*}Ma>MmlDyQK>>-m8f3f zz-2p#kW#7fF|HfW{FwdQv%X(`hf#zV{yCKN`D`O9`cu6CKsTf(F!fjU zhWX;$c!%QAVA>bH0BL?N>e+#_2T2kc((KU;HGl+%l~O$TbKr0!gY{LjEErRBAPspa z^>f6C86NvfQd`6i+U_(!3+eC$b(xSOaEsR;Si8c0&}*Yb2IGkn)pE%+HLcxU%P%~Y z`^H1c<_u2;5`loMG8Klgq)u+HhZjxYUaj;+!1&Vh%m%;^#dr0s?z8Az2w0a zSG{kww^C_PD5MwZjgz=T1LB=gg`N2&${Y%B*T_fIhqxspXMWf0Y&CZ8QTF8Faa_N< z$={-7(fOBG3HD`T=W)G-?1jnJAELl4Q8N+m zn9R9hN_gibS8QU;NfW`GXt&&!-^Xqg-4|7bcsdx)rP=ER{P6?d_B^Z%o=`@tPa!|I zRi8)NlM^XPoqp0EE&@BYmh5;is62n|R(d1~_=aUBxip^bH=15bS27?rQ1TRPtRg)%-BY%GL^T*=*p2RvhvfY9BOk#P705_a^ zf27po8C&e%Hp4LLLDSKe&L4;z3l!K_*DF?#I_?Iz)wCLle#?+&p>Aq11G3Vvhw7U( z2@WZ8qNBb*FeAuE?6P5$@X3eNCqHqu+BY()bEIcwa#*4>?4f#gfxHj!88X$K+*h+a zYY|ldqxwvpVPRUWrAPI9fAj}`Xy&|U*Jq9A`^%&lUAMTTe%x(#S~y&V8Z)5@{$qXr(|B(^S*9^2HpuLHLKAi}^vWy-22qRq9-V>s)dsHB&D9<4DVx zWD3*|wC$!huaNcS)kPOwXSnx;ccOxf4VZaXO3d4rlo*aa_e$@Gmj+LbR*u=zIpaV) zT=3ygk;|gB{E-NJw+A1}xe`x*X(O=Z00*yS-9cQ=nCoI96E!PwV`w@tz4P)_5mk1D z&2(RUwDlvGu)<(&pI4Dfz^o*~dMzhId^ghF)|D2a)XlzIz=_yOd@>{kmT=EF4I5F^dX#W z8r7|ZqYYY!@fXf%=^0kzkA8L6wvrQ710s^lO@(oE6^-|pPw^q@$#45Rb}ZlluMO;B;vOrsJqAMl`gws5d+oS5?)aYla zf|(w8qg3iVn9F;{NV`(OVuNCYYdM4L^<30zSgG_Ed&SstZr3l)(>I{LUIji_@@xG* z`TKspm^9~^_xqpJZ(cIDq*Z=Uf>7c1CMPO0;_>Ta(HpqGNS6CX*y)w`;~x_M$luGZ7TNRQxIl zg2#r=4l&1H{7sr(2wefaxkcJKCYSzCmK`5?Iay%(G(@X|%UmDJWis~kiegcqaV1CZ zFi0Uj@S*%i-P|F|Jgn6)q*x}^%EFahfXA&}BS)^Z@534631E3beEBKQ{f;2uynP?# zIN5cXKNyKzBFILO3KzgYc#l*N6;73J?5uilxp~XsDC#8Js6YbI(xp3|afm4Mb6k_+ zXf&xy=B5#1hOak7cqhg@Y$nm9Tu0&8Q}XE&ry(MlXc;RaebYq2mVci{~M>!t~( zyKWWLEQPJXKm`#;%QLaFXAG746MTcDpq2eNn8Z1m$BvBeN>)`X7MfFEygoR`IVpc= zI}#yft=jiadb(Q&7~g~K9>;XLQm}k$Lv7YqYZ%#11C^=QU%XeK*PkaHz3Wq?)`UA2 zSgt#g2FvKIZs)<3z|U{nqbBfxqh&I*9;+VQTV3nc^*2AN7xSSJ5C4v8qKPl2YO8me z&{k-4m!vnhI`U&-SMZABnAAr2tc4Y*3wJvN&Y|WzH=ewXyj2pr4t79pZA(05XV2Tu zS)wQ5>adO^guuTcFepu1fh3|#1w=nd4K5o|x$3v_sfdHqPZ-kNQo{`wneGKJqVhiL zV%yddL!5sE*1Ro8>GaTgRHXmq!iOM%y4radY4q6EIzc?Ak~az-m+%35k>h?Mx$22F8Q&=(LCVCR-mKVL#9!4tT3Wf6 zy>gDLfpaTwPe3P|S92^boCve@=4El5B&PZPR*ro(nnnIt^HFgPq%GwheGw%YiLvv9 z6hklIoPC$mOnkf>D!G3;&@$Nqkkz-^g3e^rOXp^!mjnaMKg+yWxJG}28KYqnc;!^4 z36D@umX_K!$>)0DApyL81dkYG_+Jj4_e6-su#hh&($O9 zsk5sy$SO|Wm8hdcqO!>07$lv7YCaKJ#U<_lL_-EgOKV6a6lTnw$)R1kN9jk&OdSa7 zZ&RO}>4{dQPB*pi4zt*caCDXM7V99l_$bgbh&umzG30}&`J1Cc@$}$peu+)AsP8j5 zh<#`X^PivI4A&Z7l;>V_2jW8~)7@(Tm>EKtDrZf}9#O_;RR3=L>N9vX?MrnrG!fHa zhB(yidE@^xRN+i-MSxR3Hf(IOO1*bmL-*T!5H{tN~bX7x)^IodV1uf(E z@K_2Sg;$f>%!bV`H8I7l_lzGE- zC~0P^Wo94Hwy6DJhtf=zJj-pz)XW_B)cGYe!351tp_UUSYE8>;z>W%emF?_WJ+Ee{ zij5P%9V9~v+SfqYsj_W)1$Y-ZR$UldWUV-5R{?@Af1>j=9bi$k!%Zn$Qyt5bizbNh81!C%egzLN{=x6S9m(96VdOXuC2rZ881bR)U5Ckx(q0uAov}Av<;DW z6T9Yycpvu)*ARAfxbjO5$9!o%-m0gVOR|&5J~rR@X@3y?|sz;imEUhkKgUC zW?Q`9OWk|T(i$EA*C%L^d-g1lWw8O&=vf(dOYid1nBJ0uF-%LR@z=17tVZGFpIgFf z8d_z6r^L>CvG@6PYmX&Xu@sCC`T@N%upShV-jvH^Z| zt1tw4-6+)1 zz+!NF*C8qDF%8udjS(K9+-2qLle>+EBfYM+%hn1WXw&f7bC6{esmn@!`z_Wx7r2wt zz?22Q8a=$x_7_XoOPez1VAvPOX$ysg5(|EkQhCzkH<0#o-38ZR^%;?J_eIB@3(5rzC8()bCaXihXgy(U1W@V zZ}r_W0lok32WVS)Na!0!h;Qs+fVPM|D12{kBBZQpGjs1M$2D$8ocK#nIHbKpQY8_# zg59et%e45UYi<+$jbe|YiX9WZVCVXQQ2MRWJJBu4p@@pir^6U zXp$a$Xtyf?$NmX1@z_z_5GWK~ffMYtK&fc5BO6g=L>iBU?l>`cwxBOSQ)Z|z{qskT zyOL+u(wUzh?(X$GH0FGFwfbVAjG{O6M}x~lK6*_6?Wn0EI$oy2zm8A(-+p0RrEU!= zI&MiXOIkK4mWMz{Sa2g@!&;}P%Z{VAjS2hOz0T|3=&zAD1)HTSrWHoB`qm9qwD!XC zP}$*({hFOYWV-Vsfzhprt9WO*KT=i+=Al$br`bhkCi=>Xu5#6>9p{jtgmN`hL8tM2 z5qQlI7_%eHz5T8Yj92p$i6RFeo|6cU4D;tUzDC{a|1e4B$-oZbEeaIxwtJ)~nG6H6 zg)#ZJtLeIgBt;6C;6~kMC&^ha%hm+jkVi*E>XsIiJ9>!M*sUSfQ&b?8^kw!ey9KpJ zWeY5R`KFMzm9<*K9Ni05xhYeOsdz{atB zShnh3I4XfocIYc^iqH58QwIoEB~@iEbRDH!fS%>PIy^0x!VE6Ogg!dD7JHLr0|uh@qFwprEho zb&bu_NS^zB-M2xq#x{Bgw+7=%eJuxvlIW$uZFVx7E%f;Tq@tAHd4QF09uqzb~{ zg_wF;xZc+9+I!<(F&q> z`M+per+~MUl{=}`MCXd%(C{+aIab&>Cj1r~qE4tZz>5oA*=@u5Z)6MnCB{xrZRFco z#IS&F_JkNs*z-{UqL!1{?gw1yWG+pn#%}ZD7j`ko|ABYr{n~c74cGI~OUQyd4gLje2Mvg;&)&`;w%kI zCS=T3M^oY~%i=-Mf1b+qBS91m>B*F?rIIgr<0xpW2Q=@|j_TU@R*U?2-63>BBm|5< zq#1u95*TfPE`h##qk&tiWk?pI@&}O1_YHyXe~K_CPN@zc@(w&RLEtf?D@Us^0c?*3 zQ^e2Kut<#IkG9NXsm%Qu^A9QGA{lUg$t%yepUa8u^wDwcDPMkxSXC)aeNbgkFM)15 zQMtpZ+!KvV6U52X5kEjLY^qkYejYH}6knCWFRuZuHVsK7Gl8M1dbXcQW`NJtx295> z*{G}4$T7llGSt@pDMIceY=k!1v3~;N6ip&gZRc$zqH50QnAL{VYHLAAzQE>>7Izv}W=wjnlA07VXDXlp8}S7@RVzhG%t zwio{33z26FD7QT?-^m^Hj)I3)7X#!KOv@X%4gf@%sML_gG;K^9GZ}E;eL^c>4s*tqvjWjJ_eK$@fSmYkGOU2;gBBS%M6SxFl|E4 z;c^Hy&t#i2RGM~L_bl(1vj*rQ9u`a0gehFWf(ooDc~}`E${P3Ha&ewVZXg=W{#y;~ zue^`k@Q^IuVOe8QM;jSq-#=*|ri`?TG)4YXYObV9Er(xZvy;s=CGMeFgq-+V)AS(e z16q}&|u#g^UJ;cOQt=7W>P1fVR8aGKSf0+uV1_&_V7k2G7HAY>*2i@KI@ zs0d#7050gMowX?^ICq~jI_F7GEqmE9SIDB8mQBC_5o(}^6O<1tcSlxfwIg+B>Yht9 zwRfu9^r)2xI?>=q5S*c`tail=G_OHw`i56$=bzsXM^^SW?NB)ocyEyFc5#sf5Tk^j z)vbc!$QI$rkx~FNm~N?diy~~rHbYU3*=M^_8aIUzxgqj5+m*B4FWAo+f42A=GGaag zQ=qvTAWPuX+2DsqCNT>i7z>s&qbH6pNnbBTKfvy8j^zq3SDWRT@0gzW?jXrHrN`4TGLeys&q*{T?*rp_fIFv$rYs4M5k>BmT;!1 zGFk#j#Ua70-biN9$Fn><4Mfj7w-;m}Sv2;iA!(E?1(>QNHh;A{J8k3c7&x#M%8_;F z9YaW?(R%=O8`CUE~MHyG7 z!3dVGT64gWtH_x$N!o=PIHGrwmRKH3w_&Nvle27Gl?c($Sr0ECuB>W$Y`Wgp;v1}f z2e$JV;{JY$`&f^|3s(&N1&nIF5JUP9=%RLlK@D4m7?F1F=p7mo(^9*h^0~#^kJO+4FQfgh{|vLr zB8!xax2lHq*pEDByUp6K`=#&^MXP>|bHSv4TZ~fe%&nU-gV)Jgk|veG$>lUBD~FG~ zz+R^_KnHBSAmMdlTM~?eRFN`~pzvXT&R)Yj@_)H2Wh^pi*_v*S_#0a#bN?N>saUEH zT%Id#R?biqn1V~3FnPz(kuo5>ZPBlTp2jCwf?zq88h0Z=1O~K}k08xz$ST$$Me2vB zNQ^Kk`I|@qsts&Pa-HuKEKAE?cM{Srv&oRa)yGAE(+FQb*fPi}^KP4i++4URW6_RTE6m zG4aO#5cvz{eo3}X9E7W8e&MMLgXOR=(asj(Yb_%r>Hq$?%BR=1eb?Pg&=mph+4W7S z2WbeiraHii^X)6g>DHBlkuFQz9$xE_XN z0DLzyT#h=z767}-NKJGZ#U6NKROA=zjHCawhYaxo#od+V!=gw zs|Xqx?ItdfaPf3Y<5kqdBGqfvaN~&A8yBU|60}j4UdTT<1vmP>7%Bh!k2Ck5E;X8G znOiOsjO(h@sx$kXb1dEmoz^LXJ<3ULIy!IKSi4Vgmq+R=LmSnE4~k1&{o=6ooGyOL zdt1M6_xy*Yo`Moviu2Q^`}G?C8;@uGhM=%FoX=SM{geunjP@NC)&)DR5rCBRm8K0*DwAq^wj;yG}=3?P)b zMsTCvUX3&c%LLx+7|)C$Si*Bnt^MImEiGxP)I?Fe{myyyx2-&6svI}=YUe9^Ai_|d zI+p8a1f|4Hk4%Qoj5JUnp=SAk63#m`837f=*gZsn*b95|?lF2Oeqd77h4qvt&7Ev! z#oeM(lM~1V(3fiq*5a>!6q~clClf=!95URqXp+Xyi-lk8Zl#)J-da6;F{GQYb!kg; z94P>)5{W#6KmrC|T@Wvm% z9T~=tpx;2&yXAuv9;d82)>@q5Ej#txXu;skPj*AR`P4kTNb8AAYkCe@$U79ktKQ^u zcs`~fuDZWL^&55d|1T}*KWv}>(1JJ_Sy=y<6~xT=e^^1xO#eTuprp?67}NF`GPdcG zkzGD;Ik!_fS(}GkSiPO{dC>kRis)*lIL|+Ljk9)k-XCsSbp^8q2L!?&O(YRSlo9!* zzVEMINjdOer{CRQAGdb=UzcWxsh`j1(>dRp{5~Je-^y##uMVo~`^WrW`|v)0e4aiX zj;2|UhOhX)Z;xZYKVyBr)?dsklJ17TADX*kW1GerzFzRZpPoNwhdqw)zrXB!?QDE` zDn4&x{l4b6zqaVDpP$4(*Y6$VtO`DFy zr+q)*`Ay#`9^pFvIZgdM>7n21q1VN7^Qg9f;<@+u*5H30Z|mWI;D1kVuZh#X<9zOj z<~=&tLR4yiMi0-<@Pn<{ZGYx3gw9=;UB-UjG_P-aWHXK9f8SRzoDa{tlAU*_?8eT0 zzg!3U{Ji~>mp0P(ZFk{y!QwaUjJwOUKvuZM6#lmy`QgLHJpcBW)hounc}W#6!67cm zFTR<+PjmU1qGu2^1*xcInvZthj}JXxAO_#Bag(y|cX8U14bGR=>@9kwFL&U3#}(k6 zuWjG2uDDyjRl4P**u`ItuNE=TtA~bS65aCv#%_)*?V^RpTg##ccX4WjpF5lG8CR-_ zl#XmnK^@m$FNd6DPiA5)3$#M`1(wpg72!>2L1T?l(3(Fqg|gwY^;-#HsiyMFHb5+r)ch*1dn-cvtzVZ zpiNk&?%POTIK+CGQrp#o;Uz8I&Ri>alMgSQ5NM%(kMIQwyVmEcam7@2~ zB4gdP8(HMMb5w@1EUe7`K?e|urpJ#hEZ7m z{BGu&LSB-ojRv4rnymbKeuVnGE1w@0r)k>E~u|IJh0n? z{Qg{Cspfw#h?#IvWB0jO)^2R2XlK*0(bhIipK&35EIj=O)r+_k;uHlymN6-%SbnS^ zdOv^Wo?=u&_J(p$r1y@AO}nYZiYaZ{6`s{Ktj&QmjC$6-R6BPc(RlvmhDcEd$X61& zW*>>K4r##7f70B%T$d`HDHzO}N_8sdlW`_9X~dlVjqy>f zb%1~lQnhDj7#&2SAx>x$A}w(+u<%bUi(1>{(B+8dy2z|L=2d1yJy~ESJ)BWPjq!@z zqD%Bs<9bc6UL>XgEKPr|E+@8xgbh!vBWQ2vBv)rLU!PS-y%I5n{G425%3dM9Lv>@= zqYA}|kEFSYQ7sXSqAkrT{PQ$b9d&pS>vmS1pK(WC#9i{RWr8v?SK5R>G|;sS=7_1R zk&7;QNk-z(ZAiRIgKD^7<4}>)HqhIw?BPERauSE+N!=x7^zFRd(uWlL^hB-G;IdEi zBTQro=Ws>L_93#6hg~Ao^ukw~ zMfjhKQ+R8wfF}B!hm=us6%ZpUGBFdK!IABOSG3#btfRU5Kf26sMkZ)FPKFe{gI3xs zo_qIzL9wGAl3vT8T6JPN`88RIOoM!)R{HlP*Wh-b-^rEX+*B|;kM-9)4^d$%4$4)C z_)(9@KN*086p1PCI>f+SfkA-^9fhD^*!YXch18d;sUw>-kDc^i!sug?qP5L*S)f#) zaqIab>ne~7ttGP*?L?eSQYC%eM4au58hsqDm<4S7$xcq9^-BF63SZgfy6_s~qK<+m zz$@zX+vmo@^D2!l!fL*{Bb(FK{??Uq-Sh`zDH;ztK(15$oR?l+!Euw}z;|aS?*I+=(kop5Mbl*}AJz7UZaAdUn zBC8nR(dhi|wb8X>C0jrMZDp1|?m6|!_|0!LYuQ1bvyEWGsSUVHRg;6RHJxBpvElMx zV@onH<82XnzC`l6gqp2qF4Fk$|C)S3n99g{n(rr#4b8t}xa?7B&nT>ptAzsZoK!rQ zRSGEzoji4}-EfEwI%z9D)UzDLZ!M3o?AC6u5A7TzTEQ1i8o8l4e+>;gj+BrZY6lrZ z?9Q$FTaHJqU9(B3QtcnYHJp)Vf66_lYmijRg+;UOCz$XC-(a#4=I+yd=Rf67B{!uH zddXa_dtyC1F+Sm7S0H0(G4oNJQx1KGvu)>pmx}5nlI7LD4^LRH)!eS=jy3jArncfP zAS*b9&rlIEFG-CgKcdu|tps_&rRH9$97kx5Px^V(fEiY5JqJgr{`P8$$B2JKF8C5j zOR;~lA`b_@QokC>g|SsX%Bzxrkwa6b^rUP3XeqZ=!g2K#HJjYE)ksIgv-}KP`@q`sETUZrW@&4w z@xrr&YdKm>Y-|%WR-x$Q1SxA%!C$+9-n~A(D#BVkbkdDp23%^Z94fhR?_hFtr(A$u zS?l!a#qgNU>V*@4s$J=>D-DT*p>KK{lm4P3W4JN74D~GJCav#m@1|K>sG3Pp8F)h+ z*}H>br2w+VV`y-#+ecx?SmFrk_H43OWPHOJEJL?qPYi*=$d>rRQx+|DK@bUJcPQq-{)x#`qLzzl+-kZ> zxohZuIi~#c15N7c#t@AN%O9lu;<4i!^3}vY>+jqM_W?KtR%AnkxJ3@#7W>D}MvV4lFrlRxA#o#hAG0C01s|8qZuq=vz?@F#yzypIHF(RQpCUdd3vDwE?-^ z@e?q)f-}HMIGV(|Bf{un@};!0g5?g~p=&U3f6leb&3*z{CGN;jV79}}Ub}PaE-Jty zpk}&F#bM}1HPgM4+>BnBjKf~{5WI6og)aXFy;$|iP8~;4{@yl5b9BTFSA1pt_9v=Z zY}l=J@WgvZOg}ymT4MSi*xIF2Y>q^h!1*r86Rd5V# zMa7P_NfG-Z9%l@LI*z3mI#q#rk~^G&pf5~}LJLBYI&qIcNJ59-aM7`D#Yq2sJnS<& z3G%w4%7ZSG@|A$JGtsNCc;1-Di&WfMal;+{`DBG3hq;qqcy(6%vl}jX$9e6wlz7Oz zGI20}p6cbnOqatUQ_4F|9z!5EeaG31v<$Xz-s0!MO_!VV=W9z+P^st)gsUcxF5;3l zw{1D7PTdu0#tCtqo{d+Dgs|?ex68!Xg}*kaLBtIe8Ov_)aLmJT)yY_!ZxC)Ms*uYy zl+%%0R(_|W0y>q$0oFP{f)HnNCAWhb|Al$(ys#CrVB9d2VWTyk1v;COJvj1Psy z%;gV!B`(M=K-;_n7oFyEOk_IV;k3gDhoeSPrN@Vtm1w|I?5vdcnZ6DMHm%eMQk96-0Sbd>$2-xNbz82JQ3hebk*s9DXSW&V|#bYUF&X4r*p6jXjrocuGbQJeIbF; z|ETMc!4Iy8AUx6>_Y%*wF-aP5 zi=~19hY7h@#HN-N(5eZympN0Kc%` zcUZOqAnXu6RW}C)8m8MXp$B*ebH&6iJ7jj^;-@?&4}BF+kE6R+_l$$gnCN^V$4PZv zX9;o)8M+kjqF$x<2O`)Rvjcdtn-+l^WqY246Hk3QaqF87HS_>ieU;_YYpovhnm&Xd zw6Fk8u-GZF3=D)!9k7E=F=vLHs2P(6kcI@zratUeCT6u%esX57LA+M8|8}D#xv=C% z)O@p-Ah$j#guEE86qV&tGH=!|I?*0VP|4TDfMt!5^E2wc*{$$F?u+H8*}g<;hqPqF{80hC*^jQ|bELCipyFmN zGbNKqU(f4D-pTtyo;qdOVYSXhsH?IjPOzW+!1*SKa2Zp$a=;v-x6|yXYpCdR z`Mug88PG@_&Wh$|7-(eysa-M+aI`hdekT;Ui7Yf$O*IMy&2v9I{YmMz+GxXwrvIpy?CQst>>7}KdH z`r;_soZKVql^bDIcv_o!!oAW-0pf^~?Q<4RZl7>(R;3kYQE%mEioCKGE~uf$cEYZr z8xvZ4Z(quP*TWJ~NEtr07m}JKmGU$g@7#jai z+iNH8{c#`6-7%VqOMWfz->OPu^b^6aY9!I*F(f8J6OMNm)U;uA1}}l)_7_L2nlZoV z&g-R|>|wLf_;}kYu$djJRyWCxSz5KdS&?StmU7K|e<^x#G|!UBq;Tjp*=lahzw|In zWoBnivSCc!AupK>7X)j;F*2LBZOn5?+K~`!q0^&(Du`6>VFiStz6C<0M;GHt7*q359GEL6$b}Bo{GUe=RHYN}%Ku+hd67>)-e$if%2j!dm=kGg*X zxytQP*1Y+P&V*leO&aeHqF&ELCXncTyoaZf%+5exAM!<(Qj^%-OS_N^TyC+dJOd4!25R@C`0*7RFV^3LP3XE7m_fal~O4Qk}$s$37zOG##V zB8NUq6B+%^{tB`z>`OcHkc5VERoMP1?z`?QA@2J~{WCYYd{4VQ} zSDi2Vu&pYRYQ9mhSQ)KfdaU+A!6$4%#SNmv&#ByinHE&g-l$|w+nCGEUnN@Zkh?X4 z#^dQ^h3ZX%2X~=PiXW*T?V$B1?=!;gN)c>x)~S~BYj-Tq<^y$a-qG#q_%d63G4{zb zdpT2^mDMFZsp=!BpjW#C9OWD$S6`=no1auxlIlE(L!{*3uU0zZiDVr@F=auh6oF}B zQr@{{pp`TM$DcMo!Kyz8K25BOh}UEXp{_ElC;7(7_sr-FISNO)j({vZX9oER`i1jV zcb`0c=B&IY&q#N_h)dpSI{|ApXtnYmqjd+D6TY=dEe+I$No6VLg)tNGDmc9)2@OLr ztDOKPQM1w)o7hQ0RgcuDU_>t zERBSlf1e+(WP)nI{DNLaM*8u^=KZwudo$R2%k#qJC~#s#K{rvl8?2bp-9U{@_+ocl9{V%j?nl)j(529LZn9wF z8;wTu+b$p5HSoK?fnWQ;e*tPhmA_NGH2cupnXtZOe~!;U&vhvvH0hg;jk`4}oc6w- zqs!~yJ|XIy!|Q|Ijv7k8qc7}9hHQ)vH-wGnx8r#v2-1Ha2+lmYjUo5Naz6u%E6i=U zL>%PnxbndP^?g^g+pXNBB;o4P{bBha-LCF} zR~_*^^nG}h^H85!E2=MlM@O(4wzO-=;M(ru_?DVxT4g-k8%8q&_Z(!SW<3quAC#TF zVH0%}VQi3IQTreYrb=H%Uc*+Vxq3ZUx2JV z6T#nIDje936EQwdN#*fSX$Iu@%s6CgCu|ey@5-xpy083}#WrY$LbFK)VvXWe0zR&N zRX|ZR4Ki)ss_EDa;S>}Gy?2~rVk?y)xUMk~PE~*QQ&jY>0Nl22nGSXY2Nfv93t`Zm zXmV7jv}HJw%REyeRno|g+`%-6NNSOD2K#0o-Gbm+?q*q(v~(d&P;!lWM;$pt%F9Y^ z{XighvIkk1mr-62xh`Q49|@MaOTJrHw+@_fI`q!H!xBUMmWOzg7f*hjG}vv_&Mzcc zl0kka$gDO2_EmytyK`dwkbbe^;x^aHh&|k@Ce&p)NJFbKM?Ur%^n8*FD*#N>+9-%!sGS7}5D55V0yjDXy7>);m z^66AL91_#j{E9K2$(>I>?a>wkB8HVnKqG{^-YCj)AObKOXJ|DdExcTZimqf1kr`{M zvy_*y%^x-lVSYqL`KYj32@f3Sf^}jJrN+qT7)>T!vDVNoV;$ zA#>>(3IUWgBSEG(!W0t2K!zpAH1@UXhoH^^Zwua6tVNSnb)H`#T~N(N7)0*y10IJG z@H+uU;~kdxCPB2-AzpUrRdfS#ON@+H!4!&eG0bsRl?Em*+cb13zsRFb-GH>Md=U^) zelaUeg4kmcDI9s8B_Uluw1uO1xT;H0m#KB)cQG(r)|~Cw{jbER$fyXq7_VRX>r$3I zm8c%BYp1E+?s~OSq+tt+599bkO(;M^f>4n*NWqw3+`(tl2@&={0HC_TvBaUXO-)Ir zJ#BFvG2My$2qpA&lsA2*0a?2DNRS~40c{>#Blr9neXMN**43|cqS*3k*jip4<%33h zFV&D0!OKk4TJ%<;w4&573-8LwMjTqL#}kKzjis3vmZM7sVAE6B@kY#79Cg@B0u zk@8NgiK_(dr&-+6gxpv%lN^yg)uo{$6sRvROMQj-ntg_9^}j;+6(CbJhRM{FDAtgv zS=FR*p_+}W6YgPy7`#b4kp!prTo#X)e4&u_=*Bc4jYf>MX+mbbk}srrrE=4)Tzr8G;_nJI8yroyCg}r%6pcQJMl00= za_t^+JNanq&Z3)wzOyQ>o26;h1hR)iWItb;m;dvR1d(gfukvjx*I>St-_(`l`9k(Y zsE_V(mP(cI#S$x6`qQgN+TT9CFg+a`4ffl2F z{VSws9MYj_8*-(WR9vovle1XS9W0p3;^Z5zN!!z%HxkGqUnpd1b(jtcH*=q*;ft+C93?_ z4+mWP%Kd9nmVLiFxIj5ES+u!J*R!oZvAJ!A4I>($fpN^RLwr76Prhu^0oU|Vo8v%# zUWoQa$Std6(Z(1EGLapDSyUIIX9TolZn=_oXoC&8bzjWpkPj4a7Q>|yL~AdYSG*JS-MQ%lP6UQM|?@hqbS=obE;K&38DW8wEnQ-X?b>NaGh{DJ%tqCm~dbRo;_ zS=Lw|uMa-Cr350!|EUHoUMuTLo4zne=jJhe)5%IWa0&}6jl0kg7dA1g_!%#uX~)hy z48lv?%51fycFV&Ro$Wf)yIm$MT-*p7IEAXw?JXDGIUmNsbet8f>5z`Ab+vhucez>I zp%E!rfV!HGaw>bvl9*&7^`G7E&V5X= zK?UB?4DKg64Wj zB5Tve&E&5iNiEBEGO2BeUQUW#%D;F@C2J`mmmc#Yw$it#!85T_;dMl@Z(5pH<_Sw> zIdzr~6oN23%)B))XuF*5gy`DCqRmBN)uXh%lBE3C_W&{_k6M`Gp5>HOhlolw-&qj_ zy3}LdeMW(a_*bT1*d;6HLvl+0pUi@}uDhURiB?=K9Z!71sRPOGrR zu3Bt9AGoa7LY%^dxoT)t$VWZA&>N68c$ZjMt?tw=gNdx&;CHiqX->snh6Y&keyQM# zmqjsF9^Y17j>u)PgF0RN91H;xMJE*GCj2fxM}1g>I|3_TO~=!ffGoPCk9wzUV?$BO zyNqjBafjQ@CPRpbD>btuhfjhizVVS~#q|ZmaUaaede07~0y6bX zIYA_4OK7!e#=OoMH*>#!Bz;_|KwMup&XH^M=5w^v-JvzGyoIkq%n}Rq)SV#ioD?ok zE6?i0V??QZ7pKh)t3mqVPS9EqXO47nbkYwET-Zh-tQx*>Y7&%x{d8%9iQDFAa@MQi zmS}bK%Ge4I^c-|)$o&TRt$n>ybMU_BD+J4Y3>M0f+s&yukGS<}0#Oay_tg$CNL!sfuL=QOx9Bx_M0^CyA!ynB!d}HAqf4d^p7b- zTBH#=d4F0UG(!`la8o_Igu_+bQWjQViW~{298%sC8jn|>Lmrs$h;*cf>=J=aD^be` z$~*LkDdcy8JP-Fd4jD{_CQ*vmx+4qXgD_5JDw)WfsL|uJO_3DwL1ZX)<0xL8&#-tb zA}mUE1?YB1GO9 z<6EKUJTgE|%*MyHDlb1OL>P|QQy?47nNrv^LAcYKO~UWwB0+7$r3~I27^<&iG4YsR zNgX$TdPFa>z?Q~K5V%>OW#yKB9P&FLnA_(K;r$hfZie_EvE15ZY?Co z>u+T;xz{d{#qi>2`PYwttiw#Fce*QfaeoEyo8JuNE;CvM%ZMgMDp`pe=hXw?sq=p% z4e>;7QV0(s&FkXGPAc+dਣGzIeuqZ=#ecFhOQ2SA05}q}Dnl@WqOoC$*X@T`N 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 Q)SZ(Zj*?PLUL5ZK0O`wUJpcdz diff --git a/lib/sphinx4-5prealpha-src/doc/speaker_adaptation.txt b/lib/sphinx4-5prealpha-src/doc/speaker_adaptation.txt deleted file mode 100755 index 89fdc0f1..00000000 --- a/lib/sphinx4-5prealpha-src/doc/speaker_adaptation.txt +++ /dev/null @@ -1,88 +0,0 @@ -Speaker Adaptation with MLLR Transformation - -Unsupervised speaker adaptation for Sphinx4 - -For building an improved acoustic model there are two methods. One of them -needs to collect data from a speaker and train the acoustic model set. Thus -using the speaker's characteristics the recognition will be more accurately. -The disadvantage of this method is that it needs a large amount of data to be -collected to have a sufficient model accuracy. - -The other method, when the amount of data available is small from a new -speaker, is to collect them and by using an adaptation technique to adapt the -model set to better fit the speaker's characteristics. - -The adaptation technique used is MLLR (maximum likelihood linear regression) -transform that is applied depending on the available data by generating one or -more transformations that reduce the mismatch between -an initial model set and the adaptation data. There is only one transformation -when the amount of available data is too small and is called global adaptation -transform. The global transform is applied to every Gaussian component in the -model set. Otherwise, when the amount of adaptation data is large, the number -of transformations is increasing and each transformation is applied to a -certain cluster of Gaussian components. - -To be able to decode with an adapted model there are two important classes that -should be imported: - -import edu.cmu.sphinx.decoder.adaptation.Stats; -import edu.cmu.sphinx.decoder.adaptation.Transform; - -Stats Class estimates a MLLR transform for each cluster of data and the -transform will be applied to the corresponding cluster. You can choose the -number of clusters by giving the number as argument to -createStats(nrOfClusters) in Stats method. The method will return an object -that contains the loaded acoustic model and the number of clusters. This -important to collect counts from each Result object because based on them we -will perform the estimation of the MLLR transformation. - -Before starting collect counts it is important to have all Gaussians clustered. -So, createStats(nrOfClusters) will generate an ClusteredDensityFileData object -to prepare the Gaussians. ClusteredDensityFileData class performs the clustering -using the "k-means" clustering algorithm. The k-means clustering algorithm aims -to partition the Gaussians into k clusters in which each Gaussian belongs -to the cluster with the nearest mean. It is interesting to know that the problem -of clustering is computationally difficult, so the heuristic used is the -Euclidean criterion. - -The next step is to collect counts from each Result object and store them -separately for each cluster. Here, the matrices regLs and regRs used in -computing the transformation are filled. Transform class performs the actual -transformation for each cluster. Given the counts previously gathered and the -number of clusters, the class will compute the two matrices A (the -transformation matrix) B (the bias vector) that are tied across the Gaussians -from the corresponding cluster. A Transform object will contain all the -transformations computed for an utterance. To use the adapted acoustic model it -is necessary to update the Sphinx3Loader which is responsible for -loading the files from the model. When updating occurs, the acoustic model is -already loaded, so setTransform(transform) method will replace the old means -with the new ones. - -Now, that we have the theoretical part, let’s see the practical part. Here is -how you create and use a MLLR transformation: - -Stats stats = recognizer.createStats(1); -recognizer.startRecognition(stream); -while ((result = recognizer.getResult()) != null) { - stats.collect(result); -} -recognizer.stopRecognition(); - -// Transform represents the speech profile -Transform transform = stats.createTransform(); -recognizer.setTransform(transform); - -After setting the transformation to the StreamSpeechRecognizer object, -the recognizer is ready to decode using the new means. The process -of recognition is the same as you decode with the general acoustic model. -When you create and set a transformation is like you create a -new acoustic model with speaker's characteristics, thus the accuracy -will be better. - -For further decodings you can store the transformation of a speaker in a file -by performing store(“FilePath”, 0) in Transform object. - -If you have your own transformation known as mllr_matrix previously generated -with Sphinx4 or with another program, you can load the file by performing -load(“FilePath”) in Transform object and then to set it to an Recognizer object. - diff --git a/lib/sphinx4-5prealpha-src/license.terms b/lib/sphinx4-5prealpha-src/license.terms deleted file mode 100755 index b0affbf3..00000000 --- a/lib/sphinx4-5prealpha-src/license.terms +++ /dev/null @@ -1,40 +0,0 @@ -Copyright 1999-2015 Carnegie Mellon University. -Portions Copyright 2002-2008 Sun Microsystems, Inc. -Portions Copyright 2002-2008 Mitsubishi Electric Research Laboratories. -Portions Copyright 2013-2015 Alpha Cephei, Inc. - -All Rights Reserved. Use is subject to license terms. - -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. Original authors' names are not deleted. - -4. The authors' names are not used to endorse or promote products - derived from this software without specific prior written - permission. - -This work was supported in part by funding from the Defense Advanced -Research Projects Agency and the National Science Foundation of the -United States of America, the CMU Sphinx Speech Consortium, and -Sun Microsystems, Inc. - -CARNEGIE MELLON UNIVERSITY, SUN MICROSYSTEMS, INC., MITSUBISHI -ELECTRONIC RESEARCH LABORATORIES AND THE CONTRIBUTORS TO THIS WORK -DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -CARNEGIE MELLON UNIVERSITY, SUN MICROSYSTEMS, INC., MITSUBISHI -ELECTRONIC RESEARCH LABORATORIES NOR THE CONTRIBUTORS BE LIABLE FOR -ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT -OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/lib/sphinx4-5prealpha-src/pom.xml b/lib/sphinx4-5prealpha-src/pom.xml deleted file mode 100755 index 117116ad..00000000 --- a/lib/sphinx4-5prealpha-src/pom.xml +++ /dev/null @@ -1,88 +0,0 @@ - - 4.0.0 - - - org.sonatype.oss - oss-parent - 7 - - - edu.cmu.sphinx - sphinx4-parent - 1.0-SNAPSHOT - pom - - Sphinx4 - http://cmusphinx.sourceforge.net - - - sphinx4-core - sphinx4-data - sphinx4-samples - - - - - org.testng - testng - 6.8.8 - test - - - org.hamcrest - hamcrest-library - 1.3 - test - - - - - UTF-8 - svn.code.sf.net/p/cmusphinx/code/trunk/sphinx4 - - - - scm:svn:http://${project.scm.root} - scm:svn:svn+ssh://${project.scm.root} - http://${project.scm.root} - - - - - - org.apache.maven.plugins - maven-source-plugin - 2.2.1 - - - attach-sources - package - - jar - - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.9.1 - - - attach-javadocs - package - - jar - - - - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/pom.xml b/lib/sphinx4-5prealpha-src/sphinx4-core/pom.xml deleted file mode 100755 index 57764718..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/pom.xml +++ /dev/null @@ -1,34 +0,0 @@ - - 4.0.0 - - - edu.cmu.sphinx - sphinx4-parent - 1.0-SNAPSHOT - - - sphinx4-core - jar - - Sphinx4 core - - - - - org.apache.commons - commons-math3 - 3.2 - - - - edu.cmu.sphinx - sphinx4-data - 1.0-SNAPSHOT - test - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/LongTextAligner.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/LongTextAligner.java deleted file mode 100755 index 6b2f31f2..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/LongTextAligner.java +++ /dev/null @@ -1,355 +0,0 @@ -/* - * Copyright 2014 Alpha Cephei Inc. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.alignment; - -import static java.lang.Math.abs; -import static java.lang.Math.max; -import static java.lang.Math.min; -import static java.util.Arrays.fill; -import static java.util.Collections.emptyList; - -import java.util.*; - -import edu.cmu.sphinx.util.Range; -import edu.cmu.sphinx.util.Utilities; - -/** - * - * @author Alexander Solovets - */ -public class LongTextAligner { - - private final class Alignment { - - public final class Node { - - private final int databaseIndex; - private final int queryIndex; - - private Node(int row, int column) { - this.databaseIndex = column; - this.queryIndex = row; - } - - public int getDatabaseIndex() { - return shifts.get(databaseIndex - 1); - } - - public int getQueryIndex() { - return indices.get(queryIndex - 1); - } - - public String getQueryWord() { - if (queryIndex > 0) - return query.get(getQueryIndex()); - return null; - } - - public String getDatabaseWord() { - if (databaseIndex > 0) - return reftup.get(getDatabaseIndex()); - return null; - } - - public int getValue() { - if (isBoundary()) - return max(queryIndex, databaseIndex); - return hasMatch() ? 0 : 1; - } - - public boolean hasMatch() { - return getQueryWord().equals(getDatabaseWord()); - } - - public boolean isBoundary() { - return queryIndex == 0 || databaseIndex == 0; - } - - public boolean isTarget() { - return queryIndex == indices.size() && - databaseIndex == shifts.size(); - } - - public List adjacent() { - List result = new ArrayList(3); - if (queryIndex < indices.size() && - databaseIndex < shifts.size()) { - result.add(new Node(queryIndex + 1, databaseIndex + 1)); - } - if (databaseIndex < shifts.size()) { - result.add(new Node(queryIndex, databaseIndex + 1)); - } - if (queryIndex < indices.size()) { - result.add(new Node(queryIndex + 1, databaseIndex)); - } - - return result; - } - - @Override - public boolean equals(Object object) { - if (!(object instanceof Node)) - return false; - - Node other = (Node) object; - return queryIndex == other.queryIndex && - databaseIndex == other.databaseIndex; - } - - @Override - public int hashCode() { - return 31 * (31 * queryIndex + databaseIndex); - } - - @Override - public String toString() { - return String.format("[%d %d]", queryIndex, databaseIndex); - } - } - - private final List shifts; - private final List query; - private final List indices; - private final List alignment; - - public Alignment(List query, Range range) { - this.query = query; - indices = new ArrayList(); - Set shiftSet = new TreeSet(); - for (int i = 0; i < query.size(); i++) { - if (tupleIndex.containsKey(query.get(i))) { - indices.add(i); - for (Integer shift : tupleIndex.get(query.get(i))) { - if (range.contains(shift)) - shiftSet.add(shift); - } - } - } - - shifts = new ArrayList(shiftSet); - - final Map cost = new HashMap(); - PriorityQueue openSet = new PriorityQueue(1, new Comparator() { - @Override - public int compare(Node o1, Node o2) { - return cost.get(o1).compareTo(cost.get(o2)); - } - }); - Collection closedSet = new HashSet(); - Map parents = new HashMap(); - - Node startNode = new Node(0, 0); - cost.put(startNode, 0); - openSet.add(startNode); - - while (!openSet.isEmpty()) { - Node q = openSet.poll(); - if (closedSet.contains(q)) - continue; - - if (q.isTarget()) { - List backtrace = new ArrayList(); - while (parents.containsKey(q)) { - if (!q.isBoundary() && q.hasMatch()) - backtrace.add(q); - q = parents.get(q); - } - alignment = new ArrayList(backtrace); - Collections.reverse(alignment); - return; - } - - closedSet.add(q); - for (Node nb : q.adjacent()) { - - if (closedSet.contains(nb)) - continue; - - // FIXME: move to appropriate location - int l = abs(indices.size() - shifts.size() - q.queryIndex + - q.databaseIndex) - - abs(indices.size() - shifts.size() - - nb.queryIndex + - nb.databaseIndex); - - Integer oldScore = cost.get(nb); - Integer qScore = cost.get(q); - if (oldScore == null) - oldScore = Integer.MAX_VALUE; - if (qScore == null) - qScore = Integer.MAX_VALUE; - - int newScore = qScore + nb.getValue() - l; - if (newScore < oldScore) { - cost.put(nb, newScore); - openSet.add(nb); - parents.put(nb, q); - } - } - } - - alignment = emptyList(); - } - - public List getIndices() { - return alignment; - } - } - - private final int tupleSize; - private final List reftup; - private final HashMap> tupleIndex; - private List refWords; - - /** - * Constructs new text aligner that servers requests for alignment of - * sequence of words with the provided database sequence. Sequences are - * aligned by tuples comprising one or more subsequent words. - * - * @param words list of words forming the database - * @param tupleSize size of a tuple, must be greater or equal to 1 - */ - public LongTextAligner(List words, int tupleSize) { - assert words != null; - assert tupleSize > 0; - - this.tupleSize = tupleSize; - this.refWords = words; - - int offset = 0; - reftup = getTuples(words); - - tupleIndex = new HashMap>(); - for (String tuple : reftup) { - ArrayList indexes = tupleIndex.get(tuple); - if (indexes == null) { - indexes = new ArrayList(); - tupleIndex.put(tuple, indexes); - } - indexes.add(offset++); - } - } - - /** - * Aligns query sequence with the previously built database. - * @param query list of words to look for - * - * @return indices of alignment - */ - public int[] align(List query) { - return align(query, new Range(0, refWords.size())); - } - - /** - * Aligns query sequence with the previously built database. - * @param words list words to look for - * @param range range of database to look for alignment - * - * @return indices of alignment - */ - public int[] align(List words, Range range) { - - if (range.upperEndpoint() - range.lowerEndpoint() < tupleSize || words.size() < tupleSize) { - return alignTextSimple(refWords.subList(range.lowerEndpoint(), range.upperEndpoint()), words, range.lowerEndpoint()); - } - - int[] result = new int[words.size()]; - fill(result, -1); - int lastIndex = 0; - for (Alignment.Node node : new Alignment(getTuples(words), range) - .getIndices()) { - // for (int j = 0; j < tupleSize; ++j) - lastIndex = max(lastIndex, node.getQueryIndex()); - for (; lastIndex < node.getQueryIndex() + tupleSize; ++lastIndex) - result[lastIndex] = node.getDatabaseIndex() + lastIndex - - node.getQueryIndex(); - } - return result; - } - - /** - * Makes list of tuples of the given size out of list of words. - * - * @param words words - * @return list of tuples of size {@link #tupleSize} - */ - private List getTuples(List words) { - List result = new ArrayList(); - LinkedList tuple = new LinkedList(); - - Iterator it = words.iterator(); - for (int i = 0; i < tupleSize - 1; i++) { - tuple.add(it.next()); - } - while (it.hasNext()) { - tuple.addLast(it.next()); - result.add(Utilities.join(tuple)); - tuple.removeFirst(); - } - return result; - } - - static int[] alignTextSimple(List database, List query, - int offset) { - int n = database.size() + 1; - int m = query.size() + 1; - int[][] f = new int[n][m]; - - f[0][0] = 0; - for (int i = 1; i < n; ++i) { - f[i][0] = i; - } - - for (int j = 1; j < m; ++j) { - f[0][j] = j; - } - - for (int i = 1; i < n; ++i) { - for (int j = 1; j < m; ++j) { - int match = f[i - 1][j - 1]; - String refWord = database.get(i - 1); - String queryWord = query.get(j - 1); - if (!refWord.equals(queryWord)) { - ++match; - } - int insert = f[i][j - 1] + 1; - int delete = f[i - 1][j] + 1; - f[i][j] = min(match, min(insert, delete)); - } - } - - --n; - --m; - int[] alignment = new int[m]; - Arrays.fill(alignment, -1); - while (m > 0) { - if (n == 0) { - --m; - } else { - String refWord = database.get(n - 1); - String queryWord = query.get(m - 1); - if (f[n - 1][m - 1] <= f[n - 1][m - 1] - && f[n - 1][m - 1] <= f[n][m - 1] - && refWord.equals(queryWord)) { - alignment[--m] = --n + offset; - } else { - if (f[n - 1][m] < f[n][m - 1]) { - --n; - } else { - --m; - } - } - } - } - - return alignment; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/SimpleTokenizer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/SimpleTokenizer.java deleted file mode 100755 index f0bfb654..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/SimpleTokenizer.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2014 Alpha Cephei Inc. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ - -package edu.cmu.sphinx.alignment; - -import java.util.Arrays; -import java.util.List; - -public class SimpleTokenizer implements TextTokenizer { - public List expand(String text) { - - text = text.replace('’', '\''); - text = text.replace('‘', ' '); - text = text.replace('”', ' '); - text = text.replace('“', ' '); - text = text.replace('"', ' '); - text = text.replace('»', ' '); - text = text.replace('«', ' '); - text = text.replace('–', '-'); - text = text.replace('—', ' '); - text = text.replace('…', ' '); - - text = text.replace(" - ", " "); - text = text.replaceAll("[/_*%]", " "); - text = text.toLowerCase(); - - String[] tokens = text.split("[.,?:!;()]"); - return Arrays.asList(tokens); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/TextTokenizer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/TextTokenizer.java deleted file mode 100755 index 53dd57d4..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/TextTokenizer.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2014 Alpha Cephei Inc. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.alignment; - -import java.util.List; - -public interface TextTokenizer { - - - /** - * Cleans the text and returns the list of lines - * - * @param text Input text - * @return a list of lines in the text. - */ - List expand(String text); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/Token.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/Token.java deleted file mode 100755 index 1f033ac8..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/Token.java +++ /dev/null @@ -1,158 +0,0 @@ -/** - * Portions Copyright 2001 Sun Microsystems, Inc. - * Portions Copyright 1999-2001 Language Technologies Institute, - * Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.alignment; - -/** - * Contains a parsed token from a Tokenizer. - */ -public class Token { - - private String token = null; - private String whitespace = null; - private String prepunctuation = null; - private String postpunctuation = null; - private int position = 0; // position in the original input text - private int lineNumber = 0; - - /** - * Returns the whitespace characters of this Token. - * - * @return the whitespace characters of this Token; null if this Token does - * not use whitespace characters - */ - public String getWhitespace() { - return whitespace; - } - - /** - * Returns the prepunctuation characters of this Token. - * - * @return the prepunctuation characters of this Token; null if this Token - * does not use prepunctuation characters - */ - public String getPrepunctuation() { - return prepunctuation; - } - - /** - * Returns the postpunctuation characters of this Token. - * - * @return the postpunctuation characters of this Token; null if this Token - * does not use postpunctuation characters - */ - public String getPostpunctuation() { - return postpunctuation; - } - - /** - * Returns the position of this token in the original input text. - * - * @return the position of this token in the original input text - */ - public int getPosition() { - return position; - } - - /** - * Returns the line of this token in the original text. - * - * @return the line of this token in the original text - */ - public int getLineNumber() { - return lineNumber; - } - - /** - * Sets the whitespace characters of this Token. - * - * @param whitespace the whitespace character for this token - */ - public void setWhitespace(String whitespace) { - this.whitespace = whitespace; - } - - /** - * Sets the prepunctuation characters of this Token. - * - * @param prepunctuation the prepunctuation characters - */ - public void setPrepunctuation(String prepunctuation) { - this.prepunctuation = prepunctuation; - } - - /** - * Sets the postpunctuation characters of this Token. - * - * @param postpunctuation the postpunctuation characters - */ - public void setPostpunctuation(String postpunctuation) { - this.postpunctuation = postpunctuation; - } - - /** - * Sets the position of the token in the original input text. - * - * @param position the position of the input text - */ - public void setPosition(int position) { - this.position = position; - } - - /** - * Set the line of this token in the original text. - * - * @param lineNumber the line of this token in the original text - */ - public void setLineNumber(int lineNumber) { - this.lineNumber = lineNumber; - } - - /** - * Returns the string associated with this token. - * - * @return the token if it exists; otherwise null - */ - public String getWord() { - return token; - } - - /** - * Sets the string of this Token. - * - * @param word the word for this token - */ - public void setWord(String word) { - token = word; - } - - /** - * Converts this token to a string. - * - * @return the string representation of this object - */ - public String toString() { - StringBuffer fullToken = new StringBuffer(); - - if (whitespace != null) { - fullToken.append(whitespace); - } - if (prepunctuation != null) { - fullToken.append(prepunctuation); - } - if (token != null) { - fullToken.append(token); - } - if (postpunctuation != null) { - fullToken.append(postpunctuation); - } - return fullToken.toString(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/USEnglishTokenizer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/USEnglishTokenizer.java deleted file mode 100755 index 6dd6a1dd..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/USEnglishTokenizer.java +++ /dev/null @@ -1,1084 +0,0 @@ -/** - * Portions Copyright 2001-2003 Sun Microsystems, Inc. - * Portions Copyright 1999-2001 Language Technologies Institute, - * Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.alignment; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import edu.cmu.sphinx.alignment.tokenizer.CharTokenizer; -import edu.cmu.sphinx.alignment.tokenizer.DecisionTree; -import edu.cmu.sphinx.alignment.tokenizer.FeatureSet; -import edu.cmu.sphinx.alignment.tokenizer.Item; -import edu.cmu.sphinx.alignment.tokenizer.NumberExpander; -import edu.cmu.sphinx.alignment.tokenizer.PrefixFSM; -import edu.cmu.sphinx.alignment.tokenizer.PronounceableFSM; -import edu.cmu.sphinx.alignment.tokenizer.Relation; -import edu.cmu.sphinx.alignment.tokenizer.SuffixFSM; -import edu.cmu.sphinx.alignment.tokenizer.Utterance; -import edu.cmu.sphinx.alignment.tokenizer.WordRelation; - -/** - * Provides the definitions for US English whitespace, punctuations, - * prepunctuation, and postpunctuation symbols. It also contains a set of - * Regular Expressions for the US English language. With regular expressions, - * it specifies what are whitespace, letters in the alphabet, uppercase and - * lowercase letters, alphanumeric characters, identifiers, integers, doubles, - * digits, and 'comma and int'. - * - * It translates the following code from flite: src/regex/cst_regex.c - * lang/usenglish/us_text.c - */ -class UsEnglish { - /** default whitespace regular expression pattern */ - public static final String RX_DEFAULT_US_EN_WHITESPACE = "[ \n\t\r]+"; - /** default letter regular expression pattern */ - public static final String RX_DEFAULT_US_EN_ALPHABET = "[A-Za-z]+"; - /** default uppercase regular expression pattern */ - public static final String RX_DEFAULT_US_EN_UPPERCASE = "[A-Z]+"; - /** default lowercase regular expression pattern */ - public static final String RX_DEFAULT_US_EN_LOWERCASE = "[a-z]+"; - /** default alpha-numeric regular expression pattern */ - public static final String RX_DEFAULT_US_EN_ALPHANUMERIC = "[0-9A-Za-z]+"; - /** default identifier regular expression pattern */ - public static final String RX_DEFAULT_US_EN_IDENTIFIER = - "[A-Za-z_][0-9A-Za-z_]+"; - /** default integer regular expression pattern */ - public static final String RX_DEFAULT_US_EN_INT = "-?[0-9]+"; - /** default double regular expression pattern */ - public static final String RX_DEFAULT_US_EN_DOUBLE = - "-?(([0-9]+\\.[0-9]*)|([0-9]+)|(\\.[0-9]+))([eE][---+]?[0-9]+)?"; - /** default integer with commas regular expression pattern */ - public static final String RX_DEFAULT_US_EN_COMMAINT = - "[0-9][0-9]?[0-9]?[,']([0-9][0-9][0-9][,'])*[0-9][0-9][0-9](\\.[0-9]+)?"; - /** default digits regular expression pattern */ - public static final String RX_DEFAULT_US_EN_DIGITS = "[0-9][0-9]*"; - /** default dotted abbreviation regular expression pattern */ - public static final String RX_DEFAULT_US_EN_DOTTED_ABBREV = - "([A-Za-z]\\.)*[A-Za-z]"; - /** default ordinal number regular expression pattern */ - public static final String RX_DEFAULT_US_EN_ORDINAL_NUMBER = - "[0-9][0-9,]*(th|TH|st|ST|nd|ND|rd|RD)"; - /** default has-vowel regular expression */ - public static final String RX_DEFAULT_HAS_VOWEL = ".*[aeiouAEIOU].*"; - /** default US money regular expression */ - public static final String RX_DEFAULT_US_MONEY = "\\$[0-9,]+(\\.[0-9]+)?"; - /** default -illion regular expression */ - public static final String RX_DEFAULT_ILLION = ".*illion"; - /** default digits2dash (e.g. 999-999-999) regular expression */ - public static final String RX_DEFAULT_DIGITS2DASH = - "[0-9]+(-[0-9]+)(-[0-9]+)+"; - /** default digits/digits (e.g. 999/999) regular expression */ - public static final String RX_DEFAULT_DIGITSSLASHDIGITS = "[0-9]+/[0-9]+"; - /** default number time regular expression */ - public static final String RX_DEFAULT_NUMBER_TIME = - "((0[0-2])|(1[0-9])):([0-5][0-9])"; - /** default Roman numerals regular expression */ - public static final String RX_DEFAULT_ROMAN_NUMBER = - "(II?I?|IV|VI?I?I?|IX|X[VIX]*)"; - /** default drst "Dr. St" regular expression */ - public static final String RX_DEFAULT_DRST = "([dD][Rr]|[Ss][Tt])"; - /** default numess */ - public static final String RX_DEFAULT_NUMESS = "[0-9]+s"; - /** default 7-digit phone number */ - public static final String RX_DEFAULT_SEVEN_DIGIT_PHONE_NUMBER = - "[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]"; - /** default 4-digit number */ - public static final String RX_DEFAULT_FOUR_DIGIT = "[0-9][0-9][0-9][0-9]"; - /** default 3-digit number */ - public static final String RX_DEFAULT_THREE_DIGIT = "[0-9][0-9][0-9]"; - - /** whitespace regular expression pattern */ - public static String RX_WHITESPACE = RX_DEFAULT_US_EN_WHITESPACE; - /** letter regular expression pattern */ - public static String RX_ALPHABET = RX_DEFAULT_US_EN_ALPHABET; - /** uppercase regular expression pattern */ - public static String RX_UPPERCASE = RX_DEFAULT_US_EN_UPPERCASE; - /** lowercase regular expression pattern */ - public static String RX_LOWERCASE = RX_DEFAULT_US_EN_LOWERCASE; - /** alphanumeric regular expression pattern */ - public static String RX_ALPHANUMERIC = RX_DEFAULT_US_EN_ALPHANUMERIC; - /** identifier regular expression pattern */ - public static String RX_IDENTIFIER = RX_DEFAULT_US_EN_IDENTIFIER; - /** integer regular expression pattern */ - public static String RX_INT = RX_DEFAULT_US_EN_INT; - /** double regular expression pattern */ - public static String RX_DOUBLE = RX_DEFAULT_US_EN_DOUBLE; - /** comma separated integer regular expression pattern */ - public static String RX_COMMAINT = RX_DEFAULT_US_EN_COMMAINT; - /** digits regular expression pattern */ - public static String RX_DIGITS = RX_DEFAULT_US_EN_DIGITS; - /** dotted abbreviation regular expression pattern */ - public static String RX_DOTTED_ABBREV = RX_DEFAULT_US_EN_DOTTED_ABBREV; - /** ordinal number regular expression pattern */ - public static String RX_ORDINAL_NUMBER = RX_DEFAULT_US_EN_ORDINAL_NUMBER; - /** has-vowel regular expression */ - public static final String RX_HAS_VOWEL = RX_DEFAULT_HAS_VOWEL; - /** US money regular expression */ - public static final String RX_US_MONEY = RX_DEFAULT_US_MONEY; - /** -illion regular expression */ - public static final String RX_ILLION = RX_DEFAULT_ILLION; - /** digits2dash (e.g. 999-999-999) regular expression */ - public static final String RX_DIGITS2DASH = RX_DEFAULT_DIGITS2DASH; - /** digits/digits (e.g. 999/999) regular expression */ - public static final String RX_DIGITSSLASHDIGITS = - RX_DEFAULT_DIGITSSLASHDIGITS; - /** number time regular expression */ - public static final String RX_NUMBER_TIME = RX_DEFAULT_NUMBER_TIME; - /** Roman numerals regular expression */ - public static final String RX_ROMAN_NUMBER = RX_DEFAULT_ROMAN_NUMBER; - /** drst "Dr. St" regular expression */ - public static final String RX_DRST = RX_DEFAULT_DRST; - /** default numess */ - public static final String RX_NUMESS = RX_DEFAULT_NUMESS; - /** 7-digit phone number */ - public static final String RX_SEVEN_DIGIT_PHONE_NUMBER = - RX_DEFAULT_SEVEN_DIGIT_PHONE_NUMBER; - /** 4-digit number */ - public static final String RX_FOUR_DIGIT = RX_DEFAULT_FOUR_DIGIT; - /** 3-digit number */ - public static final String RX_THREE_DIGIT = RX_DEFAULT_THREE_DIGIT; - - // the following symbols are from lang/usenglish/us_text.c - - /** punctuation regular expression pattern */ - public static final String PUNCTUATION_SYMBOLS = "\"'`.,:;!?(){}[]"; - /** pre-punctuation regular expression pattern */ - public static final String PREPUNCTUATION_SYMBOLS = "\"'`({["; - /** single char symbols regular expression pattern */ - public static final String SINGLE_CHAR_SYMBOLS = ""; - /** whitespace symbols regular expression pattern */ - public static final String WHITESPACE_SYMBOLS = " \t\n\r"; - - /** - * Not constructable - */ - private UsEnglish() {} -} - - -/** - * Converts the Tokens (in US English words) in an Utterance into a list of - * words. It puts the produced list back into the Utterance. Usually, the - * tokens that gets expanded are numbers like "23" (to "twenty" "three"). - *

    - * * It translates the following code from flite:
    - * - * lang/usenglish/us_text.c - * - */ -public class USEnglishTokenizer implements TextTokenizer { - // Patterns for regular expression matching - private static final Pattern alphabetPattern; - private static final Pattern commaIntPattern; - private static final Pattern digits2DashPattern; - private static final Pattern digitsPattern; - private static final Pattern digitsSlashDigitsPattern; - private static final Pattern dottedAbbrevPattern; - private static final Pattern doublePattern; - private static final Pattern drStPattern; - private static final Pattern fourDigitsPattern; - private static final Pattern illionPattern; - private static final Pattern numberTimePattern; - private static final Pattern numessPattern; - private static final Pattern ordinalPattern; - private static final Pattern romanNumbersPattern; - private static final Pattern sevenPhoneNumberPattern; - private static final Pattern threeDigitsPattern; - private static final Pattern usMoneyPattern; - - static { - alphabetPattern = Pattern.compile(UsEnglish.RX_ALPHABET); - commaIntPattern = Pattern.compile(UsEnglish.RX_COMMAINT); - digits2DashPattern = Pattern.compile(UsEnglish.RX_DIGITS2DASH); - digitsPattern = Pattern.compile(UsEnglish.RX_DIGITS); - digitsSlashDigitsPattern = - Pattern.compile(UsEnglish.RX_DIGITSSLASHDIGITS); - dottedAbbrevPattern = Pattern.compile(UsEnglish.RX_DOTTED_ABBREV); - doublePattern = Pattern.compile(UsEnglish.RX_DOUBLE); - drStPattern = Pattern.compile(UsEnglish.RX_DRST); - fourDigitsPattern = Pattern.compile(UsEnglish.RX_FOUR_DIGIT); - Pattern.compile(UsEnglish.RX_HAS_VOWEL); - illionPattern = Pattern.compile(UsEnglish.RX_ILLION); - numberTimePattern = Pattern.compile(UsEnglish.RX_NUMBER_TIME); - numessPattern = Pattern.compile(UsEnglish.RX_NUMESS); - ordinalPattern = Pattern.compile(UsEnglish.RX_ORDINAL_NUMBER); - romanNumbersPattern = Pattern.compile(UsEnglish.RX_ROMAN_NUMBER); - sevenPhoneNumberPattern = - Pattern.compile(UsEnglish.RX_SEVEN_DIGIT_PHONE_NUMBER); - threeDigitsPattern = Pattern.compile(UsEnglish.RX_THREE_DIGIT); - usMoneyPattern = Pattern.compile(UsEnglish.RX_US_MONEY); - } - - // King-like words - private static final String[] kingNames = {"louis", "henry", "charles", - "philip", "george", "edward", "pius", "william", "richard", - "ptolemy", "john", "paul", "peter", "nicholas", "frederick", - "james", "alfonso", "ivan", "napoleon", "leo", "gregory", - "catherine", "alexandria", "pierre", "elizabeth", "mary", "elmo", - "erasmus"}; - - private static final String[] kingTitles = {"king", "queen", "pope", - "duke", "tsar", "emperor", "shah", "caesar", "duchess", "tsarina", - "empress", "baron", "baroness", "sultan", "count", "countess"}; - - // Section-like words - private static final String[] sectionTypes = {"section", "chapter", - "part", "phrase", "verse", "scene", "act", "book", "volume", - "chap", "war", "apollo", "trek", "fortran"}; - - /** - * Here we use a map for constant time matching, instead of using if - * (A.equals(B) || A.equals(C) || ...) to match Strings - */ - private static Map kingSectionLikeMap = new HashMap(); - - private static final String KING_NAMES = "kingNames"; - private static final String KING_TITLES = "kingTitles"; - private static final String SECTION_TYPES = "sectionTypes"; - - static { - for (int i = 0; i < kingNames.length; i++) { - kingSectionLikeMap.put(kingNames[i], KING_NAMES); - } - for (int i = 0; i < kingTitles.length; i++) { - kingSectionLikeMap.put(kingTitles[i], KING_TITLES); - } - for (int i = 0; i < sectionTypes.length; i++) { - kingSectionLikeMap.put(sectionTypes[i], SECTION_TYPES); - } - } - - - // Finite state machines to check if a Token is pronounceable - private PronounceableFSM prefixFSM = null; - private PronounceableFSM suffixFSM = null; - - // List of US states abbreviations and their full names - private static final String[][] usStates = { - {"AL", "ambiguous", "alabama"}, {"Al", "ambiguous", "alabama"}, - {"Ala", "", "alabama"}, {"AK", "", "alaska"}, - {"Ak", "", "alaska"}, {"AZ", "", "arizona"}, - {"Az", "", "arizona"}, {"CA", "", "california"}, - {"Ca", "", "california"}, {"Cal", "ambiguous", "california"}, - {"Calif", "", "california"}, {"CO", "ambiguous", "colorado"}, - {"Co", "ambiguous", "colorado"}, {"Colo", "", "colorado"}, - {"DC", "", "d", "c"}, {"DE", "", "delaware"}, - {"De", "ambiguous", "delaware"}, {"Del", "ambiguous", "delaware"}, - {"FL", "", "florida"}, {"Fl", "ambiguous", "florida"}, - {"Fla", "", "florida"}, {"GA", "", "georgia"}, - {"Ga", "", "georgia"}, {"HI", "ambiguous", "hawaii"}, - {"Hi", "ambiguous", "hawaii"}, {"IA", "", "iowa"}, - {"Ia", "ambiguous", "iowa"}, {"IN", "ambiguous", "indiana"}, - {"In", "ambiguous", "indiana"}, {"Ind", "ambiguous", "indiana"}, - {"ID", "ambiguous", "idaho"}, {"IL", "ambiguous", "illinois"}, - {"Il", "ambiguous", "illinois"}, {"ILL", "ambiguous", "illinois"}, - {"KS", "", "kansas"}, {"Ks", "", "kansas"}, - {"Kans", "", "kansas"}, {"KY", "ambiguous", "kentucky"}, - {"Ky", "ambiguous", "kentucky"}, {"LA", "ambiguous", "louisiana"}, - {"La", "ambiguous", "louisiana"}, - {"Lou", "ambiguous", "louisiana"}, - {"Lous", "ambiguous", "louisiana"}, - {"MA", "ambiguous", "massachusetts"}, - {"Mass", "ambiguous", "massachusetts"}, - {"Ma", "ambiguous", "massachusetts"}, - {"MD", "ambiguous", "maryland"}, {"Md", "ambiguous", "maryland"}, - {"ME", "ambiguous", "maine"}, {"Me", "ambiguous", "maine"}, - {"MI", "", "michigan"}, {"Mi", "ambiguous", "michigan"}, - {"Mich", "ambiguous", "michigan"}, - {"MN", "ambiguous", "minnestota"}, - {"Minn", "ambiguous", "minnestota"}, - {"MS", "ambiguous", "mississippi"}, - {"Miss", "ambiguous", "mississippi"}, - {"MT", "ambiguous", "montanna"}, {"Mt", "ambiguous", "montanna"}, - {"MO", "ambiguous", "missouri"}, {"Mo", "ambiguous", "missouri"}, - {"NC", "ambiguous", "north", "carolina"}, - {"ND", "ambiguous", "north", "dakota"}, - {"NE", "ambiguous", "nebraska"}, {"Ne", "ambiguous", "nebraska"}, - {"Neb", "ambiguous", "nebraska"}, - {"NH", "ambiguous", "new", "hampshire"}, {"NV", "", "nevada"}, - {"Nev", "", "nevada"}, {"NY", "", "new", "york"}, - {"OH", "ambiguous", "ohio"}, {"OK", "ambiguous", "oklahoma"}, - {"Okla", "", "oklahoma"}, {"OR", "ambiguous", "oregon"}, - {"Or", "ambiguous", "oregon"}, {"Ore", "ambiguous", "oregon"}, - {"PA", "ambiguous", "pennsylvania"}, - {"Pa", "ambiguous", "pennsylvania"}, - {"Penn", "ambiguous", "pennsylvania"}, - {"RI", "ambiguous", "rhode", "island"}, - {"SC", "ambiguous", "south", "carlolina"}, - {"SD", "ambiguous", "south", "dakota"}, - {"TN", "ambiguous", "tennesee"}, {"Tn", "ambiguous", "tennesee"}, - {"Tenn", "ambiguous", "tennesee"}, {"TX", "ambiguous", "texas"}, - {"Tx", "ambiguous", "texas"}, {"Tex", "ambiguous", "texas"}, - {"UT", "ambiguous", "utah"}, {"VA", "ambiguous", "virginia"}, - {"WA", "ambiguous", "washington"}, - {"Wa", "ambiguous", "washington"}, - {"Wash", "ambiguous", "washington"}, - {"WI", "ambiguous", "wisconsin"}, - {"Wi", "ambiguous", "wisconsin"}, - {"WV", "ambiguous", "west", "virginia"}, - {"WY", "ambiguous", "wyoming"}, {"Wy", "ambiguous", "wyoming"}, - {"Wyo", "", "wyoming"}, {"PR", "ambiguous", "puerto", "rico"}}; - - // Again map for constant time searching. - private static Map usStatesMap = new HashMap(); - static { - for (int i = 0; i < usStates.length; i++) { - usStatesMap.put(usStates[i][0], usStates[i]); - } - }; - - // class variables - - // the word relation that we are building - private WordRelation wordRelation; - - // the current token Item - private Item tokenItem; - - // a CART for classifying numbers - private DecisionTree cart; - - /** - * Constructs a default USTokenWordProcessor. It uses the USEnglish regular - * expression set (USEngRegExp) by default. - */ - public USEnglishTokenizer() { - try { - cart = new DecisionTree(getClass().getResource("nums_cart.txt")); - prefixFSM = - new PrefixFSM(getClass().getResource("prefix_fsm.txt")); - suffixFSM = - new SuffixFSM(getClass().getResource("suffix_fsm.txt")); - } catch (IOException e) { - throw new IllegalStateException("resources not found", e); - } - } - - /** - * Returns the currently processing token Item. - * - * @return the current token Item; null if no item - */ - public Item getTokenItem() { - return tokenItem; - } - - /** - * Process the utterance - * - * @param text the utterance containing the tokens - * @return the list of tokens - */ - public List expand(String text) { - - String simplifiedText = simplifyChars(text); - - CharTokenizer tokenizer = new CharTokenizer(); - tokenizer.setWhitespaceSymbols(UsEnglish.WHITESPACE_SYMBOLS); - tokenizer.setSingleCharSymbols(UsEnglish.SINGLE_CHAR_SYMBOLS); - tokenizer.setPrepunctuationSymbols(UsEnglish.PREPUNCTUATION_SYMBOLS); - tokenizer.setPostpunctuationSymbols(UsEnglish.PUNCTUATION_SYMBOLS); - tokenizer.setInputText(simplifiedText); - Utterance utterance = new Utterance(tokenizer); - - Relation tokenRelation; - if ((tokenRelation = utterance.getRelation(Relation.TOKEN)) == null) { - throw new IllegalStateException("token relation does not exist"); - } - - wordRelation = WordRelation.createWordRelation(utterance, this); - - for (tokenItem = tokenRelation.getHead(); tokenItem != null; tokenItem = - tokenItem.getNext()) { - - FeatureSet featureSet = tokenItem.getFeatures(); - String tokenVal = featureSet.getString("name"); - - // convert the token into a list of words - tokenToWords(tokenVal); - } - - List words = new ArrayList(); - for (Item item = utterance.getRelation(Relation.WORD).getHead(); item != null; item = - item.getNext()) { - if (!item.toString().isEmpty() && !item.toString().contains("#")) { - words.add(item.toString()); - } - } - return words; - } - - private String simplifyChars(String text) { - text = text.replace('’', '\''); - text = text.replace('‘', '\''); - text = text.replace('”', '"'); - text = text.replace('“', '"'); - text = text.replace('»', '"'); - text = text.replace('«', '"'); - text = text.replace('–', '-'); - text = text.replace('—', ' '); - text = text.replace('…', ' '); - text = text.replace((char)0xc, ' '); - return text; - } - - /** - * Returns true if the given token matches part of a phone number - * - * @param tokenItem the token - * @param tokenVal the string value of the token - * - * @return true or false - */ - private boolean matchesPartPhoneNumber(String tokenVal) { - - String n_name = (String) tokenItem.findFeature("n.name"); - String n_n_name = (String) tokenItem.findFeature("n.n.name"); - String p_name = (String) tokenItem.findFeature("p.name"); - String p_p_name = (String) tokenItem.findFeature("p.p.name"); - - boolean matches3DigitsP_name = matches(threeDigitsPattern, p_name); - - return ((matches(threeDigitsPattern, tokenVal) && ((!matches( - digitsPattern, p_name) && matches(threeDigitsPattern, n_name) && matches( - fourDigitsPattern, n_n_name)) - || (matches(sevenPhoneNumberPattern, n_name)) || (!matches( - digitsPattern, p_p_name) && matches3DigitsP_name && matches( - fourDigitsPattern, n_name)))) || (matches( - fourDigitsPattern, tokenVal) && (!matches(digitsPattern, - n_name) && matches3DigitsP_name && matches(threeDigitsPattern, - p_p_name)))); - } - - - /** - * Converts the given Token into (word) Items in the WordRelation. - * - * @param tokenVal the String value of the token, which may or may not be - * same as the one in called "name" in flite - * - */ - private void tokenToWords(String tokenVal) { - FeatureSet tokenFeatures = tokenItem.getFeatures(); - String itemName = tokenFeatures.getString("name"); - int tokenLength = tokenVal.length(); - - if (tokenFeatures.isPresent("phones")) { - wordRelation.addWord(tokenVal); - - } else if ((tokenVal.equals("a") || tokenVal.equals("A")) - && ((tokenItem.getNext() == null) - || !(tokenVal.equals(itemName)) || !(((String) tokenItem - .findFeature("punc")).equals("")))) { - /* if A is a sub part of a token, then its ey not ah */ - wordRelation.addWord("_a"); - - } else if (matches(alphabetPattern, tokenVal)) { - - if (matches(romanNumbersPattern, tokenVal)) { - - /* XVIII */ - romanToWords(tokenVal); - - } else if (matches(illionPattern, tokenVal) - && matches(usMoneyPattern, - (String) tokenItem.findFeature("p.name"))) { - /* $ X -illion */ - wordRelation.addWord(tokenVal); - wordRelation.addWord("dollars"); - - } else if (matches(drStPattern, tokenVal)) { - /* St Andrew's St, Dr King Dr */ - drStToWords(tokenVal); - } else if (tokenVal.equals("Mr")) { - tokenItem.getFeatures().setString("punc", ""); - wordRelation.addWord("mister"); - } else if (tokenVal.equals("Mrs")) { - tokenItem.getFeatures().setString("punc", ""); - wordRelation.addWord("missus"); - } else if (tokenLength == 1 - && Character.isUpperCase(tokenVal.charAt(0)) - && ((String) tokenItem.findFeature("n.whitespace")) - .equals(" ") - && Character.isUpperCase(((String) tokenItem - .findFeature("n.name")).charAt(0))) { - - tokenFeatures.setString("punc", ""); - String aaa = tokenVal.toLowerCase(); - if (aaa.equals("a")) { - wordRelation.addWord("_a"); - } else { - wordRelation.addWord(aaa); - } - } else if (isStateName(tokenVal)) { - /* - * The name of a US state isStateName() has already added the - * full name of the state, so we're all set. - */ - } else if (tokenLength > 1 && !isPronounceable(tokenVal)) { - /* Need common exception list */ - /* unpronouncable list of alphas */ - NumberExpander.expandLetters(tokenVal, wordRelation); - - } else { - /* just a word */ - wordRelation.addWord(tokenVal.toLowerCase()); - } - - } else if (matches(dottedAbbrevPattern, tokenVal)) { - - /* U.S.A. */ - // remove all dots - NumberExpander.expandLetters(tokenVal.replace(".", ""), - wordRelation); - - } else if (matches(commaIntPattern, tokenVal)) { - - /* 99,999,999 */ - NumberExpander.expandReal(tokenVal.replace(",", "").replace("'", ""), wordRelation); - - } else if (matches(sevenPhoneNumberPattern, tokenVal)) { - - /* 234-3434 telephone numbers */ - int dashIndex = tokenVal.indexOf('-'); - String aaa = tokenVal.substring(0, dashIndex); - String bbb = tokenVal.substring(dashIndex + 1); - - NumberExpander.expandDigits(aaa, wordRelation); - wordRelation.addBreak(); - NumberExpander.expandDigits(bbb, wordRelation); - - } else if (matchesPartPhoneNumber(tokenVal)) { - - /* part of a telephone number */ - String punctuation = (String) tokenItem.findFeature("punc"); - if (punctuation.equals("")) { - tokenItem.getFeatures().setString("punc", ","); - } - NumberExpander.expandDigits(tokenVal, wordRelation); - wordRelation.addBreak(); - - } else if (matches(numberTimePattern, tokenVal)) { - /* 12:35 */ - int colonIndex = tokenVal.indexOf(':'); - String aaa = tokenVal.substring(0, colonIndex); - String bbb = tokenVal.substring(colonIndex + 1); - - NumberExpander.expandNumber(aaa, wordRelation); - if (!(bbb.equals("00"))) { - NumberExpander.expandID(bbb, wordRelation); - } - } else if (matches(digits2DashPattern, tokenVal)) { - /* 999-999-999 */ - digitsDashToWords(tokenVal); - } else if (matches(digitsPattern, tokenVal)) { - digitsToWords(tokenVal); - } else if (tokenLength == 1 - && Character.isUpperCase(tokenVal.charAt(0)) - && ((String) tokenItem.findFeature("n.whitespace")) - .equals(" ") - && Character.isUpperCase(((String) tokenItem - .findFeature("n.name")).charAt(0))) { - - tokenFeatures.setString("punc", ""); - String aaa = tokenVal.toLowerCase(); - if (aaa.equals("a")) { - wordRelation.addWord("_a"); - } else { - wordRelation.addWord(aaa); - } - } else if (matches(doublePattern, tokenVal)) { - NumberExpander.expandReal(tokenVal, wordRelation); - } else if (matches(ordinalPattern, tokenVal)) { - /* explicit ordinals */ - String aaa = tokenVal.substring(0, tokenLength - 2); - NumberExpander.expandOrdinal(aaa, wordRelation); - } else if (matches(usMoneyPattern, tokenVal)) { - /* US money */ - usMoneyToWords(tokenVal); - } else if (tokenLength > 0 && tokenVal.charAt(tokenLength - 1) == '%') { - /* Y% */ - tokenToWords(tokenVal.substring(0, tokenLength - 1)); - wordRelation.addWord("percent"); - } else if (matches(numessPattern, tokenVal)) { - NumberExpander.expandNumess(tokenVal.substring(0, tokenLength - 1), wordRelation); - } else if (matches(digitsSlashDigitsPattern, tokenVal) - && tokenVal.equals(itemName)) { - digitsSlashDigitsToWords(tokenVal); - } else if (tokenVal.indexOf('-') != -1) { - dashToWords(tokenVal); - } else if (tokenLength > 1 && !matches(alphabetPattern, tokenVal)) { - notJustAlphasToWords(tokenVal); - } else if (tokenVal.equals("&")) { - // & - wordRelation.addWord("and"); - } else if (tokenVal.equals("-")) { - // Skip it - } else { - // Just a word. - wordRelation.addWord(tokenVal.toLowerCase()); - } - } - - /** - * Convert the given digit token with dashes (e.g. 999-999-999) into (word) - * Items in the WordRelation. - * - * @param tokenVal the digit string - */ - private void digitsDashToWords(String tokenVal) { - int tokenLength = tokenVal.length(); - int a = 0; - for (int p = 0; p <= tokenLength; p++) { - if (p == tokenLength || tokenVal.charAt(p) == '-') { - String aaa = tokenVal.substring(a, p); - NumberExpander.expandDigits(aaa, wordRelation); - wordRelation.addBreak(); - a = p + 1; - } - } - } - - /** - * Convert the given digit token into (word) Items in the WordRelation. - * - * @param tokenVal the digit string - */ - private void digitsToWords(String tokenVal) { - FeatureSet featureSet = tokenItem.getFeatures(); - String nsw = ""; - if (featureSet.isPresent("nsw")) { - nsw = featureSet.getString("nsw"); - } - - if (nsw.equals("nide")) { - NumberExpander.expandID(tokenVal, wordRelation); - } else { - String rName = featureSet.getString("name"); - String digitsType = null; - - if (tokenVal.equals(rName)) { - digitsType = (String) cart.interpret(tokenItem); - } else { - featureSet.setString("name", tokenVal); - digitsType = (String) cart.interpret(tokenItem); - featureSet.setString("name", rName); - } - - if (digitsType.equals("ordinal")) { - NumberExpander.expandOrdinal(tokenVal, wordRelation); - } else if (digitsType.equals("digits")) { - NumberExpander.expandDigits(tokenVal, wordRelation); - } else if (digitsType.equals("year")) { - NumberExpander.expandID(tokenVal, wordRelation); - } else { - NumberExpander.expandNumber(tokenVal, wordRelation); - } - } - } - - /** - * Converts the given Roman numeral string into (word) Items in the - * WordRelation. - * - * @param romanString the roman numeral string - */ - private void romanToWords(String romanString) { - String punctuation = (String) tokenItem.findFeature("p.punc"); - - if (punctuation.equals("")) { - /* no preceeding punctuation */ - String n = String.valueOf(NumberExpander.expandRoman(romanString)); - - if (kingLike(tokenItem)) { - wordRelation.addWord("the"); - NumberExpander.expandOrdinal(n, wordRelation); - } else if (sectionLike(tokenItem)) { - NumberExpander.expandNumber(n, wordRelation); - } else { - NumberExpander.expandLetters(romanString, wordRelation); - } - } else { - NumberExpander.expandLetters(romanString, wordRelation); - } - } - - /** - * Returns true if the given key is in the {@link #kingSectionLikeMap} map, - * and the value is the same as the given value. - * - * @param key key to look for in the map - * @param value the value to match - * - * @return true if it matches, or false if it does not or if the key is not - * mapped to any value in the map. - */ - private static boolean inKingSectionLikeMap(String key, String value) { - if (kingSectionLikeMap.containsKey(key)) { - return kingSectionLikeMap.get(key).equals(value); - } - return false; - } - - /** - * Returns true if the given token item contains a token that is in a - * king-like context, e.g., "King" or "Louis". - * - * @param tokenItem the token item to check - * - * @return true or false - */ - public static boolean kingLike(Item tokenItem) { - String kingName = - ((String) tokenItem.findFeature("p.name")).toLowerCase(); - if (inKingSectionLikeMap(kingName, KING_NAMES)) { - return true; - } else { - String kingTitle = - ((String) tokenItem.findFeature("p.p.name")).toLowerCase(); - return inKingSectionLikeMap(kingTitle, KING_TITLES); - } - } - - /** - * Returns true if the given token item contains a token that is in a - * section-like context, e.g., "chapter" or "act". - * - * @param tokenItem the token item to check - * - * @return true or false - */ - public static boolean sectionLike(Item tokenItem) { - String sectionType = - ((String) tokenItem.findFeature("p.name")).toLowerCase(); - return inKingSectionLikeMap(sectionType, SECTION_TYPES); - } - - /** - * Converts the given string containing "St" and "Dr" to (word) Items in - * the WordRelation. - * - * @param drStString the string with "St" and "Dr" - */ - private void drStToWords(String drStString) { - String street = null; - String saint = null; - char c0 = drStString.charAt(0); - - if (c0 == 's' || c0 == 'S') { - street = "street"; - saint = "saint"; - } else { - street = "drive"; - saint = "doctor"; - } - - FeatureSet featureSet = tokenItem.getFeatures(); - String punctuation = featureSet.getString("punc"); - - String featPunctuation = (String) tokenItem.findFeature("punc"); - - if (tokenItem.getNext() == null || punctuation.indexOf(',') != -1) { - wordRelation.addWord(street); - } else if (featPunctuation.equals(",")) { - wordRelation.addWord(saint); - } else { - String pName = (String) tokenItem.findFeature("p.name"); - String nName = (String) tokenItem.findFeature("n.name"); - - char p0 = pName.charAt(0); - char n0 = nName.charAt(0); - - if (Character.isUpperCase(p0) && Character.isLowerCase(n0)) { - wordRelation.addWord(street); - } else if (Character.isDigit(p0) && Character.isLowerCase(n0)) { - wordRelation.addWord(street); - } else if (Character.isLowerCase(p0) && Character.isUpperCase(n0)) { - wordRelation.addWord(saint); - } else { - String whitespace = - (String) tokenItem.findFeature("n.whitespace"); - if (whitespace.equals(" ")) { - wordRelation.addWord(saint); - } else { - wordRelation.addWord(street); - } - } - } - - if (punctuation != null && punctuation.equals(".")) { - featureSet.setString("punc", ""); - } - } - - /** - * Converts US money string into (word) Items in the WordRelation. - * - * @param tokenVal the US money string - */ - private void usMoneyToWords(String tokenVal) { - int dotIndex = tokenVal.indexOf('.'); - if (matches(illionPattern, (String) tokenItem.findFeature("n.name"))) { - NumberExpander.expandReal(tokenVal.substring(1), wordRelation); - } else if (dotIndex == -1) { - String aaa = tokenVal.substring(1); - tokenToWords(aaa); - if (aaa.equals("1")) { - wordRelation.addWord("dollar"); - } else { - wordRelation.addWord("dollars"); - } - } else if (dotIndex == (tokenVal.length() - 1) - || (tokenVal.length() - dotIndex) > 3) { - // Simply read as mumble point mumble. - NumberExpander.expandReal(tokenVal.substring(1), wordRelation); - wordRelation.addWord("dollars"); - } else { - String aaa = tokenVal.substring(1, dotIndex).replace(",", ""); - String bbb = tokenVal.substring(dotIndex + 1); - - NumberExpander.expandNumber(aaa, wordRelation); - - if (aaa.equals("1")) { - wordRelation.addWord("dollar"); - } else { - wordRelation.addWord("dollars"); - } - - if (bbb.equals("00")) { - // Add nothing to the word list. - } else { - NumberExpander.expandNumber(bbb, wordRelation); - if (bbb.equals("01")) { - wordRelation.addWord("cent"); - } else { - wordRelation.addWord("cents"); - } - } - } - } - - /** - * Convert the given digits/digits string into word (Items) in the - * WordRelation. - * - * @param tokenVal the digits/digits string - */ - private void digitsSlashDigitsToWords(String tokenVal) { - - /* might be fraction, or not */ - int index = tokenVal.indexOf('/'); - String aaa = tokenVal.substring(0, index); - String bbb = tokenVal.substring(index + 1); - int a; - - // if the previous token is a number, add an "and" - if (matches(digitsPattern, (String) tokenItem.findFeature("p.name")) - && tokenItem.getPrevious() != null) { - wordRelation.addWord("and"); - } - - if (aaa.equals("1") && bbb.equals("2")) { - wordRelation.addWord("a"); - wordRelation.addWord("half"); - } else if ((a = Integer.parseInt(aaa)) < (Integer.parseInt(bbb))) { - NumberExpander.expandNumber(aaa, wordRelation); - NumberExpander.expandOrdinal(bbb, wordRelation); - if (a > 1) { - wordRelation.addWord("'s"); - } - } else { - NumberExpander.expandNumber(aaa, wordRelation); - wordRelation.addWord("slash"); - NumberExpander.expandNumber(bbb, wordRelation); - } - } - - /** - * Convert the given dashed string (e.g. "aaa-bbb") into (word) Items in - * the WordRelation. - * - * @param tokenVal the dashed string - */ - private void dashToWords(String tokenVal) { - int index = tokenVal.indexOf('-'); - String aaa = tokenVal.substring(0, index); - String bbb = tokenVal.substring(index + 1, tokenVal.length()); - - if (matches(digitsPattern, aaa) && matches(digitsPattern, bbb)) { - FeatureSet featureSet = tokenItem.getFeatures(); - featureSet.setString("name", aaa); - tokenToWords(aaa); - wordRelation.addWord("to"); - featureSet.setString("name", bbb); - tokenToWords(bbb); - featureSet.setString("name", ""); - } else { - tokenToWords(aaa); - tokenToWords(bbb); - } - } - - /** - * Convert the given string (which does not only consist of alphabet) into - * (word) Items in the WordRelation. - * - * @param tokenVal the string - */ - private void notJustAlphasToWords(String tokenVal) { - /* its not just alphas */ - int index = 0; - int tokenLength = tokenVal.length(); - - for (; index < tokenLength - 1; index++) { - if (isTextSplitable(tokenVal, index)) { - break; - } - } - if (index == tokenLength - 1) { - wordRelation.addWord(tokenVal.toLowerCase()); - return; - } - - String aaa = tokenVal.substring(0, index + 1); - String bbb = tokenVal.substring(index + 1, tokenLength); - - FeatureSet featureSet = tokenItem.getFeatures(); - featureSet.setString("nsw", "nide"); - tokenToWords(aaa); - tokenToWords(bbb); - } - - /** - * Returns true if the given word is pronounceable. This method is - * originally called us_aswd() in Flite 1.1. - * - * @param word the word to test - * - * @return true if the word is pronounceable, false otherwise - */ - public boolean isPronounceable(String word) { - String lcWord = word.toLowerCase(); - return prefixFSM.accept(lcWord) && suffixFSM.accept(lcWord); - } - - /** - * Returns true if the given token is the name of a US state. If it is, it - * will add the name of the state to (word) Items in the WordRelation. - * - * @param tokenVal the token string - */ - private boolean isStateName(String tokenVal) { - String[] state = (String[]) usStatesMap.get(tokenVal); - if (state != null) { - boolean expandState = false; - - // check to see if the state initials are ambiguous - // in the English language - if (state[1].equals("ambiguous")) { - String previous = (String) tokenItem.findFeature("p.name"); - String next = (String) tokenItem.findFeature("n.name"); - - int nextLength = next.length(); - FeatureSet featureSet = tokenItem.getFeatures(); - - // check if the previous word starts with a capital letter, - // is at least 3 letters long, is an alphabet sequence, - // and has a comma. - boolean previousIsCity = - (Character.isUpperCase(previous.charAt(0)) - && previous.length() > 2 - && matches(alphabetPattern, previous) && tokenItem - .findFeature("p.punc").equals(",")); - - // check if next token starts with a lower case, or - // this is the end of sentence, or if next token - // is a period (".") or a zip code (5 or 10 digits). - boolean nextIsGood = - (Character.isLowerCase(next.charAt(0)) - || tokenItem.getNext() == null - || featureSet.getString("punc").equals(".") || ((nextLength == 5 || nextLength == 10) && matches( - digitsPattern, next))); - - if (previousIsCity && nextIsGood) { - expandState = true; - } else { - expandState = false; - } - } else { - expandState = true; - } - if (expandState) { - for (int j = 2; j < state.length; j++) { - if (state[j] != null) { - wordRelation.addWord(state[j]); - } - } - return true; - } - } - return false; - } - - /** - * Determines if the given input matches the given Pattern. - * - * @param pattern the pattern to match - * @param input the string to test - * - * @return true if the input string matches the given Pattern; - * false otherwise - */ - private static boolean matches(Pattern pattern, String input) { - Matcher m = pattern.matcher(input); - return m.matches(); - } - - /** - * Determines if the character at the given position of the given input - * text is splittable. A character is splittable if: - *

    - * 1) the character and the following character are not letters in the - * English alphabet (A-Z and a-z) - *

    - * 2) the character and the following character are not digits (0-9) - *

    - * - * @param text the text containing the character of interest - * @param index the index of the character of interest - * - * @return true if the position of the given text is splittable false - * otherwise - */ - private static boolean isTextSplitable(String text, int index) { - - - char c0 = text.charAt(index); - char c1 = text.charAt(index + 1); - - if (Character.isLetter(c0) && Character.isLetter(c1)) { - return false; - } else if (Character.isDigit(c0) && Character.isDigit(c1)) { - return false; - } else if (c0 == '\'' || Character.isLetter(c1)) { - return false; - } else if (c1 == '\'' || Character.isLetter(c0)) { - return false; - } else { - return true; - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/CharTokenizer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/CharTokenizer.java deleted file mode 100755 index 980e935a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/CharTokenizer.java +++ /dev/null @@ -1,405 +0,0 @@ -/** - * Portions Copyright 2001 Sun Microsystems, Inc. - * Portions Copyright 1999-2001 Language Technologies Institute, - * Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.alignment.tokenizer; - -import java.io.IOException; -import java.io.Reader; -import java.util.Iterator; - -import edu.cmu.sphinx.alignment.Token; - -/** - * Implements the tokenizer interface. Breaks an input sequence of characters - * into a set of tokens. - */ -public class CharTokenizer implements Iterator { - - /** A constant indicating that the end of the stream has been read. */ - public static final int EOF = -1; - - /** A string containing the default whitespace characters. */ - public static final String DEFAULT_WHITESPACE_SYMBOLS = " \t\n\r"; - - /** A string containing the default single characters. */ - public static final String DEFAULT_SINGLE_CHAR_SYMBOLS = "(){}[]"; - - /** A string containing the default pre-punctuation characters. */ - public static final String DEFAULT_PREPUNCTUATION_SYMBOLS = "\"'`({["; - - /** A string containing the default post-punctuation characters. */ - public static final String DEFAULT_POSTPUNCTUATION_SYMBOLS = - "\"'`.,:;!?(){}[]"; - - /** The line number. */ - private int lineNumber; - - /** The input text (from the Utterance) to tokenize. */ - private String inputText; - - /** The file to read input text from, if using file mode. */ - private Reader reader; - - /** The current character, whether its from the file or the input text. */ - private int currentChar; - - /** - * The current char position for the input text (not the file) this is - * called "file_pos" in flite - */ - private int currentPosition; - - /** The delimiting symbols of this tokenizer. */ - private String whitespaceSymbols = DEFAULT_WHITESPACE_SYMBOLS; - private String singleCharSymbols = DEFAULT_SINGLE_CHAR_SYMBOLS; - private String prepunctuationSymbols = DEFAULT_PREPUNCTUATION_SYMBOLS; - private String postpunctuationSymbols = DEFAULT_POSTPUNCTUATION_SYMBOLS; - - /** The error description. */ - private String errorDescription; - - /** A place to store the current token. */ - private Token token; - private Token lastToken; - - /** - * Constructs a Tokenizer. - */ - public CharTokenizer() {} - - /** - * Creates a tokenizer that will return tokens from the given string. - * - * @param string the string to tokenize - */ - public CharTokenizer(String string) { - setInputText(string); - } - - /** - * Creates a tokenizer that will return tokens from the given file. - * - * @param file where to read the input from - */ - public CharTokenizer(Reader file) { - setInputReader(file); - } - - /** - * Sets the whitespace symbols of this Tokenizer to the given symbols. - * - * @param symbols the whitespace symbols - */ - public void setWhitespaceSymbols(String symbols) { - whitespaceSymbols = symbols; - } - - /** - * Sets the single character symbols of this Tokenizer to the given - * symbols. - * - * @param symbols the single character symbols - */ - public void setSingleCharSymbols(String symbols) { - singleCharSymbols = symbols; - } - - /** - * Sets the prepunctuation symbols of this Tokenizer to the given symbols. - * - * @param symbols the prepunctuation symbols - */ - public void setPrepunctuationSymbols(String symbols) { - prepunctuationSymbols = symbols; - } - - /** - * Sets the postpunctuation symbols of this Tokenizer to the given symbols. - * - * @param symbols the postpunctuation symbols - */ - public void setPostpunctuationSymbols(String symbols) { - postpunctuationSymbols = symbols; - } - - /** - * Sets the text to tokenize. - * - * @param inputString the string to tokenize - */ - public void setInputText(String inputString) { - inputText = inputString; - currentPosition = 0; - - if (inputText != null) { - getNextChar(); - } - } - - /** - * Sets the input reader - * - * @param reader the input source - */ - public void setInputReader(Reader reader) { - this.reader = reader; - getNextChar(); - } - - /** - * Returns the next token. - * - * @return the next token if it exists, null if no more tokens - */ - public Token next() { - lastToken = token; - token = new Token(); - - // Skip whitespace - token.setWhitespace(getTokenOfCharClass(whitespaceSymbols)); - - // quoted strings currently ignored - - // get prepunctuation - token.setPrepunctuation(getTokenOfCharClass(prepunctuationSymbols)); - - // get the symbol itself - if (singleCharSymbols.indexOf(currentChar) != -1) { - token.setWord(String.valueOf((char) currentChar)); - getNextChar(); - } else { - token.setWord(getTokenNotOfCharClass(whitespaceSymbols)); - } - - token.setPosition(currentPosition); - token.setLineNumber(lineNumber); - - // This'll have token *plus* postpunctuation - // Get postpunctuation - removeTokenPostpunctuation(); - - return token; - } - - /** - * Returns true if there are more tokens, false - * otherwise. - * - * @return true if there are more tokens false - * otherwise - */ - public boolean hasNext() { - int nextChar = currentChar; - return (nextChar != EOF); - } - - public void remove() { - throw new UnsupportedOperationException(); - } - - /** - * Advances the currentPosition pointer by 1 (if not exceeding length of - * inputText, and returns the character pointed by currentPosition. - * - * @return the next character EOF if no more characters exist - */ - private int getNextChar() { - if (reader != null) { - try { - int readVal = reader.read(); - if (readVal == -1) { - currentChar = EOF; - } else { - currentChar = (char) readVal; - } - } catch (IOException ioe) { - currentChar = EOF; - errorDescription = ioe.getMessage(); - } - } else if (inputText != null) { - if (currentPosition < inputText.length()) { - currentChar = (int) inputText.charAt(currentPosition); - } else { - currentChar = EOF; - } - } - if (currentChar != EOF) { - currentPosition++; - } - if (currentChar == '\n') { - lineNumber++; - } - return currentChar; - } - - /** - * Starting from the current position of the input text, returns the - * subsequent characters of type charClass, and not of type - * singleCharSymbols. - * - * @param charClass the type of characters to look for - * @param buffer the place to append characters of type charClass - * - * @return a string of characters starting from the current position of the - * input text, until it encounters a character not in the string - * charClass - * - */ - private String getTokenOfCharClass(String charClass) { - return getTokenByCharClass(charClass, true); - } - - /** - * Starting from the current position of the input text/file, returns the - * subsequent characters, not of type singleCharSymbols, and ended at - * characters of type endingCharClass. E.g., if the current string is - * "xxxxyyy", endingCharClass is "yz", and singleCharClass "abc". Then this - * method will return to "xxxx". - * - * @param endingCharClass the type of characters to look for - * - * @return a string of characters from the current position until it - * encounters characters in endingCharClass - * - */ - private String getTokenNotOfCharClass(String endingCharClass) { - return getTokenByCharClass(endingCharClass, false); - } - - /** - * Provides a `compressed' method from getTokenOfCharClass() and - * getTokenNotOfCharClass(). If parameter containThisCharClass is - * true, then a string from the current position to the last - * character in charClass is returned. If containThisCharClass is - * false , then a string before the first occurrence of a - * character in containThisCharClass is returned. - * - * @param charClass the string of characters you want included or excluded - * in your return - * @param containThisCharClass determines if you want characters in - * charClass in the returned string or not - * - * @return a string of characters from the current position until it - * encounters characters in endingCharClass - */ - private String getTokenByCharClass(String charClass, - boolean containThisCharClass) { - final StringBuilder buffer = new StringBuilder(); - - // if we want the returned string to contain chars in charClass, then - // containThisCharClass is TRUE and - // (charClass.indexOf(currentChar) != 1) == containThisCharClass) - // returns true; if we want it to stop at characters of charClass, - // then containThisCharClass is FALSE, and the condition returns - // false. - while ((charClass.indexOf(currentChar) != -1) == containThisCharClass - && singleCharSymbols.indexOf(currentChar) == -1 - && currentChar != EOF) { - buffer.append((char) currentChar); - getNextChar(); - } - return buffer.toString(); - } - - /** - * Removes the postpunctuation characters from the current token. Copies - * those postpunctuation characters to the class variable - * 'postpunctuation'. - */ - private void removeTokenPostpunctuation() { - if (token == null) { - return; - } - final String tokenWord = token.getWord(); - - int tokenLength = tokenWord.length(); - int position = tokenLength - 1; - - while (position > 0 - && postpunctuationSymbols.indexOf((int) tokenWord - .charAt(position)) != -1) { - position--; - } - - if (tokenLength - 1 != position) { - // Copy postpunctuation from token - token.setPostpunctuation(tokenWord.substring(position + 1)); - - // truncate token at postpunctuation - token.setWord(tokenWord.substring(0, position + 1)); - } else { - token.setPostpunctuation(""); - } - } - - /** - * Returns true if there were errors while reading tokens - * - * @return true if there were errors; false - * otherwise - */ - public boolean hasErrors() { - return errorDescription != null; - } - - /** - * if hasErrors returns true, this will return a description - * of the error encountered, otherwise it will return null - * - * @return a description of the last error that occurred. - */ - public String getErrorDescription() { - return errorDescription; - } - - /** - * Determines if the current token should start a new sentence. - * - * @return true if a new sentence should be started - */ - public boolean isSentenceSeparator() { - String tokenWhiteSpace = token.getWhitespace(); - String lastTokenPostpunctuation = null; - if (lastToken != null) { - lastTokenPostpunctuation = lastToken.getPostpunctuation(); - } - - if (lastToken == null || token == null) { - return false; - } else if (tokenWhiteSpace.indexOf('\n') != tokenWhiteSpace - .lastIndexOf('\n')) { - return true; - } else if (lastTokenPostpunctuation.indexOf(':') != -1 - || lastTokenPostpunctuation.indexOf('?') != -1 - || lastTokenPostpunctuation.indexOf('!') != -1) { - return true; - } else if (lastTokenPostpunctuation.indexOf('.') != -1 - && tokenWhiteSpace.length() > 1 - && Character.isUpperCase(token.getWord().charAt(0))) { - return true; - } else { - String lastWord = lastToken.getWord(); - int lastWordLength = lastWord.length(); - - if (lastTokenPostpunctuation.indexOf('.') != -1 - && - /* next word starts with a capital */ - Character.isUpperCase(token.getWord().charAt(0)) - && - /* last word isn't an abbreviation */ - !(Character.isUpperCase(lastWord - .charAt(lastWordLength - 1)) || (lastWordLength < 4 && Character - .isUpperCase(lastWord.charAt(0))))) { - return true; - } - } - return false; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/DecisionTree.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/DecisionTree.java deleted file mode 100755 index c8ea23e4..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/DecisionTree.java +++ /dev/null @@ -1,608 +0,0 @@ -/** - * Portions Copyright 2001 Sun Microsystems, Inc. - * Portions Copyright 1999-2001 Language Technologies Institute, - * Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.alignment.tokenizer; - -import java.io.*; -import java.net.URL; -import java.util.StringTokenizer; -import java.util.logging.Logger; -import java.util.regex.Pattern; - - -/** - * Implementation of a Classification and Regression Tree (CART) that is used - * more like a binary decision tree, with each node containing a decision or a - * final value. The decision nodes in the CART trees operate on an Item and - * have the following format: - * - *

    - *   NODE feat operand value qfalse
    - * 
    - * - *

    - * Where feat is an string that represents a feature to pass to - * the findFeature method of an item. - * - *

    - * The value represents the value to be compared against the - * feature obtained from the item via the feat string. The - * operand is the operation to do the comparison. The available - * operands are as follows: - * - *

      - *
    • < - the feature is less than value - *
    • =- the feature is equal to the value - *
    • >- the feature is greater than the value - *
    • MATCHES - the feature matches the regular expression stored in value - *
    • IN - [[[TODO: still guessing because none of the CART's in Flite seem to - * use IN]]] the value is in the list defined by the feature. - *
    - * - *

    - * [[[TODO: provide support for the IN operator.]]] - * - *

    - * For < and >, this CART coerces the value and feature to float's. For =, - * this CART coerces the value and feature to string and checks for string - * equality. For MATCHES, this CART uses the value as a regular expression and - * compares the obtained feature to that. - * - *

    - * A CART is represented by an array in this implementation. The - * qfalse value represents the index of the array to go to if the - * comparison does not match. In this implementation, qtrue index is always - * implied, and represents the next element in the array. The root node of the - * CART is the first element in the array. - * - *

    - * The interpretations always start at the root node of the CART and continue - * until a final node is found. The final nodes have the following form: - * - *

    - *   LEAF value
    - * 
    - * - *

    - * Where value represents the value of the node. Reaching a final - * node indicates the interpretation is over and the value of the node is the - * interpretation result. - */ -public class DecisionTree { - /** Logger instance. */ - private static final Logger logger = Logger.getLogger(DecisionTree.class.getSimpleName()); - /** - * Entry in file represents the total number of nodes in the file. This - * should be at the top of the file. The format should be "TOTAL n" where n - * is an integer value. - */ - final static String TOTAL = "TOTAL"; - - /** - * Entry in file represents a node. The format should be - * "NODE feat op val f" where 'feat' represents a feature, op represents an - * operand, val is the value, and f is the index of the node to go to is - * there isn't a match. - */ - final static String NODE = "NODE"; - - /** - * Entry in file represents a final node. The format should be "LEAF val" - * where val represents the value. - */ - final static String LEAF = "LEAF"; - - /** - * OPERAND_MATCHES - */ - final static String OPERAND_MATCHES = "MATCHES"; - - /** - * The CART. Entries can be DecisionNode or LeafNode. An ArrayList could be - * used here -- I chose not to because I thought it might be quicker to - * avoid dealing with the dynamic resizing. - */ - Node[] cart = null; - - /** - * The number of nodes in the CART. - */ - transient int curNode = 0; - - /** - * Creates a new CART by reading from the given URL. - * - * @param url the location of the CART data - * - * @throws IOException if errors occur while reading the data - */ - public DecisionTree(URL url) throws IOException { - BufferedReader reader; - String line; - - reader = new BufferedReader(new InputStreamReader(url.openStream())); - line = reader.readLine(); - while (line != null) { - if (!line.startsWith("***")) { - parseAndAdd(line); - } - line = reader.readLine(); - } - reader.close(); - } - - /** - * Creates a new CART by reading from the given reader. - * - * @param reader the source of the CART data - * @param nodes the number of nodes to read for this cart - * - * @throws IOException if errors occur while reading the data - */ - public DecisionTree(BufferedReader reader, int nodes) throws IOException { - this(nodes); - String line; - for (int i = 0; i < nodes; i++) { - line = reader.readLine(); - if (!line.startsWith("***")) { - parseAndAdd(line); - } - } - } - - /** - * Creates a new CART that will be populated with nodes later. - * - * @param numNodes the number of nodes - */ - private DecisionTree(int numNodes) { - cart = new Node[numNodes]; - } - - /** - * Dump the CART tree as a dot file. - *

    - * The dot tool is part of the graphviz distribution at http://www.graphviz.org/. If - * installed, call it as "dot -O -Tpdf *.dot" from the console to generate - * pdfs. - *

    - * - * @param out The PrintWriter to write to. - */ - public void dumpDot(PrintWriter out) { - out.write("digraph \"" + "CART Tree" + "\" {\n"); - out.write("rankdir = LR\n"); - - for (Node n : cart) { - out.println("\tnode" + Math.abs(n.hashCode()) + " [ label=\"" - + n.toString() + "\", color=" + dumpDotNodeColor(n) - + ", shape=" + dumpDotNodeShape(n) + " ]\n"); - if (n instanceof DecisionNode) { - DecisionNode dn = (DecisionNode) n; - if (dn.qtrue < cart.length && cart[dn.qtrue] != null) { - out.write("\tnode" + Math.abs(n.hashCode()) + " -> node" - + Math.abs(cart[dn.qtrue].hashCode()) - + " [ label=" + "TRUE" + " ]\n"); - } - if (dn.qfalse < cart.length && cart[dn.qfalse] != null) { - out.write("\tnode" + Math.abs(n.hashCode()) + " -> node" - + Math.abs(cart[dn.qfalse].hashCode()) - + " [ label=" + "FALSE" + " ]\n"); - } - } - } - - out.write("}\n"); - out.close(); - } - - protected String dumpDotNodeColor(Node n) { - if (n instanceof LeafNode) { - return "green"; - } - return "red"; - } - - protected String dumpDotNodeShape(Node n) { - return "box"; - } - - /** - * Creates a node from the given input line and add it to the CART. It - * expects the TOTAL line to come before any of the nodes. - * - * @param line a line of input to parse - */ - protected void parseAndAdd(String line) { - StringTokenizer tokenizer = new StringTokenizer(line, " "); - String type = tokenizer.nextToken(); - if (type.equals(LEAF) || type.equals(NODE)) { - cart[curNode] = getNode(type, tokenizer, curNode); - cart[curNode].setCreationLine(line); - curNode++; - } else if (type.equals(TOTAL)) { - cart = new Node[Integer.parseInt(tokenizer.nextToken())]; - curNode = 0; - } else { - throw new Error("Invalid CART type: " + type); - } - } - - /** - * Gets the node based upon the type and tokenizer. - * - * @param type NODE or LEAF - * @param tokenizer the StringTokenizer containing the data to get - * @param currentNode the index of the current node we're looking at - * - * @return the node - */ - protected Node getNode(String type, StringTokenizer tokenizer, - int currentNode) { - if (type.equals(NODE)) { - String feature = tokenizer.nextToken(); - String operand = tokenizer.nextToken(); - Object value = parseValue(tokenizer.nextToken()); - int qfalse = Integer.parseInt(tokenizer.nextToken()); - if (operand.equals(OPERAND_MATCHES)) { - return new MatchingNode(feature, value.toString(), - currentNode + 1, qfalse); - } else { - return new ComparisonNode(feature, value, operand, - currentNode + 1, qfalse); - } - } else if (type.equals(LEAF)) { - return new LeafNode(parseValue(tokenizer.nextToken())); - } - - return null; - } - - /** - * Coerces a string into a value. - * - * @param string of the form "type(value)"; for example, "Float(2.3)" - * - * @return the value - */ - protected Object parseValue(String string) { - int openParen = string.indexOf("("); - String type = string.substring(0, openParen); - String value = string.substring(openParen + 1, string.length() - 1); - if (type.equals("String")) { - return value; - } else if (type.equals("Float")) { - return new Float(Float.parseFloat(value)); - } else if (type.equals("Integer")) { - return new Integer(Integer.parseInt(value)); - } else if (type.equals("List")) { - StringTokenizer tok = new StringTokenizer(value, ","); - int size = tok.countTokens(); - - int[] values = new int[size]; - for (int i = 0; i < size; i++) { - float fval = Float.parseFloat(tok.nextToken()); - values[i] = Math.round(fval); - } - return values; - } else { - throw new Error("Unknown type: " + type); - } - } - - /** - * Passes the given item through this CART and returns the interpretation. - * - * @param item the item to analyze - * - * @return the interpretation - */ - public Object interpret(Item item) { - int nodeIndex = 0; - DecisionNode decision; - - while (!(cart[nodeIndex] instanceof LeafNode)) { - decision = (DecisionNode) cart[nodeIndex]; - nodeIndex = decision.getNextNode(item); - } - logger.fine("LEAF " + cart[nodeIndex].getValue()); - return ((LeafNode) cart[nodeIndex]).getValue(); - } - - /** - * A node for the CART. - */ - static abstract class Node { - /** - * The value of this node. - */ - protected Object value; - - /** - * Create a new Node with the given value. - */ - public Node(Object value) { - this.value = value; - } - - /** - * Get the value. - */ - public Object getValue() { - return value; - } - - /** - * Return a string representation of the type of the value. - */ - public String getValueString() { - if (value == null) { - return "NULL()"; - } else if (value instanceof String) { - return "String(" + value.toString() + ")"; - } else if (value instanceof Float) { - return "Float(" + value.toString() + ")"; - } else if (value instanceof Integer) { - return "Integer(" + value.toString() + ")"; - } else { - return value.getClass().toString() + "(" + value.toString() - + ")"; - } - } - - /** - * sets the line of text used to create this node. - * - * @param line the creation line - */ - public void setCreationLine(String line) {} - } - - /** - * A decision node that determines the next Node to go to in the CART. - */ - abstract static class DecisionNode extends Node { - /** - * The feature used to find a value from an Item. - */ - private PathExtractor path; - - /** - * Index of Node to go to if the comparison doesn't match. - */ - protected int qfalse; - - /** - * Index of Node to go to if the comparison matches. - */ - protected int qtrue; - - /** - * The feature used to find a value from an Item. - */ - public String getFeature() { - return path.toString(); - } - - /** - * Find the feature associated with this DecisionNode and the given - * item - * - * @param item the item to start from - * @return the object representing the feature - */ - public Object findFeature(Item item) { - return path.findFeature(item); - } - - /** - * Returns the next node based upon the descision determined at this - * node - * - * @param item the current item. - * @return the index of the next node - */ - public final int getNextNode(Item item) { - return getNextNode(findFeature(item)); - } - - /** - * Create a new DecisionNode. - * - * @param feature the string used to get a value from an Item - * @param value the value to compare to - * @param qtrue the Node index to go to if the comparison matches - * @param qfalse the Node machine index to go to upon no match - */ - public DecisionNode(String feature, Object value, int qtrue, int qfalse) { - super(value); - this.path = new PathExtractor(feature, true); - this.qtrue = qtrue; - this.qfalse = qfalse; - } - - /** - * Get the next Node to go to in the CART. The return value is an index - * in the CART. - */ - abstract public int getNextNode(Object val); - } - - /** - * A decision Node that compares two values. - */ - static class ComparisonNode extends DecisionNode { - /** - * LESS_THAN - */ - final static String LESS_THAN = "<"; - - /** - * EQUALS - */ - final static String EQUALS = "="; - - /** - * GREATER_THAN - */ - final static String GREATER_THAN = ">"; - - /** - * The comparison type. One of LESS_THAN, GREATER_THAN, or EQUAL_TO. - */ - String comparisonType; - - /** - * Create a new ComparisonNode with the given values. - * - * @param feature the string used to get a value from an Item - * @param value the value to compare to - * @param comparisonType one of LESS_THAN, EQUAL_TO, or GREATER_THAN - * @param qtrue the Node index to go to if the comparison matches - * @param qfalse the Node index to go to upon no match - */ - public ComparisonNode(String feature, Object value, - String comparisonType, int qtrue, int qfalse) { - super(feature, value, qtrue, qfalse); - if (!comparisonType.equals(LESS_THAN) - && !comparisonType.equals(EQUALS) - && !comparisonType.equals(GREATER_THAN)) { - throw new Error("Invalid comparison type: " + comparisonType); - } else { - this.comparisonType = comparisonType; - } - } - - /** - * Compare the given value and return the appropriate Node index. - * IMPLEMENTATION NOTE: LESS_THAN and GREATER_THAN, the Node's value - * and the value passed in are converted to floating point values. For - * EQUAL, the Node's value and the value passed in are treated as - * String compares. This is the way of Flite, so be it Flite. - * - * @param val the value to compare - */ - public int getNextNode(Object val) { - boolean yes = false; - int ret; - - if (comparisonType.equals(LESS_THAN) - || comparisonType.equals(GREATER_THAN)) { - float cart_fval; - float fval; - if (value instanceof Float) { - cart_fval = ((Float) value).floatValue(); - } else { - cart_fval = Float.parseFloat(value.toString()); - } - if (val instanceof Float) { - fval = ((Float) val).floatValue(); - } else { - fval = Float.parseFloat(val.toString()); - } - if (comparisonType.equals(LESS_THAN)) { - yes = (fval < cart_fval); - } else { - yes = (fval > cart_fval); - } - } else { // comparisonType = "=" - String sval = val.toString(); - String cart_sval = value.toString(); - yes = sval.equals(cart_sval); - } - if (yes) { - ret = qtrue; - } else { - ret = qfalse; - } - logger.fine(trace(val, yes, ret)); - return ret; - } - - private String trace(Object value, boolean match, int next) { - return "NODE " + getFeature() + " [" + value + "] " - + comparisonType + " [" + getValue() + "] " - + (match ? "Yes" : "No") + " next " + next; - } - - /** - * Get a string representation of this Node. - */ - public String toString() { - return "NODE " + getFeature() + " " + comparisonType + " " - + getValueString() + " " + Integer.toString(qtrue) + " " - + Integer.toString(qfalse); - } - } - - /** - * A Node that checks for a regular expression match. - */ - static class MatchingNode extends DecisionNode { - Pattern pattern; - - /** - * Create a new MatchingNode with the given values. - * - * @param feature the string used to get a value from an Item - * @param regex the regular expression - * @param qtrue the Node index to go to if the comparison matches - * @param qfalse the Node index to go to upon no match - */ - public MatchingNode(String feature, String regex, int qtrue, int qfalse) { - super(feature, regex, qtrue, qfalse); - this.pattern = Pattern.compile(regex); - } - - /** - * Compare the given value and return the appropriate CART index. - * - * @param val the value to compare -- this must be a String - */ - public int getNextNode(Object val) { - return pattern.matcher((String) val).matches() ? qtrue : qfalse; - } - - /** - * Get a string representation of this Node. - */ - public String toString() { - StringBuffer buf = - new StringBuffer(NODE + " " + getFeature() + " " - + OPERAND_MATCHES); - buf.append(getValueString() + " "); - buf.append(Integer.toString(qtrue) + " "); - buf.append(Integer.toString(qfalse)); - return buf.toString(); - } - } - - /** - * The final Node of a CART. This just a marker class. - */ - static class LeafNode extends Node { - /** - * Create a new LeafNode with the given value. - * - * @param the value of this LeafNode - */ - public LeafNode(Object value) { - super(value); - } - - /** - * Get a string representation of this Node. - */ - public String toString() { - return "LEAF " + getValueString(); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/FeatureSet.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/FeatureSet.java deleted file mode 100755 index 959901fe..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/FeatureSet.java +++ /dev/null @@ -1,145 +0,0 @@ -/** - * Portions Copyright 2001 Sun Microsystems, Inc. - * Portions Copyright 1999-2001 Language Technologies Institute, - * Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.alignment.tokenizer; - -import java.text.DecimalFormat; -import java.util.LinkedHashMap; -import java.util.Map; - -/** - * Implementation of the FeatureSet interface. - */ -public class FeatureSet { - - private final Map featureMap; - static DecimalFormat formatter; - - /** - * Creates a new empty feature set - */ - public FeatureSet() { - featureMap = new LinkedHashMap(); - } - - /** - * Determines if the given feature is present. - * - * @param name the name of the feature of interest - * - * @return true if the named feature is present - */ - public boolean isPresent(String name) { - return featureMap.containsKey(name); - } - - /** - * Removes the named feature from this set of features. - * - * @param name the name of the feature of interest - */ - public void remove(String name) { - featureMap.remove(name); - } - - /** - * Convenience method that returns the named feature as a string. - * - * @param name the name of the feature - * - * @return the value associated with the name or null if the value is not - * found - * - * @throws ClassCastException if the associated value is not a String - */ - public String getString(String name) { - return (String) getObject(name); - } - - /** - * Convenience method that returns the named feature as a int. - * - * @param name the name of the feature - * - * @return the value associated with the name or null if the value is not - * found - * - * @throws ClassCastException if the associated value is not an int. - */ - public int getInt(String name) { - return ((Integer) getObject(name)).intValue(); - } - - /** - * Convenience method that returns the named feature as a float. - * - * @param name the name of the feature - * - * @return the value associated with the name or null if the value is not - * found. - * - * @throws ClassCastException if the associated value is not a float - */ - public float getFloat(String name) { - return ((Float) getObject(name)).floatValue(); - } - - /** - * Returns the named feature as an object. - * - * @param name the name of the feature - * - * @return the value associated with the name or null if the value is not - * found - */ - public Object getObject(String name) { - return featureMap.get(name); - } - - /** - * Convenience method that sets the named feature as a int. - * - * @param name the name of the feature - * @param value the value of the feature - */ - public void setInt(String name, int value) { - setObject(name, new Integer(value)); - } - - /** - * Convenience method that sets the named feature as a float. - * - * @param name the name of the feature - * @param value the value of the feature - */ - public void setFloat(String name, float value) { - setObject(name, new Float(value)); - } - - /** - * Convenience method that sets the named feature as a String. - * - * @param name the name of the feature - * @param value the value of the feature - */ - public void setString(String name, String value) { - setObject(name, value); - } - - /** - * Sets the named feature. - * - * @param name the name of the feature - * @param value the value of the feature - */ - public void setObject(String name, Object value) { - featureMap.put(name, value); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/Item.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/Item.java deleted file mode 100755 index 2e69cb3b..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/Item.java +++ /dev/null @@ -1,447 +0,0 @@ -/** - * Portions Copyright 2001-2003 Sun Microsystems, Inc. - * Portions Copyright 1999-2001 Language Technologies Institute, - * Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.alignment.tokenizer; - -import java.util.StringTokenizer; - -/** - * Represents a node in a Relation. Items can have shared contents but each - * item has its own set of Daughters. The shared contents of an item - * (represented by ItemContents) includes the feature set for the item and the - * set of all relations that this item is contained in. An item can be - * contained in a number of relations and as daughters to other items. This - * class is used to keep track of all of these relationships. There may be many - * instances of item that reference the same shared ItemContents. - */ -public class Item { - private Relation ownerRelation; - private ItemContents contents; - private Item parent; - private Item daughter; - private Item next; - private Item prev; - - /** - * Creates an item. The item is coupled to a particular Relation. If shared - * contents is null a new sharedContents is created. - * - * @param relation the relation that owns this item - * @param sharedContents the contents that is shared with others. If null, - * a new sharedContents is created. - */ - public Item(Relation relation, ItemContents sharedContents) { - ownerRelation = relation; - if (sharedContents != null) { - contents = sharedContents; - } else { - contents = new ItemContents(); - } - parent = null; - daughter = null; - next = null; - prev = null; - - getSharedContents().addItemRelation(relation.getName(), this); - } - - /** - * Finds the item in the given relation that has the same shared contents. - * - * @param relationName the relation of interest - * - * @return the item as found in the given relation or null if not found - */ - public Item getItemAs(String relationName) { - return getSharedContents().getItemRelation(relationName); - } - - /** - * Retrieves the owning Relation. - * - * @return the relation that owns this item - */ - public Relation getOwnerRelation() { - return ownerRelation; - } - - /** - * Retrieves the shared contents for this item. - * - * @return the shared item contents - */ - public ItemContents getSharedContents() { - return contents; - } - - /** - * Determines if this item has daughters. - * - * @return true if this item has daughters - */ - public boolean hasDaughters() { - return daughter != null; - } - - /** - * Retrieves the first daughter of this item. - * - * @return the first daughter or null if none - */ - public Item getDaughter() { - return daughter; - } - - /** - * Retrieves the Nth daughter of this item. - * - * @param which the index of the daughter to return - * - * @return the Nth daughter or null if none at the given index - */ - public Item getNthDaughter(int which) { - Item d = daughter; - int count = 0; - while (count++ != which && d != null) { - d = d.next; - } - return d; - } - - /** - * Retrieves the last daughter of this item. - * - * @return the last daughter or null if none at the given index - */ - public Item getLastDaughter() { - Item d = daughter; - if (d == null) { - return null; - } - while (d.next != null) { - d = d.next; - } - return d; - } - - /** - * Adds the given item as a daughter to this item. - * - * @param item for the new daughter - * @return created item - */ - public Item addDaughter(Item item) { - Item newItem; - ItemContents contents; - - Item p = getLastDaughter(); - - if (p != null) { - newItem = p.appendItem(item); - } else { - if (item == null) { - contents = new ItemContents(); - } else { - contents = item.getSharedContents(); - } - newItem = new Item(getOwnerRelation(), contents); - newItem.parent = this; - daughter = newItem; - } - return newItem; - } - - /** - * Creates a new Item, adds it as a daughter to this item and returns the - * new item. - * - * @return the newly created item that was added as a daughter - */ - public Item createDaughter() { - return addDaughter(null); - } - - /** - * Returns the parent of this item. - * - * @return the parent of this item - */ - public Item getParent() { - Item n; - for (n = this; n.prev != null; n = n.prev) { - } - return n.parent; - } - - /** - * Sets the parent of this item. - * - * @param parent the parent of this item - */ - /* - * private void setParent(Item parent) { this.parent = parent; } - */ - - /** - * Returns the utterance associated with this item. - * - * @return the utterance that contains this item - */ - public Utterance getUtterance() { - return getOwnerRelation().getUtterance(); - } - - /** - * Returns the feature set of this item. - * - * @return the feature set of this item - */ - public FeatureSet getFeatures() { - return getSharedContents().getFeatures(); - } - - /** - * Finds the feature by following the given path. Path is a string of ":" - * or "." separated strings with the following interpretations: - *
      - *
    • n - next item - *
    • p - previous item - *
    • parent - the parent - *
    • daughter - the daughter - *
    • daughter1 - same as daughter - *
    • daughtern - the last daughter - *
    • R:relname - the item as found in the given relation 'relname' - *
    - * The last element of the path will be interpreted as a voice/language - * specific feature function (if present) or an item feature name. If the - * feature function exists it will be called with the item specified by the - * path, otherwise, a feature will be retrieved with the given name. If - * neither exist than a String "0" is returned. - * - * @param pathAndFeature the path to follow - * @return created object - */ - public Object findFeature(String pathAndFeature) { - int lastDot; - String feature; - String path; - Item item; - Object results = null; - - lastDot = pathAndFeature.lastIndexOf("."); - // string can be of the form "p.feature" or just "feature" - - if (lastDot == -1) { - feature = pathAndFeature; - path = null; - } else { - feature = pathAndFeature.substring(lastDot + 1); - path = pathAndFeature.substring(0, lastDot); - } - - item = findItem(path); - if (item != null) { - results = item.getFeatures().getObject(feature); - } - results = (results == null) ? "0" : results; - - // System.out.println("FI " + pathAndFeature + " are " + results); - - return results; - } - - /** - * Finds the item specified by the given path. - * - * Path is a string of ":" or "." separated strings with the following - * interpretations: - *
      - *
    • n - next item - *
    • p - previous item - *
    • parent - the parent - *
    • daughter - the daughter - *
    • daughter1 - same as daughter - *
    • daughtern - the last daughter - *
    • R:relname - the item as found in the given relation 'relname' - *
    - * If the given path takes us outside of the bounds of the item graph, then - * list access exceptions will be thrown. - * - * @param path the path to follow - * - * @return the item at the given path - */ - public Item findItem(String path) { - Item pitem = this; - StringTokenizer tok; - - if (path == null) { - return this; - } - - tok = new StringTokenizer(path, ":."); - - while (pitem != null && tok.hasMoreTokens()) { - String token = tok.nextToken(); - if (token.equals("n")) { - pitem = pitem.getNext(); - } else if (token.equals("p")) { - pitem = pitem.getPrevious(); - } else if (token.equals("nn")) { - pitem = pitem.getNext(); - if (pitem != null) { - pitem = pitem.getNext(); - } - } else if (token.equals("pp")) { - pitem = pitem.getPrevious(); - if (pitem != null) { - pitem = pitem.getPrevious(); - } - } else if (token.equals("parent")) { - pitem = pitem.getParent(); - } else if (token.equals("daughter") || token.equals("daughter1")) { - pitem = pitem.getDaughter(); - } else if (token.equals("daughtern")) { - pitem = pitem.getLastDaughter(); - } else if (token.equals("R")) { - String relationName = tok.nextToken(); - pitem = - pitem.getSharedContents() - .getItemRelation(relationName); - } else { - System.out.println("findItem: bad feature " + token + " in " - + path); - } - } - return pitem; - } - - /** - * Gets the next item in this list. - * - * @return the next item or null - */ - public Item getNext() { - return next; - } - - /** - * Gets the previous item in this list. - * - * @return the previous item or null - */ - public Item getPrevious() { - return prev; - } - - /** - * Appends an item in this list after this item. - * - * @param originalItem new item has shared contents with this item (or * - * null) - * - * @return the newly appended item - */ - public Item appendItem(Item originalItem) { - ItemContents contents; - Item newItem; - - if (originalItem == null) { - contents = null; - } else { - contents = originalItem.getSharedContents(); - } - - newItem = new Item(getOwnerRelation(), contents); - newItem.next = this.next; - if (this.next != null) { - this.next.prev = newItem; - } - - attach(newItem); - - if (this.ownerRelation.getTail() == this) { - this.ownerRelation.setTail(newItem); - } - return newItem; - } - - /** - * Attaches/appends an item to this one. - * - * @param item the item to append - */ - void attach(Item item) { - this.next = item; - item.prev = this; - } - - /** - * Prepends an item in this list before this item. - * - * @param originalItem new item has shared contents with this item (or * - * null) - * - * @return the newly appended item - */ - public Item prependItem(Item originalItem) { - ItemContents contents; - Item newItem; - - if (originalItem == null) { - contents = null; - } else { - contents = originalItem.getSharedContents(); - } - - newItem = new Item(getOwnerRelation(), contents); - newItem.prev = this.prev; - if (this.prev != null) { - this.prev.next = newItem; - } - newItem.next = this; - this.prev = newItem; - if (this.parent != null) { - this.parent.daughter = newItem; - newItem.parent = this.parent; - this.parent = null; - } - if (this.ownerRelation.getHead() == this) { - this.ownerRelation.setHead(newItem); - } - return newItem; - } - - // Inherited from object - public String toString() { - // if we have a feature called 'name' use that - // otherwise fall back on the default. - String name = getFeatures().getString("name"); - if (name == null) { - name = ""; - } - return name; - } - - /** - * Determines if the shared contents of the two items are the same. - * - * @param otherItem the item to compare - * - * @return true if the shared contents are the same - */ - public boolean equalsShared(Item otherItem) { - if (otherItem == null) { - return false; - } else { - return getSharedContents().equals(otherItem.getSharedContents()); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/ItemContents.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/ItemContents.java deleted file mode 100755 index 75213175..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/ItemContents.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Portions Copyright 2001 Sun Microsystems, Inc. - * Portions Copyright 1999-2001 Language Technologies Institute, - * Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.alignment.tokenizer; - - -/** - * Contains the information that is shared between multiple items. - */ -public class ItemContents { - private FeatureSet features; - private FeatureSet relations; - - /** - * Class Constructor. - */ - public ItemContents() { - features = new FeatureSet(); - relations = new FeatureSet(); - } - - /** - * Adds the given item to the set of relations. Whenever an item is added - * to a relation, it should add the name and the Item reference to this set - * of name/item mappings. This allows an item to find out the set of all - * relations that it is contained in. - * - * @param relationName the name of the relation - * @param item the item reference in the relation - */ - public void addItemRelation(String relationName, Item item) { - // System.out.println("AddItemRelation: " + relationName - // + " item: " + item); - relations.setObject(relationName, item); - } - - /** - * Removes the relation/item mapping from this ItemContents. - * - * @param relationName the name of the relation/item to remove - */ - public void removeItemRelation(String relationName) { - relations.remove(relationName); - } - - /** - * Given the name of a relation, returns the item the shares the same - * ItemContents. - * - * @param relationName the name of the relation of interest - * - * @return the item associated with this ItemContents in the named - * relation, or null if it does not exist - */ - public Item getItemRelation(String relationName) { - return (Item) relations.getObject(relationName); - } - - /** - * Returns the feature set for this item contents. - * - * @return the FeatureSet for this contents - */ - public FeatureSet getFeatures() { - return features; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/NumberExpander.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/NumberExpander.java deleted file mode 100755 index 4d81abfa..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/NumberExpander.java +++ /dev/null @@ -1,449 +0,0 @@ -/** - * Portions Copyright 2001-2003 Sun Microsystems, Inc. - * Portions Copyright 1999-2001 Language Technologies Institute, - * Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.alignment.tokenizer; - - -/** - * Expands Strings containing digits characters into a list of words - * representing those digits. - * - * It translates the following code from flite: - * lang/usEnglish/us_expand.c - */ -public class NumberExpander { - - private static final String[] digit2num = {"zero", "one", "two", "three", - "four", "five", "six", "seven", "eight", "nine"}; - - private static final String[] digit2teen = {"ten", /* shouldn't get called */ - "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", - "seventeen", "eighteen", "nineteen"}; - - private static final String[] digit2enty = {"zero", /* shouldn't get called */ - "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", - "ninety"}; - - private static final String[] ord2num = {"zeroth", "first", "second", - "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth"}; - - private static final String[] ord2teen = {"tenth", /* shouldn't get called */ - "eleventh", "twelfth", "thirteenth", "fourteenth", "fifteenth", - "sixteenth", "seventeenth", "eighteenth", "nineteenth"}; - - private static final String[] ord2enty = {"zeroth", /* shouldn't get called */ - "tenth", "twentieth", "thirtieth", "fortieth", "fiftieth", "sixtieth", - "seventieth", "eightieth", "ninetieth"}; - - private static String[] digit2Numness = { - "", "tens", "twenties", "thirties", "fourties", "fifties", - "sixties", "seventies", "eighties", "nineties" - }; - - /** - * Unconstructable - */ - private NumberExpander() {} - - /** - * Expands a digit string into a list of English words of those digits. For - * example, "1234" expands to "one two three four" - * - * @param numberString the digit string to expand. - * @param wordRelation words are added to this Relation - */ - public static void expandNumber(String numberString, - WordRelation wordRelation) { - int numDigits = numberString.length(); - - if (numDigits == 0) { - // wordRelation = null; - } else if (numDigits == 1) { - expandDigits(numberString, wordRelation); - } else if (numDigits == 2) { - expand2DigitNumber(numberString, wordRelation); - } else if (numDigits == 3) { - expand3DigitNumber(numberString, wordRelation); - } else if (numDigits < 7) { - expandBelow7DigitNumber(numberString, wordRelation); - } else if (numDigits < 10) { - expandBelow10DigitNumber(numberString, wordRelation); - } else if (numDigits < 13) { - expandBelow13DigitNumber(numberString, wordRelation); - } else { - expandDigits(numberString, wordRelation); - } - } - - /** - * Expands a two-digit string into a list of English words. - * - * @param numberString the string which is the number to expand - * @param wordRelation words are added to this Relation - */ - private static void expand2DigitNumber(String numberString, - WordRelation wordRelation) { - if (numberString.charAt(0) == '0') { - // numberString is "0X" - if (numberString.charAt(1) == '0') { - // numberString is "00", do nothing - } else { - // numberString is "01", "02" ... - String number = digit2num[numberString.charAt(1) - '0']; - wordRelation.addWord(number); - } - } else if (numberString.charAt(1) == '0') { - // numberString is "10", "20", ... - String number = digit2enty[numberString.charAt(0) - '0']; - wordRelation.addWord(number); - } else if (numberString.charAt(0) == '1') { - // numberString is "11", "12", ..., "19" - String number = digit2teen[numberString.charAt(1) - '0']; - wordRelation.addWord(number); - } else { - // numberString is "2X", "3X", ... - String enty = digit2enty[numberString.charAt(0) - '0']; - wordRelation.addWord(enty); - expandDigits(numberString.substring(1, numberString.length()), - wordRelation); - } - } - - /** - * Expands a three-digit string into a list of English words. - * - * @param numberString the string which is the number to expand - * @param wordRelation words are added to this Relation - */ - private static void expand3DigitNumber(String numberString, - WordRelation wordRelation) { - if (numberString.charAt(0) == '0') { - expandNumberAt(numberString, 1, wordRelation); - } else { - String hundredDigit = digit2num[numberString.charAt(0) - '0']; - wordRelation.addWord(hundredDigit); - wordRelation.addWord("hundred"); - expandNumberAt(numberString, 1, wordRelation); - } - } - - /** - * Expands a string that is a 4 to 6 digits number into a list of English - * words. For example, "333000" into "three hundred and thirty-three - * thousand". - * - * @param numberString the string which is the number to expand - * @param wordRelation words are added to this Relation - */ - private static void expandBelow7DigitNumber(String numberString, - WordRelation wordRelation) { - expandLargeNumber(numberString, "thousand", 3, wordRelation); - } - - /** - * Expands a string that is a 7 to 9 digits number into a list of English - * words. For example, "19000000" into nineteen million. - * - * @param numberString the string which is the number to expand - * @param wordRelation words are added to this Relation - */ - private static void expandBelow10DigitNumber(String numberString, - WordRelation wordRelation) { - expandLargeNumber(numberString, "million", 6, wordRelation); - } - - /** - * Expands a string that is a 10 to 12 digits number into a list of English - * words. For example, "27000000000" into twenty-seven billion. - * - * @param numberString the string which is the number to expand - * @param wordRelation words are added to this Relation - */ - private static void expandBelow13DigitNumber(String numberString, - WordRelation wordRelation) { - expandLargeNumber(numberString, "billion", 9, wordRelation); - } - - /** - * Expands a string that is a number longer than 3 digits into a list of - * English words. For example, "1000" into one thousand. - * - * @param numberString the string which is the number to expand - * @param order either "thousand", "million", or "billion" - * @param numberZeroes the number of zeroes, depending on the order, so its - * either 3, 6, or 9 - * @param wordRelation words are added to this Relation - */ - private static void expandLargeNumber(String numberString, String order, - int numberZeroes, WordRelation wordRelation) { - int numberDigits = numberString.length(); - - // parse out the prefix, e.g., "113" in "113,000" - int i = numberDigits - numberZeroes; - String part = numberString.substring(0, i); - - // get how many thousands/millions/billions - Item oldTail = wordRelation.getTail(); - expandNumber(part, wordRelation); - if (wordRelation.getTail() != oldTail) { - wordRelation.addWord(order); - } - expandNumberAt(numberString, i, wordRelation); - } - - /** - * Returns the number string list of the given string starting at the given - * index. E.g., expandNumberAt("1100", 1) gives "one hundred" - * - * @param numberString the string which is the number to expand - * @param startIndex the starting position - * @param wordRelation words are added to this Relation - */ - private static void expandNumberAt(String numberString, int startIndex, - WordRelation wordRelation) { - expandNumber( - numberString.substring(startIndex, numberString.length()), - wordRelation); - } - - /** - * Expands given token to list of words pronouncing it as digits - * - * @param numberString the string which is the number to expand - * @param wordRelation words are added to this Relation - */ - public static void expandDigits(String numberString, - WordRelation wordRelation) { - int numberDigits = numberString.length(); - for (int i = 0; i < numberDigits; i++) { - char digit = numberString.charAt(i); - if (Character.isDigit(digit)) { - wordRelation.addWord(digit2num[numberString.charAt(i) - '0']); - } else { - wordRelation.addWord("umpty"); - } - } - } - - /** - * Expands the digit string of an ordinal number. - * - * @param rawNumberString the string which is the number to expand - * @param wordRelation words are added to this Relation - */ - public static void expandOrdinal(String rawNumberString, - WordRelation wordRelation) { - // remove all ','s from the raw number string - expandNumber(rawNumberString.replace(",", ""), wordRelation); - - // get the last in the list of number strings - Item lastItem = wordRelation.getTail(); - - if (lastItem != null) { - - FeatureSet featureSet = lastItem.getFeatures(); - String lastNumber = featureSet.getString("name"); - String ordinal = findMatchInArray(lastNumber, digit2num, ord2num); - - if (ordinal == null) { - ordinal = findMatchInArray(lastNumber, digit2teen, ord2teen); - } - if (ordinal == null) { - ordinal = findMatchInArray(lastNumber, digit2enty, ord2enty); - } - - if (lastNumber.equals("hundred")) { - ordinal = "hundredth"; - } else if (lastNumber.equals("thousand")) { - ordinal = "thousandth"; - } else if (lastNumber.equals("billion")) { - ordinal = "billionth"; - } - - // if there was an ordinal, set the last element of the list - // to that ordinal; otherwise, don't do anything - if (ordinal != null) { - wordRelation.setLastWord(ordinal); - } - } - } - - - public static void expandNumess(String rawString, WordRelation wordRelation) { - if (rawString.length() == 4) { - expand2DigitNumber(rawString.substring(0, 2), wordRelation); - expandNumess(rawString.substring(2), wordRelation); - } else { - wordRelation.addWord(digit2Numness[rawString.charAt(0) - '0']); - } - } - - /** - * Finds a match of the given string in the given array, and returns the - * element at the same index in the returnInArray - * - * @param strToMatch the string to match - * @param matchInArray the source array - * @param returnInArray the return array - * - * @return an element in returnInArray, or null if a match is - * not found - */ - private static String findMatchInArray(String strToMatch, - String[] matchInArray, String[] returnInArray) { - for (int i = 0; i < matchInArray.length; i++) { - if (strToMatch.equals(matchInArray[i])) { - if (i < returnInArray.length) { - return returnInArray[i]; - } else { - return null; - } - } - } - return null; - } - - /** - * Expands the given number string as pairs as in years or IDs - * - * @param numberString the string which is the number to expand - * @param wordRelation words are added to this Relation - */ - public static void expandID(String numberString, WordRelation wordRelation) { - - int numberDigits = numberString.length(); - - if ((numberDigits == 4) && (numberString.charAt(2) == '0') - && (numberString.charAt(3) == '0')) { - if (numberString.charAt(1) == '0') { // e.g. 2000, 3000 - expandNumber(numberString, wordRelation); - } else { - expandNumber(numberString.substring(0, 2), wordRelation); - wordRelation.addWord("hundred"); - } - } else if ((numberDigits == 2) && (numberString.charAt(0) == '0')) { - wordRelation.addWord("oh"); - expandDigits(numberString.substring(1, 2), wordRelation); - } else if ((numberDigits == 4 && numberString.charAt(1) == '0') - || numberDigits < 3) { - expandNumber(numberString, wordRelation); - } else if (numberDigits % 2 == 1) { - String firstDigit = digit2num[numberString.charAt(0) - '0']; - wordRelation.addWord(firstDigit); - expandID(numberString.substring(1, numberDigits), wordRelation); - } else { - expandNumber(numberString.substring(0, 2), wordRelation); - expandID(numberString.substring(2, numberDigits), wordRelation); - } - } - - /** - * Expands the given number string as a real number. - * - * @param numberString the string which is the real number to expand - * @param wordRelation words are added to this Relation - */ - public static void expandReal(String numberString, - WordRelation wordRelation) { - - int stringLength = numberString.length(); - int position; - - if (numberString.charAt(0) == '-') { - // negative real numbers - wordRelation.addWord("minus"); - expandReal(numberString.substring(1, stringLength), wordRelation); - } else if (numberString.charAt(0) == '+') { - // prefixed with a '+' - wordRelation.addWord("plus"); - expandReal(numberString.substring(1, stringLength), wordRelation); - } else if ((position = numberString.indexOf('e')) != -1 - || (position = numberString.indexOf('E')) != -1) { - // numbers with 'E' or 'e' - expandReal(numberString.substring(0, position), wordRelation); - wordRelation.addWord("e"); - expandReal(numberString.substring(position + 1), wordRelation); - } else if ((position = numberString.indexOf('.')) != -1) { - // numbers with '.' - String beforeDot = numberString.substring(0, position); - if (beforeDot.length() > 0) { - expandReal(beforeDot, wordRelation); - } - wordRelation.addWord("point"); - String afterDot = numberString.substring(position + 1); - if (afterDot.length() > 0) { - expandDigits(afterDot, wordRelation); - } - } else { - // everything else - expandNumber(numberString, wordRelation); - } - } - - /** - * Expands the given string of letters as a list of single char symbols. - * - * @param letters the string of letters to expand - * @param wordRelation words are added to this Relation - */ - public static void expandLetters(String letters, WordRelation wordRelation) { - letters = letters.toLowerCase(); - char c; - - for (int i = 0; i < letters.length(); i++) { - // if this is a number - c = letters.charAt(i); - if (Character.isDigit(c)) { - wordRelation.addWord(digit2num[c - '0']); - } else if (letters.equals("a")) { - wordRelation.addWord("_a"); - } else { - wordRelation.addWord(String.valueOf(c)); - } - } - } - - /** - * Returns the integer value of the given string of Roman numerals. - * - * @param roman the string of Roman numbers - * - * @return the integer value - */ - public static int expandRoman(String roman) { - int value = 0; - - for (int p = 0; p < roman.length(); p++) { - char c = roman.charAt(p); - if (c == 'X') { - value += 10; - } else if (c == 'V') { - value += 5; - } else if (c == 'I') { - if (p + 1 < roman.length()) { - char p1 = roman.charAt(p + 1); - if (p1 == 'V') { - value += 4; - p++; - } else if (p1 == 'X') { - value += 9; - p++; - } else { - value += 1; - } - } else { - value += 1; - } - } - } - return value; - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/PathExtractor.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/PathExtractor.java deleted file mode 100755 index 9ee7a42e..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/PathExtractor.java +++ /dev/null @@ -1,264 +0,0 @@ -/** - * Portions Copyright 2001 Sun Microsystems, Inc. - * Portions Copyright 1999-2001 Language Technologies Institute, - * Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.alignment.tokenizer; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.StringTokenizer; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * Interface that Manages a feature or item path. Allows navigation to the - * corresponding feature or item. This class in controlled by the following - * system properties: - * - *
    - *   com.sun.speech.freetts.interpretCartPaths - default false
    - *   com.sun.speech.freetts.lazyCartCompile - default true
    - * 
    - * - * com.sun.speech.freetts.interpretCartPaths - * - * Instances of this class will optionally pre-compile the paths. Pre-compiling - * paths reduces the processing time and objects needed to extract a feature or - * an item based upon a path. - */ -public class PathExtractor { - /** Logger instance. */ - private static final Logger LOGGER = Logger - .getLogger(PathExtractor.class.getName()); - - /** - * If this system property is set to true, paths will not be compiled. - */ - public final static String INTERPRET_PATHS_PROPERTY = - "com.sun.speech.freetts.interpretCartPaths"; - - /** - * If this system property is set to true, CART feature/item paths will - * only be compiled as needed. - */ - public final static String LAZY_COMPILE_PROPERTY = - "com.sun.speech.freetts.lazyCartCompile"; - - private final static boolean INTERPRET_PATHS = System.getProperty( - INTERPRET_PATHS_PROPERTY, "false").equals("true"); - private final static boolean LAZY_COMPILE = System.getProperty( - LAZY_COMPILE_PROPERTY, "true").equals("true"); - - private String pathAndFeature; - private String path; - private String feature; - private Object[] compiledPath; - - /** - * Creates a path for the given feature. - * @param pathAndFeature string to use - * @param wantFeature do we need features - */ - public PathExtractor(String pathAndFeature, boolean wantFeature) { - this.pathAndFeature = pathAndFeature; - if (INTERPRET_PATHS) { - path = pathAndFeature; - return; - } - - if (wantFeature) { - int lastDot = pathAndFeature.lastIndexOf("."); - // string can be of the form "p.feature" or just "feature" - - if (lastDot == -1) { - feature = pathAndFeature; - path = null; - } else { - feature = pathAndFeature.substring(lastDot + 1); - path = pathAndFeature.substring(0, lastDot); - } - } else { - this.path = pathAndFeature; - } - - if (!LAZY_COMPILE) { - compiledPath = compile(path); - } - } - - /** - * Finds the item associated with this Path. - * - * @param item the item to start at - * @return the item associated with the path or null - */ - public Item findItem(Item item) { - - if (INTERPRET_PATHS) { - return item.findItem(path); - } - - if (compiledPath == null) { - compiledPath = compile(path); - } - - Item pitem = item; - - for (int i = 0; pitem != null && i < compiledPath.length;) { - OpEnum op = (OpEnum) compiledPath[i++]; - if (op == OpEnum.NEXT) { - pitem = pitem.getNext(); - } else if (op == OpEnum.PREV) { - pitem = pitem.getPrevious(); - } else if (op == OpEnum.NEXT_NEXT) { - pitem = pitem.getNext(); - if (pitem != null) { - pitem = pitem.getNext(); - } - } else if (op == OpEnum.PREV_PREV) { - pitem = pitem.getPrevious(); - if (pitem != null) { - pitem = pitem.getPrevious(); - } - } else if (op == OpEnum.PARENT) { - pitem = pitem.getParent(); - } else if (op == OpEnum.DAUGHTER) { - pitem = pitem.getDaughter(); - } else if (op == OpEnum.LAST_DAUGHTER) { - pitem = pitem.getLastDaughter(); - } else if (op == OpEnum.RELATION) { - String relationName = (String) compiledPath[i++]; - pitem = - pitem.getSharedContents() - .getItemRelation(relationName); - } else { - System.out.println("findItem: bad feature " + op + " in " - + path); - } - } - return pitem; - } - - /** - * Finds the feature associated with this Path. - * - * @param item the item to start at - * @return the feature associated or "0" if the feature was not found. - */ - public Object findFeature(Item item) { - - if (INTERPRET_PATHS) { - return item.findFeature(path); - } - - Item pitem = findItem(item); - Object results = null; - if (pitem != null) { - if (LOGGER.isLoggable(Level.FINER)) { - LOGGER.finer("findFeature: Item [" + pitem + "], feature '" - + feature + "'"); - } - results = pitem.getFeatures().getObject(feature); - } - - results = (results == null) ? "0" : results; - if (LOGGER.isLoggable(Level.FINER)) { - LOGGER.finer("findFeature: ...results = '" + results + "'"); - } - return results; - } - - /** - * Compiles the given path into the compiled form - * - * @param path the path to compile - * @return the compiled form which is in the form of an array path - * traversal enums and associated strings - */ - private Object[] compile(String path) { - if (path == null) { - return new Object[0]; - } - - List list = new ArrayList(); - StringTokenizer tok = new StringTokenizer(path, ":."); - - while (tok.hasMoreTokens()) { - String token = tok.nextToken(); - OpEnum op = OpEnum.getInstance(token); - if (op == null) { - throw new Error("Bad path compiled " + path); - } - - list.add(op); - - if (op == OpEnum.RELATION) { - list.add(tok.nextToken()); - } - } - return list.toArray(); - } - - // inherited for Object - - public String toString() { - return pathAndFeature; - } - - // TODO: add these to the interface should we support binary - // files - /* - * public void writeBinary(); public void readBinary(); - */ -} - - -/** - * An enumerated type associated with path operations. - */ -class OpEnum { - static private Map map = new HashMap(); - - public final static OpEnum NEXT = new OpEnum("n"); - public final static OpEnum PREV = new OpEnum("p"); - public final static OpEnum NEXT_NEXT = new OpEnum("nn"); - public final static OpEnum PREV_PREV = new OpEnum("pp"); - public final static OpEnum PARENT = new OpEnum("parent"); - public final static OpEnum DAUGHTER = new OpEnum("daughter"); - public final static OpEnum LAST_DAUGHTER = new OpEnum("daughtern"); - public final static OpEnum RELATION = new OpEnum("R"); - - private String name; - - /** - * Creates a new OpEnum.. There is a limited set of OpEnums - * - * @param name the path name for this Enum - */ - private OpEnum(String name) { - this.name = name; - map.put(name, this); - } - - /** - * gets an OpEnum thats associated with the given name. - * - * @param name the name of the OpEnum of interest - */ - public static OpEnum getInstance(String name) { - return (OpEnum) map.get(name); - } - - // inherited from Object - public String toString() { - return name; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/PrefixFSM.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/PrefixFSM.java deleted file mode 100755 index 6feea078..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/PrefixFSM.java +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Portions Copyright 2001 Sun Microsystems, Inc. - * Portions Copyright 1999-2001 Language Technologies Institute, - * Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.alignment.tokenizer; - -import java.io.IOException; -import java.net.URL; - -/** - * Implements a finite state machine that checks if a given string is a prefix. - */ -public class PrefixFSM extends PronounceableFSM { - - /** - * Constructs a PrefixFSM. - * @param url of the fsm - * @throws IOException if load failed - */ - public PrefixFSM(URL url) throws IOException { - super(url, true); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/PronounceableFSM.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/PronounceableFSM.java deleted file mode 100755 index 6c1e1fb3..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/PronounceableFSM.java +++ /dev/null @@ -1,172 +0,0 @@ -/** - * Portions Copyright 2001 Sun Microsystems, Inc. - * Portions Copyright 1999-2001 Language Technologies Institute, - * Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.alignment.tokenizer; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.URL; -import java.util.StringTokenizer; - -/** - * Implements a finite state machine that checks if a given string is - * pronounceable. If it is pronounceable, the method accept() will - * return true. - */ -public class PronounceableFSM { - - private static final String VOCAB_SIZE = "VOCAB_SIZE"; - private static final String NUM_OF_TRANSITIONS = "NUM_OF_TRANSITIONS"; - private static final String TRANSITIONS = "TRANSITIONS"; - - /** - * The vocabulary size. - */ - protected int vocabularySize; - - /** - * The transitions of this FSM - */ - protected int[] transitions; - - /** - * Whether we should scan the input string from the front. - */ - protected boolean scanFromFront; - - /** - * Constructs a PronounceableFSM with information in the given URL. - * - * @param url the URL that contains the FSM specification - * @param scanFromFront indicates whether this FSM should scan the input - * string from the front, or from the back - * @throws IOException if something went wrong - */ - public PronounceableFSM(URL url, boolean scanFromFront) throws IOException { - this.scanFromFront = scanFromFront; - InputStream is = url.openStream(); - loadText(is); - is.close(); - } - - /** - * Constructs a PronounceableFSM with the given attributes. - * - * @param vocabularySize the vocabulary size of the FSM - * @param transitions the transitions of the FSM - * @param scanFromFront indicates whether this FSM should scan the input - * string from the front, or from the back - */ - public PronounceableFSM(int vocabularySize, int[] transitions, - boolean scanFromFront) { - this.vocabularySize = vocabularySize; - this.transitions = transitions; - this.scanFromFront = scanFromFront; - } - - /** - * Loads the ASCII specification of this FSM from the given InputStream. - * - * @param is the input stream to load from - * - * @throws IOException if an error occurs on input. - */ - private void loadText(InputStream is) throws IOException { - BufferedReader reader = new BufferedReader(new InputStreamReader(is)); - String line = null; - while ((line = reader.readLine()) != null) { - if (!line.startsWith("***")) { - if (line.startsWith(VOCAB_SIZE)) { - vocabularySize = parseLastInt(line); - } else if (line.startsWith(NUM_OF_TRANSITIONS)) { - int transitionsSize = parseLastInt(line); - transitions = new int[transitionsSize]; - } else if (line.startsWith(TRANSITIONS)) { - StringTokenizer st = new StringTokenizer(line); - String transition = st.nextToken(); - int i = 0; - while (st.hasMoreTokens() && i < transitions.length) { - transition = st.nextToken().trim(); - transitions[i++] = Integer.parseInt(transition); - } - } - } - } - reader.close(); - } - - /** - * Returns the integer value of the last integer in the given string. - * - * @param line the line to parse the integer from - * - * @return an integer - */ - private int parseLastInt(String line) { - String lastInt = line.trim().substring(line.lastIndexOf(" ")); - return Integer.parseInt(lastInt.trim()); - } - - /** - * Causes this FSM to transition to the next state given the current state - * and input symbol. - * - * @param state the current state - * @param symbol the input symbol - */ - private int transition(int state, int symbol) { - for (int i = state; i < transitions.length; i++) { - if ((transitions[i] % vocabularySize) == symbol) { - return (transitions[i] / vocabularySize); - } - } - return -1; - } - - /** - * Checks to see if this finite state machine accepts the given input - * string. - * - * @param inputString the input string to be tested - * - * @return true if this FSM accepts, false if it rejects - */ - public boolean accept(String inputString) { - int symbol; - int state = transition(0, '#'); - int leftEnd = inputString.length() - 1; - int start = (scanFromFront) ? 0 : leftEnd; - - for (int i = start; 0 <= i && i <= leftEnd;) { - char c = inputString.charAt(i); - if (c == 'n' || c == 'm') { - symbol = 'N'; - } else if ("aeiouy".indexOf(c) != -1) { - symbol = 'V'; - } else { - symbol = c; - } - state = transition(state, symbol); - if (state == -1) { - return false; - } else if (symbol == 'V') { - return true; - } - if (scanFromFront) { - i++; - } else { - i--; - } - } - return false; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/Relation.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/Relation.java deleted file mode 100755 index adcfc0b0..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/Relation.java +++ /dev/null @@ -1,145 +0,0 @@ -/** - * Portions Copyright 2001 Sun Microsystems, Inc. - * Portions Copyright 1999-2001 Language Technologies Institute, - * Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.alignment.tokenizer; - -import edu.cmu.sphinx.alignment.USEnglishTokenizer; - - - -/** - * Represents an ordered set of {@link Item}s and their associated children. A - * relation has a name and a list of items, and is added to an - * {@link Utterance} via an {@link USEnglishTokenizer}. - */ -public class Relation { - private String name; - private Utterance owner; - private Item head; - private Item tail; - - /** - * Name of the relation that contains tokens from the original input text. - * This is the first thing to be added to the utterance. - */ - public static final String TOKEN = "Token"; - - /** - * Name of the relation that contains the normalized version of the - * original input text. - */ - public static final String WORD = "Word"; - - /** - * Creates a relation. - * - * @param name the name of the Relation - * @param owner the utterance that contains this relation - */ - Relation(String name, Utterance owner) { - this.name = name; - this.owner = owner; - head = null; - tail = null; - } - - /** - * Retrieves the name of this Relation. - * - * @return the name of this Relation - */ - public String getName() { - return name; - } - - /** - * Gets the head of the item list. - * - * @return the head item - */ - public Item getHead() { - return head; - } - - /** - * Sets the head of the item list. - * - * @param item the new head item - */ - void setHead(Item item) { - head = item; - } - - /** - * Gets the tail of the item list. - * - * @return the tail item - */ - public Item getTail() { - return tail; - } - - /** - * Sets the tail of the item list. - * - * @param item the new tail item - */ - void setTail(Item item) { - tail = item; - } - - /** - * Adds a new item to this relation. The item added does not share its - * contents with any other item. - * - * @return the newly added item - */ - public Item appendItem() { - return appendItem(null); - } - - /** - * Adds a new item to this relation. The item added shares its contents - * with the original item. - * - * @param originalItem the ItemContents that will be shared by the new item - * - * @return the newly added item - */ - public Item appendItem(Item originalItem) { - ItemContents contents; - Item newItem; - - if (originalItem == null) { - contents = null; - } else { - contents = originalItem.getSharedContents(); - } - newItem = new Item(this, contents); - if (head == null) { - head = newItem; - } - - if (tail != null) { - tail.attach(newItem); - } - tail = newItem; - return newItem; - } - - /** - * Returns the utterance that contains this relation. - * - * @return the utterance that contains this relation - */ - public Utterance getUtterance() { - return owner; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/SuffixFSM.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/SuffixFSM.java deleted file mode 100755 index 32b7972d..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/SuffixFSM.java +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Portions Copyright 2001 Sun Microsystems, Inc. - * Portions Copyright 1999-2001 Language Technologies Institute, - * Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.alignment.tokenizer; - -import java.io.IOException; -import java.net.URL; - -/** - * Implements a finite state machine that checks if a given string is a suffix. - */ -public class SuffixFSM extends PronounceableFSM { - - /** - * Constructs a SuffixFSM. - * @param url suffix of FSM - * @throws IOException if loading failed - */ - public SuffixFSM(URL url) throws IOException { - super(url, false); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/Utterance.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/Utterance.java deleted file mode 100755 index 3f28433c..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/Utterance.java +++ /dev/null @@ -1,229 +0,0 @@ -/** - * Portions Copyright 2001 Sun Microsystems, Inc. - * Portions Copyright 1999-2001 Language Technologies Institute, - * Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.alignment.tokenizer; - -import java.util.Iterator; - -import edu.cmu.sphinx.alignment.Token; - -/** - * Holds all the data for an utterance to be spoken. It is incrementally - * modified by various UtteranceProcessor implementations. An utterance - * contains a set of Features (essential a set of properties) and a set of - * Relations. A Relation is an ordered set of Item graphs. The utterance - * contains a set of features and implements FeatureSet so that applications - * can set/get features directly from the utterance. If a feature query is not - * found in the utterance feature set, the query is forwarded to the FeatureSet - * of the voice associated with the utterance. - */ -public class Utterance { - private FeatureSet features; - private FeatureSet relations; - - /** - * Creates an utterance with the given set of tokenized text. - * - * @param tokenizer tokenizer to use for utterance. - */ - public Utterance(CharTokenizer tokenizer) { - features = new FeatureSet(); - relations = new FeatureSet(); - setTokenList(tokenizer); - } - - /** - * Creates a new relation with the given name and adds it to this - * utterance. - * - * @param name the name of the new relation - * - * @return the newly created relation - */ - public Relation createRelation(String name) { - Relation relation = new Relation(name, this); - relations.setObject(name, relation); - return relation; - } - - /** - * Retrieves a relation from this utterance. - * - * @param name the name of the Relation - * - * @return the relation or null if the relation is not found - */ - public Relation getRelation(String name) { - return (Relation) relations.getObject(name); - } - - /** - * Determines if this utterance contains a relation with the given name. - * - * @param name the name of the relation of interest. - * @return if relation is present - */ - public boolean hasRelation(String name) { - return relations.isPresent(name); - } - - /** - * Removes the named feature from this set of features. - * - * @param name the name of the feature of interest - */ - public void remove(String name) { - features.remove(name); - } - - /** - * Convenience method that sets the named feature as an int. - * - * @param name the name of the feature - * @param value the value of the feature - */ - public void setInt(String name, int value) { - features.setInt(name, value); - } - - /** - * Convenience method that sets the named feature as a float. - * - * @param name the name of the feature - * @param value the value of the feature - */ - public void setFloat(String name, float value) { - features.setFloat(name, value); - } - - /** - * Convenience method that sets the named feature as a String. - * - * @param name the name of the feature - * @param value the value of the feature - */ - public void setString(String name, String value) { - features.setString(name, value); - } - - /** - * Sets the named feature. - * - * @param name the name of the feature - * @param value the value of the feature - */ - public void setObject(String name, Object value) { - features.setObject(name, value); - } - - /** - * Returns the Item in the given Relation associated with the given time. - * - * @param relation the name of the relation - * @param time the time - * @return the item - */ - public Item getItem(String relation, float time) { - Relation segmentRelation = null; - String pathName = null; - - if (relation.equals(Relation.WORD)) { - pathName = "R:SylStructure.parent.parent.R:Word"; - } else if (relation.equals(Relation.TOKEN)) { - pathName = "R:SylStructure.parent.parent.R:Token.parent"; - } else { - throw new IllegalArgumentException( - "Utterance.getItem(): relation cannot be " + relation); - } - - PathExtractor path = new PathExtractor(pathName, false); - - // get the Item in the Segment Relation with the given time - Item segmentItem = getItem(segmentRelation, time); - - if (segmentItem != null) { - return path.findItem(segmentItem); - } else { - return null; - } - } - - private static Item getItem(Relation segmentRelation, float time) { - Item lastSegment = segmentRelation.getTail(); - // If given time is closer to the front than the end, search from - // the front; otherwise, start search from end - // this might not be the best strategy though. - float lastSegmentEndTime = getSegmentEnd(lastSegment); - if (time < 0 || lastSegmentEndTime < time) { - return null; - } else if (lastSegmentEndTime - time > time) { - return findFromFront(segmentRelation, time); - } else { - return findFromEnd(segmentRelation, time); - } - } - - private static Item findFromEnd(Relation segmentRelation, float time) { - Item item = segmentRelation.getTail(); - while (item != null && getSegmentEnd(item) > time) { - item = item.getPrevious(); - } - - if (item != segmentRelation.getTail()) { - item = item.getNext(); - } - - return item; - } - - private static Item findFromFront(Relation segmentRelation, float time) { - Item item = segmentRelation.getHead(); - while (item != null && time > getSegmentEnd(item)) { - item = item.getNext(); - } - return item; - } - - private static float getSegmentEnd(Item segment) { - FeatureSet segmentFeatureSet = segment.getFeatures(); - return segmentFeatureSet.getFloat("end"); - } - - /** - * Sets the token list for this utterance. Note that this could be - * optimized by turning the token list directly into the token relation. - * - * @param tokenList the tokenList - * - */ - private void setTokenList(Iterator tokenizer) { - Relation relation = createRelation(Relation.TOKEN); - while (tokenizer.hasNext()) { - Token token = tokenizer.next(); - String tokenWord = token.getWord(); - - if (tokenWord != null && tokenWord.length() > 0) { - Item item = relation.appendItem(); - - FeatureSet featureSet = item.getFeatures(); - featureSet.setString("name", tokenWord); - featureSet.setString("whitespace", token.getWhitespace()); - featureSet.setString("prepunctuation", - token.getPrepunctuation()); - featureSet.setString("punc", token.getPostpunctuation()); - featureSet.setString("file_pos", - String.valueOf(token.getPosition())); - featureSet.setString("line_number", - String.valueOf(token.getLineNumber())); - - } - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/WordRelation.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/WordRelation.java deleted file mode 100755 index dbedf40b..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/alignment/tokenizer/WordRelation.java +++ /dev/null @@ -1,85 +0,0 @@ -/** - * Portions Copyright 2001 Sun Microsystems, Inc. - * Portions Copyright 1999-2001 Language Technologies Institute, - * Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.alignment.tokenizer; - -import edu.cmu.sphinx.alignment.USEnglishTokenizer; - -/** - * Helper class to add words and breaks into a Relation object. - */ -public class WordRelation { - - private Relation relation; - private USEnglishTokenizer tokenToWords; - - private WordRelation(Relation parentRelation, USEnglishTokenizer tokenToWords) { - this.relation = parentRelation; - this.tokenToWords = tokenToWords; - } - - /** - * Creates a WordRelation object with the given utterance and TokenToWords. - * - * @param utterance the Utterance from which to create a Relation - * @param tokenToWords the TokenToWords object to use - * - * @return a WordRelation object - */ - public static WordRelation createWordRelation(Utterance utterance, - USEnglishTokenizer tokenToWords) { - Relation relation = utterance.createRelation(Relation.WORD); - return new WordRelation(relation, tokenToWords); - } - - /** - * Adds a break as a feature to the last item in the list. - */ - public void addBreak() { - Item wordItem = (Item) relation.getTail(); - if (wordItem != null) { - FeatureSet featureSet = wordItem.getFeatures(); - featureSet.setString("break", "1"); - } - } - - /** - * Adds a word as an Item to this WordRelation object. - * - * @param word the word to add - */ - public void addWord(String word) { - Item tokenItem = tokenToWords.getTokenItem(); - Item wordItem = tokenItem.createDaughter(); - FeatureSet featureSet = wordItem.getFeatures(); - featureSet.setString("name", word); - relation.appendItem(wordItem); - } - - /** - * Sets the last Item in this WordRelation to the given word. - * - * @param word the word to set - */ - public void setLastWord(String word) { - Item lastItem = relation.getTail(); - FeatureSet featureSet = lastItem.getFeatures(); - featureSet.setString("name", word); - } - - /** - * Returns the last item in this WordRelation. - * - * @return the last item - */ - public Item getTail() { - return relation.getTail(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/AbstractSpeechRecognizer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/AbstractSpeechRecognizer.java deleted file mode 100755 index b369dc29..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/AbstractSpeechRecognizer.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright 2013 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ - -package edu.cmu.sphinx.api; - -import java.io.IOException; - -import edu.cmu.sphinx.decoder.adaptation.ClusteredDensityFileData; -import edu.cmu.sphinx.decoder.adaptation.Stats; -import edu.cmu.sphinx.decoder.adaptation.Transform; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.Sphinx3Loader; -import edu.cmu.sphinx.recognizer.Recognizer; -import edu.cmu.sphinx.result.Result; - - -/** - * Base class for high-level speech recognizers. - */ -public class AbstractSpeechRecognizer { - - protected final Context context; - protected final Recognizer recognizer; - - protected ClusteredDensityFileData clusters; - - protected final SpeechSourceProvider speechSourceProvider; - - /** - * Constructs recognizer object using provided configuration. - * @param configuration initial configuration - * @throws IOException if IO went wrong - */ - public AbstractSpeechRecognizer(Configuration configuration) - throws IOException - { - this(new Context(configuration)); - } - - protected AbstractSpeechRecognizer(Context context) throws IOException { - this.context = context; - recognizer = context.getInstance(Recognizer.class); - speechSourceProvider = new SpeechSourceProvider(); - } - - /** - * Returns result of the recognition. - * - * @return recognition result or {@code null} if there is no result, e.g., because the - * microphone or input stream has been closed - */ - public SpeechResult getResult() { - Result result = recognizer.recognize(); - return null == result ? null : new SpeechResult(result); - } - - public Stats createStats(int numClasses) { - clusters = new ClusteredDensityFileData(context.getLoader(), numClasses); - return new Stats(context.getLoader(), clusters); - } - - public void setTransform(Transform transform) { - if (clusters != null) { - context.getLoader().update(transform, clusters); - } - } - - public void loadTransform(String path, int numClass) throws Exception { - clusters = new ClusteredDensityFileData(context.getLoader(), numClass); - Transform transform = new Transform((Sphinx3Loader)context.getLoader(), numClass); - transform.load(path); - context.getLoader().update(transform, clusters); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/Configuration.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/Configuration.java deleted file mode 100755 index bd6ccf21..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/Configuration.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright 2013 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ - -package edu.cmu.sphinx.api; - - -/** - * Represents common configuration options. - * - * This configuration is used by high-level recognition classes. - * - * @see SpeechAligner - * @see LiveSpeechRecognizer - * @see StreamSpeechRecognizer - */ -public class Configuration { - - private String acousticModelPath; - private String dictionaryPath; - private String languageModelPath; - private String grammarPath; - private String grammarName; - - private int sampleRate = 16000; - private boolean useGrammar = false; - - /** - * @return path to acoustic model - */ - public String getAcousticModelPath() { - return acousticModelPath; - } - - /** - * Sets path to acoustic model. - * @param acousticModelPath URL of the acoustic model - */ - public void setAcousticModelPath(String acousticModelPath) { - this.acousticModelPath = acousticModelPath; - } - - /** - * @return path to dictionary. - */ - public String getDictionaryPath() { - return dictionaryPath; - } - - /** - * Sets path to dictionary. - * @param dictionaryPath URL of the dictionary - */ - public void setDictionaryPath(String dictionaryPath) { - this.dictionaryPath = dictionaryPath; - } - - /** - * @return path to the language model - */ - public String getLanguageModelPath() { - return languageModelPath; - } - - /** - * Sets paths to language model resource. - * @param languageModelPath URL of the language model - */ - public void setLanguageModelPath(String languageModelPath) { - this.languageModelPath = languageModelPath; - } - - /** - * @return grammar path - */ - public String getGrammarPath() { - return grammarPath; - } - - /** - * Sets path to grammar resources. - * @param grammarPath URL of the grammar - */ - public void setGrammarPath(String grammarPath) { - this.grammarPath = grammarPath; - } - - /** - * @return grammar name - */ - public String getGrammarName() { - return grammarName; - } - - /** - * Sets grammar name if fixed grammar is used. - * @param grammarName of the grammar - */ - public void setGrammarName(String grammarName) { - this.grammarName = grammarName; - } - - /** - * @return whether fixed grammar should be used instead of language model. - */ - public boolean getUseGrammar() { - return useGrammar; - } - - /** - * Sets whether fixed grammar should be used instead of language model. - * @param useGrammar to use grammar or language model - */ - public void setUseGrammar(boolean useGrammar) { - this.useGrammar = useGrammar; - } - - /** - * @return the configured sample rate. - */ - public int getSampleRate() { - return sampleRate; - } - - /** - * Sets sample rate for the input stream. - * @param sampleRate sample rate in Hertz - */ - public void setSampleRate(int sampleRate) { - this.sampleRate = sampleRate; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/Context.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/Context.java deleted file mode 100755 index 126de61f..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/Context.java +++ /dev/null @@ -1,222 +0,0 @@ -/* - * Copyright 2013 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ - -package edu.cmu.sphinx.api; - -import static edu.cmu.sphinx.util.props.ConfigurationManagerUtils.resourceToURL; -import static edu.cmu.sphinx.util.props.ConfigurationManagerUtils.setProperty; - -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; - -import edu.cmu.sphinx.frontend.frequencywarp.MelFrequencyFilterBank2; -import edu.cmu.sphinx.frontend.util.StreamDataSource; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.Loader; -import edu.cmu.sphinx.util.TimeFrame; -import edu.cmu.sphinx.util.props.Configurable; -import edu.cmu.sphinx.util.props.ConfigurationManager; - - -/** - * Helps to tweak configuration without touching XML-file directly. - */ -public class Context { - - private final ConfigurationManager configurationManager; - - /** - * Constructs builder that uses default XML configuration. - * @param config configuration - * @throws MalformedURLException if failed to load configuration file - */ - public Context(Configuration config) - throws IOException, MalformedURLException - { - this("resource:/edu/cmu/sphinx/api/default.config.xml", config); - } - - /** - * Constructs builder using user-supplied XML configuration. - * - * @param path path to XML-resource with configuration - * @param config configuration - * @throws MalformedURLException if failed to load configuration file - * @throws IOException if failed to load configuration file - */ - public Context(String path, Configuration config) - throws IOException, MalformedURLException - { - configurationManager = new ConfigurationManager(resourceToURL(path)); - - setAcousticModel(config.getAcousticModelPath()); - setDictionary(config.getDictionaryPath()); - - if (null != config.getGrammarPath() && config.getUseGrammar()) - setGrammar(config.getGrammarPath(), config.getGrammarName()); - if (null != config.getLanguageModelPath() && !config.getUseGrammar()) - setLanguageModel(config.getLanguageModelPath()); - - setSampleRate(config.getSampleRate()); - - // Force ConfigurationManager to build the whole graph - // in order to enable instance lookup by class. - configurationManager.lookup("recognizer"); - } - - /** - * Sets acoustic model location. - * - * It also reads feat.params which should be located at the root of - * acoustic model and sets corresponding parameters of - * {@link MelFrequencyFilterBank2} instance. - * - * @param path path to directory with acoustic model files - * - * @throws IOException if failed to read feat.params - */ - public void setAcousticModel(String path) throws IOException { - setLocalProperty("acousticModelLoader->location", path); - setLocalProperty("dictionary->fillerPath", path + "/noisedict"); - } - - /** - * Sets dictionary. - * - * @param path path to directory with dictionary files - */ - public void setDictionary(String path) { - setLocalProperty("dictionary->dictionaryPath", path); - } - - /** - * Sets sampleRate. - * - * @param sampleRate sample rate of the input stream. - */ - public void setSampleRate(int sampleRate) { - setLocalProperty("dataSource->sampleRate", Integer.toString(sampleRate)); - } - - /** - * Sets path to the grammar files. - * - * Enables static grammar and disables probabilistic language model. - * JSGF and GrXML formats are supported. - * - * @param path path to the grammar files - * @param name name of the main grammar to use - * @see Context#setLanguageModel(String) - */ - public void setGrammar(String path, String name) { - // TODO: use a single param of type File, cache directory part - if (name.endsWith(".grxml")) { - setLocalProperty("grXmlGrammar->grammarLocation", path + name); - setLocalProperty("flatLinguist->grammar", "grXmlGrammar"); - } else { - setLocalProperty("jsgfGrammar->grammarLocation", path); - setLocalProperty("jsgfGrammar->grammarName", name); - setLocalProperty("flatLinguist->grammar", "jsgfGrammar"); - } - setLocalProperty("decoder->searchManager", "simpleSearchManager"); - } - - /** - * Sets path to the language model. - * - * Enables probabilistic language model and disables static grammar. - * Currently it supports ".lm" and ".dmp" file formats. - * - * @param path path to the language model file - * @see Context#setGrammar(String, String) - * - * @throws IllegalArgumentException if path ends with unsupported extension - */ - public void setLanguageModel(String path) { - if (path.endsWith(".lm")) { - setLocalProperty("simpleNGramModel->location", path); - setLocalProperty( - "lexTreeLinguist->languageModel", "simpleNGramModel"); - } else if (path.endsWith(".dmp")) { - setLocalProperty("largeTrigramModel->location", path); - setLocalProperty( - "lexTreeLinguist->languageModel", "largeTrigramModel"); - } else { - throw new IllegalArgumentException( - "Unknown format extension: " + path); - } - //search manager for LVCSR is set by deafult - } - - - public void setSpeechSource(InputStream stream, TimeFrame timeFrame) { - getInstance(StreamDataSource.class).setInputStream(stream, timeFrame); - setLocalProperty("trivialScorer->frontend", "liveFrontEnd"); - } - - /** - * Sets byte stream as the speech source. - * - * @param stream stream to process - */ - public void setSpeechSource(InputStream stream) { - getInstance(StreamDataSource.class).setInputStream(stream); - setLocalProperty("trivialScorer->frontend", "liveFrontEnd"); - } - - /** - * Sets property within a "component" tag in configuration. - * - * Use this method to alter "value" property of a "property" tag inside a - * "component" tag of the XML configuration. - * - * @param name property name - * @param value property value - * @see Context#setGlobalProperty(String, Object) - */ - public void setLocalProperty(String name, Object value) { - setProperty(configurationManager, name, value.toString()); - } - - /** - * Sets property of a top-level "property" tag. - * - * Use this method to alter "value" property of a "property" tag whose - * parent is the root tag "config" of the XML configuration. - * - * @param name property name - * @param value property value - * @see Context#setLocalProperty(String, Object) - */ - public void setGlobalProperty(String name, Object value) { - configurationManager.setGlobalProperty(name, value.toString()); - } - - /** - * Returns instance of the XML configuration by its class. - * - * @param clazz class to look up - * @param generic - * @return instance of the specified class or null - */ - public C getInstance(Class clazz) { - return configurationManager.lookup(clazz); - } - - /** - * Returns the Loader object used for loading the acoustic model. - * - * @return the loader object - */ - public Loader getLoader(){ - return (Loader) configurationManager.lookup("acousticModelLoader"); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/LiveSpeechRecognizer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/LiveSpeechRecognizer.java deleted file mode 100755 index d492deda..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/LiveSpeechRecognizer.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2013 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ - -package edu.cmu.sphinx.api; - -import java.io.IOException; - -import edu.cmu.sphinx.frontend.util.StreamDataSource; - - -/** - * High-level class for live speech recognition. - */ -public class LiveSpeechRecognizer extends AbstractSpeechRecognizer { - - private final Microphone microphone; - - /** - * Constructs new live recognition object. - * - * @param configuration common configuration - * @throws IOException if model IO went wrong - */ - public LiveSpeechRecognizer(Configuration configuration) throws IOException - { - super(configuration); - microphone = speechSourceProvider.getMicrophone(); - context.getInstance(StreamDataSource.class) - .setInputStream(microphone.getStream()); - } - - /** - * Starts recognition process. - * - * @param clear clear cached microphone data - * @see LiveSpeechRecognizer#stopRecognition() - */ - public void startRecognition(boolean clear) { - recognizer.allocate(); - microphone.startRecording(); - } - - /** - * Stops recognition process. - * - * Recognition process is paused until the next call to startRecognition. - * - * @see LiveSpeechRecognizer#startRecognition(boolean) - */ - public void stopRecognition() { - microphone.stopRecording(); - recognizer.deallocate(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/Microphone.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/Microphone.java deleted file mode 100755 index 9301b50a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/Microphone.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.api; - -import java.io.InputStream; - -import javax.sound.sampled.*; - -/** - * InputStream adapter - */ -public class Microphone { - - private final TargetDataLine line; - private final InputStream inputStream; - - public Microphone( - float sampleRate, - int sampleSize, - boolean signed, - boolean bigEndian) { - AudioFormat format = - new AudioFormat(sampleRate, sampleSize, 1, signed, bigEndian); - try { - line = AudioSystem.getTargetDataLine(format); - line.open(); - } catch (LineUnavailableException e) { - throw new IllegalStateException(e); - } - inputStream = new AudioInputStream(line); - } - - public void startRecording() { - line.start(); - } - - public void stopRecording() { - line.stop(); - } - - public InputStream getStream() { - return inputStream; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/SpeechAligner.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/SpeechAligner.java deleted file mode 100755 index c0ecf77a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/SpeechAligner.java +++ /dev/null @@ -1,263 +0,0 @@ -/* - * Copyright 2014 Alpha Cephei Inc. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ - -package edu.cmu.sphinx.api; - -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Queue; -import java.util.TreeMap; -import java.util.logging.Logger; - -import edu.cmu.sphinx.alignment.LongTextAligner; -import edu.cmu.sphinx.alignment.SimpleTokenizer; -import edu.cmu.sphinx.alignment.TextTokenizer; -import edu.cmu.sphinx.linguist.language.grammar.AlignerGrammar; -import edu.cmu.sphinx.linguist.language.ngram.DynamicTrigramModel; -import edu.cmu.sphinx.recognizer.Recognizer; -import edu.cmu.sphinx.result.Result; -import edu.cmu.sphinx.result.WordResult; -import edu.cmu.sphinx.util.Range; -import edu.cmu.sphinx.util.TimeFrame; - -public class SpeechAligner { - private final Logger logger = Logger.getLogger(getClass().getSimpleName()); - - private static final int TUPLE_SIZE = 3; - - private final Context context; - private final Recognizer recognizer; - private final AlignerGrammar grammar; - private final DynamicTrigramModel languageModel; - - private TextTokenizer tokenizer; - - public SpeechAligner(String amPath, String dictPath, String g2pPath) throws MalformedURLException, IOException { - Configuration configuration = new Configuration(); - configuration.setAcousticModelPath(amPath); - configuration.setDictionaryPath(dictPath); - - context = new Context(configuration); - if (g2pPath != null) { - context.setLocalProperty("dictionary->g2pModelPath", g2pPath); - context.setLocalProperty("dictionary->g2pMaxPron", "2"); - } - context.setLocalProperty("lexTreeLinguist->languageModel", "dynamicTrigramModel"); - recognizer = context.getInstance(Recognizer.class); - grammar = context.getInstance(AlignerGrammar.class); - languageModel = context.getInstance(DynamicTrigramModel.class); - setTokenizer(new SimpleTokenizer()); - } - - public List align(URL audioUrl, String transcript) throws IOException { - return align(audioUrl, getTokenizer().expand(transcript)); - } - - /** - * Align audio to sentence transcript - * - * @param audioUrl audio file URL to process - * @param sentenceTranscript cleaned transcript - * @return List of aligned words with timings - * @throws IOException if IO went wrong - */ - public List align(URL audioUrl, List sentenceTranscript) throws IOException { - - List transcript = sentenceToWords(sentenceTranscript); - - LongTextAligner aligner = new LongTextAligner(transcript, TUPLE_SIZE); - Map alignedWords = new TreeMap(); - Queue ranges = new LinkedList(); - Queue> texts = new ArrayDeque>(); - Queue timeFrames = new ArrayDeque(); - - ranges.offer(new Range(0, transcript.size())); - texts.offer(transcript); - TimeFrame totalTimeFrame = TimeFrame.INFINITE; - timeFrames.offer(totalTimeFrame); - long lastFrame = TimeFrame.INFINITE.getEnd(); - - languageModel.setText(sentenceTranscript); - - for (int i = 0; i < 4; ++i) { - if (i == 1) { - context.setLocalProperty("decoder->searchManager", "alignerSearchManager"); - } - - while (!texts.isEmpty()) { - assert texts.size() == ranges.size(); - assert texts.size() == timeFrames.size(); - - List text = texts.poll(); - TimeFrame frame = timeFrames.poll(); - Range range = ranges.poll(); - - - logger.info("Aligning frame " + frame + " to text " + text + " range " + range); - - recognizer.allocate(); - - if (i >= 1) { - grammar.setWords(text); - } - - context.setSpeechSource(audioUrl.openStream(), frame); - - List hypothesis = new ArrayList(); - Result result; - while (null != (result = recognizer.recognize())) { - logger.info("Utterance result " + result.getTimedBestResult(true)); - hypothesis.addAll(result.getTimedBestResult(false)); - } - - if (i == 0) { - if (hypothesis.size() > 0) { - lastFrame = hypothesis.get(hypothesis.size() - 1).getTimeFrame().getEnd(); - } - } - - List words = new ArrayList(); - for (WordResult wr : hypothesis) { - words.add(wr.getWord().getSpelling()); - } - int[] alignment = aligner.align(words, range); - - List results = hypothesis; - - logger.info("Decoding result is " + results); - - // dumpAlignment(transcript, alignment, results); - dumpAlignmentStats(transcript, alignment, results); - - for (int j = 0; j < alignment.length; j++) { - if (alignment[j] != -1) { - alignedWords.put(alignment[j], hypothesis.get(j)); - } - } - - recognizer.deallocate(); - } - - scheduleNextAlignment(transcript, alignedWords, ranges, texts, timeFrames, lastFrame); - } - - return new ArrayList(alignedWords.values()); - } - - public List sentenceToWords(List sentenceTranscript) { - ArrayList transcript = new ArrayList(); - for (String sentence : sentenceTranscript) { - String[] words = sentence.split("\\s+"); - for (String word : words) { - if (word.length() > 0) - transcript.add(word); - } - } - return transcript; - } - - private void dumpAlignmentStats(List transcript, int[] alignment, List results) { - int insertions = 0; - int deletions = 0; - int size = transcript.size(); - - int[] aid = alignment; - int lastId = -1; - for (int ij = 0; ij < aid.length; ++ij) { - if (aid[ij] == -1) { - insertions++; - } else { - if (aid[ij] - lastId > 1) { - deletions += aid[ij] - lastId; - } - lastId = aid[ij]; - } - } - - if (lastId >= 0 && transcript.size() - lastId > 1) { - deletions += transcript.size() - lastId; - } - logger.info(String.format("Size %d deletions %d insertions %d error rate %.2f", size, insertions, deletions, - (insertions + deletions) / ((float) size) * 100f)); - } - - private void scheduleNextAlignment(List transcript, Map alignedWords, Queue ranges, - Queue> texts, Queue timeFrames, long lastFrame) { - int prevKey = 0; - long prevStart = 0; - for (Map.Entry e : alignedWords.entrySet()) { - if (e.getKey() - prevKey > 1) { - checkedOffer(transcript, texts, timeFrames, ranges, prevKey, e.getKey() + 1, prevStart, e.getValue() - .getTimeFrame().getEnd()); - } - prevKey = e.getKey(); - prevStart = e.getValue().getTimeFrame().getStart(); - } - if (transcript.size() - prevKey > 1) { - checkedOffer(transcript, texts, timeFrames, ranges, prevKey, transcript.size(), prevStart, lastFrame); - } - } - - public void dumpAlignment(List transcript, int[] alignment, List results) { - logger.info("Alignment"); - int[] aid = alignment; - int lastId = -1; - for (int ij = 0; ij < aid.length; ++ij) { - if (aid[ij] == -1) { - logger.info(String.format("+ %s", results.get(ij))); - } else { - if (aid[ij] - lastId > 1) { - for (String result1 : transcript.subList(lastId + 1, aid[ij])) { - logger.info(String.format("- %-25s", result1)); - } - } else { - logger.info(String.format(" %-25s", transcript.get(aid[ij]))); - } - lastId = aid[ij]; - } - } - - if (lastId >= 0 && transcript.size() - lastId > 1) { - for (String result1 : transcript.subList(lastId + 1, transcript.size())) { - logger.info(String.format("- %-25s", result1)); - } - } - } - - private void checkedOffer(List transcript, Queue> texts, Queue timeFrames, - Queue ranges, int start, int end, long timeStart, long timeEnd) { - - double wordDensity = ((double) (timeEnd - timeStart)) / (end - start); - - // Skip range if it's too short, average word is less than 10 - // milliseconds - if (wordDensity < 10.0 && (end - start) > 3) { - logger.info("Skipping text range due to a high density " + transcript.subList(start, end).toString()); - return; - } - - texts.offer(transcript.subList(start, end)); - timeFrames.offer(new TimeFrame(timeStart, timeEnd)); - ranges.offer(new Range(start, end - 1)); - } - - public TextTokenizer getTokenizer() { - return tokenizer; - } - - public void setTokenizer(TextTokenizer wordExpander) { - this.tokenizer = wordExpander; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/SpeechResult.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/SpeechResult.java deleted file mode 100755 index 2c32b9a9..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/SpeechResult.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright 2013 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ - -package edu.cmu.sphinx.api; - -import java.util.Collection; -import java.util.HashSet; -import java.util.List; - -import edu.cmu.sphinx.recognizer.Recognizer; -import edu.cmu.sphinx.result.*; - - -/** - * High-level wrapper for {@link Result} instance. - */ -public final class SpeechResult { - - private final Result result; - private final Lattice lattice; - - /** - * Constructs recognition result based on {@link Result} object. - * - * @param result recognition result returned by {@link Recognizer} - */ - public SpeechResult(Result result) { - this.result = result; - if (result.toCreateLattice()) { - lattice = new Lattice(result); - new LatticeOptimizer(lattice).optimize(); - lattice.computeNodePosteriors(1.0f); - } else - lattice = null; - } - - /** - * Returns {@link List} of words of the recognition result. - * Within the list words are ordered by time frame. - * - * @return words that form the result - */ - public List getWords() { - return lattice != null ? lattice.getWordResultPath() : result.getTimedBestResult(false); - } - - /** - * @return string representation of the result. - */ - public String getHypothesis() { - return result.getBestResultNoFiller(); - } - - /** - * Return N best hypothesis. - * - * @param n number of hypothesis to return - * @return {@link Collection} of several best hypothesis - */ - public Collection getNbest(int n) { - if (lattice == null) - return new HashSet(); - return new Nbest(lattice).getNbest(n); - } - - /** - * Returns lattice for the recognition result. - * - * @return lattice object - */ - public Lattice getLattice() { - return lattice; - } - - /** - * Return Result object of current SpeechResult - * - * @return Result object stored in this.result - */ - public Result getResult() { - return result; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/SpeechSourceProvider.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/SpeechSourceProvider.java deleted file mode 100755 index cf987d94..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/SpeechSourceProvider.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2013 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ - -package edu.cmu.sphinx.api; - - -public class SpeechSourceProvider { - - Microphone getMicrophone() { - return new Microphone(16000, 16, true, false); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/StreamSpeechRecognizer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/StreamSpeechRecognizer.java deleted file mode 100755 index 7a20ab83..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/api/StreamSpeechRecognizer.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright 2013 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ - -package edu.cmu.sphinx.api; - -import java.io.IOException; -import java.io.InputStream; - -import edu.cmu.sphinx.util.TimeFrame; - -/** - * Speech recognizer that works with audio resources. - * - * @see LiveSpeechRecognizer live speech recognizer - */ -public class StreamSpeechRecognizer extends AbstractSpeechRecognizer { - - /** - * Constructs new stream recognizer. - * - * @param configuration configuration - * @throws IOException error occured during model load - */ - public StreamSpeechRecognizer(Configuration configuration) - throws IOException - { - super(configuration); - } - - public void startRecognition(InputStream stream) { - startRecognition(stream, TimeFrame.INFINITE); - } - - /** - * Starts recognition process. - * - * Starts recognition process and optionally clears previous data. - * - * @param stream input stream to process - * @param timeFrame time range of the stream to process - * @see StreamSpeechRecognizer#stopRecognition() - */ - public void startRecognition(InputStream stream, TimeFrame timeFrame) { - recognizer.allocate(); - context.setSpeechSource(stream, timeFrame); - } - - /** - * Stops recognition process. - * - * Recognition process is paused until the next call to startRecognition. - * - * @see StreamSpeechRecognizer#startRecognition(InputStream, TimeFrame) - */ - public void stopRecognition() { - recognizer.deallocate(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/AbstractDecoder.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/AbstractDecoder.java deleted file mode 100755 index a250a788..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/AbstractDecoder.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.decoder; - -import edu.cmu.sphinx.decoder.search.SearchManager; -import edu.cmu.sphinx.result.Result; -import edu.cmu.sphinx.util.props.*; - -import java.util.ArrayList; -import java.util.List; -import java.util.logging.Logger; - -/** An abstract decoder which implements all functionality which is independent of the used decoding-paradigm (pull/push). */ -public abstract class AbstractDecoder implements ResultProducer, Configurable { - - /** - * The property that defines the name of the search manager to use - * */ - @S4Component(type = SearchManager.class) - public final static String PROP_SEARCH_MANAGER = "searchManager"; - protected SearchManager searchManager; - - @S4ComponentList(type = ResultListener.class) - public static final String PROP_RESULT_LISTENERS = "resultListeners"; - protected final List resultListeners = new ArrayList(); - - /** - * If set to true the used search-manager will be automatically allocated - * in newProperties(). - * */ - @S4Boolean(defaultValue = false) - public static final String AUTO_ALLOCATE = "autoAllocate"; - - /** - * If set to false the used search-manager all registered - * result listeners will be notified only for final results. Per default - * non-final results don't trigger notification, because in most - * application the utterance final result will be sufficient. - */ - @S4Boolean(defaultValue = false) - public static final String FIRE_NON_FINAL_RESULTS = "fireNonFinalResults"; - private boolean fireNonFinalResults; - - private String name; - protected Logger logger; - - public AbstractDecoder() { - } - - /** - * Abstract decoder to implement live and batch recognizers - * @param searchManager search manager to use - * @param fireNonFinalResults to fire result during decoding - * @param autoAllocate automatic allocate all components - * @param resultListeners listeners to get noification - */ - public AbstractDecoder(SearchManager searchManager, boolean fireNonFinalResults, boolean autoAllocate, List resultListeners) { - String name = getClass().getName(); - init( name, Logger.getLogger(name), - searchManager, fireNonFinalResults, autoAllocate, resultListeners); - } - - /** - * Decode frames until recognition is complete - * - * @param referenceText the reference text (or null) - * @return a result - */ - public abstract Result decode(String referenceText); - - public void newProperties(PropertySheet ps) throws PropertyException { - init( ps.getInstanceName(), ps.getLogger(), (SearchManager) ps.getComponent(PROP_SEARCH_MANAGER), ps.getBoolean(FIRE_NON_FINAL_RESULTS), ps.getBoolean(AUTO_ALLOCATE), ps.getComponentList(PROP_RESULT_LISTENERS, ResultListener.class)); - } - - private void init(String name, Logger logger, SearchManager searchManager, boolean fireNonFinalResults, boolean autoAllocate, List listeners) { - this.name = name; - this.logger = logger; - - this.searchManager = searchManager; - this.fireNonFinalResults = fireNonFinalResults; - - if (autoAllocate) { - searchManager.allocate(); - } - - for (ResultListener listener : listeners) { - addResultListener(listener); - } - } - - - /** Allocate resources necessary for decoding */ - public void allocate() { - searchManager.allocate(); - } - - - /** Deallocate resources */ - public void deallocate() { - searchManager.deallocate(); - } - - - /** - * Adds a result listener to this recognizer. A result listener is called whenever a new result is generated by the - * recognizer. This method can be called in any state. - * - * @param resultListener the listener to add - */ - public void addResultListener(ResultListener resultListener) { - resultListeners.add(resultListener); - } - - - /** - * Removes a previously added result listener. This method can be called in any state. - * - * @param resultListener the listener to remove - */ - public void removeResultListener(ResultListener resultListener) { - resultListeners.remove(resultListener); - } - - - /** - * Fires new results as soon as they become available. - * - * @param result the new result - */ - protected void fireResultListeners(Result result) { - if (fireNonFinalResults || result.isFinal()) { - for (ResultListener resultListener : resultListeners) { - resultListener.newResult(result); - } - }else { - logger.finer("skipping non-final result " + result); - } - } - - - @Override - public String toString() { - return name; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/Decoder.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/Decoder.java deleted file mode 100755 index 51112500..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/Decoder.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.decoder; - -import edu.cmu.sphinx.result.Result; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Integer; -import edu.cmu.sphinx.decoder.search.SearchManager; - -import java.util.List; - -/** The primary decoder class */ -public class Decoder extends AbstractDecoder { - - public Decoder() { - // Keep this or else XML configuration fails. - } - - /** The property for the number of features to recognize at once. */ - @S4Integer(defaultValue = Integer.MAX_VALUE) - public final static String PROP_FEATURE_BLOCK_SIZE = "featureBlockSize"; - private int featureBlockSize; - - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - featureBlockSize = ps.getInt(PROP_FEATURE_BLOCK_SIZE); - } - - /** - * Main decoder - * - * @param searchManager search manager to configure search space - * @param fireNonFinalResults should we notify about non-final results - * @param autoAllocate automatic allocation of all componenets - * @param resultListeners listeners to get signals - * @param featureBlockSize frequency of notification about results - */ - public Decoder( SearchManager searchManager, boolean fireNonFinalResults, boolean autoAllocate, List resultListeners, int featureBlockSize) { - super( searchManager, fireNonFinalResults, autoAllocate, resultListeners); - this.featureBlockSize = featureBlockSize; - } - - /** - * Decode frames until recognition is complete. - * - * @param referenceText the reference text (or null) - * @return a result - */ - @Override - public Result decode(String referenceText) { - searchManager.startRecognition(); - Result result; - do { - result = searchManager.recognize(featureBlockSize); - if (result != null) { - result.setReferenceText(referenceText); - fireResultListeners(result); - } - } while (result != null && !result.isFinal()); - searchManager.stopRecognition(); - return result; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/FrameDecoder.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/FrameDecoder.java deleted file mode 100755 index eed06980..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/FrameDecoder.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.decoder; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.frontend.endpoint.SpeechEndSignal; -import edu.cmu.sphinx.frontend.endpoint.SpeechStartSignal; -import edu.cmu.sphinx.result.Result; -import edu.cmu.sphinx.decoder.search.SearchManager; - -import java.util.List; - - -/** - * A decoder which does not use the common pull-principle of S4 but processes only one single frame on each call of - * decode(). When using this decoder, make sure that the AcousticScorer used by the - * SearchManager can access some buffered Datas. - */ -public class FrameDecoder extends AbstractDecoder implements DataProcessor { - - private DataProcessor predecessor; - - private boolean isRecognizing; - private Result result; - - public FrameDecoder( SearchManager searchManager, boolean fireNonFinalResults, boolean autoAllocate, List listeners) { - super(searchManager, fireNonFinalResults, autoAllocate, listeners); - } - - public FrameDecoder() { - } - - /** - * Decode a single frame. - * - * @param referenceText the reference text (or null) - * @return a result - */ - @Override - public Result decode(String referenceText) { - return searchManager.recognize(1); - } - - public Data getData() throws DataProcessingException { - Data d = getPredecessor().getData(); - - if (isRecognizing && (d instanceof FloatData || d instanceof DoubleData || d instanceof SpeechEndSignal)) { - result = decode(null); - - if (result != null) { - fireResultListeners(result); - result = null; - } - } - - // we also trigger recogntion on a DataEndSignal to allow threaded scorers to shut down correctly - if (d instanceof DataEndSignal) { - searchManager.stopRecognition(); - } - - if (d instanceof SpeechStartSignal) { - searchManager.startRecognition(); - isRecognizing = true; - result = null; - } - - if (d instanceof SpeechEndSignal) { - searchManager.stopRecognition(); - - //fire results which were not yet final - if (result != null) - fireResultListeners(result); - - isRecognizing = false; - } - - return d; - } - - - public DataProcessor getPredecessor() { - return predecessor; - } - - - public void setPredecessor(DataProcessor predecessor) { - this.predecessor = predecessor; - } - - - public void initialize() { - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/ResultListener.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/ResultListener.java deleted file mode 100755 index 226c2826..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/ResultListener.java +++ /dev/null @@ -1,30 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.decoder; - -import edu.cmu.sphinx.util.props.Configurable; -import edu.cmu.sphinx.result.Result; - -import java.util.EventListener; - -/** The listener interface for being informed when new results are generated. */ -public interface ResultListener extends EventListener, Configurable { - - /** - * Method called when a new result is generated - * - * @param result the new result - */ - public void newResult(Result result); -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/ResultProducer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/ResultProducer.java deleted file mode 100755 index fa87fce4..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/ResultProducer.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.decoder; - -import edu.cmu.sphinx.util.props.Configurable; - -/** - * Some API-elements shared by components which are able to produce Results. - * - * @see edu.cmu.sphinx.result.Result - */ -public interface ResultProducer extends Configurable { - - /** Registers a new listener for Result. - * @param resultListener listener to add - */ - void addResultListener(ResultListener resultListener); - - - /** Removes a listener from this ResultProducer-instance. - * @param resultListener listener to remove - */ - void removeResultListener(ResultListener resultListener); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/adaptation/ClusteredDensityFileData.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/adaptation/ClusteredDensityFileData.java deleted file mode 100755 index 955f6286..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/adaptation/ClusteredDensityFileData.java +++ /dev/null @@ -1,174 +0,0 @@ -package edu.cmu.sphinx.decoder.adaptation; - -import java.util.ArrayList; -import java.util.Random; - -import org.apache.commons.math3.util.FastMath; - -import edu.cmu.sphinx.linguist.acoustic.tiedstate.Loader; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.Pool; - -/** - * Used for clustering gaussians. The clustering is performed by Euclidean - * distance criterion. The "k-means" clustering algorithm is used for clustering - * the gaussians. - * - * @author Bogdan Petcu - */ -public class ClusteredDensityFileData { - - private int numberOfClusters; - private int[] corespondingClass; - - public ClusteredDensityFileData(Loader loader, int numberOfClusters) { - this.numberOfClusters = numberOfClusters; - kMeansClustering(loader, 30); - } - - public int getNumberOfClusters() { - return this.numberOfClusters; - } - - /** - * Used for accessing the index that is specific to a gaussian. - * - * @param gaussian - * provided in a i * numStates + gaussianIndex form. - * @return class index - */ - public int getClassIndex(int gaussian) { - return corespondingClass[gaussian]; - } - - /** - * Computes euclidean distance between 2 n-dimensional points. - * - * @param a - * - n-dimensional "a" point - * @param b - * - n-dimensional "b" point - * @return the euclidean distance between a and b. - */ - private float euclidianDistance(float[] a, float[] b) { - double s = 0, d; - - for (int i = 0; i < a.length; i++) { - d = a[i] - b[i]; - s += d * d; - } - - return (float) FastMath.sqrt(s); - } - - /** - * Checks if the two float array have the same components - * - * @param a - * - float array a - * @param b - * - float array b - * @return true if values from a are equal to the ones in b, else false. - */ - private boolean isEqual(float[] a, float[] b) { - if (a.length != b.length) { - return false; - } - - for (int i = 0; i < a.length; i++) { - if (a[i] != b[i]) { - return false; - } - } - - return true; - } - - /** - * Performs k-means-clustering algorithm for clustering gaussians. - * Clustering is done using euclidean distance criterium. - * - * @param maxIterations - */ - private void kMeansClustering(Loader loader, int maxIterations) { - Pool initialData = loader.getMeansPool(); - ArrayList oldCentroids = new ArrayList( - numberOfClusters); - ArrayList centroids = new ArrayList(numberOfClusters); - int numberOfElements = initialData.size(), nrOfIterations = maxIterations, index; - int[] count = new int[numberOfClusters]; - double distance, min; - float[] currentValue, centroid; - float[][][] array = new float[numberOfClusters][numberOfElements][]; - boolean converged = false; - Random randomGenerator = new Random(); - - for (int i = 0; i < numberOfClusters; i++) { - index = randomGenerator.nextInt(numberOfElements); - centroids.add(initialData.get(index)); - oldCentroids.add(initialData.get(index)); - count[i] = 0; - } - - index = 0; - - while (!converged && nrOfIterations > 0) { - corespondingClass = new int[initialData.size()]; - array = new float[numberOfClusters][numberOfElements][]; - - for (int i = 0; i < numberOfClusters; i++) { - oldCentroids.set(i, centroids.get(i)); - count[i] = 0; - } - - for (int i = 0; i < initialData.size(); i++) { - currentValue = initialData.get(i); - min = this.euclidianDistance(oldCentroids.get(0), currentValue); - index = 0; - - for (int k = 1; k < numberOfClusters; k++) { - distance = this.euclidianDistance(oldCentroids.get(k), - currentValue); - - if (distance < min) { - min = distance; - index = k; - } - } - - array[index][count[index]] = currentValue; - corespondingClass[i] = index; - count[index]++; - - } - - for (int i = 0; i < numberOfClusters; i++) { - centroid = new float[initialData.get(0).length]; - - if (count[i] > 0) { - - for (int j = 0; j < count[i]; j++) { - for (int k = 0; k < initialData.get(0).length; k++) { - centroid[k] += array[i][j][k]; - } - } - - for (int k = 0; k < initialData.get(0).length; k++) { - centroid[k] /= count[i]; - } - - centroids.set(i, centroid); - } - } - - converged = true; - - for (int i = 0; i < numberOfClusters; i++) { - converged = converged - && (this.isEqual(centroids.get(i), oldCentroids.get(i))); - } - - nrOfIterations--; - } - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/adaptation/Stats.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/adaptation/Stats.java deleted file mode 100755 index d8cab6d9..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/adaptation/Stats.java +++ /dev/null @@ -1,235 +0,0 @@ -package edu.cmu.sphinx.decoder.adaptation; - -import edu.cmu.sphinx.api.SpeechResult; -import edu.cmu.sphinx.decoder.search.Token; -import edu.cmu.sphinx.frontend.FloatData; -import edu.cmu.sphinx.linguist.HMMSearchState; -import edu.cmu.sphinx.linguist.SearchState; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.Loader; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.Sphinx3Loader; -import edu.cmu.sphinx.util.LogMath; - -/** - * This class is used for estimating a MLLR transform for each cluster of data. - * The clustering must be previously performed using - * ClusteredDensityFileData.java - * - * @author Bogdan Petcu - */ -public class Stats { - - private ClusteredDensityFileData means; - private double[][][][][] regLs; - private double[][][][] regRs; - private int nrOfClusters; - private Sphinx3Loader loader; - private float varFlor; - private LogMath logMath = LogMath.getLogMath();; - - public Stats(Loader loader, ClusteredDensityFileData means) { - this.loader = (Sphinx3Loader) loader; - this.nrOfClusters = means.getNumberOfClusters(); - this.means = means; - this.varFlor = (float) 1e-5; - this.invertVariances(); - this.init(); - } - - private void init() { - int len = loader.getVectorLength()[0]; - this.regLs = new double[nrOfClusters][][][][]; - this.regRs = new double[nrOfClusters][][][]; - - for (int i = 0; i < nrOfClusters; i++) { - this.regLs[i] = new double[loader.getNumStreams()][][][]; - this.regRs[i] = new double[loader.getNumStreams()][][]; - - for (int j = 0; j < loader.getNumStreams(); j++) { - len = loader.getVectorLength()[j]; - this.regLs[i][j] = new double[len][len + 1][len + 1]; - this.regRs[i][j] = new double[len][len + 1]; - } - } - } - - public ClusteredDensityFileData getClusteredData() { - return this.means; - } - - public double[][][][][] getRegLs() { - return regLs; - } - - public double[][][][] getRegRs() { - return regRs; - } - - /** - * Used for inverting variances. - */ - private void invertVariances() { - - for (int i = 0; i < loader.getNumStates(); i++) { - for (int k = 0; k < loader.getNumGaussiansPerState(); k++) { - for (int l = 0; l < loader.getVectorLength()[0]; l++) { - if (loader.getVariancePool().get( - i * loader.getNumGaussiansPerState() + k)[l] <= 0.) { - this.loader.getVariancePool().get( - i * loader.getNumGaussiansPerState() + k)[l] = (float) 0.5; - } else if (loader.getVariancePool().get( - i * loader.getNumGaussiansPerState() + k)[l] < varFlor) { - this.loader.getVariancePool().get( - i * loader.getNumGaussiansPerState() + k)[l] = (float) (1. / varFlor); - } else { - this.loader.getVariancePool().get( - i * loader.getNumGaussiansPerState() + k)[l] = (float) (1. / loader - .getVariancePool().get( - i * loader.getNumGaussiansPerState() - + k)[l]); - } - } - } - } - } - - /** - * Computes posterior values for the each component. - * - * @param componentScores - * from which the posterior values are computed. - * @param numStreams - * Number of feature streams - * @return posterior values for all components. - */ - private float[] computePosterios(float[] componentScores, int numStreams) { - float[] posteriors = componentScores; - - int step = componentScores.length / numStreams; - int startIdx = 0; - for (int i = 0; i < numStreams; i++) { - float max = posteriors[startIdx]; - for (int j = startIdx + 1; j < startIdx + step; j++) { - if (posteriors[j] > max) { - max = posteriors[j]; - } - } - - for (int j = startIdx; j < startIdx + step; j++) { - posteriors[j] = (float) logMath.logToLinear(posteriors[j] - max); - } - startIdx += step; - } - - return posteriors; - } - - /** - * This method is used for directly collect and use counts. The counts are - * collected and stored separately for each cluster. - * - * @param result - * Result object to collect counts from. - * @throws Exception if something went wrong - */ - public void collect(SpeechResult result) throws Exception { - Token token = result.getResult().getBestToken(); - float[] componentScore, featureVector, posteriors, tmean; - int[] len; - float dnom, wtMeanVar, wtDcountVar, wtDcountVarMean, mean; - int mId, cluster; - int numStreams, gauPerState; - - if (token == null) - throw new Exception("Best token not found!"); - - do { - FloatData feature = (FloatData) token.getData(); - SearchState ss = token.getSearchState(); - - if (!(ss instanceof HMMSearchState && ss.isEmitting())) { - token = token.getPredecessor(); - continue; - } - - componentScore = token.calculateComponentScore(feature); - featureVector = FloatData.toFloatData(feature).getValues(); - mId = (int) ((HMMSearchState) token.getSearchState()).getHMMState() - .getMixtureId(); - if (loader instanceof Sphinx3Loader && ((Sphinx3Loader) loader).hasTiedMixtures()) - // use CI phone ID for tied mixture model - mId = ((Sphinx3Loader) loader).getSenone2Ci()[mId]; - len = loader.getVectorLength(); - numStreams = loader.getNumStreams(); - gauPerState = loader.getNumGaussiansPerState(); - posteriors = this.computePosterios(componentScore, numStreams); - int featVectorStartIdx = 0; - - for (int i = 0; i < numStreams; i++) { - for (int j = 0; j < gauPerState; j++) { - - cluster = means.getClassIndex(mId * numStreams - * gauPerState + i * gauPerState + j); - dnom = posteriors[i * gauPerState + j]; - if (dnom > 0.) { - tmean = loader.getMeansPool().get( - mId * numStreams * gauPerState + i - * gauPerState + j); - - for (int k = 0; k < len[i]; k++) { - mean = posteriors[i * gauPerState + j] - * featureVector[k + featVectorStartIdx]; - wtMeanVar = mean - * loader.getVariancePool().get( - mId * numStreams * gauPerState + i - * gauPerState + j)[k]; - wtDcountVar = dnom - * loader.getVariancePool().get( - mId * numStreams * gauPerState + i - * gauPerState + j)[k]; - - for (int p = 0; p < len[i]; p++) { - wtDcountVarMean = wtDcountVar * tmean[p]; - - for (int q = p; q < len[i]; q++) { - regLs[cluster][i][k][p][q] += wtDcountVarMean - * tmean[q]; - } - regLs[cluster][i][k][p][len[i]] += wtDcountVarMean; - regRs[cluster][i][k][p] += wtMeanVar * tmean[p]; - } - regLs[cluster][i][k][len[i]][len[i]] += wtDcountVar; - regRs[cluster][i][k][len[i]] += wtMeanVar; - - } - } - } - featVectorStartIdx += len[i]; - } - token = token.getPredecessor(); - } while (token != null); - } - - /** - * Fill lower part of Legetter's set of G matrices. - */ - public void fillRegLowerPart() { - for (int i = 0; i < this.nrOfClusters; i++) { - for (int j = 0; j < loader.getNumStreams(); j++) { - for (int l = 0; l < loader.getVectorLength()[j]; l++) { - for (int p = 0; p <= loader.getVectorLength()[j]; p++) { - for (int q = p + 1; q <= loader.getVectorLength()[j]; q++) { - regLs[i][j][l][q][p] = regLs[i][j][l][p][q]; - } - } - } - } - } - } - - public Transform createTransform() { - Transform transform = new Transform(loader, nrOfClusters); - transform.update(this); - return transform; - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/adaptation/Transform.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/adaptation/Transform.java deleted file mode 100755 index 61f89d47..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/adaptation/Transform.java +++ /dev/null @@ -1,179 +0,0 @@ -package edu.cmu.sphinx.decoder.adaptation; - -import java.io.File; -import java.io.PrintWriter; -import java.util.Scanner; - -import org.apache.commons.math3.linear.Array2DRowRealMatrix; -import org.apache.commons.math3.linear.ArrayRealVector; -import org.apache.commons.math3.linear.DecompositionSolver; -import org.apache.commons.math3.linear.LUDecomposition; -import org.apache.commons.math3.linear.RealMatrix; -import org.apache.commons.math3.linear.RealVector; - -import edu.cmu.sphinx.linguist.acoustic.tiedstate.Sphinx3Loader; - -public class Transform { - - private float[][][][] As; - private float[][][] Bs; - private Sphinx3Loader loader; - private int nrOfClusters; - - public Transform(Sphinx3Loader loader, int nrOfClusters) { - this.loader = loader; - this.nrOfClusters = nrOfClusters; - } - - /** - * Used for access to A matrix. - * - * @return A matrix (representing A from A*x + B = C) - */ - public float[][][][] getAs() { - return As; - } - - /** - * Used for access to B matrix. - * - * @return B matrix (representing B from A*x + B = C) - */ - public float[][][] getBs() { - return Bs; - } - - /** - * Writes the transformation to file in a format that could further be used - * in Sphinx3 and Sphinx4. - * - * @param filePath path to store transform matrix - * @param index index of transform to store - * @throws Exception if something went wrong - */ - public void store(String filePath, int index) throws Exception { - PrintWriter writer = new PrintWriter(filePath, "UTF-8"); - - // nMllrClass - writer.println("1"); - writer.println(loader.getNumStreams()); - - for (int i = 0; i < loader.getNumStreams(); i++) { - writer.println(loader.getVectorLength()[i]); - - for (int j = 0; j < loader.getVectorLength()[i]; j++) { - for (int k = 0; k < loader.getVectorLength()[i]; ++k) { - writer.print(As[index][i][j][k]); - writer.print(" "); - } - writer.println(); - } - - for (int j = 0; j < loader.getVectorLength()[i]; j++) { - writer.print(Bs[index][i][j]); - writer.print(" "); - - } - writer.println(); - - for (int j = 0; j < loader.getVectorLength()[i]; j++) { - writer.print("1.0 "); - - } - writer.println(); - } - writer.close(); - } - - /** - * Used for computing the actual transformations (A and B matrices). These - * are stored in As and Bs. - */ - private void computeMllrTransforms(double[][][][][] regLs, - double[][][][] regRs) { - int len; - DecompositionSolver solver; - RealMatrix coef; - RealVector vect, ABloc; - - for (int c = 0; c < nrOfClusters; c++) { - this.As[c] = new float[loader.getNumStreams()][][]; - this.Bs[c] = new float[loader.getNumStreams()][]; - - for (int i = 0; i < loader.getNumStreams(); i++) { - len = loader.getVectorLength()[i]; - this.As[c][i] = new float[len][len]; - this.Bs[c][i] = new float[len]; - - for (int j = 0; j < len; ++j) { - coef = new Array2DRowRealMatrix(regLs[c][i][j], false); - solver = new LUDecomposition(coef).getSolver(); - vect = new ArrayRealVector(regRs[c][i][j], false); - ABloc = solver.solve(vect); - - for (int k = 0; k < len; ++k) { - this.As[c][i][j][k] = (float) ABloc.getEntry(k); - } - - this.Bs[c][i][j] = (float) ABloc.getEntry(len); - } - } - } - } - - /** - * Read the transformation from a file - * - * @param filePath file path to load transform - * @throws Exception if something went wrong - */ - public void load(String filePath) throws Exception { - - Scanner input = new Scanner(new File(filePath)); - int numStreams, nMllrClass; - int[] vectorLength = new int[1]; - - nMllrClass = input.nextInt(); - - assert nMllrClass == 1; - - numStreams = input.nextInt(); - - this.As = new float[nMllrClass][][][]; - this.Bs = new float[nMllrClass][][]; - - for (int i = 0; i < numStreams; i++) { - vectorLength[i] = input.nextInt(); - - int length = vectorLength[i]; - - this.As[0] = new float[numStreams][length][length]; - this.Bs[0] = new float[numStreams][length]; - - for (int j = 0; j < length; j++) { - for (int k = 0; k < length; ++k) { - As[0][i][j][k] = input.nextFloat(); - } - } - - for (int j = 0; j < length; j++) { - Bs[0][i][j] = input.nextFloat(); - } - } - input.close(); - } - - /** - * Stores in current object a transform generated on the provided stats. - * - * @param stats - * provided stats that were previously collected from Result - * objects. - */ - public void update(Stats stats) { - stats.fillRegLowerPart(); - As = new float[nrOfClusters][][][]; - Bs = new float[nrOfClusters][][]; - this.computeMllrTransforms(stats.getRegLs(), stats.getRegRs()); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/pruner/NullPruner.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/pruner/NullPruner.java deleted file mode 100755 index b361b4db..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/pruner/NullPruner.java +++ /dev/null @@ -1,71 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.decoder.pruner; - -import edu.cmu.sphinx.decoder.search.ActiveList; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; - -/** A Null pruner. Does no actual pruning */ -public class NullPruner implements Pruner { - - - /* (non-Javadoc) - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - public void newProperties(PropertySheet ps) throws PropertyException { - } - - - /** Creates a simple pruner */ - public NullPruner() { - } - - - /** starts the pruner */ - public void startRecognition() { - } - - - /** - * prunes the given set of states - * - * @param activeList the active list of tokens - * @return the pruned (and possibly new) activeList - */ - public ActiveList prune(ActiveList activeList) { - return activeList; - } - - - /** Performs post-recognition cleanup. */ - public void stopRecognition() { - } - - - /* (non-Javadoc) - * @see edu.cmu.sphinx.decoder.pruner.Pruner#allocate() - */ - public void allocate() { - - } - - - /* (non-Javadoc) - * @see edu.cmu.sphinx.decoder.pruner.Pruner#deallocate() - */ - public void deallocate() { - - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/pruner/Pruner.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/pruner/Pruner.java deleted file mode 100755 index 306cfef1..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/pruner/Pruner.java +++ /dev/null @@ -1,49 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.decoder.pruner; - -import edu.cmu.sphinx.decoder.search.ActiveList; -import edu.cmu.sphinx.util.props.Configurable; - - -/** Provides a mechanism for pruning a set of StateTokens */ -public interface Pruner extends Configurable { - - /** Starts the pruner */ - public void startRecognition(); - - - /** - * prunes the given set of states - * - * @param stateTokenList a list containing StateToken objects to be scored - * @return the pruned list, (may be the sample list as stateTokenList) - */ - public ActiveList prune(ActiveList stateTokenList); - - - /** Performs post-recognition cleanup. */ - public void stopRecognition(); - - - /** Allocates resources necessary for this pruner */ - public void allocate(); - - - /** Deallocates resources necessary for this pruner */ - public void deallocate(); - - -} - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/pruner/SimplePruner.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/pruner/SimplePruner.java deleted file mode 100755 index 2d302162..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/pruner/SimplePruner.java +++ /dev/null @@ -1,80 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.decoder.pruner; - -import edu.cmu.sphinx.decoder.search.ActiveList; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; - -/** Performs the default pruning behavior which is to invoke the purge on the active list */ -public class SimplePruner implements Pruner { - - private String name; - - - /* (non-Javadoc) - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - public void newProperties(PropertySheet ps) throws PropertyException { - } - - - public SimplePruner() { - } - - /* (non-Javadoc) - * @see edu.cmu.sphinx.util.props.Configurable#getName() - */ - public String getName() { - return name; - } - - - /** Starts the pruner */ - public void startRecognition() { - } - - - /** - * prunes the given set of states - * - * @param activeList a activeList of tokens - */ - public ActiveList prune(ActiveList activeList) { - return activeList.purge(); - } - - - /** Performs post-recognition cleanup. */ - public void stopRecognition() { - } - - - /* (non-Javadoc) - * @see edu.cmu.sphinx.decoder.pruner.Pruner#allocate() - */ - public void allocate() { - } - - - /* (non-Javadoc) - * @see edu.cmu.sphinx.decoder.pruner.Pruner#deallocate() - */ - public void deallocate() { - - } - - -} - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/AcousticScorer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/AcousticScorer.java deleted file mode 100755 index 9e4f2fd5..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/AcousticScorer.java +++ /dev/null @@ -1,57 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.decoder.scorer; - -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.util.props.Configurable; - -import java.util.List; - -/** Provides a mechanism for scoring a set of HMM states */ -public interface AcousticScorer extends Configurable { - - /** Allocates resources for this scorer */ - public void allocate(); - - - /** Deallocates resources for this scorer */ - public void deallocate(); - - - /** starts the scorer */ - public void startRecognition(); - - - /** stops the scorer */ - public void stopRecognition(); - - /** - * Scores the given set of states over previously stored acoustic data if any or a new one - * - * @param scorableList a list containing Scoreable objects to be scored - * @return the best scoring scoreable, or null if there are no more frames to score - */ - public Data calculateScores(List scorableList); - - /** - * Scores the given set of states over previously acoustic data from frontend - * and stores latter in the queue - * - * @param scorableList a list containing Scoreable objects to be scored - * @return the best scoring scoreable, or null if there are no more frames to score - */ - public Data calculateScoresAndStoreData(List scorableList); - -} - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/BackgroundModelNormalizer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/BackgroundModelNormalizer.java deleted file mode 100755 index 7340d13c..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/BackgroundModelNormalizer.java +++ /dev/null @@ -1,67 +0,0 @@ -package edu.cmu.sphinx.decoder.scorer; - -import edu.cmu.sphinx.decoder.search.SimpleBreadthFirstSearchManager; -import edu.cmu.sphinx.decoder.search.Token; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Component; - -import java.util.List; -import java.util.logging.Logger; - -/** - * Normalizes a set of Tokens against the best scoring Token of a background model. - * - * @author Holger Brandl - */ -public class BackgroundModelNormalizer implements ScoreNormalizer { - - /** - * The active list provider used to determined the best token for normalization. If this reference is not defined no - * normalization will be applied. - */ - @S4Component(type = SimpleBreadthFirstSearchManager.class, mandatory = false) - public static final String ACTIVE_LIST_PROVIDER = "activeListProvider"; - private SimpleBreadthFirstSearchManager activeListProvider; - - private Logger logger; - - public BackgroundModelNormalizer() { - } - - public void newProperties(PropertySheet ps) throws PropertyException { - this.activeListProvider = (SimpleBreadthFirstSearchManager) ps.getComponent(ACTIVE_LIST_PROVIDER); - this.logger = ps.getLogger(); - - logger.warning("no active list set."); - } - - /** - * @param activeListProvider The active list provider used to determined the best token for normalization. If this reference is not defined no - * normalization will be applied. - */ - public BackgroundModelNormalizer(SimpleBreadthFirstSearchManager activeListProvider) { - this.activeListProvider = activeListProvider; - this.logger = Logger.getLogger(getClass().getName()); - - logger.warning("no active list set."); - } - - public Scoreable normalize(List scoreableList, Scoreable bestToken) { - if (activeListProvider == null) { - return bestToken; - } - - Token normToken = activeListProvider.getActiveList().getBestToken(); - - float normScore = normToken.getScore(); - - for (Scoreable scoreable : scoreableList) { - if (scoreable instanceof Token) { - scoreable.normalizeScore(normScore); - } - } - - return bestToken; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/MaxScoreNormalizer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/MaxScoreNormalizer.java deleted file mode 100755 index 826aede2..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/MaxScoreNormalizer.java +++ /dev/null @@ -1,30 +0,0 @@ -package edu.cmu.sphinx.decoder.scorer; - -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; - -import java.util.List; - -/** - * Performs a simple normalization of all token-scores by - * - * @author Holger Brandl - */ -public class MaxScoreNormalizer implements ScoreNormalizer { - - - public void newProperties(PropertySheet ps) throws PropertyException { - } - - public MaxScoreNormalizer() { - } - - - public Scoreable normalize(List scoreableList, Scoreable bestToken) { - for (Scoreable scoreable : scoreableList) { - scoreable.normalizeScore(bestToken.getScore()); - } - - return bestToken; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/ScoreNormalizer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/ScoreNormalizer.java deleted file mode 100755 index 6a7bafad..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/ScoreNormalizer.java +++ /dev/null @@ -1,27 +0,0 @@ -package edu.cmu.sphinx.decoder.scorer; - -import edu.cmu.sphinx.util.props.Configurable; - -import java.util.List; - -/** - * Describes all API-elements that are necessary to normalize token-scores after these have been computed by an - * AcousticScorer. - * - * @author Holger Brandl - * @see edu.cmu.sphinx.decoder.scorer.AcousticScorer - * @see edu.cmu.sphinx.decoder.search.Token - */ -public interface ScoreNormalizer extends Configurable { - - /** - * Normalizes the scores of a set of Tokens. - * - * @param scoreableList The set of scores to be normalized - * @param bestToken The best scoring Token of the above mentioned list. Although not strictly necessary it's - * included because of convenience reasons and to reduce computational overhead. - * @return The best token after the all Tokens have been normalized. In most cases normalization won't - * change the order but to keep the API open for any kind of approach it seemed reasonable to include this. - */ - Scoreable normalize(List scoreableList, Scoreable bestToken); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/ScoreProvider.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/ScoreProvider.java deleted file mode 100755 index f76b9571..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/ScoreProvider.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 1999-2010 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.decoder.scorer; - -import edu.cmu.sphinx.frontend.Data; - -/** Thing that can provide the score */ -public interface ScoreProvider { - - /** - * Provides the score - * - * @param data data to score - * @return the score - */ - public float getScore(Data data); - - /** - * Provides component score - * - * @param feature data to score - * @return the score - */ - public float[] getComponentScore(Data feature); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/Scoreable.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/Scoreable.java deleted file mode 100755 index 58132de2..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/Scoreable.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.decoder.scorer; - -import edu.cmu.sphinx.frontend.Data; - -import java.util.Comparator; - -/** Represents an entity that can be scored against a data */ -public interface Scoreable extends Data { - - /** - * A {@code Scoreable} comparator that is used to order scoreables according to their score, - * in descending order. - * - *

    Note: since a higher score results in a lower natural order, - * statements such as {@code Collections.min(list, Scoreable.COMPARATOR)} - * actually return the Scoreable with the highest score, - * in contrast to the natural meaning of the word "min". - */ - Comparator COMPARATOR = new Comparator() { - public int compare(Scoreable t1, Scoreable t2) { - if (t1.getScore() > t2.getScore()) { - return -1; - } else if (t1.getScore() == t2.getScore()) { - return 0; - } else { - return 1; - } - } - }; - - /** - * Calculates a score against the given data. The score can be retrieved with get score - * - * @param data the data to be scored - * @return the score for the data - */ - public float calculateScore(Data data); - - - /** - * Retrieves a previously calculated (and possibly normalized) score - * - * @return the score - */ - public float getScore(); - - - /** - * Normalizes a previously calculated score - * - * @param maxScore maximum score to use for norm - * @return the normalized score - */ - public float normalizeScore(float maxScore); - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/SimpleAcousticScorer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/SimpleAcousticScorer.java deleted file mode 100755 index cf7f1f54..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/SimpleAcousticScorer.java +++ /dev/null @@ -1,194 +0,0 @@ -package edu.cmu.sphinx.decoder.scorer; - -import edu.cmu.sphinx.decoder.search.Token; -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.frontend.endpoint.SpeechEndSignal; -import edu.cmu.sphinx.frontend.util.DataUtil; -import edu.cmu.sphinx.util.props.ConfigurableAdapter; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Component; - -import java.util.LinkedList; -import java.util.List; - -/** - * Implements some basic scorer functionality, including a simple default - * acoustic scoring implementation which scores within the current thread, that - * can be changed by overriding the {@link #doScoring} method. - * - *

    - * Note that all scores are maintained in LogMath log base. - * - * @author Holger Brandl - */ -public class SimpleAcousticScorer extends ConfigurableAdapter implements AcousticScorer { - - /** Property the defines the frontend to retrieve features from for scoring */ - @S4Component(type = BaseDataProcessor.class) - public final static String FEATURE_FRONTEND = "frontend"; - protected BaseDataProcessor frontEnd; - - /** - * An optional post-processor for computed scores that will normalize - * scores. If not set, no normalization will applied and the token scores - * will be returned unchanged. - */ - @S4Component(type = ScoreNormalizer.class, mandatory = false) - public final static String SCORE_NORMALIZER = "scoreNormalizer"; - protected ScoreNormalizer scoreNormalizer; - - private LinkedList storedData; - private boolean seenEnd = false; - - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - this.frontEnd = (BaseDataProcessor) ps.getComponent(FEATURE_FRONTEND); - this.scoreNormalizer = (ScoreNormalizer) ps.getComponent(SCORE_NORMALIZER); - storedData = new LinkedList(); - } - - /** - * @param frontEnd - * the frontend to retrieve features from for scoring - * @param scoreNormalizer - * optional post-processor for computed scores that will - * normalize scores. If not set, no normalization will applied - * and the token scores will be returned unchanged. - */ - public SimpleAcousticScorer(BaseDataProcessor frontEnd, ScoreNormalizer scoreNormalizer) { - initLogger(); - this.frontEnd = frontEnd; - this.scoreNormalizer = scoreNormalizer; - storedData = new LinkedList(); - } - - public SimpleAcousticScorer() { - } - - /** - * Scores the given set of states. - * - * @param scoreableList - * A list containing scoreable objects to be scored - * @return The best scoring scoreable, or null if there are no - * more features to score - */ - public Data calculateScores(List scoreableList) { - Data data; - if (storedData.isEmpty()) { - while ((data = getNextData()) instanceof Signal) { - if (data instanceof SpeechEndSignal) { - seenEnd = true; - break; - } - if (data instanceof DataEndSignal) { - if (seenEnd) - return null; - else - break; - } - } - if (data == null) - return null; - } else { - data = storedData.poll(); - } - - return calculateScoresForData(scoreableList, data); - } - - public Data calculateScoresAndStoreData(List scoreableList) { - Data data; - while ((data = getNextData()) instanceof Signal) { - if (data instanceof SpeechEndSignal) { - seenEnd = true; - break; - } - if (data instanceof DataEndSignal) { - if (seenEnd) - return null; - else - break; - } - } - if (data == null) - return null; - - storedData.add(data); - - return calculateScoresForData(scoreableList, data); - } - - protected Data calculateScoresForData(List scoreableList, Data data) { - if (data instanceof SpeechEndSignal || data instanceof DataEndSignal) { - return data; - } - - if (scoreableList.isEmpty()) - return null; - - // convert the data to FloatData if not yet done - if (data instanceof DoubleData) - data = DataUtil.DoubleData2FloatData((DoubleData) data); - - Scoreable bestToken = doScoring(scoreableList, data); - - // apply optional score normalization - if (scoreNormalizer != null && bestToken instanceof Token) - bestToken = scoreNormalizer.normalize(scoreableList, bestToken); - - return bestToken; - } - - protected Data getNextData() { - Data data = frontEnd.getData(); - return data; - } - - public void startRecognition() { - storedData.clear(); - } - - public void stopRecognition() { - // nothing needs to be done here - } - - /** - * Scores a a list of Scoreables given a Data - * -object. - * - * @param scoreableList - * The list of Scoreables to be scored - * @param data - * The Data-object to be used for scoring. - * @param type for scorables - * @return the best scoring Scoreable or null if - * the list of scoreables was empty. - */ - protected T doScoring(List scoreableList, Data data) { - - T best = null; - float bestScore = -Float.MAX_VALUE; - - for (T item : scoreableList) { - item.calculateScore(data); - if (item.getScore() > bestScore) { - bestScore = item.getScore(); - best = item; - } - } - return best; - } - - // Even if we don't do any meaningful allocation here, we implement the - // methods because most extending scorers do need them either. - - public void allocate() { - } - - public void deallocate() { - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/ThreadedAcousticScorer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/ThreadedAcousticScorer.java deleted file mode 100755 index 206c7962..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/scorer/ThreadedAcousticScorer.java +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.decoder.scorer; - -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.frontend.BaseDataProcessor; -import edu.cmu.sphinx.frontend.DataProcessingException; -import edu.cmu.sphinx.util.CustomThreadFactory; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Boolean; -import edu.cmu.sphinx.util.props.S4Integer; - -import java.util.*; -import java.util.concurrent.*; - -/** - * An acoustic scorer that breaks the scoring up into a configurable number of separate threads. - *

    - * All scores are maintained in LogMath log base - */ -public class ThreadedAcousticScorer extends SimpleAcousticScorer { - - /** - * The property that controls the thread priority of scoring threads. - * Must be a value between {@link Thread#MIN_PRIORITY} and {@link Thread#MAX_PRIORITY}, inclusive. - * The default is {@link Thread#NORM_PRIORITY}. - */ - @S4Integer(defaultValue = Thread.NORM_PRIORITY) - public final static String PROP_THREAD_PRIORITY = "threadPriority"; - - /** - * The property that controls the number of threads that are used to score HMM states. If the isCpuRelative - * property is false, then is is the exact number of threads that are used to score HMM states. If the isCpuRelative - * property is true, then this value is combined with the number of available processors on the system. If you want - * to have one thread per CPU available to score states, set the NUM_THREADS property to 0 and the isCpuRelative to - * true. If you want exactly one thread to process scores set NUM_THREADS to 1 and isCpuRelative to false. - *

    - * If the value is 1 isCpuRelative is false no additional thread will be instantiated, and all computation will be - * done in the calling thread itself. The default value is 0. - */ - @S4Integer(defaultValue = 0) - public final static String PROP_NUM_THREADS = "numThreads"; - - /** - * The property that controls whether the number of available CPUs on the system is used when determining - * the number of threads to use for scoring. If true, the NUM_THREADS property is combined with the available number - * of CPUS to determine the number of threads. Note that the number of threads is contained to be never lower than - * zero. Also, if the number of threads is 0, the states are scored on the calling thread, no separate threads are - * started. The default value is false. - */ - @S4Boolean(defaultValue = true) - public final static String PROP_IS_CPU_RELATIVE = "isCpuRelative"; - - /** - * The property that controls the minimum number of scoreables sent to a thread. This is used to prevent - * over threading of the scoring that could happen if the number of threads is high compared to the size of the - * active list. The default is 50 - */ - @S4Integer(defaultValue = 10) - public final static String PROP_MIN_SCOREABLES_PER_THREAD = "minScoreablesPerThread"; - - private final static String className = ThreadedAcousticScorer.class.getSimpleName(); - - private int numThreads; // number of threads in use - private int threadPriority; - private int minScoreablesPerThread; // min scoreables sent to a thread - private ExecutorService executorService; - - /** - * @param frontEnd - * the frontend to retrieve features from for scoring - * @param scoreNormalizer - * optional post-processor for computed scores that will - * normalize scores. If not set, no normalization will applied - * and the token scores will be returned unchanged. - * @param minScoreablesPerThread - * the number of threads that are used to score HMM states. If - * the isCpuRelative property is false, then is is the exact - * number of threads that are used to score HMM states. If the - * isCpuRelative property is true, then this value is combined - * with the number of available processors on the system. If you - * want to have one thread per CPU available to score states, set - * the NUM_THREADS property to 0 and the isCpuRelative to true. - * If you want exactly one thread to process scores set - * NUM_THREADS to 1 and isCpuRelative to false. - *

    - * If the value is 1 isCpuRelative is false no additional thread - * will be instantiated, and all computation will be done in the - * calling thread itself. The default value is 0. - * @param cpuRelative - * controls whether the number of available CPUs on the system is - * used when determining the number of threads to use for - * scoring. If true, the NUM_THREADS property is combined with - * the available number of CPUS to determine the number of - * threads. Note that the number of threads is constrained to be - * never lower than zero. Also, if the number of threads is 0, - * the states are scored on the calling thread, no separate - * threads are started. The default value is false. - * @param numThreads - * the minimum number of scoreables sent to a thread. This is - * used to prevent over threading of the scoring that could - * happen if the number of threads is high compared to the size - * of the active list. The default is 50 - * @param threadPriority - * the thread priority of scoring threads. Must be a value between - * {@link Thread#MIN_PRIORITY} and {@link Thread#MAX_PRIORITY}, inclusive. - * The default is {@link Thread#NORM_PRIORITY}. - */ - public ThreadedAcousticScorer(BaseDataProcessor frontEnd, ScoreNormalizer scoreNormalizer, - int minScoreablesPerThread, boolean cpuRelative, int numThreads, int threadPriority) { - super(frontEnd, scoreNormalizer); - init(minScoreablesPerThread, cpuRelative, numThreads, threadPriority); - } - - public ThreadedAcousticScorer() { - } - - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - init(ps.getInt(PROP_MIN_SCOREABLES_PER_THREAD), ps.getBoolean(PROP_IS_CPU_RELATIVE), - ps.getInt(PROP_NUM_THREADS), ps.getInt(PROP_THREAD_PRIORITY)); - } - - private void init(int minScoreablesPerThread, boolean cpuRelative, int numThreads, int threadPriority) { - this.minScoreablesPerThread = minScoreablesPerThread; - if (cpuRelative) { - numThreads += Runtime.getRuntime().availableProcessors(); - } - this.numThreads = numThreads; - this.threadPriority = threadPriority; - } - - @Override - public void allocate() { - super.allocate(); - if (executorService == null) { - if (numThreads > 1) { - logger.fine("# of scoring threads: " + numThreads); - executorService = Executors.newFixedThreadPool(numThreads, - new CustomThreadFactory(className, true, threadPriority)); - } else { - logger.fine("no scoring threads"); - } - } - } - - @Override - public void deallocate() { - super.deallocate(); - if (executorService != null) { - executorService.shutdown(); - executorService = null; - } - } - - @Override - protected T doScoring(List scoreableList, final Data data) { - if (numThreads > 1) { - int totalSize = scoreableList.size(); - int jobSize = Math.max((totalSize + numThreads - 1) / numThreads, minScoreablesPerThread); - - if (jobSize < totalSize) { - List> tasks = new ArrayList>(); - for (int from = 0, to = jobSize; from < totalSize; from = to, to += jobSize) { - final List scoringJob = scoreableList.subList(from, Math.min(to, totalSize)); - tasks.add(new Callable() { - public T call() throws Exception { - return ThreadedAcousticScorer.super.doScoring(scoringJob, data); - } - }); - } - - List finalists = new ArrayList(tasks.size()); - - try { - for (Future result : executorService.invokeAll(tasks)) - finalists.add(result.get()); - } catch (Exception e) { - throw new DataProcessingException("No scoring jobs ended", e); - } - - return Collections.min(finalists, Scoreable.COMPARATOR); - } - } - // if no additional threads are necessary, do the scoring in the calling thread - return super.doScoring(scoreableList, data); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/ActiveList.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/ActiveList.java deleted file mode 100755 index a78c01dc..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/ActiveList.java +++ /dev/null @@ -1,117 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.decoder.search; - -import java.util.List; -import edu.cmu.sphinx.util.props.*; - -/** - * An active list is maintained as a sorted list - *

    - * Note that all scores are represented in LogMath logbase - */ -public interface ActiveList extends Iterable { - - /** - * property that sets the desired (or target) size for this active list. This is sometimes referred to as the beam - * size - */ - @S4Integer(defaultValue = 2000) - public final static String PROP_ABSOLUTE_BEAM_WIDTH = "absoluteBeamWidth"; - - /** - * Property that sets the minimum score relative to the maximum score in the list for pruning. Tokens with a score - * less than relativeBeamWidth * maximumScore will be pruned from the list - */ - @S4Double(defaultValue = 0.0) - public final static String PROP_RELATIVE_BEAM_WIDTH = "relativeBeamWidth"; - /** - * Property that indicates whether or not the active list will implement 'strict pruning'. When strict pruning is - * enabled, the active list will not remove tokens from the active list until they have been completely scored. If - * strict pruning is not enabled, tokens can be removed from the active list based upon their entry scores. The - * default setting is false (disabled). - */ - - @S4Boolean(defaultValue = true) - public final static String PROP_STRICT_PRUNING = "strictPruning"; - - /** - * Adds the given token to the list, keeping track of the lowest scoring token - * - * @param token the token to add - */ - public void add(Token token); - - /** - * Purges the active list of excess members returning a (potentially new) active list - * - * @return a purged active list - */ - public ActiveList purge(); - - - /** - * Returns the size of this list - * - * @return the size - */ - public int size(); - - - /** - * Gets the list of all tokens - * - * @return the set of tokens - */ - public List getTokens(); - - /** - * gets the beam threshold best upon the best scoring token - * - * @return the beam threshold - */ - public float getBeamThreshold(); - - - /** - * gets the best score in the list - * - * @return the best score - */ - public float getBestScore(); - - - /** - * Sets the best scoring token for this active list - * - * @param token the best scoring token - */ - public void setBestToken(Token token); - - - /** - * Gets the best scoring token for this active list - * - * @return the best scoring token - */ - public Token getBestToken(); - - - /** - * Creates a new empty version of this active list with the same general properties. - * - * @return a new active list. - */ - public ActiveList newInstance(); -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/ActiveListFactory.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/ActiveListFactory.java deleted file mode 100755 index 0dc3046c..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/ActiveListFactory.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.decoder.search; - -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.props.*; - -/** Creates new active lists. */ -public abstract class ActiveListFactory implements Configurable { - - - /** - * property that sets the desired (or target) size for this active list. This is sometimes referred to as the beam - * size - */ - @S4Integer(defaultValue = -1) - public final static String PROP_ABSOLUTE_BEAM_WIDTH = "absoluteBeamWidth"; - - /** - * Property that sets the minimum score relative to the maximum score in the list for pruning. Tokens with a score - * less than relativeBeamWidth * maximumScore will be pruned from the list - */ - @S4Double(defaultValue = 1E-80) - public final static String PROP_RELATIVE_BEAM_WIDTH = "relativeBeamWidth"; - - /** - * Property that indicates whether or not the active list will implement 'strict pruning'. When strict pruning is - * enabled, the active list will not remove tokens from the active list until they have been completely scored. If - * strict pruning is not enabled, tokens can be removed from the active list based upon their entry scores. The - * default setting is false (disabled). - */ - @S4Boolean(defaultValue = true) - public final static String PROP_STRICT_PRUNING = "strictPruning"; - - protected LogMath logMath; - protected int absoluteBeamWidth; - protected float logRelativeBeamWidth; - - /** - * - * @param absoluteBeamWidth beam for absolute pruning - * @param relativeBeamWidth beam for relative pruning - */ - public ActiveListFactory(int absoluteBeamWidth,double relativeBeamWidth){ - logMath = LogMath.getLogMath(); - this.absoluteBeamWidth = absoluteBeamWidth; - this.logRelativeBeamWidth = logMath.linearToLog(relativeBeamWidth); - } - - public ActiveListFactory() { - } - - - public void newProperties(PropertySheet ps) throws PropertyException { - logMath = LogMath.getLogMath(); - absoluteBeamWidth = ps.getInt(PROP_ABSOLUTE_BEAM_WIDTH); - double relativeBeamWidth = ps.getDouble(PROP_RELATIVE_BEAM_WIDTH); - - logRelativeBeamWidth = logMath.linearToLog(relativeBeamWidth); - } - - - /** - * Creates a new active list of a particular type - * - * @return the active list - */ - public abstract ActiveList newInstance(); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/ActiveListManager.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/ActiveListManager.java deleted file mode 100755 index d8606a9e..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/ActiveListManager.java +++ /dev/null @@ -1,77 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.decoder.search; - -import edu.cmu.sphinx.util.props.Configurable; -import edu.cmu.sphinx.util.props.S4Double; -import edu.cmu.sphinx.util.props.S4Integer; - -import java.util.Iterator; - -/** An active list is maintained as a sorted list */ -public interface ActiveListManager extends Configurable { - - /** The property that specifies the absolute word beam width */ - @S4Integer(defaultValue = 2000) - public final static String PROP_ABSOLUTE_WORD_BEAM_WIDTH = - "absoluteWordBeamWidth"; - - /** The property that specifies the relative word beam width */ - @S4Double(defaultValue = 0.0) - public final static String PROP_RELATIVE_WORD_BEAM_WIDTH = - "relativeWordBeamWidth"; - - /** - * Adds the given token to the list - * - * @param token the token to add - */ - public void add(Token token); - - - /** - * Returns an Iterator of all the non-emitting ActiveLists. The iteration order is the same as the search state - * order. - * - * @return an Iterator of non-emitting ActiveLists - */ - public Iterator getNonEmittingListIterator(); - - - /** - * Returns the emitting ActiveList from the manager - * - * @return the emitting ActiveList - */ - public ActiveList getEmittingList(); - - - /** - * Clears emitting list in manager - */ - public void clearEmittingList(); - - - /** Dumps out debug info for the active list manager */ - public void dump(); - - - /** - * Sets the total number of state types to be managed - * - * @param numStateOrder the total number of state types - */ - public void setNumStateOrder(int numStateOrder); - -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/AlternateHypothesisManager.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/AlternateHypothesisManager.java deleted file mode 100755 index 99ebb4ab..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/AlternateHypothesisManager.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.decoder.search; - - -import edu.cmu.sphinx.decoder.scorer.Scoreable; - -import java.util.*; - -/** - * Manager for pruned hypothesis - * - * @author Joe Woelfel - */ -public class AlternateHypothesisManager { - - private final Map> viterbiLoserMap = new HashMap>(); - private final int maxEdges; - - - /** - * Creates an alternate hypotheses manager - * - * @param maxEdges the maximum edges allowed - */ - public AlternateHypothesisManager(int maxEdges) { - this.maxEdges = maxEdges; - } - - - /** - * Collects adds alternate predecessors for a token that would have lost because of viterbi. - * - * @param token - a token that has an alternate lower scoring predecessor that still might be of interest - * @param predecessor - a predecessor that scores lower than token.getPredecessor(). - */ - - public void addAlternatePredecessor(Token token, Token predecessor) { - assert predecessor != token.getPredecessor(); - List list = viterbiLoserMap.get(token); - if (list == null) { - list = new ArrayList(); - viterbiLoserMap.put(token, list); - } - list.add(predecessor); - } - - - /** - * Returns a list of alternate predecessors for a token. - * - * @param token - a token that may have alternate lower scoring predecessor that still might be of interest - * @return A list of predecessors that scores lower than token.getPredecessor(). - */ - public List getAlternatePredecessors(Token token) { - return viterbiLoserMap.get(token); - } - - - /** Purge all but max number of alternate preceding token hypotheses. */ - public void purge() { - - int max = maxEdges - 1; - - for (Map.Entry> entry : viterbiLoserMap.entrySet()) { - List list = entry.getValue(); - Collections.sort(list, Scoreable.COMPARATOR); - List newList = list.subList(0, list.size() > max ? max : list.size()); - viterbiLoserMap.put(entry.getKey(), newList); - } - } - - public boolean hasAlternatePredecessors(Token token) { - return viterbiLoserMap.containsKey(token); - } -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/PartitionActiveListFactory.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/PartitionActiveListFactory.java deleted file mode 100755 index 98401de1..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/PartitionActiveListFactory.java +++ /dev/null @@ -1,270 +0,0 @@ -/* - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.decoder.search; - -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; - -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; -import java.util.NoSuchElementException; - -/** A factory for PartitionActiveLists */ -public class PartitionActiveListFactory extends ActiveListFactory { - - /** - * - * @param absoluteBeamWidth beam for absolute pruning - * @param relativeBeamWidth beam for relative pruning - */ - public PartitionActiveListFactory(int absoluteBeamWidth, double relativeBeamWidth) { - super(absoluteBeamWidth, relativeBeamWidth); - } - - public PartitionActiveListFactory() { - - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.decoder.search.ActiveListFactory#newInstance() - */ - @Override - public ActiveList newInstance() { - return new PartitionActiveList(absoluteBeamWidth, logRelativeBeamWidth); - } - - - /** - * An active list that does absolute beam with pruning by partitioning the - * token list based on absolute beam width, instead of sorting the token - * list, and then chopping the list up with the absolute beam width. The - * expected run time of this partitioning algorithm is O(n), instead of O(n log n) - * for merge sort. - *

    - * This class is not thread safe and should only be used by a single thread. - *

    - * Note that all scores are maintained in the LogMath log base. - */ - class PartitionActiveList implements ActiveList { - - private int size; - private final int absoluteBeamWidth; - private final float logRelativeBeamWidth; - private Token bestToken; - // when the list is changed these things should be - // changed/updated as well - private Token[] tokenList; - private final Partitioner partitioner = new Partitioner(); - - - /** Creates an empty active list - * @param absoluteBeamWidth beam for absolute pruning - * @param logRelativeBeamWidth beam for relative pruning - */ - public PartitionActiveList(int absoluteBeamWidth, - float logRelativeBeamWidth) { - this.absoluteBeamWidth = absoluteBeamWidth; - this.logRelativeBeamWidth = logRelativeBeamWidth; - int listSize = 2000; - if (absoluteBeamWidth > 0) { - listSize = absoluteBeamWidth / 3; - } - this.tokenList = new Token[listSize]; - } - - - /** - * Adds the given token to the list - * - * @param token the token to add - */ - public void add(Token token) { - if (size < tokenList.length) { - tokenList[size] = token; - size++; - } else { - // token array too small, double the capacity - doubleCapacity(); - add(token); - } - if (bestToken == null || token.getScore() > bestToken.getScore()) { - bestToken = token; - } - } - - - /** Doubles the capacity of the Token array. */ - private void doubleCapacity() { - tokenList = Arrays.copyOf(tokenList, tokenList.length * 2); - } - - - /** - * Purges excess members. Remove all nodes that fall below the relativeBeamWidth - * - * @return a (possible new) active list - */ - public ActiveList purge() { - // if the absolute beam is zero, this means there - // should be no constraint on the abs beam size at all - // so we will only be relative beam pruning, which means - // that we don't have to sort the list - if (absoluteBeamWidth > 0) { - // if we have an absolute beam, then we will - // need to sort the tokens to apply the beam - if (size > absoluteBeamWidth) { - size = partitioner.partition(tokenList, size, - absoluteBeamWidth) + 1; - } - } - return this; - } - - - /** - * gets the beam threshold best upon the best scoring token - * - * @return the beam threshold - */ - public float getBeamThreshold() { - return getBestScore() + logRelativeBeamWidth; - } - - - /** - * gets the best score in the list - * - * @return the best score - */ - public float getBestScore() { - float bestScore = -Float.MAX_VALUE; - if (bestToken != null) { - bestScore = bestToken.getScore(); - } - // A sanity check - // for (Token t : this) { - // if (t.getScore() > bestScore) { - // System.out.println("GBS: found better score " - // + t + " vs. " + bestScore); - // } - // } - return bestScore; - } - - - /** - * Sets the best scoring token for this active list - * - * @param token the best scoring token - */ - public void setBestToken(Token token) { - bestToken = token; - } - - - /** - * Gets the best scoring token for this active list - * - * @return the best scoring token - */ - public Token getBestToken() { - return bestToken; - } - - - /** - * Retrieves the iterator for this tree. - * - * @return the iterator for this token list - */ - public Iterator iterator() { - return (new TokenArrayIterator(tokenList, size)); - } - - - /** - * Gets the list of all tokens - * - * @return the list of tokens - */ - public List getTokens() { - return Arrays.asList(tokenList).subList(0, size); - } - - /** - * Returns the number of tokens on this active list - * - * @return the size of the active list - */ - public final int size() { - return size; - } - - - /* (non-Javadoc) - * @see edu.cmu.sphinx.decoder.search.ActiveList#createNew() - */ - public ActiveList newInstance() { - return PartitionActiveListFactory.this.newInstance(); - } - } -} - -class TokenArrayIterator implements Iterator { - - private final Token[] tokenArray; - private final int size; - private int pos; - - - TokenArrayIterator(Token[] tokenArray, int size) { - this.tokenArray = tokenArray; - this.pos = 0; - this.size = size; - } - - - /** Returns true if the iteration has more tokens. */ - public boolean hasNext() { - return pos < size; - } - - - /** Returns the next token in the iteration. */ - public Token next() throws NoSuchElementException { - if (pos >= tokenArray.length) { - throw new NoSuchElementException(); - } - return tokenArray[pos++]; - } - - - /** Unimplemented, throws an Error if called. */ - public void remove() { - throw new Error("TokenArrayIterator.remove() unimplemented"); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/Partitioner.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/Partitioner.java deleted file mode 100755 index e20affcf..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/Partitioner.java +++ /dev/null @@ -1,180 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.decoder.search; - -import java.util.Arrays; -import edu.cmu.sphinx.decoder.scorer.Scoreable; - -/** - * Partitions a list of tokens according to the token score, used - * in {@link PartitionActiveListFactory}. This method is supposed - * to provide O(n) performance so it's more preferable than - */ -public class Partitioner { - - /** Max recursion depth **/ - final private int MAX_DEPTH = 50; - - - /** - * Partitions sub-array of tokens around the end token. - * Put all elements less or equal then pivot to the start of the array, - * shifting new pivot position - * - * @param tokens the token array to partition - * @param start the starting index of the subarray - * @param end the pivot and the ending index of the subarray, inclusive - * @return the index (after partitioning) of the element around which the array is partitioned - */ - private int endPointPartition(Token[] tokens, int start, int end) { - Token pivot = tokens[end]; - float pivotScore = pivot.getScore(); - - int i = start; - int j = end - 1; - - while (true) { - - while (i < end && tokens[i].getScore() >= pivotScore) - i++; - while (j > i && tokens[j].getScore() < pivotScore) - j--; - - if (j <= i) - break; - - Token current = tokens[j]; - setToken(tokens, j, tokens[i]); - setToken(tokens, i, current); - } - - setToken(tokens, end, tokens[i]); - setToken(tokens, i, pivot); - return i; - } - - - /** - * Partitions sub-array of tokens around the x-th token by selecting the midpoint of the token array as the pivot. - * Partially solves issues with slow performance on already sorted arrays. - * - * @param tokens the token array to partition - * @param start the starting index of the subarray - * @param end the ending index of the subarray, inclusive - * @return the index of the element around which the array is partitioned - */ - private int midPointPartition(Token[] tokens, int start, int end) { - int middle = (start + end) >>> 1; - Token temp = tokens[end]; - setToken(tokens, end, tokens[middle]); - setToken(tokens, middle, temp); - return endPointPartition(tokens, start, end); - } - - - /** - * Partitions the given array of tokens in place, so that the highest scoring n token will be at the beginning of - * the array, not in any order. - * - * @param tokens the array of tokens to partition - * @param size the number of tokens to partition - * @param n the number of tokens in the final partition - * @return the index of the last element in the partition - */ - public int partition(Token[] tokens, int size, int n) { - if (tokens.length > n) { - return midPointSelect(tokens, 0, size - 1, n, 0); - } else { - return findBest(tokens, size); - } - } - - /** - * Simply find the best token and put it in the last slot - * - * @param tokens array of tokens - * @param size the number of tokens to partition - * @return index of the best token - */ - private int findBest(Token[] tokens, int size) { - int r = -1; - float lowestScore = Float.MAX_VALUE; - for (int i = 0; i < tokens.length; i++) { - float currentScore = tokens[i].getScore(); - if (currentScore <= lowestScore) { - lowestScore = currentScore; - r = i; // "r" is the returned index - } - } - - // exchange tokens[r] <=> last token, - // where tokens[r] has the lowest score - int last = size - 1; - if (last >= 0) { - Token lastToken = tokens[last]; - setToken(tokens, last, tokens[r]); - setToken(tokens, r, lastToken); - } - - // return the last index - return last; - } - - - private void setToken(Token[] list, int index, Token token) { - list[index] = token; - } - - /** - * Selects the token with the ith largest token score. - * - * @param tokens the token array to partition - * @param start the starting index of the subarray - * @param end the ending index of the subarray, inclusive - * @param targetSize target size of the partition - * @param depth recursion depth to avoid stack overflow and fall back to simple partition. - * @return the index of the token with the ith largest score - */ - private int midPointSelect(Token[] tokens, int start, int end, int targetSize, int depth) { - if (depth > MAX_DEPTH) { - return simplePointSelect (tokens, start, end, targetSize); - } - if (start == end) { - return start; - } - int partitionToken = midPointPartition(tokens, start, end); - int newSize = partitionToken - start + 1; - if (targetSize == newSize) { - return partitionToken; - } else if (targetSize < newSize) { - return midPointSelect(tokens, start, partitionToken - 1, targetSize, depth + 1); - } else { - return midPointSelect(tokens, partitionToken + 1, end, targetSize - newSize, depth + 1); - } - } - - /** - * Fallback method to get the partition - * - * @param tokens the token array to partition - * @param start the starting index of the subarray - * @param end the ending index of the subarray, inclusive - * @param targetSize target size of the partition - * @return the index of the token with the ith largest score - */ - private int simplePointSelect(Token[] tokens, int start, int end, int targetSize) { - Arrays.sort(tokens, start, end + 1, Scoreable.COMPARATOR); - return start + targetSize - 1; - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/SearchManager.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/SearchManager.java deleted file mode 100755 index 7f3b00aa..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/SearchManager.java +++ /dev/null @@ -1,64 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.decoder.search; - -import edu.cmu.sphinx.result.Result; -import edu.cmu.sphinx.util.props.Configurable; - -/** - * Defines the interface for the SearchManager. The SearchManager's primary role is to execute the search for a given - * number of frames. The SearchManager will return interim results as the recognition proceeds and when recognition - * completes a final result will be returned. - */ -public interface SearchManager extends Configurable { - - /** - * Allocates the resources necessary for this search. This should be called once before an recognitions are - * performed - */ - public void allocate(); - - - /** - * Deallocates resources necessary for this search. This should be called once after all recognitions are completed - * at the search manager is no longer needed. - */ - public void deallocate(); - - - /** - * Prepares the SearchManager for recognition. This method must be called before recognize is - * called. Typically, start and stop are called bracketing an utterance. - */ - public void startRecognition(); - - - /** Performs post-recognition cleanup. This method should be called after recognize returns a final result. */ - public void stopRecognition(); - - - /** - * Performs recognition. Processes no more than the given number of frames before returning. This method returns a - * partial result after nFrames have been processed, or a final result if recognition completes while processing - * frames. If a final result is returned, the actual number of frames processed can be retrieved from the result. - * This method may block while waiting for frames to arrive. - * - * @param nFrames the maximum number of frames to process. A final result may be returned before all nFrames are - * processed. - * @return the recognition result, the result may be a partial or a final result; or return null if no frames are - * arrived - */ - public Result recognize(int nFrames); -} - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/SimpleActiveListFactory.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/SimpleActiveListFactory.java deleted file mode 100755 index 9f61bc6a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/SimpleActiveListFactory.java +++ /dev/null @@ -1,222 +0,0 @@ -/* - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.decoder.search; - -import edu.cmu.sphinx.decoder.scorer.Scoreable; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import java.util.Collections; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; - -/** A factory for simple active lists */ -public class SimpleActiveListFactory extends ActiveListFactory { - - /** - * Creates factory for simple active lists - * @param absoluteBeamWidth absolute pruning beam - * @param relativeBeamWidth relative pruning beam - */ - public SimpleActiveListFactory(int absoluteBeamWidth, - double relativeBeamWidth) - { - super(absoluteBeamWidth, relativeBeamWidth); - } - - public SimpleActiveListFactory() { - - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.decoder.search.ActiveListFactory#newInstance() - */ - @Override - public ActiveList newInstance() { - return new SimpleActiveList(absoluteBeamWidth, logRelativeBeamWidth); - } - - - /** - * An active list that tries to be simple and correct. This type of active list will be slow, but should exhibit - * correct behavior. Faster versions of the ActiveList exist (HeapActiveList, TreeActiveList). - *

    - * This class is not thread safe and should only be used by a single thread. - *

    - * Note that all scores are maintained in the LogMath log domain - */ - class SimpleActiveList implements ActiveList { - - private int absoluteBeamWidth = 2000; - private final float logRelativeBeamWidth; - private Token bestToken; - private List tokenList = new LinkedList(); - - - /** - * Creates an empty active list - * - * @param absoluteBeamWidth the absolute beam width - * @param logRelativeBeamWidth the relative beam width (in the log domain) - */ - public SimpleActiveList(int absoluteBeamWidth, - float logRelativeBeamWidth) { - this.absoluteBeamWidth = absoluteBeamWidth; - this.logRelativeBeamWidth = logRelativeBeamWidth; - } - - - /** - * Adds the given token to the list - * - * @param token the token to add - */ - public void add(Token token) { - tokenList.add(token); - if (bestToken == null || token.getScore() > bestToken.getScore()) { - bestToken = token; - } - } - - - /** - * Replaces an old token with a new token - * - * @param oldToken the token to replace (or null in which case, replace works like add). - * @param newToken the new token to be placed in the list. - */ - public void replace(Token oldToken, Token newToken) { - add(newToken); - if (oldToken != null) { - if (!tokenList.remove(oldToken)) { - // Some optional debugging code here to dump out the paths - // when this "should never happen" error happens - // System.out.println("SimpleActiveList: remove " - // + oldToken + " missing, but replaced by " - // + newToken); - // oldToken.dumpTokenPath(true); - // newToken.dumpTokenPath(true); - } - } - } - - - /** - * Purges excess members. Remove all nodes that fall below the relativeBeamWidth - * - * @return a (possible new) active list - */ - public ActiveList purge() { - if (absoluteBeamWidth > 0 && tokenList.size() > absoluteBeamWidth) { - Collections.sort(tokenList, Scoreable.COMPARATOR); - tokenList = tokenList.subList(0, absoluteBeamWidth); - } - return this; - } - - - /** - * Retrieves the iterator for this tree. - * - * @return the iterator for this token list - */ - public Iterator iterator() { - return tokenList.iterator(); - } - - - /** - * Gets the set of all tokens - * - * @return the set of tokens - */ - public List getTokens() { - return tokenList; - } - - - /** - * Returns the number of tokens on this active list - * - * @return the size of the active list - */ - public final int size() { - return tokenList.size(); - } - - - /** - * gets the beam threshold best upon the best scoring token - * - * @return the beam threshold - */ - public float getBeamThreshold() { - return getBestScore() + logRelativeBeamWidth; - } - - - /** - * gets the best score in the list - * - * @return the best score - */ - public float getBestScore() { - float bestScore = -Float.MAX_VALUE; - if (bestToken != null) { - bestScore = bestToken.getScore(); - } - return bestScore; - } - - - /** - * Sets the best scoring token for this active list - * - * @param token the best scoring token - */ - public void setBestToken(Token token) { - bestToken = token; - } - - - /** - * Gets the best scoring token for this active list - * - * @return the best scoring token - */ - public Token getBestToken() { - return bestToken; - } - - - /* (non-Javadoc) - * @see edu.cmu.sphinx.decoder.search.ActiveList#createNew() - */ - public ActiveList newInstance() { - return SimpleActiveListFactory.this.newInstance(); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/SimpleActiveListManager.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/SimpleActiveListManager.java deleted file mode 100755 index e8a2ff45..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/SimpleActiveListManager.java +++ /dev/null @@ -1,244 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.decoder.search; - -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Boolean; -import edu.cmu.sphinx.util.props.S4ComponentList; - -import java.util.Iterator; -import java.util.List; -import java.util.NoSuchElementException; -import java.util.logging.Logger; - -/** - * A list of ActiveLists. Different token types are placed in different lists. - *

    - * This class is not thread safe and should only be used by a single thread. - */ -public class SimpleActiveListManager implements ActiveListManager { - - /** - * This property is used in the Iterator returned by the getNonEmittingListIterator() method. When the - * Iterator.next() method is called, this property determines whether the lists prior to that returned by next() are - * empty (they should be empty). If they are not empty, an Error will be thrown. - */ - @S4Boolean(defaultValue = false) - public static final String PROP_CHECK_PRIOR_LISTS_EMPTY = "checkPriorListsEmpty"; - - /** The property that defines the name of the active list factory to be used by this search manager. */ - @S4ComponentList(type = ActiveListFactory.class) - public final static String PROP_ACTIVE_LIST_FACTORIES = "activeListFactories"; - - // -------------------------------------- - // Configuration data - // -------------------------------------- - private Logger logger; - private boolean checkPriorLists; - private List activeListFactories; - private ActiveList[] currentActiveLists; - - - /** - * Create a simple list manager - * @param activeListFactories factories - * @param checkPriorLists check prior lists during operation - */ - public SimpleActiveListManager(List activeListFactories, boolean checkPriorLists) { - this.logger = Logger.getLogger( getClass().getName() ); - - this.activeListFactories = activeListFactories; - this.checkPriorLists = checkPriorLists; - } - - public SimpleActiveListManager() { - - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - public void newProperties(PropertySheet ps) throws PropertyException { - logger = ps.getLogger(); - - activeListFactories = ps.getComponentList(PROP_ACTIVE_LIST_FACTORIES, ActiveListFactory.class); - checkPriorLists = ps.getBoolean(PROP_CHECK_PRIOR_LISTS_EMPTY); - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.decoder.search.ActiveListManager#setNumStateOrder(java.lang.Class[]) - */ - public void setNumStateOrder(int numStateOrder) { - // check to make sure that we have the correct - // number of active list factories for the given search states - currentActiveLists = new ActiveList[numStateOrder]; - - if (activeListFactories.isEmpty()) { - logger.severe("No active list factories configured"); - throw new Error("No active list factories configured"); - } - if (activeListFactories.size() != currentActiveLists.length) { - logger.warning("Need " + currentActiveLists.length + - " active list factories, found " + - activeListFactories.size()); - } - createActiveLists(); - } - - - /** - * Creates the emitting and non-emitting active lists. When creating the non-emitting active lists, we will look at - * their respective beam widths (eg, word beam, unit beam, state beam). - */ - private void createActiveLists() { - int nlists = activeListFactories.size(); - for (int i = 0; i < currentActiveLists.length; i++) { - int which = i; - if (which >= nlists) { - which = nlists - 1; - } - ActiveListFactory alf = activeListFactories.get(which); - currentActiveLists[i] = alf.newInstance(); - } - } - - - /** - * Adds the given token to the list - * - * @param token the token to add - */ - public void add(Token token) { - ActiveList activeList = findListFor(token); - if (activeList == null) { - throw new Error("Cannot find ActiveList for " - + token.getSearchState().getClass()); - } - activeList.add(token); - } - - - /** - * Given a token find the active list associated with the token type - * - * @param token - * @return the active list - */ - private ActiveList findListFor(Token token) { - return currentActiveLists[token.getSearchState().getOrder()]; - } - - - /** - * Returns the emitting ActiveList from the manager - * - * @return the emitting ActiveList - */ - public ActiveList getEmittingList() { - ActiveList list = currentActiveLists[currentActiveLists.length - 1]; - return list; - } - - - /** - * Clears emitting list in manager - */ - public void clearEmittingList() { - ActiveList list = currentActiveLists[currentActiveLists.length - 1]; - currentActiveLists[currentActiveLists.length - 1] = list.newInstance(); - } - - - /** - * Returns an Iterator of all the non-emitting ActiveLists. The iteration order is the same as the search state - * order. - * - * @return an Iterator of non-emitting ActiveLists - */ - public Iterator getNonEmittingListIterator() { - return (new NonEmittingListIterator()); - } - - - private class NonEmittingListIterator implements Iterator { - - private int listPtr; - - - public NonEmittingListIterator() { - listPtr = -1; - } - - - public boolean hasNext() { - return listPtr + 1 < currentActiveLists.length - 1; - } - - - public ActiveList next() throws NoSuchElementException { - listPtr++; - - if (listPtr >= currentActiveLists.length) { - throw new NoSuchElementException(); - } - if (checkPriorLists) { - checkPriorLists(); - } - return currentActiveLists[listPtr]; - } - - - /** Check that all lists prior to listPtr is empty. */ - private void checkPriorLists() { - for (int i = 0; i < listPtr; i++) { - ActiveList activeList = currentActiveLists[i]; - if (activeList.size() > 0) { - throw new Error("At while processing state order" - + listPtr + ", state order " + i + " not empty"); - } - } - } - - - public void remove() { - currentActiveLists[listPtr] = - currentActiveLists[listPtr].newInstance(); - } - } - - - /** Outputs debugging info for this list manager */ - public void dump() { - System.out.println("--------------------"); - for (ActiveList al : currentActiveLists) { - dumpList(al); - } - } - - - /** - * Dumps out debugging info for the given active list - * - * @param al the active list to dump - */ - private void dumpList(ActiveList al) { - System.out.println("Size: " + al.size() + " Best token: " + al.getBestToken()); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/SimpleBreadthFirstSearchManager.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/SimpleBreadthFirstSearchManager.java deleted file mode 100755 index aca17e59..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/SimpleBreadthFirstSearchManager.java +++ /dev/null @@ -1,680 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.decoder.search; - -import edu.cmu.sphinx.decoder.pruner.Pruner; -import edu.cmu.sphinx.decoder.scorer.AcousticScorer; -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.linguist.Linguist; -import edu.cmu.sphinx.linguist.SearchState; -import edu.cmu.sphinx.linguist.SearchStateArc; -import edu.cmu.sphinx.linguist.WordSearchState; -import edu.cmu.sphinx.result.Result; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.StatisticsVariable; -import edu.cmu.sphinx.util.Timer; -import edu.cmu.sphinx.util.TimerPool; -import edu.cmu.sphinx.util.props.*; - -import java.util.*; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.io.IOException; - -/** - * Provides the breadth first search. To perform recognition an application should call initialize before recognition - * begins, and repeatedly call recognize until Result.isFinal() returns true. Once a final result has - * been obtained, terminate should be called. - *

    - * All scores and probabilities are maintained in the log math log domain. - *

    - * For information about breadth first search please refer to "Spoken Language Processing", X. Huang, PTR - */ - -// TODO - need to add in timing code. -public class SimpleBreadthFirstSearchManager extends TokenSearchManager { - - /** The property that defines the name of the linguist to be used by this search manager. */ - @S4Component(type = Linguist.class) - public final static String PROP_LINGUIST = "linguist"; - - /** The property that defines the name of the linguist to be used by this search manager. */ - @S4Component(type = Pruner.class) - public final static String PROP_PRUNER = "pruner"; - - /** The property that defines the name of the scorer to be used by this search manager. */ - @S4Component(type = AcousticScorer.class) - public final static String PROP_SCORER = "scorer"; - - /** The property that defines the name of the active list factory to be used by this search manager. */ - @S4Component(type = ActiveListFactory.class) - public final static String PROP_ACTIVE_LIST_FACTORY = "activeListFactory"; - - /** - * The property that when set to true will cause the recognizer to count up all the tokens in the - * active list after every frame. - */ - @S4Boolean(defaultValue = false) - public final static String PROP_SHOW_TOKEN_COUNT = "showTokenCount"; - - /** - * The property that sets the minimum score relative to the maximum score in the word list for pruning. Words with a - * score less than relativeBeamWidth * maximumScore will be pruned from the list - */ - @S4Double(defaultValue = 0.0) - public final static String PROP_RELATIVE_WORD_BEAM_WIDTH = "relativeWordBeamWidth"; - - /** - * The property that controls whether or not relative beam pruning will be performed on the entry into a - * state. - */ - @S4Boolean(defaultValue = false) - public final static String PROP_WANT_ENTRY_PRUNING = "wantEntryPruning"; - - /** - * The property that controls the number of frames processed for every time the decode growth step is skipped. - * Setting this property to zero disables grow skipping. Setting this number to a small integer will increase the - * speed of the decoder but will also decrease its accuracy. The higher the number, the less often the grow code is - * skipped. - */ - @S4Integer(defaultValue = 0) - public final static String PROP_GROW_SKIP_INTERVAL = "growSkipInterval"; - - - protected Linguist linguist; // Provides grammar/language info - private Pruner pruner; // used to prune the active list - private AcousticScorer scorer; // used to score the active list - protected int currentFrameNumber; // the current frame number - protected long currentCollectTime; // the current frame number - protected ActiveList activeList; // the list of active tokens - protected List resultList; // the current set of results - protected LogMath logMath; - - private Logger logger; - private String name; - - // ------------------------------------ - // monitoring data - // ------------------------------------ - - private Timer scoreTimer; // TODO move these timers out - private Timer pruneTimer; - protected Timer growTimer; - private StatisticsVariable totalTokensScored; - private StatisticsVariable tokensPerSecond; - private StatisticsVariable curTokensScored; - private StatisticsVariable tokensCreated; - private StatisticsVariable viterbiPruned; - private StatisticsVariable beamPruned; - - // ------------------------------------ - // Working data - // ------------------------------------ - - protected boolean showTokenCount; - private boolean wantEntryPruning; - protected Map bestTokenMap; - private float logRelativeWordBeamWidth; - private int totalHmms; - private double startTime; - private float threshold; - private float wordThreshold; - private int growSkipInterval; - protected ActiveListFactory activeListFactory; - protected boolean streamEnd; - - public SimpleBreadthFirstSearchManager() { - - } - - /** - * Creates a manager for simple search - * - * @param linguist linguist to configure search space - * @param pruner pruner to prune extra paths - * @param scorer scorer to estimate token probability - * @param activeListFactory factory for list of tokens - * @param showTokenCount show count of the tokens during decoding - * @param relativeWordBeamWidth relative pruning beam for lookahead - * @param growSkipInterval interval to skip growth step - * @param wantEntryPruning entry pruning - */ - public SimpleBreadthFirstSearchManager(Linguist linguist, Pruner pruner, - AcousticScorer scorer, ActiveListFactory activeListFactory, - boolean showTokenCount, double relativeWordBeamWidth, - int growSkipInterval, boolean wantEntryPruning) { - this.name = getClass().getName(); - this.logger = Logger.getLogger(name); - this.logMath = LogMath.getLogMath(); - this.linguist = linguist; - this.pruner = pruner; - this.scorer = scorer; - this.activeListFactory = activeListFactory; - this.showTokenCount = showTokenCount; - this.growSkipInterval = growSkipInterval; - this.wantEntryPruning = wantEntryPruning; - this.logRelativeWordBeamWidth = logMath.linearToLog(relativeWordBeamWidth); - this.keepAllTokens = true; - } - - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - - logMath = LogMath.getLogMath(); - logger = ps.getLogger(); - name = ps.getInstanceName(); - - linguist = (Linguist) ps.getComponent(PROP_LINGUIST); - pruner = (Pruner) ps.getComponent(PROP_PRUNER); - scorer = (AcousticScorer) ps.getComponent(PROP_SCORER); - activeListFactory = (ActiveListFactory) ps.getComponent(PROP_ACTIVE_LIST_FACTORY); - showTokenCount = ps.getBoolean(PROP_SHOW_TOKEN_COUNT); - - double relativeWordBeamWidth = ps.getDouble(PROP_RELATIVE_WORD_BEAM_WIDTH); - growSkipInterval = ps.getInt(PROP_GROW_SKIP_INTERVAL); - wantEntryPruning = ps.getBoolean(PROP_WANT_ENTRY_PRUNING); - logRelativeWordBeamWidth = logMath.linearToLog(relativeWordBeamWidth); - - this.keepAllTokens = true; - } - - - /** Called at the start of recognition. Gets the search manager ready to recognize */ - public void startRecognition() { - logger.finer("starting recognition"); - - linguist.startRecognition(); - pruner.startRecognition(); - scorer.startRecognition(); - localStart(); - if (startTime == 0.0) { - startTime = System.currentTimeMillis(); - } - } - - - /** - * Performs the recognition for the given number of frames. - * - * @param nFrames the number of frames to recognize - * @return the current result or null if there is no Result (due to the lack of frames to recognize) - */ - public Result recognize(int nFrames) { - boolean done = false; - Result result = null; - streamEnd = false; - - for (int i = 0; i < nFrames && !done; i++) { - done = recognize(); - } - - // generate a new temporary result if the current token is based on a final search state - // remark: the first check for not null is necessary in cases that the search space does not contain scoreable tokens. - if (activeList.getBestToken() != null) { - // to make the current result as correct as possible we undo the last search graph expansion here - ActiveList fixedList = undoLastGrowStep(); - - // Now create the result using the fixed active-list. - if (!streamEnd) - result = - new Result(fixedList, resultList, currentFrameNumber, done, linguist.getSearchGraph().getWordTokenFirst(), false); - } - - if (showTokenCount) { - showTokenCount(); - } - - return result; - } - - - /** - * Because the growBranches() is called although no data is left after the last speech frame, the ordering of the - * active-list might depend on the transition probabilities and (penalty-scores) only. Therefore we need to undo the last - * grow-step up to final states or the last emitting state in order to fix the list. - * @return newly created list - */ - protected ActiveList undoLastGrowStep() { - ActiveList fixedList = activeList.newInstance(); - - for (Token token : activeList) { - Token curToken = token.getPredecessor(); - - // remove the final states that are not the real final ones because they're just hide prior final tokens: - while (curToken.getPredecessor() != null && ( - (curToken.isFinal() && curToken.getPredecessor() != null && !curToken.getPredecessor().isFinal()) - || (curToken.isEmitting() && curToken.getData() == null) // the so long not scored tokens - || (!curToken.isFinal() && !curToken.isEmitting()))) { - curToken = curToken.getPredecessor(); - } - - fixedList.add(curToken); - } - - return fixedList; - } - - - /** Terminates a recognition */ - public void stopRecognition() { - localStop(); - scorer.stopRecognition(); - pruner.stopRecognition(); - linguist.stopRecognition(); - - logger.finer("recognition stopped"); - } - - - /** - * Performs recognition for one frame. Returns true if recognition has been completed. - * - * @return true if recognition is completed. - */ - protected boolean recognize() { - boolean more = scoreTokens(); // score emitting tokens - if (more) { - pruneBranches(); // eliminate poor branches - currentFrameNumber++; - if (growSkipInterval == 0 - || (currentFrameNumber % growSkipInterval) != 0) { - growBranches(); // extend remaining branches - } - } - return !more; - } - - - /** Gets the initial grammar node from the linguist and creates a GrammarNodeToken */ - protected void localStart() { - currentFrameNumber = 0; - curTokensScored.value = 0; - ActiveList newActiveList = activeListFactory.newInstance(); - SearchState state = linguist.getSearchGraph().getInitialState(); - newActiveList.add(new Token(state, -1)); - activeList = newActiveList; - - growBranches(); - } - - - /** Local cleanup for this search manager */ - protected void localStop() { - } - - - /** - * Goes through the active list of tokens and expands each token, finding the set of successor tokens until all the - * successor tokens are emitting tokens. - */ - protected void growBranches() { - int mapSize = activeList.size() * 10; - if (mapSize == 0) { - mapSize = 1; - } - growTimer.start(); - bestTokenMap = new HashMap(mapSize); - ActiveList oldActiveList = activeList; - resultList = new LinkedList(); - activeList = activeListFactory.newInstance(); - threshold = oldActiveList.getBeamThreshold(); - wordThreshold = oldActiveList.getBestScore() + logRelativeWordBeamWidth; - - for (Token token : oldActiveList) { - collectSuccessorTokens(token); - } - growTimer.stop(); - if (logger.isLoggable(Level.FINE)) { - int hmms = activeList.size(); - totalHmms += hmms; - logger.fine("Frame: " + currentFrameNumber + " Hmms: " - + hmms + " total " + totalHmms); - } - } - - - /** - * Calculate the acoustic scores for the active list. The active list should contain only emitting tokens. - * - * @return true if there are more frames to score, otherwise, false - */ - protected boolean scoreTokens() { - boolean hasMoreFrames = false; - - scoreTimer.start(); - Data data = scorer.calculateScores(activeList.getTokens()); - scoreTimer.stop(); - - Token bestToken = null; - if (data instanceof Token) { - bestToken = (Token)data; - } else if (data == null) { - streamEnd = true; - } - - if (bestToken != null) { - hasMoreFrames = true; - currentCollectTime = bestToken.getCollectTime(); - activeList.setBestToken(bestToken); - } - - // update statistics - curTokensScored.value += activeList.size(); - totalTokensScored.value += activeList.size(); - tokensPerSecond.value = totalTokensScored.value / getTotalTime(); - -// if (logger.isLoggable(Level.FINE)) { -// logger.fine(currentFrameNumber + " " + activeList.size() -// + " " + curTokensScored.value + " " -// + (int) tokensPerSecond.value); -// } - - return hasMoreFrames; - } - - - /** - * Returns the total time since we start4ed - * - * @return the total time (in seconds) - */ - private double getTotalTime() { - return (System.currentTimeMillis() - startTime) / 1000.0; - } - - - /** Removes unpromising branches from the active list */ - protected void pruneBranches() { - int startSize = activeList.size(); - pruneTimer.start(); - activeList = pruner.prune(activeList); - beamPruned.value += startSize - activeList.size(); - pruneTimer.stop(); - } - - - /** - * Gets the best token for this state - * - * @param state the state of interest - * @return the best token - */ - protected Token getBestToken(SearchState state) { - Token best = bestTokenMap.get(state); - if (logger.isLoggable(Level.FINER) && best != null) { - logger.finer("BT " + best + " for state " + state); - } - return best; - } - - - /** - * Sets the best token for a given state - * - * @param token the best token - * @param state the state - * @return the previous best token for the given state, or null if no previous best token - */ - protected Token setBestToken(Token token, SearchState state) { - return bestTokenMap.put(state, token); - } - - - public ActiveList getActiveList() { - return activeList; - } - - - /** - * Collects the next set of emitting tokens from a token and accumulates them in the active or result lists - * - * @param token the token to collect successors from - */ - protected void collectSuccessorTokens(Token token) { - SearchState state = token.getSearchState(); - // If this is a final state, add it to the final list - if (token.isFinal()) { - resultList.add(token); - } - if (token.getScore() < threshold) { - return; - } - if (state instanceof WordSearchState - && token.getScore() < wordThreshold) { - return; - } - SearchStateArc[] arcs = state.getSuccessors(); - // For each successor - // calculate the entry score for the token based upon the - // predecessor token score and the transition probabilities - // if the score is better than the best score encountered for - // the SearchState and frame then create a new token, add - // it to the lattice and the SearchState. - // If the token is an emitting token add it to the list, - // otherwise recursively collect the new tokens successors. - for (SearchStateArc arc : arcs) { - SearchState nextState = arc.getState(); - // We're actually multiplying the variables, but since - // these come in log(), multiply gets converted to add - float logEntryScore = token.getScore() + arc.getProbability(); - if (wantEntryPruning) { // false by default - if (logEntryScore < threshold) { - continue; - } - if (nextState instanceof WordSearchState - && logEntryScore < wordThreshold) { - continue; - } - } - Token predecessor = getResultListPredecessor(token); - - // if not emitting, check to see if we've already visited - // this state during this frame. Expand the token only if we - // haven't visited it already. This prevents the search - // from getting stuck in a loop of states with no - // intervening emitting nodes. This can happen with nasty - // jsgf grammars such as ((foo*)*)* - if (!nextState.isEmitting()) { - Token newToken = new Token(predecessor, nextState, logEntryScore, - arc.getInsertionProbability(), - arc.getLanguageProbability(), - currentCollectTime); - tokensCreated.value++; - if (!isVisited(newToken)) { - collectSuccessorTokens(newToken); - } - continue; - } - - Token bestToken = getBestToken(nextState); - if (bestToken == null) { - Token newToken = new Token(predecessor, nextState, logEntryScore, - arc.getInsertionProbability(), - arc.getLanguageProbability(), - currentFrameNumber); - tokensCreated.value++; - setBestToken(newToken, nextState); - activeList.add(newToken); - } else { - if (bestToken.getScore() <= logEntryScore) { - bestToken.update(predecessor, nextState, logEntryScore, - arc.getInsertionProbability(), - arc.getLanguageProbability(), - currentCollectTime); - viterbiPruned.value++; - } else { - viterbiPruned.value++; - } - } - } - } - - - /** - * Determines whether or not we've visited the state associated with this token since the previous frame. - * - * @param t the token to check - * @return true if we've visited the search state since the last frame - */ - private boolean isVisited(Token t) { - SearchState curState = t.getSearchState(); - - t = t.getPredecessor(); - - while (t != null && !t.isEmitting()) { - if (curState.equals(t.getSearchState())) { - return true; - } - t = t.getPredecessor(); - } - return false; - } - - - /** Counts all the tokens in the active list (and displays them). This is an expensive operation. */ - protected void showTokenCount() { - if (logger.isLoggable(Level.INFO)) { - Set tokenSet = new HashSet(); - for (Token token : activeList) { - while (token != null) { - tokenSet.add(token); - token = token.getPredecessor(); - } - } - logger.info("Token Lattice size: " + tokenSet.size()); - tokenSet = new HashSet(); - for (Token token : resultList) { - while (token != null) { - tokenSet.add(token); - token = token.getPredecessor(); - } - } - logger.info("Result Lattice size: " + tokenSet.size()); - } - } - - - /** - * Returns the best token map. - * - * @return the best token map - */ - protected Map getBestTokenMap() { - return bestTokenMap; - } - - - /** - * Sets the best token Map. - * - * @param bestTokenMap the new best token Map - */ - protected void setBestTokenMap(Map bestTokenMap) { - this.bestTokenMap = bestTokenMap; - } - - - /** - * Returns the result list. - * - * @return the result list - */ - public List getResultList() { - return resultList; - } - - - /** - * Returns the current frame number. - * - * @return the current frame number - */ - public int getCurrentFrameNumber() { - return currentFrameNumber; - } - - - /** - * Returns the Timer for growing. - * - * @return the Timer for growing - */ - public Timer getGrowTimer() { - return growTimer; - } - - - /** - * Returns the tokensCreated StatisticsVariable. - * - * @return the tokensCreated StatisticsVariable. - */ - public StatisticsVariable getTokensCreated() { - return tokensCreated; - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.decoder.search.SearchManager#allocate() - */ - public void allocate() { - totalTokensScored = StatisticsVariable - .getStatisticsVariable("totalTokensScored"); - tokensPerSecond = StatisticsVariable - .getStatisticsVariable("tokensScoredPerSecond"); - curTokensScored = StatisticsVariable - .getStatisticsVariable("curTokensScored"); - tokensCreated = StatisticsVariable - .getStatisticsVariable("tokensCreated"); - viterbiPruned = StatisticsVariable - .getStatisticsVariable("viterbiPruned"); - beamPruned = StatisticsVariable.getStatisticsVariable("beamPruned"); - - - try { - linguist.allocate(); - pruner.allocate(); - scorer.allocate(); - } catch (IOException e) { - throw new RuntimeException("Allocation of search manager resources failed", e); - } - - scoreTimer = TimerPool.getTimer(this, "Score"); - pruneTimer = TimerPool.getTimer(this, "Prune"); - growTimer = TimerPool.getTimer(this, "Grow"); - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.decoder.search.SearchManager#deallocate() - */ - public void deallocate() { - try { - scorer.deallocate(); - pruner.deallocate(); - linguist.deallocate(); - } catch (IOException e) { - throw new RuntimeException("Deallocation of search manager resources failed", e); - } - } - - - @Override - public String toString() { - return name; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/SkewPruningSearchManager.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/SkewPruningSearchManager.java deleted file mode 100755 index e69de29b..00000000 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/SortingActiveListFactory.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/SortingActiveListFactory.java deleted file mode 100755 index 762475f9..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/SortingActiveListFactory.java +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.decoder.search; - -import edu.cmu.sphinx.decoder.scorer.Scoreable; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; - -/** - * @author plamere - */ -public class SortingActiveListFactory extends ActiveListFactory { - /** - * @param absoluteBeamWidth absolute pruning beam - * @param relativeBeamWidth relative pruning beam - */ - public SortingActiveListFactory(int absoluteBeamWidth, - double relativeBeamWidth) - { - super(absoluteBeamWidth, relativeBeamWidth); - } - - public SortingActiveListFactory() { - - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.decoder.search.ActiveListFactory#newInstance() - */ - @Override - public ActiveList newInstance() { - return new SortingActiveList(absoluteBeamWidth, logRelativeBeamWidth); - } - - - /** - * An active list that tries to be simple and correct. This type of active list will be slow, but should exhibit - * correct behavior. Faster versions of the ActiveList exist (HeapActiveList, TreeActiveList). - *

    - * This class is not thread safe and should only be used by a single thread. - *

    - * Note that all scores are maintained in the LogMath log base. - */ - - class SortingActiveList implements ActiveList { - - private final static int DEFAULT_SIZE = 1000; - private final int absoluteBeamWidth; - private final float logRelativeBeamWidth; - private Token bestToken; - // when the list is changed these things should be - // changed/updated as well - private List tokenList; - - - /** - * Creates an empty active list - * - * @param absoluteBeamWidth beam for absolute pruning - * @param logRelativeBeamWidth beam for relative pruning - */ - public SortingActiveList(int absoluteBeamWidth, float logRelativeBeamWidth) { - this.absoluteBeamWidth = absoluteBeamWidth; - this.logRelativeBeamWidth = logRelativeBeamWidth; - - int initListSize = absoluteBeamWidth > 0 ? absoluteBeamWidth : DEFAULT_SIZE; - this.tokenList = new ArrayList(initListSize); - } - - - /** - * Adds the given token to the list - * - * @param token the token to add - */ - public void add(Token token) { - tokenList.add(token); - if (bestToken == null || token.getScore() > bestToken.getScore()) { - bestToken = token; - } - } - - /** - * Purges excess members. Reduce the size of the token list to the absoluteBeamWidth - * - * @return a (possible new) active list - */ - public ActiveList purge() { - // if the absolute beam is zero, this means there - // should be no constraint on the abs beam size at all - // so we will only be relative beam pruning, which means - // that we don't have to sort the list - if (absoluteBeamWidth > 0 && tokenList.size() > absoluteBeamWidth) { - Collections.sort(tokenList, Scoreable.COMPARATOR); - tokenList = tokenList.subList(0, absoluteBeamWidth); - } - return this; - } - - - /** - * gets the beam threshold best upon the best scoring token - * - * @return the beam threshold - */ - public float getBeamThreshold() { - return getBestScore() + logRelativeBeamWidth; - } - - - /** - * gets the best score in the list - * - * @return the best score - */ - public float getBestScore() { - float bestScore = -Float.MAX_VALUE; - if (bestToken != null) { - bestScore = bestToken.getScore(); - } - return bestScore; - } - - - /** - * Sets the best scoring token for this active list - * - * @param token the best scoring token - */ - public void setBestToken(Token token) { - bestToken = token; - } - - - /** - * Gets the best scoring token for this active list - * - * @return the best scoring token - */ - public Token getBestToken() { - return bestToken; - } - - - /** - * Retrieves the iterator for this tree. - * - * @return the iterator for this token list - */ - public Iterator iterator() { - return tokenList.iterator(); - } - - - /** - * Gets the list of all tokens - * - * @return the list of tokens - */ - public List getTokens() { - return tokenList; - } - - /** - * Returns the number of tokens on this active list - * - * @return the size of the active list - */ - public final int size() { - return tokenList.size(); - } - - - /* (non-Javadoc) - * @see edu.cmu.sphinx.decoder.search.ActiveList#newInstance() - */ - public ActiveList newInstance() { - return SortingActiveListFactory.this.newInstance(); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/Token.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/Token.java deleted file mode 100755 index 116cdf5a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/Token.java +++ /dev/null @@ -1,477 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.decoder.search; - -import edu.cmu.sphinx.decoder.scorer.Scoreable; -import edu.cmu.sphinx.decoder.scorer.ScoreProvider; -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.frontend.FloatData; -import edu.cmu.sphinx.linguist.HMMSearchState; -import edu.cmu.sphinx.linguist.SearchState; -import edu.cmu.sphinx.linguist.UnitSearchState; -import edu.cmu.sphinx.linguist.WordSearchState; -import edu.cmu.sphinx.linguist.acoustic.Unit; -import edu.cmu.sphinx.linguist.dictionary.Pronunciation; -import edu.cmu.sphinx.linguist.dictionary.Word; - -import java.text.DecimalFormat; -import java.util.*; - -/** - * Represents a single state in the recognition trellis. Subclasses of a token are used to represent the various - * emitting state. - *

    - * All scores are maintained in LogMath log base - */ -public class Token implements Scoreable { - - private static int curCount; - private static int lastCount; - private static final DecimalFormat scoreFmt = new DecimalFormat("0.0000000E00"); - private static final DecimalFormat numFmt = new DecimalFormat("0000"); - - private Token predecessor; - - private float logLanguageScore; - private float logTotalScore; - private float logInsertionScore; - private float logAcousticScore; - - private SearchState searchState; - - private long collectTime; - private Data data; - - /** - * Internal constructor for a token. Used by classes Token, CombineToken, ParallelToken - * - * @param predecessor the predecessor for this token - * @param state the SentenceHMMState associated with this token - * @param logTotalScore the total entry score for this token (in LogMath log base) - * @param logInsertionScore the insertion score associated with this token (in LogMath log base) - * @param logLanguageScore the language score associated with this token (in LogMath log base) - * @param collectTime the frame collection time - */ - public Token(Token predecessor, - SearchState state, - float logTotalScore, - float logInsertionScore, - float logLanguageScore, - long collectTime) { - this.predecessor = predecessor; - this.searchState = state; - this.logTotalScore = logTotalScore; - this.logInsertionScore = logInsertionScore; - this.logLanguageScore = logLanguageScore; - this.collectTime = collectTime; - curCount++; - } - - - /** - * Creates the initial token with the given word history depth - * - * @param state the SearchState associated with this token - * @param collectTime collection time of this token - */ - public Token(SearchState state, long collectTime) { - this(null, state, 0.0f, 0.0f, 0.0f, collectTime); - } - - - /** - * Creates a Token with the given acoustic and language scores and predecessor. - * - * @param predecessor previous token - * @param logTotalScore total score - * @param logAcousticScore the log acoustic score - * @param logInsertionScore the log insertion score - * @param logLanguageScore the log language score - */ - public Token(Token predecessor, - float logTotalScore, - float logAcousticScore, - float logInsertionScore, - float logLanguageScore) { - this(predecessor, null, logTotalScore, logInsertionScore, logLanguageScore, 0); - this.logAcousticScore = logAcousticScore; - } - - - /** - * Returns the predecessor for this token, or null if this token has no predecessors - * - * @return the predecessor - */ - public Token getPredecessor() { - return predecessor; - } - - - /** - * Collect time is different from frame number because some frames might be skipped in silence detector - * - * @return collection time in milliseconds - */ - public long getCollectTime() { - return collectTime; - } - - - /** Sets the feature for this Token. - * @param data features - */ - public void setData(Data data) { - this.data = data; - if (data instanceof FloatData) { - collectTime = ((FloatData)data).getCollectTime(); - } - } - - - /** - * Returns the feature for this Token. - * - * @return the feature for this Token - */ - public Data getData() { - return data; - } - - - /** - * Returns the score for the token. The score is a combination of language and acoustic scores - * - * @return the score of this frame (in logMath log base) - */ - public float getScore() { - return logTotalScore; - } - - - /** - * Calculates a score against the given feature. The score can be retrieved - * with get score. The token will keep a reference to the scored feature-vector. - * - * @param feature the feature to be scored - * @return the score for the feature - */ - public float calculateScore(Data feature) { - - logAcousticScore = ((ScoreProvider) searchState).getScore(feature); - - logTotalScore += logAcousticScore; - - setData(feature); - - return logTotalScore; - } - - public float[] calculateComponentScore(Data feature){ - return ((ScoreProvider) searchState).getComponentScore(feature); - } - - - /** - * Normalizes a previously calculated score - * - * @param maxLogScore the score to normalize this score with - * @return the normalized score - */ - public float normalizeScore(float maxLogScore) { - logTotalScore -= maxLogScore; - logAcousticScore -= maxLogScore; - return logTotalScore; - } - - /** - * Sets the score for this token - * - * @param logScore the new score for the token (in logMath log base) - */ - public void setScore(float logScore) { - this.logTotalScore = logScore; - } - - - /** - * Returns the language score associated with this token - * - * @return the language score (in logMath log base) - */ - public float getLanguageScore() { - return logLanguageScore; - } - - /** - * Returns the insertion score associated with this token. - * Insertion score is the score of the transition between - * states. It might be transition score from the acoustic model, - * phone insertion score or word insertion probability from - * the linguist. - * - * @return the language score (in logMath log base) - */ - public float getInsertionScore() { - return logInsertionScore; - } - - - /** - * Returns the acoustic score for this token (in logMath log base). - * Acoustic score is a sum of frame GMM. - * - * @return score - */ - public float getAcousticScore() { - return logAcousticScore; - } - - - /** - * Returns the SearchState associated with this token - * - * @return the searchState - */ - public SearchState getSearchState() { - return searchState; - } - - - /** - * Determines if this token is associated with an emitting state. An emitting state is a state that can be scored - * acoustically. - * - * @return true if this token is associated with an emitting state - */ - public boolean isEmitting() { - return searchState.isEmitting(); - } - - - /** - * Determines if this token is associated with a final SentenceHMM state. - * - * @return true if this token is associated with a final state - */ - public boolean isFinal() { - return searchState.isFinal(); - } - - - /** - * Determines if this token marks the end of a word - * - * @return true if this token marks the end of a word - */ - public boolean isWord() { - return searchState instanceof WordSearchState; - } - - - /** - * Retrieves the string representation of this object - * - * @return the string representation of this object - */ - @Override - public String toString() { - return - numFmt.format(getCollectTime()) + ' ' + - scoreFmt.format(getScore()) + ' ' + - scoreFmt.format(getAcousticScore()) + ' ' + - scoreFmt.format(getLanguageScore()) + ' ' + - getSearchState(); - } - - - /** dumps a branch of tokens */ - public void dumpTokenPath() { - dumpTokenPath(true); - } - - - /** - * dumps a branch of tokens - * - * @param includeHMMStates if true include all sentence hmm states - */ - public void dumpTokenPath(boolean includeHMMStates) { - Token token = this; - List list = new ArrayList(); - - while (token != null) { - list.add(token); - token = token.getPredecessor(); - } - for (int i = list.size() - 1; i >= 0; i--) { - token = list.get(i); - if (includeHMMStates || - (!(token.getSearchState() instanceof HMMSearchState))) { - System.out.println(" " + token); - } - } - System.out.println(); - } - - - /** - * Returns the string of words leading up to this token. - * - * @param wantFiller if true, filler words are added - * @param wantPronunciations if true append [ phoneme phoneme ... ] after each word - * @return the word path - */ - public String getWordPath(boolean wantFiller, boolean wantPronunciations) { - StringBuilder sb = new StringBuilder(); - Token token = this; - - while (token != null) { - if (token.isWord()) { - WordSearchState wordState = - (WordSearchState) token.getSearchState(); - Pronunciation pron = wordState.getPronunciation(); - Word word = wordState.getPronunciation().getWord(); - -// System.out.println(token.getFrameNumber() + " " + word + " " + token.logLanguageScore + " " + token.logAcousticScore); - - if (wantFiller || !word.isFiller()) { - if (wantPronunciations) { - sb.insert(0, ']'); - Unit[] u = pron.getUnits(); - for (int i = u.length - 1; i >= 0; i--) { - if (i < u.length - 1) sb.insert(0, ','); - sb.insert(0, u[i].getName()); - } - sb.insert(0, '['); - } - sb.insert(0, word.getSpelling()); - sb.insert(0, ' '); - } - } - token = token.getPredecessor(); - } - return sb.toString().trim(); - } - - - /** - * Returns the string of words for this token, with no embedded filler words - * - * @return the string of words - */ - public String getWordPathNoFiller() { - return getWordPath(false, false); - } - - - /** - * Returns the string of words for this token, with embedded silences - * - * @return the string of words - */ - public String getWordPath() { - return getWordPath(true, false); - } - - - /** - * Returns the string of words and units for this token, with embedded silences. - * - * @return the string of words and units - */ - public String getWordUnitPath() { - StringBuilder sb = new StringBuilder(); - Token token = this; - - while (token != null) { - SearchState searchState = token.getSearchState(); - if (searchState instanceof WordSearchState) { - WordSearchState wordState = (WordSearchState) searchState; - Word word = wordState.getPronunciation().getWord(); - sb.insert(0, ' ' + word.getSpelling()); - } else if (searchState instanceof UnitSearchState) { - UnitSearchState unitState = (UnitSearchState) searchState; - Unit unit = unitState.getUnit(); - sb.insert(0, ' ' + unit.getName()); - } - token = token.getPredecessor(); - } - return sb.toString().trim(); - } - - - /** - * Returns the word of this Token, the search state is a WordSearchState. If the search state is not a - * WordSearchState, return null. - * - * @return the word of this Token, or null if this is not a word token - */ - public Word getWord() { - if (isWord()) { - WordSearchState wordState = (WordSearchState) searchState; - return wordState.getPronunciation().getWord(); - } else { - return null; - } - } - - - /** Shows the token count */ - public static void showCount() { - System.out.println("Cur count: " + curCount + " new " + - (curCount - lastCount)); - lastCount = curCount; - } - - - /** - * Determines if this branch is valid - * - * @return true if the token and its predecessors are valid - */ - public boolean validate() { - return true; - } - - - /** - * Return the DecimalFormat object for formatting the print out of scores. - * - * @return the DecimalFormat object for formatting score print outs - */ - protected static DecimalFormat getScoreFormat() { - return scoreFmt; - } - - - /** - * Return the DecimalFormat object for formatting the print out of numbers - * - * @return the DecimalFormat object for formatting number print outs - */ - protected static DecimalFormat getNumberFormat() { - return numFmt; - } - - public void update(Token predecessor, SearchState nextState, - float logEntryScore, float insertionProbability, - float languageProbability, long collectTime) { - this.predecessor = predecessor; - this.searchState = nextState; - this.logTotalScore = logEntryScore; - this.logInsertionScore = insertionProbability; - this.logLanguageScore = languageProbability; - this.collectTime = collectTime; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/TokenHeapSearchManager.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/TokenHeapSearchManager.java deleted file mode 100755 index 8dd20307..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/TokenHeapSearchManager.java +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.decoder.search; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; - -import edu.cmu.sphinx.decoder.scorer.Scoreable; -import edu.cmu.sphinx.linguist.SearchState; -/** - * The token heap search manager that maintains the heap of best tokens for each - * search state instead of single one best token - * - */ -public class TokenHeapSearchManager extends WordPruningBreadthFirstSearchManager { - - protected final int maxTokenHeapSize = 3; - - Map bestTokenMap; - - @Override - protected void createBestTokenMap() { - int mapSize = activeList.size() << 2; - if (mapSize == 0) { - mapSize = 1; - } - bestTokenMap = new HashMap(mapSize, 0.3F); - } - - @Override - protected void setBestToken(Token token, SearchState state) { - TokenHeap th = bestTokenMap.get(state); - if (th == null) { - th = new TokenHeap(maxTokenHeapSize); - bestTokenMap.put(state, th); - } - th.add(token); - } - - @Override - protected Token getBestToken(SearchState state) { - // new way... if the heap for this state isn't full return - // null, otherwise return the worst scoring token - TokenHeap th = bestTokenMap.get(state); - Token t; - - if (th == null) { - return null; - } else if ((t = th.get(state)) != null) { - return t; - } else if (!th.isFull()) { - return null; - } else { - return th.getSmallest(); - } - } - - /** - * A quick and dirty token heap that allows us to perform token stack - * experiments. It is not very efficient. We will likely replace this with - * something better once we figure out how we want to prune things. - */ - - class TokenHeap { - - final Token[] tokens; - int curSize; - - /** - * Creates a token heap with the maximum size - * - * @param maxSize - * the maximum size of the heap - */ - TokenHeap(int maxSize) { - tokens = new Token[maxSize]; - } - - /** - * Adds a token to the heap - * - * @param token - * the token to add - */ - void add(Token token) { - // first, if an identical state exists, replace - // it. - - if (!tryReplace(token)) { - if (curSize < tokens.length) { - tokens[curSize++] = token; - } else if (token.getScore() > tokens[curSize - 1].getScore()) { - tokens[curSize - 1] = token; - } - } - fixupInsert(); - } - - /** - * Returns the smallest scoring token on the heap - * - * @return the smallest scoring token - */ - Token getSmallest() { - if (curSize == 0) { - return null; - } else { - return tokens[curSize - 1]; - } - } - - /** - * Determines if the heap is full - * - * @return true if the heap is full - */ - boolean isFull() { - return curSize == tokens.length; - } - - /** - * Checks to see if there is already a token t on the heap that has the - * same search state. If so, this token replaces that one - * - * @param t - * the token to try to add to the heap - * @return true if the token was added - */ - private boolean tryReplace(Token t) { - for (int i = 0; i < curSize; i++) { - if (t.getSearchState().equals(tokens[i].getSearchState())) { - assert t.getScore() > tokens[i].getScore(); - tokens[i] = t; - return true; - } - } - return false; - } - - /** Orders the heap after an insert */ - private void fixupInsert() { - Arrays.sort(tokens, 0, curSize - 1, Scoreable.COMPARATOR); - } - - /** - * returns a token on the heap that matches the given search state - * - * @param s - * the search state - * @return the token that matches, or null - */ - Token get(SearchState s) { - for (int i = 0; i < curSize; i++) { - if (tokens[i].getSearchState().equals(s)) { - return tokens[i]; - } - } - return null; - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/TokenSearchManager.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/TokenSearchManager.java deleted file mode 100755 index 458dc855..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/TokenSearchManager.java +++ /dev/null @@ -1,86 +0,0 @@ -package edu.cmu.sphinx.decoder.search; - -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Boolean; - -abstract public class TokenSearchManager implements SearchManager { - - /** The property that specifies whether to build a word lattice. */ - @S4Boolean(defaultValue = true) - public final static String PROP_BUILD_WORD_LATTICE = "buildWordLattice"; - - /** - * The property that controls whether or not we keep all tokens. If this is - * set to false, only word tokens are retained, otherwise all tokens are - * retained. - */ - @S4Boolean(defaultValue = false) - public final static String PROP_KEEP_ALL_TOKENS = "keepAllTokens"; - - protected boolean buildWordLattice; - protected boolean keepAllTokens; - - /* - * (non-Javadoc) - * - * @see - * edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util - * .props.PropertySheet) - */ - public void newProperties(PropertySheet ps) throws PropertyException { - buildWordLattice = ps.getBoolean(PROP_BUILD_WORD_LATTICE); - keepAllTokens = ps.getBoolean(PROP_KEEP_ALL_TOKENS); - } - - /** - * Find the token to use as a predecessor in resultList given a candidate - * predecessor. There are three cases here: - * - *

      - *
    • We want to store everything in resultList. In that case - * {@link #keepAllTokens} is set to true and we just store everything that - * was built before. - *
    • We are only interested in sequence of words. In this case we just - * keep word tokens and ignore everything else. In this case timing and - * scoring information is lost since we keep scores in emitting tokens. - *
    • We want to keep words but we want to keep scores to build a lattice - * from the result list later and {@link #buildWordLattice} is set to true. - * In this case we want to insert intermediate token to store the score and - * this token will be used during lattice path collapse to get score on - * edge. See {@link edu.cmu.sphinx.result.Lattice} for details of resultList - * compression. - *
    - * - * @param token - * the token of interest - * @return the immediate successor word token - */ - protected Token getResultListPredecessor(Token token) { - - if (keepAllTokens) { - return token; - } - - if(!buildWordLattice) { - if (token.isWord()) - return token; - else - return token.getPredecessor(); - } - - float logAcousticScore = 0.0f; - float logLanguageScore = 0.0f; - float logInsertionScore = 0.0f; - - while (token != null && !token.isWord()) { - logAcousticScore += token.getAcousticScore(); - logLanguageScore += token.getLanguageScore(); - logInsertionScore += token.getInsertionScore(); - token = token.getPredecessor(); - } - - return new Token(token, token.getScore(), logInsertionScore, logAcousticScore, logLanguageScore); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/WordActiveListFactory.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/WordActiveListFactory.java deleted file mode 100755 index 5d94a789..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/WordActiveListFactory.java +++ /dev/null @@ -1,259 +0,0 @@ -/* - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electronic Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.decoder.search; - -import edu.cmu.sphinx.decoder.scorer.Scoreable; -import edu.cmu.sphinx.linguist.WordSearchState; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Integer; - -import java.util.*; - -/** - * A factory for WordActiveList. The word active list is active list designed to hold word tokens only. In addition to - * the usual active list properties such as absolute and relative beams, the word active list allows restricting the - * number of copies of any particular word in the word beam. Also the word active list can restrict the number of - * fillers in the beam. - */ -public class WordActiveListFactory extends ActiveListFactory { - - /** property that sets the max paths for a single word. (zero disables this feature) */ - @S4Integer(defaultValue = 0) - public final static String PROP_MAX_PATHS_PER_WORD = "maxPathsPerWord"; - - /** property that sets the max filler words allowed in the beam. (zero disables this feature) */ - @S4Integer(defaultValue = 1) - public final static String PROP_MAX_FILLER_WORDS = "maxFillerWords"; - - private int maxPathsPerWord; - private int maxFiller; - - /** - * Create factory for word active list - * @param absoluteBeamWidth beam for absolute pruning - * @param relativeBeamWidth beam for relative pruning - * @param maxPathsPerWord maximum number of path to keep per word - * @param maxFiller maximum number of fillers - */ - public WordActiveListFactory(int absoluteBeamWidth, - double relativeBeamWidth, int maxPathsPerWord, int maxFiller ) - { - super(absoluteBeamWidth, relativeBeamWidth); - this.maxPathsPerWord = maxPathsPerWord; - this.maxFiller = maxFiller; - } - - public WordActiveListFactory() { - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - - maxPathsPerWord = ps.getInt(PROP_MAX_PATHS_PER_WORD); - maxFiller = ps.getInt(PROP_MAX_FILLER_WORDS); - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.decoder.search.ActiveListFactory#newInstance() - */ - @Override - public ActiveList newInstance() { - return new WordActiveList(); - } - - - /** - * An active list that manages words. Guarantees only one version of a word. - *

    - *

    - * Note that all scores are maintained in the LogMath log domain - */ - class WordActiveList implements ActiveList { - - private Token bestToken; - private List tokenList = new LinkedList(); - - - /** - * Adds the given token to the list - * - * @param token the token to add - */ - public void add(Token token) { - tokenList.add(token); - if (bestToken == null || token.getScore() > bestToken.getScore()) { - bestToken = token; - } - } - - - /** - * Replaces an old token with a new token - * - * @param oldToken the token to replace (or null in which case, replace works like add). - * @param newToken the new token to be placed in the list. - */ - public void replace(Token oldToken, Token newToken) { - add(newToken); - if (oldToken != null) { - tokenList.remove(oldToken); - } - } - - - /** - * Purges excess members. Remove all nodes that fall below the relativeBeamWidth - * - * @return a (possible new) active list - */ - - public ActiveList purge() { - int fillerCount = 0; - Map countMap = new HashMap(); - Collections.sort(tokenList, Scoreable.COMPARATOR); - // remove word duplicates - for (Iterator i = tokenList.iterator(); i.hasNext();) { - Token token = i.next(); - WordSearchState wordState = (WordSearchState)token.getSearchState(); - - Word word = wordState.getPronunciation().getWord(); - - // only allow maxFiller words - if (maxFiller > 0) { - if (word.isFiller()) { - if (fillerCount < maxFiller) { - fillerCount++; - } else { - i.remove(); - continue; - } - } - } - - if (maxPathsPerWord > 0) { - Integer count = countMap.get(word); - int c = count == null ? 0 : count; - - // Since the tokens are sorted by score we only - // keep the n tokens for a particular word - - if (c < maxPathsPerWord - 1) { - countMap.put(word, c + 1); - } else { - i.remove(); - } - } - } - - if (tokenList.size() > absoluteBeamWidth) { - tokenList = tokenList.subList(0, absoluteBeamWidth); - } - - return this; - } - - - /** - * Retrieves the iterator for this tree. - * - * @return the iterator for this token list - */ - public Iterator iterator() { - return tokenList.iterator(); - } - - - /** - * Gets the set of all tokens - * - * @return the set of tokens - */ - public List getTokens() { - return tokenList; - } - - - /** - * Returns the number of tokens on this active list - * - * @return the size of the active list - */ - public final int size() { - return tokenList.size(); - } - - - /** - * gets the beam threshold best upon the best scoring token - * - * @return the beam threshold - */ - public float getBeamThreshold() { - return getBestScore() + logRelativeBeamWidth; - } - - - /** - * gets the best score in the list - * - * @return the best score - */ - public float getBestScore() { - float bestScore = -Float.MAX_VALUE; - if (bestToken != null) { - bestScore = bestToken.getScore(); - } - return bestScore; - } - - - /** - * Sets the best scoring token for this active list - * - * @param token the best scoring token - */ - public void setBestToken(Token token) { - bestToken = token; - } - - - /** - * Gets the best scoring token for this active list - * - * @return the best scoring token - */ - public Token getBestToken() { - return bestToken; - } - - - /* (non-Javadoc) - * @see edu.cmu.sphinx.decoder.search.ActiveList#createNew() - */ - public ActiveList newInstance() { - return WordActiveListFactory.this.newInstance(); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/WordPruningBreadthFirstLookaheadSearchManager.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/WordPruningBreadthFirstLookaheadSearchManager.java deleted file mode 100755 index 6c7820ac..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/WordPruningBreadthFirstLookaheadSearchManager.java +++ /dev/null @@ -1,497 +0,0 @@ -/* - * Copyright 2014 Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.decoder.search; - -// a test search manager. - -import java.util.Arrays; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.Map; - -import edu.cmu.sphinx.decoder.pruner.Pruner; -import edu.cmu.sphinx.decoder.scorer.AcousticScorer; -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.linguist.Linguist; -import edu.cmu.sphinx.linguist.SearchState; -import edu.cmu.sphinx.linguist.SearchStateArc; -import edu.cmu.sphinx.linguist.WordSearchState; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.Loader; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.Sphinx3Loader; -import edu.cmu.sphinx.linguist.allphone.PhoneHmmSearchState; -import edu.cmu.sphinx.linguist.lextree.LexTreeLinguist.LexTreeHMMState; -import edu.cmu.sphinx.linguist.lextree.LexTreeLinguist.LexTreeNonEmittingHMMState; -import edu.cmu.sphinx.linguist.lextree.LexTreeLinguist.LexTreeWordState; -import edu.cmu.sphinx.linguist.lextree.LexTreeLinguist.LexTreeEndUnitState; -import edu.cmu.sphinx.result.Result; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Component; -import edu.cmu.sphinx.util.props.S4Double; -import edu.cmu.sphinx.util.props.S4Integer; - -/** - * Provides the breadth first search with fast match heuristic included to - * reduce amount of tokens created. - *

    - * All scores and probabilities are maintained in the log math log domain. - */ - -public class WordPruningBreadthFirstLookaheadSearchManager extends WordPruningBreadthFirstSearchManager { - - /** The property that to get direct access to gau for score caching control. */ - @S4Component(type = Loader.class) - public final static String PROP_LOADER = "loader"; - - /** - * The property that defines the name of the linguist to be used for fast - * match. - */ - @S4Component(type = Linguist.class) - public final static String PROP_FASTMATCH_LINGUIST = "fastmatchLinguist"; - - @S4Component(type = ActiveListFactory.class) - /** The property that defines the type active list factory for fast match */ - public final static String PROP_FM_ACTIVE_LIST_FACTORY = "fastmatchActiveListFactory"; - - @S4Double(defaultValue = 1.0) - public final static String PROP_LOOKAHEAD_PENALTY_WEIGHT = "lookaheadPenaltyWeight"; - - /** - * The property that controls size of lookahead window. Acceptable values - * are in range [1..10]. - */ - @S4Integer(defaultValue = 5) - public final static String PROP_LOOKAHEAD_WINDOW = "lookaheadWindow"; - - // ----------------------------------- - // Configured Subcomponents - // ----------------------------------- - private Linguist fastmatchLinguist; // Provides phones info for fastmatch - private Loader loader; - private ActiveListFactory fastmatchActiveListFactory; - - // ----------------------------------- - // Lookahead data - // ----------------------------------- - private int lookaheadWindow; - private float lookaheadWeight; - private HashMap penalties; - private LinkedList ciScores; - - // ----------------------------------- - // Working data - // ----------------------------------- - private int currentFastMatchFrameNumber; // the current frame number for - // lookahead matching - protected ActiveList fastmatchActiveList; // the list of active tokens for - // fast match - protected Map fastMatchBestTokenMap; - private boolean fastmatchStreamEnd; - - /** - * Creates a pruning manager with lookahead - * @param linguist a linguist for search space - * @param fastmatchLinguist a linguist for fast search space - * @param pruner pruner to drop tokens - * @param loader model loader - * @param scorer scorer to estimate token probability - * @param activeListManager active list manager to store tokens - * @param fastmatchActiveListFactory fast match active list factor to store phoneloop tokens - * @param showTokenCount show count during decoding - * @param relativeWordBeamWidth relative beam for lookahead pruning - * @param growSkipInterval skip interval for grown - * @param checkStateOrder check order of states during growth - * @param buildWordLattice build a lattice during decoding - * @param maxLatticeEdges max edges to keep in lattice - * @param acousticLookaheadFrames frames to do lookahead - * @param keepAllTokens keep tokens including emitting tokens - * @param lookaheadWindow window for lookahead - * @param lookaheadWeight weight for lookahead pruning - */ - public WordPruningBreadthFirstLookaheadSearchManager(Linguist linguist, Linguist fastmatchLinguist, Loader loader, - Pruner pruner, AcousticScorer scorer, ActiveListManager activeListManager, - ActiveListFactory fastmatchActiveListFactory, boolean showTokenCount, double relativeWordBeamWidth, - int growSkipInterval, boolean checkStateOrder, boolean buildWordLattice, int lookaheadWindow, float lookaheadWeight, - int maxLatticeEdges, float acousticLookaheadFrames, boolean keepAllTokens) { - - super(linguist, pruner, scorer, activeListManager, showTokenCount, relativeWordBeamWidth, growSkipInterval, - checkStateOrder, buildWordLattice, maxLatticeEdges, acousticLookaheadFrames, keepAllTokens); - - this.loader = loader; - this.fastmatchLinguist = fastmatchLinguist; - this.fastmatchActiveListFactory = fastmatchActiveListFactory; - this.lookaheadWindow = lookaheadWindow; - this.lookaheadWeight = lookaheadWeight; - if (lookaheadWindow < 1 || lookaheadWindow > 10) - throw new IllegalArgumentException("Unsupported lookahead window size: " + lookaheadWindow - + ". Value in range [1..10] is expected"); - this.ciScores = new LinkedList(); - this.penalties = new HashMap(); - if (loader instanceof Sphinx3Loader && ((Sphinx3Loader) loader).hasTiedMixtures()) - ((Sphinx3Loader) loader).setGauScoresQueueLength(lookaheadWindow + 2); - } - - public WordPruningBreadthFirstLookaheadSearchManager() { - - } - - /* - * (non-Javadoc) - * - * @see - * edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util - * .props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - - fastmatchLinguist = (Linguist) ps.getComponent(PROP_FASTMATCH_LINGUIST); - fastmatchActiveListFactory = (ActiveListFactory) ps.getComponent(PROP_FM_ACTIVE_LIST_FACTORY); - loader = (Loader) ps.getComponent(PROP_LOADER); - lookaheadWindow = ps.getInt(PROP_LOOKAHEAD_WINDOW); - lookaheadWeight = ps.getFloat(PROP_LOOKAHEAD_PENALTY_WEIGHT); - if (lookaheadWindow < 1 || lookaheadWindow > 10) - throw new PropertyException(WordPruningBreadthFirstLookaheadSearchManager.class.getName(), PROP_LOOKAHEAD_WINDOW, - "Unsupported lookahead window size: " + lookaheadWindow + ". Value in range [1..10] is expected"); - ciScores = new LinkedList(); - penalties = new HashMap(); - if (loader instanceof Sphinx3Loader && ((Sphinx3Loader) loader).hasTiedMixtures()) - ((Sphinx3Loader) loader).setGauScoresQueueLength(lookaheadWindow + 2); - } - - /** - * Performs the recognition for the given number of frames. - * - * @param nFrames - * the number of frames to recognize - * @return the current result - */ - @Override - public Result recognize(int nFrames) { - boolean done = false; - Result result = null; - streamEnd = false; - - for (int i = 0; i < nFrames && !done; i++) { - if (!fastmatchStreamEnd) - fastMatchRecognize(); - penalties.clear(); - ciScores.poll(); - done = recognize(); - } - - if (!streamEnd) { - result = new Result(loserManager, activeList, resultList, currentCollectTime, done, linguist.getSearchGraph() - .getWordTokenFirst(), true); - } - - // tokenTypeTracker.show(); - if (showTokenCount) { - showTokenCount(); - } - return result; - } - - private void fastMatchRecognize() { - boolean more = scoreFastMatchTokens(); - - if (more) { - pruneFastMatchBranches(); - currentFastMatchFrameNumber++; - createFastMatchBestTokenMap(); - growFastmatchBranches(); - } - } - - /** - * creates a new best token map with the best size - */ - protected void createFastMatchBestTokenMap() { - int mapSize = fastmatchActiveList.size() * 10; - if (mapSize == 0) { - mapSize = 1; - } - fastMatchBestTokenMap = new HashMap(mapSize); - } - - /** - * Gets the initial grammar node from the linguist and creates a - * GrammarNodeToken - */ - @Override - protected void localStart() { - currentFastMatchFrameNumber = 0; - if (loader instanceof Sphinx3Loader && ((Sphinx3Loader) loader).hasTiedMixtures()) - ((Sphinx3Loader) loader).clearGauScores(); - // prepare fast match active list - fastmatchActiveList = fastmatchActiveListFactory.newInstance(); - SearchState fmInitState = fastmatchLinguist.getSearchGraph().getInitialState(); - fastmatchActiveList.add(new Token(fmInitState, currentFastMatchFrameNumber)); - createFastMatchBestTokenMap(); - growFastmatchBranches(); - fastmatchStreamEnd = false; - for (int i = 0; (i < lookaheadWindow - 1) && !fastmatchStreamEnd; i++) - fastMatchRecognize(); - - super.localStart(); - } - - /** - * Goes through the fast match active list of tokens and expands each token, - * finding the set of successor tokens until all the successor tokens are - * emitting tokens. - */ - protected void growFastmatchBranches() { - growTimer.start(); - ActiveList oldActiveList = fastmatchActiveList; - fastmatchActiveList = fastmatchActiveListFactory.newInstance(); - float fastmathThreshold = oldActiveList.getBeamThreshold(); - // TODO more precise range of baseIds, remove magic number - float[] frameCiScores = new float[100]; - - Arrays.fill(frameCiScores, -Float.MAX_VALUE); - float frameMaxCiScore = -Float.MAX_VALUE; - for (Token token : oldActiveList) { - float tokenScore = token.getScore(); - if (tokenScore < fastmathThreshold) - continue; - // filling max ci scores array that will be used in general search - // token score composing - if (token.getSearchState() instanceof PhoneHmmSearchState) { - int baseId = ((PhoneHmmSearchState) token.getSearchState()).getBaseId(); - if (frameCiScores[baseId] < tokenScore) - frameCiScores[baseId] = tokenScore; - if (frameMaxCiScore < tokenScore) - frameMaxCiScore = tokenScore; - } - collectFastMatchSuccessorTokens(token); - } - ciScores.add(new FrameCiScores(frameCiScores, frameMaxCiScore)); - growTimer.stop(); - } - - protected boolean scoreFastMatchTokens() { - boolean moreTokens; - scoreTimer.start(); - Data data = scorer.calculateScoresAndStoreData(fastmatchActiveList.getTokens()); - scoreTimer.stop(); - - Token bestToken = null; - if (data instanceof Token) { - bestToken = (Token) data; - } else { - fastmatchStreamEnd = true; - } - - moreTokens = (bestToken != null); - fastmatchActiveList.setBestToken(bestToken); - - // monitorWords(activeList); - monitorStates(fastmatchActiveList); - - // System.out.println("BEST " + bestToken); - - curTokensScored.value += fastmatchActiveList.size(); - totalTokensScored.value += fastmatchActiveList.size(); - - return moreTokens; - } - - /** Removes unpromising branches from the fast match active list */ - protected void pruneFastMatchBranches() { - pruneTimer.start(); - fastmatchActiveList = pruner.prune(fastmatchActiveList); - pruneTimer.stop(); - } - - protected Token getFastMatchBestToken(SearchState state) { - return fastMatchBestTokenMap.get(state); - } - - protected void setFastMatchBestToken(Token token, SearchState state) { - fastMatchBestTokenMap.put(state, token); - } - - protected void collectFastMatchSuccessorTokens(Token token) { - SearchState state = token.getSearchState(); - SearchStateArc[] arcs = state.getSuccessors(); - // For each successor - // calculate the entry score for the token based upon the - // predecessor token score and the transition probabilities - // if the score is better than the best score encountered for - // the SearchState and frame then create a new token, add - // it to the lattice and the SearchState. - // If the token is an emitting token add it to the list, - // otherwise recursively collect the new tokens successors. - for (SearchStateArc arc : arcs) { - SearchState nextState = arc.getState(); - // We're actually multiplying the variables, but since - // these come in log(), multiply gets converted to add - float logEntryScore = token.getScore() + arc.getProbability(); - Token predecessor = getResultListPredecessor(token); - - // if not emitting, check to see if we've already visited - // this state during this frame. Expand the token only if we - // haven't visited it already. This prevents the search - // from getting stuck in a loop of states with no - // intervening emitting nodes. This can happen with nasty - // jsgf grammars such as ((foo*)*)* - if (!nextState.isEmitting()) { - Token newToken = new Token(predecessor, nextState, logEntryScore, arc.getInsertionProbability(), - arc.getLanguageProbability(), currentFastMatchFrameNumber); - tokensCreated.value++; - if (!isVisited(newToken)) { - collectFastMatchSuccessorTokens(newToken); - } - continue; - } - - Token bestToken = getFastMatchBestToken(nextState); - if (bestToken == null) { - Token newToken = new Token(predecessor, nextState, logEntryScore, arc.getInsertionProbability(), - arc.getLanguageProbability(), currentFastMatchFrameNumber); - tokensCreated.value++; - setFastMatchBestToken(newToken, nextState); - fastmatchActiveList.add(newToken); - } else { - if (bestToken.getScore() <= logEntryScore) { - bestToken.update(predecessor, nextState, logEntryScore, arc.getInsertionProbability(), - arc.getLanguageProbability(), currentFastMatchFrameNumber); - } - } - } - } - - /** - * Collects the next set of emitting tokens from a token and accumulates - * them in the active or result lists - * - * @param token - * the token to collect successors from be immediately expanded - * are placed. Null if we should always expand all nodes. - */ - @Override - protected void collectSuccessorTokens(Token token) { - - // tokenTracker.add(token); - // tokenTypeTracker.add(token); - - // If this is a final state, add it to the final list - - if (token.isFinal()) { - resultList.add(getResultListPredecessor(token)); - return; - } - - // if this is a non-emitting token and we've already - // visited the same state during this frame, then we - // are in a grammar loop, so we don't continue to expand. - // This check only works properly if we have kept all of the - // tokens (instead of skipping the non-word tokens). - // Note that certain linguists will never generate grammar loops - // (lextree linguist for example). For these cases, it is perfectly - // fine to disable this check by setting keepAllTokens to false - - if (!token.isEmitting() && (keepAllTokens && isVisited(token))) { - return; - } - - SearchState state = token.getSearchState(); - SearchStateArc[] arcs = state.getSuccessors(); - Token predecessor = getResultListPredecessor(token); - - // For each successor - // calculate the entry score for the token based upon the - // predecessor token score and the transition probabilities - // if the score is better than the best score encountered for - // the SearchState and frame then create a new token, add - // it to the lattice and the SearchState. - // If the token is an emitting token add it to the list, - // otherwise recursively collect the new tokens successors. - - float tokenScore = token.getScore(); - float beamThreshold = activeList.getBeamThreshold(); - boolean stateProducesPhoneHmms = state instanceof LexTreeNonEmittingHMMState || state instanceof LexTreeWordState - || state instanceof LexTreeEndUnitState; - for (SearchStateArc arc : arcs) { - SearchState nextState = arc.getState(); - - // prune states using lookahead heuristics - if (stateProducesPhoneHmms) { - if (nextState instanceof LexTreeHMMState) { - Float penalty; - int baseId = ((LexTreeHMMState) nextState).getHMMState().getHMM().getBaseUnit().getBaseID(); - if ((penalty = penalties.get(baseId)) == null) - penalty = updateLookaheadPenalty(baseId); - if ((tokenScore + lookaheadWeight * penalty) < beamThreshold) - continue; - } - } - - if (checkStateOrder) { - checkStateOrder(state, nextState); - } - - // We're actually multiplying the variables, but since - // these come in log(), multiply gets converted to add - float logEntryScore = tokenScore + arc.getProbability(); - - Token bestToken = getBestToken(nextState); - - if (bestToken == null) { - Token newBestToken = new Token(predecessor, nextState, logEntryScore, arc.getInsertionProbability(), - arc.getLanguageProbability(), currentCollectTime); - tokensCreated.value++; - setBestToken(newBestToken, nextState); - activeListAdd(newBestToken); - } else if (bestToken.getScore() < logEntryScore) { - // System.out.println("Updating " + bestToken + " with " + - // newBestToken); - Token oldPredecessor = bestToken.getPredecessor(); - bestToken.update(predecessor, nextState, logEntryScore, arc.getInsertionProbability(), - arc.getLanguageProbability(), currentCollectTime); - if (buildWordLattice && nextState instanceof WordSearchState) { - loserManager.addAlternatePredecessor(bestToken, oldPredecessor); - } - } else if (buildWordLattice && nextState instanceof WordSearchState) { - if (predecessor != null) { - loserManager.addAlternatePredecessor(bestToken, predecessor); - } - } - } - } - - private Float updateLookaheadPenalty(int baseId) { - if (ciScores.isEmpty()) - return 0.0f; - float penalty = -Float.MAX_VALUE; - for (FrameCiScores frameCiScores : ciScores) { - float diff = frameCiScores.scores[baseId] - frameCiScores.maxScore; - if (diff > penalty) - penalty = diff; - } - penalties.put(baseId, penalty); - return penalty; - } - - private class FrameCiScores { - public final float[] scores; - public final float maxScore; - - public FrameCiScores(float[] scores, float maxScore) { - this.scores = scores; - this.maxScore = maxScore; - } - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/WordPruningBreadthFirstSearchManager.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/WordPruningBreadthFirstSearchManager.java deleted file mode 100755 index 353230cb..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/WordPruningBreadthFirstSearchManager.java +++ /dev/null @@ -1,796 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.decoder.search; - -// a test search manager. - -import edu.cmu.sphinx.decoder.pruner.Pruner; -import edu.cmu.sphinx.decoder.scorer.AcousticScorer; -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.linguist.*; -import edu.cmu.sphinx.result.Result; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.StatisticsVariable; -import edu.cmu.sphinx.util.Timer; -import edu.cmu.sphinx.util.TimerPool; -import edu.cmu.sphinx.util.props.*; - -import java.io.IOException; -import java.util.*; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * Provides the breadth first search. To perform recognition an application - * should call initialize before recognition begins, and repeatedly call - * recognize until Result.isFinal() returns true. Once a final - * result has been obtained, stopRecognition should be called. - *

    - * All scores and probabilities are maintained in the log math log domain. - */ - -public class WordPruningBreadthFirstSearchManager extends TokenSearchManager { - - /** - * The property that defines the name of the linguist to be used by this - * search manager. - */ - @S4Component(type = Linguist.class) - public final static String PROP_LINGUIST = "linguist"; - - /** - * The property that defines the name of the linguist to be used by this - * search manager. - */ - @S4Component(type = Pruner.class) - public final static String PROP_PRUNER = "pruner"; - - /** - * The property that defines the name of the scorer to be used by this - * search manager. - */ - @S4Component(type = AcousticScorer.class) - public final static String PROP_SCORER = "scorer"; - - /** - * The property than, when set to true will cause the - * recognizer to count up all the tokens in the active list after every - * frame. - */ - @S4Boolean(defaultValue = false) - public final static String PROP_SHOW_TOKEN_COUNT = "showTokenCount"; - - /** - * The property that controls the number of frames processed for every time - * the decode growth step is skipped. Setting this property to zero disables - * grow skipping. Setting this number to a small integer will increase the - * speed of the decoder but will also decrease its accuracy. The higher the - * number, the less often the grow code is skipped. Values like 6-8 is known - * to be the good enough for large vocabulary tasks. That means that one of - * 6 frames will be skipped. - */ - @S4Integer(defaultValue = 0) - public final static String PROP_GROW_SKIP_INTERVAL = "growSkipInterval"; - - /** The property that defines the type of active list to use */ - @S4Component(type = ActiveListManager.class) - public final static String PROP_ACTIVE_LIST_MANAGER = "activeListManager"; - - /** The property for checking if the order of states is valid. */ - @S4Boolean(defaultValue = false) - public final static String PROP_CHECK_STATE_ORDER = "checkStateOrder"; - - /** The property that specifies the maximum lattice edges */ - @S4Integer(defaultValue = 100) - public final static String PROP_MAX_LATTICE_EDGES = "maxLatticeEdges"; - - /** - * The property that controls the amount of simple acoustic lookahead - * performed. Setting the property to zero (the default) disables simple - * acoustic lookahead. The lookahead need not be an integer. - */ - @S4Double(defaultValue = 0) - public final static String PROP_ACOUSTIC_LOOKAHEAD_FRAMES = "acousticLookaheadFrames"; - - /** The property that specifies the relative beam width */ - @S4Double(defaultValue = 0.0) - // TODO: this should be a more meaningful default e.g. the common 1E-80 - public final static String PROP_RELATIVE_BEAM_WIDTH = "relativeBeamWidth"; - - // ----------------------------------- - // Configured Subcomponents - // ----------------------------------- - protected Linguist linguist; // Provides grammar/language info - protected Pruner pruner; // used to prune the active list - protected AcousticScorer scorer; // used to score the active list - private ActiveListManager activeListManager; - protected LogMath logMath; - - // ----------------------------------- - // Configuration data - // ----------------------------------- - protected Logger logger; - protected boolean showTokenCount; - protected boolean checkStateOrder; - private int growSkipInterval; - protected float relativeBeamWidth; - protected float acousticLookaheadFrames; - private int maxLatticeEdges = 100; - - // ----------------------------------- - // Instrumentation - // ----------------------------------- - protected Timer scoreTimer; - protected Timer pruneTimer; - protected Timer growTimer; - protected StatisticsVariable totalTokensScored; - protected StatisticsVariable curTokensScored; - protected StatisticsVariable tokensCreated; - private long tokenSum; - private int tokenCount; - - // ----------------------------------- - // Working data - // ----------------------------------- - protected int currentFrameNumber; // the current frame number - protected long currentCollectTime; // the current frame number - protected ActiveList activeList; // the list of active tokens - protected List resultList; // the current set of results - protected Map bestTokenMap; - protected AlternateHypothesisManager loserManager; - private int numStateOrder; - // private TokenTracker tokenTracker; - // private TokenTypeTracker tokenTypeTracker; - protected boolean streamEnd; - - /** - * Creates a pruning manager withs separate lists for tokens - * @param linguist a linguist for search space - * @param pruner pruner to drop tokens - * @param scorer scorer to estimate token probability - * @param activeListManager active list manager to store tokens - * @param showTokenCount show count during decoding - * @param relativeWordBeamWidth relative beam for lookahead pruning - * @param growSkipInterval skip interval for grown - * @param checkStateOrder check order of states during growth - * @param buildWordLattice build a lattice during decoding - * @param maxLatticeEdges max edges to keep in lattice - * @param acousticLookaheadFrames frames to do lookahead - * @param keepAllTokens keep tokens including emitting tokens - */ - public WordPruningBreadthFirstSearchManager(Linguist linguist, Pruner pruner, AcousticScorer scorer, - ActiveListManager activeListManager, boolean showTokenCount, double relativeWordBeamWidth, int growSkipInterval, - boolean checkStateOrder, boolean buildWordLattice, int maxLatticeEdges, float acousticLookaheadFrames, - boolean keepAllTokens) { - - this.logger = Logger.getLogger(getClass().getName()); - this.logMath = LogMath.getLogMath(); - this.linguist = linguist; - this.pruner = pruner; - this.scorer = scorer; - this.activeListManager = activeListManager; - this.showTokenCount = showTokenCount; - this.growSkipInterval = growSkipInterval; - this.checkStateOrder = checkStateOrder; - this.buildWordLattice = buildWordLattice; - this.maxLatticeEdges = maxLatticeEdges; - this.acousticLookaheadFrames = acousticLookaheadFrames; - this.keepAllTokens = keepAllTokens; - - this.relativeBeamWidth = logMath.linearToLog(relativeWordBeamWidth); - } - - public WordPruningBreadthFirstSearchManager() { - - } - - /* - * (non-Javadoc) - * - * @see - * edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util - * .props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - - logMath = LogMath.getLogMath(); - logger = ps.getLogger(); - - linguist = (Linguist) ps.getComponent(PROP_LINGUIST); - pruner = (Pruner) ps.getComponent(PROP_PRUNER); - scorer = (AcousticScorer) ps.getComponent(PROP_SCORER); - activeListManager = (ActiveListManager) ps.getComponent(PROP_ACTIVE_LIST_MANAGER); - showTokenCount = ps.getBoolean(PROP_SHOW_TOKEN_COUNT); - growSkipInterval = ps.getInt(PROP_GROW_SKIP_INTERVAL); - - checkStateOrder = ps.getBoolean(PROP_CHECK_STATE_ORDER); - maxLatticeEdges = ps.getInt(PROP_MAX_LATTICE_EDGES); - acousticLookaheadFrames = ps.getFloat(PROP_ACOUSTIC_LOOKAHEAD_FRAMES); - - relativeBeamWidth = logMath.linearToLog(ps.getDouble(PROP_RELATIVE_BEAM_WIDTH)); - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.decoder.search.SearchManager#allocate() - */ - public void allocate() { - // tokenTracker = new TokenTracker(); - // tokenTypeTracker = new TokenTypeTracker(); - - scoreTimer = TimerPool.getTimer(this, "Score"); - pruneTimer = TimerPool.getTimer(this, "Prune"); - growTimer = TimerPool.getTimer(this, "Grow"); - - totalTokensScored = StatisticsVariable.getStatisticsVariable("totalTokensScored"); - curTokensScored = StatisticsVariable.getStatisticsVariable("curTokensScored"); - tokensCreated = StatisticsVariable.getStatisticsVariable("tokensCreated"); - - try { - linguist.allocate(); - pruner.allocate(); - scorer.allocate(); - } catch (IOException e) { - throw new RuntimeException("Allocation of search manager resources failed", e); - } - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.decoder.search.SearchManager#deallocate() - */ - public void deallocate() { - try { - scorer.deallocate(); - pruner.deallocate(); - linguist.deallocate(); - } catch (IOException e) { - throw new RuntimeException("Deallocation of search manager resources failed", e); - } - } - - /** - * Called at the start of recognition. Gets the search manager ready to - * recognize - */ - public void startRecognition() { - linguist.startRecognition(); - pruner.startRecognition(); - scorer.startRecognition(); - localStart(); - } - - /** - * Performs the recognition for the given number of frames. - * - * @param nFrames - * the number of frames to recognize - * @return the current result - */ - public Result recognize(int nFrames) { - boolean done = false; - Result result = null; - streamEnd = false; - - for (int i = 0; i < nFrames && !done; i++) { - done = recognize(); - } - - if (!streamEnd) { - result = new Result(loserManager, activeList, resultList, currentCollectTime, done, linguist.getSearchGraph() - .getWordTokenFirst(), true); - } - - // tokenTypeTracker.show(); - if (showTokenCount) { - showTokenCount(); - } - return result; - } - - protected boolean recognize() { - - activeList = activeListManager.getEmittingList(); - boolean more = scoreTokens(); - - if (more) { - pruneBranches(); - currentFrameNumber++; - if (growSkipInterval == 0 || (currentFrameNumber % growSkipInterval) != 0) { - clearCollectors(); - growEmittingBranches(); - growNonEmittingBranches(); - } - } - return !more; - } - - /** - * Clears lists and maps before next expansion stage - */ - private void clearCollectors() { - resultList = new LinkedList(); - createBestTokenMap(); - activeListManager.clearEmittingList(); - } - - /** - * creates a new best token map with the best size - */ - protected void createBestTokenMap() { - int mapSize = activeList.size() * 10; - if (mapSize == 0) { - mapSize = 1; - } - bestTokenMap = new HashMap(mapSize, 0.3F); - } - - /** Terminates a recognition */ - public void stopRecognition() { - localStop(); - scorer.stopRecognition(); - pruner.stopRecognition(); - linguist.stopRecognition(); - } - - /** - * Gets the initial grammar node from the linguist and creates a - * GrammarNodeToken - */ - protected void localStart() { - SearchGraph searchGraph = linguist.getSearchGraph(); - currentFrameNumber = 0; - curTokensScored.value = 0; - numStateOrder = searchGraph.getNumStateOrder(); - activeListManager.setNumStateOrder(numStateOrder); - if (buildWordLattice) { - loserManager = new AlternateHypothesisManager(maxLatticeEdges); - } - - SearchState state = searchGraph.getInitialState(); - - activeList = activeListManager.getEmittingList(); - activeList.add(new Token(state, -1)); - - clearCollectors(); - - growBranches(); - growNonEmittingBranches(); - // tokenTracker.setEnabled(false); - // tokenTracker.startUtterance(); - } - - /** Local cleanup for this search manager */ - protected void localStop() { - // tokenTracker.stopUtterance(); - } - - /** - * Goes through the active list of tokens and expands each token, finding - * the set of successor tokens until all the successor tokens are emitting - * tokens. - */ - protected void growBranches() { - growTimer.start(); - float relativeBeamThreshold = activeList.getBeamThreshold(); - if (logger.isLoggable(Level.FINE)) { - logger.fine("Frame: " + currentFrameNumber + " thresh : " + relativeBeamThreshold + " bs " - + activeList.getBestScore() + " tok " + activeList.getBestToken()); - } - for (Token token : activeList) { - if (token.getScore() >= relativeBeamThreshold && allowExpansion(token)) { - collectSuccessorTokens(token); - } - } - growTimer.stop(); - } - - /** - * Grows the emitting branches. This version applies a simple acoustic - * lookahead based upon the rate of change in the current acoustic score. - */ - protected void growEmittingBranches() { - if (acousticLookaheadFrames <= 0.0f) { - growBranches(); - return; - } - growTimer.start(); - float bestScore = -Float.MAX_VALUE; - for (Token t : activeList) { - float score = t.getScore() + t.getAcousticScore() * acousticLookaheadFrames; - if (score > bestScore) { - bestScore = score; - } - } - float relativeBeamThreshold = bestScore + relativeBeamWidth; - for (Token t : activeList) { - if (t.getScore() + t.getAcousticScore() * acousticLookaheadFrames > relativeBeamThreshold) - collectSuccessorTokens(t); - } - growTimer.stop(); - } - - /** - * Grow the non-emitting branches, until the tokens reach an emitting state. - */ - private void growNonEmittingBranches() { - for (Iterator i = activeListManager.getNonEmittingListIterator(); i.hasNext();) { - activeList = i.next(); - if (activeList != null) { - i.remove(); - pruneBranches(); - growBranches(); - } - } - } - - /** - * Calculate the acoustic scores for the active list. The active list should - * contain only emitting tokens. - * - * @return true if there are more frames to score, otherwise, - * false - */ - protected boolean scoreTokens() { - boolean moreTokens; - scoreTimer.start(); - Data data = scorer.calculateScores(activeList.getTokens()); - scoreTimer.stop(); - - Token bestToken = null; - if (data instanceof Token) { - bestToken = (Token) data; - } else if (data == null) { - streamEnd = true; - } - - if (bestToken != null) { - currentCollectTime = bestToken.getCollectTime(); - } - - moreTokens = (bestToken != null); - activeList.setBestToken(bestToken); - - // monitorWords(activeList); - monitorStates(activeList); - - // System.out.println("BEST " + bestToken); - - curTokensScored.value += activeList.size(); - totalTokensScored.value += activeList.size(); - - return moreTokens; - } - - /** - * Keeps track of and reports all of the active word histories for the given - * active list - * - * @param activeList - * the active list to track - */ - @SuppressWarnings("unused") - private void monitorWords(ActiveList activeList) { - - // WordTracker tracker1 = new WordTracker(currentFrameNumber); - // - // for (Token t : activeList) { - // tracker1.add(t); - // } - // tracker1.dump(); - // - // TokenTracker tracker2 = new TokenTracker(); - // - // for (Token t : activeList) { - // tracker2.add(t); - // } - // tracker2.dumpSummary(); - // tracker2.dumpDetails(); - // - // TokenTypeTracker tracker3 = new TokenTypeTracker(); - // - // for (Token t : activeList) { - // tracker3.add(t); - // } - // tracker3.dump(); - - // StateHistoryTracker tracker4 = new - // StateHistoryTracker(currentFrameNumber); - - // for (Token t : activeList) { - // tracker4.add(t); - // } - // tracker4.dump(); - } - - /** - * Keeps track of and reports statistics about the number of active states - * - * @param activeList - * the active list of states - */ - protected void monitorStates(ActiveList activeList) { - - tokenSum += activeList.size(); - tokenCount++; - - if ((tokenCount % 1000) == 0) { - logger.info("Average Tokens/State: " + (tokenSum / tokenCount)); - } - } - - /** Removes unpromising branches from the active list */ - protected void pruneBranches() { - pruneTimer.start(); - activeList = pruner.prune(activeList); - pruneTimer.stop(); - } - - /** - * Gets the best token for this state - * - * @param state - * the state of interest - * @return the best token - */ - protected Token getBestToken(SearchState state) { - return bestTokenMap.get(state); - } - - /** - * Sets the best token for a given state - * - * @param token - * the best token - * @param state - * the state - */ - protected void setBestToken(Token token, SearchState state) { - bestTokenMap.put(state, token); - } - - /** - * Checks that the given two states are in legitimate order. - * - * @param fromState parent state - * @param toState child state - */ - protected void checkStateOrder(SearchState fromState, SearchState toState) { - if (fromState.getOrder() == numStateOrder - 1) { - return; - } - - if (fromState.getOrder() > toState.getOrder()) { - throw new Error("IllegalState order: from " + fromState.getClass().getName() + ' ' + fromState.toPrettyString() - + " order: " + fromState.getOrder() + " to " + toState.getClass().getName() + ' ' + toState.toPrettyString() - + " order: " + toState.getOrder()); - } - } - - /** - * Collects the next set of emitting tokens from a token and accumulates - * them in the active or result lists - * - * @param token - * the token to collect successors from be immediately expanded - * are placed. Null if we should always expand all nodes. - */ - protected void collectSuccessorTokens(Token token) { - - // tokenTracker.add(token); - // tokenTypeTracker.add(token); - - // If this is a final state, add it to the final list - - if (token.isFinal()) { - resultList.add(getResultListPredecessor(token)); - return; - } - - // if this is a non-emitting token and we've already - // visited the same state during this frame, then we - // are in a grammar loop, so we don't continue to expand. - // This check only works properly if we have kept all of the - // tokens (instead of skipping the non-word tokens). - // Note that certain linguists will never generate grammar loops - // (lextree linguist for example). For these cases, it is perfectly - // fine to disable this check by setting keepAllTokens to false - - if (!token.isEmitting() && (keepAllTokens && isVisited(token))) { - return; - } - - SearchState state = token.getSearchState(); - SearchStateArc[] arcs = state.getSuccessors(); - Token predecessor = getResultListPredecessor(token); - - // For each successor - // calculate the entry score for the token based upon the - // predecessor token score and the transition probabilities - // if the score is better than the best score encountered for - // the SearchState and frame then create a new token, add - // it to the lattice and the SearchState. - // If the token is an emitting token add it to the list, - // otherwise recursively collect the new tokens successors. - - for (SearchStateArc arc : arcs) { - SearchState nextState = arc.getState(); - - if (checkStateOrder) { - checkStateOrder(state, nextState); - } - - // We're actually multiplying the variables, but since - // these come in log(), multiply gets converted to add - float logEntryScore = token.getScore() + arc.getProbability(); - - Token bestToken = getBestToken(nextState); - - if (bestToken == null) { - Token newBestToken = new Token(predecessor, nextState, logEntryScore, arc.getInsertionProbability(), - arc.getLanguageProbability(), currentCollectTime); - tokensCreated.value++; - setBestToken(newBestToken, nextState); - activeListAdd(newBestToken); - } else if (bestToken.getScore() < logEntryScore) { - // System.out.println("Updating " + bestToken + " with " + - // newBestToken); - Token oldPredecessor = bestToken.getPredecessor(); - bestToken.update(predecessor, nextState, logEntryScore, arc.getInsertionProbability(), - arc.getLanguageProbability(), currentCollectTime); - if (buildWordLattice && nextState instanceof WordSearchState) { - loserManager.addAlternatePredecessor(bestToken, oldPredecessor); - } - } else if (buildWordLattice && nextState instanceof WordSearchState) { - if (predecessor != null) { - loserManager.addAlternatePredecessor(bestToken, predecessor); - } - } - } - } - - /** - * Determines whether or not we've visited the state associated with this - * token since the previous frame. - * - * @param t token to check - * @return true if we've visited the search state since the last frame - */ - protected boolean isVisited(Token t) { - SearchState curState = t.getSearchState(); - - t = t.getPredecessor(); - - while (t != null && !t.isEmitting()) { - if (curState.equals(t.getSearchState())) { - System.out.println("CS " + curState + " match " + t.getSearchState()); - return true; - } - t = t.getPredecessor(); - } - return false; - } - - protected void activeListAdd(Token token) { - activeListManager.add(token); - } - - /** - * Determine if the given token should be expanded - * - * @param t - * the token to test - * @return true if the token should be expanded - */ - protected boolean allowExpansion(Token t) { - return true; // currently disabled - } - - /** - * Counts all the tokens in the active list (and displays them). This is an - * expensive operation. - */ - protected void showTokenCount() { - Set tokenSet = new HashSet(); - - for (Token token : activeList) { - while (token != null) { - tokenSet.add(token); - token = token.getPredecessor(); - } - } - - System.out.println("Token Lattice size: " + tokenSet.size()); - - tokenSet = new HashSet(); - - for (Token token : resultList) { - while (token != null) { - tokenSet.add(token); - token = token.getPredecessor(); - } - } - - System.out.println("Result Lattice size: " + tokenSet.size()); - } - - /** - * Returns the ActiveList. - * - * @return the ActiveList - */ - public ActiveList getActiveList() { - return activeList; - } - - /** - * Sets the ActiveList. - * - * @param activeList - * the new ActiveList - */ - public void setActiveList(ActiveList activeList) { - this.activeList = activeList; - } - - /** - * Returns the result list. - * - * @return the result list - */ - public List getResultList() { - return resultList; - } - - /** - * Sets the result list. - * - * @param resultList - * the new result list - */ - public void setResultList(List resultList) { - this.resultList = resultList; - } - - /** - * Returns the current frame number. - * - * @return the current frame number - */ - public int getCurrentFrameNumber() { - return currentFrameNumber; - } - - /** - * Returns the Timer for growing. - * - * @return the Timer for growing - */ - public Timer getGrowTimer() { - return growTimer; - } - - /** - * Returns the tokensCreated StatisticsVariable. - * - * @return the tokensCreated StatisticsVariable. - */ - public StatisticsVariable getTokensCreated() { - return tokensCreated; - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/stats/StateHistoryTracker.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/stats/StateHistoryTracker.java deleted file mode 100755 index 77aab5c7..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/stats/StateHistoryTracker.java +++ /dev/null @@ -1,140 +0,0 @@ -package edu.cmu.sphinx.decoder.search.stats; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import edu.cmu.sphinx.decoder.search.Token; -import edu.cmu.sphinx.linguist.WordSequence; - -/** A class that keeps track of word histories */ - -public class StateHistoryTracker { - - final Map statMap; - final int frameNumber; - int stateCount; - int maxWordHistories; - - /** - * Creates a word tracker for the given frame number - * - * @param frameNumber the frame number - */ - public StateHistoryTracker(int frameNumber) { - statMap = new HashMap(); - this.frameNumber = frameNumber; - } - - - /** - * Adds a word history for the given token to the word tracker - * - * @param t the token to add - */ - public void add(Token t) { - stateCount++; - WordSequence ws = getWordSequence(t); - WordStats stats = statMap.get(ws); - if (stats == null) { - stats = new WordStats(ws); - statMap.put(ws, stats); - } - stats.update(t); - } - - - /** Dumps the word histories in the tracker */ - public void dump() { - dumpSummary(); - List stats = new ArrayList(statMap.values()); - Collections.sort(stats, WordStats.COMPARATOR); - for (WordStats stat : stats) { - System.out.println(" " + stat); - } - } - - - /** Dumps summary information in the tracker */ - void dumpSummary() { - System.out.println("Frame: " + frameNumber + " states: " + stateCount - + " histories " + statMap.size()); - } - - - /** - * Given a token, gets the history sequence - * - * @param token the token of interest - * @return the word sequence for the token - */ - private WordSequence getWordSequence(Token token) { - return token.getSearchState().getWordHistory(); - } - - /** Keeps track of statistics for a particular word sequence */ - - static class WordStats { - - public final static Comparator COMPARATOR = new Comparator() { - public int compare(WordStats ws1, WordStats ws2) { - if (ws1.maxScore > ws2.maxScore) { - return -1; - } else if (ws1.maxScore == ws2.maxScore) { - return 0; - } else { - return 1; - } - } - }; - - private int size; - private float maxScore; - private float minScore; - private final WordSequence ws; - - /** - * Creates a word statistics for the given sequence - * - * @param ws the word sequence - */ - WordStats(WordSequence ws) { - size = 0; - maxScore = -Float.MAX_VALUE; - minScore = Float.MAX_VALUE; - this.ws = ws; - } - - - /** - * Updates the statistics based upon the scores for the given token - * - * @param t the token - */ - void update(Token t) { - size++; - if (t.getScore() > maxScore) { - maxScore = t.getScore(); - } - if (t.getScore() < minScore) { - minScore = t.getScore(); - } - } - - - /** - * Returns a string representation of the statistics - * - * @return a string representation - */ - @Override - public String toString() { - return "states:" + size + " max:" + maxScore + " min:" + minScore + ' ' - + ws; - } - } -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/stats/TokenTracker.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/stats/TokenTracker.java deleted file mode 100755 index c20f9aca..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/stats/TokenTracker.java +++ /dev/null @@ -1,198 +0,0 @@ -package edu.cmu.sphinx.decoder.search.stats; - -import java.util.HashMap; -import java.util.Map; - -import edu.cmu.sphinx.decoder.search.Token; -import edu.cmu.sphinx.linguist.HMMSearchState; - -/** This debugging class is used to track the number of active tokens per state */ - -public class TokenTracker { - - private Map stateMap; - private boolean enabled; - private int frame; - - private int utteranceStateCount; - private int utteranceMaxStates; - private int utteranceSumStates; - - - /** - * Enables or disables the token tracker - * - * @param enabled if true the tracker is enabled - */ - void setEnabled(boolean enabled) { - this.enabled = enabled; - } - - - /** Starts the per-utterance tracking */ - void startUtterance() { - if (enabled) { - frame = 0; - utteranceStateCount = 0; - utteranceMaxStates = -Integer.MAX_VALUE; - utteranceSumStates = 0; - } - } - - - /** stops the per-utterance tracking */ - void stopUtterance() { - if (enabled) { - dumpSummary(); - } - } - - - /** Starts the per-frame tracking */ - void startFrame() { - if (enabled) { - stateMap = new HashMap(); - } - } - - - /** - * Adds a new token to the tracker - * - * @param t the token to add. - */ - public void add(Token t) { - if (enabled) { - TokenStats stats = getStats(t); - stats.update(t); - } - } - - - /** Stops the per-frame tracking */ - void stopFrame() { - if (enabled) { - frame++; - dumpDetails(); - } - } - - - /** Dumps summary info about the tokens */ - public void dumpSummary() { - if (enabled) { - float avgStates = 0f; - if (utteranceStateCount > 0) { - avgStates = ((float) utteranceSumStates) / utteranceStateCount; - } - System.out.print("# Utterance stats "); - System.out.print(" States: " + utteranceStateCount / frame); - - if (utteranceStateCount > 0) { - System.out.print(" Paths: " + utteranceSumStates / frame); - System.out.print(" Max: " + utteranceMaxStates); - System.out.print(" Avg: " + avgStates); - } - - System.out.println(); - } - } - - - /** Dumps detailed info about the tokens */ - public void dumpDetails() { - if (enabled) { - int maxStates = -Integer.MAX_VALUE; - int hmmCount = 0; - int sumStates = 0; - - for (TokenStats stats : stateMap.values()) { - if (stats.isHMM) { - hmmCount++; - } - sumStates += stats.count; - utteranceSumStates += stats.count; - if (stats.count > maxStates) { - maxStates = stats.count; - } - - if (stats.count > utteranceMaxStates) { - utteranceMaxStates = stats.count; - } - } - - utteranceStateCount += stateMap.size(); - - float avgStates = 0f; - if (!stateMap.isEmpty()) { - avgStates = ((float) sumStates) / stateMap.size(); - } - System.out.print("# Frame " + frame); - System.out.print(" States: " + stateMap.size()); - - if (!stateMap.isEmpty()) { - System.out.print(" Paths: " + sumStates); - System.out.print(" Max: " + maxStates); - System.out.print(" Avg: " + avgStates); - System.out.print(" HMM: " + hmmCount); - } - - System.out.println(); - } - } - - - /** - * Gets the statistics for a particular token - * - * @param t the token of interest - * @return the token statistics associated with the given token - */ - private TokenStats getStats(Token t) { - TokenStats stats = stateMap.get(t.getSearchState() - .getLexState()); - if (stats == null) { - stats = new TokenStats(); - stateMap.put(t.getSearchState().getLexState(), stats); - } - return stats; - } - - /** - * A class for keeping track of statistics about tokens. Tracks the count, - * minimum and maximum score for a particular state. - */ - class TokenStats { - - int count; - float maxScore; - float minScore; - boolean isHMM; - - - TokenStats() { - count = 0; - maxScore = -Float.MAX_VALUE; - minScore = Float.MIN_VALUE; - } - - - /** Update this state with the given token - * @param t*/ - public void update(Token t) { - count++; - if (t.getScore() > maxScore) { - maxScore = t.getScore(); - } - - if (t.getScore() < minScore) { - minScore = t.getScore(); - } - - isHMM = t.getSearchState() instanceof HMMSearchState; - } - } - -} - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/stats/TokenTypeTracker.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/stats/TokenTypeTracker.java deleted file mode 100755 index 1e889d13..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/stats/TokenTypeTracker.java +++ /dev/null @@ -1,80 +0,0 @@ -package edu.cmu.sphinx.decoder.search.stats; - -import edu.cmu.sphinx.decoder.search.Token; -import edu.cmu.sphinx.linguist.HMMSearchState; -import edu.cmu.sphinx.linguist.SearchState; -import edu.cmu.sphinx.linguist.UnitSearchState; -import edu.cmu.sphinx.linguist.WordSearchState; -import edu.cmu.sphinx.linguist.acoustic.HMM; - -/** - * A tool for tracking the types tokens created and placed in the beam - *

    - * TODO: Develop a mechanism for adding trackers such as these in a more general fashion. - */ -public class TokenTypeTracker { - // keep track of the various types of states - - private int numWords; - private int numUnits; - private int numOthers; - private int numHMMBegin; - private int numHMMEnd; - private int numHMMSingle; - private int numHMMInternal; - private int numTokens; - - - /** - * Adds a token to this tracker. Records statistics about the type of token. - * - * @param t the token to track - */ - public void add(Token t) { - numTokens++; - SearchState s = t.getSearchState(); - - if (s instanceof WordSearchState) { - numWords++; - } else if (s instanceof UnitSearchState) { - numUnits++; - } else if (s instanceof HMMSearchState) { - HMM hmm = ((HMMSearchState) s).getHMMState().getHMM(); - switch (hmm.getPosition()) { - case BEGIN: numHMMBegin++; break; - case END: numHMMEnd++; break; - case SINGLE: numHMMSingle++; break; - case INTERNAL: numHMMInternal++; break; - default: break; - } - } else { - numOthers++; - } - } - - - /** Shows the accumulated statistics */ - public void dump() { - System.out.println("TotalTokens: " + numTokens); - System.out.println(" Words: " + numWords + pc(numWords)); - System.out.println(" Units: " + numUnits + pc(numUnits)); - System.out.println(" HMM-b: " + numHMMBegin + pc(numHMMBegin)); - System.out.println(" HMM-e: " + numHMMEnd + pc(numHMMEnd)); - System.out.println(" HMM-s: " + numHMMSingle + pc(numHMMSingle)); - System.out.println(" HMM-i: " + numHMMInternal + - pc(numHMMInternal)); - System.out.println(" Others: " + numOthers + pc(numOthers)); - } - - - /** - * Utility method for generating integer percents - * - * @param num the value to be converted into percent - * @return a string representation as a percent - */ - private String pc(int num) { - int percent = ((100 * num) / numTokens); - return " (" + percent + "%)"; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/stats/WordTracker.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/stats/WordTracker.java deleted file mode 100755 index 427e8934..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/decoder/search/stats/WordTracker.java +++ /dev/null @@ -1,155 +0,0 @@ -package edu.cmu.sphinx.decoder.search.stats; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - -import edu.cmu.sphinx.decoder.search.Token; -import edu.cmu.sphinx.linguist.WordSearchState; -import edu.cmu.sphinx.linguist.WordSequence; -import edu.cmu.sphinx.linguist.dictionary.Word; - -/** A class that keeps track of word histories */ - -public class WordTracker { - - final Map statMap; - final int frameNumber; - int stateCount; - int maxWordHistories; - - - /** - * Creates a word tracker for the given frame number - * - * @param frameNumber the frame number - */ - public WordTracker(int frameNumber) { - statMap = new HashMap(); - this.frameNumber = frameNumber; - } - - - /** - * Adds a word history for the given token to the word tracker - * - * @param t the token to add - */ - public void add(Token t) { - stateCount++; - WordSequence ws = getWordSequence(t); - WordStats stats = statMap.get(ws); - if (stats == null) { - stats = new WordStats(ws); - statMap.put(ws, stats); - } - stats.update(t); - } - - - /** Dumps the word histories in the tracker */ - public void dump() { - dumpSummary(); - List stats = new ArrayList(statMap.values()); - Collections.sort(stats, WordStats.COMPARATOR); - for (WordStats stat : stats) { - System.out.println(" " + stat); - } - } - - - /** Dumps summary information in the tracker */ - void dumpSummary() { - System.out.println("Frame: " + frameNumber + " states: " + stateCount - + " histories " + statMap.size()); - } - - - /** - * Given a token, gets the word sequence represented by the token - * - * @param token the token of interest - * @return the word sequence for the token - */ - private WordSequence getWordSequence(Token token) { - List wordList = new LinkedList(); - - while (token != null) { - if (token.isWord()) { - WordSearchState wordState = (WordSearchState) token - .getSearchState(); - Word word = wordState.getPronunciation().getWord(); - wordList.add(0, word); - } - token = token.getPredecessor(); - } - return new WordSequence(wordList); - } - - /** Keeps track of statistics for a particular word sequence */ - - static class WordStats { - - public final static Comparator COMPARATOR = new Comparator() { - public int compare(WordStats ws1, WordStats ws2) { - if (ws1.maxScore > ws2.maxScore) { - return -1; - } else if (ws1.maxScore == ws2.maxScore) { - return 0; - } else { - return 1; - } - } - }; - - private int size; - private float maxScore; - private float minScore; - private final WordSequence ws; - - /** - * Creates a word statistics for the given sequence - * - * @param ws the word sequence - */ - WordStats(WordSequence ws) { - size = 0; - maxScore = -Float.MAX_VALUE; - minScore = Float.MAX_VALUE; - this.ws = ws; - } - - - /** - * Updates the statistics based upon the scores for the given token - * - * @param t the token - */ - void update(Token t) { - size++; - if (t.getScore() > maxScore) { - maxScore = t.getScore(); - } - if (t.getScore() < minScore) { - minScore = t.getScore(); - } - } - - - /** - * Returns a string representation of the statistics - * - * @return a string representation - */ - @Override - public String toString() { - return "states:" + size + " max:" + maxScore + " min:" + minScore + ' ' - + ws; - } - } -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/AutoCepstrum.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/AutoCepstrum.java deleted file mode 100755 index 28b47475..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/AutoCepstrum.java +++ /dev/null @@ -1,274 +0,0 @@ -/* - * Copyright 2013 Carnegie Mellon University. All Rights Reserved. Use is - * subject to license terms. See the file "license.terms" for information on - * usage and redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.frontend; - -import static java.lang.Double.parseDouble; -import static java.lang.Integer.parseInt; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; - -import edu.cmu.sphinx.frontend.denoise.Denoise; -import edu.cmu.sphinx.frontend.frequencywarp.MelFrequencyFilterBank; -import edu.cmu.sphinx.frontend.frequencywarp.MelFrequencyFilterBank2; -import edu.cmu.sphinx.frontend.transform.*; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.KaldiLoader; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.Loader; -import edu.cmu.sphinx.util.props.*; - - -/** - * Cepstrum is an auto-configurable DataProcessor which is used to compute a - * specific cepstrum (for a target acoustic model) given the spectrum. The - * Cepstrum is computed using a pipeline of front end components which are - * selected, customized or ignored depending on the feat.params file which - * characterizes the target acoustic model for which this cepstrum is computed. - * A typical legacy MFCC Cepstrum will use a MelFrequencyFilterBank, followed - * by a DiscreteCosineTransform. A typical denoised MFCC Cepstrum will use a - * MelFrequencyFilterBank, followed by a Denoise component, followed by a - * DiscreteCosineTransform2, followed by a Lifter component. The - * MelFrequencyFilterBank parameters (numberFilters, minimumFrequency and - * maximumFrequency) are auto-configured based on the values found in - * feat.params. - * - * @author Horia Cucu - */ -public class AutoCepstrum extends BaseDataProcessor { - - /** - * The property specifying the acoustic model for which this cepstrum will - * be configured. For this acoustic model (AM) it is mandatory to specify a - * location in the configuration file. The Cepstrum will be configured - * based on the feat.params file that will be found in the specified AM - * location. - */ - @S4Component(type = Loader.class) - public final static String PROP_LOADER = "loader"; - protected Loader loader; - - /** - * The filter bank which will be used for creating the cepstrum. The filter - * bank is always inserted in the pipeline and its minimum frequency, - * maximum frequency and number of filters are configured based on the - * "lowerf", "upperf" and "nfilt" values in the feat.params file of the - * target acoustic model. - */ - protected BaseDataProcessor filterBank; - - /** - * The denoise component which could be used for creating the cepstrum. The - * denoise component is inserted in the pipeline only if - * "-remove_noise yes" is specified in the feat.params file of the target - * acoustic model. - */ - protected Denoise denoise; - - /** - * The property specifying the DCT which will be used for creating the - * cepstrum. If "-transform legacy" is specified in the feat.params file of - * the target acoustic model or if the "-transform" parameter does not - * appear in this file at all, the legacy DCT component is inserted in the - * pipeline. If "-transform dct" is specified in the feat.params file of - * the target acoustic model, then the current DCT component is inserted in - * the pipeline. - */ - protected DiscreteCosineTransform dct; - - /** - * The lifter component which could be used for creating the cepstrum. The - * lifter component is inserted in the pipeline only if - * "-lifter <lifterValue>" is specified in the feat.params file of the - * target acoustic model. - */ - protected Lifter lifter; - - /** - * The list of DataProcessors which were auto-configured for - * this Cepstrum component. - */ - protected List selectedDataProcessors; - - public AutoCepstrum(Loader loader) throws IOException { - initLogger(); - this.loader = loader; - loader.load(); - initDataProcessors(); - } - - public AutoCepstrum() { - } - - /* - * (non-Javadoc) - * @see - * edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util - * .props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - loader = (Loader) ps.getComponent(PROP_LOADER); - try { - loader.load(); - } catch (IOException e) { - throw new PropertyException(e); - } - initDataProcessors(); - } - - private void initDataProcessors() { - try { - Properties featParams = loader.getProperties(); - selectedDataProcessors = new ArrayList(); - - double lowFreq = parseDouble(featParams.getProperty("-lowerf")); - double hiFreq = parseDouble(featParams.getProperty("-upperf")); - int numFilter = parseInt(featParams.getProperty("-nfilt")); - - // TODO: should not be there, but for now me must preserve - // backward compatibility with the legacy code. - if (loader instanceof KaldiLoader) - filterBank = new MelFrequencyFilterBank2(lowFreq, - hiFreq, - numFilter); - else - filterBank = new MelFrequencyFilterBank(lowFreq, - hiFreq, - numFilter); - - selectedDataProcessors.add(filterBank); - - if ((featParams.get("-remove_noise") == null) - || (featParams.get("-remove_noise").equals("yes"))) { - denoise = new Denoise(Denoise.class.getField("LAMBDA_POWER") - .getAnnotation(S4Double.class) - .defaultValue(), - Denoise.class.getField("LAMBDA_A") - .getAnnotation(S4Double.class) - .defaultValue(), - Denoise.class.getField("LAMBDA_B") - .getAnnotation(S4Double.class) - .defaultValue(), - Denoise.class.getField("LAMBDA_T") - .getAnnotation(S4Double.class) - .defaultValue(), - Denoise.class.getField("MU_T") - .getAnnotation(S4Double.class) - .defaultValue(), - Denoise.class.getField("MAX_GAIN") - .getAnnotation(S4Double.class) - .defaultValue(), - Denoise.class.getField("SMOOTH_WINDOW") - .getAnnotation(S4Integer.class) - .defaultValue()); - // denoise.newProperties(); - denoise.setPredecessor(selectedDataProcessors - .get(selectedDataProcessors.size() - 1)); - selectedDataProcessors.add(denoise); - } - - if ((featParams.get("-transform") != null) - && (featParams.get("-transform").equals("dct"))) { - dct = new DiscreteCosineTransform2( - numFilter, - DiscreteCosineTransform.class - .getField("PROP_CEPSTRUM_LENGTH") - .getAnnotation(S4Integer.class) - .defaultValue()); - } else if ((featParams.get("-transform") != null) - && (featParams.get("-transform").equals("kaldi"))) - { - dct = new KaldiDiscreteCosineTransform( - numFilter, - DiscreteCosineTransform.class - .getField("PROP_CEPSTRUM_LENGTH") - .getAnnotation(S4Integer.class) - .defaultValue()); - } else { - dct = new DiscreteCosineTransform(numFilter, - DiscreteCosineTransform.class - .getField("PROP_CEPSTRUM_LENGTH") - .getAnnotation(S4Integer.class) - .defaultValue()); - } - dct.setPredecessor(selectedDataProcessors - .get(selectedDataProcessors.size() - 1)); - selectedDataProcessors.add(dct); - - if (featParams.get("-lifter") != null) { - lifter = new Lifter(Integer.parseInt((String) featParams - .get("-lifter"))); - lifter.setPredecessor(selectedDataProcessors - .get(selectedDataProcessors.size() - 1)); - selectedDataProcessors.add(lifter); - } - logger.info("Cepstrum component auto-configured as follows: " - + toString()); - } catch (NoSuchFieldException exc) { - throw new RuntimeException(exc); - } - } - - /* - * (non-Javadoc) - * @see - * edu.cmu.sphinx.frontend.DataProcessor#initialize(edu.cmu.sphinx.frontend - * .CommonConfig) - */ - @Override - public void initialize() { - super.initialize(); - - for (DataProcessor dataProcessor : selectedDataProcessors) - dataProcessor.initialize(); - } - - /** - * Returns the processed Data output, basically calls - * getData() on the last processor. - * - * @return a Data object that has been processed by the cepstrum - * @throws DataProcessingException if a data processor error occurs - */ - @Override - public Data getData() throws DataProcessingException { - DataProcessor dp; - dp = selectedDataProcessors.get(selectedDataProcessors.size() - 1); - return dp.getData(); - } - - /** - * Sets the predecessor for this DataProcessor. The predecessor is actually - * the spectrum builder. - * - * @param predecessor the predecessor of this DataProcessor - */ - @Override - public void setPredecessor(DataProcessor predecessor) { - filterBank.setPredecessor(predecessor); - } - - /** - * Returns a description of this Cepstrum component in the format: - * <cepstrum name> {<DataProcessor1>, <DataProcessor2> ... - * <DataProcessorN>} - * - * @return a description of this Cepstrum - */ - @Override - public String toString() { - StringBuilder description = new StringBuilder(super.toString()) - .append(" {"); - for (DataProcessor dp : selectedDataProcessors) - description.append(dp).append(", "); - description.setLength(description.length() - 2); - return description.append('}').toString(); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/BaseDataProcessor.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/BaseDataProcessor.java deleted file mode 100755 index 49cf8db6..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/BaseDataProcessor.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - - -package edu.cmu.sphinx.frontend; - -import edu.cmu.sphinx.util.props.ConfigurableAdapter; - -/** - * An abstract DataProcessor implementing elements common to all concrete DataProcessors, such as name, predecessor, and - * timer. - */ -public abstract class BaseDataProcessor extends ConfigurableAdapter implements DataProcessor { - - private DataProcessor predecessor; - - public BaseDataProcessor() { - } - - /** - * Returns the processed Data output. - * - * @return an Data object that has been processed by this DataProcessor - * @throws DataProcessingException if a data processor error occurs - */ - public abstract Data getData() throws DataProcessingException; - - - /** Initializes this DataProcessor. This is typically called after the DataProcessor has been configured. */ - public void initialize() { - } - - - /** - * Returns the predecessor DataProcessor. - * - * @return the predecessor - */ - public DataProcessor getPredecessor() { - return predecessor; - } - - - /** - * Sets the predecessor DataProcessor. This method allows dynamic reconfiguration of the front end. - * - * @param predecessor the new predecessor of this DataProcessor - */ - public void setPredecessor(DataProcessor predecessor) { - this.predecessor = predecessor; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/Data.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/Data.java deleted file mode 100755 index e0b170a2..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/Data.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - - -package edu.cmu.sphinx.frontend; - -/** - * Implements the interface for all Data objects that passes between - * DataProcessors. - * - * Subclass of Data can contain the actual data, or be a signal - * (e.g., data start, data end, speech start, speech end). - * - * @see Data - * @see FrontEnd - */ -public interface Data { - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/DataBlocker.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/DataBlocker.java deleted file mode 100755 index aafae6ec..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/DataBlocker.java +++ /dev/null @@ -1,113 +0,0 @@ -package edu.cmu.sphinx.frontend; - -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Double; - -import java.util.LinkedList; - -/** - * A DataProcessor which wraps incoming DoubleData-objects into equally size blocks of defined - * length. - */ -public class DataBlocker extends BaseDataProcessor { - - /** The property for the block size of generated data-blocks in milliseconds. */ - @S4Double(defaultValue = 10) - public static final String PROP_BLOCK_SIZE_MS = "blockSizeMs"; - - private double blockSizeMs; - private int blockSizeSamples = Integer.MAX_VALUE; - - private int curFirstSamplePos; - private int sampleRate = -1; - - private final LinkedList inBuffer = new LinkedList(); - - private int curInBufferSize; - - - public DataBlocker() { - } - - /** - * @param blockSizeMs block size in milliseconds - */ - public DataBlocker(double blockSizeMs) { - initLogger(); - this.blockSizeMs = blockSizeMs; - } - - @Override - public void newProperties(PropertySheet propertySheet) throws PropertyException { - super.newProperties(propertySheet); - blockSizeMs = propertySheet.getDouble(PROP_BLOCK_SIZE_MS); - } - - - public double getBlockSizeMs() { - return blockSizeMs; - } - - - @Override - public Data getData() throws DataProcessingException { - while (curInBufferSize < blockSizeSamples || curInBufferSize == 0) { - Data data = getPredecessor().getData(); - - if (data instanceof DataStartSignal) { - sampleRate = ((DataStartSignal) data).getSampleRate(); - blockSizeSamples = (int) Math.round(sampleRate * blockSizeMs / 1000); - - curInBufferSize = 0; - curFirstSamplePos = 0; - - inBuffer.clear(); - } - - if (!(data instanceof DoubleData)) { - return data; - } - - DoubleData dd = (DoubleData) data; - - inBuffer.add(dd); - curInBufferSize += dd.getValues().length; - } - - // now we are ready to merge all data blocks into one - double[] newSampleBlock = new double[blockSizeSamples]; - - int copiedSamples = 0; - - long firstSample = inBuffer.get(0).getFirstSampleNumber() + curFirstSamplePos; - - while (!inBuffer.isEmpty()) { - DoubleData dd = inBuffer.remove(0); - double[] values = dd.getValues(); - int copyLength = Math.min(blockSizeSamples - copiedSamples, values.length - curFirstSamplePos); - - System.arraycopy(values, curFirstSamplePos, newSampleBlock, copiedSamples, copyLength); - - // does the current data-object contains more samples than necessary? -> keep the rest for the next block - if (copyLength < (values.length - curFirstSamplePos)) { - assert inBuffer.isEmpty(); - - curFirstSamplePos += copyLength; - inBuffer.add(0, dd); - break; - } else { - copiedSamples += copyLength; - curFirstSamplePos = 0; - } - } - - curInBufferSize = inBuffer.isEmpty() ? 0 : inBuffer.get(0).getValues().length - curFirstSamplePos; - -// for (int i = 0; i < newSampleBlock.length; i++) { -// newSampleBlock[i] *= 10; -// } - return new DoubleData(newSampleBlock, sampleRate, firstSample); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/DataEndSignal.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/DataEndSignal.java deleted file mode 100755 index 51a71a76..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/DataEndSignal.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - - -package edu.cmu.sphinx.frontend; - -/** - * A signal that indicates the end of data. - * - * @see Data - * @see DataProcessor - * @see Signal - */ -public class DataEndSignal extends Signal { - - private final long duration; - - - /** - * Constructs a DataEndSignal. - * - * @param duration the duration of the entire data stream in milliseconds - */ - public DataEndSignal(long duration) { - this(duration, System.currentTimeMillis()); - } - - - /** - * Constructs a DataEndSignal with the given creation time. - * - * @param duration the duration of the entire data stream in milliseconds - * @param time the creation time of the DataEndSignal - */ - public DataEndSignal(long duration, long time) { - super(time); - this.duration = duration; - } - - - /** - * Returns the duration of the entire data stream in milliseconds - * - * @return the duration of the entire data stream in milliseconds - */ - public long getDuration() { - return duration; - } - - - /** - * Returns the string "DataEndSignal". - * - * @return the string "DataEndSignal" - */ - @Override - public String toString() { - return ("DataEndSignal: creation time: " + getTime() + ", duration: " + - getDuration() + "ms"); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/DataProcessingException.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/DataProcessingException.java deleted file mode 100755 index f03205e8..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/DataProcessingException.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.frontend; - -/** Thrown to indicate that a DataProcessor has problems processing incoming Data objects. */ -@SuppressWarnings("serial") -public class DataProcessingException extends RuntimeException { - - /** Constructs a DataProcessingException with no detailed message. */ - public DataProcessingException() { - super(); - } - - /** - * Constructs a DataProcessingException with the specified detail message. - * - * @param message the detail message - */ - public DataProcessingException(String message) { - super(message); - } - - /** - * Constructs a DataProcessingException with the specified detail message and cause. - * - * @param message the detail message - * @param cause the cause - */ - public DataProcessingException(String message, Throwable cause) { - super(message, cause); - } - - /** - * Constructs a DataProcessingException with the specified cause. - * - * @param cause the cause - */ - public DataProcessingException(Throwable cause) { - super(cause); - } -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/DataProcessor.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/DataProcessor.java deleted file mode 100755 index 768aaf82..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/DataProcessor.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - * @see FrontEnd - */ -package edu.cmu.sphinx.frontend; - -import edu.cmu.sphinx.util.props.Configurable; - -/** - * A processor that performs a signal processing function. - * - * Since a DataProcessor usually belongs to a particular front end pipeline, - * you can name the pipeline it belongs to in the {@link #initialize() - * initialize} method. (Note, however, that it is not always the case that a - * DataProcessor belongs to a particular pipeline. For example, the {@link - * edu.cmu.sphinx.frontend.util.Microphone Microphone}class is a DataProcessor, - * but it usually does not belong to any particular pipeline. - *

    - * Each - * DataProcessor usually have a predecessor as well. This is the previous - * DataProcessor in the pipeline. Again, not all DataProcessors have - * predecessors. - *

    - * Calling {@link #getData() getData}will return the - * processed Data object. - */ -public interface DataProcessor extends Configurable { - - /** - * Initializes this DataProcessor. - * - * This is typically called after the DataProcessor has been configured. - */ - public void initialize(); - - - /** - * Returns the processed Data output. - * - * @return an Data object that has been processed by this DataProcessor - * @throws DataProcessingException if a data processor error occurs - */ - public abstract Data getData() throws DataProcessingException; - - - /** - * Returns the predecessor DataProcessor. - * - * @return the predecessor - */ - public DataProcessor getPredecessor(); - - - /** - * Sets the predecessor DataProcessor. This method allows dynamic reconfiguration of the front end. - * - * @param predecessor the new predecessor of this DataProcessor - */ - public void setPredecessor(DataProcessor predecessor); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/DataStartSignal.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/DataStartSignal.java deleted file mode 100755 index 82bd936d..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/DataStartSignal.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - - -package edu.cmu.sphinx.frontend; - -/** - * A signal that indicates the start of data. - * - * @see Data - * @see DataProcessor - * @see Signal - */ -public class DataStartSignal extends Signal { - - private final int sampleRate; - - /** - * Constructs a DataStartSignal at the given time. - * - * @param sampleRate the sampling rate of the started data stream. - * @param time the time this DataStartSignal is created - */ - public DataStartSignal(int sampleRate, long time) { - super(time); - this.sampleRate = sampleRate; - } - - /** - * Constructs a DataStartSignal at the given time. - * - * @param sampleRate the sampling rate of the started data stream. - */ - public DataStartSignal(int sampleRate) { - this(sampleRate, System.currentTimeMillis()); - } - - /** - * Returns the string "DataStartSignal". - * - * @return the string "DataStartSignal" - */ - @Override - public String toString() { - return "DataStartSignal: creation time: " + getTime(); - } - - - /** @return the sampling rate of the started data stream. */ - public int getSampleRate() { - return sampleRate; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/DoubleData.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/DoubleData.java deleted file mode 100755 index 9a5c35ec..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/DoubleData.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - - -package edu.cmu.sphinx.frontend; - -import edu.cmu.sphinx.util.machlearn.OVector; - -/** A Data object that holds data of primitive type double. */ -@SuppressWarnings("serial") -public class DoubleData extends OVector implements Data { - - private int sampleRate; - private long firstSampleNumber; - private long collectTime; - - - /** - * Constructs a new Data object with values only. All other internal fields like - * sampling rate etc. are initialized to -1. - * @param values source values - */ - public DoubleData(double[] values) { - super(values); - } - - - /** - * Constructs a Data object with the given values, collect time, and first sample number. - * - * @param values the data values - * @param sampleRate the sample rate of the data - * @param firstSampleNumber the position of the first sample in the original data - */ - public DoubleData(double[] values, int sampleRate, - long firstSampleNumber) { - super(values); - - this.sampleRate = sampleRate; - this.collectTime = firstSampleNumber * 1000 / sampleRate; - this.firstSampleNumber = firstSampleNumber; - } - - /** - * Constructs a Data object with the given values, collect time, and first sample number. - * - * @param values the data values - * @param sampleRate the sample rate of the data - * @param collectTime the time at which this data is collected - * @param firstSampleNumber the position of the first sample in the original data - */ - public DoubleData(double[] values, int sampleRate, - long collectTime, long firstSampleNumber) { - super(values); - - this.sampleRate = sampleRate; - this.collectTime = collectTime; - this.firstSampleNumber = firstSampleNumber; - } - - /** - * @return a string that describes the data. - */ - @Override - public String toString() { - return ("DoubleData: " + sampleRate + "Hz, first sample #: " + - firstSampleNumber + ", collect time: " + collectTime); - } - - - /** - * @return the sample rate of the data. - */ - public int getSampleRate() { - return sampleRate; - } - - - /** - * @return the position of the first sample in the original data. The very first sample number - * is zero. - */ - public long getFirstSampleNumber() { - return firstSampleNumber; - } - - - /** - * Returns the time in milliseconds at which the audio data is collected. - * - * @return the difference, in milliseconds, between the time the audio data is collected and - * midnight, January 1, 1970 - */ - public long getCollectTime() { - return collectTime; - } - - @Override - public DoubleData clone() throws CloneNotSupportedException { - try { - DoubleData data = (DoubleData)super.clone(); - data.sampleRate = sampleRate; - data.collectTime = collectTime; - data.firstSampleNumber = firstSampleNumber; - return data; - } catch (CloneNotSupportedException e) { - throw new InternalError(e.toString()); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/FloatData.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/FloatData.java deleted file mode 100755 index 68b096f7..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/FloatData.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ - -package edu.cmu.sphinx.frontend; - -import edu.cmu.sphinx.util.MatrixUtils; - -/** - * A Data object that holds data of primitive type float. - * - * @see Data - */ -public class FloatData implements Data, Cloneable { - - private final float[] values; - private final int sampleRate; - private final long firstSampleNumber; - private final long collectTime; - - /** - * Constructs a Data object with the given values, sample rate, collect time, and first sample number. - * - * @param values the data values - * @param sampleRate the sample rate of the data - * @param firstSampleNumber the position of the first sample in the original data - */ - public FloatData(float[] values, int sampleRate, long firstSampleNumber) { - this(values, sampleRate, firstSampleNumber * 1000 / sampleRate, firstSampleNumber); - } - - /** - * Constructs a Data object with the given values, sample rate, collect time, and first sample number. - * - * @param values the data values - * @param sampleRate the sample rate of the data - * @param collectTime the time at which this data is collected - * @param firstSampleNumber the position of the first sample in the original data - */ - public FloatData(float[] values, int sampleRate, - long collectTime, long firstSampleNumber) { - this.values = values; - this.sampleRate = sampleRate; - this.collectTime = collectTime; - this.firstSampleNumber = firstSampleNumber; - } - - - /** - * @return the values of this data. - */ - public float[] getValues() { - return values; - } - - - /** - * @return the sample rate of this data. - */ - public int getSampleRate() { - return sampleRate; - } - - - /** - * @return the position of the first sample in the original data. The very first sample number is zero. - */ - public long getFirstSampleNumber() { - return firstSampleNumber; - } - - - /** - * Returns the time in milliseconds at which the audio data is collected. - * - * @return the difference, in milliseconds, between the time the audio data is collected and midnight, January 1, - * 1970 - */ - public long getCollectTime() { - return collectTime; - } - - @Override - public FloatData clone() throws CloneNotSupportedException { - try { - FloatData data = (FloatData)super.clone(); - return data; - } catch (CloneNotSupportedException e) { - throw new InternalError(e.toString()); - } - } - - - /** - * Converts a given Data-object into a FloatData if possible. - * @param data data to convert - * @return converted data - */ - public static FloatData toFloatData(Data data) { - FloatData convertData; - if (data instanceof FloatData) - convertData = (FloatData) data; - else if (data instanceof DoubleData) { - DoubleData dd = (DoubleData) data; - convertData = new FloatData(MatrixUtils.double2float(dd.getValues()), dd.getSampleRate(), - dd.getFirstSampleNumber()); - } else - throw new IllegalArgumentException("data type '" + data.getClass() + "' is not supported"); - - return convertData; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/FrontEnd.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/FrontEnd.java deleted file mode 100755 index 0ddeaa30..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/FrontEnd.java +++ /dev/null @@ -1,303 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - - -package edu.cmu.sphinx.frontend; - -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; - -import edu.cmu.sphinx.util.Timer; -import edu.cmu.sphinx.util.TimerPool; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4ComponentList; - -/** - * FrontEnd is a wrapper class for the chain of front end processors. It provides methods for manipulating and - * navigating the processors. - *

    - * The front end is modeled as a series of data processors, each of which performs a specific signal processing - * function. For example, a processor performs Fast-Fourier Transform (FFT) on input data, another processor performs - * high-pass filtering. Figure 1 below describes how the front end looks like: - * Frontend
    Figure 1: The Sphinx4 front end. - *

    - * Each such data processor implements the {@link edu.cmu.sphinx.frontend.DataProcessor} interface. Objects that - * implements the {@link edu.cmu.sphinx.frontend.Data} interface enters and exits the front end, and go between the - * processors in the front end. The input data to the front end is typically audio data, but this front end allows any - * input type. Similarly, the output data is typically features, but this front end allows any output type. You can - * configure the front end to accept any input type and return any output type. We will describe the configuration of - * the front end in more detail below. - *

    - * The Pull Model of the Front End - *

    - * The front end uses a pull model. To obtain output from the front end, one would call the method: - *

    - * FrontEnd frontend = ... // see how to obtain the front end below
    Data output = frontend.getData(); - *
    - *

    - * Calling {@link #getData() getData} on the front end would in turn call the getData() method on the last - * DataProcessor, which in turn calls the getData() method on the second last DataProcessor, and so on, until the - * getData() method on the first DataProcessor is called, which reads Data objects from the input. The input to the - * front end is actually another DataProcessor, and is usually (though not necessarily) part of the front end and is not - * shown in the figure above. If you want to maintain some control of the input DataProcessor, you can create it - * separately, and use the {@link #setDataSource(edu.cmu.sphinx.frontend.DataProcessor) setDataSource} method to set it - * as the input DataProcessor. In that case, the input DataProcessor will be prepended to the existing chain of - * DataProcessors. One common input DataProcessor is the {@link edu.cmu.sphinx.frontend.util.Microphone}, which - * implements the DataProcessor interface. - *

    - * DataProcessor microphone = new Microphone();
    microphone.initialize(...); - *
    frontend.setDataSource(microphone);
    - *

    - * Another common input DataProcessor is the {@link edu.cmu.sphinx.frontend.util.StreamDataSource}. It turns a Java - * {@link java.io.InputStream} into Data objects. It is usually used in batch mode decoding. - *

    - * Configuring the front end - *

    - * The front end must be configured through the Sphinx properties file. For details about configuring the front end, - * refer to the document Configuring the Front End. - *

    - * Current state-of-the-art front ends generate features that contain Mel-frequency cepstral coefficients (MFCC). To - * specify such a front end (called a 'pipeline') in Sphinx-4, insert the following lines in the Sphinx-4 configuration - * file: - *

    - * <component name="mfcFrontEnd" type="edu.cmu.sphinx.frontend.FrontEnd">
    - *     <propertylist name="pipeline">
    - *        <item>preemphasizer</item>
    - *        <item>windower</item>
    - *        <item>dft</item>
    - *        <item>melFilterBank</item>
    - *        <item>dct</item>
    - *        <item>batchCMN</item>
    - *        <item>featureExtractor</item>
    - *     </propertylist>
    - * </component>
    - *
    - * <component name="preemphasizer" type="{@link edu.cmu.sphinx.frontend.filter.Preemphasizer
    - * edu.cmu.sphinx.frontend.filter.Preemphasizer}"/>
    - * <component name="windower" type="{@link edu.cmu.sphinx.frontend.window.RaisedCosineWindower
    - * edu.cmu.sphinx.frontend.window.RaisedCosineWindower}"/>
    - * <component name="dft" type="{@link edu.cmu.sphinx.frontend.transform.DiscreteFourierTransform
    - * edu.cmu.sphinx.frontend.transform.DiscreteFourierTransform}"/>
    - * <component name="melFilterBank" type="{@link edu.cmu.sphinx.frontend.frequencywarp.MelFrequencyFilterBank2
    - * edu.cmu.sphinx.frontend.frequencywarp.MelFrequencyFilterBank}"/>
    - * <component name="dct" type="{@link edu.cmu.sphinx.frontend.transform.DiscreteCosineTransform
    - * edu.cmu.sphinx.frontend.transform.DiscreteCosineTransform}"/>
    - * <component name="batchCMN" type="{@link edu.cmu.sphinx.frontend.feature.BatchCMN
    - * edu.cmu.sphinx.frontend.feature.BatchCMN}"/>
    - * <component name="featureExtractor" type="{@link edu.cmu.sphinx.frontend.feature.DeltasFeatureExtractor
    - * edu.cmu.sphinx.frontend.feature.DeltasFeatureExtractor}"/>
    - * 
    - * Note: In this example, 'mfcFrontEnd' becomes the name of the front end. - *

    - * Sphinx-4 also allows you to:

    • specify multiple front end pipelines
    • specify multiple instance of the - * same DataProcessor in the same pipeline
    - *

    - * For details on how to do this, refer to the document Configuring the - * Front End. - *

    - * Obtaining a Front End - *

    - * In order to obtain a front end, it must be specified in the configuration file. The Sphinx-4 front end is connected - * to the rest of the system via the scorer. We will continue with the above example to show how the scorer will obtain - * the front end. In the configuration file, the scorer should be specified as follows: - *

    - * <component name="scorer" type="edu.cmu.sphinx.decoder.scorer.SimpleAcousticScorer">
    - *     <property name="frontend" value="mfcFrontEnd"/>
    - * </component>
    - * 
    - * In the SimpleAcousticScorer, the front end is obtained in the {@link edu.cmu.sphinx.util.props.Configurable#newProperties - * newProperties} method as follows: - *
    - * public void newProperties(PropertySheet ps) throws PropertyException {
    - *     FrontEnd frontend = (FrontEnd) ps.getComponent("frontend", FrontEnd.class);
    - * }
    - * 
    - */ -public class FrontEnd extends BaseDataProcessor { - - /** the name of the property list of all the components of the frontend pipe line */ - @S4ComponentList(type = DataProcessor.class) - public final static String PROP_PIPELINE = "pipeline"; - - - // ---------------------------- - // Configuration data - // ----------------------------- - private List frontEndList; - private Timer timer; - - private DataProcessor first; - private DataProcessor last; - private final List signalListeners = new ArrayList(); - - public FrontEnd(List frontEndList) { - initLogger(); - this.frontEndList = frontEndList; - init(); - } - - public FrontEnd() { - - } - - /* (non-Javadoc) - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - frontEndList = ps.getComponentList(PROP_PIPELINE, DataProcessor.class); - init(); - } - - private void init() { - this.timer = TimerPool.getTimer(this, "Frontend"); - - last = null; - for (DataProcessor dp : frontEndList) { - assert dp != null; - - if (last != null) - dp.setPredecessor(last); - - if (first == null) { - first = dp; - } - last = dp; - } - initialize(); - } - - - /* (non-Javadoc) - * @see edu.cmu.sphinx.frontend.DataProcessor#initialize(edu.cmu.sphinx.frontend.CommonConfig) - */ - @Override - public void initialize() { - super.initialize(); - for (DataProcessor dp : frontEndList) { - dp.initialize(); - } - } - - - /** - * Sets the source of data for this front end. It basically sets the predecessor of the first DataProcessor of this - * front end. - * - * @param dataSource the source of data - */ - public void setDataSource(DataProcessor dataSource) { - first.setPredecessor(dataSource); - } - - - /** Returns the collection of DataProcessors of this FrontEnd. - * @return list of processors - */ - public List getElements() { - return frontEndList; - } - - /** - * Returns the processed Data output, basically calls getData() on the last processor. - * - * @return Data object that has been processed by this front end - * @throws DataProcessingException if a data processor error occurs - */ - @Override - public Data getData() throws DataProcessingException { - timer.start(); - Data data = last.getData(); - - // fire the signal listeners if its a signal - if (data instanceof Signal) { - fireSignalListeners((Signal) data); - } - timer.stop(); - return data; - } - - - /** - * Sets the source of data for this front end. It basically calls setDataSource(dataSource). - * - * @param dataSource the source of data - */ - @Override - public void setPredecessor(DataProcessor dataSource) { - setDataSource(dataSource); - } - - - /** - * Add a listener to be called when a signal is detected. - * - * @param listener the listener to be added - */ - public void addSignalListener(SignalListener listener) { - signalListeners.add(listener); - } - - - /** - * Removes a listener for signals. - * - * @param listener the listener to be removed - */ - public void removeSignalListener(SignalListener listener) { - signalListeners.remove(listener); - } - - - /** - * Fire all listeners for signals. - * - * @param signal the signal that occurred - */ - protected void fireSignalListeners(Signal signal) { - for (SignalListener listener : new ArrayList(signalListeners)) - listener.signalOccurred(signal); - } - - - /** Returns the last data processor within the DataProcessor chain of this FrontEnd. - * @return last processor - */ - public DataProcessor getLastDataProcessor() { - return last; - } - - - /** - * Returns a description of this FrontEnd in the format: <front end name> {<DataProcessor1>, <DataProcessor2> ... - * <DataProcessorN>} - * - * @return a description of this FrontEnd - */ - @Override - public String toString() { - if (last == null) - return super.toString() + " {}"; - LinkedList list = new LinkedList(); - for (DataProcessor current = last; current != null; current = current.getPredecessor()) - list.addFirst(current); // add processors in their correct order - StringBuilder description = new StringBuilder(super.toString()).append(" {"); - for (DataProcessor dp : list) - description.append(dp).append(", "); - description.setLength(description.length() - 2); - return description.append('}').toString(); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/GainControlProcessor.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/GainControlProcessor.java deleted file mode 100755 index 01662a57..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/GainControlProcessor.java +++ /dev/null @@ -1,77 +0,0 @@ -package edu.cmu.sphinx.frontend; - -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Double; - -/** - * Allows to modify the gain of an audio-signal. If the gainFactor is 1 the signal passes this - * DataProcessor unchanged. - * - * @author Holger Brandl - */ -public class GainControlProcessor extends BaseDataProcessor { - - @S4Double(defaultValue = 1.0) - public static final String GAIN_FACTOR = "gainFactor"; - - private double gainFactor; - - public GainControlProcessor(double gainFactor) { - initLogger(); - this.gainFactor = gainFactor; - } - - public GainControlProcessor() { - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - gainFactor = ps.getDouble(GAIN_FACTOR); - } - - - @Override - public Data getData() throws DataProcessingException { - Data data = getPredecessor().getData(); - - if (data instanceof FloatData) { - float[] values = ((FloatData) data).getValues(); - if (gainFactor != 1.0) { - // apply the gain-factor - for (int i = 0; i < values.length; i++) { - values[i] *= gainFactor; - - } - } - - } else if (data instanceof DoubleData) { - double[] values = ((DoubleData) data).getValues(); - if (gainFactor != 1.0) { - // apply the gain-factor - for (int i = 0; i < values.length; i++) { - values[i] *= gainFactor; - - } - } - } - - return data; - } - - - public double getGainFactor() { - return gainFactor; - } - - - public void setGainFactor(double gainFactor) { - this.gainFactor = gainFactor; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/Signal.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/Signal.java deleted file mode 100755 index ad1d79fb..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/Signal.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - - -package edu.cmu.sphinx.frontend; - -import java.util.HashMap; -import java.util.Map; - -/** - * Indicates events like beginning or end of data, data dropped, quality changed, etc.. It implements the Data - * interface, and it will pass between DataProcessors to inform them about the Data that is passed between - * DataProcessors. - * - * @see Data - * @see DataProcessor - */ -public class Signal implements Data { - - /** the time this Signal was issued. */ - private final long time; - - /** - * A (lazily initialized) collection of names properties of this signal. This collection might contain infos about - * the file being processed, shift-size of frame-length of the windowing process, etc. - */ - private Map props; - - - /** - * Constructs a Signal with the given name. - * - * @param time the time this Signal is created - */ - protected Signal(long time) { - this.time = time; - } - - - /** - * Returns the time this Signal was created. - * - * @return the time this Signal was created - */ - public long getTime() { - return time; - } - - - /** - * @return the properties associated to this signal. - */ - public synchronized Map getProps() { - if (props == null) - props = new HashMap(); - - return props; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/SignalListener.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/SignalListener.java deleted file mode 100755 index 9e7cb103..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/SignalListener.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.frontend; - - -/** The listener interface for being informed when a {@link Signal Signal} is generated. */ -public interface SignalListener { - - /** - * Method called when a signal is detected - * - * @param signal the signal - */ - public void signalOccurred(Signal signal); -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/databranch/DataBufferProcessor.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/databranch/DataBufferProcessor.java deleted file mode 100755 index 97c2dd5c..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/databranch/DataBufferProcessor.java +++ /dev/null @@ -1,172 +0,0 @@ -package edu.cmu.sphinx.frontend.databranch; - -import edu.cmu.sphinx.frontend.BaseDataProcessor; -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.frontend.DataProcessingException; -import edu.cmu.sphinx.util.props.*; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; - -/** - * A FIFO-buffer for Data-elements. - *

    - * Datas are inserted to the buffer using the processDataFrame-method. - */ -public class DataBufferProcessor extends BaseDataProcessor implements DataListener { - - /** The FIFO- data buffer. */ - private final List featureBuffer = new LinkedList(); - - /** - * If this property is set true the buffer will wait for new data until it returns from a - * getData-call. Enable this flag if the buffer should serve as starting point for a new - * feature-pull-chain.. - */ - @S4Boolean(defaultValue = false) - public static final String PROP_WAIT_IF_EMPTY = "waitIfEmpty"; - private boolean waitIfEmpty; - - /** - * The time in milliseconds which will be waited between two attempts to read a data element from the buffer when - * being in waitIfEmpty-mode - */ - @S4Integer(defaultValue = 10) - public static final String PROP_WAIT_TIME_MS = "waitTimeMs"; - private long waitTime; - - - /** The maximal size of the buffer in frames. The oldest frames will be removed if the buffer grows out of bounds. */ - @S4Integer(defaultValue = 50000) - public static final String PROP_BUFFER_SIZE = "maxBufferSize"; - private int maxBufferSize; - - - @S4ComponentList(type = Configurable.class, beTolerant = true) - public static final String DATA_LISTENERS = "dataListeners"; - private List dataListeners = new ArrayList(); - - /** - * @param maxBufferSize The maximal size of the buffer in frames. The oldest frames will be removed if the buffer grows out of bounds. - * @param waitIfEmpty If this property is set true the buffer will wait for new data until it returns from a - * getData-call. Enable this flag if the buffer should serve as starting point for a new - * feature-pull-chain. - * @param waitTime The time in milliseconds which will be waited between two attempts to read a data element from the buffer when - * being in waitIfEmpty-mode - * @param listeners listeners to get notified - */ - public DataBufferProcessor(int maxBufferSize, boolean waitIfEmpty, int waitTime, List listeners) { - initLogger(); - - this.maxBufferSize = maxBufferSize; - this.waitIfEmpty = waitIfEmpty; - - if (waitIfEmpty) // if false we don't need the value - this.waitTime = waitTime; - - for (Configurable configurable : listeners) { - assert configurable instanceof DataListener; - addDataListener((DataListener) configurable); - } - } - - public DataBufferProcessor() { - } - - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - - maxBufferSize = ps.getInt(PROP_BUFFER_SIZE); - waitIfEmpty = ps.getBoolean(PROP_WAIT_IF_EMPTY); - - if (waitIfEmpty) // if false we don't need the value - waitTime = ps.getInt(PROP_WAIT_TIME_MS); - - dataListeners = ps.getComponentList(DATA_LISTENERS, DataListener.class); - } - - - public void processDataFrame(Data data) { - featureBuffer.add(data); - - // inform data-listeners if necessary - for (DataListener dataListener : dataListeners) { - dataListener.processDataFrame(data); - } - - //reduce the buffer-size if necessary - while (featureBuffer.size() > maxBufferSize) { - featureBuffer.remove(0); - } - } - - - /** - * Returns the processed Data output. - * - * @return an Data object that has been processed by this DataProcessor - * @throws edu.cmu.sphinx.frontend.DataProcessingException - * if a data processor error occurs - */ - @Override - public Data getData() throws DataProcessingException { - Data data = null; - - while (waitIfEmpty && featureBuffer.isEmpty()) { - try { - Thread.sleep(waitTime); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - - if (!featureBuffer.isEmpty()) { - data = featureBuffer.remove(0); - } else { - assert !waitIfEmpty; - } - - return data; - } - - - public int getBufferSize() { - return featureBuffer.size(); - } - - - public void clearBuffer() { - featureBuffer.clear(); - } - - - public List getBuffer() { - return Collections.unmodifiableList(featureBuffer); - } - - - /** Adds a new listener. - * @param l listener to add - */ - public void addDataListener(DataListener l) { - if (l == null) - return; - - dataListeners.add(l); - } - - - /** Removes a listener. - * @param l listener to remove - */ - public void removeDataListener(DataListener l) { - if (l == null) - return; - - dataListeners.remove(l); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/databranch/DataListener.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/databranch/DataListener.java deleted file mode 100755 index 0352296a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/databranch/DataListener.java +++ /dev/null @@ -1,16 +0,0 @@ -package edu.cmu.sphinx.frontend.databranch; - -import edu.cmu.sphinx.frontend.Data; - - -/** - * Defines some API-elements for Data-observer classes. - */ -public interface DataListener { - - /** This method is invoked when a new {@link Data} object becomes available. - * @param data feature frame - */ - public void processDataFrame(Data data); - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/databranch/DataProducer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/databranch/DataProducer.java deleted file mode 100755 index 32ec7a53..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/databranch/DataProducer.java +++ /dev/null @@ -1,18 +0,0 @@ -package edu.cmu.sphinx.frontend.databranch; - -import edu.cmu.sphinx.util.props.Configurable; - -/** Some API-elements which are shared by components which can generate {@link edu.cmu.sphinx.frontend.Data}s. */ -public interface DataProducer extends Configurable { - - /** Registers a new listener for Datas. - * @param l listener to add - */ - void addDataListener(DataListener l); - - - /** Unregisters a listener for Datas. - * @param l listener to remove - */ - void removeDataListener(DataListener l); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/databranch/FrontEndSplitter.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/databranch/FrontEndSplitter.java deleted file mode 100755 index 8fb57355..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/databranch/FrontEndSplitter.java +++ /dev/null @@ -1,71 +0,0 @@ -package edu.cmu.sphinx.frontend.databranch; - -import edu.cmu.sphinx.frontend.BaseDataProcessor; -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.frontend.DataProcessingException; -import edu.cmu.sphinx.util.props.Configurable; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4ComponentList; - -import java.util.ArrayList; -import java.util.List; - -/** - * Creates push-branches out of a Frontend. This might be used for for push-decoding or to create new pull-streams - * - * @see edu.cmu.sphinx.decoder.FrameDecoder - * @see edu.cmu.sphinx.frontend.databranch.DataBufferProcessor - */ -public class FrontEndSplitter extends BaseDataProcessor implements DataProducer { - - - @S4ComponentList(type = Configurable.class, beTolerant = true) - public static final String PROP_DATA_LISTENERS = "dataListeners"; - private List listeners = new ArrayList(); - - public FrontEndSplitter() { - } - - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - - listeners = ps.getComponentList(PROP_DATA_LISTENERS, DataListener.class); - } - - - /** - * Reads and returns the next Data frame or return null if no data is available. - * - * @return the next Data or null if none is available - * @throws edu.cmu.sphinx.frontend.DataProcessingException - * if there is a data processing error - */ - @Override - public Data getData() throws DataProcessingException { - Data input = getPredecessor().getData(); - - for (DataListener l : listeners) - l.processDataFrame(input); - - return input; - } - - - public void addDataListener(DataListener l) { - if (l == null) { - return; - } - listeners.add(l); - } - - - public void removeDataListener(DataListener l) { - if (l == null) { - return; - } - listeners.remove(l); - } -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/denoise/Denoise.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/denoise/Denoise.java deleted file mode 100755 index b0c6ba93..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/denoise/Denoise.java +++ /dev/null @@ -1,220 +0,0 @@ -/* - * Copyright 2013 Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.frontend.denoise; - -import java.util.Arrays; - -import edu.cmu.sphinx.frontend.BaseDataProcessor; -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.frontend.DataProcessingException; -import edu.cmu.sphinx.frontend.DataStartSignal; -import edu.cmu.sphinx.frontend.DoubleData; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Double; -import edu.cmu.sphinx.util.props.S4Integer; - -/** - * The noise filter, same as implemented in sphinxbase/sphinxtrain/pocketsphinx. - * - * Noise removal algorithm is inspired by the following papers Computationally - * Efficient Speech Enchancement by Spectral Minina Tracking by G. Doblinger - * - * Power-Normalized Cepstral Coefficients (PNCC) for Robust Speech Recognition - * by C. Kim. - * - * For the recent research and state of art see papers about IMRCA and A - * Minimum-Mean-Square-Error Noise Reduction Algorithm On Mel-Frequency Cepstra - * For Robust Speech Recognition by Dong Yu and others - * - */ -public class Denoise extends BaseDataProcessor { - - double[] power; - double[] noise; - double[] floor; - double[] peak; - - @S4Double(defaultValue = 0.7) - public final static String LAMBDA_POWER = "lambdaPower"; - double lambdaPower; - - @S4Double(defaultValue = 0.995) - public final static String LAMBDA_A = "lambdaA"; - double lambdaA; - - @S4Double(defaultValue = 0.5) - public final static String LAMBDA_B = "lambdaB"; - double lambdaB; - - @S4Double(defaultValue = 0.85) - public final static String LAMBDA_T = "lambdaT"; - double lambdaT; - - @S4Double(defaultValue = 0.2) - public final static String MU_T = "muT"; - double muT; - - @S4Double(defaultValue = 20.0) - public final static String MAX_GAIN = "maxGain"; - double maxGain; - - @S4Integer(defaultValue = 4) - public final static String SMOOTH_WINDOW = "smoothWindow"; - int smoothWindow; - - final static double EPS = 1e-10; - - public Denoise(double lambdaPower, double lambdaA, double lambdaB, - double lambdaT, double muT, - double maxGain, int smoothWindow) { - this.lambdaPower = lambdaPower; - this.lambdaA = lambdaA; - this.lambdaB = lambdaB; - this.lambdaT = lambdaT; - this.muT = muT; - this.maxGain = maxGain; - this.smoothWindow = smoothWindow; - } - - public Denoise() { - } - - /* - * (non-Javadoc) - * - * @see - * edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util - * .props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - lambdaPower = ps.getDouble(LAMBDA_POWER); - lambdaA = ps.getDouble(LAMBDA_A); - lambdaB = ps.getDouble(LAMBDA_B); - lambdaT = ps.getDouble(LAMBDA_T); - muT = ps.getDouble(MU_T); - maxGain = ps.getDouble(MAX_GAIN); - smoothWindow = ps.getInt(SMOOTH_WINDOW); - } - - @Override - public Data getData() throws DataProcessingException { - Data inputData = getPredecessor().getData(); - int i; - - if (inputData instanceof DataStartSignal) { - power = null; - noise = null; - floor = null; - peak = null; - return inputData; - } - if (!(inputData instanceof DoubleData)) { - return inputData; - } - - DoubleData inputDoubleData = (DoubleData) inputData; - double[] input = inputDoubleData.getValues(); - int length = input.length; - - if (power == null) - initStatistics(input, length); - - updatePower(input); - - estimateEnvelope(power, noise); - - double[] signal = new double[length]; - for (i = 0; i < length; i++) { - signal[i] = Math.max(power[i] - noise[i], 0.0); - } - - estimateEnvelope(signal, floor); - - tempMasking(signal); - - powerBoosting(signal); - - double[] gain = new double[length]; - for (i = 0; i < length; i++) { - gain[i] = signal[i] / (power[i] + EPS); - gain[i] = Math.min(Math.max(gain[i], 1.0 / maxGain), maxGain); - } - double[] smoothGain = smooth(gain); - - for (i = 0; i < length; i++) { - input[i] *= smoothGain[i]; - } - - return inputData; - } - - private double[] smooth(double[] gain) { - double[] result = new double[gain.length]; - for (int i = 0; i < gain.length; i++) { - int start = Math.max(i - smoothWindow, 0); - int end = Math.min(i + smoothWindow + 1, gain.length); - double sum = 0.0; - for (int j = start; j < end; j++) { - sum += gain[j]; - } - result[i] = sum / (end - start); - } - return result; - } - - private void powerBoosting(double[] signal) { - for (int i = 0; i < signal.length; i++) { - if (signal[i] < floor[i]) - signal[i] = floor[i]; - } - } - - private void tempMasking(double[] signal) { - for (int i = 0; i < signal.length; i++) { - double in = signal[i]; - - peak[i] *= lambdaT; - if (signal[i] < lambdaT * peak[i]) - signal[i] = peak[i] * muT; - - if (in > peak[i]) - peak[i] = in; - } - } - - private void updatePower(double[] input) { - for (int i = 0; i < input.length; i++) { - power[i] = lambdaPower * power[i] + (1 - lambdaPower) * input[i]; - } - } - - private void estimateEnvelope(double[] signal, double[] envelope) { - for (int i = 0; i < signal.length; i++) { - if (signal[i] > envelope[i]) - envelope[i] = lambdaA * envelope[i] + (1 - lambdaA) * signal[i]; - else - envelope[i] = lambdaB * envelope[i] + (1 - lambdaB) * signal[i]; - } - } - - private void initStatistics(double[] input, int length) { - /* no previous data, initialize the statistics */ - power = Arrays.copyOf(input, length); - noise = Arrays.copyOf(input, length); - floor = new double[length]; - peak = new double[length]; - for (int i = 0; i < length; i++) { - floor[i] = input[i] / maxGain; - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/endpoint/AbstractVoiceActivityDetector.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/endpoint/AbstractVoiceActivityDetector.java deleted file mode 100755 index bb1ccbb6..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/endpoint/AbstractVoiceActivityDetector.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2010 Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.frontend.endpoint; - -import edu.cmu.sphinx.frontend.BaseDataProcessor; - -/** - * An abstract analyzer that signals about presense of speech in last processing frame. - * This information is used in noise filtering components to estimate noise spectrum - * for example. - */ -public abstract class AbstractVoiceActivityDetector extends BaseDataProcessor { - - /** - * Returns the state of speech detected. - * - * @return if last processed data object was classified as speech. - */ - public abstract boolean isSpeech(); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/endpoint/SpeechClassifiedData.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/endpoint/SpeechClassifiedData.java deleted file mode 100755 index 74a214e8..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/endpoint/SpeechClassifiedData.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2002-2004 Sun Microsystems, Inc. - * Portions Copyright 2002-2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - - -package edu.cmu.sphinx.frontend.endpoint; - -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.frontend.DoubleData; - - -/** A container for DoubleData class that indicates whether the contained DoubleData is speech or not. */ -public class SpeechClassifiedData implements Data { - - private boolean isSpeech; - private final DoubleData data; - - - /** - * Constructs a SpeechClassifiedData object. - * - * @param doubleData the DoubleData - * @param isSpeech indicates whether the DoubleData is speech - */ - public SpeechClassifiedData(DoubleData doubleData, boolean isSpeech) { - this.data = doubleData; - this.isSpeech = isSpeech; - } - - - /** - * Sets whether this SpeechClassifiedData is speech or not. - * - * @param isSpeech true if this is speech, false otherwise - */ - public void setSpeech(boolean isSpeech) { - this.isSpeech = isSpeech; - } - - - /** - * Returns whether this is classified as speech. - * - * @return true if this is classified as speech, false otherwise - */ - public boolean isSpeech() { - return isSpeech; - } - - - /** - * Returns the data values. - * - * @return the data values - */ - public double[] getValues() { - return data.getValues(); - } - - - /** - * Returns the sample rate of the data. - * - * @return the sample rate of the data - */ - public int getSampleRate() { - return data.getSampleRate(); - } - - - /** - * Returns the time in milliseconds at which the audio data is collected. - * - * @return the difference, in milliseconds, between the time the audio data is collected and midnight, January 1, - * 1970 - */ - public long getCollectTime() { - return data.getCollectTime(); - } - - - /** - * Returns the position of the first sample in the original data. The very first sample number is zero. - * - * @return the position of the first sample in the original data - */ - public long getFirstSampleNumber() { - return data.getFirstSampleNumber(); - } - - - /** - * Returns the DoubleData contained by this SpeechClassifiedData. - * - * @return the DoubleData contained by this SpeechClassifiedData - */ - public DoubleData getDoubleData() { - return data; - } - - - /** - * @return a string that describes the data. - */ - @Override - public String toString() { - return "SpeechClassifiedData containing " + data.toString() + " classified as " + (isSpeech ? "speech" : "non-speech"); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/endpoint/SpeechClassifier.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/endpoint/SpeechClassifier.java deleted file mode 100755 index fb6eadc9..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/endpoint/SpeechClassifier.java +++ /dev/null @@ -1,267 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - - -package edu.cmu.sphinx.frontend.endpoint; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Double; -import edu.cmu.sphinx.util.props.S4Integer; - -import java.util.logging.Level; - -/** - * Implements a level tracking endpointer invented by Bent Schmidt Nielsen. - *

    This endpointer is composed of two main steps. - *

      - *
    1. classification of audio into speech and non-speech - *
    2. inserting SPEECH_START and SPEECH_END signals around speech and removing non-speech regions - *
    - *

    - * The first step, classification of audio into speech and non-speech, uses Bent Schmidt Nielsen's algorithm. Each - * time audio comes in, the average signal level and the background noise level are updated, using the signal level of - * the current audio. If the average signal level is greater than the background noise level by a certain threshold - * value (configurable), then the current audio is marked as speech. Otherwise, it is marked as non-speech. - *

    - * The second step of this endpointer is documented in the class {@link SpeechMarker SpeechMarker} - * - * @see SpeechMarker - */ -public class SpeechClassifier extends AbstractVoiceActivityDetector { - - /** The property specifying the endpointing frame length in milliseconds. */ - @S4Integer(defaultValue = 10) - public static final String PROP_FRAME_LENGTH_MS = "frameLengthInMs"; - - /** The property specifying the minimum signal level used to update the background signal level. */ - @S4Double(defaultValue = 0) - public static final String PROP_MIN_SIGNAL = "minSignal"; - - /** - * The property specifying the threshold. If the current signal level is greater than the background level by - * this threshold, then the current signal is marked as speech. Therefore, a lower threshold will make the - * endpointer more sensitive, that is, mark more audio as speech. A higher threshold will make the endpointer less - * sensitive, that is, mark less audio as speech. - */ - @S4Double(defaultValue = 10) - public static final String PROP_THRESHOLD = "threshold"; - - /** The property specifying the adjustment. */ - @S4Double(defaultValue = 0.003) - public static final String PROP_ADJUSTMENT = "adjustment"; - - protected final double averageNumber = 1; - protected double adjustment; - /** average signal level. */ - protected double level; - /** background signal level. */ - protected double background; - /** minimum valid signal level. */ - protected double minSignal; - protected double threshold; - protected float frameLengthSec; - protected boolean isSpeech; - - /* Statistics */ - protected long speechFrames; - protected long backgroundFrames; - protected double totalBackgroundLevel; - protected double totalSpeechLevel; - - public SpeechClassifier(int frameLengthMs, double adjustment, double threshold, double minSignal ) { - initLogger(); - this.frameLengthSec = frameLengthMs / 1000.f; - - this.adjustment = adjustment; - this.threshold = threshold; - this.minSignal = minSignal; - - initialize(); - } - - public SpeechClassifier() { - } - - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - int frameLengthMs = ps.getInt(PROP_FRAME_LENGTH_MS); - frameLengthSec = frameLengthMs / 1000.f; - - adjustment = ps.getDouble(PROP_ADJUSTMENT); - threshold = ps.getDouble(PROP_THRESHOLD); - minSignal = ps.getDouble(PROP_MIN_SIGNAL); - - logger = ps.getLogger(); - //logger.setLevel(Level.FINEST); - - initialize(); - } - - - /** Initializes this LevelTracker endpointer and DataProcessor predecessor. */ - @Override - public void initialize() { - super.initialize(); - reset(); - } - - - /** Resets this LevelTracker to a starting state. */ - protected void reset() { - level = 0; - background = 300; - resetStats(); - } - - - /** - * Returns the logarithm base 10 of the root mean square of the given samples. - * - * @param samples the samples - * @return the calculated log root mean square in log 10 - */ - public static double logRootMeanSquare(double[] samples) { - assert samples.length > 0; - double sumOfSquares = 0.0f; - for (double sample : samples) { - sumOfSquares += sample * sample; - } - double rootMeanSquare = Math.sqrt - (sumOfSquares / samples.length); - rootMeanSquare = Math.max(rootMeanSquare, 1); - return (LogMath.log10((float) rootMeanSquare) * 20); - } - - - /** - * Classifies the given audio frame as speech or not, and updates the endpointing parameters. - * - * @param audio the audio frame - * @return Data with classification flag - */ - protected SpeechClassifiedData classify(DoubleData audio) { - double current = logRootMeanSquare(audio.getValues()); - isSpeech = false; - if (current >= minSignal) { - level = ((level * averageNumber) + current) / (averageNumber + 1); - if (current < background) { - background = current; - } else { - background += (current - background) * adjustment; - } - if (level < background) { - level = background; - } - isSpeech = (level - background > threshold); - } - - SpeechClassifiedData labeledAudio = new SpeechClassifiedData(audio, isSpeech); - - if (logger.isLoggable(Level.FINEST)) { - String speech = ""; - if (labeledAudio.isSpeech()) - speech = "*"; - - logger.finest("Bkg: " + background + ", level: " + level + - ", current: " + current + ' ' + speech); - } - - collectStats (isSpeech); - - return labeledAudio; - } - - /** - * Reset statistics - */ - private void resetStats () { - backgroundFrames = 1; - speechFrames = 1; - totalSpeechLevel = 0; - totalBackgroundLevel = 0; - } - - /** - * Collects the statistics to provide information about signal to noise ratio in channel - * - * @param isSpeech if the current frame is classified as speech - */ - private void collectStats(boolean isSpeech) { - if (isSpeech) { - totalSpeechLevel = totalSpeechLevel + level; - speechFrames = speechFrames + 1; - } else { - totalBackgroundLevel = totalBackgroundLevel + background; - backgroundFrames = backgroundFrames + 1; - } - } - - /** - * Returns the next Data object. - * - * @return the next Data object, or null if none available - * @throws DataProcessingException if a data processing error occurs - */ - @Override - public Data getData() throws DataProcessingException { - Data audio = getPredecessor().getData(); - - if (audio instanceof DataStartSignal) - reset(); - - if (audio instanceof DoubleData) { - DoubleData data = (DoubleData) audio; - audio = classify(data); - } - return audio; - } - - /** - * Method that returns if current returned frame contains speech. - * It could be used by noise filter for example to adjust noise - * spectrum estimation. - * - * @return if current frame is speech - */ - @Override - public boolean isSpeech() { - return isSpeech; - } - - /** - * Retrieves accumulated signal to noise ratio in dbScale - * - * @return signal to noise ratio - */ - public double getSNR () { - double snr = (totalBackgroundLevel / backgroundFrames - totalSpeechLevel / speechFrames); - logger.fine ("Background " + totalBackgroundLevel / backgroundFrames); - logger.fine ("Speech " + totalSpeechLevel / speechFrames); - logger.fine ("SNR is " + snr); - return snr; - } - - /** - * Return the estimation if input data was noisy enough to break - * recognition. The audio is counted noisy if signal to noise ratio - * is less then -20dB. - * - * @return estimation of data being noisy - */ - public boolean getNoisy () { - return (getSNR() > -20); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/endpoint/SpeechEndSignal.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/endpoint/SpeechEndSignal.java deleted file mode 100755 index 20bd2cb1..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/endpoint/SpeechEndSignal.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - - -package edu.cmu.sphinx.frontend.endpoint; - -import edu.cmu.sphinx.frontend.Signal; - -/** A signal that indicates the end of speech. */ -public class SpeechEndSignal extends Signal { - - /** Constructs a SpeechEndSignal. */ - public SpeechEndSignal() { - this(System.currentTimeMillis()); - } - - - /** - * Constructs a SpeechEndSignal with the given creation time. - * - * @param time the creation time of the SpeechEndSignal - */ - public SpeechEndSignal(long time) { - super(time); - } - - - /** - * Returns the string "SpeechEndSignal". - * - * @return the string "SpeechEndSignal" - */ - @Override - public String toString() { - return "SpeechEndSignal"; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/endpoint/SpeechMarker.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/endpoint/SpeechMarker.java deleted file mode 100755 index 0b5c2325..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/endpoint/SpeechMarker.java +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.frontend.endpoint; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Integer; - -import java.util.LinkedList; - -/** - * Converts a stream of SpeechClassifiedData objects, marked as speech and - * non-speech, and mark out the regions that are considered speech. This is done - * by inserting SPEECH_START and SPEECH_END signals into the stream. - *

    - * The algorithm for inserting the two signals is as follows. - *

    - * The algorithm is always in one of two states: 'in-speech' and - * 'out-of-speech'. If 'out-of-speech', it will read in audio until we hit audio - * that is speech. If we have read more than 'startSpeech' amount of - * continuous speech, we consider that speech has started, and insert a - * SPEECH_START at 'speechLeader' time before speech first started. The state of - * the algorithm changes to 'in-speech'. - *

    - * Now consider the case when the algorithm is in 'in-speech' state. If it read - * an audio that is speech, it is scheduled for output. If the audio is - * non-speech, we read ahead until we have 'endSilence' amount of - * continuous non-speech. At the point we consider that speech has ended. - * A SPEECH_END signal is inserted at 'speechTrailer' time after the first - * non-speech audio. The algorithm returns to 'out-of-speech' state. If any - * speech audio is encountered in-between, the accounting starts all over again. - * - * While speech audio is processed delay is lowered to some minimal amount. This - * helps to segment both slow speech with visible delays and fast speech when - * delays are minimal. - */ -public class SpeechMarker extends BaseDataProcessor { - - /** - * The property for the minimum amount of time in speech (in milliseconds) - * to be considered as utterance start. - */ - @S4Integer(defaultValue = 200) - public static final String PROP_START_SPEECH = "startSpeech"; - private int startSpeechTime; - - /** - * The property for the amount of time in silence (in milliseconds) to be - * considered as utterance end. - */ - @S4Integer(defaultValue = 200) - public static final String PROP_END_SILENCE = "endSilence"; - private int endSilenceTime; - - /** - * The property for the amount of time (in milliseconds) before speech start - * to be included as speech data. - */ - @S4Integer(defaultValue = 50) - public static final String PROP_SPEECH_LEADER = "speechLeader"; - private int speechLeader; - - private LinkedList inputQueue; // Audio objects are added to the end - private LinkedList outputQueue; // Audio objects are added to the end - private boolean inSpeech; - private int speechCount; - private int silenceCount; - private int startSpeechFrames; - private int endSilenceFrames; - private int speechLeaderFrames; - - public SpeechMarker(int startSpeechTime, int endSilenceTime, int speechLeader) { - initLogger(); - this.startSpeechTime = startSpeechTime; - this.speechLeader = speechLeader; - this.endSilenceTime = endSilenceTime; - } - - public SpeechMarker() { - } - - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - - startSpeechTime = ps.getInt(PROP_START_SPEECH); - endSilenceTime = ps.getInt(PROP_END_SILENCE); - speechLeader = ps.getInt(PROP_SPEECH_LEADER); - } - - /** - * Initializes this SpeechMarker - */ - @Override - public void initialize() { - super.initialize(); - reset(); - } - - /** - * Resets this SpeechMarker to a starting state. - */ - private void reset() { - inSpeech = false; - speechCount = 0; - silenceCount = 0; - startSpeechFrames = startSpeechTime / 10; - endSilenceFrames = endSilenceTime / 10; - speechLeaderFrames = speechLeader / 10; - this.inputQueue = new LinkedList(); - this.outputQueue = new LinkedList(); - } - - /** - * Returns the next Data object. - * - * @return the next Data object, or null if none available - * @throws DataProcessingException - * if a data processing error occurs - */ - @Override - public Data getData() throws DataProcessingException { - - while (outputQueue.isEmpty()) { - Data data = getPredecessor().getData(); - - if (data == null) - break; - - if (data instanceof DataStartSignal) { - reset(); - outputQueue.add(data); - break; - } - - if (data instanceof DataEndSignal) { - if (inSpeech) { - outputQueue.add(new SpeechEndSignal()); - } - outputQueue.add(data); - break; - } - - if (data instanceof SpeechClassifiedData) { - SpeechClassifiedData cdata = (SpeechClassifiedData) data; - - if (cdata.isSpeech()) { - speechCount++; - silenceCount = 0; - } else { - speechCount = 0; - silenceCount++; - } - - if (inSpeech) { - outputQueue.add(data); - } else { - inputQueue.add(data); - if (inputQueue.size() > startSpeechFrames + speechLeaderFrames) { - inputQueue.remove(0); - } - } - - if (!inSpeech && speechCount == startSpeechFrames) { - inSpeech = true; - outputQueue.add(new SpeechStartSignal(cdata.getCollectTime() - speechLeader - startSpeechFrames)); - outputQueue.addAll(inputQueue.subList( - Math.max(0, inputQueue.size() - startSpeechFrames - speechLeaderFrames), inputQueue.size())); - inputQueue.clear(); - } - if (inSpeech && silenceCount == endSilenceFrames) { - inSpeech = false; - outputQueue.add(new SpeechEndSignal(cdata.getCollectTime())); - } - } - } - - // If we have something left, return that - if (!outputQueue.isEmpty()) { - Data audio = outputQueue.remove(0); - if (audio instanceof SpeechClassifiedData) { - SpeechClassifiedData data = (SpeechClassifiedData) audio; - audio = data.getDoubleData(); - } - return audio; - } else { - return null; - } - - } - - public boolean inSpeech() { - return inSpeech; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/endpoint/SpeechStartSignal.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/endpoint/SpeechStartSignal.java deleted file mode 100755 index 179a3aa2..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/endpoint/SpeechStartSignal.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - - -package edu.cmu.sphinx.frontend.endpoint; - -import edu.cmu.sphinx.frontend.Signal; - -/** A signal that indicates the start of speech. */ -public class SpeechStartSignal extends Signal { - - /** Constructs a SpeechStartSignal. */ - public SpeechStartSignal() { - this(System.currentTimeMillis()); - } - - - /** - * Constructs a SpeechStartSignal at the given time. - * - * @param time the time this SpeechStartSignal is created - */ - public SpeechStartSignal(long time) { - super(time); - } - - - /** - * Returns the string "SpeechStartSignal". - * - * @return the string "SpeechStartSignal" - */ - @Override - public String toString() { - return "SpeechStartSignal"; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/AbstractFeatureExtractor.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/AbstractFeatureExtractor.java deleted file mode 100755 index e6f09615..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/AbstractFeatureExtractor.java +++ /dev/null @@ -1,243 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.frontend.feature; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.frontend.endpoint.*; -import edu.cmu.sphinx.util.props.*; - -import java.util.*; - -/** - * Abstract base class for windowed feature extractors like DeltasFeatureExtractor, ConcatFeatureExtractor - * or S3FeatureExtractor. The main purpose of this it to collect window size cepstra frames in a buffer - * and let the extractor compute the feature frame with them. - */ -public abstract class AbstractFeatureExtractor extends BaseDataProcessor { - - /** The property for the window of the DeltasFeatureExtractor. */ - @S4Integer(defaultValue = 3) - public static final String PROP_FEATURE_WINDOW = "windowSize"; - - private int bufferPosition; - private Signal pendingSignal; - private LinkedList outputQueue; - - protected int cepstraBufferEdge; - protected int window; - protected int currentPosition; - protected int cepstraBufferSize; - protected DoubleData[] cepstraBuffer; - - public AbstractFeatureExtractor(int window) { - initLogger(); - this.window = window; - } - - public AbstractFeatureExtractor() { - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - window = ps.getInt(PROP_FEATURE_WINDOW); - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.frontend.DataProcessor#initialize(edu.cmu.sphinx.frontend.CommonConfig) - */ - @Override - public void initialize() { - super.initialize(); - cepstraBufferSize = 256; - cepstraBuffer = new DoubleData[cepstraBufferSize]; - cepstraBufferEdge = cepstraBufferSize - (window * 2 + 2); - outputQueue = new LinkedList(); - reset(); - } - - - /** Resets the DeltasFeatureExtractor to be ready to read the next segment of data. */ - private void reset() { - bufferPosition = 0; - currentPosition = 0; - } - - - /** - * Returns the next Data object produced by this DeltasFeatureExtractor. - * - * @return the next available Data object, returns null if no Data is available - * @throws DataProcessingException if there is a data processing error - */ - @Override - public Data getData() throws DataProcessingException { - if (outputQueue.isEmpty()) { - Data input = getNextData(); - if (input != null) { - if (input instanceof DoubleData) { - addCepstrum((DoubleData) input); - computeFeatures(1); - } else if (input instanceof DataStartSignal) { - pendingSignal = null; - outputQueue.add(input); - Data start = getNextData(); - int n = processFirstCepstrum(start); - computeFeatures(n); - if (pendingSignal != null) { - outputQueue.add(pendingSignal); - } - } else if (input instanceof SpeechEndSignal) { - // when the DataEndSignal is right at the boundary - int n = replicateLastCepstrum(); - computeFeatures(n); - outputQueue.add(input); - } else if (input instanceof DataEndSignal) { - outputQueue.add(input); - } - } - } - return outputQueue.isEmpty() ? null : outputQueue.removeFirst(); - } - - - private Data getNextData() throws DataProcessingException { - Data d = getPredecessor().getData(); - while (d != null && !(d instanceof DoubleData || d instanceof DataEndSignal || d instanceof DataStartSignal || d instanceof SpeechEndSignal)) { - outputQueue.add(d); - d = getPredecessor().getData(); - } - - return d; - } - - - /** - * Replicate the given cepstrum Data object into the first window+1 number of frames in the cepstraBuffer. This is - * the first cepstrum in the segment. - * - * @param cepstrum the Data to replicate - * @return the number of Features that can be computed - * @throws edu.cmu.sphinx.frontend.DataProcessingException - */ - private int processFirstCepstrum(Data cepstrum) - throws DataProcessingException { - if (cepstrum instanceof DataEndSignal) { - outputQueue.add(cepstrum); - return 0; - } else if (cepstrum instanceof DataStartSignal) { - throw new Error("Too many UTTERANCE_START"); - } else { - // At the start of an utterance, we replicate the first frame - // into window+1 frames, and then read the next "window" number - // of frames. This will allow us to compute the delta- - // double-delta of the first frame. - Arrays.fill(cepstraBuffer, 0, window + 1, cepstrum); - bufferPosition = window + 1; - bufferPosition %= cepstraBufferSize; - currentPosition = window; - currentPosition %= cepstraBufferSize; - int numberFeatures = 1; - pendingSignal = null; - for (int i = 0; i < window; i++) { - Data next = getNextData(); - if (next != null) { - if (next instanceof DoubleData) { - // just a cepstra - addCepstrum((DoubleData) next); - } else if (next instanceof DataEndSignal || next instanceof SpeechEndSignal) { - // end of segment cepstrum - pendingSignal = (Signal) next; - replicateLastCepstrum(); - numberFeatures += i; - break; - } else if (next instanceof DataStartSignal) { - throw new Error("Too many UTTERANCE_START"); - } - } - } - return numberFeatures; - } - } - - - /** - * Adds the given DoubleData object to the cepstraBuffer. - * - * @param cepstrum the DoubleData object to add - */ - private void addCepstrum(DoubleData cepstrum) { - cepstraBuffer[bufferPosition++] = cepstrum; - bufferPosition %= cepstraBufferSize; - } - - - /** - * Replicate the last frame into the last window number of frames in the cepstraBuffer. - * - * @return the number of replicated Cepstrum - */ - private int replicateLastCepstrum() { - DoubleData last; - if (bufferPosition > 0) { - last = cepstraBuffer[bufferPosition - 1]; - } else if (bufferPosition == 0) { - last = cepstraBuffer[cepstraBuffer.length - 1]; - } else { - throw new Error("BufferPosition < 0"); - } - for (int i = 0; i < window; i++) { - addCepstrum(last); - } - return window; - } - - - /** - * Converts the Cepstrum data in the cepstraBuffer into a FeatureFrame. - * - * @param totalFeatures the number of Features that will be produced - */ - private void computeFeatures(int totalFeatures) { - if (totalFeatures == 1) { - computeFeature(); - } else { - // create the Features - for (int i = 0; i < totalFeatures; i++) { - computeFeature(); - } - } - } - - - /** Computes the next Feature. */ - private void computeFeature() { - Data feature = computeNextFeature(); - outputQueue.add(feature); - } - - - /** - * Computes the next feature. Advances the pointers as well. - * - * @return the feature Data computed - */ - protected abstract Data computeNextFeature(); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/BatchAGC.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/BatchAGC.java deleted file mode 100755 index 009060ce..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/BatchAGC.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.frontend.feature; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.frontend.endpoint.*; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; - -import java.util.*; - - -/** - * Applies automatic gain control (CMN) - */ -public class BatchAGC extends BaseDataProcessor { - - private List cepstraList; - private double agc; - - public BatchAGC() { - initLogger(); - } - - /* (non-Javadoc) - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - } - - /** Initializes this BatchCMN. */ - @Override - public void initialize() { - super.initialize(); - cepstraList = new LinkedList(); - } - - /** - * Returns the next Data object, which is a normalized cepstrum. Signal objects are returned unmodified. - * - * @return the next available Data object, returns null if no Data object is available - * @throws DataProcessingException if there is an error processing data - */ - @Override - public Data getData() throws DataProcessingException { - - Data output = null; - - if (!cepstraList.isEmpty()) { - output = cepstraList.remove(0); - } else { - agc = 0.0; - cepstraList.clear(); - // read the cepstra of the entire utterance, calculate and substract gain - if (readUtterance() > 0) { - normalizeList(); - output = cepstraList.remove(0); - } - } - - return output; - } - - - /** - * Reads the cepstra of the entire Utterance into the cepstraList. - * - * @return the number cepstra (with Data) read - * @throws DataProcessingException if an error occurred reading the Data - */ - private int readUtterance() throws DataProcessingException { - - Data input = null; - int numFrames = 0; - - while (true) { - input = getPredecessor().getData(); - if (input == null) { - break; - } else if (input instanceof DataEndSignal || input instanceof SpeechEndSignal) { - cepstraList.add(input); - break; - } else if (input instanceof DoubleData) { - cepstraList.add(input); - double c0 = ((DoubleData)input).getValues()[0]; - if (agc < c0) - agc = c0; - } else { // DataStartSignal or other Signal - cepstraList.add(input); - } - numFrames++; - } - - return numFrames; - } - - /** Normalizes the list of Data. */ - private void normalizeList() { - for (Data data : cepstraList) { - if (data instanceof DoubleData) { - ((DoubleData)data).getValues()[0] -= agc; - } - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/BatchCMN.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/BatchCMN.java deleted file mode 100755 index 08e8069b..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/BatchCMN.java +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.frontend.feature; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.frontend.endpoint.*; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; - -import java.text.DecimalFormat; -import java.text.DecimalFormatSymbols; -import java.util.*; - - -/** - * Applies cepstral mean normalization (CMN), sometimes called channel mean normalization, to incoming cepstral data. - * - * Its goal is to reduce the distortion caused by the transmission channel. The output is mean normalized cepstral - * data. - *

    - * The CMN processing subtracts the mean from all the {@link Data} objects between a {@link - * edu.cmu.sphinx.frontend.DataStartSignal} and a {@link DataEndSignal} or between a {@link - * edu.cmu.sphinx.frontend.endpoint.SpeechStartSignal} and a {@link SpeechEndSignal}. BatchCMN will read in all the {@link Data} - * objects, calculate the mean, and subtract this mean from all the {@link Data} objects. For a given utterance, it will - * only produce an output after reading all the incoming data for the utterance. As a result, this process can introduce - * a significant processing delay, which is acceptable for batch processing, but not for live mode. In the latter case, - * one should use the {@link LiveCMN}. - *

    - * CMN is a technique used to reduce distortions that are introduced by the transfer function of the transmission - * channel (e.g., the microphone). Using a transmission channel to transmit the input speech translates to multiplying - * the spectrum of the input speech with the transfer function of the channel (the distortion). Since the cepstrum is - * the Fourier Transform of the log spectrum, the logarithm turns the multiplication into a summation. Averaging over - * time, the mean is an estimate of the channel, which remains roughly constant. The channel is thus removed from the - * cepstrum by subtracting the mean cepstral vector. Intuitively, the mean cepstral vector approximately describes the - * spectral characteristics of the transmission channel (e.g., microphone). - * - * @see LiveCMN - */ -public class BatchCMN extends BaseDataProcessor { - - private double[] sums; // array of current sums - private List cepstraList; - private int numberDataCepstra; - private DecimalFormat formatter = new DecimalFormat("0.00;-0.00", new DecimalFormatSymbols(Locale.US));; - - public BatchCMN() { - initLogger(); - } - - /* (non-Javadoc) - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - } - - - /** Initializes this BatchCMN. */ - @Override - public void initialize() { - super.initialize(); - sums = null; - cepstraList = new LinkedList(); - } - - - /** Initializes the sums array and clears the cepstra list. */ - private void reset() { - sums = null; // clears the sums array - cepstraList.clear(); - numberDataCepstra = 0; - } - - - /** - * Returns the next Data object, which is a normalized cepstrum. Signal objects are returned unmodified. - * - * @return the next available Data object, returns null if no Data object is available - * @throws DataProcessingException if there is an error processing data - */ - @Override - public Data getData() throws DataProcessingException { - - Data output = null; - - if (!cepstraList.isEmpty()) { - output = cepstraList.remove(0); - } else { - reset(); - // read the cepstra of the entire utterance, calculate - // and apply the cepstral mean - if (readUtterance() > 0) { - normalizeList(); - output = cepstraList.remove(0);//getData(); - } - } - - return output; - } - - - /** - * Reads the cepstra of the entire Utterance into the cepstraList. - * - * @return the number cepstra (with Data) read - * @throws DataProcessingException if an error occurred reading the Data - */ - private int readUtterance() throws DataProcessingException { - - Data input = null; - - do { - input = getPredecessor().getData(); - if (input != null) { - if (input instanceof DoubleData) { - double[] cepstrumData = ((DoubleData) input).getValues(); - if (sums == null) { - sums = new double[cepstrumData.length]; - } else { - if (sums.length != cepstrumData.length) { - throw new Error - ("Inconsistent cepstrum lengths: sums: " + - sums.length + ", cepstrum: " + - cepstrumData.length); - } - } - if (cepstrumData[0] >= 0) { - // add the cepstrum data to the sums - for (int j = 0; j < cepstrumData.length; j++) { - sums[j] += cepstrumData[j]; - } - numberDataCepstra++; - } - - cepstraList.add(input); - - } else if (input instanceof DataEndSignal || input instanceof SpeechEndSignal) { - cepstraList.add(input); - break; - } else { // DataStartSignal or other Signal - cepstraList.add(input); - } - } - } while (input != null); - - return numberDataCepstra; - } - - - /** Normalizes the list of Data. */ - private void normalizeList() { - StringBuilder cmn = new StringBuilder(); - // calculate the mean first - for (int i = 0; i < sums.length; i++) { - sums[i] /= numberDataCepstra; - cmn.append (formatter.format(sums[i])); - cmn.append(' '); - } - logger.info(cmn.toString()); - - for (Data data : cepstraList) { - if (data instanceof DoubleData) { - double[] cepstrum = ((DoubleData)data).getValues(); - for (int j = 0; j < cepstrum.length; j++) { - cepstrum[j] -= sums[j]; // sums[] is now the means[] - } - } - } - } - - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/BatchVarNorm.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/BatchVarNorm.java deleted file mode 100755 index 5c04f8d1..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/BatchVarNorm.java +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright 2010 PC-NG Inc.. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.frontend.feature; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.frontend.endpoint.*; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; - -import java.util.*; - - -/** - * Applies cepstral variance normalization (CVN), so that each coefficient - * will have unit variance. You need to put this element after the means - * normalizer in frontend pipeline. - *

    - * CVN is sited to improve the stability of the decoding with the additive - * noise, so it might be useful in some situations. - * - * @see LiveCMN - */ -public class BatchVarNorm extends BaseDataProcessor { - - private double[] variances; // array of current sums - private List cepstraList; - private int numberDataCepstra; - - public BatchVarNorm() { - initLogger(); - } - - /* (non-Javadoc) - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - } - - - /** Initializes this BatchCMN. */ - @Override - public void initialize() { - super.initialize(); - variances = null; - cepstraList = new LinkedList(); - } - - - /** Initializes the sums array and clears the cepstra list. */ - private void reset() { - variances = null; // clears the sums array - cepstraList.clear(); - numberDataCepstra = 0; - } - - - /** - * Returns the next Data object, which is a normalized cepstrum. Signal objects are returned unmodified. - * - * @return the next available Data object, returns null if no Data object is available - * @throws DataProcessingException if there is an error processing data - */ - @Override - public Data getData() throws DataProcessingException { - - Data output = null; - - if (!cepstraList.isEmpty()) { - output = cepstraList.remove(0); - } else { - reset(); - // read the cepstra of the entire utterance, calculate - // and apply variance normalization - if (readUtterance() > 0) { - normalizeList(); - output = cepstraList.remove(0); //getData(); - } - } - - return output; - } - - - /** - * Reads the cepstra of the entire Utterance into the cepstraList. - * - * @return the number cepstra (with Data) read - * @throws DataProcessingException if an error occurred reading the Data - */ - private int readUtterance() throws DataProcessingException { - - Data input = null; - - do { - input = getPredecessor().getData(); - if (input != null) { - if (input instanceof DoubleData) { - numberDataCepstra++; - double[] cepstrumData = ((DoubleData) input).getValues(); - if (variances == null) { - variances = new double[cepstrumData.length]; - } else { - if (variances.length != cepstrumData.length) { - throw new Error - ("Inconsistent cepstrum lengths: sums: " + - variances.length + ", cepstrum: " + - cepstrumData.length); - } - } - // add the cepstrum data to the sums - for (int j = 0; j < cepstrumData.length; j++) { - variances[j] += cepstrumData[j] * cepstrumData[j]; - } - cepstraList.add(input); - - } else if (input instanceof DataEndSignal || input instanceof SpeechEndSignal) { - cepstraList.add(input); - break; - } else { // DataStartSignal or other Signal - cepstraList.add(input); - } - } - } while (input != null); - - return numberDataCepstra; - } - - - /** Normalizes the list of Data. */ - private void normalizeList() { - - // calculate the variance first - for (int i = 0; i < variances.length; i++) { - variances[i] = Math.sqrt(numberDataCepstra / variances[i]); - } - - for (Data data : cepstraList) { - if (data instanceof DoubleData) { - double[] cepstrum = ((DoubleData)data).getValues(); - for (int j = 0; j < cepstrum.length; j++) { - cepstrum[j] *= variances[j]; - } - } - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/ConcatFeatureExtractor.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/ConcatFeatureExtractor.java deleted file mode 100755 index de4956ea..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/ConcatFeatureExtractor.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2002-2009 Carnegie Mellon University. - * Copyright 2009 PC-NG Inc. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.frontend.feature; - -import edu.cmu.sphinx.frontend.*; - -/** - * This component concatenate the cepstrum from the sequence of frames according to the window size. - * It's not supposed to give high accuracy alone, but combined with LDA transform it can give the same - * or even better results than conventional delta and delta-delta coefficients. The idea is that - * delta-delta computation is also a matrix multiplication thus using automatically generated - * with LDA/MLLT matrix we can gain better results. - * The model for this feature extractor should be trained with SphinxTrain with 1s_c feature type and - * with cepwin option enabled. Don't forget to set the window size accordingly. - */ -public class ConcatFeatureExtractor extends AbstractFeatureExtractor { - - public ConcatFeatureExtractor(int window) { - super(window); - } - - public ConcatFeatureExtractor( ) { - } - - /** - * Computes the next feature. Advances the pointers as well. - * - * @return the feature Data computed - */ - @Override - protected Data computeNextFeature() { - DoubleData currentCepstrum = cepstraBuffer[currentPosition]; - float[] feature = new float[(window * 2 + 1) * currentCepstrum.getValues().length]; - int j = 0; - for (int k = -window; k <= window; k++) { - int position = (currentPosition + k + cepstraBufferSize) % cepstraBufferSize; - double[] buffer = cepstraBuffer[position].getValues(); - for (double val : buffer) { - feature[j++] = (float)val; - } - } - currentPosition = (currentPosition + 1) % cepstraBufferSize ; - - return (new FloatData(feature, - currentCepstrum.getSampleRate(), - currentCepstrum.getFirstSampleNumber())); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/DeltasFeatureExtractor.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/DeltasFeatureExtractor.java deleted file mode 100755 index 60f38070..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/DeltasFeatureExtractor.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.frontend.feature; - -import edu.cmu.sphinx.frontend.*; - -/** - * Computes the delta and double delta of input cepstrum (or plp or ...). The delta is the first order derivative and - * the double delta (a.k.a. delta delta) is the second order derivative of the original cepstrum. They help model the - * speech signal dynamics. The output data is a {@link FloatData} object with a float array of size three times the - * original cepstrum, formed by the concatenation of cepstra, delta cepstra, and double delta cepstra. The output is the - * feature vector used by the decoder. Figure 1 shows the arrangement of the output feature data array: - *

    - * Layout of features
    Figure 1: Layout of the returned features. - *

    - * Suppose that the original cepstrum has a length of N, the first N elements of the feature are just the original - * cepstrum, the second N elements are the delta of the cepstrum, and the last N elements are the double delta of the - * cepstrum. - *

    - * Figure 2 below shows pictorially the computation of the delta and double delta of a cepstrum vector, using the last 3 - * cepstra and the next 3 cepstra. Delta computation
    Figure 2: Delta and double delta vector - * computation. - *

    - * Referring to Figure 2, the delta is computed by subtracting the cepstrum that is two frames behind of the current - * cepstrum from the cepstrum that is two frames ahead of the current cepstrum. The computation of the double delta is - * similar. It is computed by subtracting the delta cepstrum one time frame behind from the delta cepstrum one time - * frame ahead. Replacing delta cepstra with cepstra, this works out to a formula involving the cepstra that are one and - * three behind and after the current cepstrum. - */ -public class DeltasFeatureExtractor extends AbstractFeatureExtractor { - - public DeltasFeatureExtractor(int window) { - super(window); - } - - public DeltasFeatureExtractor( ) { - } - - /** - * Computes the next feature. Advances the pointers as well. - * - * @return the feature Data computed - */ - @Override - protected Data computeNextFeature() { - - int jp1 = (currentPosition - 1 + cepstraBufferSize) % cepstraBufferSize; - int jp2 = (currentPosition - 2 + cepstraBufferSize) % cepstraBufferSize; - int jp3 = (currentPosition - 3 + cepstraBufferSize) % cepstraBufferSize; - int jf1 = (currentPosition + 1) % cepstraBufferSize; - int jf2 = (currentPosition + 2) % cepstraBufferSize; - int jf3 = (currentPosition + 3) % cepstraBufferSize; - - DoubleData currentCepstrum = cepstraBuffer[currentPosition]; - double[] mfc3f = cepstraBuffer[jf3].getValues(); - double[] mfc2f = cepstraBuffer[jf2].getValues(); - double[] mfc1f = cepstraBuffer[jf1].getValues(); - double[] current = currentCepstrum.getValues(); - double[] mfc1p = cepstraBuffer[jp1].getValues(); - double[] mfc2p = cepstraBuffer[jp2].getValues(); - double[] mfc3p = cepstraBuffer[jp3].getValues(); - float[] feature = new float[current.length * 3]; - - currentPosition = (currentPosition + 1) % cepstraBufferSize; - - // CEP; copy all the cepstrum data - int j = 0; - for (double val : current) { - feature[j++] = (float)val; - } - // System.arraycopy(current, 0, feature, 0, j); - // DCEP: mfc[2] - mfc[-2] - for (int k = 0; k < mfc2f.length; k++) { - feature[j++] = (float) (mfc2f[k] - mfc2p[k]); - } - // D2CEP: (mfc[3] - mfc[-1]) - (mfc[1] - mfc[-3]) - for (int k = 0; k < mfc3f.length; k++) { - feature[j++] = (float) ((mfc3f[k] - mfc1p[k]) - (mfc1f[k] - mfc3p[k])); - } - return (new FloatData(feature, - currentCepstrum.getSampleRate(), - currentCepstrum.getFirstSampleNumber())); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/FeatureTransform.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/FeatureTransform.java deleted file mode 100755 index 68cc4130..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/FeatureTransform.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright 1999-2010 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * Portions Copyright 2008 PC-NG Inc. - * - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.frontend.feature; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.*; -import edu.cmu.sphinx.util.props.*; - -/** - * Implements a linear feature transformation transformation. - * - * It might be a dimension reduction or just a decorrelation transform. This - * component requires a special model trained with LDA/MLLT transform. - */ -public class FeatureTransform extends BaseDataProcessor { - - /** - * The name of the transform matrix file. - */ - @S4Component(type = Loader.class) - public final static String PROP_LOADER = "loader"; - - float[][] transform; - protected Loader loader; - - int rows; - int values; - - public FeatureTransform(Loader loader) { - initLogger(); - init(loader); - } - - public FeatureTransform() { - } - - /* - * (non-Javadoc) - * - * @see - * edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util - * .props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - init((Loader) ps.getComponent(PROP_LOADER)); - } - - private void init(Loader loader) { - this.loader = loader; - - try { - loader.load(); - } catch (Exception e) { - e.printStackTrace(); - } - - transform = loader.getTransformMatrix(); - } - - /** - * Returns the next Data object being processed by this LDA, or if it is a - * Signal, it is returned without modification. - * - * @return the next available Data object, returns null if no Data object is - * available - * @throws DataProcessingException - * if there is a processing error - * @see Data - */ - @Override - public Data getData() throws DataProcessingException { - Data data = getPredecessor().getData(); - - if (null == transform || null == data || !(data instanceof FloatData)) - return data; - - FloatData floatData = (FloatData) data; - float[] features = floatData.getValues(); - - if (features.length > transform[0].length + 1) - throw new IllegalArgumentException("dimenstion mismatch"); - - float[] result = new float[transform.length]; - - for (int i = 0; i < transform.length; ++i) { - for (int j = 0; j < features.length; ++j) - result[i] += transform[i][j] * features[j]; - } - - if (features.length > transform[0].length) { - for (int i = 0; i < transform.length; ++i) - result[i] += transform[i][features.length]; - } - - return new FloatData(result, - floatData.getSampleRate(), - floatData.getFirstSampleNumber()); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/FrameDropper.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/FrameDropper.java deleted file mode 100755 index 07bb6588..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/FrameDropper.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.frontend.feature; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Boolean; -import edu.cmu.sphinx.util.props.S4Integer; - -/** - * Drops certain feature frames, usually to speed up decoding. For example, if you 'dropEveryNthFrame' is set to 2, it - * will drop every other feature frame. If you set 'replaceNthWithPrevious' to 3, then you replace with 3rd frame with - * the 2nd frame, the 6th frame with the 5th frame, etc.. - */ -public class FrameDropper extends BaseDataProcessor { - - /** - * The property that specifies dropping one in every Nth frame. If N=2, we drop every other frame. If N=3, we - * drop every third frame, etc.. - */ - @S4Integer(defaultValue = -1) - public static final String PROP_DROP_EVERY_NTH_FRAME - = "dropEveryNthFrame"; - - /** The property that specifies whether to replace the Nth frame with the previous frame. */ - @S4Boolean(defaultValue = false) - public static final String PROP_REPLACE_NTH_WITH_PREVIOUS - = "replaceNthWithPrevious"; - - private Data lastFeature; - private boolean replaceNthWithPrevious; - private int dropEveryNthFrame; - private int id; // first frame has ID "0", second "1", etc. - - /** - * @param dropEveryNthFrame frame count to drop - * @param replaceNthWithPrevious replace each nth frame with previous - */ - public FrameDropper( int dropEveryNthFrame, boolean replaceNthWithPrevious ) { - initLogger(); - initVars( dropEveryNthFrame, replaceNthWithPrevious); - } - - public FrameDropper( ) { - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - initVars( ps.getInt(PROP_DROP_EVERY_NTH_FRAME), ps.getBoolean(PROP_REPLACE_NTH_WITH_PREVIOUS)); - } - - protected void initVars( int dropEveryNthFrame, boolean replaceNthWithPrevious ) { - this.dropEveryNthFrame = dropEveryNthFrame; - if (dropEveryNthFrame <= 1) { - throw new IllegalArgumentException(PROP_DROP_EVERY_NTH_FRAME + - "must be greater than one"); - } - - this.replaceNthWithPrevious = replaceNthWithPrevious; - } - - /** Initializes this FrameDropper. */ - @Override - public void initialize() { - super.initialize(); - this.id = -1; - } - - - /** - * Returns the next Data object from this FrameDropper. The Data objects belonging to a single Utterance should be - * preceded by a DataStartSignal and ended by a DataEndSignal. - * - * @return the next available Data object, returns null if no Data object is available - * @throws DataProcessingException if a data processing error occurs - */ - @Override - public Data getData() throws DataProcessingException { - Data feature = readData(); - if (feature != null) { - if (!(feature instanceof Signal)) { - if ((id % dropEveryNthFrame) == (dropEveryNthFrame - 1)) { - // should drop the feature - if (replaceNthWithPrevious) { - // replace the feature - if (feature instanceof FloatData) { - FloatData floatLastFeature = (FloatData) - lastFeature; - feature = new FloatData - (floatLastFeature.getValues(), - floatLastFeature.getSampleRate(), - floatLastFeature.getFirstSampleNumber()); - } else { - DoubleData doubleLastFeature = (DoubleData) - lastFeature; - feature = new DoubleData - (doubleLastFeature.getValues(), - doubleLastFeature.getSampleRate(), - doubleLastFeature.getFirstSampleNumber()); - } - } else { - // read the next feature - feature = readData(); - } - } - } - if (feature != null) { - if (feature instanceof DataEndSignal) { - id = -1; - } - if (feature instanceof FloatData) { - lastFeature = feature; - } else { - lastFeature = null; - } - } else { - lastFeature = null; - } - } - - return feature; - } - - - /** - * Read a Data object from the predecessor DataProcessor, and increment the ID count appropriately. - * - * @return the read Data object - * @throws edu.cmu.sphinx.frontend.DataProcessingException - */ - private Data readData() throws DataProcessingException { - Data frame = getPredecessor().getData(); - if (frame != null) { - id++; - } - return frame; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/KaldiDeltasFeatureExtractor.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/KaldiDeltasFeatureExtractor.java deleted file mode 100755 index 464da3aa..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/KaldiDeltasFeatureExtractor.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 2013 Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.frontend.feature; - -import edu.cmu.sphinx.frontend.*; - -public class KaldiDeltasFeatureExtractor extends AbstractFeatureExtractor { - - public KaldiDeltasFeatureExtractor( int window ) { - super(window); - } - - public KaldiDeltasFeatureExtractor( ) { - } - - @Override - protected Data computeNextFeature() { - - int jp1 = (currentPosition - 1 + cepstraBufferSize) % cepstraBufferSize; - int jp2 = (currentPosition - 2 + cepstraBufferSize) % cepstraBufferSize; - int jp3 = (currentPosition - 3 + cepstraBufferSize) % cepstraBufferSize; - int jp4 = (currentPosition - 4 + cepstraBufferSize) % cepstraBufferSize; - int jf1 = (currentPosition + 1) % cepstraBufferSize; - int jf2 = (currentPosition + 2) % cepstraBufferSize; - int jf3 = (currentPosition + 3) % cepstraBufferSize; - int jf4 = (currentPosition + 4) % cepstraBufferSize; - - DoubleData currentCepstrum = cepstraBuffer[currentPosition]; - double[] mfc4f = cepstraBuffer[jf4].getValues(); - double[] mfc3f = cepstraBuffer[jf3].getValues(); - double[] mfc2f = cepstraBuffer[jf2].getValues(); - double[] mfc1f = cepstraBuffer[jf1].getValues(); - double[] current = currentCepstrum.getValues(); - double[] mfc1p = cepstraBuffer[jp1].getValues(); - double[] mfc2p = cepstraBuffer[jp2].getValues(); - double[] mfc3p = cepstraBuffer[jp3].getValues(); - double[] mfc4p = cepstraBuffer[jp4].getValues(); - float[] feature = new float[current.length * 3]; - - currentPosition = (currentPosition + 1) % cepstraBufferSize; - - int j = 0; - for (double val : current) { - feature[j++] = (float)val; - } - for (int k = 0; k < mfc2f.length; k++) { - feature[j++] = (float) (2 * mfc2f[k] + mfc1f[k] - mfc1p[k] - 2 * mfc2p[k]) / 10.0f; - } - - for (int k = 0; k < mfc3f.length; k++) { - feature[j++] = (float) ((4 * mfc4f[k] + 4 * mfc3f[k] + mfc2f[k] - 4 * mfc1f[k]) - 10 * current[k] + - (4 * mfc4p[k] + 4 * mfc3p[k] + mfc2p[k] - 4 * mfc1p[k])) / 100.0f; - } - return (new FloatData(feature, - currentCepstrum.getSampleRate(), - currentCepstrum.getFirstSampleNumber())); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/LiveCMN.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/LiveCMN.java deleted file mode 100755 index 9f8dc195..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/LiveCMN.java +++ /dev/null @@ -1,268 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.frontend.feature; - -import java.text.DecimalFormat; -import java.text.DecimalFormatSymbols; -import java.util.LinkedList; -import java.util.List; -import java.util.Locale; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.frontend.endpoint.SpeechEndSignal; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Integer; - -/** - * Subtracts the mean of all the input so far from the Data objects. - * - * Unlike the {@link BatchCMN}, it does not read in the entire stream of Data - * objects before it calculates the mean. It estimates the mean from already - * seen data and subtracts the mean from the Data objects on the fly. Therefore, - * there is no delay introduced by LiveCMN in general. The only real issue is an - * initial CMN estimation, for that some amount of frames are read initially - * and cmn estimation is calculated from them. - *

    - * The properties that affect this processor are defined by the fields - * {@link #PROP_INITIAL_CMN_WINDOW}, {@link #PROP_CMN_WINDOW}, and - * {@link #PROP_CMN_SHIFT_WINDOW}. Please follow the link - * "Constant Field Values" below to see the actual name of the Sphinx - * properties. - *

    - * The mean of all the input cepstrum so far is not reestimated for each - * cepstrum. This mean is recalculated after every - * {@link #PROP_CMN_SHIFT_WINDOW} cepstra. This mean is estimated by dividing - * the sum of all input cepstrum so far. After obtaining the mean, the sum is - * exponentially decayed by multiplying it by the ratio: - * - *

    - * cmnWindow/(cmnWindow + number of frames since the last recalculation)
    - * 
    - * - * @see BatchCMN - */ -public class LiveCMN extends BaseDataProcessor { - - private DecimalFormat formatter = new DecimalFormat("0.00;-0.00", new DecimalFormatSymbols(Locale.US));; - - /** The property for the live CMN initial window size. */ - @S4Integer(defaultValue = 200) - public static final String PROP_INITIAL_CMN_WINDOW = "initialCmnWindow"; - private int initialCmnWindow; - - /** The property for the live CMN window size. */ - @S4Integer(defaultValue = 300) - public static final String PROP_CMN_WINDOW = "cmnWindow"; - private int cmnWindow; - - /** - * The property for the CMN shifting window. The shifting window specifies - * how many cepstrum after which we re-calculate the cepstral mean. - */ - @S4Integer(defaultValue = 400) - public static final String PROP_CMN_SHIFT_WINDOW = "shiftWindow"; - private int cmnShiftWindow; // # of Cepstrum to recalculate mean - - private double[] currentMean; // array of current means - private double[] sum; // array of current sums - private int numberFrame; // total number of input Cepstrum - - List initialList; - - public LiveCMN(double initialMean, int cmnWindow, int cmnShiftWindow, int initialCmnWindow) { - initLogger(); - this.cmnWindow = cmnWindow; - this.cmnShiftWindow = cmnShiftWindow; - this.initialCmnWindow = initialCmnWindow; - } - - public LiveCMN() { - - } - - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - cmnWindow = ps.getInt(PROP_CMN_WINDOW); - cmnShiftWindow = ps.getInt(PROP_CMN_SHIFT_WINDOW); - initialCmnWindow = ps.getInt(PROP_INITIAL_CMN_WINDOW); - } - - /** Initializes this LiveCMN. */ - @Override - public void initialize() { - super.initialize(); - } - - /** - * Initializes the currentMean and sum arrays with the given cepstrum - * length. - * - * @param cepstrumLength - * the length of the cepstrum - */ - private void initMeansSums() { - int size = -1; - - for (Data data : initialList) { - if (!(data instanceof DoubleData)) - continue; - - double[] cepstrum = ((DoubleData) data).getValues(); - - // Initialize arrays if needed - if (size < 0) { - size = cepstrum.length; - sum = new double[size]; - numberFrame = 0; - } - - // Accumulate cepstrum, avoid counting zero energy in CMN - if (cepstrum[0] >= 0) { - for (int j = 0; j < size; j++) { - sum[j] += cepstrum[j]; - } - numberFrame++; - } - } - - // If we didn't meet any data, do nothing - if (size < 0) - return; - - currentMean = new double[size]; - for (int j = 0; j < size; j++) { - currentMean[j] = sum[j] / numberFrame; - } - } - - /** - * Returns the next Data object, which is a normalized Data produced by this - * class. Signals are returned unmodified. - * - * @return the next available Data object, returns null if no Data object is - * available - * @throws DataProcessingException - * if there is a data processing error - */ - @Override - public Data getData() throws DataProcessingException { - - Data input, output; - - if (initialList == null) { - initialList = new LinkedList(); - // Collect initial data for estimation - while (initialList.size() < initialCmnWindow) { - input = getPredecessor().getData(); - initialList.add(input); - if (input instanceof SpeechEndSignal - || input instanceof DataEndSignal) - break; - } - initMeansSums(); - output = initialList.remove(0); - } else if (!initialList.isEmpty()) { - // Return the previously collected data - output = initialList.remove(0); - } else { - // Process normal frame - output = getPredecessor().getData(); - } - - normalize(output); - return output; - } - - /** - * Normalizes the given Data with using the currentMean array. Updates the - * sum array with the given Data. - * - * @param cepstrumObject - * the Data object to normalize - */ - private void normalize(Data data) { - - if (!(data instanceof DoubleData)) - return; - - double[] cepstrum = ((DoubleData) data).getValues(); - - if (cepstrum.length != sum.length) { - throw new Error("Data length (" + cepstrum.length - + ") not equal sum array length (" + sum.length + ')'); - } - - // Accumulate cepstrum, avoid counting zero energy in CMN - if (cepstrum[0] >= 0) { - for (int j = 0; j < cepstrum.length; j++) { - sum[j] += cepstrum[j]; - } - numberFrame++; - } - - // Subtract current mean - for (int j = 0; j < cepstrum.length; j++) { - cepstrum[j] -= currentMean[j]; - } - - if (numberFrame > cmnShiftWindow) { - - StringBuilder cmn = new StringBuilder(); - // calculate the mean first - for (int i = 0; i < currentMean.length; i++) { - cmn.append (formatter.format(currentMean[i])); - cmn.append(' '); - } - logger.info(cmn.toString()); - - updateMeanSumBuffers(); - } - } - - /** - * Updates the currentMean buffer with the values in the sum buffer. Then - * decay the sum buffer exponentially, i.e., divide the sum with - * numberFrames. - */ - private void updateMeanSumBuffers() { - - // update the currentMean buffer with the sum buffer - double sf = 1.0 / numberFrame; - - System.arraycopy(sum, 0, currentMean, 0, sum.length); - - multiplyArray(currentMean, sf); - - // decay the sum buffer exponentially - if (numberFrame >= cmnShiftWindow) { - multiplyArray(sum, (sf * cmnWindow)); - numberFrame = cmnWindow; - } - } - - /** - * Multiplies each element of the given array by the multiplier. - * - * @param array - * the array to multiply - * @param multiplier - * the amount to multiply by - */ - private static void multiplyArray(double[] array, double multiplier) { - for (int i = 0; i < array.length; i++) { - array[i] *= multiplier; - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/S3FeatureExtractor.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/S3FeatureExtractor.java deleted file mode 100755 index 842e5e97..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/feature/S3FeatureExtractor.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.frontend.feature; - -import edu.cmu.sphinx.frontend.*; - -/** - * Computes the delta and double delta of input cepstrum (or plp or ...). The delta is the first order derivative and - * the double delta (a.k.a. delta delta) is the second order derivative of the original cepstrum. They help model the - * speech signal dynamics. The output data is a {@link FloatData} object with a float array of size three times the - * original cepstrum. - *

    - * The format of the outputted feature is: - *

    - * 12 cepstra (c[1] through c[12])
    followed by delta cepstra (delta c[1] through delta c[12])
    followed by c[0], - * delta c[0]
    followed by delta delta c[0] through delta delta c[12] - */ -public class S3FeatureExtractor extends AbstractFeatureExtractor { - - /** - * Computes the next feature. Advances the pointers as well. - * - * @return the feature Data computed - */ - @Override - protected Data computeNextFeature() { - - int jp1 = (currentPosition - 1 + cepstraBufferSize) % cepstraBufferSize; - int jp2 = (currentPosition - 2 + cepstraBufferSize) % cepstraBufferSize; - int jp3 = (currentPosition - 3 + cepstraBufferSize) % cepstraBufferSize; - int jf1 = (currentPosition + 1) % cepstraBufferSize; - int jf2 = (currentPosition + 2) % cepstraBufferSize; - int jf3 = (currentPosition + 3) % cepstraBufferSize; - - DoubleData currentCepstrum = cepstraBuffer[currentPosition]; - double[] mfc3f = cepstraBuffer[jf3].getValues(); - double[] mfc2f = cepstraBuffer[jf2].getValues(); - double[] mfc1f = cepstraBuffer[jf1].getValues(); - double[] current = currentCepstrum.getValues(); - double[] mfc1p = cepstraBuffer[jp1].getValues(); - double[] mfc2p = cepstraBuffer[jp2].getValues(); - double[] mfc3p = cepstraBuffer[jp3].getValues(); - float[] feature = new float[current.length * 3]; - - currentPosition = (currentPosition + 1)% cepstraBufferSize; - - // CEP; skip C[0] - int j = 0; - for (int k = 1; k < current.length; k++) { - feature[j++] = (float) current[k]; - } - - // DCEP: mfc[2] - mfc[-2], skip DC[0] - for (int k = 1; k < mfc2f.length; k++) { - feature[j++] = (float) (mfc2f[k] - mfc2p[k]); - } - - // POW: C0, DC0 - feature[j++] = (float) current[0]; - feature[j++] = (float) (mfc2f[0] - mfc2p[0]); - - // D2CEP: (mfc[3] - mfc[-1]) - (mfc[1] - mfc[-3]) - for (int k = 0; k < mfc3f.length; k++) { - feature[j++] = (float) - ((mfc3f[k] - mfc1p[k]) - (mfc1f[k] - mfc3p[k])); - } - - return (new FloatData(feature, - currentCepstrum.getSampleRate(), - currentCepstrum.getFirstSampleNumber())); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/filter/Dither.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/filter/Dither.java deleted file mode 100755 index 67ad7956..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/filter/Dither.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2002-2004 Sun Microsystems, Inc. - * Portions Copyright 2002-2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.frontend.filter; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Boolean; -import edu.cmu.sphinx.util.props.S4Double; - -import static java.lang.Math.max; -import static java.lang.Math.min; -import java.util.Random; - -/** - * Implements a dither for the incoming packet. A small amount of random noise is added - * to the signal to avoid floating point errors and prevent the energy from - * being zero.

    Other {@link Data} objects are passed along unchanged through - * this Dither processor.

    See also {@link EnergyFilter}, an alternative to Dither. - */ -public class Dither extends BaseDataProcessor { - - /** The maximal value which could be added/subtracted to/from the signal*/ - @S4Double(defaultValue = 2.0) - public static final String PROP_MAX_DITHER = "maxDither"; - private double ditherMax; - - /** The maximal value of dithered values. */ - @S4Double(defaultValue = Double.MAX_VALUE) - public static final String PROP_MAX_VAL = "upperValueBound"; - private double maxValue; - - /** The minimal value of dithered values. */ - @S4Double(defaultValue = -Double.MAX_VALUE) - public static final String PROP_MIN_VAL = "lowerValueBound"; - private double minValue; - - - /** The property about using random seed or not */ - @S4Boolean(defaultValue = false) - public static final String PROP_USE_RANDSEED = "useRandSeed"; - private boolean useRandSeed; - Random r; - - public Dither( double ditherMax, boolean useRandSeed, double maxValue, double minValue) { - initLogger(); - - this.ditherMax = ditherMax; - this.useRandSeed = useRandSeed; - - this.maxValue = maxValue; - this.minValue = minValue; - initialize(); - } - - public Dither( ) { - - } - - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - - ditherMax = ps.getDouble(PROP_MAX_DITHER); - useRandSeed = ps.getBoolean(PROP_USE_RANDSEED); - - maxValue = ps.getDouble(PROP_MAX_VAL); - minValue = ps.getDouble(PROP_MIN_VAL); - } - - @Override - public void initialize() { - super.initialize(); - if (useRandSeed) - r = new Random(); - else - r = new Random(12345); - } - - - /** - * Returns the next DoubleData object, which is a dithered version of the input - * - * @return the next available DoubleData object, or null if no Data is available - * @throws edu.cmu.sphinx.frontend.DataProcessingException - * if a data processing error occurred - */ - @Override - public Data getData() throws DataProcessingException { - Data input = getPredecessor().getData(); // get the spectrum - if (input != null && ditherMax != 0) { - if (input instanceof DoubleData || input instanceof FloatData) { - input = process(input); - } - } - return input; - } - - - /** - * Process data, adding dither - * - * @param input a frame - * @return processed frame - * @throws IllegalArgumentException - */ - private DoubleData process(Data input) throws IllegalArgumentException { - DoubleData output; - - assert input instanceof DoubleData; - double[] inFeatures; - - DoubleData doubleData = (DoubleData) input; - inFeatures = doubleData.getValues(); - double[] outFeatures = new double[inFeatures.length]; - for (int i = 0; i < inFeatures.length; ++i) { - outFeatures[i] = r.nextFloat() * 2 * ditherMax - ditherMax + inFeatures[i]; - outFeatures[i] = max(min(outFeatures[i], maxValue), minValue); - } - - output = new DoubleData(outFeatures, doubleData.getSampleRate(), - doubleData.getFirstSampleNumber()); - - return output; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/filter/EnergyFilter.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/filter/EnergyFilter.java deleted file mode 100755 index aa57b7ff..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/filter/EnergyFilter.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2002-2004 Sun Microsystems, Inc. - * Portions Copyright 2002-2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.frontend.filter; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Double; - -/** - * EnergyFilter silently drops zero energy frames from the stream. - * This is a deterministic alternative to {@link Dither}. - */ -public class EnergyFilter extends BaseDataProcessor { - - /** If energy is below this threshold frame is dropped */ - @S4Double(defaultValue = 2.0) - public static final String PROP_MAX_ENERGY = "maxEnergy"; - private double maxEnergy; - - public EnergyFilter( double maxEnergy) { - initLogger(); - this.maxEnergy = maxEnergy; - initialize(); - } - - public EnergyFilter( ) { - - } - - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - - maxEnergy = ps.getDouble(PROP_MAX_ENERGY); - } - - - /** - * Returns the next DoubleData object, skipping frames with zero energy - * - * @return the next available DoubleData object, or null if no Data is available - * @throws edu.cmu.sphinx.frontend.DataProcessingException - * if a data processing error occurred - */ - @Override - public Data getData() throws DataProcessingException { - float energy = 0; - Data input = null; - do { - input = getPredecessor().getData(); - if (input == null || !(input instanceof DoubleData)) - return input; - energy = 0.0f; - for (double d : ((DoubleData) input).getValues()) { - energy += d * d; - } - } while (energy < maxEnergy); - - return input; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/filter/Preemphasizer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/filter/Preemphasizer.java deleted file mode 100755 index 50100e62..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/filter/Preemphasizer.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2002-2004 Sun Microsystems, Inc. - * Portions Copyright 2002-2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.frontend.filter; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.frontend.endpoint.*; -import edu.cmu.sphinx.util.props.*; - -/** - * Implements a high-pass filter that compensates for attenuation in the audio data. Speech signals have an attenuation - * (a decrease in intensity of a signal) of 20 dB/dec. It increases the relative magnitude of the higher frequencies - * with respect to the lower frequencies. - *

    - * The Preemphasizer takes a {@link Data}object that usually represents audio data as input, and outputs the same {@link - * Data}object, but with preemphasis applied. For each value X[i] in the input Data object X, the following formula is - * applied to obtain the output Data object Y: - *

    - * Y[i] = X[i] - (X[i-1] * preemphasisFactor) - *

    - * where 'i' denotes time. - *

    - * The preemphasis factor has a value defined by the field {@link #PROP_PREEMPHASIS_FACTOR} of 0.97. A common value for - * this factor is something around 0.97. - *

    - * Other {@link Data}objects are passed along unchanged through this Preemphasizer. - *

    - * The Preemphasizer emphasizes the high frequency components, because they usually contain much less energy than lower - * frequency components, even though they are still important for speech recognition. It is a high-pass filter because - * it allows the high frequency components to "pass through", while weakening or filtering out the low frequency - * components. - */ -public class Preemphasizer extends BaseDataProcessor { - - /** The property for preemphasis factor/alpha. */ - @S4Double(defaultValue = 0.97) - public static final String PROP_PREEMPHASIS_FACTOR = "factor"; - - private double preemphasisFactor; - private double prior; - - public Preemphasizer( double preemphasisFactor ) { - initLogger(); - this.preemphasisFactor = preemphasisFactor; - } - - public Preemphasizer( ) { - - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - preemphasisFactor = ps.getDouble(PROP_PREEMPHASIS_FACTOR); - } - - - /** - * Returns the next Data object being processed by this Preemphasizer, or if it is a Signal, it is returned without - * modification. - * - * @return the next available Data object, returns null if no Data object is available - * @throws DataProcessingException if there is a processing error - * @see Data - */ - @Override - public Data getData() throws DataProcessingException { - Data input = getPredecessor().getData(); - if (input != null) { - if (input instanceof DoubleData) { - applyPreemphasis(((DoubleData) input).getValues()); - } else if (input instanceof DataEndSignal || input instanceof SpeechEndSignal) { - prior = 0; - } - } - return input; - } - - - /** - * Applies pre-emphasis filter to the given Audio. The preemphasis is applied in place. - * - * @param in audio data - */ - private void applyPreemphasis(double[] in) { - // set the prior value for the next Audio - double nextPrior = prior; - if (in.length > 0) { - nextPrior = in[in.length - 1]; - } - if (in.length > 1 && preemphasisFactor != 0.0) { - // do preemphasis - double current; - double previous = in[0]; - in[0] = previous - preemphasisFactor * prior; - for (int i = 1; i < in.length; i++) { - current = in[i]; - in[i] = current - preemphasisFactor * previous; - previous = current; - } - } - prior = nextPrior; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/FrequencyWarper.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/FrequencyWarper.java deleted file mode 100755 index cd88dd7a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/FrequencyWarper.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.frontend.frequencywarp; - -/** - * Defines the Bark frequency warping function. This class provides methods to convert frequencies from a linear scale - * to the bark scale. The bark scale is originated from measurements of the critical bandwidth. Please find more details - * in books about psychoacoustics or speech analysis/recognition. - * - * @author rsingh - * @version 1.0 - */ -public class FrequencyWarper { - - - /** - * Default null constructor. No fields to be initialized. - *

    - * Compute Bark frequency from linear frequency in Hertz. The function is: bark = 6.0*log(hertz/600 + - * sqrt((hertz/600)^2 + 1)) - * - * @param hertz the input frequency in Hertz - * @return the frequency in a Bark scale - */ - /* - public FrequencyWarper (){} - */ - - /** - * Compute Bark frequency from linear frequency in Hertz. - * The function is: - * bark = 6.0*log(hertz/600 + sqrt((hertz/600)^2 + 1)) - * - * @param hertz the input frequency in Hertz - * - * @return the frequency in a Bark scale - * - */ - public double hertzToBark(double hertz) { - double x = hertz / 600; - return (6.0 * Math.log(x + Math.sqrt(x * x + 1))); - } - - - /** - * Compute linear frequency in Hertz from Bark frequency. The function is: hertz = 300*(exp(bark/6.0) - - * exp(-bark/6.0)) - * - * @param bark the input frequency in Barks - * @return the frequency in Hertz - */ - public double barkToHertz(double bark) { - double x = bark / 6.0; - return (300.0 * (Math.exp(x) - Math.exp(-x))); - } - -}// FrequencyWarper diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/LinearPredictor.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/LinearPredictor.java deleted file mode 100755 index c41e0865..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/LinearPredictor.java +++ /dev/null @@ -1,205 +0,0 @@ -/** - * Contains Linear Prediction Coefficient functions. - * - * @author rsingh - * @version 1.0 - */ - -package edu.cmu.sphinx.frontend.frequencywarp; - -import java.util.Arrays; - -/** - * Computes the linear predictive model using the Levinson-Durbin algorithm. Linear prediction assumes that a signal can - * be model as a linear combination of previous samples, that is, the current sample x[i] can be modeled as: - *

     x[i] = a[0] + a[1] * x[i - 1] + a[2] * x[i - 2] + ... 
    - * The summation on the right hand side of the equation involves a finite number of terms. The number of previous - * samples used is the order of the linear prediction. - *

    - * This class also provides a method to compute LPC cepstra, that is, the cepstra computed from LPC coefficients, as - * well as a method to compute the bilinear transformation of the LPC - */ -public class LinearPredictor { - - private int order; - private int cepstrumOrder; - private double[] reflectionCoeffs; - private double[] ARParameters; - private double alpha; - private double[] cepstra; - private final double[] bilinearCepstra; - - - /** - * Constructs a LinearPredictor with the given order. - * - * @param order the order of the LinearPredictor - */ - public LinearPredictor(int order) { - this.order = order; - - // Set the rest to null values - reflectionCoeffs = null; - ARParameters = null; - alpha = 0; - cepstra = null; - bilinearCepstra = null; - } - - - /** - * Method to compute Linear Prediction Coefficients for a frame of speech. Assumes the following - * sign convention:
    prediction(x[t]) = Sum_i {Ar[i] * x[t-i]} - * - * @param autocor autocorrlation array - * @return the energy of the frame (alpha in the Levinson recursion) - */ - public double[] getARFilter(double[] autocor) { - /* No signal */ - if (autocor[0] == 0) { - return null; - } - reflectionCoeffs = new double[order + 1]; - ARParameters = new double[order + 1]; - double[] backwardPredictor = new double[order + 1]; - - alpha = autocor[0]; - reflectionCoeffs[1] = -autocor[1] / autocor[0]; - ARParameters[0] = 1.0; - ARParameters[1] = reflectionCoeffs[1]; - alpha *= (1 - reflectionCoeffs[1] * reflectionCoeffs[1]); - - for (int i = 2; i <= order; i++) { - for (int j = 1; j < i; j++) { - backwardPredictor[j] = ARParameters[i - j]; - } - reflectionCoeffs[i] = 0; - for (int j = 0; j < i; j++) { - reflectionCoeffs[i] -= ARParameters[j] * autocor[i - j]; - } - reflectionCoeffs[i] /= alpha; - - for (int j = 1; j < i; j++) { - ARParameters[j] += reflectionCoeffs[i] * backwardPredictor[j]; - } - ARParameters[i] = reflectionCoeffs[i]; - alpha *= (1 - reflectionCoeffs[i] * reflectionCoeffs[i]); - if (alpha <= 0.0) { - return null; - } - } - return ARParameters; - } - - - /** - * Computes AR parameters from a given set of reflection coefficients. - * - * @param RC double array of reflection coefficients. The RC array must begin at 1 (RC[0] is a dummy value) - * @param lpcorder AR order desired - * @return AR parameters - */ - public double[] reflectionCoeffsToARParameters(double[] RC, int lpcorder) { - double[][] tmp = new double[lpcorder + 1][lpcorder + 1]; - - order = lpcorder; - reflectionCoeffs = RC.clone(); - - for (int i = 1; i <= lpcorder; i++) { - for (int m = 1; m < i; m++) { - tmp[i][m] = tmp[i - 1][m] - RC[i] * tmp[i - 1][i - m]; - } - tmp[i][i] = RC[i]; - } - ARParameters[0] = 1; - for (int m = 1; m <= lpcorder; m++) { - ARParameters[m] = tmp[m][m]; - } - return ARParameters; - } - - - /** - * Computes LPC Cepstra from the AR predictor parameters and alpha using a recursion invented by Oppenheim et al. - * The literature shows the optimal value of cepstral order to be: - * - *

    0.75 * LPCorder <= ceporder <= 1.25 * LPCorder
    - * - * @param ceporder is the order of the LPC cepstral vector to be computed. - * @return LPC cepstra - */ - public double[] getData(int ceporder) { - int i; - double sum; - - if (ceporder <= 0) { - return null; - } - - cepstrumOrder = ceporder; - cepstra = new double[cepstrumOrder]; - - cepstra[0] = Math.log(alpha); - if (cepstrumOrder == 1) { - return cepstra; - } - - cepstra[1] = -ARParameters[1]; - - for (i = 2; i < Math.min(cepstrumOrder, order + 1); i++) { - sum = i * ARParameters[i]; - for (int j = 1; j < i; j++) { - sum += ARParameters[j] * cepstra[i - j] * (i - j); - } - cepstra[i] = -sum / i; - } - for (; i < cepstrumOrder; i++) { // Only if cepstrumOrder > order+1 - sum = 0; - for (int j = 1; j <= order; j++) { - sum += ARParameters[j] * cepstra[i - j] * (i - j); - } - cepstra[i] = -sum / i; - } - return cepstra; - } - - - /** - * Computes a bi-linear frequency warped version of the LPC cepstrum from the LPC cepstrum. The recursive algorithm - * used is defined in Oppenheim's paper in Proceedings of IEEE, June 1972 The program has been written using g[x,y] - * = g_o[x,-y] where g_o is the array used by Oppenheim. To handle the reversed array index the recursion has been - * done DOWN the array index. - * - * @param warp is the warping coefficient. For 16KHz speech 0.6 is good valued. - * @param nbilincepstra is the number of bilinear cepstral values to be computed from the linear frequency - * cepstrum. - * @return a bi-linear frequency warped version of the LPC cepstrum - */ - public double[] getBilinearCepstra(double warp, int nbilincepstra) { - double[][] g = new double[nbilincepstra][cepstrumOrder]; - - // Make a local copy as this gets destroyed - double[] lincep = Arrays.copyOf(cepstra, cepstrumOrder); - - bilinearCepstra[0] = lincep[0]; - lincep[0] = 0; - g[0][cepstrumOrder - 1] = lincep[cepstrumOrder - 1]; - for (int i = 1; i < nbilincepstra; i++) { - g[i][cepstrumOrder - 1] = 0; - } - - for (int i = cepstrumOrder - 2; i >= 0; i--) { - g[0][i] = warp * g[0][i + 1] + lincep[i]; - g[1][i] = (1 - warp * warp) * g[0][i + 1] + warp * g[1][i + 1]; - for (int j = 2; j < nbilincepstra; j++) { - g[j][i] = warp * (g[j][i + 1] - g[j - 1][i]) + g[j - 1][i + 1]; - } - } - - for (int i = 1; i <= nbilincepstra; i++) { - bilinearCepstra[i] = g[i][0]; - } - - return bilinearCepstra; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/MelFilter.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/MelFilter.java deleted file mode 100755 index c4b9bb30..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/MelFilter.java +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - - -package edu.cmu.sphinx.frontend.frequencywarp; - - -/** - * Defines a triangular mel-filter. The {@link edu.cmu.sphinx.frontend.frequencywarp.MelFrequencyFilterBank} creates - * mel-filters and filters spectrum data. - *

    - * A mel-filter is a triangular shaped bandpass filter. When a mel-filter is constructed, the parameters - * leftEdge, rightEdge, centerFreq, initialFreq, and - * deltaFreq are given to the {@link MelFilter Constructor}. The first three arguments to the constructor, - * i.e. leftEdge, rightEdge, and centerFreq, specify the filter's slopes. The - * total area under the filter is 1. The filter is shaped as a triangle. Knowing the distance between the center - * frequency and each of the edges, it is easy to compute the slopes of the two sides in the triangle - the third side - * being the frequency axis. The last two arguments, initialFreq and deltaFreq, identify the - * first frequency bin that falls inside this filter and the spacing between successive frequency bins. All frequencies - * here are considered in a linear scale. - *

    - * Figure 1 below shows pictorially what the other parameters mean. - *

    - * Mel filter

    Figure 1: A triangular mel-filter.
    - * - * @see MelFrequencyFilterBank - */ -public class MelFilter { - - private double[] weight; - - private int initialFreqIndex; - - - /** - * Constructs a filter from the parameters. - *

    - * In the current implementation, the filter is a bandpass filter with a triangular shape. We're given the left and - * right edges and the center frequency, so we can determine the right and left slopes, which could be not only - * asymmetric but completely different. We're also given the initial frequency, which may or may not coincide with - * the left edge, and the frequency step. - * - * @param leftEdge the filter's lowest passing frequency - * @param centerFreq the filter's center frequency - * @param rightEdge the filter's highest passing frequency - * @param initialFreq the first frequency bin in the pass band - * @param deltaFreq the step in the frequency axis between frequency bins - * @throws IllegalArgumentException if input is invalid - */ - public MelFilter(double leftEdge, - double centerFreq, - double rightEdge, - double initialFreq, - double deltaFreq) throws IllegalArgumentException { - double filterHeight; - double leftSlope; - double rightSlope; - double currentFreq; - int indexFilterWeight; - int numberElementsWeightField; - - if (deltaFreq == 0) { - throw new IllegalArgumentException("deltaFreq has zero value"); - } - /** - * Check if the left and right boundaries of the filter are - * too close. - */ - if ((Math.round(rightEdge - leftEdge) == 0) - || (Math.round(centerFreq - leftEdge) == 0) - || (Math.round(rightEdge - centerFreq) == 0)) { - throw new IllegalArgumentException("Filter boundaries too close"); - } - /** - * Let's compute the number of elements we need in the - * weight field by computing how many frequency - * bins we can fit in the current frequency range. - */ - numberElementsWeightField = - (int) Math.round((rightEdge - leftEdge) / deltaFreq + 1); - /** - * Initialize the weight field. - */ - if (numberElementsWeightField == 0) { - throw new IllegalArgumentException("Number of elements in mel" - + " is zero."); - } - weight = new double[numberElementsWeightField]; - - /** - * Let's make the filter area equal to 1. - */ - filterHeight = 2.0f / (rightEdge - leftEdge); - - /** - * Now let's compute the slopes based on the height. - */ - leftSlope = filterHeight / (centerFreq - leftEdge); - rightSlope = filterHeight / (centerFreq - rightEdge); - - /** - * Now let's compute the weight for each frequency bin. We - * initialize and update two variables in the for - * line. - */ - for (currentFreq = initialFreq, indexFilterWeight = 0; - currentFreq <= rightEdge; - currentFreq += deltaFreq, indexFilterWeight++) { - /** - * A straight line that contains point (x0, y0) and - * has slope m is defined by: - * - * y = y0 + m * (x - x0) - * - * This is used for both "sides" of the triangular filter - * below. - */ - if (currentFreq < centerFreq) { - weight[indexFilterWeight] = leftSlope - * (currentFreq - leftEdge); - } else { - weight[indexFilterWeight] = filterHeight + rightSlope - * (currentFreq - centerFreq); - } - } - /** - * Initializing frequency related fields. - */ - this.initialFreqIndex = (int) Math.round - (initialFreq / deltaFreq); - } - - - /** - * Compute the output of a filter. We're given a power spectrum, to which we apply the appropriate weights. - * - * @param spectrum the input power spectrum to be filtered - * @return the filtered value, in fact a weighted average of power in the frequency range of the filter pass band - */ - public double filterOutput(double[] spectrum) { - double output = 0.0f; - int indexSpectrum; - - for (int i = 0; i < this.weight.length; i++) { - indexSpectrum = this.initialFreqIndex + i; - if (indexSpectrum < spectrum.length) { - output += spectrum[indexSpectrum] * this.weight[i]; - } - } - return output; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/MelFilter2.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/MelFilter2.java deleted file mode 100755 index ab4f8ace..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/MelFilter2.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun * Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * - * All Rights Reserved. Use is subject to license terms. - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ - -package edu.cmu.sphinx.frontend.frequencywarp; - -import static java.util.Arrays.copyOfRange; - -/** - * Defines a triangular mel-filter. - * - * The {@link MelFrequencyFilterBank2} creates mel-filters and filters spectrum. - * - * A mel-filter is a triangular shaped bandpass filter. When a mel-filter is - * constructed, the parameters leftEdge, rightEdge, - * centerFreq, initialFreq, and - * deltaFreq are given to the {@link MelFilter2 Constructor}. The - * first three arguments to the constructor, i.e. leftEdge, - * rightEdge, and centerFreq, specify the filter's - * slopes. The total area under the filter is 1. The filter is shaped as a - * triangle. Knowing the distance between the center frequency and each of the - * edges, it is easy to compute the slopes of the two sides in the triangle - - * the third side being the frequency axis. The last two arguments, - * initialFreq and deltaFreq, identify the first - * frequency bin that falls inside this filter and the spacing between - * successive frequency bins. All frequencies here are considered in a linear - * scale. - * - * Figure 1 below shows pictorially what the other parameters mean. - * - * Mel filter
    - *

    Figure 1: A triangular mel-filter.
    - * - * @see MelFrequencyFilterBank2 - */ -public class MelFilter2 { - - private final int offset; - private final double[] weights; - - public MelFilter2(double center, double delta, double[] melPoints) { - int lastIndex = 0; - int firstIndex = melPoints.length; - double left = center - delta; - double right = center + delta; - double [] heights = new double[melPoints.length]; - - for (int i = 0; i < heights.length; ++i) { - if (left < melPoints[i] && melPoints[i] <= center) { - heights[i] = (melPoints[i] - left) / (center - left); - firstIndex = Math.min(i, firstIndex); - lastIndex = i; - } - - if (center < melPoints[i] && melPoints[i] < right) { - heights[i] = (right - melPoints[i]) / (right - center); - lastIndex = i; - } - } - - offset = firstIndex; - weights = copyOfRange(heights, firstIndex, lastIndex + 1); - } - - public double apply(double[] powerSpectrum) { - double result = 0; - for (int i = 0; i < weights.length; ++i) - result += weights[i] * powerSpectrum[offset + i]; - - return result; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/MelFrequencyFilterBank.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/MelFrequencyFilterBank.java deleted file mode 100755 index 1061313f..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/MelFrequencyFilterBank.java +++ /dev/null @@ -1,299 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.frontend.frequencywarp; - -import edu.cmu.sphinx.frontend.BaseDataProcessor; -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.frontend.DataProcessingException; -import edu.cmu.sphinx.frontend.DoubleData; -import edu.cmu.sphinx.util.props.*; - -/** - * Filters an input power spectrum through a bank of number of mel-filters. The output is an array of filtered values, - * typically called mel-spectrum, each corresponding to the result of filtering the input spectrum through an individual - * filter. Therefore, the length of the output array is equal to the number of filters created. - *

    - * The triangular mel-filters in the filter bank are placed in the frequency axis so that each filter's center frequency - * follows the mel scale, in such a way that the filter bank mimics the critical band, which represents different - * perceptual effect at different frequency bands. Additionally, the edges are placed so that they coincide with the - * center frequencies in adjacent filters. Pictorially, the filter bank looks like: - *

    - * Filterbank

    Figure 1: A Mel-filter bank.
    - *

    - * As you might notice in the above figure, the distance at the base from the center to the left edge is different from - * the center to the right edge. Since the center frequencies follow the mel-frequency scale, which is a non-linear - * scale that models the non-linear human hearing behavior, the mel filter bank corresponds to a warping of the - * frequency axis. As can be inferred from the figure, filtering with the mel scale emphasizes the lower frequencies. A - * common model for the relation between frequencies in mel and linear scales is as follows: - *

    - * melFrequency = 2595 * log(1 + linearFrequency/700) - *

    - * The constants that define the filterbank are the number of filters, the minimum frequency, and the maximum frequency. - * The minimum and maximum frequencies determine the frequency range spanned by the filterbank. These frequencies depend - * on the channel and the sampling frequency that you are using. For telephone speech, since the telephone channel - * corresponds to a bandpass filter with cutoff frequencies of around 300Hz and 3700Hz, using limits wider than these - * would waste bandwidth. For clean speech, the minimum frequency should be higher than about 100Hz, since there is no - * speech information below it. Furthermore, by setting the minimum frequency above 50/60Hz, we get rid of the hum - * resulting from the AC power, if present. - *

    - * The maximum frequency has to be lower than the Nyquist frequency, that is, half the sampling rate. Furthermore, there - * is not much information above 6800Hz that can be used for improving separation between models. Particularly for very - * noisy channels, maximum frequency of around 5000Hz may help cut off the noise. - *

    - * Typical values for the constants defining the filter bank are:
    Sample rate - * (Hz) 16000 11025 8000
    {@link - * #PROP_NUMBER_FILTERS numberFilters} 40 36 31
    {@link #PROP_MIN_FREQ - * minimumFrequency}(Hz) 130 130 200
    {@link #PROP_MAX_FREQ - * maximumFrequency}(Hz) 6800 5400 3500
    - *

    - * Davis and Mermelstein showed that Mel-frequency cepstral coefficients present robust characteristics that are good - * for speech recognition. For details, see Davis and Mermelstein, Comparison of Parametric Representations for - * Monosyllable Word Recognition in Continuously Spoken Sentences, IEEE Transactions on Acoustic, Speech and Signal - * Processing, 1980 . - * - * @see MelFilter - */ -public class MelFrequencyFilterBank extends BaseDataProcessor { - - /** The property for the number of filters in the filterbank. */ - @S4Integer(defaultValue = 40) - public static final String PROP_NUMBER_FILTERS = "numberFilters"; - - /** The property for the minimum frequency covered by the filterbank. */ - @S4Double(defaultValue = 130.0) - public static final String PROP_MIN_FREQ = "minimumFrequency"; - - /** The property for the maximum frequency covered by the filterbank. */ - @S4Double(defaultValue = 6800.0) - public static final String PROP_MAX_FREQ = "maximumFrequency"; - - // ---------------------------------- - // Configuration data - // ---------------------------------- - private int sampleRate; - private int numberFftPoints; - private int numberFilters; - private double minFreq; - private double maxFreq; - private MelFilter[] filter; - - - public MelFrequencyFilterBank(double minFreq, double maxFreq, int numberFilters) { - initLogger(); - this.minFreq = minFreq; - this.maxFreq = maxFreq; - this.numberFilters = numberFilters; - } - - public MelFrequencyFilterBank() { - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - minFreq = ps.getDouble(PROP_MIN_FREQ); - maxFreq = ps.getDouble(PROP_MAX_FREQ); - numberFilters = ps.getInt(PROP_NUMBER_FILTERS); - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.frontend.DataProcessor#initialize(edu.cmu.sphinx.frontend.CommonConfig) - */ - @Override - public void initialize() { - super.initialize(); - } - - - /** - * Compute mel frequency from linear frequency. - *

    - * Since we don't have log10(), we have to compute it using natural log: log10(x) = ln(x) / ln(10) - * - * - * @param inputFreq the input frequency in linear scale - * @return the frequency in a mel scale - */ - private double linToMelFreq(double inputFreq) { - return (2595.0 * (Math.log(1.0 + inputFreq / 700.0) / Math.log(10.0))); - } - - - /** - * Compute linear frequency from mel frequency. - * - * @param inputFreq the input frequency in mel scale - * @return the frequency in a linear scale - */ - private double melToLinFreq(double inputFreq) { - return (700.0 * (Math.pow(10.0, (inputFreq / 2595.0)) - 1.0)); - } - - - /** - * Sets the given frequency to the nearest frequency bin from the FFT. The FFT can be thought of as a sampling of - * the actual spectrum of a signal. We use this function to find the sampling point of the spectrum that is closest - * to the given frequency. - * - * @param inFreq the input frequency - * @param stepFreq the distance between frequency bins - * @return the closest frequency bin - * @throws IllegalArgumentException - */ - private double setToNearestFrequencyBin(double inFreq, double stepFreq) - throws IllegalArgumentException { - if (stepFreq == 0) { - throw new IllegalArgumentException("stepFreq is zero"); - } - return stepFreq * Math.round(inFreq / stepFreq); - } - - - /** - * Build a mel filterbank with the parameters given. Each filter will be shaped as a triangle. The triangles overlap - * so that they cover the whole frequency range requested. The edges of a given triangle will be by default at the - * center of the neighboring triangles. - * - * @param numberFftPoints number of points in the power spectrum - * @param numberFilters number of filters in the filterbank - * @param minFreq lowest frequency in the range of interest - * @param maxFreq highest frequency in the range of interest - * @throws IllegalArgumentException - */ - private void buildFilterbank(int numberFftPoints, int numberFilters, - double minFreq, double maxFreq) throws IllegalArgumentException { - double minFreqMel; - double maxFreqMel; - double deltaFreqMel; - double[] leftEdge = new double[numberFilters]; - double[] centerFreq = new double[numberFilters]; - double[] rightEdge = new double[numberFilters]; - double nextEdgeMel; - double nextEdge; - double initialFreqBin; - double deltaFreq; - this.filter = new MelFilter[numberFilters]; - /** - * In fact, the ratio should be between sampleRate / - * 2 - * and numberFftPoints / 2 since the number of points in - * the power spectrum is half of the number of FFT points - the other - * half would be symmetrical for a real sequence -, and these points - * cover up to the Nyquist frequency, which is half of the sampling - * rate. The two "divide by 2" get canceled out. - */ - if (numberFftPoints == 0) { - throw new IllegalArgumentException("Number of FFT points is zero"); - } - deltaFreq = (double) sampleRate / numberFftPoints; - /** - * Initialize edges and center freq. These variables will be updated so - * that the center frequency of a filter is the right edge of the - * filter to its left, and the left edge of the filter to its right. - */ - if (numberFilters < 1) { - throw new IllegalArgumentException("Number of filters illegal: " - + numberFilters); - } - minFreqMel = linToMelFreq(minFreq); - maxFreqMel = linToMelFreq(maxFreq); - deltaFreqMel = (maxFreqMel - minFreqMel) / (numberFilters + 1); - leftEdge[0] = setToNearestFrequencyBin(minFreq, deltaFreq); - nextEdgeMel = minFreqMel; - for (int i = 0; i < numberFilters; i++) { - nextEdgeMel += deltaFreqMel; - nextEdge = melToLinFreq(nextEdgeMel); - centerFreq[i] = setToNearestFrequencyBin(nextEdge, deltaFreq); - if (i > 0) { - rightEdge[i - 1] = centerFreq[i]; - } - if (i < numberFilters - 1) { - leftEdge[i + 1] = centerFreq[i]; - } - } - nextEdgeMel = nextEdgeMel + deltaFreqMel; - nextEdge = melToLinFreq(nextEdgeMel); - rightEdge[numberFilters - 1] = setToNearestFrequencyBin(nextEdge, - deltaFreq); - for (int i = 0; i < numberFilters; i++) { - initialFreqBin = setToNearestFrequencyBin(leftEdge[i], deltaFreq); - if (initialFreqBin < leftEdge[i]) { - initialFreqBin += deltaFreq; - } - //System.out.format("%d %f %f\n", i, leftEdge[i], rightEdge[i]); - this.filter[i] = new MelFilter(leftEdge[i], centerFreq[i], - rightEdge[i], initialFreqBin, deltaFreq); - } - } - - - /** - * Process data, creating the power spectrum from an input audio frame. - * - * @param input input power spectrum - * @return power spectrum - * @throws java.lang.IllegalArgumentException - * - */ - private DoubleData process(DoubleData input) - throws IllegalArgumentException { - double[] in = input.getValues(); - - if (filter == null || sampleRate != input.getSampleRate()) { - numberFftPoints = (in.length - 1) << 1; - sampleRate = input.getSampleRate(); - buildFilterbank(numberFftPoints, numberFilters, minFreq, maxFreq); - } else if (in.length != ((numberFftPoints >> 1) + 1)) { - throw new IllegalArgumentException( - "Window size is incorrect: in.length == " + in.length - + ", numberFftPoints == " - + ((numberFftPoints >> 1) + 1)); - } - double[] output = new double[numberFilters]; - /** - * Filter input power spectrum - */ - for (int i = 0; i < numberFilters; i++) { - output[i] = filter[i].filterOutput(in); - } - DoubleData outputMelSpectrum = new DoubleData(output, - sampleRate, input.getFirstSampleNumber()); - return outputMelSpectrum; - } - - - /** - * Reads the next Data object, which is the power spectrum of an audio input frame. Signals are returned - * unmodified. - * - * @return the next available Data or Signal object, or returns null if no Data is available - * @throws DataProcessingException if there is a data processing error - */ - @Override - public Data getData() throws DataProcessingException { - Data input = getPredecessor().getData(); - if (input != null) { - if (input instanceof DoubleData) { - input = process((DoubleData) input); - } - } - return input; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/MelFrequencyFilterBank2.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/MelFrequencyFilterBank2.java deleted file mode 100755 index 38d83216..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/MelFrequencyFilterBank2.java +++ /dev/null @@ -1,264 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.frontend.frequencywarp; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.util.props.*; - -/** - * Filters an input power spectrum through a bank of number of mel-filters. The - * output is an array of filtered values, typically called mel-spectrum, each - * corresponding to the result of filtering the input spectrum through an - * individual filter. Therefore, the length of the output array is equal to the - * number of filters created. - *

    - * The triangular mel-filters in the filter bank are placed in the frequency - * axis so that each filter's center frequency follows the mel scale, in such a - * way that the filter bank mimics the critical band, which represents - * different perceptual effect at different frequency bands. Additionally, the - * edges are placed so that they coincide with the center frequencies in - * adjacent filters. Pictorially, the filter bank looks like: - *

    - * Mel filter bank
    - *

    Figure 1: A Mel-filter bank.
    - *

    - * As you might notice in the above figure, the distance at the base from the - * center to the left edge is different from the center to the right edge. - * Since the center frequencies follow the mel-frequency scale, which is a - * non-linear scale that models the non-linear human hearing behavior, the mel - * filter bank corresponds to a warping of the frequency axis. As can be - * inferred from the figure, filtering with the mel scale emphasizes the lower - * frequencies. A common model for the relation between frequencies in mel and - * linear scales is as follows: - *

    - * melFrequency = 2595 * log(1 + linearFrequency/700) - *

    - * The constants that define the filterbank are the number of filters, the - * minimum frequency, and the maximum frequency. The minimum and maximum - * frequencies determine the frequency range spanned by the filterbank. These - * frequencies depend on the channel and the sampling frequency that you are - * using. For telephone speech, since the telephone channel corresponds to a - * bandpass filter with cutoff frequencies of around 300Hz and 3700Hz, using - * limits wider than these would waste bandwidth. For clean speech, the minimum - * frequency should be higher than about 100Hz, since there is no speech - * information below it. Furthermore, by setting the minimum frequency above - * 50/60Hz, we get rid of the hum resulting from the AC power, if present. - *

    - * The maximum frequency has to be lower than the Nyquist frequency, that is, - * half the sampling rate. Furthermore, there is not much information above - * 6800Hz that can be used for improving separation between models. - * Particularly for very noisy channels, maximum frequency of around 5000Hz may - * help cut off the noise. - *

    - * Typical values for the constants defining the filter bank are: - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
    Sample rate (Hz) 16000 11025 8000
    {@link #PROP_NUMBER_FILTERS numberFilters}403631
    {@link #PROP_MIN_FREQ minimumFrequency}(Hz)130130200
    {@link #PROP_MAX_FREQ maximumFrequency}(Hz)680054003500
    - *

    - * Davis and Mermelstein showed that Mel-frequency cepstral coefficients - * present robust characteristics that are good for speech recognition. For - * details, see Davis and Mermelstein, Comparison of Parametric - * Representations for Monosyllable Word Recognition in Continuously Spoken - * Sentences, IEEE Transactions on Acoustic, Speech and Signal Processing, 1980 - * . - * - * @see MelFilter2 - */ -public class MelFrequencyFilterBank2 extends BaseDataProcessor { - - /** The property for the number of filters in the filterbank. */ - @S4Integer(defaultValue = 40) - public static final String PROP_NUMBER_FILTERS = "numberFilters"; - - /** The property for the minimum frequency covered by the filterbank. */ - @S4Double(defaultValue = 130.0) - public static final String PROP_MIN_FREQ = "minimumFrequency"; - - /** The property for the maximum frequency covered by the filterbank. */ - @S4Double(defaultValue = 6800.0) - public static final String PROP_MAX_FREQ = "maximumFrequency"; - - // ---------------------------------- - // Configuration data - // ---------------------------------- - private int sampleRate; - private int numberFilters; - private double minFreq; - private double maxFreq; - - private MelFilter2[] filters; - - public MelFrequencyFilterBank2(double minFreq, double maxFreq, - int numberFilters) { - initLogger(); - this.minFreq = minFreq; - this.maxFreq = maxFreq; - this.numberFilters = numberFilters; - } - - public MelFrequencyFilterBank2() { - } - - /* - * (non-Javadoc) - * @see - * edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx. - * util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - minFreq = ps.getDouble(PROP_MIN_FREQ); - maxFreq = ps.getDouble(PROP_MAX_FREQ); - numberFilters = ps.getInt(PROP_NUMBER_FILTERS); - } - - /* - * (non-Javadoc) - * @see - * edu.cmu.sphinx.frontend.DataProcessor#initialize(edu.cmu.sphinx.frontend - * .CommonConfig) - */ - @Override - public void initialize() { - super.initialize(); - } - - /** - * Compute mel frequency from linear frequency. - * - * @param inputFreq the input frequency in linear scale - * @return the frequency in a mel scale - */ - private double linearToMel(double inputFreq) { - return 1127 * Math.log1p(inputFreq / 700); - } - - /** - * Build a mel filterbank with the parameters given. Each filter will be - * shaped as a triangle. The triangles overlap so that they cover the whole - * frequency range requested. The edges of a given triangle will be by - * default at the center of the neighboring triangles. - * - * @param windowLength number of points in the power spectrum - * @param numberFilters number of filters in the filterbank - * @param minFreq lowest frequency in the range of interest - * @param maxFreq highest frequency in the range of interest - * @throws IllegalArgumentException - */ - private void buildFilterbank(int windowLength, - int numberFilters, - double minFreq, - double maxFreq) - throws IllegalArgumentException - { - assert windowLength > 0; - assert numberFilters > 0; - // Initialize edges and center freq. These variables will be updated so - // that the center frequency of a filter is the right edge of the - // filter to its left, and the left edge of the filter to its right. - - double minFreqMel = linearToMel(minFreq); - double maxFreqMel = linearToMel(maxFreq); - double deltaFreqMel = (maxFreqMel - minFreqMel) / (numberFilters + 1); - // In fact, the ratio should be between sampleRate / - // 2 and numberFftPoints / 2 since the number of - // points in the power spectrum is half of the number of FFT points - - // the other half would be symmetrical for a real sequence -, and - // these points cover up to the Nyquist frequency, which is half of - // the sampling rate. The two "divide by 2" get canceled out. - double deltaFreq = (double) sampleRate / windowLength; - double[] melPoints = new double[windowLength / 2]; - filters = new MelFilter2[numberFilters]; - - for (int i = 0; i < windowLength / 2; ++i) - melPoints[i] = linearToMel(i * deltaFreq); - - for (int i = 0; i < numberFilters; i++) { - double centerMel = minFreqMel + (i + 1) * deltaFreqMel; - filters[i] = new MelFilter2(centerMel, deltaFreqMel, melPoints); - } - } - - /** - * Process data, creating the power spectrum from an input audio frame. - * - * @param input input power spectrum - * @return power spectrum - * @throws java.lang.IllegalArgumentException - */ - private DoubleData process(DoubleData input) - throws IllegalArgumentException { - double[] in = input.getValues(); - int windowLength = (in.length - 1) << 1; - - if (filters == null || sampleRate != input.getSampleRate()) { - sampleRate = input.getSampleRate(); - buildFilterbank(windowLength, numberFilters, minFreq, maxFreq); - } else if (in.length != ((windowLength >> 1) + 1)) { - throw new IllegalArgumentException("Window size is incorrect: in.length == " - + in.length - + ", numberFftPoints == " - + ((windowLength >> 1) + 1)); - } - - double[] output = new double[numberFilters]; - for (int i = 0; i < numberFilters; i++) - output[i] = filters[i].apply(in); - - DoubleData outputMelSpectrum = new DoubleData(output, - sampleRate, - input.getFirstSampleNumber()); - return outputMelSpectrum; - } - - /** - * Reads the next Data object, which is the power spectrum of an audio - * input frame. Signals are returned unmodified. - * - * @return the next available Data or Signal object, or returns null if no - * Data is available - * @throws DataProcessingException if there is a data processing error - */ - @Override - public Data getData() throws DataProcessingException { - Data input = getPredecessor().getData(); - if (input != null) { - if (input instanceof DoubleData) { - input = process((DoubleData) input); - } - } - return input; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/PLPCepstrumProducer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/PLPCepstrumProducer.java deleted file mode 100755 index c9f53a77..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/PLPCepstrumProducer.java +++ /dev/null @@ -1,210 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - - -package edu.cmu.sphinx.frontend.frequencywarp; - -import edu.cmu.sphinx.frontend.BaseDataProcessor; -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.frontend.DataProcessingException; -import edu.cmu.sphinx.frontend.DoubleData; -import edu.cmu.sphinx.util.props.*; - -/** - * Computes the PLP cepstrum from a given PLP Spectrum. The power spectrum has the amplitude compressed by computing the - * cubed root of the PLP spectrum. This operation is an approximation to the power law of hearing and simulates the - * non-linear relationship between sound intensity and perceived loudness. Computationally, this operation is used to - * reduce the spectral amplitude of the critical band to enable all-pole modeling with relatively low order AR filters. - * The inverse discrete cosine transform (IDCT) is then applied to the autocorrelation coefficients. A linear prediction - * filter is then estimated from the autocorrelation values, and the linear prediction cepstrum (LPC cepstrum) is - * finally computed from the LP filter. - * - * @author rsingh - * @version 1.0 - * @see LinearPredictor - */ -public class PLPCepstrumProducer extends BaseDataProcessor { - - /** The property for the number of filters in the filter bank. */ - @S4Integer(defaultValue = 32) - public static final String PROP_NUMBER_FILTERS = "numberFilters"; - - /** The property specifying the length of the cepstrum data. */ - @S4Integer(defaultValue = 13) - public static final String PROP_CEPSTRUM_LENGTH - = "cepstrumLength"; - - /** The property specifying the LPC order. */ - @S4Integer(defaultValue = 14) - public static final String PROP_LPC_ORDER = "lpcOrder"; - - private int cepstrumSize; // size of a Cepstrum - private int LPCOrder; // LPC Order to compute cepstrum - private int numberPLPFilters; // number of PLP filters - private double[][] cosine; - - public PLPCepstrumProducer(int numberPLPFilters,int cepstrumSize,int LPCOrder) { - initLogger(); - this.numberPLPFilters = numberPLPFilters; - this.cepstrumSize = cepstrumSize; - this.LPCOrder = LPCOrder; - } - - public PLPCepstrumProducer() { - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - numberPLPFilters = ps.getInt(PROP_NUMBER_FILTERS); - cepstrumSize = ps.getInt(PROP_CEPSTRUM_LENGTH); - LPCOrder = ps.getInt(PROP_LPC_ORDER); - } - - - /** Constructs a PLPCepstrumProducer */ - @Override - public void initialize() { - super.initialize(); - computeCosine(); - } - - - /** Compute the Cosine values for IDCT. */ - private void computeCosine() { - cosine = new double[LPCOrder + 1][numberPLPFilters]; - - double period = (double) 2 * numberPLPFilters; - - for (int i = 0; i <= LPCOrder; i++) { - double frequency = 2 * Math.PI * i / period; - - for (int j = 0; j < numberPLPFilters; j++) { - cosine[i][j] = Math.cos(frequency * (j + 0.5)); - } - } - } - - - /** - * Applies the intensity loudness power law. This operation is an approximation to the power law of hearing and - * simulates the non-linear relationship between sound intensity and percieved loudness. Computationally, this - * operation is used to reduce the spectral amplitude of the critical band to enable all-pole modeling with - * relatively low order AR filters. - * @param inspectrum - */ - private double[] powerLawCompress(double[] inspectrum) { - double[] compressedspectrum = new double[inspectrum.length]; - - for (int i = 0; i < inspectrum.length; i++) { - compressedspectrum[i] = Math.pow(inspectrum[i], 1.0 / 3.0); - } - return compressedspectrum; - } - - - /** - * Returns the next Data object, which is the PLP cepstrum of the input frame. However, it can also be other Data - * objects like a EndPointSignal. - * - * @return the next available Data object, returns null if no Data object is available - * @throws DataProcessingException if there is an error reading the Data objects - */ - @Override - public Data getData() throws DataProcessingException { - - Data input = getPredecessor().getData(); - Data output = input; - - if (input != null) { - if (input instanceof DoubleData) { - output = process((DoubleData) input); - } - } - - return output; - } - - - /** - * Process data, creating the PLP cepstrum from an input audio frame. - * - * @param input a PLP Spectrum frame - * @return a PLP Data frame - * @throws IllegalArgumentException - */ - private Data process(DoubleData input) throws IllegalArgumentException { - - double[] plpspectrum = input.getValues(); - - if (plpspectrum.length != numberPLPFilters) { - throw new IllegalArgumentException - ("PLPSpectrum size is incorrect: plpspectrum.length == " + - plpspectrum.length + ", numberPLPFilters == " + - numberPLPFilters); - } - - // power law compress spectrum - double[] compressedspectrum = powerLawCompress(plpspectrum); - - // compute autocorrelation values - double[] autocor = applyCosine(compressedspectrum); - - LinearPredictor LPC = new LinearPredictor(LPCOrder); - // Compute LPC Parameters - LPC.getARFilter(autocor); - // Compute LPC Cepstra - double[] cepstrumDouble = LPC.getData(cepstrumSize); - - DoubleData cepstrum = new DoubleData - (cepstrumDouble, input.getSampleRate(), - input.getFirstSampleNumber()); - - return cepstrum; - } - - - /** - * Compute the discrete Cosine transform for the given power spectrum - * - * @param plpspectrum the PLPSpectrum data - * @return autocorrelation computed from PLP spectral values - */ - private double[] applyCosine(double[] plpspectrum) { - - double[] autocor = new double[LPCOrder + 1]; - double period = numberPLPFilters; - double beta = 0.5f; - - // apply the idct - for (int i = 0; i <= LPCOrder; i++) { - - if (numberPLPFilters > 0) { - double[] cosine_i = cosine[i]; - int j = 0; - autocor[i] += (beta * plpspectrum[j] * cosine_i[j]); - - for (j = 1; j < numberPLPFilters; j++) { - autocor[i] += (plpspectrum[j] * cosine_i[j]); - } - autocor[i] /= period; - } - } - - return autocor; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/PLPFilter.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/PLPFilter.java deleted file mode 100755 index ba28a437..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/PLPFilter.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - - -package edu.cmu.sphinx.frontend.frequencywarp; - - -/** - * Defines a filter used by the {@link PLPFrequencyFilterBank} class. The filter is defined by a function in the {@link - * #PLPFilter Constructor}. A set of equally spaced frequencies in a linear scale is passed to the constructor, which - * returns the weights for each of the frequency bins, such that the filter has the shape defined by this piecewise - * function in the bark scale. - * - * @author rsingh - * @version 1.0 - * @see PLPFrequencyFilterBank - */ -public class PLPFilter { - - private double[] filterCoefficients; - private final int numDFTPoints; - - /** The center frequency of the filter in Hertz. */ - public final double centerFreqInHz; - - /** The center frequency of the filter in Bark. */ - public final double centerFreqInBark; - - - /** - * Constructs a PLP filter around a given center frequency. - *

    - * Defines a filter according to the following equation, defined piecewise (all frequencies in the equation are Bark - * frequencies): - *

    -     * Filter(f) = 0 if f < -2.5 
    - * = 10^(-(f+0.5)) if -2.5 <= f <= -0.5
    - * = 1 if -0.5 <= f <= 0.5
    - * = 10^(2.5(f-0.5)) if 0.5 <= f <= 1.3
    - * = 0 if f > 1.3
    - *
    - * The current implementation assumes that the calling routine passes in an array of frequencies, one for each of - * the DFT points in the spectrum of the frame of speech to be filtered. This is used in conjunction with a - * specified center frequency to determine the filter. - * - * @param DFTFrequenciesInHz is a double array containing the frequencies in Hertz corresponding to each of the DFT - * points in the spectrum of the signal to be filtered. - * @param centerFreqInHz is the filter's center frequency - * @throws IllegalArgumentException if center frequency is wrong - */ - - - public PLPFilter(double[] DFTFrequenciesInHz, - double centerFreqInHz) throws IllegalArgumentException { - - FrequencyWarper bark = new FrequencyWarper(); - - numDFTPoints = DFTFrequenciesInHz.length; - this.centerFreqInHz = centerFreqInHz; - centerFreqInBark = bark.hertzToBark(centerFreqInHz); - - if (centerFreqInHz < DFTFrequenciesInHz[0] || - centerFreqInHz > DFTFrequenciesInHz[numDFTPoints - 1]) { - throw new IllegalArgumentException - ("Center frequency for PLP filter out of range"); - } - - filterCoefficients = new double[numDFTPoints]; - - for (int i = 0; i < numDFTPoints; i++) { - double barkf; - - barkf = bark.hertzToBark(DFTFrequenciesInHz[i]) - centerFreqInBark; - if (barkf < -2.5) - filterCoefficients[i] = 0.0; - else if (barkf <= -0.5) - filterCoefficients[i] = Math.pow(10.0, barkf + 0.5); - else if (barkf <= 0.5) - filterCoefficients[i] = 1.0; - else if (barkf <= 1.3) - filterCoefficients[i] = Math.pow(10.0, -2.5 * (barkf - 0.5)); - else - filterCoefficients[i] = 0.0; - } - } - - - /** - * Compute the PLP spectrum at the center frequency of this filter for a given power spectrum. - * - * @param spectrum the input power spectrum to be filtered - * @return the PLP spectrum value - * @throws IllegalArgumentException if the input spectrum is of a different length than the array of filter - * coefficients - */ - public double filterOutput(double[] spectrum) - throws IllegalArgumentException { - - if (spectrum.length != numDFTPoints) { - throw new IllegalArgumentException - ("Mismatch in no. of DFT points " + spectrum.length + - " in spectrum and in filter " + numDFTPoints); - } - - double output = 0.0; - for (int i = 0; i < numDFTPoints; i++) { - output += spectrum[i] * filterCoefficients[i]; - } - return output; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/PLPFrequencyFilterBank.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/PLPFrequencyFilterBank.java deleted file mode 100755 index 429ab7e3..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/frequencywarp/PLPFrequencyFilterBank.java +++ /dev/null @@ -1,249 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.frontend.frequencywarp; - -import edu.cmu.sphinx.frontend.BaseDataProcessor; -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.frontend.DataProcessingException; -import edu.cmu.sphinx.frontend.DoubleData; -import edu.cmu.sphinx.util.props.*; - -/** - * Filters an input power spectrum through a PLP filterbank. The filters in the filterbank are placed in the frequency - * axis so as to mimic the critical band, representing different perceptual effect at different frequency bands. The - * filter outputs are also scaled for equal loudness preemphasis. The filter shapes are defined by the {@link PLPFilter} - * class. Like the {@link MelFrequencyFilterBank2}, this filter bank has characteristics defined by the {@link - * #PROP_NUMBER_FILTERS number of filters}, the {@link #PROP_MIN_FREQ minimum frequency}, and the {@link #PROP_MAX_FREQ - * maximum frequency}. Unlike the {@link MelFrequencyFilterBank2}, the minimum and maximum frequencies here refer to the - * center frequencies of the filters located at the leftmost and rightmost positions, and not to the edges. - * Therefore, this filter bank spans a frequency range that goes beyond the limits suggested by the minimum and maximum - * frequencies. - * - * @author rsingh - * @version 1.0 - * @see PLPFilter - */ -public class PLPFrequencyFilterBank extends BaseDataProcessor { - - /** The property for the number of filters in the filterbank. */ - @S4Integer(defaultValue = 32) - public static final String PROP_NUMBER_FILTERS = "numberFilters"; - - /** The property for the center frequency of the lowest filter in the filterbank. */ - @S4Double(defaultValue = 130.0) - public static final String PROP_MIN_FREQ = "minimumFrequency"; - - /** The property for the center frequency of the highest filter in the filterbank. */ - @S4Double(defaultValue = 3600.0) - public static final String PROP_MAX_FREQ = "maximumFrequency"; - - private int sampleRate; - private int numberFftPoints; - private int numberFilters; - private double minFreq; - private double maxFreq; - private PLPFilter[] criticalBandFilter; - private double[] equalLoudnessScaling; - - - public PLPFrequencyFilterBank(double minFreq, double maxFreq, int numberFilters) { - initLogger(); - this.minFreq = minFreq; - this.maxFreq = maxFreq; - this.numberFilters = numberFilters; - } - - public PLPFrequencyFilterBank() { - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - minFreq = ps.getDouble(PROP_MIN_FREQ); - maxFreq = ps.getDouble(PROP_MAX_FREQ); - numberFilters = ps.getInt(PROP_NUMBER_FILTERS); - } - - - /** Initializes this PLPFrequencyFilterBank object */ - @Override - public void initialize() { - super.initialize(); - } - - - /** - * Build a PLP filterbank with the parameters given. The center frequencies of the PLP filters will be uniformly - * spaced between the minimum and maximum analysis frequencies on the Bark scale. on the Bark scale. - * - * @throws IllegalArgumentException - */ - private void buildCriticalBandFilterbank() throws IllegalArgumentException { - double minBarkFreq; - double maxBarkFreq; - double deltaBarkFreq; - double nyquistFreq; - double centerFreq; - int numberDFTPoints = (numberFftPoints >> 1) + 1; - double[] DFTFrequencies; - - /* This is the same class of warper called by PLPFilter.java */ - FrequencyWarper bark = new FrequencyWarper(); - - this.criticalBandFilter = new PLPFilter[numberFilters]; - - if (numberFftPoints == 0) { - throw new IllegalArgumentException("Number of FFT points is zero"); - } - if (numberFilters < 1) { - throw new IllegalArgumentException("Number of filters illegal: " - + numberFilters); - } - - DFTFrequencies = new double[numberDFTPoints]; - nyquistFreq = sampleRate / 2; - for (int i = 0; i < numberDFTPoints; i++) { - DFTFrequencies[i] = i * nyquistFreq / - (numberDFTPoints - 1); - } - - /** - * Find center frequencies of filters in the Bark scale - * translate to linear frequency and create PLP filters - * with these center frequencies. - * - * Note that minFreq and maxFreq specify the CENTER FREQUENCIES - * of the lowest and highest PLP filters - */ - - - minBarkFreq = bark.hertzToBark(minFreq); - maxBarkFreq = bark.hertzToBark(maxFreq); - - if (numberFilters < 1) { - throw new IllegalArgumentException("Number of filters illegal: " - + numberFilters); - } - deltaBarkFreq = (maxBarkFreq - minBarkFreq) / (numberFilters + 1); - - for (int i = 0; i < numberFilters; i++) { - centerFreq = bark.barkToHertz(minBarkFreq + i * deltaBarkFreq); - criticalBandFilter[i] = new PLPFilter(DFTFrequencies, centerFreq); - } - } - - - /** - * This function return the equal loudness preemphasis factor at any frequency. The preemphasis function is given - * by - *

    - * E(w) = f^4 / (f^2 + 1.6e5) ^ 2 * (f^2 + 1.44e6) / (f^2 + 9.61e6) - *

    - * This is more modern one from HTK, for some reason it's preferred over old variant, and - * it doesn't require conversion to radians - *

    - * E(w) = (w^2+56.8e6)*w^4/((w^2+6.3e6)^2(w^2+0.38e9)(w^6+9.58e26)) - *

    - * where w is frequency in radians/second - * @param freq - */ - private double loudnessScalingFunction(double freq) { - double fsq = freq * freq; - double fsub = fsq / (fsq + 1.6e5); - return fsub * fsub * ((fsq + 1.44e6) / (fsq + 9.61e6)); - } - - - /** Create an array of equal loudness preemphasis scaling terms for all the filters */ - private void buildEqualLoudnessScalingFactors() { - double centerFreq; - - equalLoudnessScaling = new double[numberFilters]; - for (int i = 0; i < numberFilters; i++) { - centerFreq = criticalBandFilter[i].centerFreqInHz; - equalLoudnessScaling[i] = loudnessScalingFunction(centerFreq); - } - } - - - /** - * Process data, creating the power spectrum from an input audio frame. - * - * @param input input power spectrum - * @return PLP power spectrum - * @throws java.lang.IllegalArgumentException - * - */ - private DoubleData process(DoubleData input) throws - IllegalArgumentException { - - double[] in = input.getValues(); - - if (criticalBandFilter == null || - sampleRate != input.getSampleRate()) { - numberFftPoints = (in.length - 1) << 1; - sampleRate = input.getSampleRate(); - buildCriticalBandFilterbank(); - buildEqualLoudnessScalingFactors(); - - } else if (in.length != ((numberFftPoints >> 1) + 1)) { - throw new IllegalArgumentException - ("Window size is incorrect: in.length == " + in.length + - ", numberFftPoints == " + ((numberFftPoints >> 1) + 1)); - } - - double[] outputPLPSpectralArray = new double[numberFilters]; - - /** - * Filter input power spectrum - */ - for (int i = 0; i < numberFilters; i++) { - // First compute critical band filter output - outputPLPSpectralArray[i] = criticalBandFilter[i].filterOutput(in); - // Then scale it for equal loudness preemphasis - outputPLPSpectralArray[i] *= equalLoudnessScaling[i]; - } - - DoubleData output = new DoubleData - (outputPLPSpectralArray, input.getSampleRate(), - input.getFirstSampleNumber()); - - return output; - } - - - /** - * Reads the next Data object, which is the power spectrum of an audio input frame. However, it can also be other - * Data objects like a Signal, which is returned unmodified. - * - * @return the next available Data object, returns null if no Data object is available - * @throws DataProcessingException if there is a data processing error - */ - @Override - public Data getData() throws DataProcessingException { - - Data input = getPredecessor().getData(); - if (input != null) { - if (input instanceof DoubleData) { - input = process((DoubleData) input); - } - } - - return input; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/transform/DiscreteCosineTransform.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/transform/DiscreteCosineTransform.java deleted file mode 100755 index d95d2f22..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/transform/DiscreteCosineTransform.java +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2002-2004 Sun Microsystems, Inc. - * Portions Copyright 2002-2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.frontend.transform; - -import edu.cmu.sphinx.frontend.BaseDataProcessor; -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.frontend.DataProcessingException; -import edu.cmu.sphinx.frontend.DoubleData; -import edu.cmu.sphinx.util.props.*; - -/** - * Applies a logarithm and then a Discrete Cosine Transform (DCT) to the input data. The input data is normally the mel - * spectrum. It has been proven that, for a sequence of real numbers, the discrete cosine transform is equivalent to the - * discrete Fourier transform. Therefore, this class corresponds to the last stage of converting a signal to cepstra, - * defined as the inverse Fourier transform of the logarithm of the Fourier transform of a signal. The property {@link - * #PROP_CEPSTRUM_LENGTH}refers to the dimensionality of the coefficients that are actually returned, defaulting to - * 13. When the input is mel-spectrum, the vector returned is the MFCC (Mel-Frequency - * Cepstral Coefficient) vector, where the 0-th element is the energy value. - */ -public class DiscreteCosineTransform extends BaseDataProcessor { - - /** The property for the number of filters in the filterbank. */ - @S4Integer(defaultValue = 40) - public static final String PROP_NUMBER_FILTERS = "numberFilters"; - - /** The property for the size of the cepstrum */ - @S4Integer(defaultValue = 13) - public static final String PROP_CEPSTRUM_LENGTH = "cepstrumLength"; - - protected int cepstrumSize; // size of a Cepstrum - protected int numberMelFilters; // number of mel-filters - protected double[][] melcosine; - - - public DiscreteCosineTransform( int numberMelFilters, int cepstrumSize ) { - initLogger(); - this.numberMelFilters = numberMelFilters; - this.cepstrumSize = cepstrumSize; - } - - public DiscreteCosineTransform( ) { - } - - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - - numberMelFilters = ps.getInt(PROP_NUMBER_FILTERS); - cepstrumSize = ps.getInt(PROP_CEPSTRUM_LENGTH); - } - - - @Override - public void initialize() { - super.initialize(); - } - - - /** - * Returns the next DoubleData object, which is the mel cepstrum of the input frame. Signals are returned - * unmodified. - * - * @return the next available DoubleData melcepstrum, or Signal object, or null if no Data is available - * @throws DataProcessingException if a data processing error occurred - */ - @Override - public Data getData() throws DataProcessingException { - Data input = getPredecessor().getData(); // get the spectrum - if (input != null && input instanceof DoubleData) { - input = process((DoubleData) input); - } - return input; - } - - final static double LOG_FLOOR = 1e-4; - - /** - * Process data, creating the mel cepstrum from an input spectrum frame. - * - * @param input a MelSpectrum frame - * @return a mel Cepstrum frame - * @throws IllegalArgumentException - */ - private DoubleData process(DoubleData input) - throws IllegalArgumentException { - double[] melspectrum = input.getValues(); - - if (melcosine == null) { - numberMelFilters = melspectrum.length; - computeMelCosine(); - - } else if (melspectrum.length != numberMelFilters) { - throw new IllegalArgumentException - ("MelSpectrum size is incorrect: melspectrum.length == " + - melspectrum.length + ", numberMelFilters == " + - numberMelFilters); - } - // first compute the log of the spectrum - for (int i = 0; i < melspectrum.length; ++i) { - melspectrum[i] = Math.log(melspectrum[i] + LOG_FLOOR); - } - - double[] cepstrum; - - // create the cepstrum by apply the melcosine filter - cepstrum = applyMelCosine(melspectrum); - - return new DoubleData(cepstrum, input.getSampleRate(), - input.getFirstSampleNumber()); - } - - - /** Compute the MelCosine filter bank. */ - protected void computeMelCosine() { - melcosine = new double[cepstrumSize][numberMelFilters]; - double period = (double) 2 * numberMelFilters; - for (int i = 0; i < cepstrumSize; i++) { - double frequency = 2 * Math.PI * i / period; - for (int j = 0; j < numberMelFilters; j++) { - melcosine[i][j] = Math.cos(frequency * (j + 0.5)); - } - } - } - - - /** - * Apply the MelCosine filter to the given melspectrum. - * - * @param melspectrum the MelSpectrum data - * @return MelCepstrum data produced by apply the MelCosine filter to the MelSpectrum data - */ - protected double[] applyMelCosine(double[] melspectrum) { - // create the cepstrum - double[] cepstrum = new double[cepstrumSize]; - double period = numberMelFilters; - double beta = 0.5; - // apply the melcosine filter - for (int i = 0; i < cepstrum.length; i++) { - if (numberMelFilters > 0) { - double[] melcosine_i = melcosine[i]; - int j = 0; - cepstrum[i] += (beta * melspectrum[j] * melcosine_i[j]); - for (j = 1; j < numberMelFilters; j++) { - cepstrum[i] += (melspectrum[j] * melcosine_i[j]); - } - cepstrum[i] /= period; - } - } - - return cepstrum; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/transform/DiscreteCosineTransform2.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/transform/DiscreteCosineTransform2.java deleted file mode 100755 index a34a5def..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/transform/DiscreteCosineTransform2.java +++ /dev/null @@ -1,58 +0,0 @@ -package edu.cmu.sphinx.frontend.transform; - -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.PropertyException; - -/** Applies the optimized MelCosine filter used in pocketsphinx to the given melspectrum. */ -public class DiscreteCosineTransform2 extends DiscreteCosineTransform { - - public DiscreteCosineTransform2( int numberMelFilters, int cepstrumSize ) { - super(numberMelFilters,cepstrumSize); - } - - public DiscreteCosineTransform2( ) { - } - - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - } - - - /** - * Apply the optimized MelCosine filter used in pocketsphinx to the given melspectrum. - * - * @param melspectrum the MelSpectrum data - * @return MelCepstrum data produced by apply the MelCosine filter to the MelSpectrum data - */ - @Override - protected double[] applyMelCosine(double[] melspectrum) { - - // create the cepstrum - double[] cepstrum = new double[cepstrumSize]; - double sqrt_inv_n = Math.sqrt(1.0 / numberMelFilters); - double sqrt_inv_2n = Math.sqrt(2.0 / numberMelFilters); - - cepstrum[0] = melspectrum[0]; - for (int j = 1; j < numberMelFilters; j++) { - cepstrum[0] += melspectrum[j]; - } - - cepstrum[0] *= sqrt_inv_n; - - if (numberMelFilters <= 0) { - return cepstrum; - } - - for (int i = 1; i < cepstrum.length; i++) { - double[] melcosine_i = melcosine[i]; - int j = 0; - cepstrum[i] = 0; - for (j = 0; j < numberMelFilters; j++) { - cepstrum[i] += (melspectrum[j] * melcosine_i[j]); - } - cepstrum[i] *= sqrt_inv_2n; - } - return cepstrum; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/transform/DiscreteFourierTransform.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/transform/DiscreteFourierTransform.java deleted file mode 100755 index 7869175f..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/transform/DiscreteFourierTransform.java +++ /dev/null @@ -1,464 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2002-2004 Sun Microsystems, Inc. - * Portions Copyright 2002-2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.frontend.transform; - -import edu.cmu.sphinx.frontend.BaseDataProcessor; -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.frontend.DataProcessingException; -import edu.cmu.sphinx.frontend.DoubleData; -import edu.cmu.sphinx.util.Complex; -import edu.cmu.sphinx.util.props.*; - - -/** - * Computes the Discrete Fourier Transform (FT) of an input sequence, using Fast Fourier Transform (FFT). Fourier - * Transform is the process of analyzing a signal into its frequency components. In speech, rather than analyzing the - * signal over its entire duration, we analyze one window of audio data. This window is the product of applying a - * sliding Hamming window to the signal. Moreover, since the amplitude is a lot more important than the phase for speech - * recognition, this class returns the power spectrum of that window of data instead of the complex spectrum. Each value - * in the returned spectrum represents the strength of that particular frequency for that window of data. - *

    - * By default, the number of FFT points is the closest power of 2 that is equal to or larger than the number of samples - * in the incoming window of data. The FFT points can also be set by the user with the property defined by {@link - * #PROP_NUMBER_FFT_POINTS}. The length of the returned power spectrum is the number of FFT points, divided by 2, plus - * 1. Since the input signal is real, the FFT is symmetric, and the information contained in the whole vector is already - * present in its first half. - *

    - * Note that each call to {@link #getData() getData} only returns the spectrum of one window of data. To display the - * spectrogram of the entire original audio, one has to collect all the spectra from all the windows generated from the - * original data. A spectrogram is a two dimensional representation of three dimensional information. The horizontal - * axis represents time. The vertical axis represents the frequency. If we slice the spectrogram at a given time, we get - * the spectrum computed as the short term Fourier transform of the signal windowed around that time stamp. The - * intensity of the spectrum for each time frame is given by the color in the graph, or by the darkness in a gray scale - * plot. The spectrogram can be thought of as a view from the top of a surface generated by concatenating the spectral - * vectors obtained from the windowed signal. - *

    - * For example, Figure 1 below shows the audio signal of the utterance "one three nine oh", and Figure 2 shows its - * spectrogram, produced by putting together all the spectra returned by this FFT. Frequency is on the vertical axis, - * and time is on the horizontal axis. The darkness of the shade represents the strength of that frequency at that point - * in time:


    Audio signal
    Figure 1: The audio signal of the utterance "one three nine - * oh".


    Spectrogram
    Figure 2: The spectrogram of the utterance "one three - * nine oh" in Figure 1. - */ -public class DiscreteFourierTransform extends BaseDataProcessor { - - /** The property for the number of points in the Fourier Transform. */ - @S4Integer(defaultValue = -1) - public static final String PROP_NUMBER_FFT_POINTS = "numberFftPoints"; - - /** The property for the invert transform. */ - @S4Boolean(defaultValue = false) - public static final String PROP_INVERT = "invert"; - - private boolean isNumberFftPointsSet; - private int numberFftPoints; - private int logBase2NumberFftPoints; - private int numberDataPoints; - private boolean invert; - - private Complex[] weightFft; - private Complex[] inputFrame; - private Complex[] from; - private Complex[] to; - - private Complex weightFftTimesFrom2; - private Complex tempComplex; - - public DiscreteFourierTransform( int numberFftPoints, boolean invert ) { - initLogger(); - this.numberFftPoints = numberFftPoints; - this.isNumberFftPointsSet = (numberFftPoints != -1); - this.invert = invert; - } - - public DiscreteFourierTransform() { - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - logger = ps.getLogger(); - numberFftPoints = ps.getInt(PROP_NUMBER_FFT_POINTS); - isNumberFftPointsSet = (numberFftPoints != -1); - invert = ps.getBoolean(PROP_INVERT); - } - - - /* (non-Javadoc) - * @see edu.cmu.sphinx.frontend.DataProcessor#initialize(edu.cmu.sphinx.frontend.CommonConfig) - */ - @Override - public void initialize() { - super.initialize(); - if (isNumberFftPointsSet) { - initializeFFT(); - } - } - - - /** Initialize all the data structures necessary for computing FFT. */ - private void initializeFFT() { - /** - * Number of points in the FFT. By default, the value is 512, - * which means that we compute 512 values around a circle in the - * complex plane. Complex conjugate pairs will yield the same - * power, therefore the power produced by indices 256 through - * 511 are symmetrical with the ones between 1 and 254. Therefore, - * we need only return values between 0 and 255. - */ - computeLogBase2(numberFftPoints); - createWeightFft(numberFftPoints, invert); - initComplexArrays(); - weightFftTimesFrom2 = new Complex(); - tempComplex = new Complex(); - } - - - /** Initialize all the Complex arrays that will be necessary for FFT. */ - private void initComplexArrays() { - - inputFrame = new Complex[numberFftPoints]; - from = new Complex[numberFftPoints]; - to = new Complex[numberFftPoints]; - - for (int i = 0; i < numberFftPoints; i++) { - inputFrame[i] = new Complex(); - from[i] = new Complex(); - to[i] = new Complex(); - } - } - - - /** - * Process data, creating the power spectrum from an input frame. - * - * @param input the input frame - * @return a DoubleData that is the power spectrum of the input frame - * @throws java.lang.IllegalArgumentException - * - */ - private DoubleData process(DoubleData input) - throws IllegalArgumentException { - - /** - * Create complex input sequence equivalent to the real - * input sequence. - * If the number of points is less than the window size, - * we incur in aliasing. If it's greater, we pad the input - * sequence with zeros. - */ - double[] in = input.getValues(); - - if (numberFftPoints < in.length) { - int i = 0; - for (; i < numberFftPoints; i++) { - inputFrame[i].set(in[i], 0.0f); - } - for (; i < in.length; i++) { - tempComplex.set(in[i], 0.0f); - inputFrame[i % numberFftPoints].addComplex - (inputFrame[i % numberFftPoints], tempComplex); - } - } else { - int i = 0; - for (; i < in.length; i++) { - inputFrame[i].set(in[i], 0.0f); - } - for (; i < numberFftPoints; i++) { - inputFrame[i].reset(); - } - } - - /** - * Create output sequence. - */ - double[] outputSpectrum = new double[(numberFftPoints >> 1) + 1]; - - /** - * Start Fast Fourier Transform recursion - */ - recurseFft(inputFrame, outputSpectrum, numberFftPoints, invert); - - /** - * Return the power spectrum - */ - DoubleData output = new DoubleData - (outputSpectrum, input.getSampleRate(), - input.getFirstSampleNumber()); - - return output; - } - - - /** - * Make sure the number of points in the FFT is a power of 2 by computing its log base 2 and checking for - * remainders. - * - * @param numberFftPoints number of points in the FFT - * @throws java.lang.IllegalArgumentException - * - */ - private void computeLogBase2(int numberFftPoints) - throws IllegalArgumentException { - this.logBase2NumberFftPoints = 0; - for (int k = numberFftPoints; k > 1; - k >>= 1, this.logBase2NumberFftPoints++) { - if (((k % 2) != 0) || (numberFftPoints < 0)) { - throw new IllegalArgumentException("Not a power of 2: " - + numberFftPoints); - } - } - } - - - /** - * Initializes the weightFft[] vector.

    weightFft[k] = w ^ k

    where:

    w = exp(-2 * PI * i / - * N)

    i is a complex number such that i * i = -1 and N is the number of points in - * the FFT. Since w is complex, this is the same as

    Re(weightFft[k]) = cos ( -2 * PI * k / - * N)

    Im(weightFft[k]) = sin ( -2 * PI * k / N)

    - * - * @param numberFftPoints number of points in the FFT - * @param invert whether it's direct (false) or inverse (true) FFT - */ - private void createWeightFft(int numberFftPoints, boolean invert) { - /** - * weightFFT will have numberFftPoints/2 complex elements. - */ - weightFft = new Complex[numberFftPoints >> 1]; - - /** - * For the inverse FFT, - * w = 2 * PI / numberFftPoints; - */ - double w = -2 * Math.PI / numberFftPoints; - if (invert) { - w = -w; - } - - for (int k = 0; k < (numberFftPoints >> 1); k++) { - weightFft[k] = new Complex(Math.cos(w * k), Math.sin(w * k)); - } - } - - - /** - * Reads the next DoubleData object, which is a data frame from which we'll compute the power spectrum. Signal - * objects just pass through unmodified. - * - * @return the next available power spectrum DoubleData object, or null if no Spectrum object is available - * @throws DataProcessingException if there is a processing error - */ - @Override - public Data getData() throws DataProcessingException { - - Data input = getPredecessor().getData(); - - if ((input != null) && (input instanceof DoubleData)) { - DoubleData data = (DoubleData) input; - if (!isNumberFftPointsSet) { - /* - * If numberFftPoints is not set by the user, - * figure out the numberFftPoints and initialize the - * data structures appropriately. - */ - if (numberDataPoints != data.getValues().length) { - numberDataPoints = data.getValues().length; - numberFftPoints = getNumberFftPoints(numberDataPoints); - initializeFFT(); - } - } else { - /* - * Warn if the user-set numberFftPoints is not ideal. - */ - if (numberDataPoints != data.getValues().length) { - numberDataPoints = data.getValues().length; - int idealFftPoints = getNumberFftPoints(numberDataPoints); - if (idealFftPoints != numberFftPoints) { - logger.warning("User set numberFftPoints (" + - numberFftPoints + ") is not ideal (" + - idealFftPoints + ')'); - } - } - } - input = process(data); - } - - // At this point - or in the call immediatelly preceding - // this -, we should have created a cepstrum frame with - // whatever data came last, even if we had less than - // window size of data. - - return input; - } - - - /** - * Returns the ideal number of FFT points given the number of samples. The ideal number of FFT points is the closest - * power of 2 that is equal to or larger than the number of samples in the incoming window. - * - * @param numberSamples the number of samples in the incoming window - * @return the closest power of 2 that is equal to or larger than the number of samples in the incoming window - */ - private static int getNumberFftPoints(int numberSamples) { - int fftPoints = 1; - - while (fftPoints < numberSamples) { - fftPoints <<= 1; - if (fftPoints < 1) { - throw new Error("Invalid # of FFT points: " + fftPoints); - } - } - return fftPoints; - } - - - /** - * Establish the recursion. The FFT computation will be computed by as a recursion. Each stage in the butterfly will - * be fully computed during recursion. In fact, we use the mechanism of recursion only because it's the simplest way - * of switching the "input" and "output" vectors. The output of a stage is the input to the next stage. The - * butterfly computes elements in place, but we still need to switch the vectors. We could copy it (not very - * efficient...) or, in C, switch the pointers. We can avoid the pointers by using recursion. - * - * @param input input sequence - * @param output output sequence - * @param numberFftPoints number of points in the FFT - * @param invert whether it's direct (false) or inverse (true) FFT - */ - private void recurseFft(Complex[] input, - double[] output, - int numberFftPoints, - boolean invert) { - - double divisor; - - /** - * The direct and inverse FFT are essentially the same - * algorithm, except for two difference: a scaling factor of - * "numberFftPoints" and the signal of the exponent in the - * weightFft vectors, defined in the method - * createWeightFft. - */ - - if (!invert) { - divisor = 1.0; - } else { - divisor = numberFftPoints; - } - - /** - * Initialize the "from" and "to" variables. - */ - for (int i = 0; i < numberFftPoints; i++) { - to[i].reset(); - from[i].scaleComplex(input[i], divisor); - } - - /** - * Repeat the recursion log2(numberFftPoints) times, - * i.e., we have log2(numberFftPoints) butterfly stages. - */ - butterflyStage(from, to, numberFftPoints, numberFftPoints >> 1); - - /** - * Compute energy ("float") for each frequency point - * from the fft ("complex") - */ - if ((this.logBase2NumberFftPoints & 1) == 0) { - for (int i = 0; i <= (numberFftPoints >> 1); i++) { - output[i] = from[i].squaredMagnitudeComplex(); - } - } else { - for (int i = 0; i <= (numberFftPoints >> 1); i++) { - output[i] = to[i].squaredMagnitudeComplex(); - } - } - } - - - /** - * Compute one stage in the FFT butterfly. The name "butterfly" appears because this method computes elements in - * pairs, and a flowgraph of the computation (output "0" comes from input "0" and "1" and output "1" comes from - * input "0" and "1") resembles a butterfly. - *

    - * We repeat butterflyStage for log_2(numberFftPoints) stages, by calling the recursion with the - * argument currentDistance divided by 2 at each call, and checking if it's still > 0. - * - * @param from the input sequence at each stage - * @param to the output sequence - * @param numberFftPoints the total number of points - * @param currentDistance the "distance" between elements in the butterfly - */ - private void butterflyStage(Complex[] from, - Complex[] to, - int numberFftPoints, - int currentDistance) { - int ndx1From; - int ndx2From; - int ndx1To; - int ndx2To; - int ndxWeightFft; - - if (currentDistance > 0) { - - int twiceCurrentDistance = 2 * currentDistance; - - for (int s = 0; s < currentDistance; s++) { - ndx1From = s; - ndx2From = s + currentDistance; - ndx1To = s; - ndx2To = s + (numberFftPoints >> 1); - ndxWeightFft = 0; - while (ndxWeightFft < (numberFftPoints >> 1)) { - /** - * weightFftTimesFrom2 = weightFft[k] - * *from[ndx2From] - */ - weightFftTimesFrom2.multiplyComplex - (weightFft[ndxWeightFft], from[ndx2From]); - /** - * to[ndx1To] = from[ndx1From] - * + weightFftTimesFrom2 - */ - to[ndx1To].addComplex - (from[ndx1From], weightFftTimesFrom2); - /** - * to[ndx2To] = from[ndx1From] - * - weightFftTimesFrom2 - */ - to[ndx2To].subtractComplex - (from[ndx1From], weightFftTimesFrom2); - ndx1From += twiceCurrentDistance; - ndx2From += twiceCurrentDistance; - ndx1To += currentDistance; - ndx2To += currentDistance; - ndxWeightFft += currentDistance; - } - } - - /** - * This call'd better be the last call in this block, so when - * it returns we go straight into the return line below. - * - * We switch the to and from variables, - * the total number of points remains the same, and - * the currentDistance is divided by 2. - */ - butterflyStage(to, from, numberFftPoints, (currentDistance >> 1)); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/transform/KaldiDiscreteCosineTransform.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/transform/KaldiDiscreteCosineTransform.java deleted file mode 100755 index cdd99373..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/transform/KaldiDiscreteCosineTransform.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 1999-2014 Carnegie Mellon University. - * Portions Copyright 2002-2004 Sun Microsystems, Inc. - * Portions Copyright 2002-2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ - -package edu.cmu.sphinx.frontend.transform; - -import java.util.Arrays; - - -/** - * DCT implementation that conforms to one used in Kaldi. - */ -public class KaldiDiscreteCosineTransform extends DiscreteCosineTransform { - - public KaldiDiscreteCosineTransform(int numberMelFilters, int cepstrumSize) - { - super(numberMelFilters, cepstrumSize); - } - - public KaldiDiscreteCosineTransform() { - } - - @Override - protected void computeMelCosine() { - melcosine = new double[cepstrumSize][numberMelFilters]; - Arrays.fill(melcosine[0], Math.sqrt(1. / numberMelFilters)); - - double normScale = Math.sqrt(2. / numberMelFilters); - - for (int i = 1; i < cepstrumSize; i++) { - double frequency = Math.PI * i / numberMelFilters; - - for (int j = 0; j < numberMelFilters; j++) - melcosine[i][j] = normScale * Math.cos(frequency * (j + 0.5)); - } - } - - @Override - protected double[] applyMelCosine(double[] melspectrum) { - double[] cepstrum = new double[cepstrumSize]; - - for (int i = 0; i < cepstrum.length; i++) { - for (int j = 0; j < numberMelFilters; j++) - cepstrum[i] += melspectrum[j] * melcosine[i][j]; - } - - return cepstrum; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/transform/Lifter.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/transform/Lifter.java deleted file mode 100755 index 249aa9bb..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/transform/Lifter.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright 2013 Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.frontend.transform; - -import edu.cmu.sphinx.frontend.BaseDataProcessor; -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.frontend.DataProcessingException; -import edu.cmu.sphinx.frontend.DoubleData; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Integer; - -/** - * Applies the Lifter to the input mel-cepstrum to - * smooth cepstrum values - * - * @author Horia Cucu - */ -public class Lifter extends BaseDataProcessor { - - /** The property for the value of the lifterValue */ - @S4Integer(defaultValue = 22) - public static final String PROP_LIFTER_VALUE = "lifterValue"; - protected int lifterValue; - - protected int cepstrumSize; // size of a Cepstrum - protected double[] lifterWeights; - - public Lifter(int lifterValue) { - initLogger(); - this.lifterValue = lifterValue; - } - - public Lifter() { - } - - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - lifterValue = ps.getInt(PROP_LIFTER_VALUE); - } - - @Override - public void initialize() { - super.initialize(); - } - - /** - * Returns the next DoubleData object, which is the lifted mel-cepstrum of - * the input mel-cepstrum. Signals are returned unmodified. - * - * @return the next available DoubleData lifted mel-cepstrum, or Signal - * object, or null if no Data is available - * @throws DataProcessingException - * if a data processing error occurred - */ - @Override - public Data getData() throws DataProcessingException { - Data data = getPredecessor().getData(); // get the cepstrum - if (data != null && data instanceof DoubleData) { - liftCepstrum((DoubleData) data); - } - return data; - } - - /** - * Lifts the input mel-cepstrum. - * - * @param input - * a mel-cepstrum frame - * @throws IllegalArgumentException - */ - private void liftCepstrum(DoubleData input) throws IllegalArgumentException { - double[] melCepstrum = input.getValues(); - - if (lifterWeights == null) { - cepstrumSize = melCepstrum.length; - computeLifterWeights(); - } else if (melCepstrum.length != cepstrumSize) { - throw new IllegalArgumentException( - "MelCepstrum size is incorrect: " - + "melcepstrum.length == " + melCepstrum.length - + ", cepstrumSize == " + cepstrumSize); - } - - for (int i = 0; i < melCepstrum.length; i++) { - melCepstrum[i] = melCepstrum[i] * lifterWeights[i]; - } - } - - /** - * Computes the Lifter weights. - */ - private void computeLifterWeights() { - lifterWeights = new double[cepstrumSize]; - for (int i = 0; i < cepstrumSize; i++) { - lifterWeights[i] = 1 + lifterValue / 2 - * Math.sin(i * Math.PI / lifterValue); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/AudioContinuityTester.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/AudioContinuityTester.java deleted file mode 100755 index 32899305..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/AudioContinuityTester.java +++ /dev/null @@ -1,46 +0,0 @@ -package edu.cmu.sphinx.frontend.util; - -import edu.cmu.sphinx.frontend.*; - -/** - * {@code FrontEnd} element that asserts the audio-stream to be continuous. This is often a mandatory property for - * frontend setups. The component operates on the acoustic data level and needs to plugged into the frontend - * before the actual feature extraction starts. - *

    - * This component can help to debug new VAD implementations, where it has been shown that data-blocks easily get lost. - * - * @author Holger Brandl - */ -public class AudioContinuityTester extends BaseDataProcessor { - - long lastSampleNum = -1; - - public AudioContinuityTester() { - initLogger(); - } - - @Override - public Data getData() throws DataProcessingException { - Data d = getPredecessor().getData(); - - assert isAudioStreamContinuous(d) : "audio stream is not continuous"; - - return d; - } - - - private boolean isAudioStreamContinuous(Data input) { - if (input instanceof DoubleData) { - DoubleData d = (DoubleData) input; - if (lastSampleNum != -1 && lastSampleNum != d.getFirstSampleNumber()) { - return false; - } - - lastSampleNum = d.getFirstSampleNumber() + d.getValues().length; - - } else if (input instanceof DataStartSignal) - lastSampleNum = -1; - - return true; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/AudioFileDataSource.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/AudioFileDataSource.java deleted file mode 100755 index f6de3ac8..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/AudioFileDataSource.java +++ /dev/null @@ -1,352 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ - -package edu.cmu.sphinx.frontend.util; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.util.props.*; - -import javax.sound.sampled.AudioFormat; -import javax.sound.sampled.AudioInputStream; -import javax.sound.sampled.AudioSystem; -import javax.sound.sampled.UnsupportedAudioFileException; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.List; - -/** - * An AudioFileDataSource generates a stream of audio data from a given audio file. All required information concerning - * the audio format are read directly from the file . One would need to call {@link #setAudioFile(java.io.File,String)} - * to set the input file, and call {@link #getData} to obtain the Data frames. - *

    - * Using JavaSound as backend this class is able to handle all sound files supported by JavaSound. Beside the built-in - * support for .wav, .au and .aiff. Using plugins (cf. http://www.jsresources.org/ ) it can be extended to support - * .ogg, .mp3, .speex and others. - * - * @author Holger Brandl - */ - -public class AudioFileDataSource extends BaseDataProcessor { - - /** The property for the number of bytes to read from the InputStream each time. */ - @S4Integer(defaultValue = 3200) - public static final String PROP_BYTES_PER_READ = "bytesPerRead"; - - @S4ComponentList(type = Configurable.class) - public static final String AUDIO_FILE_LISTENERS = "audioFileListners"; - protected final List fileListeners = new ArrayList(); - - - protected InputStream dataStream; - protected int sampleRate; - protected int bytesPerRead; - protected int bytesPerValue; - private long totalValuesRead; - protected boolean bigEndian; - protected boolean signedData; - private boolean streamEndReached; - private boolean utteranceEndSent; - private boolean utteranceStarted; - - private File curAudioFile; - - public AudioFileDataSource(int bytesPerRead, List listeners) { - initLogger(); - create(bytesPerRead,listeners); - } - - public AudioFileDataSource() { - } - - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - logger = ps.getLogger(); - create(ps.getInt(PROP_BYTES_PER_READ), ps.getComponentList(AUDIO_FILE_LISTENERS, AudioFileProcessListener.class)); - } - - private void create( int bytesPerRead, List listeners ) { - this.bytesPerRead = bytesPerRead; - - if( listeners != null ) { - // attach all pool-listeners - for (AudioFileProcessListener configurable : listeners) { - addNewFileListener(configurable); - } - } - - initialize(); - } - - - @Override - public void initialize() { - super.initialize(); - - // reset all stream tags - streamEndReached = false; - utteranceEndSent = false; - utteranceStarted = false; - - if (bytesPerRead % 2 == 1) { - bytesPerRead++; - } - } - - - /** - * Sets the audio file from which the data-stream will be generated of. - * - * @param audioFile The location of the audio file to use - * @param streamName The name of the InputStream. if null the complete path of the audio file will be - * uses as stream name. - */ - public void setAudioFile(File audioFile, String streamName) { - try { - setAudioFile(audioFile.toURI().toURL(), streamName); - } catch (MalformedURLException e) { - e.printStackTrace(); - } - } - - - /** - * Sets the audio file from which the data-stream will be generated of. - * - * @param audioFileURL The location of the audio file to use - * @param streamName The name of the InputStream. if null the complete path of the audio file will be - * uses as stream name. - */ - public void setAudioFile(URL audioFileURL, String streamName) { - // first close the last stream if there's such a one - if (dataStream != null) { - try { - dataStream.close(); - } catch (IOException e) { - e.printStackTrace(); - } - - dataStream = null; - } - - assert audioFileURL != null; - if (streamName != null) - streamName = audioFileURL.getPath(); - - AudioInputStream audioStream = null; - try { - audioStream = AudioSystem.getAudioInputStream(audioFileURL); - } catch (UnsupportedAudioFileException e) { - System.err.println("Audio file format not supported: " + e); - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - - curAudioFile = new File(audioFileURL.getFile()); - for (AudioFileProcessListener fileListener : fileListeners) - fileListener.audioFileProcStarted(curAudioFile); - - setInputStream(audioStream, streamName); - } - - - /** - * Sets the InputStream from which this StreamDataSource reads. - * - * @param inputStream the InputStream from which audio data comes - * @param streamName the name of the InputStream - */ - public void setInputStream(AudioInputStream inputStream, String streamName) { - dataStream = inputStream; - streamEndReached = false; - utteranceEndSent = false; - utteranceStarted = false; - - AudioFormat format = inputStream.getFormat(); - sampleRate = (int) format.getSampleRate(); - bigEndian = format.isBigEndian(); - - String s = format.toString(); - logger.finer("input format is " + s); - - if (format.getSampleSizeInBits() % 8 != 0) - throw new Error("StreamDataSource: bits per sample must be a multiple of 8."); - bytesPerValue = format.getSampleSizeInBits() / 8; - - // test whether all files in the stream have the same format - - AudioFormat.Encoding encoding = format.getEncoding(); - if (encoding.equals(AudioFormat.Encoding.PCM_SIGNED)) - signedData = true; - else if (encoding.equals(AudioFormat.Encoding.PCM_UNSIGNED)) - signedData = false; - else - throw new RuntimeException("used file encoding is not supported"); - - totalValuesRead = 0; - } - - - /** - * Reads and returns the next Data from the InputStream of StreamDataSource, return null if no data is read and end - * of file is reached. - * - * @return the next Data or null if none is available - * @throws edu.cmu.sphinx.frontend.DataProcessingException - * if there is a data processing error - */ - @Override - public Data getData() throws DataProcessingException { - Data output = null; - if (streamEndReached) { - if (!utteranceEndSent) { - // since 'firstSampleNumber' starts at 0, the last - // sample number should be 'totalValuesRead - 1' - output = createDataEndSignal(); - utteranceEndSent = true; - } - } else { - if (!utteranceStarted) { - utteranceStarted = true; - output = new DataStartSignal(sampleRate); - } else { - if (dataStream != null) { - output = readNextFrame(); - if (output == null) { - if (!utteranceEndSent) { - output = createDataEndSignal(); - utteranceEndSent = true; - } - } - } - } - } - return output; - } - - - private DataEndSignal createDataEndSignal() { - if (!(this instanceof ConcatAudioFileDataSource)) - for (AudioFileProcessListener fileListener : fileListeners) - fileListener.audioFileProcFinished(curAudioFile); - - return new DataEndSignal(getDuration()); - } - - - /** - * Returns the next Data from the input stream, or null if there is none available - * - * @return a Data or null - * @throws edu.cmu.sphinx.frontend.DataProcessingException - */ - private Data readNextFrame() throws DataProcessingException { - // read one frame's worth of bytes - int read; - int totalRead = 0; - final int bytesToRead = bytesPerRead; - byte[] samplesBuffer = new byte[bytesPerRead]; - long firstSample = totalValuesRead; - try { - do { - read = dataStream.read(samplesBuffer, totalRead, bytesToRead - - totalRead); - if (read > 0) { - totalRead += read; - } - } while (read != -1 && totalRead < bytesToRead); - if (totalRead <= 0) { - closeDataStream(); - return null; - } - // shrink incomplete frames - totalValuesRead += (totalRead / bytesPerValue); - if (totalRead < bytesToRead) { - totalRead = (totalRead % 2 == 0) - ? totalRead + 2 - : totalRead + 3; - byte[] shrinkedBuffer = new byte[totalRead]; - System - .arraycopy(samplesBuffer, 0, shrinkedBuffer, 0, - totalRead); - samplesBuffer = shrinkedBuffer; - closeDataStream(); - } - } catch (IOException ioe) { - throw new DataProcessingException("Error reading data", ioe); - } - // turn it into an Data object - double[] doubleData; - if (bigEndian) { - doubleData = DataUtil.bytesToValues(samplesBuffer, 0, totalRead, bytesPerValue, signedData); - } else { - doubleData = DataUtil.littleEndianBytesToValues(samplesBuffer, 0, totalRead, bytesPerValue, signedData); - } - - return new DoubleData(doubleData, sampleRate, firstSample); - } - - - private void closeDataStream() throws IOException { - streamEndReached = true; - if (dataStream != null) { - dataStream.close(); - } - } - - - /** - * Returns the duration of the current data stream in milliseconds. - * - * @return the duration of the current data stream in milliseconds - */ - private long getDuration() { - return (long) (((double) totalValuesRead / (double) sampleRate) * 1000.0); - } - - - public int getSampleRate() { - return sampleRate; - } - - - public boolean isBigEndian() { - return bigEndian; - } - - - /** Adds a new listener for new file events. - * @param l listener to add - */ - public void addNewFileListener(AudioFileProcessListener l) { - if (l == null) - return; - - fileListeners.add(l); - } - - - /** Removes a listener for new file events. - * @param l listener to remove - */ - public void removeNewFileListener(AudioFileProcessListener l) { - if (l == null) - return; - - fileListeners.remove(l); - } -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/AudioFileProcessListener.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/AudioFileProcessListener.java deleted file mode 100755 index 7d77df7b..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/AudioFileProcessListener.java +++ /dev/null @@ -1,30 +0,0 @@ -package edu.cmu.sphinx.frontend.util; - -import edu.cmu.sphinx.util.props.Configurable; - -import java.io.File; - -/** - * An interface which is describes the functionality which is required to handle new file signals fired by the - * audio-data sources. - * - * @author Holger Brandl - */ - -public interface AudioFileProcessListener extends Configurable { - - /** - * This method is invoked whenever a new file is started to become processed by an audio file data source. - * - * @param audioFile The name of the new audio file. - */ - public void audioFileProcStarted(File audioFile); - - - /** - * This method is invoked whenever a file processing has finished within a audio file data source. - * - * @param audioFile The name of the processed audio file. - */ - public void audioFileProcFinished(File audioFile); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/ConcatAudioFileDataSource.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/ConcatAudioFileDataSource.java deleted file mode 100755 index 72f753b2..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/ConcatAudioFileDataSource.java +++ /dev/null @@ -1,227 +0,0 @@ -package edu.cmu.sphinx.frontend.util; - -import java.io.*; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.*; - -import javax.sound.sampled.*; - -import edu.cmu.sphinx.util.ReferenceSource; - - -/** - * Concatenates a list of audio files as one continuous audio stream. - *

    - * A {@link edu.cmu.sphinx.frontend.DataStartSignal DataStartSignal} will be - * placed before the start of the first file, and a - * {@link edu.cmu.sphinx.frontend.DataEndSignal DataEndSignal} after the last - * file. No DataStartSignal or DataEndSignal will be placed between them. - * - * @author Holger Brandl - */ -public class ConcatAudioFileDataSource extends AudioFileDataSource implements - ReferenceSource { - - private URL nextFile; - private List referenceList; - private boolean isInitialized; - - List batchFiles; - - public ConcatAudioFileDataSource(int bytesPerRead, - List listeners) { - super(bytesPerRead, listeners); - } - - public ConcatAudioFileDataSource() { - - } - - /** Initializes a ConcatFileDataSource. */ - @Override - public void initialize() { - super.initialize(); - - if (batchFiles == null) - return; - - try { - referenceList = new ArrayList(); - dataStream = new SequenceInputStream(new InputStreamEnumeration(batchFiles)); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public void setBatchFile(File file) { - setBatchUrls(readDriver(file.getAbsolutePath())); - } - - public void setBatchFiles(List files) { - List urls = new ArrayList(); - - try { - for (File file : files) - urls.add(file.toURI().toURL()); - } catch (MalformedURLException e) { - e.printStackTrace(); - } - - setBatchUrls(urls); - } - - public void setBatchUrls(List urls) { - batchFiles = new ArrayList(urls); - initialize(); - } - - /** - * Reads and verifies a driver file. - * - * @param fileName - */ - private static List readDriver(String fileName) { - File inputFile = new File(fileName); - List driverFiles = null; - - try { - BufferedReader bf = new BufferedReader(new FileReader(inputFile)); - driverFiles = new ArrayList(); - - String line; - while ((line = bf.readLine()) != null && line.trim().length() != 0) { - File file = new File(line); - driverFiles.add(file.toURI().toURL()); - } - - bf.close(); - } catch (IOException e) { - e.printStackTrace(); - } - - assert driverFiles != null; - return driverFiles; - } - - @Override - public void setAudioFile(URL audioFileURL, String streamName) { - throw new UnsupportedOperationException(); - } - - /** - * Returns a list of all reference text. Implements the getReferences() - * method of ReferenceSource. - * - * @return a list of all reference text - */ - public List getReferences() { - return referenceList; - } - - /** - * The work of the concatenating of the audio files are done here. The idea - * here is to turn the list of audio files into an Enumeration, and then - * fed it to a SequenceInputStream, giving the illusion that the audio - * files are concatenated, but only logically. - */ - class InputStreamEnumeration implements Enumeration { - - private URL lastFile; - final Iterator fileIt; - - InputStreamEnumeration(List files) throws IOException { - fileIt = new ArrayList(files).iterator(); - } - - /** - * Tests if this enumeration contains more elements. - * - * @return true if and only if this enumeration object contains at - * least one more element to provide; false otherwise. - */ - public boolean hasMoreElements() { - if (nextFile == null) { - nextFile = readNext(); - } - return (nextFile != null); - } - - /** - * Returns the next element of this enumeration if this enumeration - * object has at least one more element to provide. - * - * @return the next element of this enumeration. - */ - public AudioInputStream nextElement() { - AudioInputStream stream = null; - if (lastFile == null) { - nextFile = readNext(); - } - - if (nextFile != null) { - try { - AudioInputStream ais = AudioSystem - .getAudioInputStream(nextFile); - - // test whether all files in the stream have the same - // format - AudioFormat format = ais.getFormat(); - if (!isInitialized) { - isInitialized = true; - - bigEndian = format.isBigEndian(); - sampleRate = (int) format.getSampleRate(); - signedData = format.getEncoding() - .equals(AudioFormat.Encoding.PCM_SIGNED); - bytesPerValue = format.getSampleSizeInBits() / 8; - } - - if (format.getSampleRate() != sampleRate - || format.getChannels() != 1 - || format.isBigEndian() != bigEndian) { - throw new RuntimeException("format mismatch for subsequent files"); - } - - stream = ais; - logger.finer("Strating processing of '" - + lastFile.getFile() + '\''); - for (AudioFileProcessListener fl : fileListeners) - fl.audioFileProcStarted(new File(nextFile.getFile())); - - lastFile = nextFile; - nextFile = null; - } catch (IOException ioe) { - ioe.printStackTrace(); - throw new Error("Cannot convert " + nextFile - + " to a FileInputStream"); - } catch (UnsupportedAudioFileException e) { - e.printStackTrace(); - } - } - - return stream; - } - - /** - * Returns the name of next audio file - * - * @return the name of the appropriate audio file - */ - public URL readNext() { - if (lastFile != null) { - logger.finest("Finished processing of '" + lastFile.getFile() - + '\''); - for (AudioFileProcessListener fl : fileListeners) - fl.audioFileProcFinished(new File(lastFile.getFile())); - - lastFile = null; - } - - if (fileIt.hasNext()) - lastFile = fileIt.next(); - - return lastFile; - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/ConcatFileDataSource.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/ConcatFileDataSource.java deleted file mode 100755 index c2d1113a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/ConcatFileDataSource.java +++ /dev/null @@ -1,432 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ -package edu.cmu.sphinx.frontend.util; - -import edu.cmu.sphinx.util.BatchFile; -import edu.cmu.sphinx.util.ReferenceSource; -import edu.cmu.sphinx.util.props.*; - -import java.io.*; -import java.util.Enumeration; -import java.util.LinkedList; -import java.util.List; -import java.util.Random; - - -/** - * Concatenates a list raw headerless audio files as one continuous audio stream. A {@link - * edu.cmu.sphinx.frontend.DataStartSignal DataStartSignal} will be placed before the start of the first file, and a - * {@link edu.cmu.sphinx.frontend.DataEndSignal DataEndSignal} after the last file. No DataStartSignal or DataEndSignal - * will be placed between them. Optionally, silence can be added in-between the audio files by setting the property: - *

    edu.cmu.sphinx.frontend.util.ConcatFileDataSource.silenceFile
    - * to a audio file for silence. By default, no silence is added. Moreover, one can also specify how many files to skip - * for every file read. - *

    - * You can also specify the name of a transcript file to write the transcription to. The transcription will be written - * in HUB-4 style. A sample HUB-4 transcript looks like: - *

    - * bn99en_1 1 peter_jennings 0.806084 7.079850 <o,f4,male> Tonight this
    - * Thursday big pressure on the Clinton administration to do something about
    - * the latest killing in Yugoslavia
    - * bn99en_1 1 peter_jennings 7.079850 14.007608 <o,fx,male> Airline passengers
    - * and outrageous behavior at thirty thousand feet What can an airline do
    - * ...
    - * bn99en_1 1 inter_segment_gap 23.097000 28.647000 <o,fx,>
    - * ...
    - * 
    - * The format of each line is: - *
    - * test_set_name category speaker_name start_time_in_seconds
    - * end_time_in_seconds <category,hub4_focus_conditions,speaker_sex> transcript
    - * 
    - * In our example above, - *
    - * test_set_name is "bn99en_1"
    - * category is "1"
    - * speaker_name is "peter_jennings"
    - * start_time_in_seconds is "0.806084"
    - * end_time_in_seconds is "7.079850"
    - * category is "o" for "Overall"
    - * hub4_focus_conditions is:
    - *     "f0" for "Baseline//Broadcast//Speech"
    - *     "f1" for "Spontaneous//Broadcast//Speech"
    - *     "f2" for "Speech Over//Telephone//Channels"
    - *     "f3" for "Speech in the//Presence of//Background Music"
    - *     "f4" for "Speech Under//Degraded//Acoustic Conditions"
    - *     "f5" for "Speech from//Non-Native//Speakers"
    - *     "fx" for "All other speech"
    - * speaker_sex is "male"
    - * transcript is "Tonight this Thursday big pressure on the Clinton
    - * administration to do something about the latest killing in Yugoslavia
    - * 
    - * The ConcatFileDataSource will produce such a transcript if the name of the file to write to is supplied in the - * constructor. This transcript file will be used in detected gap insertion errors, because it accurately describes the - * "correct" sequence of speech and silences in the concatenated version of the audio files. - */ -public class ConcatFileDataSource extends StreamDataSource implements ReferenceSource { - - /** The property that specifies which file to start at. */ - @S4Integer(defaultValue = 1) - public static final String PROP_START_FILE = "startFile"; - - /** The property that specifies the number of files to skip for every file read. */ - @S4Integer(defaultValue = 0) - public static final String PROP_SKIP = "skip"; - - /** The property that specifies the total number of files to read. The default value should be no limit. */ - @S4Integer(defaultValue = -1) - public static final String PROP_TOTAL_FILES = "totalFiles"; - - /** - * The property that specifies the silence audio file, if any. If this property is null, then no silences are - * added in between files. - */ - @S4String - public static final String PROP_SILENCE_FILE = "silenceFile"; - - /** The property that specifies whether to add random silence. */ - @S4Boolean(defaultValue = false) - public static final String PROP_ADD_RANDOM_SILENCE = "addRandomSilence"; - - /** - * The property that specifies the maximum number of times the silence file is added between files. If - * PROP_ADD_RANDOM_SILENCE is set to true, the number of times the silence file is added is between 1 and this - * value. If PROP_ADD_RANDOM_SILENCE is set to false, this value will be the number of times the silence file is - * added. So if PROP_MAX_SILENCE is set to 3, then the silence file will be added three times between files. - */ - @S4Integer(defaultValue = 3) - public static final String PROP_MAX_SILENCE = "maxSilence"; - - /** - * The property that specifies the name of the transcript file. If this property is set, a transcript file - * will be created. No transcript file will be created if this property is not set. - */ - @S4String - public static final String PROP_TRANSCRIPT_FILE = "transcriptFile"; - - /** The property for the file containing a list of audio files to read from. */ - @S4String - public static final String PROP_BATCH_FILE = "batchFile"; - - - private static final String GAP_LABEL = "inter_segment_gap"; - private boolean addRandomSilence; - private int skip; - private int maxSilence; - private int silenceCount; - private int bytesPerSecond; - private long totalBytes; - private long silenceFileLength; - private String silenceFileName; - private String nextFile; - private String context; - private String transcriptFile; - private List referenceList; - private FileWriter transcript; - private int startFile; - private int totalFiles; - private String batchFile; - - public ConcatFileDataSource( int sampleRate, int bytesPerRead, int bitsPerSample, boolean bigEndian, boolean signedData, - boolean addRandomSilence, - int maxSilence, - int skip, - String silenceFileName, - int startFile, - int totalFiles, - String transcriptFile, - String batchFile) { - super(sampleRate,bytesPerRead,bitsPerSample,bigEndian,signedData ); - - this.bytesPerSecond = sampleRate * (bitsPerSample / 8); - this.addRandomSilence = addRandomSilence; - this.maxSilence = maxSilence; - this.skip = skip; - this.silenceFileName = silenceFileName; - this.startFile = startFile; - this.totalFiles = totalFiles; - this.transcriptFile = transcriptFile; - this.batchFile = batchFile; - } - - public ConcatFileDataSource() { - - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - - bytesPerSecond = sampleRate * (bitsPerSample / 8); - addRandomSilence = ps.getBoolean(PROP_ADD_RANDOM_SILENCE); - maxSilence = ps.getInt(PROP_MAX_SILENCE); - skip = ps.getInt(PROP_SKIP); - silenceFileName = ps.getString(PROP_SILENCE_FILE); - startFile = ps.getInt(PROP_START_FILE); - totalFiles = ps.getInt(PROP_TOTAL_FILES); - transcriptFile = ps.getString(PROP_TRANSCRIPT_FILE); - batchFile = ps.getString(PROP_BATCH_FILE); - } - - - /** Initializes a ConcatFileDataSource. */ - @Override - public void initialize() { - super.initialize(); - - try { - File silenceFile = new File(silenceFileName); - silenceFileLength = silenceFile.length(); - - if (transcriptFile != null) { - transcript = new FileWriter(transcriptFile); - } - if (batchFile == null) { - throw new Error("BatchFile cannot be null!"); - } - setInputStream - (new SequenceInputStream - (new InputStreamEnumeration - (batchFile, startFile, totalFiles))); - referenceList = new LinkedList(); - } catch (IOException e) { - e.printStackTrace(); //TODO fix this - } - } - - - /** - * Returns a list of all reference text. Implements the getReferences() method of ReferenceSource. - * - * @return a list of all reference text - */ - public List getReferences() { - return referenceList; - } - - - /** - * Returns the name of the transcript file. - * - * @return the name of the transcript file - */ - public String getTranscriptFile() { - return transcriptFile; - } - - - /** - * Returns the audio time in seconds represented by the given number of bytes. - * - * @param bytes the number of bytes - * @return the audio time - */ - private float getSeconds(long bytes) { - return ((float) bytes / bytesPerSecond); - } - - - /** - * The work of the concatenating of the audio files are done here. The idea here is to turn the list of audio files - * into an Enumeration, and then fed it to a SequenceInputStream, giving the illusion that the audio files are - * concatenated, but only logically. - */ - class InputStreamEnumeration implements Enumeration { - - private final int totalFiles; - private boolean inSilence; - private Random silenceRandom; - private BufferedReader reader; - - - InputStreamEnumeration(String batchFile, int startFile, - int totalFiles) - throws IOException { - this.totalFiles = totalFiles; - reader = new BufferedReader(new FileReader(batchFile)); - if (silenceFileName != null) { - inSilence = true; - silenceRandom = new Random(System.currentTimeMillis()); - silenceCount = getSilenceCount(); - } - // go to the start file - for (int i = 1; i < startFile; i++) { - reader.readLine(); - } - } - - - /** - * Tests if this enumeration contains more elements. - * - * @return true if and only if this enumeration object contains at least one more element to provide; false - * otherwise. - */ - public boolean hasMoreElements() { - if (nextFile == null) { - nextFile = readNext(); - } - return (nextFile != null); - } - - - /** - * Returns the next element of this enumeration if this enumeration object has at least one more element to - * provide. - * - * @return the next element of this enumeration. - */ - public InputStream nextElement() { - InputStream stream = null; - if (nextFile == null) { - nextFile = readNext(); - } - if (nextFile != null) { - try { - stream = new FileInputStream(nextFile); - // System.out.println(nextFile); - nextFile = null; - } catch (IOException ioe) { - ioe.printStackTrace(); - throw new Error("Cannot convert " + nextFile + - " to a FileInputStream"); - } - } - - // close the transcript file no more files - if (stream == null && transcript != null) { - try { - transcript.close(); - } catch (IOException ioe) { - ioe.printStackTrace(); - } - } - return stream; - } - - - /** - * Returns the name of next audio file, taking into account file skipping and the adding of silence. - * - * @return the name of the appropriate audio file - */ - public String readNext() { - if (!inSilence) { - return readNextDataFile(); - } else { - // return the silence file - String next = null; - if (silenceCount > 0) { - next = silenceFileName; - if (transcript != null) { - writeSilenceToTranscript(); - } - silenceCount--; - if (silenceCount <= 0) { - inSilence = false; - } - } - return next; - } - } - - - /** - * Returns the next audio file. - * - * @return the name of the next audio file - */ - private String readNextDataFile() { - try { - if (0 <= totalFiles && - totalFiles <= referenceList.size()) { - return null; - } - String next = reader.readLine(); - if (next != null) { - String reference = BatchFile.getReference(next); - referenceList.add(reference); - next = BatchFile.getFilename(next); - for (int i = 1; i < skip; i++) { - reader.readLine(); - } - if (silenceFileName != null && maxSilence > 0) { - silenceCount = getSilenceCount(); - inSilence = true; - } - if (transcript != null) { - writeTranscript(next, reference); - } - } - return next; - } catch (IOException ioe) { - ioe.printStackTrace(); - throw new Error("Problem reading from batch file"); - } - } - - - /** - * Writes the transcript file. - * - * @param fileName the name of the decoded file - * @param reference the reference text - */ - private void writeTranscript(String fileName, String reference) { - try { - File file = new File(fileName); - float start = getSeconds(totalBytes); - totalBytes += file.length(); - float end = getSeconds(totalBytes); - transcript.write(context + " 1 " + fileName + ' ' + start + - ' ' + end + " " + reference + '\n'); - transcript.flush(); - } catch (IOException ioe) { - ioe.printStackTrace(); - } - } - - - /** Writes silence to the transcript file. */ - private void writeSilenceToTranscript() { - try { - float start = getSeconds(totalBytes); - totalBytes += silenceFileLength; - float end = getSeconds(totalBytes); - transcript.write(context + " 1 " + GAP_LABEL + ' ' + - start + ' ' + end + " \n"); - transcript.flush(); - } catch (IOException ioe) { - ioe.printStackTrace(); - } - } - - - /** - * Returns how many times the silence file should be added between utterances. - * - * @return the number of times the silence file should be added between utterances - */ - private int getSilenceCount() { - if (addRandomSilence) { - return silenceRandom.nextInt(maxSilence) + 1; - } else { - return maxSilence; - } - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/DataConverter.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/DataConverter.java deleted file mode 100755 index 1d716df5..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/DataConverter.java +++ /dev/null @@ -1,63 +0,0 @@ -package edu.cmu.sphinx.frontend.util; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.util.MatrixUtils; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4String; - -/** - * A simple converter which converts DoubleData to FloatData and vv (depending on its - * configuration). All remaining Datas will pass this processor unchanged. - * - * @author Holger Brandl - */ - -public class DataConverter extends BaseDataProcessor { - - public static final String CONVERT_D2F = "d2f"; - public static final String CONVERT_F2D = "f2d"; - - @S4String(defaultValue = "d2f", range = {CONVERT_D2F, CONVERT_F2D}) - public static final String PROP_CONVERSION_MODE = "conversionMode"; - private String convMode; - - public DataConverter(String convMode) throws PropertyException { - initLogger(); - this.convMode = convMode; - } - - public DataConverter() { - - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - - convMode = ps.getString(PROP_CONVERSION_MODE); - } - - - @Override - public Data getData() throws DataProcessingException { - Data d = getPredecessor().getData(); - - if (d instanceof DoubleData && convMode.equals(CONVERT_D2F)) { - DoubleData dd = (DoubleData) d; - d = new FloatData(MatrixUtils.double2float(dd.getValues()), dd.getSampleRate(), - dd.getFirstSampleNumber()); - } else if (d instanceof FloatData && convMode.equals(CONVERT_F2D)) { - FloatData fd = (FloatData) d; - d = new DoubleData(MatrixUtils.float2double(fd.getValues()), fd.getSampleRate(), - fd.getFirstSampleNumber()); - } - - return d; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/DataDumper.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/DataDumper.java deleted file mode 100755 index c1c211ed..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/DataDumper.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.frontend.util; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.frontend.endpoint.SpeechClassifiedData; -import edu.cmu.sphinx.util.props.*; - -import java.text.DecimalFormat; -import java.text.DecimalFormatSymbols; -import java.util.Locale; - -/** Dumps the data */ -public class DataDumper extends BaseDataProcessor { - - /** The property that specifies the format of the output. */ - @S4String(defaultValue = "0.00000E00;-0.00000E00") - public final static String PROP_OUTPUT_FORMAT = "outputFormat"; - - /** The property that enables the output of signals. */ - @S4Boolean(defaultValue = true) - public final static String PROP_OUTPUT_SIGNALS = "outputSignals"; - - // -------------------------- - // Configuration data - // -------------------------- - private boolean outputSignals; - private DecimalFormat formatter; - - public DataDumper(String format, boolean outputSignals) { - initLogger(); - this.formatter = new DecimalFormat(format, new DecimalFormatSymbols(Locale.US)); - this.outputSignals = outputSignals; - } - - public DataDumper() { - - } - - /* - * (non-Javadoc) - * - * @see - * edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util - * .props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - - logger = ps.getLogger(); - - String format = ps.getString(PROP_OUTPUT_FORMAT); - formatter = new DecimalFormat(format, new DecimalFormatSymbols(Locale.US)); - outputSignals = ps.getBoolean(PROP_OUTPUT_SIGNALS); - } - - /** Constructs a DataDumper */ - @Override - public void initialize() { - super.initialize(); - } - - /** - * Reads and returns the next Data object from this DataProcessor, return - * null if there is no more audio data. - * - * @return the next Data or null if none is available - * @throws DataProcessingException - * if there is a data processing error - */ - @Override - public Data getData() throws DataProcessingException { - Data input = getPredecessor().getData(); - dumpData(input); - - return input; - } - - /** - * Dumps the given input data - * - * @param input - * the data to dump - */ - private void dumpData(Data input) { - - if (input == null) { - System.out.println("Data: null"); - } else if (input instanceof Signal) { - if (outputSignals) { - System.out.println("Signal: " + input); - } - } else if (input instanceof DoubleData) { - DoubleData dd = (DoubleData) input; - double[] values = dd.getValues(); - System.out.print("Frame " + values.length); - for (double val : values) { - System.out.print(' ' + formatter.format(val)); - } - System.out.println(); - } else if (input instanceof SpeechClassifiedData) { - SpeechClassifiedData dd = (SpeechClassifiedData) input; - double[] values = dd.getValues(); - System.out.print("Frame "); - if (dd.isSpeech()) - System.out.print('*'); - else - System.out.print(' '); - System.out.print(" " + values.length); - for (double val : values) { - System.out.print(' ' + formatter.format(val)); - } - System.out.println(); - } else if (input instanceof FloatData) { - FloatData fd = (FloatData) input; - float[] values = fd.getValues(); - System.out.print("Frame " + values.length); - for (float val : values) { - System.out.print(' ' + formatter.format(val)); - } - System.out.println(); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/DataUtil.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/DataUtil.java deleted file mode 100755 index 23374b42..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/DataUtil.java +++ /dev/null @@ -1,508 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - - -package edu.cmu.sphinx.frontend.util; - -import edu.cmu.sphinx.frontend.DoubleData; -import edu.cmu.sphinx.frontend.FloatData; -import edu.cmu.sphinx.util.Utilities; - -import javax.sound.sampled.*; -import java.io.FileOutputStream; -import java.io.IOException; -import java.text.DecimalFormat; - - -/** Defines utility methods for manipulating data values. */ -public class DataUtil { - - private static final int HEXADECIMAL = 1; - private static final int SCIENTIFIC = 2; - private static final int DECIMAL = 3; - - - /** DecimalFormat object to be used by all the methods. */ - private static final DecimalFormat format = new DecimalFormat(); - - - private static final int decimalIntegerDigits = 10; - private static final int decimalFractionDigits = 5; - - private static final int floatScientificFractionDigits = 8; - private static final int doubleScientificFractionDigits = 8; - - - /** The number format to be used by *ArrayToString() methods. The default is scientific. */ - private static int dumpFormat = SCIENTIFIC; - - /** - * Static initialization of dumpFormat - */ - static { - String formatProperty = System.getProperty("frontend.util.dumpformat", - "SCIENTIFIC"); - if (formatProperty.compareToIgnoreCase("DECIMAL") == 0) { - dumpFormat = DECIMAL; - } else if (formatProperty.compareToIgnoreCase("HEXADECIMAL") == 0) { - dumpFormat = HEXADECIMAL; - } else if (formatProperty.compareToIgnoreCase("SCIENTIFIC") == 0) { - dumpFormat = SCIENTIFIC; - } - } - - - /** Uninstantiable class. */ - private DataUtil() { - } - - - /** - * Converts a byte array into a short array. Since a byte is 8-bits, and a short is 16-bits, the returned short - * array will be half in length than the byte array. If the length of the byte array is odd, the length of the short - * array will be (byteArray.length - 1)/2, i.e., the last byte is discarded. - * - * @param byteArray a byte array - * @param offset which byte to start from - * @param length how many bytes to convert - * @return a short array, or null if byteArray is of zero length - * @throws java.lang.ArrayIndexOutOfBoundsException if index goes out of bounds - * - */ - public static short[] byteToShortArray - (byte[] byteArray, int offset, int length) - throws ArrayIndexOutOfBoundsException { - - if (0 < length && (offset + length) <= byteArray.length) { - int shortLength = length / 2; - short[] shortArray = new short[shortLength]; - int temp; - for (int i = offset, j = 0; j < shortLength; - j++, temp = 0x00000000) { - temp = byteArray[i++] << 8; - temp |= 0x000000FF & byteArray[i++]; - shortArray[j] = (short) temp; - } - return shortArray; - } else { - throw new ArrayIndexOutOfBoundsException - ("offset: " + offset + ", length: " + length - + ", array length: " + byteArray.length); - } - } - - - /** - * Converts a big-endian byte array into an array of doubles. Each consecutive bytes in the byte array are converted - * into a double, and becomes the next element in the double array. The size of the returned array is - * (length/bytesPerValue). Currently, only 1 byte (8-bit) or 2 bytes (16-bit) samples are supported. - * - * @param byteArray a byte array - * @param offset which byte to start from - * @param length how many bytes to convert - * @param bytesPerValue the number of bytes per value - * @param signedData whether the data is signed - * @return a double array, or null if byteArray is of zero length - * @throws java.lang.ArrayIndexOutOfBoundsException if index goes out of bounds - * - */ - public static double[] bytesToValues(byte[] byteArray, - int offset, - int length, - int bytesPerValue, - boolean signedData) - throws ArrayIndexOutOfBoundsException { - - if (0 < length && (offset + length) <= byteArray.length) { - assert (length % bytesPerValue == 0); - double[] doubleArray = new double[length / bytesPerValue]; - - int i = offset; - - for (int j = 0; j < doubleArray.length; j++) { - int val = byteArray[i++]; - if (!signedData) { - val &= 0xff; // remove the sign extension - } - for (int c = 1; c < bytesPerValue; c++) { - int temp = byteArray[i++] & 0xff; - val = (val << 8) + temp; - } - - doubleArray[j] = val; - } - - return doubleArray; - } else { - throw new ArrayIndexOutOfBoundsException - ("offset: " + offset + ", length: " + length - + ", array length: " + byteArray.length); - } - } - - - /** - * Converts a little-endian byte array into an array of doubles. Each consecutive bytes of a float are converted - * into a double, and becomes the next element in the double array. The number of bytes in the double is specified - * as an argument. The size of the returned array is (data.length/bytesPerValue). - * - * @param data a byte array - * @param offset which byte to start from - * @param length how many bytes to convert - * @param bytesPerValue the number of bytes per value - * @param signedData whether the data is signed - * @return a double array, or null if byteArray is of zero length - * @throws java.lang.ArrayIndexOutOfBoundsException if index goes out of bounds - * - */ - public static double[] littleEndianBytesToValues(byte[] data, - int offset, - int length, - int bytesPerValue, - boolean signedData) - throws ArrayIndexOutOfBoundsException { - - if (0 < length && (offset + length) <= data.length) { - assert (length % bytesPerValue == 0); - double[] doubleArray = new double[length / bytesPerValue]; - - int i = offset + bytesPerValue - 1; - - for (int j = 0; j < doubleArray.length; j++) { - int val = data[i--]; - if (!signedData) { - val &= 0xff; // remove the sign extension - } - for (int c = 1; c < bytesPerValue; c++) { - int temp = data[i--] & 0xff; - val = (val << 8) + temp; - } - - // advance 'i' to the last byte of the next value - i += (bytesPerValue * 2); - - doubleArray[j] = val; - } - - return doubleArray; - - } else { - throw new ArrayIndexOutOfBoundsException - ("offset: " + offset + ", length: " + length - + ", array length: " + data.length); - } - } - - - /** - * Convert the two bytes starting at the given offset to a short. - * - * @param byteArray the byte array - * @param offset where to start - * @return a short - * @throws java.lang.ArrayIndexOutOfBoundsException if index goes out of bounds - * - */ - public static short bytesToShort(byte[] byteArray, int offset) - throws ArrayIndexOutOfBoundsException { - short result = (short) - ((byteArray[offset++] << 8) | - (0x000000FF & byteArray[offset])); - return result; - } - - - /** - * Returns the string representation of the given short array. The string will be in the form: - *
    data.length data[0] data[1] ... data[data.length-1]
    - * - * @param data the short array to convert - * @return a string representation of the short array - */ - public static String shortArrayToString(short[] data) { - StringBuilder dump = new StringBuilder().append(data.length); - for (short val : data) { - dump.append(' ').append(val); - } - return dump.toString(); - } - - - /** - * Returns the given double array as a string. The string will be in the form: - *
    data.length data[0] data[1] ... data[data.length-1]
    where - * data[i]. - *

    - * The doubles can be written as decimal, hexadecimal, or scientific notation. In decimal notation, it is formatted - * by the method Util.formatDouble(data[i], 10, 5). Use the System property - * "frontend.util.dumpformat" to control the dump format (permitted values are "decimal", - * "hexadecimal", and "scientific". - * - * @param data the double array to dump - * @return a string representation of the double array - */ - public static String doubleArrayToString(double[] data) { - return doubleArrayToString(data, dumpFormat); - } - - - /** - * Returns the given double array as a string. The dump will be in the form: - *

    data.length data[0] data[1] ... data[data.length-1]
    where - * data[i] is formatted by the method Util.formatDouble(data[i], 10, 5). - * - * @param data the double array to dump - * @param format either HEXADECIMAL, SCIENTIFIC or DECIMAL - * @return a string representation of the double array - */ - private static String doubleArrayToString(double[] data, int format) { - StringBuilder dump = new StringBuilder().append(data.length); - - for (double val : data) { - if (format == DECIMAL) { - dump.append(' ').append(formatDouble - (val, decimalIntegerDigits, - decimalFractionDigits)); - } else if (format == HEXADECIMAL) { - long binary = Double.doubleToRawLongBits(val); - dump.append(" 0x").append(Long.toHexString(binary)); - } else if (format == SCIENTIFIC) { - dump.append(' ').append(Utilities.doubleToScientificString - (val, doubleScientificFractionDigits)); - } - } - return dump.toString(); - } - - - /** - * Returns the given float array as a string. The string is of the form: - *
    data.length data[0] data[1] ... data[data.length-1]
    - *

    - * The floats can be written as decimal, hexadecimal, or scientific notation. In decimal notation, it is formatted - * by the method Util.formatDouble(data[i], 10, 5). Use the System property - * "frontend.util.dumpformat" to control the dump format (permitted values are "decimal", - * "hexadecimal", and "scientific". - * - * @param data the float array to dump - * @return a string of the given float array - */ - public static String floatArrayToString(float[] data) { - return floatArrayToString(data, dumpFormat); - } - - - /** - * Returns the given float array as a string. The string is of the form: - *

    data.length data[0] data[1] ... data[data.length-1]
    - * - * @param data the float array to dump - * @param format either DECIMAL, HEXADECIMAL or SCIENTIFIC - * @return a string of the given float array - */ - private static String floatArrayToString(float[] data, int format) { - StringBuilder dump = new StringBuilder().append(data.length); - - for (float val : data) { - if (format == DECIMAL) { - dump.append(' ').append(formatDouble - (val, - decimalIntegerDigits, decimalFractionDigits)); - } else if (format == HEXADECIMAL) { - int binary = Float.floatToRawIntBits(val); - dump.append(" 0x").append(Integer.toHexString(binary)); - } else if (format == SCIENTIFIC) { - dump.append(' ').append(Utilities.doubleToScientificString - (val, floatScientificFractionDigits)); - } - } - return dump.toString(); - } - - - /** - * Returns a formatted string of the given number, with the given numbers of digit space for the integer and - * fraction parts. If the integer part has less than integerDigits digits, spaces will be prepended to - * it. If the fraction part has less than fractionDigits, spaces will be appended to it. Therefore, - * formatDouble(12345.6789, 6, 6) will give - * the string
    " 12345.6789  "
    (one space before 1, two spaces - * after 9). - * - * @param number the number to format - * @param integerDigits the length of the integer part - * @param fractionDigits the length of the fraction part - * @return a formatted number - */ - public static String formatDouble(double number, int integerDigits, - int fractionDigits) { - StringBuilder formatter = new StringBuilder(2 + fractionDigits).append("0."); - for (int i = 0; i < fractionDigits; i++) { - formatter.append('0'); - } - - format.applyPattern(formatter.toString()); - String formatted = format.format(number); - - // pad preceding spaces before the number - int dotIndex = formatted.indexOf('.'); - if (dotIndex == -1) { - formatted += "."; - dotIndex = formatted.length() - 1; - } - StringBuilder result = new StringBuilder(); - for (int i = dotIndex; i < integerDigits; i++) { - result.append(' '); - } - result.append(formatted); - return result.toString(); - } - - - /** - * Returns the number of samples per window given the sample rate (in Hertz) and window size (in milliseconds). - * - * @param sampleRate the sample rate in Hertz (i.e., frequency per seconds) - * @param windowSizeInMs the window size in milliseconds - * @return the number of samples per window - */ - public static int getSamplesPerWindow(int sampleRate, - float windowSizeInMs) { - return (int) (sampleRate * windowSizeInMs / 1000); - } - - - /** - * Returns the number of samples in a window shift given the sample rate (in Hertz) and the window shift (in - * milliseconds). - * - * @param sampleRate the sample rate in Hertz (i.e., frequency per seconds) - * @param windowShiftInMs the window shift in milliseconds - * @return the number of samples in a window shift - */ - public static int getSamplesPerShift(int sampleRate, - float windowShiftInMs) { - return (int) (sampleRate * windowShiftInMs / 1000); - } - - - /** - * Saves the given bytes to the given binary file. - * - * @param data the bytes to save - * @param filename the binary file name - * @throws IOException if an I/O error occurs - */ - public static void bytesToFile(byte[] data, String filename) - throws IOException { - FileOutputStream file = new FileOutputStream(filename); - file.write(data); - file.close(); - } - - - /** - * Returns a native audio format that has the same encoding, endianness and sample size as the given format, and a - * sample rate that is larger than the given sample rate. - * - * @param format format for the data - * @return a suitable native audio format - */ - public static AudioFormat getNativeAudioFormat(AudioFormat format) { - return getNativeAudioFormat(format, null); - } - - - /** - * Returns a native audio format that has the same encoding, endianness and sample size as the given format, and a - * sample rate that is greater than or equal to the given sample rate. - * - * @param format the desired format - * @param mixer if non-null, use this Mixer; otherwise use AudioSystem - * @return a suitable native audio format - */ - public static AudioFormat getNativeAudioFormat(AudioFormat format, - Mixer mixer) { - Line.Info[] lineInfos; - - if (mixer != null) { - lineInfos = mixer.getTargetLineInfo - (new Line.Info(TargetDataLine.class)); - } else { - lineInfos = AudioSystem.getTargetLineInfo - (new Line.Info(TargetDataLine.class)); - } - - AudioFormat nativeFormat = null; - - // find a usable target line - for (Line.Info info : lineInfos) { - - AudioFormat[] formats = ((TargetDataLine.Info)info).getFormats(); - - for (AudioFormat thisFormat : formats) { - - // for now, just accept downsampling, not checking frame - // size/rate (encoding assumed to be PCM) - - if (thisFormat.getEncoding() == format.getEncoding() - && thisFormat.isBigEndian() == format.isBigEndian() - && thisFormat.getSampleSizeInBits() == - format.getSampleSizeInBits() - && thisFormat.getSampleRate() >= format.getSampleRate()) { - nativeFormat = thisFormat; - break; - } - } - if (nativeFormat != null) { - //no need to look through remaining lineinfos - break; - } - } - return nativeFormat; - } - - - /** - * Converts DoubleData object to FloatDatas. - * @param data data to convert - * @return converted data - */ - public static DoubleData FloatData2DoubleData(FloatData data) { - int numSamples = data.getValues().length; - - double[] doubleData = new double[numSamples]; - float[] values = data.getValues(); - for (int i = 0; i < values.length; i++) { - doubleData[i] = values[i]; - } - - return new DoubleData(doubleData, data.getSampleRate(), data.getFirstSampleNumber()); - } - - - /** - * Converts FloatData object to DoubleData. - * @param data data to convert - * @return converted data - */ - public static FloatData DoubleData2FloatData(DoubleData data) { - int numSamples = data.getValues().length; - - float[] floatData = new float[numSamples]; - double[] values = data.getValues(); - for (int i = 0; i < values.length; i++) { - floatData[i] = (float) values[i]; - } - - return new FloatData(floatData, data.getSampleRate(), data.getFirstSampleNumber()); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/EnergyPlotter.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/EnergyPlotter.java deleted file mode 100755 index 22056ec2..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/EnergyPlotter.java +++ /dev/null @@ -1,130 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - - -package edu.cmu.sphinx.frontend.util; - -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.frontend.DoubleData; -import edu.cmu.sphinx.util.props.Configurable; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Integer; - -import java.util.Arrays; - - -/** - * Plots positive energy values of a cepstrum to stdout. The energy value is assumed to be the first element of the - * double array returned by Data.getValues(). For negative energy value, a "-" will be printed out. The - * plots look like the following, one line per cepstrum. The energy value for that particular cepstrum is printed at the - * end of the line. - *

    - *
    +......7
    +......7
    Cepstrum: SPEECH_START
    +......7
    +.......8
    +......7
    +.......8 - *
    +.......8
    +........9
    +............14
    +...........13
    +...........13
    +...........13 - *
    +.............15
    +.............15
    +..............16
    +..............16
    +..............16 - *
    +.............15
    +............14
    +............14
    +............14
    +............14 - *
    +.............15
    +..............16
    +...............17
    +...............17
    +...............17 - *
    +...............17
    +...............17
    +...............17
    +..............16
    +.............15 - *
    +............14
    +............14
    +............14
    +...........13
    +........9
    +.......8 - *
    +......7
    +......7
    +......7
    Cepstrum: SPEECH_END
    +......7
    - */ -public class EnergyPlotter implements Configurable { - - /** The maximum level of energy for which a plot string will be preconstructed. */ - @S4Integer(defaultValue = 20) - public static final String PROP_MAX_ENERGY = "maxEnergy"; - - private int maxEnergy; - private String[] plots; - - public EnergyPlotter(int maxEnergy) { - this.maxEnergy = maxEnergy; - buildPlots(maxEnergy); - } - - public EnergyPlotter() { - - } - - public void newProperties(PropertySheet ps) throws PropertyException { - maxEnergy = ps.getInt(PROP_MAX_ENERGY); - buildPlots(maxEnergy); - } - - /** - * Builds the strings for the plots. - * - * @param maxEnergy the maximum energy value - */ - private void buildPlots(int maxEnergy) { - plots = new String[maxEnergy + 1]; - for (int i = 0; i < maxEnergy + 1; i++) { - plots[i] = getPlotString(i); - } - } - - - /** - * Returns the plot string for the given energy. - * - * @param energy the energy level - */ - private String getPlotString(int energy) { - char[] plot = new char[energy]; - Arrays.fill(plot, '.'); - if (energy > 0) { - if (energy < 10) { - plot[plot.length - 1] = (char) ('0' + energy); - } else { - plot[plot.length - 2] = '1'; - plot[plot.length - 1] = (char) ('0' + (energy - 10)); - } - } - return ('+' + new String(plot)); - } - - - /** - * Plots the energy values of the given Data to System.out. If the Data contains a signal, it prints the signal. - * - * @param cepstrum the Data to plot - */ - public void plot(Data cepstrum) { - if (cepstrum != null) { - if (cepstrum instanceof DoubleData) { - int energy = (int) ((DoubleData) cepstrum).getValues()[0]; - System.out.println(getPlot(energy)); - } else { - System.out.println(cepstrum); - } - } - } - - - /** - * Returns the corresponding plot String for the given energy value. The energy value should be positive or zero. If - * its negative, It will output the string "-". - * - * @param energy - * @return energy the energy value - */ - private String getPlot(int energy) { - if (energy < 0) { - return "-"; - } else if (energy <= maxEnergy) { - return plots[energy]; - } else { - return getPlotString(energy); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/FrontEndUtils.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/FrontEndUtils.java deleted file mode 100755 index 6db02726..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/FrontEndUtils.java +++ /dev/null @@ -1,36 +0,0 @@ -package edu.cmu.sphinx.frontend.util; - -import edu.cmu.sphinx.frontend.DataProcessor; -import edu.cmu.sphinx.frontend.FrontEnd; - -/** - * Some little helper methods to ease the handling of frontend-processor chains. - * - * @author Holger Brandl - */ -public class FrontEndUtils { - - - /** Returns a the next DataProcessor of type predecClass which precedes dp - * - * @param dp data processor - * @param predecessor class type - * @param predecClass predecessor class - * - * @return frontend processor - **/ - public static T getFrontEndProcessor(DataProcessor dp, Class predecClass) { - while (!predecClass.isInstance(dp)) { - if (dp instanceof FrontEnd) - dp = ((FrontEnd) dp).getLastDataProcessor(); - else - dp = dp.getPredecessor(); - - if (dp == null) - return null; - } - - - return predecClass.cast(dp); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/Microphone.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/Microphone.java deleted file mode 100755 index af0abea1..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/Microphone.java +++ /dev/null @@ -1,744 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.frontend.util; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.util.props.*; - -import javax.sound.sampled.*; -import java.io.IOException; -import java.util.Arrays; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.logging.Level; - - -/** - *

    A Microphone captures audio data from the system's underlying audio input systems. Converts these audio data - * into Data objects. When the method startRecording() is called, a new thread will be created and used to - * capture audio, and will stop when stopRecording() is called. Calling getData() returns the - * captured audio data as Data objects.

    This Microphone will attempt to obtain an audio device with the format - * specified in the configuration. If such a device with that format cannot be obtained, it will try to obtain a device - * with an audio format that has a higher sample rate than the configured sample rate, while the other parameters of the - * format (i.e., sample size, endianness, sign, and channel) remain the same. If, again, no such device can be obtained, - * it flags an error, and a call startRecording returns false.

    - */ -public class Microphone extends BaseDataProcessor { - - /** - * The property for the sample rate of the data. - */ - @S4Integer(defaultValue = 16000) - public static final String PROP_SAMPLE_RATE = "sampleRate"; - - /** - * The property that specifies whether or not the microphone will release the audio between utterances. On - * certain systems (Linux for one), closing and reopening the audio does not work too well. The default is false for - * Linux systems, true for others. - */ - @S4Boolean(defaultValue = true) - public final static String PROP_CLOSE_BETWEEN_UTTERANCES = "closeBetweenUtterances"; - - /** - * The property that specifies the number of milliseconds of audio data to read each time from the underlying - * Java Sound audio device. - */ - @S4Integer(defaultValue = 10) - public final static String PROP_MSEC_PER_READ = "msecPerRead"; - - /** - * The property for the number of bits per value. - */ - @S4Integer(defaultValue = 16) - public static final String PROP_BITS_PER_SAMPLE = "bitsPerSample"; - - /** - * The property specifying the number of channels. - */ - @S4Integer(defaultValue = 1) - public static final String PROP_CHANNELS = "channels"; - - /** - * The property specify the endianness of the data. - */ - @S4Boolean(defaultValue = true) - public static final String PROP_BIG_ENDIAN = "bigEndian"; - - /** - * The property specify whether the data is signed. - */ - @S4Boolean(defaultValue = true) - public static final String PROP_SIGNED = "signed"; - - /** - * The property that specifies whether to keep the audio data of an utterance around until the next utterance - * is recorded. - */ - @S4Boolean(defaultValue = false) - public final static String PROP_KEEP_LAST_AUDIO = "keepLastAudio"; - - /** - * The property that specifies how to convert stereo audio to mono. Currently, the possible values are - * "average", which averages the samples from at each channel, or "selectChannel", which chooses audio only from - * that channel. If you choose "selectChannel", you should also specify which channel to use with the - * "selectChannel" property. - */ - @S4String(defaultValue = "average", range = {"average", "selectChannel"}) - public final static String PROP_STEREO_TO_MONO = "stereoToMono"; - - /** - * The property that specifies the channel to use if the audio is stereo - */ - @S4Integer(defaultValue = 0) - public final static String PROP_SELECT_CHANNEL = "selectChannel"; - - /** - * The property that specifies the mixer to use. The value can be "default," (which means let the - * AudioSystem decide), "last," (which means select the last Mixer supported by the AudioSystem), which appears to - * be what is often used for USB headsets, or an integer value which represents the index of the Mixer.Info that is - * returned by AudioSystem.getMixerInfo(). To get the list of Mixer.Info objects, run the AudioTool application with - * a command line argument of "-dumpMixers". - * - * @see edu.cmu.sphinx.tools.audio.AudioTool - */ - @S4String(defaultValue = "default") - public final static String PROP_SELECT_MIXER = "selectMixer"; - - - /** - * The property that specifies the size of the buffer used to store - * audio samples recorded from the microphone. Default value - * correspond to 200ms. Smaller value decrease microphone latency with - * danger of dropping out the frames if decoding thread will - * be slow enough to process the result. - */ - @S4Integer(defaultValue = 6400) - public final static String PROP_BUFFER_SIZE = "bufferSize"; - - - private AudioFormat finalFormat; - private AudioInputStream audioStream; - private TargetDataLine audioLine; - private BlockingQueue audioList; - private Utterance currentUtterance; - private boolean doConversion; - private volatile boolean recording; - private volatile boolean utteranceEndReached = true; - private RecordingThread recorder; - - // Configuration data - - private AudioFormat desiredFormat; - private boolean closeBetweenUtterances; - private boolean keepDataReference; - private boolean signed; - private boolean bigEndian; - private int frameSizeInBytes; - private int msecPerRead; - private int selectedChannel; - private String selectedMixerIndex; - private String stereoToMono; - private int sampleRate; - private int audioBufferSize; - - /** - * @param sampleRate sample rate of the data - * @param bitsPerSample number of bits per value. - * @param channels number of channels. - * @param bigEndian the endianness of the data - * @param signed whether the data is signed. - * @param closeBetweenUtterances whether or not the microphone will release the audio between utterances. On - * certain systems (Linux for one), closing and reopening the audio does not work too well. The default is false for - * Linux systems, true for others - * @param msecPerRead the number of milliseconds of audio data to read each time from the underlying - * Java Sound audio device. - * @param keepLastAudio whether to keep the audio data of an utterance around until the next utterance - * is recorded. - * @param stereoToMono how to convert stereo audio to mono. Currently, the possible values are - * "average", which averages the samples from at each channel, or "selectChannel", which chooses audio only from - * that channel. If you choose "selectChannel", you should also specify which channel to use with the - * "selectChannel" property. - * @param selectedChannel the channel to use if the audio is stereo - * @param selectedMixerIndex the mixer to use. The value can be "default," (which means let the - * AudioSystem decide), "last," (which means select the last Mixer supported by the AudioSystem), which appears to - * be what is often used for USB headsets, or an integer value which represents the index of the Mixer.Info that is - * returned by AudioSystem.getMixerInfo(). To get the list of Mixer.Info objects, run the AudioTool application with - * a command line argument of "-dumpMixers". - * @param audioBufferSize buffer size - */ - public Microphone(int sampleRate, int bitsPerSample, int channels, - boolean bigEndian, boolean signed, boolean closeBetweenUtterances, int msecPerRead, boolean keepLastAudio, - String stereoToMono, int selectedChannel, String selectedMixerIndex, int audioBufferSize) { - initLogger(); - - this.sampleRate = sampleRate; - this.bigEndian = bigEndian; - this.signed = signed; - - this.desiredFormat = new AudioFormat - (sampleRate, bitsPerSample, channels, signed, bigEndian); - - this.closeBetweenUtterances = closeBetweenUtterances; - this.msecPerRead = msecPerRead; - this.keepDataReference = keepLastAudio; - this.stereoToMono = stereoToMono; - this.selectedChannel = selectedChannel; - this.selectedMixerIndex = selectedMixerIndex; - this.audioBufferSize = audioBufferSize; - } - - public Microphone() { - - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - logger = ps.getLogger(); - - sampleRate = ps.getInt(PROP_SAMPLE_RATE); - - int sampleSizeInBits = ps.getInt(PROP_BITS_PER_SAMPLE); - - int channels = ps.getInt(PROP_CHANNELS); - bigEndian = ps.getBoolean(PROP_BIG_ENDIAN); - signed = ps.getBoolean(PROP_SIGNED); - - desiredFormat = new AudioFormat - (sampleRate, sampleSizeInBits, channels, signed, bigEndian); - - closeBetweenUtterances = ps.getBoolean(PROP_CLOSE_BETWEEN_UTTERANCES); - msecPerRead = ps.getInt(PROP_MSEC_PER_READ); - keepDataReference = ps.getBoolean(PROP_KEEP_LAST_AUDIO); - stereoToMono = ps.getString(PROP_STEREO_TO_MONO); - selectedChannel = ps.getInt(PROP_SELECT_CHANNEL); - selectedMixerIndex = ps.getString(PROP_SELECT_MIXER); - audioBufferSize = ps.getInt(PROP_BUFFER_SIZE); - } - - - /** - * Constructs a Microphone with the given InputStream. - */ - @Override - public void initialize() { - super.initialize(); - audioList = new LinkedBlockingQueue(); - - DataLine.Info info - = new DataLine.Info(TargetDataLine.class, desiredFormat); - - /* If we cannot get an audio line that matches the desired - * characteristics, shoot for one that matches almost - * everything we want, but has a higher sample rate. - */ - if (!AudioSystem.isLineSupported(info)) { - logger.info(desiredFormat + " not supported"); - AudioFormat nativeFormat - = DataUtil.getNativeAudioFormat(desiredFormat, - getSelectedMixer()); - if (nativeFormat == null) { - logger.severe("couldn't find suitable target audio format"); - } else { - finalFormat = nativeFormat; - - /* convert from native to the desired format if supported */ - doConversion = AudioSystem.isConversionSupported - (desiredFormat, nativeFormat); - - if (doConversion) { - logger.info - ("Converting from " + finalFormat.getSampleRate() - + "Hz to " + desiredFormat.getSampleRate() + "Hz"); - } else { - logger.info - ("Using native format: Cannot convert from " + - finalFormat.getSampleRate() + "Hz to " + - desiredFormat.getSampleRate() + "Hz"); - } - } - } else { - logger.info("Desired format: " + desiredFormat + " supported."); - finalFormat = desiredFormat; - } - } - - - /** - * Gets the Mixer to use. Depends upon selectedMixerIndex being defined. - * - * @see #newProperties - */ - private Mixer getSelectedMixer() { - if (selectedMixerIndex.equals("default")) { - return null; - } else { - Mixer.Info[] mixerInfo = AudioSystem.getMixerInfo(); - if (selectedMixerIndex.equals("last")) { - return AudioSystem.getMixer(mixerInfo[mixerInfo.length - 1]); - } else { - int index = Integer.parseInt(selectedMixerIndex); - return AudioSystem.getMixer(mixerInfo[index]); - } - } - } - - - /** - * Creates the audioLine if necessary and returns it. - */ - private TargetDataLine getAudioLine() { - if (audioLine != null) { - return audioLine; - } - - /* Obtain and open the line and stream. - */ - try { - /* The finalFormat was decided in the initialize() method - * and is based upon the capabilities of the underlying - * audio system. The final format will have all the - * desired audio characteristics, but may have a sample - * rate that is higher than desired. The idea here is - * that we'll let the processors in the front end (e.g., - * the FFT) handle some form of downsampling for us. - */ - logger.info("Final format: " + finalFormat); - - DataLine.Info info = new DataLine.Info(TargetDataLine.class, - finalFormat); - - /* We either get the audio from the AudioSystem (our - * default choice), or use a specific Mixer if the - * selectedMixerIndex property has been set. - */ - Mixer selectedMixer = getSelectedMixer(); - if (selectedMixer == null) { - audioLine = (TargetDataLine) AudioSystem.getLine(info); - } else { - audioLine = (TargetDataLine) selectedMixer.getLine(info); - } - - /* Add a line listener that just traces - * the line states. - */ - audioLine.addLineListener(new LineListener() { - public void update(LineEvent event) { - logger.info("line listener " + event); - } - }); - } catch (LineUnavailableException e) { - logger.severe("microphone unavailable " + e.getMessage()); - } - - return audioLine; - } - - - /** - * Opens the audio capturing device so that it will be ready for capturing audio. Attempts to create a converter if - * the requested audio format is not directly available. - * - * @return true if the audio capturing device is opened successfully; false otherwise - */ - private boolean open() { - TargetDataLine audioLine = getAudioLine(); - if (audioLine != null) { - if (!audioLine.isOpen()) { - logger.info("open"); - try { - audioLine.open(finalFormat, audioBufferSize); - } catch (LineUnavailableException e) { - logger.severe("Can't open microphone " + e.getMessage()); - return false; - } - - audioStream = new AudioInputStream(audioLine); - if (doConversion) { - audioStream = AudioSystem.getAudioInputStream - (desiredFormat, audioStream); - assert (audioStream != null); - } - - /* Set the frame size depending on the sample rate. - */ - float sec = msecPerRead / 1000.f; - frameSizeInBytes = - (audioStream.getFormat().getSampleSizeInBits() / 8) * - (int) (sec * audioStream.getFormat().getSampleRate()) * - desiredFormat.getChannels(); - - logger.info("Frame size: " + frameSizeInBytes + " bytes"); - } - return true; - } else { - logger.severe("Can't find microphone"); - return false; - } - } - - - /** - * Returns the format of the audio recorded by this Microphone. Note that this might be different from the - * configured format. - * - * @return the current AudioFormat - */ - public AudioFormat getAudioFormat() { - return finalFormat; - } - - - /** - * Returns the current Utterance. - * - * @return the current Utterance - */ - public Utterance getUtterance() { - return currentUtterance; - } - - - /** - * Returns true if this Microphone is recording. - * - * @return true if this Microphone is recording, false otherwise - */ - public boolean isRecording() { - return recording; - } - - - /** - * Starts recording audio. This method will return only when a START event is received, meaning that this Microphone - * has started capturing audio. - * - * @return true if the recording started successfully; false otherwise - */ - public synchronized boolean startRecording() { - if (recording) { - return false; - } - if (!open()) { - return false; - } - utteranceEndReached = false; - if (audioLine.isRunning()) { - logger.severe("Whoops: audio line is running"); - } - assert (recorder == null); - recorder = new RecordingThread("Microphone"); - recorder.start(); - recording = true; - return true; - } - - - /** - * Stops recording audio. This method does not return until recording has been stopped and all data has been read - * from the audio line. - */ - public synchronized void stopRecording() { - if (audioLine != null) { - if (recorder != null) { - recorder.stopRecording(); - recorder = null; - } - recording = false; - } - } - - - /** - * This Thread records audio, and caches them in an audio buffer. - */ - class RecordingThread extends Thread { - - private boolean done; - private volatile boolean started; - private long totalSamplesRead; - private final Object lock = new Object(); - - - /** - * Creates the thread with the given name - * - * @param name the name of the thread - */ - public RecordingThread(String name) { - super(name); - } - - - /** - * Starts the thread, and waits for recorder to be ready - */ - @Override - public void start() { - started = false; - super.start(); - waitForStart(); - } - - - /** - * Stops the thread. This method does not return until recording has actually stopped, and all the data has been - * read from the audio line. - */ - public void stopRecording() { - audioLine.stop(); - try { - synchronized (lock) { - while (!done) { - lock.wait(); - } - } - } catch (InterruptedException e) { - e.printStackTrace(); - } - - // flush can not be called here because the audio-line might has been set to null already by the mic-thread -// audioLine.flush(); - } - - - /** - * Implements the run() method of the Thread class. Records audio, and cache them in the audio buffer. - */ - @Override - public void run() { - totalSamplesRead = 0; - logger.info("started recording"); - - if (keepDataReference) { - currentUtterance = new Utterance - ("Microphone", audioStream.getFormat()); - } - - audioList.add(new DataStartSignal(sampleRate)); - logger.info("DataStartSignal added"); - try { - audioLine.start(); - while (!done) { - Data data = readData(currentUtterance); - if (data == null) { - done = true; - break; - } - audioList.add(data); - } - audioLine.flush(); - if (closeBetweenUtterances) { - /* Closing the audio stream *should* (we think) - * also close the audio line, but it doesn't - * appear to do this on the Mac. In addition, - * once the audio line is closed, re-opening it - * on the Mac causes some issues. The Java sound - * spec is also kind of ambiguous about whether a - * closed line can be re-opened. So...we'll go - * for the conservative route and never attempt - * to re-open a closed line. - */ - audioStream.close(); - audioLine.close(); - System.err.println("set to null"); - audioLine = null; - } - } catch (IOException ioe) { - logger.warning("IO Exception " + ioe.getMessage()); - ioe.printStackTrace(); - } - long duration = (long) - (((double) totalSamplesRead / - (double) audioStream.getFormat().getSampleRate()) * 1000.0); - - audioList.add(new DataEndSignal(duration)); - logger.info("DataEndSignal ended"); - logger.info("stopped recording"); - - synchronized (lock) { - lock.notify(); - } - } - - - /** - * Waits for the recorder to start - */ - private synchronized void waitForStart() { - // note that in theory we could use a LineEvent START - // to tell us when the microphone is ready, but we have - // found that some javasound implementations do not always - // issue this event when a line is opened, so this is a - // WORKAROUND. - - try { - while (!started) { - wait(); - } - } catch (InterruptedException ie) { - logger.warning("wait was interrupted"); - } - } - - - /** - * Reads one frame of audio data, and adds it to the given Utterance. - * - * @param utterance - * @return an Data object containing the audio data - * @throws java.io.IOException - */ - private Data readData(Utterance utterance) throws IOException { - - // Read the next chunk of data from the TargetDataLine. - byte[] data = new byte[frameSizeInBytes]; - - int channels = audioStream.getFormat().getChannels(); - long firstSampleNumber = totalSamplesRead / channels; - - int numBytesRead = audioStream.read(data, 0, data.length); - - // notify the waiters upon start - if (!started) { - synchronized (this) { - started = true; - notifyAll(); - } - } - - if (logger.isLoggable(Level.FINE)) { - logger.info("Read " + numBytesRead - + " bytes from audio stream."); - } - if (numBytesRead <= 0) { - return null; - } - int sampleSizeInBytes = - audioStream.getFormat().getSampleSizeInBits() / 8; - totalSamplesRead += (numBytesRead / sampleSizeInBytes); - - if (numBytesRead != frameSizeInBytes) { - - if (numBytesRead % sampleSizeInBytes != 0) { - throw new Error("Incomplete sample read."); - } - - data = Arrays.copyOf(data, numBytesRead); - } - - if (keepDataReference) { - utterance.add(data); - } - - double[] samples; - - if (bigEndian) { - samples = DataUtil.bytesToValues - (data, 0, data.length, sampleSizeInBytes, signed); - } else { - samples = DataUtil.littleEndianBytesToValues - (data, 0, data.length, sampleSizeInBytes, signed); - } - - if (channels > 1) { - samples = convertStereoToMono(samples, channels); - } - - return (new DoubleData - (samples, (int) audioStream.getFormat().getSampleRate(), - firstSampleNumber)); - } - } - - - /** - * Converts stereo audio to mono. - * - * @param samples the audio samples, each double in the array is one sample - * @param channels the number of channels in the stereo audio - */ - private double[] convertStereoToMono(double[] samples, int channels) { - assert (samples.length % channels == 0); - double[] finalSamples = new double[samples.length / channels]; - if (stereoToMono.equals("average")) { - for (int i = 0, j = 0; i < samples.length; j++) { - double sum = samples[i++]; - for (int c = 1; c < channels; c++) { - sum += samples[i++]; - } - finalSamples[j] = sum / channels; - } - } else if (stereoToMono.equals("selectChannel")) { - for (int i = selectedChannel, j = 0; i < samples.length; - i += channels, j++) { - finalSamples[j] = samples[i]; - } - } else { - throw new Error("Unsupported stereo to mono conversion: " + - stereoToMono); - } - return finalSamples; - } - - - /** - * Clears all cached audio data. - */ - public void clear() { - audioList.clear(); - } - - - /** - * Reads and returns the next Data object from this Microphone, return null if there is no more audio data. All - * audio data captured in-between startRecording() and stopRecording() is cached in an - * Utterance object. Calling this method basically returns the next chunk of audio data cached in this Utterance. - * - * @return the next Data or null if none is available - * @throws DataProcessingException if there is a data processing error - */ - @Override - public Data getData() throws DataProcessingException { - - Data output = null; - - if (!utteranceEndReached) { - try { - output = audioList.take(); - } catch (InterruptedException ie) { - throw new DataProcessingException("cannot take Data from audioList", ie); - } - if (output instanceof DataEndSignal) { - utteranceEndReached = true; - } - } - return output; - } - - - /** - * Returns true if there is more data in the Microphone. - * This happens either if the a DataEndSignal data was not taken from the buffer, - * or if the buffer in the Microphone is not yet empty. - * - * @return true if there is more data in the Microphone - */ - public boolean hasMoreData() { - return !(utteranceEndReached && audioList.isEmpty()); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/StreamCepstrumSource.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/StreamCepstrumSource.java deleted file mode 100755 index a88ea15f..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/StreamCepstrumSource.java +++ /dev/null @@ -1,209 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - - -package edu.cmu.sphinx.frontend.util; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.util.ExtendedStreamTokenizer; -import edu.cmu.sphinx.util.Utilities; -import edu.cmu.sphinx.util.props.*; - -import java.io.BufferedInputStream; -import java.io.DataInputStream; -import java.io.IOException; -import java.io.InputStream; - - -/** - * Produces Mel-cepstrum data from an InputStream. To set the inputstream with cepstral data, use the {@link - * #setInputStream(InputStream,boolean) setInputStream} method, and then call {@link #getData} to obtain the Data - * objects that have cepstra data in it. - */ -public class StreamCepstrumSource extends BaseDataProcessor { - - /** The property specifying whether the input is in binary. */ - @S4Boolean(defaultValue = true) - public final static String PROP_BINARY = "binary"; - - /** The property name for frame size in milliseconds. */ - @S4Double(defaultValue = 25.625) - public static final String PROP_FRAME_SIZE_MS = "frameSizeInMs"; - - /** The property name for frame shift in milliseconds, which has a default value of 10F. */ - @S4Double(defaultValue = 10.0) - public static final String PROP_FRAME_SHIFT_MS = "frameShiftInMs"; - - /** The property specifying the length of the cepstrum data. */ - @S4Integer(defaultValue = 13) - public static final String PROP_CEPSTRUM_LENGTH = "cepstrumLength"; - - /** The property specifying whether the input data is big-endian. */ - @S4Boolean(defaultValue = false) - public static final String PROP_BIG_ENDIAN_DATA = "bigEndianData"; - - /** The property that defines the sample rate */ - @S4Integer(defaultValue = 16000) - public static final String PROP_SAMPLE_RATE = "sampleRate"; - - private boolean binary; - private ExtendedStreamTokenizer est; // for ASCII files - private DataInputStream binaryStream; // for binary files - private int numPoints; - private int curPoint; - private int cepstrumLength; - private int frameShift; - private int frameSize; - private int sampleRate; - private long firstSampleNumber; - private boolean bigEndian; - - public StreamCepstrumSource( int cepstrumLength, boolean binary, float frameShiftMs, float frameSizeMs, int sampleRate ) { - initLogger(); - this.cepstrumLength = cepstrumLength; - this.binary = binary; - this.sampleRate = sampleRate; - this.frameShift = DataUtil.getSamplesPerWindow(sampleRate, frameShiftMs); - this.frameSize = DataUtil.getSamplesPerShift(sampleRate, frameSizeMs); - } - - public StreamCepstrumSource( ) { - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - cepstrumLength = ps.getInt(PROP_CEPSTRUM_LENGTH); - binary = ps.getBoolean(PROP_BINARY); - bigEndian = ps.getBoolean(PROP_BIG_ENDIAN_DATA); - float frameShiftMs = ps.getFloat(PROP_FRAME_SHIFT_MS); - float frameSizeMs = ps.getFloat(PROP_FRAME_SIZE_MS); - sampleRate = ps.getInt(PROP_SAMPLE_RATE); - frameShift = DataUtil.getSamplesPerWindow(sampleRate, frameShiftMs); - frameSize = DataUtil.getSamplesPerShift(sampleRate, frameSizeMs); - } - - - /** Constructs a StreamCepstrumSource that reads MelCepstrum data from the given path. */ - @Override - public void initialize() { - super.initialize(); - curPoint = -1; - firstSampleNumber = 0; - bigEndian = false; - } - - - /** - * Sets the InputStream to read cepstral data from. - * - * @param is the InputStream to read cepstral data from - * @param bigEndian true if the InputStream data is in big-endian, false otherwise - * @throws IOException if an I/O error occurs - */ - public void setInputStream(InputStream is, boolean bigEndian) - throws IOException { - this.bigEndian = bigEndian; - if (binary) { - binaryStream = new DataInputStream(new BufferedInputStream(is)); - if (bigEndian) { - numPoints = binaryStream.readInt(); - System.out.println("BigEndian"); - } else { - numPoints = Utilities.readLittleEndianInt(binaryStream); - System.out.println("LittleEndian"); - } - System.out.println("Frames: " + numPoints / cepstrumLength); - } else { - est = new ExtendedStreamTokenizer(is, false); - numPoints = est.getInt("num_frames"); - est.expectString("frames"); - } - curPoint = -1; - firstSampleNumber = 0; - } - - - /** - * Returns the next Data object, which is the mel cepstrum of the input frame. However, it can also be other Data - * objects like DataStartSignal. - * - * @return the next available Data object, returns null if no Data object is available - * @throws DataProcessingException if a data processing error occurs - */ - @Override - public Data getData() throws DataProcessingException { - - Data data; - - if (curPoint == -1) { - data = new DataStartSignal(sampleRate); - curPoint++; - } else if (curPoint == numPoints) { - if (numPoints > 0) { - firstSampleNumber = - (firstSampleNumber - frameShift + frameSize - 1); - } - // send a DataEndSignal - int numberFrames = curPoint / cepstrumLength; - int totalSamples = (numberFrames - 1) * frameShift + frameSize; - long duration = (long) - (((double) totalSamples / (double) sampleRate) * 1000.0); - - data = new DataEndSignal(duration); - - try { - if (binary) { - binaryStream.close(); - } else { - est.close(); - } - curPoint++; - } catch (IOException ioe) { - throw new DataProcessingException("IOException closing cepstrum stream", ioe); - } - } else if (curPoint > numPoints) { - data = null; - } else { - double[] vectorData = new double[cepstrumLength]; - - for (int i = 0; i < cepstrumLength; i++) { - try { - if (binary) { - if (bigEndian) { - vectorData[i] = binaryStream.readFloat(); - } else { - vectorData[i] = Utilities.readLittleEndianFloat(binaryStream); - } - } else { - vectorData[i] = est.getFloat("cepstrum data"); - } - curPoint++; - } catch (IOException ioe) { - throw new DataProcessingException("IOException reading from cepstrum stream", ioe); - } - } - - // System.out.println("Read: " + curPoint); - data = new DoubleData - (vectorData, sampleRate, firstSampleNumber); - firstSampleNumber += frameShift; - // System.out.println(data); - } - return data; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/StreamDataSource.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/StreamDataSource.java deleted file mode 100755 index a742abcf..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/StreamDataSource.java +++ /dev/null @@ -1,271 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.frontend.util; - -import java.io.IOException; -import java.io.InputStream; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.util.TimeFrame; -import edu.cmu.sphinx.util.props.*; - -/** - * A StreamDataSource converts data from an InputStream into Data objects. One - * would call {@link #setInputStream(InputStream,TimeFrame) setInputStream} to set - * the input stream, and call {@link #getData} to obtain the Data object. The - * InputStream can be an arbitrary stream, for example a data from the network - * or from a pipe. - * - * StreamDataSource is not aware about incoming data format and assumes - * that incoming data matches StreamDataSource configuration. By default it's configured - * to read 16 kHz little-endian 16-bit signed raw data. If data has wrong format - * the result of the recognition is undefined. Also note that the sample rate of the - * data must match the sample required by the the acoustic model. If your - * model decodes 16 kHz files you can't recognize 8kHz data using it. - * - * You can use AudioFileDataSource instead to read the file headers and - * to convert incoming data to the required format automatically. - */ -public class StreamDataSource extends BaseDataProcessor { - - /** The property for the sample rate. */ - @S4Integer(defaultValue = 16000) - public static final String PROP_SAMPLE_RATE = "sampleRate"; - - /** - * The property for the number of bytes to read from the InputStream each - * time. - */ - @S4Integer(defaultValue = 3200) - public static final String PROP_BYTES_PER_READ = "bytesPerRead"; - - /** The property for the number of bits per value. */ - @S4Integer(defaultValue = 16) - public static final String PROP_BITS_PER_SAMPLE = "bitsPerSample"; - - /** The property specifying whether the input data is big-endian. */ - @S4Boolean(defaultValue = false) - public static final String PROP_BIG_ENDIAN_DATA = "bigEndianData"; - - /** The property specifying whether the input data is signed. */ - @S4Boolean(defaultValue = true) - public static final String PROP_SIGNED_DATA = "signedData"; - - private InputStream dataStream; - protected int sampleRate; - private int bytesPerRead; - private int bytesPerValue; - private long totalValuesRead; - private boolean bigEndian; - private boolean signedData; - private boolean streamEndReached; - private boolean utteranceEndSent; - private boolean utteranceStarted; - protected int bitsPerSample; - - private TimeFrame timeFrame = TimeFrame.INFINITE; - - public StreamDataSource(int sampleRate, int bytesPerRead, - int bitsPerSample, boolean bigEndian, boolean signedData) { - initLogger(); - init(sampleRate, bytesPerRead, bitsPerSample, bigEndian, signedData); - } - - public StreamDataSource() { - - } - - /* - * (non-Javadoc) - * @see - * edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx. - * util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - init( - ps.getInt(PROP_SAMPLE_RATE), - ps.getInt(PROP_BYTES_PER_READ), - ps.getInt(PROP_BITS_PER_SAMPLE), - ps.getBoolean(PROP_BIG_ENDIAN_DATA), - ps.getBoolean(PROP_SIGNED_DATA)); - } - - private void init(int sampleRate, - int bytesPerRead, - int bitsPerSample, - boolean bigEndian, - boolean signedData) { - this.sampleRate = sampleRate; - this.bytesPerRead = bytesPerRead; - this.bitsPerSample = bitsPerSample; - - if (this.bitsPerSample % 8 != 0) - throw new IllegalArgumentException( - "bits per sample must be a multiple of 8"); - - this.bytesPerValue = bitsPerSample / 8; - this.bigEndian = bigEndian; - this.signedData = signedData; - this.bytesPerRead += bytesPerRead % 2; - } - - /* - * (non-Javadoc) - * @see - * edu.cmu.sphinx.frontend.DataProcessor#initialize(edu.cmu.sphinx.frontend - * .CommonConfig) - */ - @Override - public void initialize() { - super.initialize(); - } - - public void setInputStream(InputStream inputStream) { - setInputStream(inputStream, TimeFrame.INFINITE); - } - - /** - * Sets the InputStream from which this StreamDataSource reads. - * - * @param inputStream the InputStream from which audio data comes - * @param timeFrame time frame to process - */ - public void setInputStream(InputStream inputStream, TimeFrame timeFrame) { - dataStream = inputStream; - this.timeFrame = timeFrame; - streamEndReached = false; - utteranceEndSent = false; - utteranceStarted = false; - totalValuesRead = 0; - } - - /** - * Reads and returns the next Data from the InputStream of - * StreamDataSource, return null if no data is read and end of file is - * reached. - * - * @return the next Data or null if none is available - * @throws DataProcessingException if there is a data processing error - */ - @Override - public Data getData() throws DataProcessingException { - Data output = null; - if (streamEndReached) { - if (!utteranceEndSent) { - // since 'firstSampleNumber' starts at 0, the last - // sample number should be 'totalValuesRead - 1' - output = new DataEndSignal(getDuration()); - utteranceEndSent = true; - } - } else { - if (!utteranceStarted) { - utteranceStarted = true; - output = new DataStartSignal(sampleRate); - } else { - if (dataStream != null) { - do { - output = readNextFrame(); - } while (output != null && getDuration() < timeFrame.getStart()); - - if ((output == null || getDuration() > timeFrame.getEnd()) - && !utteranceEndSent) { - output = new DataEndSignal(getDuration()); - utteranceEndSent = true; - streamEndReached = true; - } - } else { - logger.warning("Input stream is not set"); - if (!utteranceEndSent) { - output = new DataEndSignal(getDuration()); - utteranceEndSent = true; - } - } - } - } - return output; - } - - /** - * Returns the next Data from the input stream, or null if there is none - * available - * - * @return a Data or null - * @throws edu.cmu.sphinx.frontend.DataProcessingException - */ - private DoubleData readNextFrame() throws DataProcessingException { - // read one frame's worth of bytes - int read; - int totalRead = 0; - final int bytesToRead = bytesPerRead; - byte[] samplesBuffer = new byte[bytesPerRead]; - long firstSample = totalValuesRead; - try { - do { - read = dataStream.read(samplesBuffer, totalRead, bytesToRead - - totalRead); - if (read > 0) { - totalRead += read; - } - } while (read != -1 && totalRead < bytesToRead); - if (totalRead <= 0) { - closeDataStream(); - return null; - } - // shrink incomplete frames - totalValuesRead += (totalRead / bytesPerValue); - if (totalRead < bytesToRead) { - totalRead = (totalRead % 2 == 0) - ? totalRead + 2 - : totalRead + 3; - byte[] shrinkedBuffer = new byte[totalRead]; - System - .arraycopy(samplesBuffer, 0, shrinkedBuffer, 0, - totalRead); - samplesBuffer = shrinkedBuffer; - closeDataStream(); - } - } catch (IOException ioe) { - throw new DataProcessingException("Error reading data", ioe); - } - // turn it into an Data object - double[] doubleData; - if (bigEndian) { - doubleData = DataUtil.bytesToValues(samplesBuffer, 0, totalRead, - bytesPerValue, signedData); - } else { - doubleData = DataUtil.littleEndianBytesToValues(samplesBuffer, - 0, - totalRead, - bytesPerValue, - signedData); - } - return new DoubleData(doubleData, sampleRate, firstSample); - } - - private void closeDataStream() throws IOException { - streamEndReached = true; - if (dataStream != null) { - dataStream.close(); - } - } - - /** - * Returns the duration of the current data stream in milliseconds. - * - * @return the duration of the current data stream in milliseconds - */ - private long getDuration() { - return (long) (((double) totalValuesRead / (double) sampleRate) * 1000.0); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/StreamHTKCepstrum.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/StreamHTKCepstrum.java deleted file mode 100755 index 21117620..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/StreamHTKCepstrum.java +++ /dev/null @@ -1,227 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - * adapted by Christophe Cerisara june 2007 - * - */ - - -package edu.cmu.sphinx.frontend.util; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.util.Utilities; -import edu.cmu.sphinx.util.props.*; - -import java.io.BufferedInputStream; -import java.io.DataInputStream; -import java.io.IOException; -import java.io.InputStream; - - -/** - * Produces Mel-cepstrum data from an InputStream. To set the input stream with cepstral data, use the {@link - * #setInputStream(InputStream) setInputStream} method, and then call {@link #getData} to obtain the Data - * objects that have cepstrum data in it. - */ -public class StreamHTKCepstrum extends BaseDataProcessor { - - /** The property specifying whether the input is in binary. */ - @S4Boolean(defaultValue = true) - public final static String PROP_BINARY = "binary"; - - /** The property specifying whether the input is big endian. */ - @S4Boolean(defaultValue = true) - public final static String PROP_BIGENDIAN = "bigEndian"; - - /** The property name for frame size in milliseconds. */ - @S4Double(defaultValue = 25.625) - public static final String PROP_FRAME_SIZE_MS = "frameSizeInMs"; - - /** The property name for frame shift in milliseconds, which has a default value of 10F. */ - @S4Double(defaultValue = 10.0) - public static final String PROP_FRAME_SHIFT_MS = "frameShiftInMs"; - - /** The property specifying the length of the cepstrum data. */ - @S4Integer(defaultValue = 13) - public static final String PROP_CEPSTRUM_LENGTH = "cepstrumLength"; - - /** The property that defines the sample rate */ - @S4Integer(defaultValue = 16000) - public static final String PROP_SAMPLE_RATE = "sampleRate"; - - private DataInputStream binaryStream; // for binary files - private int numPoints; - private int curPoint; - private int cepstrumLength; - private int frameShift; - private int frameSize; - private int sampleRate; - private long firstSampleNumber; - private boolean bigEndian; - - public StreamHTKCepstrum( float frameShiftMs, float frameSizeMs, boolean bigEndian, int sampleRate ) { - initLogger(); - this.bigEndian = bigEndian; - this.sampleRate = sampleRate; - this.frameShift = DataUtil.getSamplesPerWindow(sampleRate, frameShiftMs); - this.frameSize = DataUtil.getSamplesPerShift(sampleRate, frameSizeMs); - } - - public StreamHTKCepstrum( ) { - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - float frameShiftMs = ps.getFloat(PROP_FRAME_SHIFT_MS - ); - float frameSizeMs = ps.getFloat(PROP_FRAME_SIZE_MS - ); - bigEndian = ps.getBoolean(PROP_BIGENDIAN); - sampleRate = ps.getInt(PROP_SAMPLE_RATE); - frameShift = DataUtil.getSamplesPerWindow(sampleRate, frameShiftMs); - frameSize = DataUtil.getSamplesPerShift(sampleRate, frameSizeMs); - logger = ps.getLogger(); - } - - - /** Constructs a StreamCepstrumSource that reads MelCepstrum data from the given path. */ - @Override - public void initialize() { - super.initialize(); - curPoint = -1; - firstSampleNumber = 0; - // we don't want any more that endianness be set at the upper level, as BatchReco - // utilizes an ad-hoc procedure to decide on endianness.. We want it to be fixed in the config file - //bigEndian = true; - } - - - /** - * Sets the InputStream to read cepstral data from. - * - * @param stream the InputStream to read cepstral data from - * @throws IOException if an I/O error occurs - */ - public void setInputStream(InputStream stream) - throws IOException { - { - // TODO: update sampleRate - binaryStream = new DataInputStream(new BufferedInputStream(stream)); - if (bigEndian) { - numPoints = binaryStream.readInt(); - int sampPeriod = binaryStream.readInt(); - short sampSize = binaryStream.readShort(); - short parmKind = binaryStream.readShort(); - - cepstrumLength = sampSize / 4; - numPoints *= cepstrumLength; - - logger.info("Sample period is " + sampPeriod); - logger.info("Sample size " + sampSize); - logger.info("Parameter kind " + parmKind); - logger.info("BigEndian"); - } else { - numPoints = Utilities.readLittleEndianInt(binaryStream); - - int sampPeriod = Utilities.readLittleEndianInt(binaryStream); - short sampSize = readLittleEndianShort(binaryStream); - short parmKind = readLittleEndianShort(binaryStream); - - cepstrumLength = sampSize/4; - numPoints *= cepstrumLength; - - logger.info("Sample period is " + sampPeriod); - logger.info("Sample size " + sampSize); - logger.info("Parameter kind " + parmKind); - logger.info("LittleEndian"); - } - System.out.println("Frames: " + numPoints / cepstrumLength); - } - curPoint = -1; - firstSampleNumber = 0; - } - - public static short readLittleEndianShort(DataInputStream dataStream) - throws IOException { - short bits = 0x0000; - for (int shift = 0; shift < 16; shift += 8) { - int byteRead = (0x00ff & dataStream.readByte()); - bits |= (byteRead << shift); - } - return bits; - } - - /** - * Returns the next Data object, which is the mel cepstrum of the input frame. However, it can also be other Data - * objects like DataStartSignal. - * - * @return the next available Data object, returns null if no Data object is available - * @throws DataProcessingException if a data processing error occurs - */ - @Override - public Data getData() throws DataProcessingException { - - Data data; - - if (curPoint == -1) { - data = new DataStartSignal(sampleRate); - curPoint++; - } else if (curPoint == numPoints) { - if (numPoints > 0) { - firstSampleNumber = - (firstSampleNumber - frameShift + frameSize - 1); - } - // send a DataEndSignal - int numberFrames = curPoint / cepstrumLength; - int totalSamples = (numberFrames - 1) * frameShift + frameSize; - long duration = (long) - (((double) totalSamples / (double) sampleRate) * 1000.0); - - data = new DataEndSignal(duration); - - try { - binaryStream.close(); - curPoint++; - } catch (IOException ioe) { - throw new DataProcessingException("IOException closing cepstrum stream", ioe); - } - } else if (curPoint > numPoints) { - data = null; - } else { - double[] vectorData = new double[cepstrumLength]; - - for (int i = 0; i < cepstrumLength; i++) { - try { - if (bigEndian) { - vectorData[i] = binaryStream.readFloat(); - } else { - vectorData[i] = Utilities.readLittleEndianFloat(binaryStream); - } - curPoint++; - } catch (IOException ioe) { - throw new DataProcessingException("IOException reading from cepstrum stream", ioe); - } - } - - // System.out.println("Read: " + curPoint); - data = new DoubleData - (vectorData, sampleRate, firstSampleNumber); - firstSampleNumber += frameShift; - // System.out.println(data); - } - return data; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/Utterance.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/Utterance.java deleted file mode 100755 index 710764f5..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/Utterance.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.frontend.util; - -import javax.sound.sampled.AudioFileFormat; -import javax.sound.sampled.AudioFormat; -import javax.sound.sampled.AudioInputStream; -import javax.sound.sampled.AudioSystem; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.IOException; - - -/** Represents the complete audio data of an utterance. */ -public class Utterance { - - private final String name; - private final ByteArrayOutputStream audioBuffer; - private final AudioFormat audioFormat; - - - /** - * Constructs a default Utterance object. - * - * @param name the name of this Utterance, e.g., it can be the name of the audio file where the audio came from - * @param format the audio format of this Utterance - */ - public Utterance(String name, AudioFormat format) { - this.name = name; - this.audioFormat = format; - this.audioBuffer = new ByteArrayOutputStream(); - } - - - /** - * Returns the name of this Utterance. - * - * @return the name of this Utterance - */ - public String getName() { - return name; - } - - - /** - * Returns the audio format of this Utterance. - * - * @return the audio format - */ - public AudioFormat getAudioFormat() { - return audioFormat; - } - - - /** - * Adds an audio frame into this Utterance. - * - * @param audio the audio frame to add - */ - public void add(byte[] audio) { - synchronized (audioBuffer) { - audioBuffer.write(audio, 0, audio.length); - } - } - - - /** - * Returns the complete audio stream of this utterance. - * - * @return the complete audio stream - */ - public byte[] getAudio() { - return audioBuffer.toByteArray(); - } - - - /** - * Returns the amount of time (in seconds) this Utterance lasts. - * - * @return how long is this utterance - */ - public float getAudioTime() { - return audioBuffer.size() / - (audioFormat.getSampleRate() * - audioFormat.getSampleSizeInBits() / 8); - } - - - /** - * Save the audio as a WAV file in the given file. - * - * @param fileName the name of the audio file - * @param fileFormat the audio file format - * @throws java.io.IOException if IO went wrong - */ - public void save(String fileName, AudioFileFormat.Type fileFormat) - throws IOException { - File file = new File(fileName); - byte[] audio = getAudio(); - AudioInputStream ais = new AudioInputStream - ((new ByteArrayInputStream(audio)), getAudioFormat(), audio.length); - AudioSystem.write(ais, fileFormat, file); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/VUMeter.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/VUMeter.java deleted file mode 100755 index 7eaf89a8..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/VUMeter.java +++ /dev/null @@ -1,187 +0,0 @@ -package edu.cmu.sphinx.frontend.util; - -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.frontend.DoubleData; - -/** - * Copyright 1999-2006 Carnegie Mellon University. Portions Copyright 2002 Sun Microsystems, Inc. Portions Copyright - * 2002 Mitsubishi Electric Research Laboratories. All Rights Reserved. Use is subject to license terms. - *

    - * See the file "license.terms" for information on usage and redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - *

    - * User: Peter Wolf Date: Mar 9, 2006 Time: 9:30:52 PM - */ -public class VUMeter { - - private double rms; - private double average; - private double peak; - - private static final double log10 = Math.log(10.0); - private static final double maxDB = Math.max(0.0, 20.0 * Math.log(Short.MAX_VALUE) / log10); - - private final int peakHoldTime = 1000; - private long then = System.currentTimeMillis(); - - private final float a2 = -1.9556f; - private final float a3 = 0.9565f; - - private final float b1 = 0.9780f; - private final float b2 = -1.9561f; - private final float b3 = 0.9780f; - - - public final synchronized double getRmsDB() { - return Math.max(0.0, 20.0 * Math.log(rms) / log10); - } - - - public final synchronized double getAverageDB() { - return Math.max(0.0, 20.0 * Math.log(average) / log10); - } - - - public final synchronized double getPeakDB() { - return Math.max(0.0, 20.0 * Math.log(peak) / log10); - } - - - public final synchronized boolean getIsClipping() { - return (Short.MAX_VALUE) < (2 * peak); - } - - - public final synchronized double getMaxDB() { - return maxDB; - } - - - public void calculateVULevels(Data data) { - - if (data instanceof DoubleData) { - - double[] samples = ((DoubleData) data).getValues(); - - calculateVULevels(samples); - } - } - - - public void calculateVULevels(byte[] data, int offset, int cnt) { - short[] samples = new short[cnt / 2]; - for (int i = 0; i < cnt / 2; i++) { - int o = offset + (2 * i); - samples[i] = (short) ((data[o] << 8) | (0x000000FF & data[o + 1])); - //System.out.print(data[2*i] + "+" +data[(2*i)+1] + "=" + samples[i] + " "); - } - calculateVULevels(samples); - } - - - private synchronized void calculateVULevels(double[] samples) { - double energy = 0.0; - average = 0.0; - - double y1 = 0.0f; - double y2 = 0.0f; - - - for (int i = 0; i < samples.length; i++) { - - // remove the DC offset with a filter - - //System.out.print(samples[i] + " "); - - double i1 = samples[i]; - double j = 0; - double k = 0; - - if (i > 0) { - j = samples[i - 1]; - } - if (i > 1) { - k = samples[i - 2]; - } - - double y = b1 * i1 + b2 * j + b3 * k - a2 * y1 - a3 * y2; - - y2 = y1; - y1 = y; - - double v2 = Math.abs(y); - - long now = System.currentTimeMillis(); - - energy += v2 * v2; - average += v2; - - if (v2 > peak) { - peak = v2; - } else if ((now - then) > peakHoldTime) { - peak = v2; - then = now; - } - - } - - rms = energy / samples.length; - rms = Math.sqrt(rms); - average /= samples.length; - } - - - private synchronized void calculateVULevels(short[] samples) { - - double energy = 0.0; - average = 0.0; - - double y1 = 0.0f; - double y2 = 0.0f; - - - for (int i = 0; i < samples.length; i++) { - - // remove the DC offset with a filter - - //System.out.print(samples[i] + " "); - - short i1 = samples[i]; - double j = 0; - double k = 0; - - if (i > 0) { - j = samples[i - 1]; - } - if (i > 1) { - k = samples[i - 2]; - } - - double y = b1 * i1 + b2 * j + b3 * k - a2 * y1 - a3 * y2; - - y2 = y1; - y1 = y; - - double v2 = Math.abs(y); - - long now = System.currentTimeMillis(); - - energy += v2 * v2; - average += v2; - - if (v2 > peak) { - peak = v2; - } else if ((now - then) > peakHoldTime) { - peak = v2; - then = now; - } - - } - - rms = energy / samples.length; - rms = Math.sqrt(rms); - average /= samples.length; - } - - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/VUMeterMonitor.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/VUMeterMonitor.java deleted file mode 100755 index 5e16789f..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/VUMeterMonitor.java +++ /dev/null @@ -1,83 +0,0 @@ -package edu.cmu.sphinx.frontend.util; - -import edu.cmu.sphinx.frontend.*; - -import javax.swing.*; -import java.awt.*; - -/** - * A VU meter to be plugged into a front-end. Preferably this component should be plugged directly behind the - * DataBlocker in order to ensure that only equally sized blocks of meaningful length are used for RMS - * computation. - *

    - * Because vu-monitoring makes sense only for online speech processing the vu-meter will be visible only if data source - * which precedes it is a Microphone. - * - * @author Holger Brandl - */ - -public class VUMeterMonitor extends BaseDataProcessor { - - final VUMeter vumeter; - final VUMeterPanel vuMeterPanel; - final JDialog vuMeterDialog; - - - public VUMeterMonitor() { - vumeter = new VUMeter(); - - vuMeterPanel = new VUMeterPanel(); - vuMeterPanel.setVu(vumeter); - vuMeterPanel.start(); - - vuMeterDialog = new JDialog(); - vuMeterDialog.setBounds(100, 100, 100, 400); - - vuMeterDialog.getContentPane().setLayout(new BorderLayout()); - vuMeterDialog.getContentPane().add(vuMeterPanel); - - vuMeterDialog.setVisible(true); - } - - - @Override - public Data getData() throws DataProcessingException { - Data d = getPredecessor().getData(); - - // show the panel only if a microphone is used as data source - if (d instanceof DataStartSignal) - vuMeterPanel.setVisible(FrontEndUtils.getFrontEndProcessor(this, Microphone.class) != null); - - if (d instanceof DoubleData) - vumeter.calculateVULevels(d); - - return d; - } - - - public JDialog getVuMeterDialog() { - return vuMeterDialog; - } - - - /** A little test-function which plugs a microphone directly into the vu-meter. - * @param args arguments to use - * @throws edu.cmu.sphinx.frontend.DataProcessingException if error occurs - */ - public static void main(String[] args) throws DataProcessingException { - Microphone mic = new Microphone( 16000, 16, 1, - true, true, true, 10, false, - "selectChannel", 2, "default", 6400); - - mic.initialize(); - mic.startRecording(); - - VUMeterMonitor monitor = new VUMeterMonitor(); - monitor.getVuMeterDialog().setModal(true); - monitor.setPredecessor(mic); - - while (true) { - monitor.getData(); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/VUMeterPanel.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/VUMeterPanel.java deleted file mode 100755 index 3858a46a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/VUMeterPanel.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2002-2004 Sun Microsystems, Inc. - * Portions Copyright 2002-2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.frontend.util; - -import javax.swing.*; -import java.awt.*; - -/** - * @author Peter Wolf - */ -@SuppressWarnings("serial") -public class VUMeterPanel extends JPanel { - - public void setVu(VUMeter vu) { - this.vu = vu; - } - - - VUMeter vu; - boolean quit; - Thread thread; - - - public void start() { - quit = false; - thread = new VUMeterPanelThread(); - thread.start(); - } - - - public void stop() { - quit = true; - boolean hasQuit = false; - while (!hasQuit) { - try { - thread.join(); - hasQuit = true; - } catch (InterruptedException e) { - } - } - } - - - class VUMeterPanelThread extends Thread { - - @Override - public void run() { - while (!quit) { - repaint(); // probably this one should be replaced by a more appropriate method call in order to get rid of the annoying flickering - try { - Thread.sleep(10); - } catch (InterruptedException e) { - - } - } - } - } - - /** - * Paint the component. This will be called by AWT/Swing. - * - * @param g The Graphics to draw on. - */ - @Override - public void paintComponent(Graphics g) { - super.paintComponent(g); - - if (vu != null) { - paintVUMeter(g); - } - } - - - final int numberOfLights = 50; - final int greenLevel = (int) (numberOfLights * 0.3); - final int yellowLevel = (int) (numberOfLights * 0.7); - final int redLevel = (int) (numberOfLights * 0.9); - - - public VUMeter getVu() { - return vu; - } - - - private void paintVUMeter(Graphics g) { - int level = (int) ((vu.getRmsDB() / vu.getMaxDB()) * numberOfLights); - int peak = (int) ((vu.getPeakDB() / vu.getMaxDB()) * numberOfLights); - - assert level >= 0; - assert level < numberOfLights; - - Dimension sz = getSize(); - int w = sz.width; - int h = (sz.height / numberOfLights); - - g.setColor(Color.BLACK); - g.fillRect(0, 0, sz.width - 1, sz.height - 1); - - for (int i = 0; i < level; i++) { - setLevelColor(i, g); - g.fillRect(1, sz.height - (i * h) + 1, w - 2, h - 2); - } - - setLevelColor(peak, g); - g.fillRect(1, sz.height - (peak * h) + 1, w - 2, h - 2); - - } - - - private void setLevelColor(int i, Graphics g) { - if (i < greenLevel) - g.setColor(Color.BLUE); - else if (i < yellowLevel) - g.setColor(Color.GREEN); - else if (i < redLevel) - g.setColor(Color.YELLOW); - else - g.setColor(Color.RED); - } -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/WavWriter.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/WavWriter.java deleted file mode 100755 index 7b11671c..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/util/WavWriter.java +++ /dev/null @@ -1,256 +0,0 @@ -package edu.cmu.sphinx.frontend.util; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.frontend.endpoint.SpeechEndSignal; -import edu.cmu.sphinx.frontend.endpoint.SpeechStartSignal; -import edu.cmu.sphinx.util.props.*; - -import javax.sound.sampled.AudioFileFormat; -import javax.sound.sampled.AudioFormat; -import javax.sound.sampled.AudioInputStream; -import javax.sound.sampled.AudioSystem; -import java.io.*; - - -/** - * Stores audio data into numbered (MS-)wav files. - * TODO: currently the WavWriter buffers all audio data until a DataEndSignal occurs. - * - * @author Holger Brandl - */ -public class WavWriter extends BaseDataProcessor { - - /** - * The pathname which must obey the pattern: pattern + i + .wav. After each DataEndSignal the - * smallest unused 'i' is determined. Pattern is padded to create result file with fixed name - * lenght. - */ - @S4String(defaultValue = "seg000000") - public static final String PROP_OUT_FILE_NAME_PATTERN = "outFilePattern"; - - @S4Boolean(defaultValue = false) - public static final String PROP_IS_COMPLETE_PATH = "isCompletePath"; - - /** The property for the number of bits per value. */ - @S4Integer(defaultValue = 16) - public static final String PROP_BITS_PER_SAMPLE = "bitsPerSample"; - - /** The property specifying whether the input data is signed. */ - @S4Boolean(defaultValue = true) - public static final String PROP_SIGNED_DATA = "signedData"; - - /** The property specifying whether the input data is signed. */ - @S4Boolean(defaultValue = false) - public static final String PROP_CAPTURE_UTTERANCES = "captureUtterances"; - - private ByteArrayOutputStream baos; - private DataOutputStream dos; - - private int sampleRate; - private boolean isInSpeech; - - private boolean isSigned = true; - private int bitsPerSample; - - private String outFileNamePattern; - protected boolean captureUtts; - private boolean isCompletePath; - - public WavWriter(String dumpFilePath, boolean isCompletePath, int bitsPerSample, boolean isSigned, boolean captureUtts) { - initLogger(); - - this.outFileNamePattern = dumpFilePath; - this.isCompletePath = isCompletePath; - - this.bitsPerSample = bitsPerSample; - if (bitsPerSample % 8 != 0) { - throw new Error("StreamDataSource: bits per sample must be a multiple of 8."); - } - - this.isSigned = isSigned; - this.captureUtts = captureUtts; - - initialize(); - } - - public WavWriter() { - } - - /* - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - - outFileNamePattern = ps.getString(WavWriter.PROP_OUT_FILE_NAME_PATTERN); - isCompletePath = ps.getBoolean(PROP_IS_COMPLETE_PATH); - - bitsPerSample = ps.getInt(PROP_BITS_PER_SAMPLE); - if (bitsPerSample % 8 != 0) { - throw new Error("StreamDataSource: bits per sample must be a multiple of 8."); - } - - isSigned = ps.getBoolean(PROP_SIGNED_DATA); - captureUtts = ps.getBoolean(PROP_CAPTURE_UTTERANCES); - - initialize(); - } - - @Override - public Data getData() throws DataProcessingException { - Data data = getPredecessor().getData(); - - if (data instanceof DataStartSignal) - sampleRate = ((DataStartSignal) data).getSampleRate(); - - if (data instanceof DataStartSignal || (data instanceof SpeechStartSignal && captureUtts)) { - baos = new ByteArrayOutputStream(); - dos = new DataOutputStream(baos); - } - - - if ((data instanceof DataEndSignal && !captureUtts) || (data instanceof SpeechEndSignal && captureUtts)) { - - String wavName; - if (isCompletePath) - wavName = outFileNamePattern; - else - wavName = getNextFreeIndex(outFileNamePattern); - - writeFile(wavName); - - isInSpeech = false; - } - - if (data instanceof SpeechStartSignal) - isInSpeech = true; - - if ((data instanceof DoubleData || data instanceof FloatData) && (isInSpeech || !captureUtts)) { - DoubleData dd = data instanceof DoubleData ? (DoubleData) data : DataUtil.FloatData2DoubleData((FloatData) data); - double[] values = dd.getValues(); - - for (double value : values) { - try { - dos.writeShort(new Short((short) value)); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - - return data; - } - - - private static String getNextFreeIndex(String outPattern) { - - int fileIndex = 0; - String fileName; - - while (true) { - String indexString = Integer.toString(fileIndex); - - fileName = outPattern.substring(0, - Math.max(0, outPattern.length() - indexString.length())) - + indexString + ".wav"; - - if (!new File(fileName).isFile()) - break; - - fileIndex++; - } - - return fileName; - } - - /** Initializes this DataProcessor. This is typically called after the DataProcessor has been configured. */ - @Override - public void initialize() { - super.initialize(); - - assert outFileNamePattern != null; - baos = new ByteArrayOutputStream(); - } - - /** - * Sets the pattern for the output file name. Useful to change the output - * beside the properties - * - * @param outFileNamePattern file name - */ - public void setOutFilePattern (String outFileNamePattern) { - this.outFileNamePattern = outFileNamePattern; - } - - private static AudioFileFormat.Type getTargetType(String extension) { - AudioFileFormat.Type[] typesSupported = AudioSystem.getAudioFileTypes(); - - for (AudioFileFormat.Type aTypesSupported : typesSupported) { - if (aTypesSupported.getExtension().equals(extension)) { - return aTypesSupported; - } - } - - return null; - } - - - /** - * Converts a big-endian byte array into an array of doubles. Each consecutive bytes in the byte array are converted - * into a double, and becomes the next element in the double array. The size of the returned array is - * (length/bytesPerValue). Currently, only 1 byte (8-bit) or 2 bytes (16-bit) samples are supported. - * - * @param values source values - * @param bytesPerValue the number of bytes per value - * @param signedData whether the data is signed - * @return a double array, or null if byteArray is of zero length - * @throws ArrayIndexOutOfBoundsException if boundary fails - */ - public static byte[] valuesToBytes(double[] values, int bytesPerValue, boolean signedData) - throws ArrayIndexOutOfBoundsException { - - byte[] byteArray = new byte[bytesPerValue * values.length]; - - int byteArInd = 0; - - for (double value : values) { - int val = (int) value; - - - for (int j = bytesPerValue - 1; j >= 0; j++) { - byteArray[byteArInd + j] = (byte) (val & 0xff); - val = val >> 8; - } - - byteArInd += bytesPerValue; - } - - return byteArray; - } - - /** - * Writes the current stream to disc; override this method if you want to take - * additional action on file writes - * - * @param wavName name of the file to be written - */ - protected void writeFile(String wavName) { - AudioFormat wavFormat = new AudioFormat(sampleRate, bitsPerSample, 1, isSigned, true); - AudioFileFormat.Type outputType = getTargetType("wav"); - - byte[] abAudioData = baos.toByteArray(); - ByteArrayInputStream bais = new ByteArrayInputStream(abAudioData); - AudioInputStream ais = new AudioInputStream(bais, wavFormat, abAudioData.length / wavFormat.getFrameSize()); - - File outWavFile = new File(wavName); - - if (AudioSystem.isFileTypeSupported(outputType, ais)) { - try { - AudioSystem.write(ais, outputType, outWavFile); - } catch (IOException e) { - e.printStackTrace(); - } - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/window/RaisedCosineWindower.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/window/RaisedCosineWindower.java deleted file mode 100755 index ff6ce80f..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/frontend/window/RaisedCosineWindower.java +++ /dev/null @@ -1,485 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2002-2004 Sun Microsystems, Inc. - * Portions Copyright 2002-2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.frontend.window; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.frontend.endpoint.*; -import edu.cmu.sphinx.frontend.util.DataUtil; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Double; - -import java.util.Arrays; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - -/** - * Slices up a Data object into a number of overlapping windows (usually referred to as "frames" in the speech world). In - * order to minimize the signal discontinuities at the boundaries of each frame, we multiply each frame with a raised - * cosine windowing function. Moreover, the system uses overlapping windows to capture information that may occur at the - * window boundaries. These events would not be well represented if the windows were juxtaposed.

    The number of - * resulting windows depends on the {@link #PROP_WINDOW_SIZE_MS window size} and the {@link #PROP_WINDOW_SHIFT_MS window - * shift} (commonly known as frame shift in speech world). Figure 1 shows the relationship between the original data - * stream, the window size, the window shift, and the windows returned.

    Framing - *
    Figure 1: Relationship between original data, window size, window shift, and the windows returned.

    The - * raised cosine windowing function will be applied to each such window. Since the {@link #getData()} method returns a - * window, and multiple windows are created for each Data object, this is a 1-to-many processor. Also note that the - * returned windows should have the same number of data points as the windowing function.

    The applied windowing - * function, W(n), of length N (the window size), is given by the following formula: - *

    - * W(n) = (1-a) - (a * cos((2 * Math.PI * n)/(N - 1)))
    - * 
    - * where a is commonly known as the "alpha" value. This variable can be set by the user using the property - * defined by {@link #PROP_ALPHA}. Please follow the links to the see the constant field values. Some values of alpha - * receive special names, since they are used so often. A value of 0.46 for the alpha results in a window named Hamming - * window. A value of 0.5 results in the Hanning window. And a value of 0 results in the Rectangular window. The default - * for this system is the Hamming window, with alpha 0.46 !). Figure 2 below shows the Hamming window function (a = - * 0.46), using our default window size of 25.625 ms and assuming a sample rate of 16kHz, thus yielding 410 samples per - * window.

    Hamming window
    Figure 2: The Hamming window function. - * - * @see Data - */ -public class RaisedCosineWindower extends BaseDataProcessor { - - /** The property for window size in milliseconds. */ - @S4Double(defaultValue = 25.625) - public static final String PROP_WINDOW_SIZE_MS = "windowSizeInMs"; - private float windowSizeInMs; - - /** The property for window shift in milliseconds, which has a default value of 10F. */ - @S4Double(defaultValue = 10.0) - public static final String PROP_WINDOW_SHIFT_MS = "windowShiftInMs"; - private float windowShiftInMs; - - /** The property for the alpha value of the Window, which is the value for the RaisedCosineWindow. */ - @S4Double(defaultValue = 0.46) - public static final String PROP_ALPHA = "alpha"; - private double alpha; - - - // required to access the DataStartSignal-properties - public static final String WINDOW_SHIFT_SAMPLES = "windowSize"; - public static final String WINDOW_SIZE_SAMPLES = "windowShift"; - - private double[] cosineWindow; // the raised consine window - private int windowShift; // the window size - - private List outputQueue; // cache for output windows - private DoubleBuffer overflowBuffer; // cache for overlapped audio regions - private long currentFirstSampleNumber; - private int sampleRate; - - public RaisedCosineWindower( double alpha, float windowSizeInMs, float windowShiftInMs ) { - initLogger(); - this.alpha = alpha; - this.windowSizeInMs = windowSizeInMs; - this.windowShiftInMs = windowShiftInMs; - } - - public RaisedCosineWindower( ) { - - } - - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - - alpha = ps.getDouble(PROP_ALPHA); - windowSizeInMs = ps.getFloat(PROP_WINDOW_SIZE_MS); - windowShiftInMs = ps.getFloat(PROP_WINDOW_SHIFT_MS); - } - - - @Override - public void initialize() { - super.initialize(); - - // createWindow(); - outputQueue = new LinkedList(); - } - - - /** - * Creates the Hamming Window. - * - * @param sampleRate - */ - private void createWindow(int sampleRate) { - if (cosineWindow != null && sampleRate == this.sampleRate) { - return; - } - - this.sampleRate = sampleRate; - - int windowSize = DataUtil.getSamplesPerWindow(sampleRate, windowSizeInMs); - cosineWindow = new double[windowSize]; - - windowShift = DataUtil.getSamplesPerShift(sampleRate, windowShiftInMs); - - if (cosineWindow.length > 1) { - double oneMinusAlpha = (1 - alpha); - for (int i = 0; i < cosineWindow.length; i++) { - cosineWindow[i] = oneMinusAlpha - - alpha * Math.cos(2 * Math.PI * i / (cosineWindow.length - 1.0)); - } - } - - overflowBuffer = new DoubleBuffer(windowSize); - } - - - /** - * Returns the next Data object, which is usually a window of the input Data, with the windowing function applied to - * it. - * - * @return the next available Data object, returns null if no Data object is available - * @throws DataProcessingException if a data processing error occurred - * @see Data - */ - @Override - public Data getData() throws DataProcessingException { - - if (outputQueue.isEmpty()) { - Data input = getPredecessor().getData(); - - if (input != null) { - if (input instanceof DoubleData) { - DoubleData data = (DoubleData) input; - // System.err.print("to windower: "); - // System.err.println(Arrays.toString(data.getValues())); - if (currentFirstSampleNumber == -1) { - currentFirstSampleNumber = data.getFirstSampleNumber(); - } - - // should not be necessary if all DataProcessor would forward Signals. Unfortunately this - // is currently not the case. - createWindow(data.getSampleRate()); - - // process the Data, and output the windows - process(data); - } else { - if (input instanceof DataStartSignal) { - DataStartSignal startSignal = (DataStartSignal) input; - - createWindow(startSignal.getSampleRate()); - - // attach the frame-length and the shift-length to the start-signal to allow - // detection of incorrect frontend settings - Map props = startSignal.getProps(); - props.put(WINDOW_SHIFT_SAMPLES, windowShift); - props.put(WINDOW_SIZE_SAMPLES, cosineWindow.length); - - // reset the current first sample number - currentFirstSampleNumber = -1; - } else if (input instanceof SpeechStartSignal) { - // reset the current first sample number - currentFirstSampleNumber = -1; - } else if (input instanceof DataEndSignal || input instanceof SpeechEndSignal) { - // end of utterance handling - processUtteranceEnd(); - } - - outputQueue.add(input); - } - } - } - - if (!outputQueue.isEmpty()) { - Data output = outputQueue.remove(0); - if (output instanceof DoubleData) { - assert ((DoubleData) output).getValues().length == - cosineWindow.length; - } - return output; - } else { - return null; - } - } - - - /** - * Applies the Windowing to the given Data. The resulting windows are cached in the outputQueue. - * - * @param input the input Data object - * @throws DataProcessingException if a data processing error occurs - */ - private void process(DoubleData input) throws DataProcessingException { - - double[] in = input.getValues(); - int length = overflowBuffer.getOccupancy() + in.length; - - List dataList = new LinkedList(); - dataList.add(input); - - Data utteranceEnd = null; - - // read in more Data if we have under one window's length of data - while (length < cosineWindow.length) { - Data next = getPredecessor().getData(); - if (next instanceof DoubleData) { - dataList.add((DoubleData) next); - length += ((DoubleData) next).getValues().length; - } else { - if (next instanceof DataEndSignal || next instanceof SpeechEndSignal) { - utteranceEnd = next; - break; - } - - outputQueue.add(next); - } - } - - double[] allSamples = in; - - // prepend overflow samples - if (length != in.length) { - - allSamples = new double[length]; - - // copy overflow samples to allSamples buffer - System.arraycopy(overflowBuffer.getBuffer(), 0, allSamples, 0, overflowBuffer.getOccupancy()); - int start = overflowBuffer.getOccupancy(); - - // copy input samples to allSamples buffer - for (DoubleData aDataList : dataList) { - double[] samples = aDataList.getValues(); - System.arraycopy(samples, 0, allSamples, start, samples.length); - start += samples.length; - } - } - - // apply Hamming window - int residual = applyRaisedCosineWindow(allSamples, length); - - // save elements that also belong to the next window - overflowBuffer.reset(); - if (length - residual > 0) { - overflowBuffer.append(allSamples, residual, length - residual); - } - if (utteranceEnd != null) { - // end of utterance handling - processUtteranceEnd(); - outputQueue.add(utteranceEnd); - } - } - - - /** - * What happens when an DataEndSignal is received. Basically pads up to a window of the overflow buffer with zeros, - * and then apply the Hamming window to it. Checks if buffer has data. - */ - private void processUtteranceEnd() { - if (overflowBuffer.getOccupancy() > 0) { - overflowBuffer.padWindow(cosineWindow.length); - applyRaisedCosineWindow - (overflowBuffer.getBuffer(), cosineWindow.length); - overflowBuffer.reset(); - } - } - - - /** - * Applies the Hamming window to the given double array. The windows are added to the output queue. Returns the - * index of the first array element of next window that is not produced because of insufficient data. - * - * @param in the audio data to apply window and the Hamming window - * @param length the number of elements in the array to apply the RaisedCosineWindow - * @return the index of the first array element of the next window - */ - private int applyRaisedCosineWindow(double[] in, int length) { - - int windowCount; - - // if no windows can be created but there is some data, - // pad it with zeros - if (length < cosineWindow.length) { - double[] padded = new double[cosineWindow.length]; - System.arraycopy(in, 0, padded, 0, length); - in = padded; - windowCount = 1; - } else { - windowCount = getWindowCount(length, cosineWindow.length, windowShift); - } - - // create all the windows at once, not individually, saves time - double[][] windows = new double[windowCount][cosineWindow.length]; - - int windowStart = 0; - - for (int i = 0; i < windowCount; windowStart += windowShift, i++) { - - double[] myWindow = windows[i]; - - // apply the Hamming Window function to the window of data - for (int w = 0, s = windowStart; w < myWindow.length; s++, w++) { - myWindow[w] = in[s] * cosineWindow[w]; - } - - // add the frame to the output queue - outputQueue.add(new DoubleData - (myWindow, sampleRate, - currentFirstSampleNumber)); - currentFirstSampleNumber += windowShift; - } - - return windowStart; - } - - - /** - * Returns the number of windows in the given array, given the windowSize and windowShift. - * - * @param arraySize the size of the array - * @param windowSize the window size - * @param windowShift the window shift - * @return the number of windows - */ - private static int getWindowCount(int arraySize, int windowSize, - int windowShift) { - if (arraySize < windowSize) { - return 0; - } else { - int windowCount = 1; - for (int windowEnd = windowSize; - windowEnd + windowShift <= arraySize; - windowEnd += windowShift) { - windowCount++; - } - return windowCount; - } - } - - - /** - * Returns the shift size used to window the incoming speech signal. This value might be used by other components to - * determine the time resolution of feature vectors. - * @return the shift of the window - */ - public float getWindowShiftInMs() { - if (windowShiftInMs == 0) - throw new RuntimeException(this + " was not initialized yet!"); - - return windowShiftInMs; - } - - - public int getSampleRate() { - return sampleRate; - } - - - /** - * Rounds a given sample-number to the number of samples will be processed by this instance including the padding - * samples at the end.. - * @param samples samples to round to - * @return rounded result - */ - public long roundToFrames(long samples) { - int windowSize = DataUtil.getSamplesPerWindow(sampleRate, windowSizeInMs); - int windowShift = DataUtil.getSamplesPerShift(sampleRate, windowShiftInMs); - - long mxNumShifts = samples / windowShift; - - for (int i = (int) mxNumShifts; ; i--) { - long remainingSamples = samples - windowShift * i; - - if (remainingSamples > windowSize) - return windowShift * (i + 1) + windowSize; - } - } -} - - -class DoubleBuffer { - - private final double[] buffer; - private int occupancy; - - - /** Constructs a DoubleBuffer of the given size. - * @param size*/ - DoubleBuffer(int size) { - buffer = new double[size]; - occupancy = 0; - } - - - /** - * Returns the number of elements in this DoubleBuffer. - * - * @return the number of elements in this DoubleBuffer. - */ - public int getOccupancy() { - return occupancy; - } - - - /** - * Returns the underlying double array used to store the data. - * - * @return the underlying double array - */ - public double[] getBuffer() { - return buffer; - } - - - /** - * Appends all the elements in the given array to this DoubleBuffer. - * - * @param src the array to copy from - * @return the resulting number of elements in this DoubleBuffer. - */ - public int appendAll(double[] src) { - return append(src, 0, src.length); - } - - - /** - * Appends the specified elements in the given array to this DoubleBuffer. - * - * @param src the array to copy from - * @param srcPos where in the source array to start from - * @param length the number of elements to copy - * @return the resulting number of elements in this DoubleBuffer - */ - public int append(double[] src, int srcPos, int length) { - if (occupancy + length > buffer.length) { - throw new Error("RaisedCosineWindower: " + - "overflow-buffer: attempting to fill " + - "buffer beyond its capacity."); - } - System.arraycopy(src, srcPos, buffer, occupancy, length); - occupancy += length; - return occupancy; - } - - - /** - * If there are less than windowSize elements in this DoubleBuffer, pad the up to windowSize elements with zero. - * - * @param windowSize the window size - */ - public void padWindow(int windowSize) { - if (occupancy < windowSize) { - Arrays.fill(buffer, occupancy, windowSize, 0); - } - } - - - /** Sets the number of elements in this DoubleBuffer to zero, without actually remove the elements. */ - public void reset() { - occupancy = 0; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/Arc.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/Arc.java deleted file mode 100755 index 02951b98..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/Arc.java +++ /dev/null @@ -1,165 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.fst; - -/** - * The fst's arc implementation. - * - * - * @author John Salatas - */ -public class Arc { - - // Arc's weight - private float weight; - - // input label - private int iLabel; - - // output label - private int oLabel; - - // next state's id - private State nextState; - - /** - * Default Constructor - */ - public Arc() { - } - - /** - * Arc Constructor - * - * @param iLabel the input label's id - * @param oLabel the output label's id - * @param weight the arc's weight - * @param nextState the arc's next state - */ - public Arc(int iLabel, int oLabel, float weight, State nextState) { - this.weight = weight; - this.iLabel = iLabel; - this.oLabel = oLabel; - this.nextState = nextState; - } - - /** - * Get the arc's weight - * @return arc weight - */ - public float getWeight() { - return weight; - } - - /** - * Set the arc's weight - * @param weight arc weight - */ - public void setWeight(float weight) { - this.weight = weight; - } - - /** - * Get the input label's id - * @return label id - */ - public int getIlabel() { - return iLabel; - } - - /** - * Set the input label's id - * - * @param iLabel the input label's id to set - */ - public void setIlabel(int iLabel) { - this.iLabel = iLabel; - } - - /** - * Get the output label's id - * @return output label id - */ - public int getOlabel() { - return oLabel; - } - - /** - * Set the output label's id - * - * @param oLabel the output label's id to set - */ - public void setOlabel(int oLabel) { - this.oLabel = oLabel; - } - - /** - * Get the next state - * @return next state - */ - public State getNextState() { - return nextState; - } - - /** - * Set the next state - * - * @param nextState the next state to set - */ - public void setNextState(State nextState) { - this.nextState = nextState; - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - Arc other = (Arc) obj; - if (iLabel != other.iLabel) - return false; - if (nextState == null) { - if (other.nextState != null) - return false; - } else if (nextState.getId() != other.nextState.getId()) - return false; - if (oLabel != other.oLabel) - return false; - if (!(weight == other.weight)) { - if (Float.floatToIntBits(weight) != Float - .floatToIntBits(other.weight)) - return false; - } - return true; - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return "(" + iLabel + ", " + oLabel + ", " + weight + ", " + nextState - + ")"; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/Convert.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/Convert.java deleted file mode 100755 index 2c796cf1..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/Convert.java +++ /dev/null @@ -1,282 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.fst; - -import java.io.BufferedReader; -import java.io.DataInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.PrintWriter; -import java.util.HashMap; - -import edu.cmu.sphinx.fst.semiring.Semiring; -import edu.cmu.sphinx.fst.utils.Utils; - -/** - * Provides the required functionality in order to convert from/to openfst's - * text format - * - * @author John Salatas - */ -public class Convert { - - /** - * Default private Constructor. - */ - private Convert() { - } - - /** - * Exports an fst to the openfst text format Several files are created as - * follows: - basename.input.syms - basename.output.syms - basename.fst.txt - * See OpenFst - * Quick Tour - * - * @param fst - * the fst to export - * @param basename - * the files' base name - * @throws IOException IO went wrong - */ - public static void export(Fst fst, String basename) throws IOException { - exportSymbols(fst.getIsyms(), basename + ".input.syms"); - exportSymbols(fst.getOsyms(), basename + ".output.syms"); - exportFst(fst, basename + ".fst.txt"); - } - - /** - * Exports an fst to the openfst text format - * - * @param fst - * the fst to export - * @param filename - * the openfst's fst.txt filename - * @throws IOException IO went wrong - */ - private static void exportFst(Fst fst, String filename) throws IOException { - FileWriter file; - - file = new FileWriter(filename); - PrintWriter out = new PrintWriter(file); - - // print start first - State start = fst.getStart(); - out.println(start.getId() + "\t" + start.getFinalWeight()); - - // print all states - int numStates = fst.getNumStates(); - for (int i = 0; i < numStates; i++) { - State s = fst.getState(i); - if (s.getId() != fst.getStart().getId()) { - out.println(s.getId() + "\t" + s.getFinalWeight()); - } - } - - String[] isyms = fst.getIsyms(); - String[] osyms = fst.getOsyms(); - numStates = fst.getNumStates(); - for (int i = 0; i < numStates; i++) { - State s = fst.getState(i); - int numArcs = s.getNumArcs(); - for (int j = 0; j < numArcs; j++) { - Arc arc = s.getArc(j); - String isym = (isyms != null) ? isyms[arc.getIlabel()] - : Integer.toString(arc.getIlabel()); - String osym = (osyms != null) ? osyms[arc.getOlabel()] - : Integer.toString(arc.getOlabel()); - - out.println(s.getId() + "\t" + arc.getNextState().getId() - + "\t" + isym + "\t" + osym + "\t" + arc.getWeight()); - } - } - - out.close(); - - } - - /** - * Exports a symbols' map to the openfst text format - * - * @param syms - * the symbols' map - * @param filename - * the the openfst's symbols filename - * @throws IOException IO went wrong - */ - private static void exportSymbols(String[] syms, String filename) - throws IOException { - if (syms == null) - return; - - FileWriter file = new FileWriter(filename); - PrintWriter out = new PrintWriter(file); - - for (int i = 0; i < syms.length; i++) { - String key = syms[i]; - out.println(key + "\t" + i); - } - - out.close(); - - } - - /** - * Imports an openfst's symbols file - * - * @param filename - * the symbols' filename - * @return HashMap containing the imported string-to-id mapping - * @throws IOException IO went wrong - * @throws NumberFormatException import failed due to input data format - */ - private static HashMap importSymbols(String filename) - throws NumberFormatException, IOException { - - File symfile = new File(filename); - if (!(symfile.exists() && symfile.isFile())) { - return null; - } - - FileInputStream fis = new FileInputStream(filename); - DataInputStream dis = new DataInputStream(fis); - BufferedReader br = new BufferedReader(new InputStreamReader(dis)); - HashMap syms = new HashMap(); - String strLine; - - while ((strLine = br.readLine()) != null) { - String[] tokens = strLine.split("\\t"); - String sym = tokens[0]; - Integer index = Integer.parseInt(tokens[1]); - syms.put(sym, index); - - } - br.close(); - - return syms; - } - - /** - * Imports an openfst text format Several files are imported as follows: - - * basename.input.syms - basename.output.syms - basename.fst.txt - * - * @param basename - * the files' base name - * @param semiring - * the fst's semiring - * @return imported FST - * @throws IOException IO went wrong - * @throws NumberFormatException load failed due to data format issues - */ - public static Fst importFst(String basename, Semiring semiring) - throws NumberFormatException, IOException { - Fst fst = new Fst(semiring); - - HashMap isyms = importSymbols(basename + ".input.syms"); - if (isyms == null) { - isyms = new HashMap(); - isyms.put("", 0); - } - - HashMap osyms = importSymbols(basename - + ".output.syms"); - if (osyms == null) { - osyms = new HashMap(); - osyms.put("", 0); - } - - HashMap ssyms = importSymbols(basename - + ".states.syms"); - - // Parse input - FileInputStream fis = new FileInputStream(basename + ".fst.txt"); - - DataInputStream dis = new DataInputStream(fis); - BufferedReader br = new BufferedReader(new InputStreamReader(dis)); - boolean firstLine = true; - String strLine; - HashMap stateMap = new HashMap(); - - while ((strLine = br.readLine()) != null) { - String[] tokens = strLine.split("\\t"); - Integer inputStateId; - if (ssyms == null) { - inputStateId = Integer.parseInt(tokens[0]); - } else { - inputStateId = ssyms.get(tokens[0]); - } - State inputState = stateMap.get(inputStateId); - if (inputState == null) { - inputState = new State(semiring.zero()); - fst.addState(inputState); - stateMap.put(inputStateId, inputState); - } - - if (firstLine) { - firstLine = false; - fst.setStart(inputState); - } - - if (tokens.length > 2) { - Integer nextStateId; - if (ssyms == null) { - nextStateId = Integer.parseInt(tokens[1]); - } else { - nextStateId = ssyms.get(tokens[1]); - } - - State nextState = stateMap.get(nextStateId); - if (nextState == null) { - nextState = new State(semiring.zero()); - fst.addState(nextState); - stateMap.put(nextStateId, nextState); - } - // Adding arc - if (isyms.get(tokens[2]) == null) { - isyms.put(tokens[2], isyms.size()); - } - int iLabel = isyms.get(tokens[2]); - if (osyms.get(tokens[3]) == null) { - osyms.put(tokens[3], osyms.size()); - } - int oLabel = osyms.get(tokens[3]); - - float arcWeight; - if (tokens.length > 4) { - arcWeight = Float.parseFloat(tokens[4]); - } else { - arcWeight = 0; - } - Arc arc = new Arc(iLabel, oLabel, arcWeight, nextState); - inputState.addArc(arc); - } else { - if (tokens.length > 1) { - float finalWeight = Float.parseFloat(tokens[1]); - inputState.setFinalWeight(finalWeight); - } else { - inputState.setFinalWeight(0.0f); - } - } - } - dis.close(); - - fst.setIsyms(Utils.toStringArray(isyms)); - fst.setOsyms(Utils.toStringArray(osyms)); - - return fst; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/Export.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/Export.java deleted file mode 100755 index 61aaf2d0..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/Export.java +++ /dev/null @@ -1,60 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.fst; - -import java.io.IOException; - - -/** - * Provides a command line utility to convert a java binary fst model to - * openfst's text format - * - * @author John Salatas - */ -public class Export { - /** - * Default Constructor - */ - private Export() { - } - - /** - * Exports a java binary model to openfst text format - * Several files are exported as follows: - * - basename.input.syms - * - basename.output.syms - * - basename.fst.txt - * - * @param args[0] the java binary model filename - * @param args[1] openfst's files basename - * @throws IOException IO went wrong - * @throws ClassNotFoundException loading failed due to failed serialization - */ - public static void main(String[] args) throws IOException, ClassNotFoundException { - if (args.length < 2) { - System.err.println("Input and output files not provided"); - System.err - .println("You need to provide both the input serialized java fst model"); - System.err.println("and the output binary openfst model."); - System.exit(1); - } - - Fst fst = Fst.loadModel(args[0]); - - // Serialize the java fst model to disk - System.out.println("Saving as openfst text model..."); - Convert.export(fst, args[1]); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/Fst.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/Fst.java deleted file mode 100755 index bf4cdf62..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/Fst.java +++ /dev/null @@ -1,492 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.fst; - -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.HashMap; -import java.util.HashSet; - -import edu.cmu.sphinx.fst.semiring.Semiring; - -/** - * A mutable finite state transducer implementation. - * - * Holds an ArrayList of {@link edu.cmu.sphinx.fst.State} objects allowing - * additions/deletions. - * - * @author John Salatas - */ -public class Fst { - - // fst states - private ArrayList states = null; - - // initial state - protected State start; - - // input symbols map - protected String[] isyms; - - // output symbols map - protected String[] osyms; - - // semiring - protected Semiring semiring; - - /** - * Default Constructor - */ - public Fst() { - states = new ArrayList(); - } - - /** - * Constructor specifying the initial capacity of the states ArrayList (this - * is an optimization used in various operations) - * - * @param numStates - * the initial capacity - */ - public Fst(int numStates) { - if (numStates > 0) { - states = new ArrayList(numStates); - } - } - - /** - * Constructor specifying the fst's semiring - * - * @param s - * the fst's semiring - */ - public Fst(Semiring s) { - this(); - this.semiring = s; - } - - /** - * Get the initial states - * @return the initial state - */ - public State getStart() { - return start; - } - - /** - * Get the semiring - * @return - * used semiring - */ - public Semiring getSemiring() { - return semiring; - } - - /** - * Set the Semiring - * - * @param semiring - * the semiring to set - */ - public void setSemiring(Semiring semiring) { - this.semiring = semiring; - } - - /** - * Set the initial state - * - * @param start - * the initial state - */ - public void setStart(State start) { - this.start = start; - } - - /** - * Get the number of states in the fst - * @return number of states - */ - public int getNumStates() { - return this.states.size(); - } - - public State getState(int index) { - return states.get(index); - } - - /** - * Adds a state to the fst - * - * @param state - * the state to be added - */ - public void addState(State state) { - this.states.add(state); - state.id = states.size() - 1; - } - - /** - * Get the input symbols' array - * @return array of input symbols - */ - public String[] getIsyms() { - return isyms; - } - - /** - * Set the input symbols - * - * @param isyms - * the isyms to set - */ - public void setIsyms(String[] isyms) { - this.isyms = isyms; - } - - /** - * Get the output symbols' array - * @return array fo output symbols - */ - public String[] getOsyms() { - return osyms; - } - - /** - * Set the output symbols - * - * @param osyms - * the osyms to set - */ - public void setOsyms(String[] osyms) { - this.osyms = osyms; - } - - /** - * Serializes a symbol map to an ObjectOutputStream - * - * @param out - * the ObjectOutputStream. It should be already be initialized by - * the caller. - * @param map - * the symbol map to serialize - * @throws IOException - */ - private void writeStringMap(ObjectOutputStream out, String[] map) - throws IOException { - out.writeInt(map.length); - for (int i = 0; i < map.length; i++) { - out.writeObject(map[i]); - } - } - - /** - * Serializes the current Fst instance to an ObjectOutputStream - * - * @param out - * the ObjectOutputStream. It should be already be initialized by - * the caller. - * @throws IOException - */ - private void writeFst(ObjectOutputStream out) throws IOException { - writeStringMap(out, isyms); - writeStringMap(out, osyms); - out.writeInt(states.indexOf(start)); - - out.writeObject(semiring); - out.writeInt(states.size()); - - HashMap stateMap = new HashMap( - states.size(), 1.f); - for (int i = 0; i < states.size(); i++) { - State s = states.get(i); - out.writeInt(s.getNumArcs()); - out.writeFloat(s.getFinalWeight()); - out.writeInt(s.getId()); - stateMap.put(s, i); - } - - int numStates = states.size(); - for (int i = 0; i < numStates; i++) { - State s = states.get(i); - int numArcs = s.getNumArcs(); - for (int j = 0; j < numArcs; j++) { - Arc a = s.getArc(j); - out.writeInt(a.getIlabel()); - out.writeInt(a.getOlabel()); - out.writeFloat(a.getWeight()); - out.writeInt(stateMap.get(a.getNextState())); - } - } - } - - /** - * Saves binary model to disk - * - * @param filename - * the binary model filename - * @throws IOException if IO went wrong - */ - public void saveModel(String filename) throws IOException { - FileOutputStream fos = new FileOutputStream(filename); - BufferedOutputStream bos = new BufferedOutputStream(fos); - ObjectOutputStream oos = new ObjectOutputStream(bos); - writeFst(oos); - oos.flush(); - oos.close(); - bos.close(); - fos.close(); - } - - /** - * Deserializes a symbol map from an ObjectInputStream - * - * @param in - * the ObjectInputStream. It should be already be initialized by - * the caller. - * @return the deserialized symbol map - * @throws IOException if IO went wrong - * @throws ClassNotFoundException if serialization went wrong - */ - protected static String[] readStringMap(ObjectInputStream in) - throws IOException, ClassNotFoundException { - - int mapSize = in.readInt(); - String[] map = new String[mapSize]; - for (int i = 0; i < mapSize; i++) { - String sym = (String) in.readObject(); - map[i] = sym; - } - - return map; - } - - /** - * Deserializes an Fst from an ObjectInputStream - * - * @param in - * the ObjectInputStream. It should be already be initialized by - * the caller. - * @return - * @throws IOException - * @throws ClassNotFoundException - */ - private static Fst readFst(ObjectInputStream in) throws IOException, - ClassNotFoundException { - String[] is = readStringMap(in); - String[] os = readStringMap(in); - int startid = in.readInt(); - Semiring semiring = (Semiring) in.readObject(); - int numStates = in.readInt(); - Fst res = new Fst(numStates); - res.isyms = is; - res.osyms = os; - res.semiring = semiring; - for (int i = 0; i < numStates; i++) { - int numArcs = in.readInt(); - State s = new State(numArcs + 1); - float f = in.readFloat(); - if (f == res.semiring.zero()) { - f = res.semiring.zero(); - } else if (f == res.semiring.one()) { - f = res.semiring.one(); - } - s.setFinalWeight(f); - s.id = in.readInt(); - res.states.add(s); - } - res.setStart(res.states.get(startid)); - - numStates = res.getNumStates(); - for (int i = 0; i < numStates; i++) { - State s1 = res.getState(i); - for (int j = 0; j < s1.initialNumArcs - 1; j++) { - Arc a = new Arc(); - a.setIlabel(in.readInt()); - a.setOlabel(in.readInt()); - a.setWeight(in.readFloat()); - a.setNextState(res.states.get(in.readInt())); - s1.addArc(a); - } - } - - return res; - } - - /** - * Deserializes an Fst from disk - * - * @param filename - * the binary model filename - * @return deserialized FST - * @throws IOException io IO went wrong - * @throws ClassNotFoundException if serialization went wrong - */ - public static Fst loadModel(String filename) throws IOException, - ClassNotFoundException { - long starttime = Calendar.getInstance().getTimeInMillis(); - Fst obj; - - FileInputStream fis = null; - BufferedInputStream bis = null; - ObjectInputStream ois = null; - fis = new FileInputStream(filename); - bis = new BufferedInputStream(fis); - ois = new ObjectInputStream(bis); - obj = readFst(ois); - ois.close(); - bis.close(); - fis.close(); - - System.err.println("Load Time: " - + (Calendar.getInstance().getTimeInMillis() - starttime) - / 1000.); - return obj; - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - Fst other = (Fst) obj; - if (!Arrays.equals(isyms, other.isyms)) - return false; - if (!Arrays.equals(osyms, other.osyms)) - return false; - if (start == null) { - if (other.start != null) - return false; - } else if (!start.equals(other.start)) - return false; - if (states == null) { - if (other.states != null) - return false; - } else if (!states.equals(other.states)) - return false; - if (semiring == null) { - if (other.semiring != null) - return false; - } else if (!semiring.equals(other.semiring)) - return false; - return true; - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("Fst(start=" + start + ", isyms=" + isyms + ", osyms=" - + osyms + ", semiring=" + semiring + ")\n"); - int numStates = states.size(); - for (int i = 0; i < numStates; i++) { - State s = states.get(i); - sb.append(" " + s + "\n"); - int numArcs = s.getNumArcs(); - for (int j = 0; j < numArcs; j++) { - Arc a = s.getArc(j); - sb.append(" " + a + "\n"); - } - } - - return sb.toString(); - } - - /** - * Deletes a state - * - * @param state - * the state to delete - */ - public void deleteState(State state) { - - if (state == start) { - System.err.println("Cannot delete start state."); - return; - } - - states.remove(state); - - for (State s1 : states) { - ArrayList newArcs = new ArrayList(); - for (int j = 0; j < s1.getNumArcs(); j++) { - Arc a = s1.getArc(j); - if (!a.getNextState().equals(state)) { - newArcs.add(a); - } - } - s1.setArcs(newArcs); - } - } - - /** - * Remaps the states' ids. - * - * States' ids are renumbered starting from 0 up to @see - * {@link edu.cmu.sphinx.fst.Fst#getNumStates()} - */ - public void remapStateIds() { - int numStates = states.size(); - for (int i = 0; i < numStates; i++) { - states.get(i).id = i; - } - - } - - public void deleteStates(HashSet toDelete) { - - if (toDelete.contains(start)) { - System.err.println("Cannot delete start state."); - return; - } - - ArrayList newStates = new ArrayList(); - - for (State s1 : states) { - if (!toDelete.contains(s1)) { - newStates.add(s1); - ArrayList newArcs = new ArrayList(); - for (int j = 0; j < s1.getNumArcs(); j++) { - Arc a = s1.getArc(j); - if (!toDelete.contains(a.getNextState())) { - newArcs.add(a); - } - } - s1.setArcs(newArcs); - } - } - states = newStates; - - remapStateIds(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/ImmutableFst.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/ImmutableFst.java deleted file mode 100755 index c1a75bfd..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/ImmutableFst.java +++ /dev/null @@ -1,266 +0,0 @@ -/** - * - */ -package edu.cmu.sphinx.fst; - -import java.io.BufferedInputStream; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.io.ObjectInputStream; -import java.util.Arrays; - -import edu.cmu.sphinx.fst.semiring.Semiring; - -/** - * An immutable finite state transducer implementation. - * - * Holds a fixed size array of {@link edu.cmu.sphinx.fst.ImmutableState} objects - * not allowing additions/deletions - * - * @author John Salatas - */ -public class ImmutableFst extends Fst { - - // fst states - private ImmutableState[] states = null; - - // number of states - private int numStates; - - /** - * Default private constructor. - * - * An ImmutableFst cannot be created directly. It needs to be deserialized. - * - * @see edu.cmu.sphinx.fst.ImmutableFst#loadModel(String) - */ - private ImmutableFst() { - - } - - /** - * Private Constructor specifying the capacity of the states array - * - * An ImmutableFst cannot be created directly. It needs to be deserialized. - * - * @see edu.cmu.sphinx.fst.ImmutableFst#loadModel(String) - * - * @param numStates - * the number of fst's states - */ - private ImmutableFst(int numStates) { - super(0); - this.numStates = numStates; - this.states = new ImmutableState[numStates]; - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.fst.Fst#getNumStates() - */ - @Override - public int getNumStates() { - return this.numStates; - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.fst.Fst#getState(int) - */ - @Override - public ImmutableState getState(int index) { - return states[index]; - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.fst.Fst#addState(edu.cmu.sphinx.fst.State) - */ - @Override - public void addState(State state) { - throw new IllegalArgumentException("You cannot modify an ImmutableFst."); - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.fst.Fst#saveModel(java.lang.String) - */ - @Override - public void saveModel(String filename) throws IOException { - throw new IllegalArgumentException( - "You cannot serialize an ImmutableFst."); - } - - /** - * Deserializes an ImmutableFst from an ObjectInputStream - * - * @param in - * the ObjectInputStream. It should be already be initialized by - * the caller. - * @return - * @throws IOException - * @throws ClassNotFoundException - */ - private static ImmutableFst readImmutableFst(ObjectInputStream in) - throws IOException, ClassNotFoundException { - String[] is = readStringMap(in); - String[] os = readStringMap(in); - int startid = in.readInt(); - Semiring semiring = (Semiring) in.readObject(); - int numStates = in.readInt(); - ImmutableFst res = new ImmutableFst(numStates); - res.isyms = is; - res.osyms = os; - res.semiring = semiring; - for (int i = 0; i < numStates; i++) { - int numArcs = in.readInt(); - ImmutableState s = new ImmutableState(numArcs + 1); - float f = in.readFloat(); - if (f == res.semiring.zero()) { - f = res.semiring.zero(); - } else if (f == res.semiring.one()) { - f = res.semiring.one(); - } - s.setFinalWeight(f); - s.id = in.readInt(); - res.states[s.getId()] = s; - } - res.setStart(res.states[startid]); - - numStates = res.states.length; - for (int i = 0; i < numStates; i++) { - ImmutableState s1 = res.states[i]; - for (int j = 0; j < s1.initialNumArcs - 1; j++) { - Arc a = new Arc(); - a.setIlabel(in.readInt()); - a.setOlabel(in.readInt()); - a.setWeight(in.readFloat()); - a.setNextState(res.states[in.readInt()]); - s1.setArc(j, a); - } - } - - return res; - } - - /** - * Deserializes an ImmutableFst from an InputStream - * - * @param inputStream - * the InputStream. It should be already be initialized by the - * caller. - * @return Immutable FST structure - * @throws IOException IO went wrong - * @throws ClassNotFoundException serialization had issues - */ - public static ImmutableFst loadModel(InputStream inputStream) - throws IOException, ClassNotFoundException { - ImmutableFst obj; - - BufferedInputStream bis = null; - ObjectInputStream ois = null; - bis = new BufferedInputStream(inputStream); - ois = new ObjectInputStream(bis); - obj = readImmutableFst(ois); - ois.close(); - bis.close(); - inputStream.close(); - - return obj; - } - - /** - * Deserializes an ImmutableFst from disk - * - * @param filename - * the binary model filename - * @return loaded FST - */ - public static ImmutableFst loadModel(String filename) { - ImmutableFst obj; - - try { - FileInputStream fis = null; - BufferedInputStream bis = null; - ObjectInputStream ois = null; - fis = new FileInputStream(filename); - bis = new BufferedInputStream(fis); - ois = new ObjectInputStream(bis); - obj = readImmutableFst(ois); - ois.close(); - bis.close(); - fis.close(); - } catch (FileNotFoundException e) { - e.printStackTrace(); - return null; - } catch (IOException e) { - e.printStackTrace(); - return null; - } catch (ClassNotFoundException e) { - e.printStackTrace(); - return null; - } - - return obj; - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.fst.Fst#deleteState(edu.cmu.sphinx.fst.State) - */ - @Override - public void deleteState(State state) { - throw new IllegalArgumentException("You cannot modify an ImmutableFst."); - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.fst.Fst#toString() - */ - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("Fst(start=" + start + ", isyms=" + isyms + ", osyms=" - + osyms + ", semiring=" + semiring + ")\n"); - int numStates = states.length; - for (int i = 0; i < numStates; i++) { - State s = states[i]; - sb.append(" " + s + "\n"); - int numArcs = s.getNumArcs(); - for (int j = 0; j < numArcs; j++) { - Arc a = s.getArc(j); - sb.append(" " + a + "\n"); - } - } - - return sb.toString(); - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (getClass() != obj.getClass()) - return false; - ImmutableFst other = (ImmutableFst) obj; - if (!Arrays.equals(states, other.states)) - return false; - if (!super.equals(obj)) - return false; - return true; - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/ImmutableState.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/ImmutableState.java deleted file mode 100755 index becb86db..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/ImmutableState.java +++ /dev/null @@ -1,148 +0,0 @@ -/** - * - */ -package edu.cmu.sphinx.fst; - -import java.util.Arrays; -import java.util.Comparator; - -/** - * The fst's immutable state implementation. - * - * holds its outgoing {@link edu.cmu.sphinx.fst.Arc} objects in a fixed size - * array not allowing additions/deletions. - * - * @author John Salatas - */ -public class ImmutableState extends State { - - // Outgoing arcs - private Arc[] arcs = null; - - /** - * Default protected constructor. - * - * An ImmutableState cannot be created directly. It needs to be deserialized - * as part of an ImmutableFst. - * - * @see edu.cmu.sphinx.fst.ImmutableFst#loadModel(String) - * - */ - protected ImmutableState() { - } - - /** - * Constructor specifying the capacity of the arcs array. - * - * @param numArcs number of arcs - */ - protected ImmutableState(int numArcs) { - super(0); - this.initialNumArcs = numArcs; - arcs = new Arc[numArcs]; - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.fst.State#arcSort(java.util.Comparator) - */ - @Override - public void arcSort(Comparator cmp) { - Arrays.sort(arcs, cmp); - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.fst.State#addArc(edu.cmu.sphinx.fst.Arc) - */ - @Override - public void addArc(Arc arc) { - throw new IllegalArgumentException( - "You cannot modify an ImmutableState."); - } - - /** - * Set an arc at the specified position in the arcs' array. - * - * @param index the position to the arcs' array - * @param arc the arc value to set - */ - @Override - public void setArc(int index, Arc arc) { - arcs[index] = arc; - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.fst.State#deleteArc(int) - */ - @Override - public Arc deleteArc(int index) { - throw new IllegalArgumentException( - "You cannot modify an ImmutableState."); - } - - /** - * Set the state's arcs array - * - * @param arcs the arcs array to set - */ - public void setArcs(Arc[] arcs) { - this.arcs = arcs; - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.fst.State#getNumArcs() - */ - @Override - public int getNumArcs() { - return initialNumArcs; - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.fst.State#getArc(int) - */ - @Override - public Arc getArc(int index) { - return this.arcs[index]; - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + id; - return result; - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (getClass() != obj.getClass()) - return false; - ImmutableState other = (ImmutableState) obj; - if (!Arrays.equals(arcs, other.arcs)) - return false; - if (!super.equals(obj)) - return false; - return true; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/Import.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/Import.java deleted file mode 100755 index 11e286c8..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/Import.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.fst; - -import java.io.IOException; - -import edu.cmu.sphinx.fst.semiring.TropicalSemiring; - -/** - * Provides a command line utility to convert an Fst in openfst's text format to - * java binary fst model - * - * @author John Salatas - */ -public class Import { - - /** - * Default Constructor - */ - private Import() { - } - - /** - * Imports an openfst text format and serializes it as java binary model - * Several files are imported as follows: - basename.input.syms - - * basename.output.syms - basename.fst.txt - * - * @param args[0] openfst's files basename - * @param args[1] the java binary model filename - * @throws IOException IO went wrong - * @throws NumberFormatException data has wrong input format - */ - public static void main(String[] args) throws NumberFormatException, IOException { - if (args.length < 2) { - System.err.println("Input and output files not provided"); - System.err - .println("You need to provide both the input binary openfst model"); - System.err.println("and the output serialized java fst model."); - System.exit(1); - } - - Fst fst = Convert.importFst(args[0], new TropicalSemiring()); - - // Serialize the java fst model to disk - System.out.println("Saving as binary java fst model..."); - try { - fst.saveModel(args[1]); - - } catch (IOException e) { - System.err.println("Cannot write to file " + args[1]); - System.exit(1); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/State.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/State.java deleted file mode 100755 index e2a9de28..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/State.java +++ /dev/null @@ -1,212 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.fst; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; - -/** - * The fst's mutable state implementation. - * - * Holds its outgoing {@link edu.cmu.sphinx.fst.Arc} objects in an ArrayList - * allowing additions/deletions - * - * @author John Salatas - */ -public class State { - - // State's Id - protected int id = -1; - - // Final weight - private float fnlWeight; - - // Outgoing arcs - private ArrayList arcs = null; - - // initial number of arcs - protected int initialNumArcs = -1; - - /** - * Default Constructor - */ - protected State() { - arcs = new ArrayList(); - } - - /** - * Constructor specifying the state's final weight - * - * @param fnlWeight final weight - */ - public State(float fnlWeight) { - this(); - this.fnlWeight = fnlWeight; - } - - /** - * Constructor specifying the initial capacity of the arc's ArrayList (this - * is an optimization used in various operations) - * - * @param initialNumArcs number of arcs - */ - public State(int initialNumArcs) { - this.initialNumArcs = initialNumArcs; - if (initialNumArcs > 0) { - arcs = new ArrayList(initialNumArcs); - } - } - - /** - * Shorts the arc's ArrayList based on the provided Comparator - * @param cmp comparator - */ - public void arcSort(Comparator cmp) { - Collections.sort(arcs, cmp); - } - - /** - * Get the state's final Weight - * @return final weight - */ - public float getFinalWeight() { - return fnlWeight; - } - - /** - * Set the state's arcs ArrayList - * - * @param arcs the arcs ArrayList to set - */ - public void setArcs(ArrayList arcs) { - this.arcs = arcs; - } - - /** - * Set the state's final weight - * - * @param fnlfloat the final weight to set - */ - public void setFinalWeight(float fnlfloat) { - this.fnlWeight = fnlfloat; - } - - /** - * Get the state's id - * @return state id - */ - public int getId() { - return id; - } - - /** - * Get the number of outgoing arcs - * @return number of arcs - */ - public int getNumArcs() { - return this.arcs.size(); - } - - /** - * Add an outgoing arc to the state - * - * @param arc the arc to add - */ - public void addArc(Arc arc) { - this.arcs.add(arc); - } - - /** - * Get an arc based on it's index the arcs ArrayList - * - * @param index the arc's index - * @return the arc - */ - public Arc getArc(int index) { - return this.arcs.get(index); - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - State other = (State) obj; - if (id != other.id) - return false; - if (!(fnlWeight == other.fnlWeight)) { - if (Float.floatToIntBits(fnlWeight) != Float - .floatToIntBits(other.fnlWeight)) - return false; - } - if (arcs == null) { - if (other.arcs != null) - return false; - } else if (!arcs.equals(other.arcs)) - return false; - return true; - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("(" + id + ", " + fnlWeight + ")"); - return sb.toString(); - } - - /** - * Delete an arc based on its index - * - * @param index the arc's index - * @return the deleted arc - */ - public Arc deleteArc(int index) { - return this.arcs.remove(index); - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - return id * 991; - } - - /** - * Set an arc at the specified position in the arcs' ArrayList. - * - * @param index the position to the arcs' array - * @param arc the arc value to set - */ - public void setArc(int index, Arc arc) { - arcs.set(index, arc); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/ArcSort.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/ArcSort.java deleted file mode 100755 index a1f9b452..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/ArcSort.java +++ /dev/null @@ -1,51 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.fst.operations; - -import java.util.Comparator; - -import edu.cmu.sphinx.fst.Arc; -import edu.cmu.sphinx.fst.Fst; -import edu.cmu.sphinx.fst.State; - -/** - * ArcSort operation. - * - * @author John Salatas - */ -public class ArcSort { - /** - * Default Constructor - */ - private ArcSort() { - } - - /** - * Applies the ArcSort on the provided fst. Sorting can be applied either on - * input or output label based on the provided comparator. - * - * ArcSort can be applied to both {@link edu.cmu.sphinx.fst.Fst} and - * {@link edu.cmu.sphinx.fst.ImmutableFst} - * - * @param fst the fst to sort it's arcs - * @param cmp the provided Comparator - */ - public static void apply(Fst fst, Comparator cmp) { - int numStates = fst.getNumStates(); - for (int i = 0; i < numStates; i++) { - State s = fst.getState(i); - s.arcSort(cmp); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/Compose.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/Compose.java deleted file mode 100755 index 457ab845..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/Compose.java +++ /dev/null @@ -1,270 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.fst.operations; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.Queue; - -import edu.cmu.sphinx.fst.Arc; -import edu.cmu.sphinx.fst.Fst; -import edu.cmu.sphinx.fst.ImmutableFst; -import edu.cmu.sphinx.fst.State; -import edu.cmu.sphinx.fst.semiring.Semiring; -import edu.cmu.sphinx.fst.utils.Pair; - -/** - * Compose operation. - * - * See: M. Mohri, "Weighted automata algorithms", Handbook of Weighted Automata. - * Springer, pp. 213-250, 2009. - * - * @author John Salatas - */ - -public class Compose { - /** - * Default Constructor - */ - private Compose() { - } - - /** - * Computes the composition of two Fsts. Assuming no epsilon transitions. - * - * Input Fsts are not modified. - * - * @param fst1 the first Fst - * @param fst2 the second Fst - * @param semiring the semiring to use in the operation - * @param sorted sort result - * @return the composed Fst - */ - public static Fst compose(Fst fst1, Fst fst2, Semiring semiring, - boolean sorted) { - if (!Arrays.equals(fst1.getOsyms(), fst2.getIsyms())) { - // symboltables do not match - return null; - } - - Fst res = new Fst(semiring); - - HashMap, State> stateMap = new HashMap, State>(); - Queue> queue = new LinkedList>(); - - State s1 = fst1.getStart(); - State s2 = fst2.getStart(); - - if ((s1 == null) || (s2 == null)) { - System.err.println("Cannot find initial state."); - return null; - } - - Pair p = new Pair(s1, s2); - State s = new State(semiring.times(s1.getFinalWeight(), - s2.getFinalWeight())); - - res.addState(s); - res.setStart(s); - stateMap.put(p, s); - queue.add(p); - - while (!queue.isEmpty()) { - p = queue.remove(); - s1 = p.getLeft(); - s2 = p.getRight(); - s = stateMap.get(p); - int numArcs1 = s1.getNumArcs(); - int numArcs2 = s2.getNumArcs(); - for (int i = 0; i < numArcs1; i++) { - Arc a1 = s1.getArc(i); - for (int j = 0; j < numArcs2; j++) { - Arc a2 = s2.getArc(j); - if (sorted && a1.getOlabel() < a2.getIlabel()) - break; - if (a1.getOlabel() == a2.getIlabel()) { - State nextState1 = a1.getNextState(); - State nextState2 = a2.getNextState(); - Pair nextPair = new Pair( - nextState1, nextState2); - State nextState = stateMap.get(nextPair); - if (nextState == null) { - nextState = new State(semiring.times( - nextState1.getFinalWeight(), - nextState2.getFinalWeight())); - res.addState(nextState); - stateMap.put(nextPair, nextState); - queue.add(nextPair); - } - Arc a = new Arc(a1.getIlabel(), a2.getOlabel(), - semiring.times(a1.getWeight(), a2.getWeight()), - nextState); - s.addArc(a); - } - } - } - } - - res.setIsyms(fst1.getIsyms()); - res.setOsyms(fst2.getOsyms()); - - return res; - } - - /** - * Computes the composition of two Fsts. The two Fsts are augmented in order - * to avoid multiple epsilon paths in the resulting Fst - * - * @param fst1 the first Fst - * @param fst2 the second Fst - * @param semiring the semiring to use in the operation - * @return the composed Fst - */ - public static Fst get(Fst fst1, Fst fst2, Semiring semiring) { - if ((fst1 == null) || (fst2 == null)) { - return null; - } - - if (!Arrays.equals(fst1.getOsyms(), fst2.getIsyms())) { - // symboltables do not match - return null; - } - - Fst filter = getFilter(fst1.getOsyms(), semiring); - augment(1, fst1, semiring); - augment(0, fst2, semiring); - - Fst tmp = Compose.compose(fst1, filter, semiring, false); - - Fst res = Compose.compose(tmp, fst2, semiring, false); - - // Connect.apply(res); - - return res; - } - - /** - * Get a filter to use for avoiding multiple epsilon paths in the resulting - * Fst - * - * See: M. Mohri, "Weighted automata algorithms", Handbook of Weighted - * Automata. Springer, pp. 213-250, 2009. - * - * @param syms the gilter's input/output symbols - * @param semiring the semiring to use in the operation - * @return the filter - */ - public static Fst getFilter(String[] syms, Semiring semiring) { - Fst filter = new Fst(semiring); - - int e1index = syms.length; - int e2index = syms.length + 1; - - filter.setIsyms(syms); - filter.setOsyms(syms); - - // State 0 - State s0 = new State(syms.length + 3); - s0.setFinalWeight(semiring.one()); - State s1 = new State(syms.length); - s1.setFinalWeight(semiring.one()); - State s2 = new State(syms.length); - s2.setFinalWeight(semiring.one()); - filter.addState(s0); - s0.addArc(new Arc(e2index, e1index, semiring.one(), s0)); - s0.addArc(new Arc(e1index, e1index, semiring.one(), s1)); - s0.addArc(new Arc(e2index, e2index, semiring.one(), s2)); - for (int i = 1; i < syms.length; i++) { - s0.addArc(new Arc(i, i, semiring.one(), s0)); - } - filter.setStart(s0); - - // State 1 - filter.addState(s1); - s1.addArc(new Arc(e1index, e1index, semiring.one(), s1)); - for (int i = 1; i < syms.length; i++) { - s1.addArc(new Arc(i, i, semiring.one(), s0)); - } - - // State 2 - filter.addState(s2); - s2.addArc(new Arc(e2index, e2index, semiring.one(), s2)); - for (int i = 1; i < syms.length; i++) { - s2.addArc(new Arc(i, i, semiring.one(), s0)); - } - - return filter; - } - - /** - * Augments the labels of an Fst in order to use it for composition avoiding - * multiple epsilon paths in the resulting Fst - * - * Augment can be applied to both {@link edu.cmu.sphinx.fst.Fst} and - * {@link edu.cmu.sphinx.fst.ImmutableFst}, as immutable fsts hold an - * additional null arc for that operation - * - * @param label constant denoting if the augment should take place on input - * or output labels For value equal to 0 augment will take place - * for input labels For value equal to 1 augment will take place - * for output labels - * @param fst the fst to augment - * @param semiring the semiring to use in the operation - */ - public static void augment(int label, Fst fst, Semiring semiring) { - // label: 0->augment on ilabel - // 1->augment on olabel - - String[] isyms = fst.getIsyms(); - String[] osyms = fst.getOsyms(); - - int e1inputIndex = isyms.length; - int e2inputIndex = isyms.length + 1; - - int e1outputIndex = osyms.length; - int e2outputIndex = osyms.length + 1; - - int numStates = fst.getNumStates(); - for (int i = 0; i < numStates; i++) { - State s = fst.getState(i); - // Immutable fsts hold an additional (null) arc for augmention - int numArcs = (fst instanceof ImmutableFst) ? s.getNumArcs() - 1 - : s.getNumArcs(); - for (int j = 0; j < numArcs; j++) { - Arc a = s.getArc(j); - if ((label == 1) && (a.getOlabel() == 0)) { - a.setOlabel(e2outputIndex); - } else if ((label == 0) && (a.getIlabel() == 0)) { - a.setIlabel(e1inputIndex); - } - } - if (label == 0) { - if (fst instanceof ImmutableFst) { - s.setArc(numArcs, new Arc(e2inputIndex, 0, semiring.one(), - s)); - } else { - s.addArc(new Arc(e2inputIndex, 0, semiring.one(), s)); - } - } else if (label == 1) { - if (fst instanceof ImmutableFst) { - s.setArc(numArcs, new Arc(0, e1outputIndex, semiring.one(), - s)); - } else { - s.addArc(new Arc(0, e1outputIndex, semiring.one(), s)); - } - } - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/Connect.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/Connect.java deleted file mode 100755 index 5d96fcce..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/Connect.java +++ /dev/null @@ -1,183 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.fst.operations; - -import java.util.ArrayList; -import java.util.HashSet; - -import edu.cmu.sphinx.fst.Arc; -import edu.cmu.sphinx.fst.Fst; -import edu.cmu.sphinx.fst.State; -import edu.cmu.sphinx.fst.semiring.Semiring; - -/** - * Connect operation. - * - * @author John Salatas - * - */ -public class Connect { - /** - * Calculates the coaccessible states of an fst - */ - private static void calcCoAccessible(Fst fst, State state, - ArrayList> paths, HashSet coaccessible) { - // hold the coaccessible added in this loop - ArrayList newCoAccessibles = new ArrayList(); - for (ArrayList path : paths) { - int index = path.lastIndexOf(state); - if (index != -1) { - if (state.getFinalWeight() != fst.getSemiring().zero() - || coaccessible.contains(state)) { - for (int j = index; j > -1; j--) { - if (!coaccessible.contains(path.get(j))) { - newCoAccessibles.add(path.get(j)); - coaccessible.add(path.get(j)); - } - } - } - } - } - - // run again for the new coaccessibles - for (State s : newCoAccessibles) { - calcCoAccessible(fst, s, paths, coaccessible); - } - } - - /** - * Copies a path - */ - private static void duplicatePath(int lastPathIndex, State fromState, - State toState, ArrayList> paths) { - ArrayList lastPath = paths.get(lastPathIndex); - // copy the last path to a new one, from start to current state - int fromIndex = lastPath.indexOf(fromState); - int toIndex = lastPath.indexOf(toState); - if (toIndex == -1) { - toIndex = lastPath.size() - 1; - } - ArrayList newPath = new ArrayList(lastPath.subList( - fromIndex, toIndex)); - paths.add(newPath); - } - - /** - * The depth first search recursion - */ - private static State depthFirstSearchNext(Fst fst, State start, - ArrayList> paths, ArrayList[] exploredArcs, - HashSet accessible) { - int lastPathIndex = paths.size() - 1; - - ArrayList currentExploredArcs = exploredArcs[start.getId()]; - paths.get(lastPathIndex).add(start); - if (start.getNumArcs() != 0) { - int arcCount = 0; - int numArcs = start.getNumArcs(); - for (int j = 0; j < numArcs; j++) { - Arc arc = start.getArc(j); - if ((currentExploredArcs == null) - || !currentExploredArcs.contains(arc)) { - lastPathIndex = paths.size() - 1; - if (arcCount++ > 0) { - duplicatePath(lastPathIndex, fst.getStart(), start, - paths); - lastPathIndex = paths.size() - 1; - paths.get(lastPathIndex).add(start); - } - State next = arc.getNextState(); - addExploredArc(start.getId(), arc, exploredArcs); - // detect self loops - if (next.getId() != start.getId()) { - depthFirstSearchNext(fst, next, paths, exploredArcs, accessible); - } - } - } - } - lastPathIndex = paths.size() - 1; - accessible.add(start); - - return start; - } - - /** - * Adds an arc top the explored arcs list - */ - private static void addExploredArc(int stateId, Arc arc, - ArrayList[] exploredArcs) { - if (exploredArcs[stateId] == null) { - exploredArcs[stateId] = new ArrayList(); - } - exploredArcs[stateId].add(arc); - - } - - /** - * Initialization of a depth first search recursion - */ - private static void depthFirstSearch(Fst fst, HashSet accessible, - ArrayList> paths, ArrayList[] exploredArcs, - HashSet coaccessible) { - State currentState = fst.getStart(); - State nextState = currentState; - do { - if (!accessible.contains(currentState)) { - nextState = depthFirstSearchNext(fst, currentState, paths, exploredArcs, - accessible); - } - } while (currentState.getId() != nextState.getId()); - int numStates = fst.getNumStates(); - for (int i = 0; i < numStates; i++) { - State s = fst.getState(i); - if (s.getFinalWeight() != fst.getSemiring().zero()) { - calcCoAccessible(fst, s, paths, coaccessible); - } - } - } - - /** - * Trims an Fst, removing states and arcs that are not on successful paths. - * - * @param fst the fst to trim - */ - public static void apply(Fst fst) { - Semiring semiring = fst.getSemiring(); - if (semiring == null) { - System.out.println("Fst has no semiring."); - return; - } - - HashSet accessible = new HashSet(); - HashSet coaccessible = new HashSet(); - @SuppressWarnings("unchecked") - ArrayList[] exploredArcs = new ArrayList[fst.getNumStates()]; - - ArrayList> paths = new ArrayList>(); - paths.add(new ArrayList()); - - depthFirstSearch(fst, accessible, paths, exploredArcs, coaccessible); - - HashSet toDelete = new HashSet(); - - for (int i = 0; i < fst.getNumStates(); i++) { - State s = fst.getState(i); - if (!(accessible.contains(s) || coaccessible.contains(s))) { - toDelete.add(s); - } - } - - fst.deleteStates(toDelete); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/Determinize.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/Determinize.java deleted file mode 100755 index 68585dbe..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/Determinize.java +++ /dev/null @@ -1,192 +0,0 @@ -/** - * - */ -package edu.cmu.sphinx.fst.operations; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.Queue; - -import edu.cmu.sphinx.fst.Arc; -import edu.cmu.sphinx.fst.Fst; -import edu.cmu.sphinx.fst.State; -import edu.cmu.sphinx.fst.semiring.Semiring; -import edu.cmu.sphinx.fst.utils.Pair; - -/** - * Determize operation. - * - * See: M. Mohri, "Finite-State Transducers in Language and Speech Processing", - * Computational Linguistics, 23:2, 1997. - * - * @author John Salatas - * - */ -public class Determinize { - - /** - * Default constructor - */ - private Determinize() { - - } - - private static Pair getPair( - ArrayList> queue, State state, Float zero) { - Pair res = null; - for (Pair tmp : queue) { - if (state.getId() == tmp.getLeft().getId()) { - res = tmp; - break; - } - } - - if (res == null) { - res = new Pair(state, zero); - queue.add(res); - } - - return res; - } - - private static ArrayList getUniqueLabels(Fst fst, - ArrayList> pa) { - ArrayList res = new ArrayList(); - - for (Pair p : pa) { - State s = p.getLeft(); - - int numArcs = s.getNumArcs(); - for (int j = 0; j < numArcs; j++) { - Arc arc = s.getArc(j); - if (!res.contains(arc.getIlabel())) { - res.add(arc.getIlabel()); - } - } - } - return res; - } - - private static State getStateLabel(ArrayList> pa, - HashMap stateMapper) { - StringBuilder sb = new StringBuilder(); - - for (Pair p : pa) { - if (sb.length() > 0) { - sb.append(","); - } - sb.append("(" + p.getLeft() + "," + p.getRight() + ")"); - } - return stateMapper.get(sb.toString()); - } - - /** - * Determinizes an fst. The result will be an equivalent fst that has the - * property that no state has two transitions with the same input label. For - * this algorithm, epsilon transitions are treated as regular symbols. - * - * @param fst the fst to determinize - * @return the determinized fst - */ - public static Fst get(Fst fst) { - - if (fst.getSemiring() == null) { - // semiring not provided - return null; - } - - // initialize the queue and new fst - Semiring semiring = fst.getSemiring(); - Fst res = new Fst(semiring); - res.setIsyms(fst.getIsyms()); - res.setOsyms(fst.getOsyms()); - - // stores the queue (item in index 0 is next) - Queue>> queue = new LinkedList>>(); - - HashMap stateMapper = new HashMap(); - - State s = new State(semiring.zero()); - String stateString = "(" + fst.getStart() + "," + semiring.one() + ")"; - queue.add(new ArrayList>()); - queue.peek().add(new Pair(fst.getStart(), semiring.one())); - res.addState(s); - stateMapper.put(stateString, s); - res.setStart(s); - - while (!queue.isEmpty()) { - ArrayList> p = queue.remove(); - State pnew = getStateLabel(p, stateMapper); - queue.remove(0); - ArrayList labels = getUniqueLabels(fst, p); - for (int label : labels) { - Float wnew = semiring.zero(); - // calc w' - for (Pair ps : p) { - State old = ps.getLeft(); - Float u = ps.getRight(); - int numArcs = old.getNumArcs(); - for (int j = 0; j < numArcs; j++) { - Arc arc = old.getArc(j); - if (label == arc.getIlabel()) { - wnew = semiring.plus(wnew, - semiring.times(u, arc.getWeight())); - } - } - } - - // calc new states - // keep residual weights to variable forQueue - ArrayList> forQueue = new ArrayList>(); - for (Pair ps : p) { - State old = ps.getLeft(); - Float u = ps.getRight(); - Float wnewRevert = semiring.divide(semiring.one(), wnew); - int numArcs = old.getNumArcs(); - for (int j = 0; j < numArcs; j++) { - Arc arc = old.getArc(j); - if (label == arc.getIlabel()) { - State oldstate = arc.getNextState(); - Pair pair = getPair(forQueue, - oldstate, semiring.zero()); - pair.setRight(semiring.plus( - pair.getRight(), - semiring.times(wnewRevert, - semiring.times(u, arc.getWeight())))); - } - } - } - - // build new state's id and new elements for queue - String qnewid = ""; - for (Pair ps : forQueue) { - State old = ps.getLeft(); - Float unew = ps.getRight(); - if (!qnewid.equals("")) { - qnewid = qnewid + ","; - } - qnewid = qnewid + "(" + old + "," + unew + ")"; - } - - if (stateMapper.get(qnewid) == null) { - State qnew = new State(semiring.zero()); - res.addState(qnew); - stateMapper.put(qnewid, qnew); - // update new state's weight - Float fw = qnew.getFinalWeight(); - for (Pair ps : forQueue) { - fw = semiring.plus(fw, semiring.times(ps.getLeft() - .getFinalWeight(), ps.getRight())); - } - qnew.setFinalWeight(fw); - - queue.add(forQueue); - } - pnew.addArc(new Arc(label, label, wnew, stateMapper.get(qnewid))); - } - } - - return res; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/ExtendFinal.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/ExtendFinal.java deleted file mode 100755 index 97b8816f..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/ExtendFinal.java +++ /dev/null @@ -1,100 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.fst.operations; - -import java.util.ArrayList; - -import edu.cmu.sphinx.fst.Arc; -import edu.cmu.sphinx.fst.Fst; -import edu.cmu.sphinx.fst.State; -import edu.cmu.sphinx.fst.semiring.Semiring; - -/** - * Extend an Fst to a single final state and undo operations. - * - * @author John Salatas - */ -public class ExtendFinal { - - /** - * Default Contructor - */ - private ExtendFinal() { - } - - /** - * Extends an Fst to a single final state. - * - * It adds a new final state with a 0.0 (Semiring's 1) final wight and - * connects the current final states to it using epsilon transitions with - * weight equal to the original final state's weight. - * - * @param fst the Fst to extend - */ - public static void apply(Fst fst) { - Semiring semiring = fst.getSemiring(); - ArrayList fStates = new ArrayList(); - - int numStates = fst.getNumStates(); - for (int i = 0; i < numStates; i++) { - State s = fst.getState(i); - if (s.getFinalWeight() != semiring.zero()) { - fStates.add(s); - } - } - - // Add a new single final - State newFinal = new State(semiring.one()); - fst.addState(newFinal); - for (State s : fStates) { - // add epsilon transition from the old final to the new one - s.addArc(new Arc(0, 0, s.getFinalWeight(), newFinal)); - // set old state's weight to zero - s.setFinalWeight(semiring.zero()); - } - } - - /** - * Undo of the extend operation - * @param fst fst to work with - */ - public static void undo(Fst fst) { - State f = null; - int numStates = fst.getNumStates(); - for (int i = 0; i < numStates; i++) { - State s = fst.getState(i); - if (s.getFinalWeight() != fst.getSemiring().zero()) { - f = s; - break; - } - } - - if (f == null) { - System.err.println("Final state not found."); - return; - } - for (int i = 0; i < numStates; i++) { - State s = fst.getState(i); - for (int j = 0; j < s.getNumArcs(); j++) { - Arc a = s.getArc(j); - if (a.getIlabel() == 0 && a.getOlabel() == 0 - && a.getNextState().getId() == f.getId()) { - s.setFinalWeight(a.getWeight()); - } - } - } - fst.deleteState(f); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/ILabelCompare.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/ILabelCompare.java deleted file mode 100755 index 8f839ac9..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/ILabelCompare.java +++ /dev/null @@ -1,45 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.fst.operations; - -import java.util.Comparator; - -import edu.cmu.sphinx.fst.Arc; - -/** - * Comparator used in {@link edu.cmu.sphinx.fst.operations.ArcSort} for sorting - * based on input labels - * - * @author John Salatas - */ -public class ILabelCompare implements Comparator { - - /* - * (non-Javadoc) - * - * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) - */ - public int compare(Arc o1, Arc o2) { - if(o1 == null) { - return 1; - } - if(o2 == null) { - return -1; - } - - return (o1.getIlabel() < o2.getIlabel()) ? -1 : ((o1.getIlabel() == o2 - .getIlabel()) ? 0 : 1); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/NShortestPaths.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/NShortestPaths.java deleted file mode 100755 index e97dbfa4..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/NShortestPaths.java +++ /dev/null @@ -1,213 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.fst.operations; - -import java.util.Arrays; -import java.util.Comparator; -import java.util.HashMap; -import java.util.LinkedHashSet; -import java.util.PriorityQueue; - -import edu.cmu.sphinx.fst.Arc; -import edu.cmu.sphinx.fst.Fst; -import edu.cmu.sphinx.fst.State; -import edu.cmu.sphinx.fst.utils.Pair; -import edu.cmu.sphinx.fst.semiring.Semiring; - -/** - * N-shortest paths operation. - * - * See: M. Mohri, M. Riley, - * "An Efficient Algorithm for the n-best-strings problem", Proceedings of the - * International Conference on Spoken Language Processing 2002 (ICSLP '02). - * - * See: M. Mohri, - * "Semiring Framework and Algorithms for Shortest-Distance Problems", Journal - * of Automata, Languages and Combinatorics, 7(3), pp. 321-350, 2002. - * - * @author John Salatas - * - */ -public class NShortestPaths { - private NShortestPaths() { - } - - /** - * Calculates the shortest distances from each state to the final - * - * @param fst - * the fst to calculate the shortest distances - * @return the array containing the shortest distances - */ - public static float[] shortestDistance(Fst fst) { - - Fst reversed = Reverse.get(fst); - - float[] d = new float[reversed.getNumStates()]; - float[] r = new float[reversed.getNumStates()]; - - Semiring semiring = reversed.getSemiring(); - - Arrays.fill(d, semiring.zero()); - Arrays.fill(r, semiring.zero()); - - LinkedHashSet queue = new LinkedHashSet(); - - queue.add(reversed.getStart()); - - d[reversed.getStart().getId()] = semiring.one(); - r[reversed.getStart().getId()] = semiring.one(); - - while (!queue.isEmpty()) { - State q = queue.iterator().next(); - queue.remove(q); - - float rnew = r[q.getId()]; - r[q.getId()] = semiring.zero(); - - for (int i = 0; i < q.getNumArcs(); i++) { - Arc a = q.getArc(i); - State nextState = a.getNextState(); - float dnext = d[a.getNextState().getId()]; - float dnextnew = semiring.plus(dnext, - semiring.times(rnew, a.getWeight())); - if (dnext != dnextnew) { - d[a.getNextState().getId()] = dnextnew; - r[a.getNextState().getId()] = semiring.plus(r[a - .getNextState().getId()], semiring.times(rnew, - a.getWeight())); - if (!queue.contains(nextState.getId())) { - queue.add(nextState); - } - } - } - } - return d; - } - - /** - * Calculates the n-best shortest path from the initial to the final state. - * - * @param fst - * the fst to calculate the nbest shortest paths - * @param n - * number of best paths to return - * @param determinize - * if true the input fst will bwe determinized prior the - * operation - * @return an fst containing the n-best shortest paths - */ - public static Fst get(Fst fst, int n, boolean determinize) { - if (fst == null) { - return null; - } - - if (fst.getSemiring() == null) { - return null; - } - Fst fstdet = fst; - if (determinize) { - fstdet = Determinize.get(fst); - } - final Semiring semiring = fstdet.getSemiring(); - Fst res = new Fst(semiring); - res.setIsyms(fstdet.getIsyms()); - res.setOsyms(fstdet.getOsyms()); - - final float[] d = shortestDistance(fstdet); - - ExtendFinal.apply(fstdet); - - int[] r = new int[fstdet.getNumStates()]; - - PriorityQueue> queue = new PriorityQueue>( - 10, new Comparator>() { - - public int compare(Pair o1, - Pair o2) { - float previous = o1.getRight(); - float d1 = d[o1.getLeft().getId()]; - - float next = o2.getRight(); - float d2 = d[o2.getLeft().getId()]; - - float a1 = semiring.times(next, d2); - float a2 = semiring.times(previous, d1); - - if (semiring.naturalLess(a1, a2)) - return 1; - - if (a1 == a2) - return 0; - - return -1; - } - }); - - HashMap, Pair> previous = new HashMap, Pair>( - fst.getNumStates()); - HashMap, State> stateMap = new HashMap, State>( - fst.getNumStates()); - - State start = fstdet.getStart(); - Pair item = new Pair(start, semiring.one()); - queue.add(item); - previous.put(item, null); - - while (!queue.isEmpty()) { - Pair pair = queue.remove(); - State p = pair.getLeft(); - Float c = pair.getRight(); - - State s = new State(p.getFinalWeight()); - res.addState(s); - stateMap.put(pair, s); - if (previous.get(pair) == null) { - // this is the start state - res.setStart(s); - } else { - // add the incoming arc from previous to current - State previouState = stateMap.get(previous.get(pair)); - State previousOldState = previous.get(pair).getLeft(); - for (int j = 0; j < previousOldState.getNumArcs(); j++) { - Arc a = previousOldState.getArc(j); - if (a.getNextState().equals(p)) { - previouState.addArc(new Arc(a.getIlabel(), a - .getOlabel(), a.getWeight(), s)); - } - } - } - - Integer stateIndex = p.getId(); - r[stateIndex]++; - - if ((r[stateIndex] == n) && (p.getFinalWeight() != semiring.zero())) { - break; - } - - if (r[stateIndex] <= n) { - for (int j = 0; j < p.getNumArcs(); j++) { - Arc a = p.getArc(j); - float cnew = semiring.times(c, a.getWeight()); - Pair next = new Pair( - a.getNextState(), cnew); - previous.put(next, pair); - queue.add(next); - } - } - } - - return res; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/OLabelCompare.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/OLabelCompare.java deleted file mode 100755 index bb8e5569..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/OLabelCompare.java +++ /dev/null @@ -1,44 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.fst.operations; - -import java.util.Comparator; - -import edu.cmu.sphinx.fst.Arc; - -/** - * Comparator used in {@link edu.cmu.sphinx.fst.operations.ArcSort} for sorting - * based on output labels - * - * @author John Salatas - */ -public class OLabelCompare implements Comparator { - - /* - * (non-Javadoc) - * - * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) - */ - public int compare(Arc o1, Arc o2) { - if(o1 == null) { - return 1; - } - if(o2 == null) { - return -1; - } - return (o1.getOlabel() < o2.getOlabel()) ? -1 : ((o1.getOlabel() == o2 - .getOlabel()) ? 0 : 1); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/Project.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/Project.java deleted file mode 100755 index de696fbc..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/Project.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * - */ -package edu.cmu.sphinx.fst.operations; - -import edu.cmu.sphinx.fst.Arc; -import edu.cmu.sphinx.fst.Fst; -import edu.cmu.sphinx.fst.ImmutableFst; -import edu.cmu.sphinx.fst.State; - -/** - * Project operation. - * - * @author John Salatas - * - */ -public class Project { - /** - * Default Constructor - */ - private Project() { - } - - /** - * Projects an fst onto its domain or range by either copying each arc's - * input label to its output label or vice versa. - * - * @param fst fst to modify - * @param pType type of the projection - */ - public static void apply(Fst fst, ProjectType pType) { - if (pType == ProjectType.INPUT) { - fst.setOsyms(fst.getIsyms()); - } else if (pType == ProjectType.OUTPUT) { - fst.setIsyms(fst.getOsyms()); - } - - int numStates = fst.getNumStates(); - for (int i = 0; i < numStates; i++) { - State s = fst.getState(i); - // Immutable fsts hold an additional (null) arc - int numArcs = (fst instanceof ImmutableFst) ? s.getNumArcs() - 1: s - .getNumArcs(); - for (int j = 0; j < numArcs; j++) { - Arc a = s.getArc(j); - if (pType == ProjectType.INPUT) { - a.setOlabel(a.getIlabel()); - } else if (pType == ProjectType.OUTPUT) { - a.setIlabel(a.getOlabel()); - } - } - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/ProjectType.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/ProjectType.java deleted file mode 100755 index b76c64bf..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/ProjectType.java +++ /dev/null @@ -1,26 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.fst.operations; - -/** - * Enum used in {@link edu.cmu.sphinx.fst.operations.Project} operation. - * - * It specifies whether the Project operation will take place on input or output - * labels - * - * @author John Salatas - */ -public enum ProjectType { - INPUT, OUTPUT -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/Reverse.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/Reverse.java deleted file mode 100755 index a1aa4aff..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/operations/Reverse.java +++ /dev/null @@ -1,85 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.fst.operations; - -import edu.cmu.sphinx.fst.Arc; -import edu.cmu.sphinx.fst.Fst; -import edu.cmu.sphinx.fst.State; -import edu.cmu.sphinx.fst.semiring.Semiring; - -/** - * Reverse operation. - * - * @author John Salatas - * - */ -public class Reverse { - /** - * Default Constructor - */ - private Reverse() { - } - - /** - * Reverses an fst - * - * @param fst the fst to reverse - * @return the reversed fst - */ - public static Fst get(Fst fst) { - if (fst.getSemiring() == null) { - return null; - } - - ExtendFinal.apply(fst); - - Semiring semiring = fst.getSemiring(); - - Fst res = new Fst(fst.getNumStates()); - res.setSemiring(semiring); - - res.setIsyms(fst.getOsyms()); - res.setOsyms(fst.getIsyms()); - - State[] stateMap = new State[fst.getNumStates()]; - int numStates = fst.getNumStates(); - for (int i=0; i[] cl) { - HashMap tmp = cl[fromState.getId()]; - if (tmp == null) { - tmp = new HashMap(); - cl[fromState.getId()] = tmp; - } - tmp.put(toState, weight); - } - - /** - * Add a state in the epsilon closure - */ - private static void add(State fromState, State toState, float weight, - HashMap[] cl, Semiring semiring) { - Float old = getPathWeight(fromState, toState, cl); - if (old == null) { - put(fromState, toState, weight, cl); - } else { - put(fromState, toState, semiring.plus(weight, old), cl); - } - - } - - /** - * Calculate the epsilon closure - */ - private static void calcClosure(Fst fst, State state, - HashMap[] cl, Semiring semiring) { - State s = state; - - float pathWeight; - int numArcs = s.getNumArcs(); - for (int j = 0; j < numArcs; j++) { - Arc a = s.getArc(j); - if ((a.getIlabel() == 0) && (a.getOlabel() == 0)) { - if (cl[a.getNextState().getId()] == null) { - calcClosure(fst, a.getNextState(), cl, semiring); - } - if (cl[a.getNextState().getId()] != null) { - for (State pathFinalState : cl[a.getNextState().getId()] - .keySet()) { - pathWeight = semiring.times( - getPathWeight(a.getNextState(), pathFinalState, - cl), a.getWeight()); - add(state, pathFinalState, pathWeight, cl, semiring); - } - } - add(state, a.getNextState(), a.getWeight(), cl, semiring); - } - } - } - - /** - * Get an epsilon path's cost in epsilon closure - */ - private static Float getPathWeight(State in, State out, - HashMap[] cl) { - if (cl[in.getId()] != null) { - return cl[in.getId()].get(out); - } - - return null; - } - - /** - * Removes epsilon transitions from an fst. - * - * It return a new epsilon-free fst and does not modify the original fst - * - * @param fst the fst to remove epsilon transitions from - * @return the epsilon-free fst - */ - public static Fst get(Fst fst) { - if (fst == null) { - return null; - } - - if (fst.getSemiring() == null) { - return null; - } - - Semiring semiring = fst.getSemiring(); - - Fst res = new Fst(semiring); - - @SuppressWarnings("unchecked") - HashMap[] cl = new HashMap[fst.getNumStates()]; - State[] oldToNewStateMap = new State[fst.getNumStates()]; - State[] newToOldStateMap = new State[fst.getNumStates()]; - - int numStates = fst.getNumStates(); - for (int i = 0; i < numStates; i++) { - State s = fst.getState(i); - // Add non-epsilon arcs - State newState = new State(s.getFinalWeight()); - res.addState(newState); - oldToNewStateMap[s.getId()] = newState; - newToOldStateMap[newState.getId()] = s; - if (newState.getId() == fst.getStart().getId()) { - res.setStart(newState); - } - } - - for (int i = 0; i < numStates; i++) { - State s = fst.getState(i); - // Add non-epsilon arcs - State newState = oldToNewStateMap[s.getId()]; - int numArcs = s.getNumArcs(); - for (int j = 0; j < numArcs; j++) { - Arc a = s.getArc(j); - if ((a.getIlabel() != 0) || (a.getOlabel() != 0)) { - newState.addArc(new Arc(a.getIlabel(), a.getOlabel(), a - .getWeight(), oldToNewStateMap[a.getNextState() - .getId()])); - } - } - - // Compute e-Closure - if (cl[s.getId()] == null) { - calcClosure(fst, s, cl, semiring); - } - } - - // augment fst with arcs generated from epsilon moves. - numStates = res.getNumStates(); - for (int i = 0; i < numStates; i++) { - State s = res.getState(i); - State oldState = newToOldStateMap[s.getId()]; - if (cl[oldState.getId()] != null) { - for (State pathFinalState : cl[oldState.getId()].keySet()) { - State s1 = pathFinalState; - if (s1.getFinalWeight() != semiring.zero()) { - s.setFinalWeight(semiring.plus(s.getFinalWeight(), - semiring.times(getPathWeight(oldState, s1, cl), - s1.getFinalWeight()))); - } - int numArcs = s1.getNumArcs(); - for (int j = 0; j < numArcs; j++) { - Arc a = s1.getArc(j); - if ((a.getIlabel() != 0) || (a.getOlabel() != 0)) { - Arc newArc = new Arc(a.getIlabel(), a.getOlabel(), - semiring.times(a.getWeight(), - getPathWeight(oldState, s1, cl)), - oldToNewStateMap[a.getNextState().getId()]); - s.addArc(newArc); - } - } - } - } - } - - res.setIsyms(fst.getIsyms()); - res.setOsyms(fst.getOsyms()); - - Connect.apply(res); - - return res; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/semiring/LogSemiring.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/semiring/LogSemiring.java deleted file mode 100755 index d16ba11e..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/semiring/LogSemiring.java +++ /dev/null @@ -1,135 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.fst.semiring; - -/** - * Log semiring implementation. - * - * @author John Salatas - * - */ -public class LogSemiring extends Semiring { - - private static final long serialVersionUID = 5212106775584311083L; - - // zero value - private static float zero = Float.POSITIVE_INFINITY; - - // one value - private static float one = 0.f; - - /* - * (non-Javadoc) - * - * @see - * edu.cmu.sphinx.fst.weight.Semiring#plus(edu.cmu.sphinx.fst.weight.float, - * edu.cmu.sphinx.fst.weight.float) - */ - @Override - public float plus(float w1, float w2) { - if (!isMember(w1) || !isMember(w2)) { - return Float.NEGATIVE_INFINITY; - } - if (w1 == Float.POSITIVE_INFINITY) { - return w2; - } else if (w2 == Float.POSITIVE_INFINITY) { - return w1; - } - return (float) -Math.log(Math.exp(-w1) + Math.exp(-w2)); - } - - /* - * (non-Javadoc) - * - * @see - * edu.cmu.sphinx.fst.weight.Semiring#times(edu.cmu.sphinx.fst.weight.float, - * edu.cmu.sphinx.fst.weight.float) - */ - @Override - public float times(float w1, float w2) { - if (!isMember(w1) || !isMember(w2)) { - return Float.NEGATIVE_INFINITY; - } - - return w1 + w2; - } - - /* - * (non-Javadoc) - * - * @see - * edu.cmu.sphinx.fst.weight.Semiring#divide(edu.cmu.sphinx.fst.weight.float - * , edu.cmu.sphinx.fst.weight.float) - */ - @Override - public float divide(float w1, float w2) { - if (!isMember(w1) || !isMember(w2)) { - return Float.NEGATIVE_INFINITY; - } - - if (w2 == zero) { - return Float.NEGATIVE_INFINITY; - } else if (w1 == zero) { - return zero; - } - - return w1 - w2; - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.fst.weight.Semiring#zero() - */ - @Override - public float zero() { - return zero; - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.fst.weight.Semiring#one() - */ - @Override - public float one() { - return one; - } - - /* - * (non-Javadoc) - * - * @see - * edu.cmu.sphinx.fst.weight.Semiring#isMember(edu.cmu.sphinx.fst.weight - * .float) - */ - @Override - public boolean isMember(float w) { - return (!Float.isNaN(w)) // not a NaN - && (w != Float.NEGATIVE_INFINITY); // and different from -inf - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.fst.semiring.Semiring#reverse(float) - */ - @Override - public float reverse(float w1) { - // TODO: ??? - System.out.println("Not Implemented"); - return Float.NEGATIVE_INFINITY; - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/semiring/ProbabilitySemiring.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/semiring/ProbabilitySemiring.java deleted file mode 100755 index 18649550..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/semiring/ProbabilitySemiring.java +++ /dev/null @@ -1,120 +0,0 @@ -/** - * - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.fst.semiring; - -/** - * Probability semiring implementation. - * - * @author "John Salatas" - * - */ -public class ProbabilitySemiring extends Semiring { - - private static final long serialVersionUID = 5592668313009971909L; - // zero value - private static float zero = 0.f; - - // one value - private static float one = 1.f; - - /* - * (non-Javadoc) - * - * @see - * edu.cmu.sphinx.fst.weight.AbstractSemiring#Plus(edu.cmu.sphinx.fst.weight - * .float, edu.cmu.sphinx.fst.weight.float) - */ - @Override - public float plus(float w1, float w2) { - if (!isMember(w1) || !isMember(w2)) { - return Float.NEGATIVE_INFINITY; - } - - return w1 + w2; - } - - /* - * (non-Javadoc) - * - * @see - * edu.cmu.sphinx.fst.weight.AbstractSemiring#Times(edu.cmu.sphinx.fst.weight - * .float, edu.cmu.sphinx.fst.weight.float) - */ - @Override - public float times(float w1, float w2) { - if (!isMember(w1) || !isMember(w2)) { - return Float.NEGATIVE_INFINITY; - } - - return w1 * w2; - } - - /* - * (non-Javadoc) - * - * @see - * edu.cmu.sphinx.fst.weight.AbstractSemiring#Divide(edu.cmu.sphinx.fst. - * weight.float, edu.cmu.sphinx.fst.weight.float) - */ - @Override - public float divide(float w1, float w2) { - // TODO Auto-generated method stub - return Float.NEGATIVE_INFINITY; - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.fst.weight.AbstractSemiring#zero() - */ - @Override - public float zero() { - return zero; - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.fst.weight.AbstractSemiring#one() - */ - @Override - public float one() { - return one; - } - - /* - * (non-Javadoc) - * - * @see - * edu.cmu.sphinx.fst.weight.Semiring#isMember(edu.cmu.sphinx.fst.weight - * .float) - */ - @Override - public boolean isMember(float w) { - return !Float.isNaN(w) // not a NaN, - && (w >= 0); // and positive - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.fst.semiring.Semiring#reverse(float) - */ - @Override - public float reverse(float w1) { - // TODO: ??? - System.out.println("Not Implemented"); - return Float.NEGATIVE_INFINITY; - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/semiring/Semiring.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/semiring/Semiring.java deleted file mode 100755 index c4421cc3..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/semiring/Semiring.java +++ /dev/null @@ -1,97 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.fst.semiring; - -import java.io.Serializable; - -/** - * Abstract semiring class. - * - * @author "John Salatas" - * - */ -public abstract class Semiring implements Serializable { - - private static final long serialVersionUID = 1L; - - // significant decimal digits in floating point numbers - protected static final int accuracy = 5; - - - public abstract float plus(float w1, float w2); - - public abstract float reverse(float w1); - - public abstract float times(float w1, float w2); - - - public abstract float divide(float w1, float w2); - - public abstract float zero(); - - public abstract float one(); - - public abstract boolean isMember(float w); - - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - return true; - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return this.getClass().toString(); - } - - /** - * NATURAL ORDER - * - * By definition: a <= b iff a + b = a - * - * The natural order is a negative partial order iff the semiring is - * idempotent. It is trivially monotonic for plus. It is left (resp. right) - * monotonic for times iff the semiring is left (resp. right) distributive. - * It is a total order iff the semiring has the path property. - * - * See Mohri, - * "Semiring Framework and Algorithms for Shortest-Distance Problems", - * Journal of Automata, Languages and Combinatorics 7(3):321-350, 2002. - * - * We define the strict version of this order below. - * - * @param w1: first operand - * @param w2: second operand - * @return less or more - */ - public boolean naturalLess(float w1, float w2) { - return (plus(w1, w2) == w1) && (w1 != w2); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/semiring/TropicalSemiring.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/semiring/TropicalSemiring.java deleted file mode 100755 index 6e1f5e7e..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/semiring/TropicalSemiring.java +++ /dev/null @@ -1,128 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.fst.semiring; - -/** - * Tropical semiring implementation. - * - * @author "John Salatas" - * - */ -public class TropicalSemiring extends Semiring { - - private static final long serialVersionUID = 2711172386738607866L; - - // zero value - private static float zero = Float.POSITIVE_INFINITY; - - // one value - private static float one = 0.f; - - /* - * (non-Javadoc) - * - * @see - * edu.cmu.sphinx.fst.weight.AbstractSemiring#Plus(edu.cmu.sphinx.fst.weight - * .float, edu.cmu.sphinx.fst.weight.float) - */ - @Override - public float plus(float w1, float w2) { - if (!isMember(w1) || !isMember(w2)) { - return Float.NEGATIVE_INFINITY; - } - - return w1 < w2 ? w1 : w2; - } - - /* - * (non-Javadoc) - * - * @see - * edu.cmu.sphinx.fst.weight.AbstractSemiring#Times(edu.cmu.sphinx.fst.weight - * .float, edu.cmu.sphinx.fst.weight.float) - */ - @Override - public float times(float w1, float w2) { - if (!isMember(w1) || !isMember(w2)) { - return Float.NEGATIVE_INFINITY; - } - - return w1 + w2; - } - - /* - * (non-Javadoc) - * - * @see - * edu.cmu.sphinx.fst.weight.AbstractSemiring#Divide(edu.cmu.sphinx.fst. - * weight.float, edu.cmu.sphinx.fst.weight.float) - */ - @Override - public float divide(float w1, float w2) { - if (!isMember(w1) || !isMember(w2)) { - return Float.NEGATIVE_INFINITY; - } - - if (w2 == zero) { - return Float.NEGATIVE_INFINITY; - } else if (w1 == zero) { - return zero; - } - - return w1 - w2; - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.fst.weight.AbstractSemiring#zero() - */ - @Override - public float zero() { - return zero; - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.fst.weight.AbstractSemiring#one() - */ - @Override - public float one() { - return one; - } - - /* - * (non-Javadoc) - * - * @see - * edu.cmu.sphinx.fst.weight.AbstractSemiring#isMember(edu.cmu.sphinx.fst - * .weight.float) - */ - @Override - public boolean isMember(float w) { - return (!Float.isNaN(w)) // not a NaN - && (w != Float.NEGATIVE_INFINITY); // and different from -inf - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.fst.semiring.Semiring#reverse(float) - */ - @Override - public float reverse(float w1) { - return w1; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/sequitur/SequiturImport.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/sequitur/SequiturImport.java deleted file mode 100755 index eef3f1d1..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/sequitur/SequiturImport.java +++ /dev/null @@ -1,268 +0,0 @@ -/** - * - * Copyright 2014 Universität Hamburg. - * Portions Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.fst.sequitur; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.Iterator; -import java.util.List; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlMixed; -import javax.xml.bind.annotation.XmlRootElement; - -import edu.cmu.sphinx.fst.Fst; -import edu.cmu.sphinx.fst.semiring.Semiring; -import edu.cmu.sphinx.fst.semiring.TropicalSemiring; - -/** - * Converter for an Fst in Sequitur G2P's XML to Sphinx binary OpenFst format. - * - * Sequitur G2P (http://www-i6.informatik.rwth-aachen.de/web/Software/g2p.html) - * provides easy-to-build G2P training facilities. Its binary models can be - * converted to an XML FSA-format using fsa.py which is provided with Sequitur. - * - * This program reads the XML and constructs a @link{edu.cmu.sphinx.fst.Fst}, - * which is then serialized into the Sphinx binary OpenFst format (but could - * also be used directly). - * - * NOTICE: Sequitur's fsa.py does not in all cases construct valid XML, - * specifically it fails to encode XML character entities &, <, and > - * if these were part of the training material. If in doubt, please check for - * and replace them in the alphabet portion of the XML prior to using this - * converter. - * - * Implementation details: - we add a state for <s> to the end of both - * symbol alphabets - we increment all state IDs in the states and in the arcs - - * we add a new zero'th state which transitions via <s>:<s> to the - * (new) first state - * - * @author Johannes Twiefel, Timo Baumann - */ -public class SequiturImport { - - @XmlRootElement(name = "fsa") - public static class FSA { - @XmlAttribute - String semiring; - @XmlAttribute - int initial; // first real state - @XmlElement(name = "input-alphabet") - Alphabet inputAlphabet; - @XmlElement(name = "output-alphabet") - Alphabet outputAlphabet; - @XmlElement(name = "state") - List states; - transient List openFstStates; - transient Semiring ring = new TropicalSemiring(); - - public void afterUnmarshal(Unmarshaller unmarshaller, Object parent) { - // might also work with other formats, but we have never seen any - // other format - assert "tropical".equals(semiring); - // add a new initial state that transduces : and transitions - // to the first real state - State initialState = new State(); - initialState.id = 0; - Arc initialArc = new Arc(); - initialArc.in = inputAlphabet.symbols.size() - 1; - initialArc.out = outputAlphabet.symbols.size() - 1; - initialArc.target = initial + 1; - initialArc.weight = ring.one(); - initialState.arcs = Collections. singletonList(initialArc); - states.add(initialState); - // sort the states (to ascertain that initialState is the first - // element) - Collections. sort(states, new Comparator() { - public int compare(State s1, State s2) { - return s1.id - s2.id; - } - }); - } - - /** - * convert our object to the Sphinx OpenFst data structure - * - * @return an edu.cmu.sphinx.fst.Fst built from the XML - */ - public Fst toFst() { - Fst openFst = new Fst(ring); - openFst.setIsyms(inputAlphabet.toSymbols()); - openFst.setOsyms(outputAlphabet.toSymbols()); - openFstStates = new ArrayList( - states.size()); - for (State state : states) { - edu.cmu.sphinx.fst.State openFstState = state - .toUnconnectedOpenFstState(); - openFst.addState(openFstState); - assert openFstState.getId() == state.id; - openFstStates.add(openFstState); - } - openFst.setStart(openFstStates.get(0)); - // second pass (now that all openFst states are created) to add all - // the openFst arcs - for (State state : states) { - state.connectStates(openFstStates); - } - return openFst; - } - } - - public static class Alphabet { - @XmlElement(name = "symbol") - List symbols; - - public void afterUnmarshal(Unmarshaller unmarshaller, Object parent) { - Iterator it = symbols.iterator(); - while (it.hasNext()) { - if (it.next().content.matches("__\\d+__")) - it.remove(); - } - for (int i = 0; i < symbols.size(); i++) { - assert symbols.get(i).index != null; - assert symbols.get(i).index == i; - symbols.get(i).index = null; - } - Symbol s = new Symbol(); - s.content = ""; - symbols.add(s); - } - - String[] toSymbols() { - String[] out = new String[symbols.size()]; - for (int i = 0; i < out.length; i++) { - out[i] = symbols.get(i).content; - } - return out; - } - } - - public static class Symbol { - @XmlAttribute - Integer index; - @XmlMixed - List contentList; - transient String content; - - public void afterUnmarshal(Unmarshaller unmarshaller, Object parent) { - assert contentList != null : "Error with symbol " + index; - assert contentList.size() == 1 : "Error with symbol " + index; - this.content = contentList.get(0); - if (content.equals("__term__")) { - content = ""; - } else if (content.matches("__.+__")) { - content = ""; - } - } - } - - public static class State { - @XmlAttribute - int id; - @XmlElement(name = "final") - Object finalState; - @XmlElement - Float weight; - @XmlElement(name = "arc") - List arcs; - - public void afterUnmarshal(Unmarshaller unmarshaller, Object parent) { - id++; // increment state ID (because we add a new initial state 0 - // transitioning via :) - } - - /** - * @return a first approximation State which does not yet incoroporate - * arcs - */ - public edu.cmu.sphinx.fst.State toUnconnectedOpenFstState() { - return new edu.cmu.sphinx.fst.State(weight != null ? weight : 0.f); - } - - /** - * add arcs to the state now that all states are available as possible - * targets - * @param openFstStates source states - */ - public void connectStates(List openFstStates) { - if (arcs != null) - for (Arc arc : arcs) { - edu.cmu.sphinx.fst.Arc openFstArc = arc - .toOpenFstArc(openFstStates); - openFstStates.get(id).addArc(openFstArc); - } - } - } - - public static class Arc { - @XmlAttribute - int target; - @XmlElement - int in; // automatically set to 0 (which corresponds to epsilon) if not - // set in XML - @XmlElement - int out; // automatically set to 0 (which corresponds to epsilon) if not - // set in XML - @XmlElement - float weight; - - public void afterUnmarshal(Unmarshaller unmarshaller, Object parent) { - target++; // increment state ID (because we add a new initial state - // 0 transitioning via :) - } - - public edu.cmu.sphinx.fst.Arc toOpenFstArc( - List openFstStates) { - return new edu.cmu.sphinx.fst.Arc(in, out, weight, - openFstStates.get(target)); - } - } - - /** - * Load a Sequitur FSA in XML format and store it in Sphinx' OpenFst - * binary/serialized format. - * - * @param args - * filename of input file, filename of output file - * @throws JAXBException - * indicating that XML could not be read - * @throws IOException - * indicating that file-handling does not work - */ - public static void main(String... args) throws JAXBException, IOException { - JAXBContext context = JAXBContext.newInstance(FSA.class); - Unmarshaller unmarshaller = context.createUnmarshaller(); - FSA fsa = (FSA) unmarshaller.unmarshal(new File(args[0])); - edu.cmu.sphinx.fst.Fst fst = fsa.toFst(); - fst.saveModel(args[1]); - System.out - .println("The Sequitur G2P XML-formatted FST " - + args[0] - + " has been converted to Sphinx' OpenFst binary format in the file " - + args[1]); - // uncomment this to test your model: - // edu.cmu.sphinx.linguist.g2p.G2PConverter d = new - // edu.cmu.sphinx.linguist.g2p.G2PConverter(args[1]); - // List path = - // d.phoneticize("wahnsinn", 5); - // System.err.println(path); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/utils/Pair.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/utils/Pair.java deleted file mode 100755 index 6b230fe4..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/utils/Pair.java +++ /dev/null @@ -1,91 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.fst.utils; - -/** - * Pairs two elements - * - * Original code obtained by - * http://stackoverflow.com/questions/521171/a-java-collection-of-value - * -pairs-tuples - * - * @author John Salatas - * - */ -public class Pair { - - // The left element - private L left; - - // The right element - private R right; - - /* - * Constructor specifying the left and right elements of the Pair. - */ - public Pair(L left, R right) { - this.left = left; - this.right = right; - } - - public void setLeft(L left) { - this.left = left; - } - - public void setRight(R right) { - this.right = right; - } - - public L getLeft() { - return left; - } - - public R getRight() { - return right; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + left.hashCode(); - result = prime * result + right.hashCode(); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - @SuppressWarnings("unchecked") - Pair other = (Pair) obj; - if (!left.equals(other.left)) - return false; - if (!right.equals(other.right)) - return false; - return true; - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return "(" + left + ", " + right + ")"; - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/utils/Utils.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/utils/Utils.java deleted file mode 100755 index 69bb4f14..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/fst/utils/Utils.java +++ /dev/null @@ -1,103 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.fst.utils; - -import java.util.ArrayList; -import java.util.HashMap; - -/** - * Several general use utility functions needed by the fst framework - * - * @author John Salatas - */ -public class Utils { - - /** - * Searches an ArrayList of Strings starting from a specific position for a - * pattern - * - * @param src the input ArrayList of Strings - * @param pattern the pattern to search for - * @param start the starting position - * @return the index of the first occurrence or -1 if no matches found - */ - public static int search(ArrayList src, ArrayList pattern, - int start) { - int index = -1; - int pos = -1; - int startpos = 0; - if (start > src.size() - pattern.size()) { - return -1; - } - - do { - pos = src - .subList(startpos + start, src.size() - pattern.size() + 1) - .indexOf(pattern.get(0)); - if (pos == -1) { - return pos; - } - - boolean flag = true; - for (int i = 1; i < pattern.size(); i++) { - if (!src.get(startpos + start + pos + i).equals(pattern.get(i))) { - index = -1; - flag = false; - break; - } - } - - if (flag) { - index = startpos + pos; - break; - } else { - startpos += pos + 1; - } - } while (startpos + start < src.size()); - - return index; - } - - /** - * Get the position (index) of a particular string in a Strings array. - * - * The search is case insensitive. - * - * @param strings the Strings array - * @param string the string to search - * @return the index of the first occurrence or -1 if no matches found - */ - public static int getIndex(String[] strings, String string) { - for (int i = 0; i < strings.length; i++) { - if (string.toLowerCase().equals(strings[i].toLowerCase())) { - return i; - } - } - return -1; - } - - /** - * Convert a HashMap to string array - * - * @param syms the input HashMap - * @return the strings array - */ - public static String[] toStringArray(HashMap syms) { - String[] res = new String[syms.size()]; - for (String sym : syms.keySet()) { - res[syms.get(sym)] = sym; - } - return res; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/AccuracyTracker.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/AccuracyTracker.java deleted file mode 100755 index f181f9eb..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/AccuracyTracker.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.instrumentation; - -import edu.cmu.sphinx.recognizer.Recognizer; -import edu.cmu.sphinx.recognizer.Recognizer.State; -import edu.cmu.sphinx.recognizer.StateListener; -import edu.cmu.sphinx.result.Result; -import edu.cmu.sphinx.decoder.ResultListener; -import edu.cmu.sphinx.util.NISTAlign; -import edu.cmu.sphinx.util.props.*; - -/** Tracks and reports recognition accuracy */ -abstract public class AccuracyTracker - extends - ConfigurableAdapter - implements - ResultListener, - Resetable, - StateListener, - Monitor { - - /** The property that defines which recognizer to monitor */ - @S4Component(type = Recognizer.class) - public final static String PROP_RECOGNIZER = "recognizer"; - - /** The property that defines whether summary accuracy information is displayed */ - @S4Boolean(defaultValue = true) - public final static String PROP_SHOW_SUMMARY = "showSummary"; - - /** The property that defines whether detailed accuracy information is displayed */ - @S4Boolean(defaultValue = true) - public final static String PROP_SHOW_DETAILS = "showDetails"; - - /** The property that defines whether recognition results should be displayed. */ - @S4Boolean(defaultValue = true) - public final static String PROP_SHOW_RESULTS = "showResults"; - - - /** The property that defines whether recognition results should be displayed. */ - @S4Boolean(defaultValue = true) - public final static String PROP_SHOW_ALIGNED_RESULTS = "showAlignedResults"; - - /** The property that defines whether recognition results should be displayed. */ - @S4Boolean(defaultValue = true) - public final static String PROP_SHOW_RAW_RESULTS = "showRawResults"; - - // ------------------------------ - // Configuration data - // ------------------------------ - private String name; - private Recognizer recognizer; - private boolean showSummary; - private boolean showDetails; - private boolean showResults; - private boolean showAlignedResults; - private boolean showRaw; - - private final NISTAlign aligner = new NISTAlign(false, false); - - public AccuracyTracker(Recognizer recognizer, boolean showSummary, boolean showDetails, boolean showResults, boolean showAlignedResults, boolean showRawResults) { - - initRecognizer(recognizer); - initLogger(); - - this.showSummary = showSummary; - this.showDetails = showDetails; - this.showResults = showResults; - this.showAlignedResults = showAlignedResults; - - this.showRaw = showRawResults; - - aligner.setShowResults(showResults); - aligner.setShowAlignedResults(showAlignedResults); - } - - public AccuracyTracker() { - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - initRecognizer((Recognizer) ps.getComponent(PROP_RECOGNIZER)); - - showSummary = ps.getBoolean(PROP_SHOW_SUMMARY); - showDetails = ps.getBoolean(PROP_SHOW_DETAILS); - showResults = ps.getBoolean(PROP_SHOW_RESULTS); - showAlignedResults = ps.getBoolean(PROP_SHOW_ALIGNED_RESULTS); - - showRaw = ps.getBoolean(PROP_SHOW_RAW_RESULTS); - - aligner.setShowResults(showResults); - aligner.setShowAlignedResults(showAlignedResults); - } - - private void initRecognizer(Recognizer newRecognizer) { - if (recognizer == null) { - recognizer = newRecognizer; - recognizer.addResultListener(this); - recognizer.addStateListener(this); - } else if (recognizer != newRecognizer) { - recognizer.removeResultListener(this); - recognizer.removeStateListener(this); - recognizer = newRecognizer; - recognizer.addResultListener(this); - recognizer.addStateListener(this); - } - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.instrumentation.Resetable - */ - public void reset() { - aligner.resetTotals(); - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#getName() - */ - public String getName() { - return name; - } - - - /** - * Retrieves the aligner used to track the accuracy stats - * - * @return the aligner - */ - public NISTAlign getAligner() { - return aligner; - } - - - /** - * Shows the complete details. - * - * @param rawText the RAW result - */ - protected void showDetails(String rawText) { - if (showDetails) { - aligner.printSentenceSummary(); - if (showRaw) { - logger.info("RAW " + rawText); - } - aligner.printTotalSummary(); - } - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.decoder.ResultListener#newResult(edu.cmu.sphinx.result.Result) - */ - abstract public void newResult(Result result); - - public void statusChanged(Recognizer.State status) { - if (status == State.DEALLOCATED) { - if (showSummary) { - logger.info("\n# --------------- Summary statistics ---------"); - aligner.printTotalSummary(); - } - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/BestPathAccuracyTracker.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/BestPathAccuracyTracker.java deleted file mode 100755 index deda99b3..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/BestPathAccuracyTracker.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.instrumentation; - -import edu.cmu.sphinx.decoder.search.Token; -import edu.cmu.sphinx.result.Result; -import edu.cmu.sphinx.util.props.*; -import edu.cmu.sphinx.recognizer.Recognizer; - -/** Tracks and reports recognition accuracy based upon the highest scoring path in a Result. */ -public class BestPathAccuracyTracker extends AccuracyTracker { - - /** The property that define whether the full token path is displayed */ - @S4Boolean(defaultValue = false) - public final static String PROP_SHOW_FULL_PATH = "showFullPath"; - - private boolean showFullPath; - - public BestPathAccuracyTracker(Recognizer recognizer, boolean showSummary, boolean showDetails, boolean showResults, boolean showAlignedResults, boolean showRawResults, boolean showFullPath) { - super(recognizer, showSummary, showDetails, showResults, showAlignedResults, showRawResults); - this.showFullPath = showFullPath; - } - - public BestPathAccuracyTracker() { - - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - showFullPath = ps.getBoolean(PROP_SHOW_FULL_PATH); - } - - - /** - * Dumps the best path - * - * @param result the result to dump - */ - private void showFullPath(Result result) { - if (showFullPath) { - System.out.println(); - Token bestToken = result.getBestToken(); - if (bestToken != null) { - bestToken.dumpTokenPath(); - } else { - System.out.println("Null result"); - } - System.out.println(); - } - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.decoder.ResultListener#newResult(edu.cmu.sphinx.result.Result) - */ - @Override - public void newResult(Result result) { - String ref = result.getReferenceText(); - if (result.isFinal() && ref != null) { - String hyp = result.getBestResultNoFiller(); - getAligner().align(ref, hyp); - showFullPath(result); - showDetails(result.toString()); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/ConfigMonitor.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/ConfigMonitor.java deleted file mode 100755 index 53028605..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/ConfigMonitor.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.instrumentation; - - -import edu.cmu.sphinx.util.props.*; -import edu.cmu.sphinx.util.props.tools.GDLDumper; -import edu.cmu.sphinx.util.props.tools.HTMLDumper; - -import java.io.File; -import java.io.IOException; -import java.util.logging.Logger; - -/** - * Shows the configuration currently in use. This monitor is typically added as a recognition monitor such that the - * configuration is shown immediately after the recognizer is allocated. - */ -public class ConfigMonitor implements Configurable, Runnable, Monitor { - - /** The property that is used to indicate whether or not this monitor should show the current configuration. */ - @S4Boolean(defaultValue = false) - public final static String PROP_SHOW_CONFIG = "showConfig"; - - /** - * The property that is used to indicate whether or not this monitor should dump the configuration in an HTML - * document - */ - @S4Boolean(defaultValue = false) - public final static String PROP_SHOW_CONFIG_AS_HTML = "showConfigAsHTML"; - - /** - * The property that is used to indicate whether or not this monitor should dump the configuration in an GDL - * document - */ - @S4Boolean(defaultValue = false) - public final static String PROP_SHOW_CONFIG_AS_GDL = "showConfigAsGDL"; - - /** - * The property that is used to indicate whether or not this monitor should save the configuration in an XML - * document - */ - @S4Boolean(defaultValue = false) - public final static String PROP_SAVE_CONFIG_AS_XML = "saveConfigAsXML"; - - - @S4String(mandatory = false) - public static final String PROP_OUTFILE = "file"; - - // ------------------------- - // Configuration data - // ------------------------- - private boolean showConfig; - private boolean showHTML = true; - private boolean saveXML; - private boolean showGDL = true; - - private Logger logger; - private ConfigurationManager cm; - - private String htmlPath = "config.html"; - private String gdlPath = "config.gdl"; - private String xmlPath = "config.xml"; - - - /* (non-Javadoc) - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - public void newProperties(PropertySheet ps) throws PropertyException { - logger = ps.getLogger(); - cm = ConfigurationManagerUtils.getPropertyManager(ps); - - showConfig = ps.getBoolean(PROP_SHOW_CONFIG); - showHTML = ps.getBoolean(PROP_SHOW_CONFIG_AS_HTML); - showGDL = ps.getBoolean(PROP_SHOW_CONFIG_AS_GDL); - saveXML = ps.getBoolean(PROP_SAVE_CONFIG_AS_XML); - - if (ps.getString(PROP_OUTFILE) != null) { - File outFile = new File(ps.getString(PROP_OUTFILE)); - - if (outFile.getParentFile().isDirectory()) { - htmlPath = outFile.getPath(); - gdlPath = outFile.getPath(); - xmlPath = outFile.getPath(); - } - } - } - - - /* (non-Javadoc) - * @see java.lang.Runnable#run() - */ - public void run() { - if (showConfig) { - ConfigurationManagerUtils.showConfig(cm); - } - - if (showHTML) { - try { - HTMLDumper.showConfigAsHTML(cm, "foo.html"); - } catch (IOException e) { - logger.warning("Can't open " + htmlPath + ' ' + e); - } - } - - if (showGDL) { - try { - GDLDumper.showConfigAsGDL(cm, gdlPath); - } catch (IOException e) { - logger.warning("Can't open " + gdlPath + ' ' + e); - } - } - - if (saveXML) { - ConfigurationManagerUtils.save(cm, new File(xmlPath)); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/MemoryTracker.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/MemoryTracker.java deleted file mode 100755 index 510cc13e..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/MemoryTracker.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.instrumentation; - -import edu.cmu.sphinx.recognizer.Recognizer; -import edu.cmu.sphinx.recognizer.Recognizer.State; -import edu.cmu.sphinx.recognizer.StateListener; -import edu.cmu.sphinx.result.Result; -import edu.cmu.sphinx.decoder.ResultListener; -import edu.cmu.sphinx.util.props.*; - -import java.text.DecimalFormat; - -/** Monitors a recognizer for memory usage */ -public class MemoryTracker - extends - ConfigurableAdapter - implements - ResultListener, - StateListener, - Monitor { - - /** The property that defines which recognizer to monitor */ - @S4Component(type = Recognizer.class) - public final static String PROP_RECOGNIZER = "recognizer"; - - /** The property that defines whether summary accuracy information is displayed */ - @S4Boolean(defaultValue = true) - public final static String PROP_SHOW_SUMMARY = "showSummary"; - - /** The property that defines whether detailed accuracy information is displayed */ - @S4Boolean(defaultValue = true) - public final static String PROP_SHOW_DETAILS = "showDetails"; - - private static final DecimalFormat memFormat = new DecimalFormat("0.00 Mb"); - // ------------------------------ - // Configuration data - // ------------------------------ - private String name; - private Recognizer recognizer; - private boolean showSummary; - private boolean showDetails; - private float maxMemoryUsed; - private int numMemoryStats; - private float avgMemoryUsed; - - public MemoryTracker(Recognizer recognizer, boolean showSummary, boolean showDetails) { - initRecognizer(recognizer); - initLogger(); - this.showSummary = showSummary; - this.showDetails = showDetails; - } - - public MemoryTracker() { - - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - Recognizer newRecognizer = (Recognizer) ps.getComponent( - PROP_RECOGNIZER); - initRecognizer(newRecognizer); - showSummary = ps.getBoolean(PROP_SHOW_SUMMARY); - showDetails = ps.getBoolean(PROP_SHOW_DETAILS); - } - - private void initRecognizer(Recognizer newRecognizer) { - if (recognizer == null) { - recognizer = newRecognizer; - recognizer.addResultListener(this); - recognizer.addStateListener(this); - } else if (recognizer != newRecognizer) { - recognizer.removeResultListener(this); - recognizer.removeStateListener(this); - recognizer = newRecognizer; - recognizer.addResultListener(this); - recognizer.addStateListener(this); - } - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#getName() - */ - public String getName() { - return name; - } - - - /** Shows memory usage - * @param show*/ - private void calculateMemoryUsage(boolean show) { - float totalMem = Runtime.getRuntime().totalMemory() - / (1024.0f * 1024.0f); - float freeMem = Runtime.getRuntime().freeMemory() / (1024.0f * 1024.0f); - float usedMem = totalMem - freeMem; - if (usedMem > maxMemoryUsed) { - maxMemoryUsed = usedMem; - } - - numMemoryStats++; - avgMemoryUsed = ((avgMemoryUsed * (numMemoryStats - 1)) + usedMem) - / numMemoryStats; - - if (show) { - logger.info(" Mem Total: " + memFormat.format(totalMem) - + " " + "Free: " + memFormat.format(freeMem)); - logger.info(" Used: This: " + memFormat.format(usedMem) + " " - + "Avg: " + memFormat.format(avgMemoryUsed) + " " + "Max: " - + memFormat.format(maxMemoryUsed)); - } - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.decoder.ResultListener#newResult(edu.cmu.sphinx.result.Result) - */ - public void newResult(Result result) { - if (result.isFinal()) { - calculateMemoryUsage(showDetails); - } - } - - public void statusChanged(Recognizer.State status) { - if (status == State.DEALLOCATED) { - calculateMemoryUsage(showSummary); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/Monitor.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/Monitor.java deleted file mode 100755 index 2ee4b6ab..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/Monitor.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Monitor.java - * - * Created on February 22, 2007, 5:41 PM - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004-2007 Mitsubishi Electric Research Laboratories. - * Portions Copyright 2007 Harvard Extension Schoool, Harvard University - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.instrumentation; - -import edu.cmu.sphinx.util.props.Configurable; - -/** - * Common empty interface for Configurable monitors - * - * @author Ariani - */ -public interface Monitor extends Configurable { - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/RecognizerMonitor.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/RecognizerMonitor.java deleted file mode 100755 index 59abdb39..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/RecognizerMonitor.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.instrumentation; - -import edu.cmu.sphinx.recognizer.Recognizer; -import edu.cmu.sphinx.recognizer.Recognizer.State; -import edu.cmu.sphinx.recognizer.StateListener; -import edu.cmu.sphinx.util.props.*; - -import java.util.List; - -/** - * Monitor the state transitions of a given recognizer. This monitor maintains lists of components that should be 'run' - * when a recognizer state change is detected. - */ -public class RecognizerMonitor implements StateListener, Monitor { - - /** The property for the recognizer to monitor */ - @S4Component(type = Recognizer.class) - public final static String PROP_RECOGNIZER = "recognizer"; - - /** The property that defines all of the monitors to call when the recognizer is allocated */ - @S4ComponentList(type = Configurable.class) - public final static String PROP_ALLOCATED_MONITORS = "allocatedMonitors"; - - /** The property that defines all of the monitors to call when the recognizer is deallocated */ - @S4ComponentList(type = Configurable.class) - public final static String PROP_DEALLOCATED_MONITORS = "deallocatedMonitors"; - - // -------------------------- - // Configuration data - // -------------------------- - Recognizer recognizer; - List allocatedMonitors; - List deallocatedMonitors; - String name; - - public RecognizerMonitor(Recognizer recognizer, List allocatedMonitors, List deallocatedMonitors ) { - initRecognizer(recognizer); - this.allocatedMonitors = allocatedMonitors; - this.deallocatedMonitors = deallocatedMonitors; - } - - public RecognizerMonitor() { - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - public void newProperties(PropertySheet ps) throws PropertyException { - initRecognizer((Recognizer) ps.getComponent(PROP_RECOGNIZER)); - allocatedMonitors = ps.getComponentList(PROP_ALLOCATED_MONITORS, Runnable.class); - deallocatedMonitors = ps.getComponentList(PROP_DEALLOCATED_MONITORS, Runnable.class); - } - - private void initRecognizer(Recognizer newRecognizer) { - if (recognizer == null) { - recognizer = newRecognizer; - recognizer.addStateListener(this); - } else if (recognizer != newRecognizer) { - recognizer.removeStateListener(this); - recognizer = newRecognizer; - recognizer.addStateListener(this); - } - } - - public void statusChanged(Recognizer.State status) { - List runnableList = null; - if (status == State.ALLOCATED) { - runnableList = allocatedMonitors; - } else if (status == State.DEALLOCATED) { - runnableList = deallocatedMonitors; - } - - if (runnableList != null) { - for (Runnable r : runnableList) { - r.run(); - } - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/RejectionTracker.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/RejectionTracker.java deleted file mode 100755 index 51556090..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/RejectionTracker.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.instrumentation; - -import edu.cmu.sphinx.recognizer.Recognizer; -import edu.cmu.sphinx.recognizer.Recognizer.State; -import edu.cmu.sphinx.recognizer.StateListener; -import edu.cmu.sphinx.result.Result; -import edu.cmu.sphinx.decoder.ResultListener; -import edu.cmu.sphinx.util.props.*; - -/** Tracks and reports rejection accuracy. */ -public class RejectionTracker implements - ResultListener, - Resetable, - Monitor, - StateListener { - - /** The property that defines which recognizer to monitor */ - @S4Component(type = Recognizer.class) - public final static String PROP_RECOGNIZER = "recognizer"; - - /** The property that defines whether summary accuracy information is displayed */ - @S4Boolean(defaultValue = true) - public final static String PROP_SHOW_SUMMARY = "showSummary"; - - /** The property that defines whether detailed accuracy information is displayed */ - @S4Boolean(defaultValue = true) - public final static String PROP_SHOW_DETAILS = "showDetails"; - - // ------------------------------ - // Configuration data - // ------------------------------ - private String name; - private Recognizer recognizer; - private boolean showSummary; - private boolean showDetails; - - /** total number of utterances */ - private int numUtterances; - - /** actual number of out-of-grammar utterance */ - private int numOutOfGrammarUtterances; - - /** number of correctly classified in-grammar utterances */ - private int numCorrectOutOfGrammarUtterances; - - /** number of in-grammar utterances misrecognized as out-of-grammar */ - private int numFalseOutOfGrammarUtterances; - - /** number of correctly classified out-of-grammar utterances */ - private int numCorrectInGrammarUtterances; - - /** number of out-of-grammar utterances misrecognized as in-grammar */ - private int numFalseInGrammarUtterances; - - - public RejectionTracker( Recognizer recognizer, boolean showSummary, boolean showDetails ) { - initRecognizer(recognizer); - this.showSummary = showSummary; - this.showDetails = showDetails; - } - - public RejectionTracker( ) { - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - public void newProperties(PropertySheet ps) throws PropertyException { - initRecognizer((Recognizer)ps.getComponent(PROP_RECOGNIZER)); - showSummary = ps.getBoolean(PROP_SHOW_SUMMARY); - showDetails = ps.getBoolean(PROP_SHOW_DETAILS); - } - - private void initRecognizer(Recognizer newRecognizer) { - if (recognizer == null) { - recognizer = newRecognizer; - recognizer.addResultListener(this); - recognizer.addStateListener(this); - } else if (recognizer != newRecognizer) { - recognizer.removeResultListener(this); - recognizer.removeStateListener(this); - recognizer = newRecognizer; - recognizer.addResultListener(this); - recognizer.addStateListener(this); - } - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.instrumentation.Resetable - */ - public void reset() { - numUtterances = 0; - numOutOfGrammarUtterances = 0; - numCorrectOutOfGrammarUtterances = 0; - numFalseOutOfGrammarUtterances = 0; - numCorrectInGrammarUtterances = 0; - numFalseInGrammarUtterances = 0; - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#getName() - */ - public String getName() { - return name; - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.decoder.ResultListener#newResult(edu.cmu.sphinx.result.Result) - */ - public void newResult(Result result) { - String ref = result.getReferenceText(); - if (result.isFinal() && ref != null) { - numUtterances++; - String hyp = result.getBestResultNoFiller(); - if (ref.equals("")) { - numOutOfGrammarUtterances++; - if (hyp.equals("")) { - numCorrectOutOfGrammarUtterances++; - } else { - numFalseInGrammarUtterances++; - } - } else { - if (hyp.equals("")) { - numFalseOutOfGrammarUtterances++; - } else { - numCorrectInGrammarUtterances++; - } - } - printStats(); - } - } - - - private void printStats() { - if (showSummary) { - float correctPercent = ((float) - (numCorrectOutOfGrammarUtterances + - numCorrectInGrammarUtterances)) / - ((float) numUtterances) * 100f; - System.out.println - (" Rejection Accuracy: " + correctPercent + '%'); - } - if (showDetails) { - System.out.println - (" Correct OOG: " + numCorrectOutOfGrammarUtterances + - " False OOG: " + numFalseOutOfGrammarUtterances + - " Correct IG: " + numCorrectInGrammarUtterances + - " False IG: " + numFalseInGrammarUtterances + - " Actual number: " + numOutOfGrammarUtterances); - } - } - - - public void statusChanged(Recognizer.State status) { - if (status == State.DEALLOCATED) { - printStats(); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/Resetable.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/Resetable.java deleted file mode 100755 index 7edfd4fc..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/Resetable.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.instrumentation; - - -/** Defines the interface for an object that is resetable */ -public interface Resetable { - - /** Resets this component. Typically this is for components that keep track of statistics */ - public void reset(); - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/SpeedTracker.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/SpeedTracker.java deleted file mode 100755 index 4225926b..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/instrumentation/SpeedTracker.java +++ /dev/null @@ -1,291 +0,0 @@ -/* - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.instrumentation; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.frontend.endpoint.SpeechEndSignal; -import edu.cmu.sphinx.frontend.endpoint.SpeechStartSignal; -import edu.cmu.sphinx.recognizer.Recognizer; -import edu.cmu.sphinx.recognizer.Recognizer.State; -import edu.cmu.sphinx.recognizer.StateListener; -import edu.cmu.sphinx.result.Result; -import edu.cmu.sphinx.decoder.ResultListener; -import edu.cmu.sphinx.util.TimerPool; -import edu.cmu.sphinx.util.props.*; - -import java.text.DecimalFormat; - -/** Monitors a recognizer for speed */ -public class SpeedTracker - extends - ConfigurableAdapter - implements - ResultListener, - Resetable, - StateListener, - SignalListener, - Monitor { - - /** The property that defines which recognizer to monitor */ - @S4Component(type = Recognizer.class) - public final static String PROP_RECOGNIZER = "recognizer"; - /** The property that defines which frontend to monitor */ - @S4Component(type = FrontEnd.class) - public final static String PROP_FRONTEND = "frontend"; - /** The property that defines whether summary accuracy information is displayed */ - @S4Boolean(defaultValue = true) - public final static String PROP_SHOW_SUMMARY = "showSummary"; - - /** The property that defines whether detailed accuracy information is displayed */ - @S4Boolean(defaultValue = true) - public final static String PROP_SHOW_DETAILS = "showDetails"; - - /** The property that defines whether detailed response information is displayed */ - @S4Boolean(defaultValue = false) - public final static String PROP_SHOW_RESPONSE_TIME = "showResponseTime"; - - /** The property that defines whether detailed timer information is displayed */ - @S4Boolean(defaultValue = false) - public final static String PROP_SHOW_TIMERS = "showTimers"; - - private static final DecimalFormat timeFormat = new DecimalFormat("0.00"); - - - // ------------------------------ - // Configuration data - // ------------------------------ - private String name; - private Recognizer recognizer; - private FrontEnd frontEnd; - - private boolean showSummary; - private boolean showDetails; - private boolean showTimers; - private long startTime; - private long audioStartTime; - private float audioTime; - private float processingTime; - private float totalAudioTime; - private float totalProcessingTime; - - private boolean showResponseTime; - private int numUtteranceStart; - private long maxResponseTime = Long.MIN_VALUE; - private long minResponseTime = Long.MAX_VALUE; - private long totalResponseTime; - - - public SpeedTracker(Recognizer recognizer, FrontEnd frontEnd, boolean showSummary, boolean showDetails, boolean showResponseTime, boolean showTimers) { - initLogger(); - initRecognizer(recognizer); - initFrontEnd(frontEnd); - this.showSummary = showSummary; - this.showDetails = showDetails; - this.showResponseTime = showResponseTime; - this.showTimers = showTimers; - } - - public SpeedTracker() { - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - initRecognizer((Recognizer) ps.getComponent(PROP_RECOGNIZER)); - initFrontEnd((FrontEnd) ps.getComponent(PROP_FRONTEND)); - showSummary = ps.getBoolean(PROP_SHOW_SUMMARY); - showDetails = ps.getBoolean(PROP_SHOW_DETAILS); - showResponseTime = ps.getBoolean(PROP_SHOW_RESPONSE_TIME); - showTimers = ps.getBoolean(PROP_SHOW_TIMERS); - } - - private void initFrontEnd(FrontEnd newFrontEnd) { - if (frontEnd == null) { - frontEnd = newFrontEnd; - frontEnd.addSignalListener(this); - } else if (frontEnd != newFrontEnd) { - frontEnd.removeSignalListener(this); - frontEnd = newFrontEnd; - frontEnd.addSignalListener(this); - } - } - - private void initRecognizer(Recognizer newRecognizer) { - if (recognizer == null) { - recognizer = newRecognizer; - recognizer.addResultListener(this); - recognizer.addStateListener(this); - } else if (recognizer != newRecognizer) { - recognizer.removeResultListener(this); - recognizer.removeStateListener(this); - recognizer = newRecognizer; - recognizer.addResultListener(this); - recognizer.addStateListener(this); - } - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#getName() - */ - public String getName() { - return name; - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.decoder.ResultListener#newResult(edu.cmu.sphinx.result.Result) - */ - public void newResult(Result result) { - if (result.isFinal()) { - processingTime = (getTime() - startTime) / 1000.0f; - totalAudioTime += audioTime; - totalProcessingTime += processingTime; - if (showDetails) { - showAudioUsage(); - } - } - } - - - /** Shows the audio usage data */ - protected void showAudioUsage() { - logger.info(" This Time Audio: " + timeFormat.format(audioTime) - + "s" - + " Proc: " + timeFormat.format(processingTime) + "s" - + " Speed: " + timeFormat.format(getSpeed()) - + " X real time"); - showAudioSummary(); - } - - - /** Shows the audio summary data */ - protected void showAudioSummary() { - logger.info(" Total Time Audio: " - + timeFormat.format(totalAudioTime) + "s" - + " Proc: " + timeFormat.format(totalProcessingTime) - + "s " - + timeFormat.format(getCumulativeSpeed()) + " X real time"); - - if (showResponseTime) { - float avgResponseTime = - (float) totalResponseTime / (numUtteranceStart * 1000); - logger.info - (" Response Time: Avg: " + avgResponseTime + 's' + - " Max: " + ((float) maxResponseTime / 1000) + - "s Min: " + ((float) minResponseTime / 1000) + 's'); - } - } - - - /** - * Returns the speed of the last decoding as a fraction of real time. - * - * @return the speed of the last decoding - */ - public float getSpeed() { - if (processingTime == 0 || audioTime == 0) { - return 0; - } else { - return (processingTime / audioTime); - } - } - - - /** Resets the speed statistics */ - public void reset() { - totalProcessingTime = 0; - totalAudioTime = 0; - numUtteranceStart = 0; - } - - - /** - * Returns the cumulative speed of this decoder as a fraction of real time. - * - * @return the cumulative speed of this decoder - */ - public float getCumulativeSpeed() { - if (totalProcessingTime == 0 || totalAudioTime == 0) { - return 0; - } else { - return (totalProcessingTime / totalAudioTime); - } - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.frontend.SignalListener#signalOccurred(edu.cmu.sphinx.frontend.Signal) - */ - public void signalOccurred(Signal signal) { - if (signal instanceof SpeechStartSignal || signal instanceof DataStartSignal) { - startTime = getTime(); - audioStartTime = signal.getTime(); - long responseTime = startTime - audioStartTime; - totalResponseTime += responseTime; - if (responseTime > maxResponseTime) { - maxResponseTime = responseTime; - } - if (responseTime < minResponseTime) { - minResponseTime = responseTime; - } - numUtteranceStart++; - } else if (signal instanceof SpeechEndSignal) { - audioTime = (signal.getTime() - audioStartTime) / 1000f; - } else if (signal instanceof DataEndSignal) { - audioTime = ((DataEndSignal) signal).getDuration() / 1000f; - } - } - - - /** - * Returns the current time in milliseconds - * - * @return the time in milliseconds. - */ - private long getTime() { - return System.currentTimeMillis(); - } - - - public void statusChanged(Recognizer.State status) { - if (status == State.ALLOCATED) { - if (showTimers) { - TimerPool.dumpAll(logger); - } - } - - if (status == State.DEALLOCATING) { - if (showTimers) { - TimerPool.dumpAll(logger); - } - } - - if (status == State.DEALLOCATED) { - if (showSummary) { - showAudioSummary(); - } - - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/GrXMLGrammar.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/GrXMLGrammar.java deleted file mode 100755 index 48552c66..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/GrXMLGrammar.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright 1999-2010 Carnegie Mellon University. - * Portions Copyright 2010 PC-NG Inc. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.jsgf; - -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.util.HashMap; -import java.util.Map; - -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.parsers.SAXParserFactory; - -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; -import org.xml.sax.XMLReader; - -import edu.cmu.sphinx.jsgf.rule.JSGFRule; -import edu.cmu.sphinx.linguist.language.grammar.GrammarNode; - -/** - * Grammar for GrXML W3C Standard - */ -public class GrXMLGrammar extends JSGFGrammar { - - Map rules; - - protected void loadXML() throws IOException { - try { - SAXParserFactory factory = SAXParserFactory.newInstance(); - XMLReader xr = factory.newSAXParser().getXMLReader(); - rules = new HashMap(); - GrXMLHandler handler = new GrXMLHandler(baseURL, rules, logger); - xr.setContentHandler(handler); - xr.setErrorHandler(handler); - InputStream is = baseURL.openStream(); - xr.parse(new InputSource(is)); - is.close(); - } catch (SAXParseException e) { - String msg = "Error while parsing line " + e.getLineNumber() + " of " + baseURL + ": " + e.getMessage(); - throw new IOException(msg); - } catch (SAXException e) { - throw new IOException("Problem with XML: " + e); - } catch (ParserConfigurationException e) { - throw new IOException(e.getMessage()); - } - - return; - } - - /** - * Commit changes to all loaded grammars and all changes of grammar since - * the last commitChange - * - * @throws JSGFGrammarParseException parse exception occured - * @throws JSGFGrammarException other exception occured - */ - @Override - public void commitChanges() throws IOException, JSGFGrammarParseException, - JSGFGrammarException { - try { - if (loadGrammar) { - if (manager == null) - getGrammarManager(); - loadXML(); - loadGrammar = false; - } - - ruleStack = new RuleStack(); - newGrammar(); - - firstNode = createGrammarNode(""); - GrammarNode finalNode = createGrammarNode(""); - finalNode.setFinalNode(true); - - // go through each rule and create a network of GrammarNodes - // for each of them - - for (Map.Entry entry : rules.entrySet()) { - - GrammarGraph publicRuleGraph = new GrammarGraph(); - ruleStack.push(entry.getKey(), publicRuleGraph); - GrammarGraph graph = processRule(entry.getValue()); - ruleStack.pop(); - - firstNode.add(publicRuleGraph.getStartNode(), 0.0f); - publicRuleGraph.getEndNode().add(finalNode, 0.0f); - publicRuleGraph.getStartNode().add(graph.getStartNode(), - 0.0f); - graph.getEndNode().add(publicRuleGraph.getEndNode(), 0.0f); - } - postProcessGrammar(); - } catch (MalformedURLException mue) { - throw new IOException("bad base grammar URL " + baseURL + ' ' + mue); - } - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/GrXMLHandler.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/GrXMLHandler.java deleted file mode 100755 index 946b1824..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/GrXMLHandler.java +++ /dev/null @@ -1,110 +0,0 @@ -package edu.cmu.sphinx.jsgf; - -import java.net.URL; -import java.util.ArrayList; -import java.util.Map; -import java.util.logging.Logger; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; -import org.xml.sax.helpers.DefaultHandler; - -import edu.cmu.sphinx.jsgf.rule.JSGFRule; -import edu.cmu.sphinx.jsgf.rule.JSGFRuleAlternatives; -import edu.cmu.sphinx.jsgf.rule.JSGFRuleCount; -import edu.cmu.sphinx.jsgf.rule.JSGFRuleSequence; -import edu.cmu.sphinx.jsgf.rule.JSGFRuleToken; - -public class GrXMLHandler extends DefaultHandler { - - protected final Map topRuleMap; - Logger logger; - JSGFRule currentRule; - - URL baseURL; - public GrXMLHandler(URL baseURL, Map rules, Logger logger) { - this.baseURL = baseURL; - this.topRuleMap = rules; - this.logger = logger; - } - - @Override - public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { - JSGFRule newRule = null; - JSGFRule topRule = null; - - logger.fine("Starting element " + qName); - if (qName.equals("rule")) { - String id = attributes.getValue("id"); - if (id != null) { - newRule = new JSGFRuleSequence(new ArrayList()); - topRuleMap.put(id, newRule); - topRule = newRule; - } - } - if (qName.equals("item")) { - String repeat = attributes.getValue("repeat"); - if (repeat != null) { - newRule = new JSGFRuleSequence(new ArrayList()); - JSGFRuleCount ruleCount = new JSGFRuleCount(newRule, JSGFRuleCount.ONCE_OR_MORE); - topRule = ruleCount; - } else { - newRule = new JSGFRuleSequence(new ArrayList()); - topRule = newRule; - } - } - if (qName.equals("one-of")) { - newRule = new JSGFRuleAlternatives(new ArrayList()); - topRule = newRule; - } - addToCurrent(newRule, topRule); - } - - @Override - public void characters(char buf[], int offset, int len)throws SAXException { - String item = new String(buf, offset, len).trim(); - - if (item.length() == 0) - return; - - logger.fine ("Processing text " + item); - - JSGFRuleToken newRule = new JSGFRuleToken(item); - addToCurrent(newRule, newRule); - // Don't shift current - currentRule = newRule.parent; - } - - private void addToCurrent(JSGFRule newRule, JSGFRule topRule) { - - if (newRule == null) - return; - - if (currentRule == null) { - currentRule = newRule; - return; - } - - if (currentRule instanceof JSGFRuleSequence) { - JSGFRuleSequence ruleSequence = (JSGFRuleSequence) currentRule; - ruleSequence.append(topRule); - newRule.parent = currentRule; - currentRule = newRule; - } else if (currentRule instanceof JSGFRuleAlternatives) { - JSGFRuleAlternatives ruleAlternatives = (JSGFRuleAlternatives) currentRule; - ruleAlternatives.append(topRule); - newRule.parent = currentRule; - currentRule = newRule; - } - } - - - @Override - public void endElement(String uri, String localName, String qName) throws SAXParseException { - logger.fine ("Ending element " + qName); - - if (qName.equals("item") || qName.equals("one-of") || qName.equals("rule")) - currentRule = currentRule.parent; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/JSGFGrammar.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/JSGFGrammar.java deleted file mode 100755 index ba736962..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/JSGFGrammar.java +++ /dev/null @@ -1,869 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.jsgf; - -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; - -import edu.cmu.sphinx.jsgf.parser.JSGFParser; -import edu.cmu.sphinx.jsgf.rule.*; -import edu.cmu.sphinx.linguist.dictionary.Dictionary; -import edu.cmu.sphinx.linguist.language.grammar.Grammar; -import edu.cmu.sphinx.linguist.language.grammar.GrammarNode; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.props.ConfigurationManagerUtils; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4String; - -/** - *

    Defines a BNF-style grammar based on JSGF grammar rules in a file.

    - * - * - * The Java Speech Grammar Format (JSGF) is a BNF-style, platform-independent, - * and vendor-independent textual representation of grammars for use in speech - * recognition. It is used by the Java Speech API - * (JSAPI) . - * - * Here we only intend to give a couple of examples of grammars written in JSGF, - * so that you can quickly learn to write your own grammars. For more examples - * and a complete specification of JSGF, go to - * - * - * http://java.sun.com/products/java-media/speech/forDevelopers/JSGF/ . - * - * - *

    Example 1: "Hello World" in JSGF

    - * - * The example below shows how a JSGF grammar that generates the sentences - * "Hello World": - * - *
    - *  #JSGF V1.0
    - *  public <helloWorld> = Hello World;
    - * 
    - * - * Figure 1: Hello grammar that generates the sentences "Hello World". - *

    - * - * The above grammar is saved in a file called "hello.gram". It defines a public - * grammar rule called "helloWorld". In order for this grammar rule to be - * publicly accessible, we must be declared it "public". Non-public grammar - * rules are not visible outside of the grammar file. - * - * The location of the grammar file(s) is(are) defined by the - * {@link #PROP_BASE_GRAMMAR_URL baseGrammarURL}property. Since all JSGF grammar - * files end with ".gram", it will automatically search all such files at the - * given URL for the grammar. The name of the grammar to search for is specified - * by {@link #PROP_GRAMMAR_NAME grammarName}. In this example, the grammar name - * is "helloWorld". - * - *

    Example 2: Command Grammar in JSGF

    - * - * This examples shows a grammar that generates basic control commands like - * "move a menu thanks please", "close file", - * "oh mighty computer please kindly delete menu thanks". It is the same as one - * of the command and control examples in the JSGF specification . It is considerably more complex than the previous - * example. It defines the public grammar called "basicCmd". - * - *
    - *  #JSGF V1.0
    - *  public <basicCmd> = <startPolite> <command> <endPolite>;
    - *  <command> = <action> <object>;
    - *  <action> = /10/ open |/2/ close |/1/ delete |/1/ move;
    - *  <object> = [the | a] (window | file | menu);
    - *  <startPolite> = (please | kindly | could you | oh mighty computer) *;
    - *  <endPolite> = [ please | thanks | thank you ];
    - * 
    - * - * Figure 2: Command grammar that generates simple control commands. - *

    - * - * The features of JSGF that are shown in this example includes: - *

      - *
    • using other grammar rules within a grammar rule. - *
    • the OR "|" operator. - *
    • the grouping "(...)" operator. - *
    • the optional grouping "[...]" operator. - *
    • the zero-or-many "*" (called Kleene star) operator. - *
    • a probability (e.g., "open" is more likely than the others). - *
    - * - *

    From JSGF to Grammar Graph

    - * - * After the JSGF grammar is read in, it is converted to a graph of words - * representing the grammar. Lets call this the grammar graph. It is from this - * grammar graph that the eventual search structure used for speech recognition - * is built. Below, we show the grammar graphs created from the above JSGF - * grammars. The nodes "<sil>" means "silence". - * - *

    - * Hello world
    - * - * Figure 3: Grammar graph created from the Hello World grammar. - *

    - * Command grammar
    - * - * Figure 4: Grammar graph created from the Command grammar. - * - *

    Limitations

    - * - * There is a known limitation with the current JSGF support. Grammars that - * contain non-speech loops currently cause the recognizer to hang. - *

    - * For example, in the following grammar - * - *

    - *  #JSGF V1.0
    - *  grammar jsgf.nastygram;
    - *  public <nasty> = I saw a ((cat* | dog* | mouse*)+)+;
    - * 
    - * - * the production: ((cat* | dog* | mouse*)+)+ can result in a continuous loop, - * since (cat* | dog* | mouse*) can represent no speech (i.e. zero cats, dogs - * and mice), this is equivalent to ()+. To avoid this problem, the grammar - * writer should ensure that there are no rules that could possibly match no - * speech within a plus operator or kleene star operator. - * - *

    Dynamic grammar behavior

    It is possible to modify the grammar of a - * running application. Some rules and notes: - *
      - *
    • Unlike a JSAPI recognizer, the JSGF Grammar only maintains one Rule - * Grammar. This restriction may be relaxed in the future. - *
    • The grammar should not be modified while a recognition is in process - *
    • The call to JSGFGrammar.loadJSGF will load in a completely new grammar, - * tossing any old grammars or changes. No call to commitChanges is necessary - * (although such a call would be harmless in this situation). - *
    • RuleGrammars can be modified via calls to RuleGrammar.setEnabled and - * RuleGrammar.setRule). In order for these changes to take place, - * JSGFGrammar.commitChanges must be called after all grammar changes have been - * made. - *
    - * - *

    Implementation Notes

    - *
      - *
    1. All internal probabilities are maintained in LogMath log base. - *
    - */ -public class JSGFGrammar extends Grammar { - - /** The property that defines the location of the JSGF grammar file. */ - @S4String - public final static String PROP_BASE_GRAMMAR_URL = "grammarLocation"; - - /** The property that defines the location of the JSGF grammar file. */ - @S4String(defaultValue = "default.gram") - public final static String PROP_GRAMMAR_NAME = "grammarName"; - - // --------------------- - // Configurable data - // --------------------- - private JSGFRuleGrammar ruleGrammar; - protected JSGFRuleGrammarManager manager; - protected RuleStack ruleStack; - private String grammarName; - protected URL baseURL; - private LogMath logMath; - - protected boolean loadGrammar = true; - protected GrammarNode firstNode; - protected Logger logger; - - public JSGFGrammar(String location, String grammarName, - boolean showGrammar, boolean optimizeGrammar, - boolean addSilenceWords, boolean addFillerWords, - Dictionary dictionary) throws MalformedURLException, - ClassNotFoundException { - this(ConfigurationManagerUtils.resourceToURL(location), - grammarName, showGrammar, optimizeGrammar, addSilenceWords, - addFillerWords, dictionary); - } - - public JSGFGrammar(URL baseURL, String grammarName, - boolean showGrammar, boolean optimizeGrammar, - boolean addSilenceWords, boolean addFillerWords, - Dictionary dictionary) { - super(showGrammar, optimizeGrammar, addSilenceWords, addFillerWords, - dictionary); - logMath = LogMath.getLogMath(); - this.baseURL = baseURL; - this.grammarName = grammarName; - loadGrammar = true; - logger = Logger.getLogger(getClass().getName()); - } - - public JSGFGrammar() { - - } - - /* - * (non-Javadoc) - * - * @see - * edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util - * .props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - baseURL = ConfigurationManagerUtils.getResource(PROP_BASE_GRAMMAR_URL, - ps); - logger = ps.getLogger(); - grammarName = ps.getString(PROP_GRAMMAR_NAME); - loadGrammar = true; - } - - /** - * Returns the RuleGrammar of this JSGFGrammar. - * - * @return the RuleGrammar - */ - public JSGFRuleGrammar getRuleGrammar() { - return ruleGrammar; - } - - /** - * Returns manager used to load grammars - * - * @return manager with loaded grammars - */ - public JSGFRuleGrammarManager getGrammarManager() { - if (manager == null) - manager = new JSGFRuleGrammarManager(); - return manager; - } - - /** - * Sets the URL context of the JSGF grammars. - * - * @param url - * the URL context of the grammars - */ - public void setBaseURL(URL url) { - baseURL = url; - } - - /** @return the name of this grammar. */ - public String getGrammarName() { - return grammarName; - } - - /** - * The JSGF grammar specified by grammarName will be loaded from the base - * URL (tossing out any previously loaded grammars) - * - * @param grammarName - * the name of the grammar - * @throws IOException - * if an error occurs while loading or compiling the grammar - * @throws JSGFGrammarException - * other grammar exception - * @throws JSGFGrammarParseException - * failed to parse grammar file - */ - public void loadJSGF(String grammarName) throws IOException, - JSGFGrammarParseException, JSGFGrammarException { - this.grammarName = grammarName; - loadGrammar = true; - commitChanges(); - } - - /** - * Creates the grammar. - * - * @return the initial node of the Grammar - */ - @Override - protected GrammarNode createGrammar() throws IOException { - try { - commitChanges(); - } catch (JSGFGrammarException e) { - throw new IOException(e); - } catch (JSGFGrammarParseException e) { - throw new IOException(e); - } - return firstNode; - } - - /** - * Returns the initial node for the grammar - * - * @return the initial grammar node - */ - @Override - public GrammarNode getInitialNode() { - return firstNode; - } - - /** - * Parses the given Rule into a network of GrammarNodes. - * - * @param rule - * the Rule to parse - * @return a grammar graph - * @throws JSGFGrammarException exception during parse - */ - protected GrammarGraph processRule(JSGFRule rule) throws JSGFGrammarException { - GrammarGraph result; - - if (rule != null) { - logger.fine("parseRule: " + rule); - } - - if (rule instanceof JSGFRuleAlternatives) { - result = processRuleAlternatives((JSGFRuleAlternatives) rule); - } else if (rule instanceof JSGFRuleCount) { - result = processRuleCount((JSGFRuleCount) rule); - } else if (rule instanceof JSGFRuleName) { - result = processRuleName((JSGFRuleName) rule); - } else if (rule instanceof JSGFRuleSequence) { - result = processRuleSequence((JSGFRuleSequence) rule); - } else if (rule instanceof JSGFRuleTag) { - result = processRuleTag((JSGFRuleTag) rule); - } else if (rule instanceof JSGFRuleToken) { - result = processRuleToken((JSGFRuleToken) rule); - } else { - throw new IllegalArgumentException("Unsupported Rule type: " + rule); - } - return result; - } - - /** - * Parses the given RuleName into a network of GrammarNodes. - * - * @param initialRuleName - * the RuleName rule to parse - * @return a grammar graph - */ - private GrammarGraph processRuleName(JSGFRuleName initialRuleName) - throws JSGFGrammarException { - logger.fine("parseRuleName: " + initialRuleName); - GrammarGraph result = ruleStack.contains(initialRuleName.getRuleName()); - - if (result != null) { // its a recursive call - return result; - } else { - result = new GrammarGraph(); - ruleStack.push(initialRuleName.getRuleName(), result); - } - JSGFRuleName ruleName = ruleGrammar.resolve(initialRuleName); - - if (ruleName == JSGFRuleName.NULL) { - result.getStartNode().add(result.getEndNode(), 0.0f); - } else if (ruleName == JSGFRuleName.VOID) { - // no connection for void - } else { - if (ruleName == null) { - throw new JSGFGrammarException("Can't resolve " - + initialRuleName + " g " - + initialRuleName.getFullGrammarName()); - } - JSGFRuleGrammar rg = manager.retrieveGrammar(ruleName - .getFullGrammarName()); - if (rg == null) { - throw new JSGFGrammarException("Can't resolve grammar name " - + ruleName.getFullGrammarName()); - } - - JSGFRule rule = rg.getRule(ruleName.getSimpleRuleName()); - if (rule == null) { - throw new JSGFGrammarException("Can't resolve rule: " - + ruleName.getRuleName()); - } - GrammarGraph ruleResult = processRule(rule); - if (result != ruleResult) { - result.getStartNode().add(ruleResult.getStartNode(), 0.0f); - ruleResult.getEndNode().add(result.getEndNode(), 0.0f); - } - } - ruleStack.pop(); - return result; - } - - /** - * Parses the given RuleCount into a network of GrammarNodes. - * - * @param ruleCount - * the RuleCount object to parse - * @return a grammar graph - */ - private GrammarGraph processRuleCount(JSGFRuleCount ruleCount) - throws JSGFGrammarException { - logger.fine("parseRuleCount: " + ruleCount); - GrammarGraph result = new GrammarGraph(); - int count = ruleCount.getCount(); - GrammarGraph newNodes = processRule(ruleCount.getRule()); - - result.getStartNode().add(newNodes.getStartNode(), 0.0f); - newNodes.getEndNode().add(result.getEndNode(), 0.0f); - - // if this is optional, add a bypass arc - - if (count == JSGFRuleCount.ZERO_OR_MORE - || count == JSGFRuleCount.OPTIONAL) { - result.getStartNode().add(result.getEndNode(), 0.0f); - } - - // if this can possibly occur more than once, add a loopback - - if (count == JSGFRuleCount.ONCE_OR_MORE - || count == JSGFRuleCount.ZERO_OR_MORE) { - newNodes.getEndNode().add(newNodes.getStartNode(), 0.0f); - } - return result; - } - - /** - * Parses the given RuleAlternatives into a network of GrammarNodes. - * - * @param ruleAlternatives - * the RuleAlternatives to parse - * @return a grammar graph - */ - private GrammarGraph processRuleAlternatives( - JSGFRuleAlternatives ruleAlternatives) throws JSGFGrammarException { - logger.fine("parseRuleAlternatives: " + ruleAlternatives); - GrammarGraph result = new GrammarGraph(); - - List rules = ruleAlternatives.getRules(); - List weights = getNormalizedWeights(ruleAlternatives.getWeights()); - - // expand each alternative, and connect them in parallel - for (int i = 0; i < rules.size(); i++) { - JSGFRule rule = rules.get(i); - float weight = 0.0f; - if (weights != null) { - weight = weights.get(i); - } - logger.fine("Alternative: " + rule); - GrammarGraph newNodes = processRule(rule); - result.getStartNode().add(newNodes.getStartNode(), weight); - newNodes.getEndNode().add(result.getEndNode(), 0.0f); - } - - return result; - } - - /** - * Normalize the weights. The weights should always be zero or greater. We - * need to convert the weights to a log probability. - * - * @param weights - * the weights to normalize - */ - private List getNormalizedWeights(List weights) { - - if (weights == null) { - return null; - } - - double sum = 0.0; - for (float weight : weights) { - if (weight < 0) { - throw new IllegalArgumentException("Negative weight " + weight); - } - sum += weight; - } - - List normalized = new LinkedList(weights); - - for (int i = 0; i < weights.size(); i++) { - if (sum == 0.0f) { - normalized.set(i, LogMath.LOG_ZERO); - } else { - normalized.set(i, logMath.linearToLog(weights.get(i) / sum)); - } - } - return normalized; - } - - /** - * Parses the given RuleSequence into a network of GrammarNodes. - * - * @param ruleSequence - * the RuleSequence to parse - * @return the first and last GrammarNodes of the network - */ - private GrammarGraph processRuleSequence(JSGFRuleSequence ruleSequence) - throws JSGFGrammarException { - - GrammarNode startNode = null; - GrammarNode endNode = null; - logger.fine("parseRuleSequence: " + ruleSequence); - - List rules = ruleSequence.getRules(); - - GrammarNode lastGrammarNode = null; - - // expand and connect each rule in the sequence serially - for (int i = 0; i < rules.size(); i++) { - JSGFRule rule = rules.get(i); - GrammarGraph newNodes = processRule(rule); - - // first node - if (i == 0) { - startNode = newNodes.getStartNode(); - } - - // last node - if (i == (rules.size() - 1)) { - endNode = newNodes.getEndNode(); - } - - if (i > 0) { - lastGrammarNode.add(newNodes.getStartNode(), 0.0f); - } - lastGrammarNode = newNodes.getEndNode(); - } - - return new GrammarGraph(startNode, endNode); - } - - /** - * Parses the given RuleTag into a network GrammarNodes. - * - * @param ruleTag - * the RuleTag to parse - * @return the first and last GrammarNodes of the network - */ - private GrammarGraph processRuleTag(JSGFRuleTag ruleTag) - throws JSGFGrammarException { - logger.fine("parseRuleTag: " + ruleTag); - JSGFRule rule = ruleTag.getRule(); - return processRule(rule); - } - - /** - * Creates a GrammarNode with the word in the given RuleToken. - * - * @param ruleToken - * the RuleToken that contains the word - * @return a GrammarNode with the word in the given RuleToken - */ - private GrammarGraph processRuleToken(JSGFRuleToken ruleToken) { - - GrammarNode node = createGrammarNode(ruleToken.getText()); - return new GrammarGraph(node, node); - } - - // /////////////////////////////////////////////////////////////////// - // Loading part - // ////////////////////////////////////////////////////////////////// - - private static URL grammarNameToURL(URL baseURL, String grammarName) - throws MalformedURLException { - - // Convert each period in the grammar name to a slash "/" - // Append a slash and the converted grammar name to the base URL - // Append the ".gram" suffix - grammarName = grammarName.replace('.', '/'); - StringBuilder sb = new StringBuilder(); - if (baseURL != null) { - sb.append(baseURL); - if (sb.charAt(sb.length() - 1) != '/') - sb.append('/'); - } - sb.append(grammarName).append(".gram"); - String urlstr = sb.toString(); - - URL grammarURL = null; - try { - grammarURL = new URL(urlstr); - } catch (MalformedURLException me) { - grammarURL = ClassLoader.getSystemResource(urlstr); - if (grammarURL == null) - throw new MalformedURLException(urlstr); - } - - return grammarURL; - } - - /** - * Commit changes to all loaded grammars and all changes of grammar since - * the last commitChange - * - * @throws JSGFGrammarParseException parse exception occurred - * @throws JSGFGrammarException other exception occurred - * @throws IOException exception during IO - */ - public void commitChanges() throws IOException, JSGFGrammarParseException, - JSGFGrammarException { - try { - if (loadGrammar) { - if (manager == null) - getGrammarManager(); - ruleGrammar = loadNamedGrammar(grammarName); - loadImports(ruleGrammar); - loadGrammar = false; - } - - manager.linkGrammars(); - ruleStack = new RuleStack(); - newGrammar(); - - firstNode = createGrammarNode(""); - GrammarNode finalNode = createGrammarNode(""); - finalNode.setFinalNode(true); - - // go through each rule and create a network of GrammarNodes - // for each of them - - for (String ruleName : ruleGrammar.getRuleNames()) { - if (ruleGrammar.isRulePublic(ruleName)) { - String fullName = getFullRuleName(ruleName); - GrammarGraph publicRuleGraph = new GrammarGraph(); - ruleStack.push(fullName, publicRuleGraph); - JSGFRule rule = ruleGrammar.getRule(ruleName); - GrammarGraph graph = processRule(rule); - ruleStack.pop(); - - firstNode.add(publicRuleGraph.getStartNode(), 0.0f); - publicRuleGraph.getEndNode().add(finalNode, 0.0f); - publicRuleGraph.getStartNode().add(graph.getStartNode(), - 0.0f); - graph.getEndNode().add(publicRuleGraph.getEndNode(), 0.0f); - } - } - postProcessGrammar(); - if (logger.isLoggable(Level.FINEST)) { - dumpGrammar(); - } - } catch (MalformedURLException mue) { - throw new IOException("bad base grammar URL " + baseURL + ' ' + mue); - } - } - - /** - * Load grammars imported by the specified RuleGrammar if they are not - * already loaded. - * - * @throws JSGFGrammarParseException - */ - private void loadImports(JSGFRuleGrammar grammar) throws IOException, - JSGFGrammarParseException { - - for (JSGFRuleName ruleName : grammar.imports) { - // System.out.println ("Checking import " + ruleName); - String grammarName = ruleName.getFullGrammarName(); - JSGFRuleGrammar importedGrammar = getNamedRuleGrammar(grammarName); - - if (importedGrammar == null) { - // System.out.println ("Grammar " + grammarName + - // " not found. Loading."); - importedGrammar = loadNamedGrammar(ruleName - .getFullGrammarName()); - } - if (importedGrammar != null) { - loadImports(importedGrammar); - } - } - loadFullQualifiedRules(grammar); - } - - private JSGFRuleGrammar getNamedRuleGrammar(String grammarName) { - return manager.retrieveGrammar(grammarName); - } - - /** - * Load named grammar from import rule - * - * @param grammarName - * @return already loaded grammar - * @throws JSGFGrammarParseException - * @throws IOException - */ - private JSGFRuleGrammar loadNamedGrammar(String grammarName) - throws JSGFGrammarParseException, IOException { - - URL url = grammarNameToURL(baseURL, grammarName); - JSGFRuleGrammar ruleGrammar = JSGFParser.newGrammarFromJSGF(url, - new JSGFRuleGrammarFactory(manager)); - ruleGrammar.setEnabled(true); - - return ruleGrammar; - } - - /** - * Load grammars imported by a fully qualified Rule Token if they are not - * already loaded. - * - * @param grammar - * @throws IOException - * @throws GrammarException - * @throws JSGFGrammarParseException - */ - private void loadFullQualifiedRules(JSGFRuleGrammar grammar) - throws IOException, JSGFGrammarParseException { - - // Go through every rule - for (String ruleName : grammar.getRuleNames()) { - String rule = grammar.getRule(ruleName).toString(); - // check for rule-Tokens - int index = 0; - while (index < rule.length()) { - index = rule.indexOf('<', index); - if (index < 0) { - break; - } - // Extract rule name - JSGFRuleName extractedRuleName = new JSGFRuleName(rule - .substring(index + 1, rule.indexOf('>', index + 1)) - .trim()); - index = rule.indexOf('>', index) + 1; - - // Check for full qualified rule name - if (extractedRuleName.getFullGrammarName() != null) { - String grammarName = extractedRuleName.getFullGrammarName(); - JSGFRuleGrammar importedGrammar = getNamedRuleGrammar(grammarName); - if (importedGrammar == null) { - importedGrammar = loadNamedGrammar(grammarName); - } - if (importedGrammar != null) { - loadImports(importedGrammar); - } - } - } - } - } - - /** - * Gets the fully resolved rule name - * - * @param ruleName - * the partial name - * @return the fully resolved name - * @throws JSGFGrammarException - */ - private String getFullRuleName(String ruleName) throws JSGFGrammarException { - JSGFRuleName rname = ruleGrammar.resolve(new JSGFRuleName(ruleName)); - return rname.getRuleName(); - } - - /** Dumps interesting things about this grammar */ - protected void dumpGrammar() { - System.out.println("Imported rules { "); - - for (JSGFRuleName imp : ruleGrammar.getImports()) { - System.out.println(" Import " + imp.getRuleName()); - } - System.out.println("}"); - - System.out.println("Rulenames { "); - - for (String name : ruleGrammar.getRuleNames()) { - System.out.println(" Name " + name); - } - System.out.println("}"); - } - - /** - * Represents a graph of grammar nodes. A grammar graph has a single - * starting node and a single ending node - */ - class GrammarGraph { - - private GrammarNode startNode; - private GrammarNode endNode; - - /** - * Creates a grammar graph with the given nodes - * - * @param startNode - * the staring node of the graph - * @param endNode - * the ending node of the graph - */ - GrammarGraph(GrammarNode startNode, GrammarNode endNode) { - this.startNode = startNode; - this.endNode = endNode; - } - - /** Creates a graph with non-word nodes for the start and ending nodes */ - GrammarGraph() { - startNode = createGrammarNode(false); - endNode = createGrammarNode(false); - } - - /** - * Gets the starting node - * - * @return the starting node for the graph - */ - GrammarNode getStartNode() { - return startNode; - } - - /** - * Gets the ending node - * - * @return the ending node for the graph - */ - GrammarNode getEndNode() { - return endNode; - } - } - - /** Manages a stack of grammar graphs that can be accessed by grammar name */ - class RuleStack { - - private List stack; - private HashMap map; - - /** Creates a name stack */ - public RuleStack() { - clear(); - } - - /** Pushes the grammar graph on the stack */ - public void push(String name, GrammarGraph g) { - stack.add(0, name); - map.put(name, g); - } - - /** remove the top graph on the stack */ - public void pop() { - map.remove(stack.remove(0)); - } - - /** - * Checks to see if the stack contains a graph with the given name - * - * @param name - * the graph name - * @return the grammar graph associated with the name if found, - * otherwise null - */ - public GrammarGraph contains(String name) { - if (stack.contains(name)) { - return map.get(name); - } else { - return null; - } - } - - /** Clears this name stack */ - public void clear() { - stack = new LinkedList(); - map = new HashMap(); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/JSGFGrammarException.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/JSGFGrammarException.java deleted file mode 100755 index 345d6ca0..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/JSGFGrammarException.java +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Copyright 1998-2009 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.jsgf; - -@SuppressWarnings("serial") -public class JSGFGrammarException extends Exception { - - public JSGFGrammarException(String message) { - super(message); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/JSGFGrammarParseException.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/JSGFGrammarParseException.java deleted file mode 100755 index cf25008d..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/JSGFGrammarParseException.java +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Copyright 1998-2003 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.jsgf; - -@SuppressWarnings("serial") -public class JSGFGrammarParseException extends Exception -{ - public int lineNumber; - public int charNumber; - public String message; - public String details; - - public JSGFGrammarParseException (int lineNumber, int charNumber, String message, String details) { - this.lineNumber = lineNumber; - this.charNumber = charNumber; - this.message = message; - this.details = details; - } - public JSGFGrammarParseException (String message) { - this.message = message; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/JSGFRuleGrammar.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/JSGFRuleGrammar.java deleted file mode 100755 index c226fec8..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/JSGFRuleGrammar.java +++ /dev/null @@ -1,648 +0,0 @@ -/** - * Copyright 1998-2003 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.jsgf; - -import java.io.File; -import java.io.IOException; -import java.io.PrintStream; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Set; - -import edu.cmu.sphinx.jsgf.rule.JSGFRule; -import edu.cmu.sphinx.jsgf.rule.JSGFRuleAlternatives; -import edu.cmu.sphinx.jsgf.rule.JSGFRuleCount; -import edu.cmu.sphinx.jsgf.rule.JSGFRuleName; -import edu.cmu.sphinx.jsgf.rule.JSGFRuleSequence; -import edu.cmu.sphinx.jsgf.rule.JSGFRuleTag; -import edu.cmu.sphinx.jsgf.rule.JSGFRuleToken; - -/** - * @author Paul Lamere - * @author Peter Wolf - * @author Francisco Aguilera - */ -public class JSGFRuleGrammar { - - private static final String LINE_SEPARATOR = System.getProperty("line.separator"); - - protected final Map rules = new HashMap(); - protected final List imports = new ArrayList(); - protected final List importedRules = new ArrayList(); - - protected final Map> ruleTags = new HashMap>(); - - private String name; - private JSGFRuleGrammarManager manager; - - /** Storage for documentation comments for rules for JSGF doc. */ - Properties ruleDocComments = new Properties(); - - /** Storage for documentation comments for imports for JSGF doc. */ - Properties importDocComments = new Properties(); - - /** Storage for documentation comments for the grammar for JSGF doc. */ - String grammarDocComment; - - /* Holds the state of the rule in grammar */ - class JSGFRuleState { - - public boolean isPublic; - public boolean isEnabled; - public JSGFRule rule; - public ArrayList samples; - public boolean isChanged; - - public JSGFRuleState(JSGFRule rule, boolean isEnabled, boolean isPublic) { - this.rule = rule; - this.isPublic = isPublic; - this.isEnabled = isEnabled; - this.samples = new ArrayList(); - } - } - - /** - * Create a new RuleGrammar - * - * @param name - * the name of this Grammar. - * @param manager - * the manager for the created Grammars - */ - public JSGFRuleGrammar(String name, JSGFRuleGrammarManager manager) { - this.name = name; - this.manager = manager; - } - - /** Add the Grammar comment. - * @param comment text for comment - **/ - public void addGrammarDocComment(String comment) { - grammarDocComment = comment; - } - - /** - * Import all rules or a specified rule from another grammar. - * - * @param importName - * the name of the rule(s) to import. - */ - public void addImport(JSGFRuleName importName) { - if (!imports.contains(importName)) { - imports.add(importName); - } - } - - /** Add a new import comment. - * @param imp import name - * @param comment comment to add - **/ - public void addImportDocComment(JSGFRuleName imp, String comment) { - importDocComments.put(imp.toString(), comment); - } - - /** Add a new RuleGrammar comment. - * @param rname rule doc name - * @param comment comment to add - **/ - public void addRuleDocComment(String rname, String comment) { - ruleDocComments.put(rname, comment); - } - - /** - * add a sample sentence to the list of sample sentences that go with the - * specified rule - * @param ruleName name of the rule - * @param sample sample sentence - */ - public void addSampleSentence(String ruleName, String sample) { - JSGFRuleState state = rules.get(ruleName); - if (state == null) { - return; - } - state.samples.add(sample); - } - - /** - * Delete a rule from the grammar. - * - * @param ruleName - * the name of the rule. - */ - public void deleteRule(String ruleName) throws IllegalArgumentException { - rules.remove(getKnownRule(ruleName).ruleName); - } - - /** Retrieve the Grammar comment. - * @return comment - **/ - public String getGrammarDocComment() { - return grammarDocComment; - } - - /** Retrieve an import comment. - * @param imp rule name - * @return stored comment - **/ - public String getImportDocComment(JSGFRuleName imp) { - return importDocComments.getProperty(imp.toString(), null); - } - - /** - * Returns the jsgf tags associated to the given rule. Cf. - * jsgf-specification for details. - * @param ruleName name of the rule - * @return list of tags - */ - public Collection getJSGFTags(String ruleName) { - return ruleTags.get(ruleName); - } - - /** - * Gets the Rule with the given name after it has been stripped, or throws - * an Exception if it is unknown. - * @param ruleName name of the rule - * @return rule object - */ - private JSGFRule getKnownRule(String ruleName) { - JSGFRuleState state = rules.get(ruleName); - if (state == null) { - throw new IllegalArgumentException("Unknown Rule: " + ruleName); - } - return state.rule; - } - - public String getName() { - return name; - } - - /** - * Return the data structure for the named rule. - * - * @param ruleName - * the name of the rule. - * @return rule object. - */ - public JSGFRule getRule(String ruleName) { - JSGFRuleState state = rules.get(ruleName); - if (state == null) { - return null; - } - return state.rule; - } - - /** Retrieve a RuleGrammar comment. - * @param rname name of the comment - * @return comment text - **/ - public String getRuleDocComment(String rname) { - return ruleDocComments.getProperty(rname, null); - } - - /** - * Test whether the specified rule is public. - * - * @param ruleName - * the name of the rule. - * @return if rule is public - */ - public boolean isRulePublic(String ruleName) throws IllegalArgumentException { - JSGFRuleState state = rules.get(ruleName); - if (state == null) { - return false; - } - return state.isPublic; - } - - /** List the current imports. - * @return the list of rule names for imports - **/ - public List getImports() { - return imports; - } - - /** List the names of all rules define in this Grammar. - * @return the list of rule names. - **/ - public Set getRuleNames() { - return rules.keySet(); - } - - /** - * Remove an import. - * - * @param importName - * the name of the rule(s) to remove. - */ - public void removeImport(JSGFRuleName importName) { - if (imports.contains(importName)) { - imports.remove(importName); - } - } - - /** - * Resolve a simple or qualified rule name as a full rule name. - * - * @param ruleName - * the name of the rule. - * @return rule name object - * @throws JSGFGrammarException an exception occured - */ - public JSGFRuleName resolve(JSGFRuleName ruleName) throws JSGFGrammarException { - // System.out.println ("Resolving " + ruleName); - JSGFRuleName rn = new JSGFRuleName(ruleName.getRuleName()); - - String simpleName = rn.getSimpleRuleName(); - String grammarName = rn.getSimpleGrammarName(); - String packageName = rn.getPackageName(); - String fullGrammarName = rn.getFullGrammarName(); - - // Check for badly formed RuleName - if (packageName != null && grammarName == null) { - throw new JSGFGrammarException("Error: badly formed rulename " + rn); - } - - if (ruleName.getSimpleRuleName().equals("NULL")) { - return JSGFRuleName.NULL; - } - - if (ruleName.getSimpleRuleName().equals("VOID")) { - return JSGFRuleName.VOID; - } - - // Check simple case: a local rule reference - if (fullGrammarName == null && this.getRule(simpleName) != null) { - return new JSGFRuleName(name + '.' + simpleName); - } - - // Check for fully-qualified reference - if (fullGrammarName != null) { - JSGFRuleGrammar g = manager.retrieveGrammar(fullGrammarName); - if (g != null) { - if (g.getRule(simpleName) != null) { - // we have a successful resolution - return new JSGFRuleName(fullGrammarName + '.' + simpleName); - } - } - } - - // Collect all matching imports into a list. After trying to - // match rn to each import statement the vec will have - // size()=0 if rn is unresolvable - // size()=1 if rn is properly resolvable - // size()>1 if rn is an ambiguous reference - List matches = new ArrayList(); - - // Get list of imports - // Add local grammar to simply the case of checking for - // a qualified or fully-qualified local reference. - List imports = new ArrayList(this.imports); - imports.add(new JSGFRuleName(name + ".*")); - - // Check each import statement for a possible match - for (JSGFRuleName importName : imports) { - // TO-DO: update for JSAPI 1.0 - String importSimpleName = importName.getSimpleRuleName(); - String importGrammarName = importName.getSimpleGrammarName(); - String importFullGrammarName = importName.getFullGrammarName(); - - // Check for badly formed import name - if (importFullGrammarName == null) { - throw new JSGFGrammarException("Error: badly formed import " + ruleName); - } - - // Get the imported grammar - JSGFRuleGrammar gref = manager.retrieveGrammar(importFullGrammarName); - if (gref == null) { - System.out.println("Warning: import of unknown grammar " + ruleName + " in " + name); - continue; - } - - // If import includes simpleName, test that it really exists - if (!importSimpleName.equals("*") && gref.getRule(importSimpleName) == null) { - System.out.println("Warning: import of undefined rule " + ruleName + " in " + name); - continue; - } - - // Check for fully-qualified or qualified reference - if (importFullGrammarName.equals(fullGrammarName) || importGrammarName.equals(fullGrammarName)) { - // Know that either - // import matches - // OR - // import matches - // (ipkg may be null) - - if (importSimpleName.equals("*")) { - if (gref.getRule(simpleName) != null) { - // import matches - matches.add(new JSGFRuleName(importFullGrammarName + '.' + simpleName)); - } - continue; - } else { - // Now testing - // import against - // - if (importSimpleName.equals(simpleName)) { - // import exact match for - // - matches.add(new JSGFRuleName(importFullGrammarName + '.' + simpleName)); - } - continue; - } - } - - // If we get here and rulename is qualified or fully-qualified - // then the match failed - try the next import statement - if (fullGrammarName != null) { - continue; - } - - // Now test - // import against - - if (importSimpleName.equals("*")) { - if (gref.getRule(simpleName) != null) { - // import matches - matches.add(new JSGFRuleName(importFullGrammarName + '.' + simpleName)); - } - continue; - } - - // Finally test - // import against - - if (importSimpleName.equals(simpleName)) { - matches.add(new JSGFRuleName(importFullGrammarName + '.' + simpleName)); - continue; - } - } - - // The return behavior depends upon number of matches - switch (matches.size()) { - case 0: // Return null if rulename is unresolvable - return null; - case 1: // Return successfully - return matches.get(0); - default: // Throw exception if ambiguous reference - StringBuilder b = new StringBuilder(); - b.append("Warning: ambiguous reference ").append(rn).append(" in ").append(name).append(" to "); - for (JSGFRuleName tmp : matches) { - b.append(tmp).append(" and "); - } - b.setLength(b.length() - 5); - throw new JSGFGrammarException(b.toString()); - } - } - - /** Resolve and link up all rule references contained in all rules. - * @throws JSGFGrammarException an exception occured - **/ - public void resolveAllRules() throws JSGFGrammarException { - StringBuilder b = new StringBuilder(); - - // First make sure that all imports are resolvable - for (JSGFRuleName ruleName : imports) { - String grammarName = ruleName.getFullGrammarName(); - JSGFRuleGrammar GI = manager.retrieveGrammar(grammarName); - if (GI == null) { - b.append("Undefined grammar ").append(grammarName).append(" imported in ").append(name).append('\n'); - } - } - if (b.length() > 0) { - throw new JSGFGrammarException(b.toString()); - } - - for (JSGFRuleState state : rules.values()) { - resolveRule(state.rule); - } - } - - /** - * Resolve the given rule. - * - * @param r rule to resolve - * @throws JSGFGrammarException if something occurs - **/ - protected void resolveRule(JSGFRule r) throws JSGFGrammarException { - - if (r instanceof JSGFRuleToken) { - return; - } - - if (r instanceof JSGFRuleAlternatives) { - for (JSGFRule rule : ((JSGFRuleAlternatives) r).getRules()) { - resolveRule(rule); - } - return; - } - - if (r instanceof JSGFRuleSequence) { - for (JSGFRule rule : ((JSGFRuleSequence) r).getRules()) { - resolveRule(rule); - } - return; - } - - if (r instanceof JSGFRuleCount) { - resolveRule(((JSGFRuleCount) r).getRule()); - return; - } - - if (r instanceof JSGFRuleTag) { - JSGFRuleTag rt = (JSGFRuleTag) r; - - JSGFRule rule = rt.getRule(); - String ruleStr = rule.toString(); - - // add the tag the tag-table - Collection tags = ruleTags.get(ruleStr); - if (tags == null) { - tags = new HashSet(); - ruleTags.put(ruleStr, tags); - } - tags.add(rt.getTag()); - - resolveRule(rule); - return; - } - - if (r instanceof JSGFRuleName) { - JSGFRuleName rn = (JSGFRuleName) r; - JSGFRuleName resolved = resolve(rn); - - if (resolved == null) { - throw new JSGFGrammarException("Unresolvable rulename in grammar " + name + ": " + rn); - } else { - // TODO: This forces all rule names to be fully resolved. - // This should be changed. - rn.resolvedRuleName = resolved.getRuleName(); - rn.setRuleName(resolved.getRuleName()); - return; - } - } - - throw new JSGFGrammarException("Unknown rule type"); - } - - /** - * Set the enabled property of the Grammar. - * - * @param enabled - * the new desired state of the enabled property. - */ - public void setEnabled(boolean enabled) { - for (JSGFRuleState state : rules.values()) { - state.isEnabled = enabled; - } - } - - public boolean isEnabled(String ruleName) { - JSGFRuleState state = rules.get(ruleName); - if (state != null) { - return state.isEnabled; - } - return false; - } - - /** - * Set the enabled state of the listed rule. - * - * @param ruleName - * the name of the rule. - * @param enabled - * the new enabled state. - */ - public void setEnabled(String ruleName, boolean enabled) throws IllegalArgumentException { - JSGFRuleState state = rules.get(ruleName); - if (state.isEnabled != enabled) { - state.isEnabled = enabled; - } - } - - /** - * Set a rule in the grammar either by creating a new rule or updating an - * existing rule. - * - * @param ruleName - * the name of the rule. - * @param rule - * the definition of the rule. - * @param isPublic - * whether this rule is public or not. - */ - public void setRule(String ruleName, JSGFRule rule, boolean isPublic) throws NullPointerException, IllegalArgumentException { - JSGFRuleState state = new JSGFRuleState(rule, true, isPublic); - rules.put(ruleName, state); - } - - /** - * Returns a string containing the specification for this grammar. - * - * @return specification for this grammar. - */ - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("#JSGF V1.0;").append(LINE_SEPARATOR); - sb.append(LINE_SEPARATOR); - sb.append(formatComment(grammarDocComment)); - sb.append(LINE_SEPARATOR); - sb.append("grammar ").append(name).append(';').append(LINE_SEPARATOR); - sb.append(LINE_SEPARATOR); - // Set of comment keys (The import such comment belongs to). - Set docComments = importDocComments.keySet(); - for (int i = 0; i < imports.size(); i++) { - String curImport = '<' + imports.get(i).getRuleName() + '>'; - if (docComments.contains(curImport)) { - sb.append(formatComment((String) importDocComments.get(curImport))); - sb.append(LINE_SEPARATOR); - sb.append("import ").append(curImport + ';').append(LINE_SEPARATOR); - sb.append(LINE_SEPARATOR); - } - } - docComments = ruleDocComments.keySet(); - for (Map.Entry entry : rules.entrySet()) { - Object rule = entry.getKey(); - if ((docComments.size() > 0) && docComments.contains(rule)) { - sb.append(formatComment((String) ruleDocComments.get(rule))).append(LINE_SEPARATOR); - } - JSGFRuleState state = entry.getValue(); - if (state.isPublic) { - sb.append("public "); - } - sb.append('<').append(rule).append("> = ").append(state.rule).append(';').append(LINE_SEPARATOR); - sb.append(LINE_SEPARATOR); - } - return sb.toString(); - } - - /** - * Expands the given String comment into: A. a multi-line comment if the - * provided String contains any newline characters. B. a single-line comment - * if comment does not contain any newline characters. - * - * @param comment - * The String to expand into a multi or single line comment. - * @return If the provided string is not null, the multi or single line - * representation of the provided comment, otherwise an empty string - * (""). - */ - private String formatComment(String comment) { - StringBuilder sb = new StringBuilder(""); - if (comment == null) { - return sb.toString(); - } else if (java.util.regex.Pattern.compile("[\\n\\r\\f]+").matcher(comment).find()) { - String tokens[] = comment.split('[' + LINE_SEPARATOR + "]+"); - sb.append("/**").append(LINE_SEPARATOR); - sb.append(" *").append(tokens[0]).append(LINE_SEPARATOR); - for (int i = 1; i < tokens.length; i++) { - sb.append(" *").append(tokens[i]).append(LINE_SEPARATOR); - } - sb.append(" */"); - return sb.toString(); - } else { - return "//" + comment; - } - } - - /** - * This JSGFRule grammar will be saved to the file in the provided URL, - * Overwriting any contents in the provided file, or creating a new one if - * it does not exist. - * - * @param url - * The URL to save this JSGFRuleGrammar to. - * @throws URISyntaxException - * If there was a problem converting the given url to uri. - * @throws IOException - * if an error occurs while saving or compiling the grammar - */ - public void saveJSGF(URL url) throws URISyntaxException, IOException { - PrintStream out = new PrintStream(new File(url.toURI())); - out.print(toString()); - out.flush(); - out.close(); - } - - public boolean isRuleChanged(String ruleName) { - JSGFRuleState state = rules.get(ruleName); - return state.isChanged; - } - - public void setRuleChanged(String ruleName, boolean changed) { - JSGFRuleState state = rules.get(ruleName); - state.isChanged = changed; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/JSGFRuleGrammarFactory.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/JSGFRuleGrammarFactory.java deleted file mode 100755 index 1795fcd5..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/JSGFRuleGrammarFactory.java +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Copyright 1998-2009 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.jsgf; - -public class JSGFRuleGrammarFactory { - - JSGFRuleGrammarManager manager; - public JSGFRuleGrammarFactory (JSGFRuleGrammarManager manager) { - this.manager = manager; - } - - public JSGFRuleGrammar newGrammar(String name) { - - assert manager != null; - JSGFRuleGrammar grammar = new JSGFRuleGrammar(name, manager); - manager.storeGrammar(grammar); - return grammar; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/JSGFRuleGrammarManager.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/JSGFRuleGrammarManager.java deleted file mode 100755 index 8f8d1367..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/JSGFRuleGrammarManager.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * Copyright 1998-2009 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.jsgf; - -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -public class JSGFRuleGrammarManager { - protected Map grammars; - - public JSGFRuleGrammarManager () { - grammars = new HashMap(); - } - - public Collection grammars() { - return grammars.values(); - } - - public void remove(JSGFRuleGrammar grammar) { - String name = grammar.getName(); - grammars.remove(name); - } - - public void remove(String name) { - grammars.remove(name); - } - - /** Add a grammar to the grammar list. - * @param grammar to store - **/ - protected void storeGrammar(JSGFRuleGrammar grammar) { - grammars.put(grammar.getName(), grammar); - } - - /** Retrieve a grammar from the grammar list. - * @param name grammar name to load - * @return grammar object - */ - public JSGFRuleGrammar retrieveGrammar(String name) { - // System.out.println ("Looking for grammar " + name); - // for (String key : grammars.keySet()) { - // System.out.println (" " + key); - // } - return grammars.get(name); - } - - public void linkGrammars() throws JSGFGrammarException { - for (JSGFRuleGrammar grammar : grammars.values()) { - grammar.resolveAllRules(); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/JSGFParser.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/JSGFParser.java deleted file mode 100755 index 9d3a3dc0..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/JSGFParser.java +++ /dev/null @@ -1,1111 +0,0 @@ -/* Generated By:JavaCC: Do not edit this line. JSGFParser.java */ -package edu.cmu.sphinx.jsgf.parser; - -import java.io.BufferedInputStream; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.io.StringReader; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.StringTokenizer; - -import edu.cmu.sphinx.jsgf.rule.*; -import edu.cmu.sphinx.jsgf.JSGFRuleGrammar; -import edu.cmu.sphinx.jsgf.JSGFRuleGrammarFactory; -import edu.cmu.sphinx.jsgf.JSGFRuleGrammarManager; -import edu.cmu.sphinx.jsgf.JSGFGrammarParseException; - -@SuppressWarnings("all") -class JSGFEncoding { - public String version; - - public String encoding; - - public String locale; - - JSGFEncoding(String version, String encoding, String locale) { - this.version = version; - this.encoding = encoding; - this.locale = locale; - } -} - -public class JSGFParser implements JSGFParserConstants { - // For now we create one global parser, if needed JavaCC can be set - // to allow the creation of multiple parser instances - // - static final String version = "1.0"; - - static JSGFParser parser = null; - - // This main method simply checks the syntax of a jsgf Grammar - // - public static void main(String[] args) { - if (args.length == 0) { - System.out.println("JSGF Parser Version " + version + ": Reading from standard input . . ."); - parser = new JSGFParser(System.in); - } - else if (args.length > 0) { - System.out.println("JSGF Parser Version " + version + ": Reading from file " + args[0] + " . . ."); - try { - URL codeBase = null; - File f = new File("."); - String path = f.getAbsolutePath() + "/" + args[0]; - try { - codeBase = new URL("file:" + path); - } catch (MalformedURLException e) { - System.out.println("Could not get URL for current directory " + e); - return; - } - BufferedInputStream i = new BufferedInputStream(codeBase.openStream(), 256); - JSGFEncoding encoding = getJSGFEncoding(i); - Reader rdr; - if ((encoding != null) && (encoding.encoding != null)) { - System.out.println("Grammar Character Encoding \u005c"" + encoding.encoding + "\u005c""); - rdr = new InputStreamReader(i, encoding.encoding); - } else { - if (encoding == null) System.out.println("WARNING: Grammar missing self identifying header"); - rdr = new InputStreamReader(i); - } - parser = new JSGFParser(rdr); - } catch (Exception e) { - System.out.println("JSGF Parser Version " + version + ": File " + args[0] + " not found."); - return; - } - } else { - System.out.println("JSGF Parser Version " + version + ": Usage is one of:"); - System.out.println(" java JSGFParser < inputfile"); - System.out.println("OR"); - System.out.println(" java JSGFParser inputfile"); - return; - } - try { - parser.GrammarUnit(new JSGFRuleGrammarFactory (new JSGFRuleGrammarManager())); - System.out.println("JSGF Parser Version " + version + ": JSGF Grammar parsed successfully."); - } catch (ParseException e) { - System.out.println("JSGF Parser Version " + version + ": Encountered errors during parse." + e.getMessage()); - } - } - - public static JSGFRuleGrammar newGrammarFromJSGF(InputStream i, JSGFRuleGrammarFactory factory) throws JSGFGrammarParseException - { - JSGFRuleGrammar grammar = null; - if (parser == null) { - parser = new JSGFParser(i); - } else { - parser.ReInit(i); - } - try { - grammar = parser.GrammarUnit(factory); - return grammar; - } catch (ParseException e) { - Token etoken = e.currentToken; - JSGFGrammarParseException ge = new JSGFGrammarParseException(etoken.beginLine, etoken.beginColumn, "Grammar Error", e.getMessage()); - throw ge; - } - } - - public static JSGFRuleGrammar newGrammarFromJSGF(Reader i, JSGFRuleGrammarFactory factory) throws JSGFGrammarParseException - { - JSGFRuleGrammar grammar = null; - if (parser == null) { - parser = new JSGFParser(i); - } else { - parser.ReInit(i); - } - try { - grammar = parser.GrammarUnit(factory); - return grammar; - } catch (ParseException e) { - Token etoken = e.currentToken; - JSGFGrammarParseException ge = new JSGFGrammarParseException(etoken.beginLine, etoken.beginColumn, "Grammar Error", e.getMessage()); - throw ge; - } - } - - private static JSGFEncoding getJSGFEncoding(BufferedInputStream is) { - int i = 0; - byte[] b = new byte[2]; - byte[] c = new byte[80]; - is.mark(256); - /* read 2 bytes */ - try { - if (is.read(b, 0, 2) != 2) { - is.reset(); - return null; - } - if ((b[0] == 0x23) && (b[1] == 0x4A)) { - // UTF-8 - i = 0; - c[i++] = b[0]; - c[i++] = b[1]; - while (i < 80) { - if (is.read(b, 0, 1) != 1) { - is.reset(); - return null; - } - if ((b[0] == 0x0A) || (b[0] == 0x0D)) break; - c[i++] = b[0]; - } - } else if ((b[0] == 0x23) && (b[1] == 0x00)) { - // UTF-16 BE - i = 0; - c[i++] = b[0]; - while (i < 80) { - if (is.read(b, 0, 2) != 2) { - is.reset(); - return null; - } - if (b[1] != 0) return null; - if ((b[0] == 0x0A) || (b[0] == 0x0D)) break; - c[i++] = b[0]; - } - } else if ((b[0] == 0x00) && (b[1] == 0x23)) { - // UTF-16 LE - i = 0; - c[i++] = b[1]; - while (i < 80) { - if (is.read(b, 0, 2) != 2) { - is.reset(); - return null; - } - if (b[0] != 0) return null; - if ((b[1] == 0x0A) || (b[1] == 0x0D)) break; - c[i++] = b[1]; - } - } - } - catch (IOException ioe) { - try { - is.reset(); - } catch (IOException ioe2) { - } - return null; - } - if (i == 0) { - try { - is.reset(); - } catch (IOException ioe2) { - } - return null; - } - // - // Now c[] should have first line of text in UTF-8 format - // - String estr = new String(c, 0, i); - StringTokenizer st = new StringTokenizer(estr, " \u005ct\u005cn\u005cr\u005cf;"); - String id = null; - String ver = null; - String enc = null; - String loc = null; - if (st.hasMoreTokens()) id = st.nextToken(); - if (!id.equals("#JSGF")) { - try { - is.reset(); - } catch (IOException ioe2) { - } - return null; - } - if (st.hasMoreTokens()) ver = st.nextToken(); - if (st.hasMoreTokens()) enc = st.nextToken(); - if (st.hasMoreTokens()) loc = st.nextToken(); - return new JSGFEncoding(ver, enc, loc); - } - - public static JSGFRuleGrammar newGrammarFromJSGF(URL url, JSGFRuleGrammarFactory factory) throws JSGFGrammarParseException, IOException - { - Reader reader; - BufferedInputStream stream = new BufferedInputStream(url.openStream(), 256); - JSGFEncoding encoding = getJSGFEncoding(stream); - if ((encoding != null) && (encoding.encoding != null)) { - System.out.println("Grammar Character Encoding \u005c"" + encoding.encoding + "\u005c""); - reader = new InputStreamReader(stream, encoding.encoding); - } else { - if (encoding == null) System.out.println("WARNING: Grammar missing self identifying header"); - reader = new InputStreamReader(stream); - } - return newGrammarFromJSGF(reader, factory); - } - - public static JSGFRule ruleForJSGF(String text) { - JSGFRule r = null; - try { - StringReader sread = new StringReader(text); - if (parser == null) parser = new JSGFParser(sread); - else parser.ReInit(sread); - r = parser.alternatives(); - // System.out.println("JSGF Parser Version " + version - // + ": JSGF RHS parsed successfully."); - } catch (ParseException e) { - System.out.println("JSGF Parser Version " + version + ": Encountered errors during parse."); - } - return r; - } - - static void extractKeywords(JSGFRuleGrammar grammar, String rname, String comment) { - int i = 0; - while ((i = comment.indexOf("@example ", i) + 9) > 9) { - int j = Math.max(comment.indexOf('\u005cr', i), comment.indexOf('\u005cn', i)); - if (j < 0) { - j = comment.length(); - if (comment.endsWith(("*/"))) - j -= 2; - } - grammar.addSampleSentence(rname, comment.substring(i, j).trim()); - i = j + 1; - } - } - - @SuppressWarnings("unused") -final public JSGFRuleGrammar GrammarUnit(JSGFRuleGrammarFactory factory) throws ParseException { - JSGFRuleGrammar grammar = null; - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case IDENTIFIER: - IdentHeader(); - break; - default: - jj_la1[0] = jj_gen; - ; - } - grammar = GrammarDeclaration(factory); - label_1: - while (true) { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case IMPORT: - ; - break; - default: - jj_la1[1] = jj_gen; - break label_1; - } - ImportDeclaration(grammar); - } - label_2: - while (true) { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case PUBLIC: - case 28: - ; - break; - default: - jj_la1[2] = jj_gen; - break label_2; - } - RuleDeclaration(grammar); - } - jj_consume_token(0); - {if (true) return grammar;} - throw new Error("Missing return statement in function"); - } - - @SuppressWarnings("unused") -final public JSGFRuleGrammar GrammarDeclaration(JSGFRuleGrammarFactory factory) throws ParseException { - String s; - JSGFRuleGrammar grammar = null; - Token t = null; - t = jj_consume_token(GRAMMAR); - s = Name(); - jj_consume_token(26); - grammar = factory.newGrammar (s); - if (grammar != null && t != null && t.specialToken != null) { - if (t.specialToken.image != null && t.specialToken.image.startsWith("/**")) { - JSGFRuleGrammar JG = grammar; - JG.addGrammarDocComment(t.specialToken.image); - } - } - {if (true) return grammar;} - throw new Error("Missing return statement in function"); - } - - final public void IdentHeader() throws ParseException { - jj_consume_token(IDENTIFIER); - jj_consume_token(27); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case IDENTIFIER: - jj_consume_token(IDENTIFIER); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case IDENTIFIER: - jj_consume_token(IDENTIFIER); - break; - default: - jj_la1[3] = jj_gen; - ; - } - break; - default: - jj_la1[4] = jj_gen; - ; - } - jj_consume_token(26); - } - - final public void ImportDeclaration(JSGFRuleGrammar grammar) throws ParseException { - boolean all = false; - String name; - Token t = null; - t = jj_consume_token(IMPORT); - jj_consume_token(28); - name = Name(); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 29: - jj_consume_token(29); - jj_consume_token(30); - all = true; - break; - default: - jj_la1[5] = jj_gen; - ; - } - jj_consume_token(31); - jj_consume_token(26); - // import all rules if .* - if (all) name = name + ".*"; - JSGFRuleName r = new JSGFRuleName(name); - if (grammar != null) { - grammar.addImport(r); - if (grammar instanceof JSGFRuleGrammar && t != null && t.specialToken != null) { - if (t.specialToken.image != null && t.specialToken.image.startsWith("/**")) { - JSGFRuleGrammar JG = grammar; - JG.addImportDocComment(r, t.specialToken.image); - } - } - } - } - - @SuppressWarnings("unused") -final public String Name() throws ParseException { - Token t1, t2; - StringBuilder sb = new StringBuilder(); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case IDENTIFIER: - t1 = jj_consume_token(IDENTIFIER); - break; - case PUBLIC: - t1 = jj_consume_token(PUBLIC); - break; - case IMPORT: - t1 = jj_consume_token(IMPORT); - break; - case GRAMMAR: - t1 = jj_consume_token(GRAMMAR); - break; - default: - jj_la1[6] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - sb.append(t1.image); - label_3: - while (true) { - if (jj_2_1(2)) { - ; - } else { - break label_3; - } - jj_consume_token(29); - t2 = jj_consume_token(IDENTIFIER); - sb.append('.'); - sb.append(t2.image); - } - {if (true) return sb.toString();} - throw new Error("Missing return statement in function"); - } - - final public void RuleDeclaration(JSGFRuleGrammar grammar) throws ParseException { - boolean pub = false; - String s; - JSGFRule r; - Token t = null; - Token t1 = null; - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case PUBLIC: - t = jj_consume_token(PUBLIC); - pub = true; - break; - default: - jj_la1[7] = jj_gen; - ; - } - t1 = jj_consume_token(28); - s = ruleDef(); - jj_consume_token(31); - jj_consume_token(32); - r = alternatives(); - jj_consume_token(26); - try { - if (grammar != null) { - grammar.setRule(s, r, pub); - String docComment = null; - if ((t != null) && (t.specialToken != null) && (t.specialToken.image != null)) docComment = t.specialToken.image; - else if ((t1 != null) && (t1.specialToken != null) && (t1.specialToken.image != null)) docComment = t1.specialToken.image; - if (docComment != null && docComment.startsWith("/**")) { - extractKeywords(grammar, s, docComment); - grammar.addRuleDocComment(s, docComment); - } - } - } catch (IllegalArgumentException e) { - System.out.println("ERROR SETTING JSGFRule " + s); - } - } - - @SuppressWarnings("unused") -final public JSGFRuleAlternatives alternatives() throws ParseException { - ArrayList ruleList = new ArrayList(); - JSGFRule r; - float w; - ArrayListweights = new ArrayList(); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case GRAMMAR: - case IMPORT: - case PUBLIC: - case INTEGER_LITERAL: - case FLOATING_POINT_LITERAL: - case STRING_LITERAL: - case IDENTIFIER: - case 28: - case 36: - case 38: - r = sequence(); - ruleList.add(r); - label_4: - while (true) { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 33: - ; - break; - default: - jj_la1[8] = jj_gen; - break label_4; - } - jj_consume_token(33); - r = sequence(); - ruleList.add(r); - } - break; - case 34: - w = weight(); - r = sequence(); - ruleList.add(r); - weights.add(w); - label_5: - while (true) { - jj_consume_token(33); - w = weight(); - r = sequence(); - ruleList.add(r); - weights.add(w); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 33: - ; - break; - default: - jj_la1[9] = jj_gen; - break label_5; - } - } - break; - default: - jj_la1[10] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - JSGFRuleAlternatives ra = new JSGFRuleAlternatives(ruleList); - if (weights.size() > 0) { - ra.setWeights(weights); - } - {if (true) return ra;} - throw new Error("Missing return statement in function"); - } - - @SuppressWarnings("unused") -final public String ruleDef() throws ParseException { - Token t; - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case IDENTIFIER: - t = jj_consume_token(IDENTIFIER); - break; - case INTEGER_LITERAL: - t = jj_consume_token(INTEGER_LITERAL); - break; - case PUBLIC: - t = jj_consume_token(PUBLIC); - break; - case IMPORT: - t = jj_consume_token(IMPORT); - break; - case GRAMMAR: - t = jj_consume_token(GRAMMAR); - break; - default: - jj_la1[11] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - {if (true) return t.image;} - throw new Error("Missing return statement in function"); - } - - @SuppressWarnings("unused") -final public JSGFRuleSequence sequence() throws ParseException { - JSGFRule JSGFRule; - ArrayList ruleList = new ArrayList(); - label_6: - while (true) { - JSGFRule = item(); - ruleList.add(JSGFRule); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case GRAMMAR: - case IMPORT: - case PUBLIC: - case INTEGER_LITERAL: - case FLOATING_POINT_LITERAL: - case STRING_LITERAL: - case IDENTIFIER: - case 28: - case 36: - case 38: - ; - break; - default: - jj_la1[12] = jj_gen; - break label_6; - } - } - {if (true) return new JSGFRuleSequence(ruleList);} - throw new Error("Missing return statement in function"); - } - - @SuppressWarnings("unused") -final public float weight() throws ParseException { - Token t; - jj_consume_token(34); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case FLOATING_POINT_LITERAL: - t = jj_consume_token(FLOATING_POINT_LITERAL); - break; - case INTEGER_LITERAL: - t = jj_consume_token(INTEGER_LITERAL); - break; - default: - jj_la1[13] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - jj_consume_token(34); - {if (true) return Float.valueOf(t.image).floatValue();} - throw new Error("Missing return statement in function"); - } - - @SuppressWarnings("unused") -final public JSGFRule item() throws ParseException { - JSGFRule r; - ArrayList tags = null; - int count =-1; - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case GRAMMAR: - case IMPORT: - case PUBLIC: - case INTEGER_LITERAL: - case FLOATING_POINT_LITERAL: - case STRING_LITERAL: - case IDENTIFIER: - case 28: - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case GRAMMAR: - case IMPORT: - case PUBLIC: - case INTEGER_LITERAL: - case FLOATING_POINT_LITERAL: - case STRING_LITERAL: - case IDENTIFIER: - r = terminal(); - break; - case 28: - r = ruleRef(); - break; - default: - jj_la1[14] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 30: - case 35: - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 30: - jj_consume_token(30); - count = JSGFRuleCount.ZERO_OR_MORE; - break; - case 35: - jj_consume_token(35); - count = JSGFRuleCount.ONCE_OR_MORE; - break; - default: - jj_la1[15] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - break; - default: - jj_la1[16] = jj_gen; - ; - } - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case TAG: - tags = tags(); - break; - default: - jj_la1[17] = jj_gen; - ; - } - break; - case 36: - jj_consume_token(36); - r = alternatives(); - jj_consume_token(37); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 30: - case 35: - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 30: - jj_consume_token(30); - count = JSGFRuleCount.ZERO_OR_MORE; - break; - case 35: - jj_consume_token(35); - count = JSGFRuleCount.ONCE_OR_MORE; - break; - default: - jj_la1[18] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - break; - default: - jj_la1[19] = jj_gen; - ; - } - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case TAG: - tags = tags(); - break; - default: - jj_la1[20] = jj_gen; - ; - } - break; - case 38: - jj_consume_token(38); - r = alternatives(); - jj_consume_token(39); - count = JSGFRuleCount.OPTIONAL; - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case TAG: - tags = tags(); - break; - default: - jj_la1[21] = jj_gen; - ; - } - break; - default: - jj_la1[22] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - if (count != - 1) r = new JSGFRuleCount(r, count); - if (tags != null) { - for (String tag : tags) { - if (tag.charAt(0) == '{') { - tag = tag.substring(1, tag.length() - 1); - tag = tag.replace('\u005c\u005c', ' '); - } - r = new JSGFRuleTag(r, tag); - } - } - {if (true) return r;} - throw new Error("Missing return statement in function"); - } - - @SuppressWarnings("unused") -final public ArrayList tags() throws ParseException { - Token token; - ArrayList tags = new ArrayList(); - label_7: - while (true) { - token = jj_consume_token(TAG); - tags.add(token.image); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case TAG: - ; - break; - default: - jj_la1[23] = jj_gen; - break label_7; - } - } - {if (true) return tags;} - throw new Error("Missing return statement in function"); - } - - @SuppressWarnings("unused") -final public JSGFRule terminal() throws ParseException { - Token t; - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case IDENTIFIER: - t = jj_consume_token(IDENTIFIER); - break; - case STRING_LITERAL: - t = jj_consume_token(STRING_LITERAL); - break; - case INTEGER_LITERAL: - t = jj_consume_token(INTEGER_LITERAL); - break; - case FLOATING_POINT_LITERAL: - t = jj_consume_token(FLOATING_POINT_LITERAL); - break; - case PUBLIC: - t = jj_consume_token(PUBLIC); - break; - case IMPORT: - t = jj_consume_token(IMPORT); - break; - case GRAMMAR: - t = jj_consume_token(GRAMMAR); - break; - default: - jj_la1[24] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - String tn = t.image; - if (tn.startsWith("\u005c"") && tn.endsWith("\u005c"")) tn = tn.substring(1, tn.length() - 1); - JSGFRuleToken rt = new JSGFRuleToken(tn); - {if (true) return rt;} - throw new Error("Missing return statement in function"); - } - - @SuppressWarnings("unused") -final public JSGFRuleName ruleRef() throws ParseException { - String s; - jj_consume_token(28); - s = Name(); - jj_consume_token(31); - JSGFRuleName rn = new JSGFRuleName(s); - {if (true) return rn;} - throw new Error("Missing return statement in function"); - } - - @SuppressWarnings("unused") -final public JSGFRuleName importRef() throws ParseException { - String s; - boolean all = false; - jj_consume_token(28); - s = Name(); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 29: - jj_consume_token(29); - jj_consume_token(30); - all = true; - break; - default: - jj_la1[25] = jj_gen; - ; - } - jj_consume_token(31); - if (all) s = s + ".*"; - JSGFRuleName rn = new JSGFRuleName(s); - {if (true) return rn;} - throw new Error("Missing return statement in function"); - } - - private boolean jj_2_1(int xla) { - jj_la = xla; jj_lastpos = jj_scanpos = token; - try { return !jj_3_1(); } - catch(LookaheadSuccess ls) { return true; } - finally { jj_save(0, xla); } - } - - private boolean jj_3_1() { - if (jj_scan_token(29)) return true; - if (jj_scan_token(IDENTIFIER)) return true; - return false; - } - - public JSGFParserTokenManager token_source; - JavaCharStream jj_input_stream; - - public Token token; - public Token jj_nt; - private int jj_ntk; - private Token jj_scanpos, jj_lastpos; - private int jj_la; - private int jj_gen; - final private int[] jj_la1 = new int[26]; - static private int[] jj_la1_0; - static private int[] jj_la1_1; - static { - jj_la1_init_0(); - jj_la1_init_1(); - } - private static void jj_la1_init_0() { - jj_la1_0 = new int[] {0x800000,0x4000,0x10008000,0x800000,0x800000,0x20000000,0x80e000,0x8000,0x0,0x0,0x10a5e000,0x81e000,0x10a5e000,0x50000,0x10a5e000,0x40000000,0x40000000,0x400000,0x40000000,0x40000000,0x400000,0x400000,0x10a5e000,0x400000,0xa5e000,0x20000000,}; - } - private static void jj_la1_init_1() { - jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x2,0x54,0x0,0x50,0x0,0x0,0x8,0x8,0x0,0x8,0x8,0x0,0x0,0x50,0x0,0x0,0x0,}; - } - final private JJCalls[] jj_2_rtns = new JJCalls[1]; - private boolean jj_rescan = false; - private int jj_gc = 0; - - public JSGFParser(java.io.InputStream stream) { - this(stream, null); - } - public JSGFParser(java.io.InputStream stream, String encoding) { - try { jj_input_stream = new JavaCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); } - token_source = new JSGFParserTokenManager(jj_input_stream); - token = new Token(); - jj_ntk = -1; - jj_gen = 0; - for (int i = 0; i < 26; i++) jj_la1[i] = -1; - for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); - } - - public void ReInit(java.io.InputStream stream) { - ReInit(stream, null); - } - public void ReInit(java.io.InputStream stream, String encoding) { - try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); } - token_source.ReInit(jj_input_stream); - token = new Token(); - jj_ntk = -1; - jj_gen = 0; - for (int i = 0; i < 26; i++) jj_la1[i] = -1; - for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); - } - - public JSGFParser(java.io.Reader stream) { - jj_input_stream = new JavaCharStream(stream, 1, 1); - token_source = new JSGFParserTokenManager(jj_input_stream); - token = new Token(); - jj_ntk = -1; - jj_gen = 0; - for (int i = 0; i < 26; i++) jj_la1[i] = -1; - for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); - } - - public void ReInit(java.io.Reader stream) { - jj_input_stream.ReInit(stream, 1, 1); - token_source.ReInit(jj_input_stream); - token = new Token(); - jj_ntk = -1; - jj_gen = 0; - for (int i = 0; i < 26; i++) jj_la1[i] = -1; - for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); - } - - public JSGFParser(JSGFParserTokenManager tm) { - token_source = tm; - token = new Token(); - jj_ntk = -1; - jj_gen = 0; - for (int i = 0; i < 26; i++) jj_la1[i] = -1; - for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); - } - - public void ReInit(JSGFParserTokenManager tm) { - token_source = tm; - token = new Token(); - jj_ntk = -1; - jj_gen = 0; - for (int i = 0; i < 26; i++) jj_la1[i] = -1; - for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); - } - - private Token jj_consume_token(int kind) throws ParseException { - Token oldToken; - if ((oldToken = token).next != null) token = token.next; - else token = token.next = token_source.getNextToken(); - jj_ntk = -1; - if (token.kind == kind) { - jj_gen++; - if (++jj_gc > 100) { - jj_gc = 0; - for (int i = 0; i < jj_2_rtns.length; i++) { - JJCalls c = jj_2_rtns[i]; - while (c != null) { - if (c.gen < jj_gen) c.first = null; - c = c.next; - } - } - } - return token; - } - token = oldToken; - jj_kind = kind; - throw generateParseException(); - } - - @SuppressWarnings("serial") -static private final class LookaheadSuccess extends java.lang.Error { } - final private LookaheadSuccess jj_ls = new LookaheadSuccess(); - private boolean jj_scan_token(int kind) { - if (jj_scanpos == jj_lastpos) { - jj_la--; - if (jj_scanpos.next == null) { - jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken(); - } else { - jj_lastpos = jj_scanpos = jj_scanpos.next; - } - } else { - jj_scanpos = jj_scanpos.next; - } - if (jj_rescan) { - int i = 0; Token tok = token; - while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; } - if (tok != null) jj_add_error_token(kind, i); - } - if (jj_scanpos.kind != kind) return true; - if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls; - return false; - } - - - final public Token getNextToken() { - if (token.next != null) token = token.next; - else token = token.next = token_source.getNextToken(); - jj_ntk = -1; - jj_gen++; - return token; - } - - final public Token getToken(int index) { - Token t = token; - for (int i = 0; i < index; i++) { - if (t.next != null) t = t.next; - else t = t.next = token_source.getNextToken(); - } - return t; - } - - private int jj_ntk() { - if ((jj_nt=token.next) == null) - return (jj_ntk = (token.next=token_source.getNextToken()).kind); - else - return (jj_ntk = jj_nt.kind); - } - - private java.util.List jj_expentries = new java.util.ArrayList(); - private int[] jj_expentry; - private int jj_kind = -1; - private int[] jj_lasttokens = new int[100]; - private int jj_endpos; - - private void jj_add_error_token(int kind, int pos) { - if (pos >= 100) return; - if (pos == jj_endpos + 1) { - jj_lasttokens[jj_endpos++] = kind; - } else if (jj_endpos != 0) { - jj_expentry = new int[jj_endpos]; - for (int i = 0; i < jj_endpos; i++) { - jj_expentry[i] = jj_lasttokens[i]; - } - jj_entries_loop: for (java.util.Iterator it = jj_expentries.iterator(); it.hasNext();) { - int[] oldentry = (int[])(it.next()); - if (oldentry.length == jj_expentry.length) { - for (int i = 0; i < jj_expentry.length; i++) { - if (oldentry[i] != jj_expentry[i]) { - continue jj_entries_loop; - } - } - jj_expentries.add(jj_expentry); - break jj_entries_loop; - } - } - if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind; - } - } - - public ParseException generateParseException() { - jj_expentries.clear(); - boolean[] la1tokens = new boolean[40]; - if (jj_kind >= 0) { - la1tokens[jj_kind] = true; - jj_kind = -1; - } - for (int i = 0; i < 26; i++) { - if (jj_la1[i] == jj_gen) { - for (int j = 0; j < 32; j++) { - if ((jj_la1_0[i] & (1< jj_gen) { - jj_la = p.arg; jj_lastpos = jj_scanpos = p.first; - switch (i) { - case 0: jj_3_1(); break; - } - } - p = p.next; - } while (p != null); - } catch(LookaheadSuccess ls) { } - } - jj_rescan = false; - } - - private void jj_save(int index, int xla) { - JJCalls p = jj_2_rtns[index]; - while (p.gen > jj_gen) { - if (p.next == null) { p = p.next = new JJCalls(); break; } - p = p.next; - } - p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla; - } - - static final class JJCalls { - int gen; - Token first; - int arg; - JJCalls next; - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/JSGFParserConstants.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/JSGFParserConstants.java deleted file mode 100755 index e64026bd..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/JSGFParserConstants.java +++ /dev/null @@ -1,100 +0,0 @@ -/* Generated By:JavaCC: Do not edit this line. JSGFParserConstants.java */ -package edu.cmu.sphinx.jsgf.parser; - - -/* - * Token literal values and constants. - * Generated by org.javacc.parser.OtherFilesGen#start() - */ -@SuppressWarnings("all") -public interface JSGFParserConstants { - - /* End of File. */ - int EOF = 0; - /* RegularExpression Id. */ - int SINGLE_LINE_COMMENT = 9; - /* RegularExpression Id. */ - int FORMAL_COMMENT = 10; - /* RegularExpression Id. */ - int MULTI_LINE_COMMENT = 11; - /* RegularExpression Id. */ - int GRAMMAR = 13; - /* RegularExpression Id. */ - int IMPORT = 14; - /* RegularExpression Id. */ - int PUBLIC = 15; - /* RegularExpression Id. */ - int INTEGER_LITERAL = 16; - /* RegularExpression Id. */ - int DECIMAL_LITERAL = 17; - /* RegularExpression Id. */ - int FLOATING_POINT_LITERAL = 18; - /* RegularExpression Id. */ - int EXPONENT = 19; - /* RegularExpression Id. */ - int CHARACTER_LITERAL = 20; - /* RegularExpression Id. */ - int STRING_LITERAL = 21; - /* RegularExpression Id. */ - int TAG = 22; - /* RegularExpression Id. */ - int IDENTIFIER = 23; - /* RegularExpression Id. */ - int LETTER = 24; - /* RegularExpression Id. */ - int DIGIT = 25; - - /* Lexical state. */ - int DEFAULT = 0; - /* Lexical state. */ - int IN_SINGLE_LINE_COMMENT = 1; - /* Lexical state. */ - int IN_FORMAL_COMMENT = 2; - /* Lexical state. */ - int IN_MULTI_LINE_COMMENT = 3; - - /* Literal token values. */ - String[] tokenImage = { - "", - "\" \"", - "\"\\t\"", - "\"\\n\"", - "\"\\r\"", - "\"\\f\"", - "\"//\"", - "", - "\"/*\"", - "", - "\"*/\"", - "\"*/\"", - "", - "\"grammar\"", - "\"import\"", - "\"public\"", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "\";\"", - "\"V1.0\"", - "\"<\"", - "\".\"", - "\"*\"", - "\">\"", - "\"=\"", - "\"|\"", - "\"/\"", - "\"+\"", - "\"(\"", - "\")\"", - "\"[\"", - "\"]\"", - }; - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/JSGFParserTokenManager.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/JSGFParserTokenManager.java deleted file mode 100755 index 4f04251a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/JSGFParserTokenManager.java +++ /dev/null @@ -1,1241 +0,0 @@ -/* Generated By:JavaCC: Do not edit this line. JSGFParserTokenManager.java */ -package edu.cmu.sphinx.jsgf.parser; -import java.io.BufferedInputStream; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.io.StringReader; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.StringTokenizer; -import edu.cmu.sphinx.jsgf.rule.*; -import edu.cmu.sphinx.jsgf.JSGFRuleGrammar; -import edu.cmu.sphinx.jsgf.JSGFRuleGrammarFactory; -import edu.cmu.sphinx.jsgf.JSGFRuleGrammarManager; -import edu.cmu.sphinx.jsgf.JSGFGrammarParseException; - -@SuppressWarnings("all") -public class JSGFParserTokenManager implements JSGFParserConstants -{ - - public java.io.PrintStream debugStream = System.out; - - public void setDebugStream(java.io.PrintStream ds) { debugStream = ds; } -private final int jjStopStringLiteralDfa_0(int pos, long active0) -{ - switch (pos) - { - case 0: - if ((active0 & 0x400000140L) != 0L) - return 2; - if ((active0 & 0x800e000L) != 0L) - { - jjmatchedKind = 23; - return 37; - } - if ((active0 & 0x20000000L) != 0L) - return 5; - return -1; - case 1: - if ((active0 & 0x100L) != 0L) - return 0; - if ((active0 & 0x800e000L) != 0L) - { - jjmatchedKind = 23; - jjmatchedPos = 1; - return 37; - } - return -1; - case 2: - if ((active0 & 0x8000000L) != 0L) - { - if (jjmatchedPos < 1) - { - jjmatchedKind = 23; - jjmatchedPos = 1; - } - return -1; - } - if ((active0 & 0xe000L) != 0L) - { - jjmatchedKind = 23; - jjmatchedPos = 2; - return 37; - } - return -1; - case 3: - if ((active0 & 0x8000000L) != 0L) - { - if (jjmatchedPos < 1) - { - jjmatchedKind = 23; - jjmatchedPos = 1; - } - return -1; - } - if ((active0 & 0xe000L) != 0L) - { - jjmatchedKind = 23; - jjmatchedPos = 3; - return 37; - } - return -1; - case 4: - if ((active0 & 0xe000L) != 0L) - { - jjmatchedKind = 23; - jjmatchedPos = 4; - return 37; - } - return -1; - case 5: - if ((active0 & 0xc000L) != 0L) - return 37; - if ((active0 & 0x2000L) != 0L) - { - jjmatchedKind = 23; - jjmatchedPos = 5; - return 37; - } - return -1; - default : - return -1; - } -} -private final int jjStartNfa_0(int pos, long active0) -{ - return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1); -} -private int jjStopAtPos(int pos, int kind) -{ - jjmatchedKind = kind; - jjmatchedPos = pos; - return pos + 1; -} -private int jjMoveStringLiteralDfa0_0() -{ - switch(curChar) - { - case 40: - return jjStopAtPos(0, 36); - case 41: - return jjStopAtPos(0, 37); - case 42: - return jjStopAtPos(0, 30); - case 43: - return jjStopAtPos(0, 35); - case 46: - return jjStartNfaWithStates_0(0, 29, 5); - case 47: - jjmatchedKind = 34; - return jjMoveStringLiteralDfa1_0(0x140L); - case 59: - return jjStopAtPos(0, 26); - case 60: - return jjStopAtPos(0, 28); - case 61: - return jjStopAtPos(0, 32); - case 62: - return jjStopAtPos(0, 31); - case 86: - return jjMoveStringLiteralDfa1_0(0x8000000L); - case 91: - return jjStopAtPos(0, 38); - case 93: - return jjStopAtPos(0, 39); - case 103: - return jjMoveStringLiteralDfa1_0(0x2000L); - case 105: - return jjMoveStringLiteralDfa1_0(0x4000L); - case 112: - return jjMoveStringLiteralDfa1_0(0x8000L); - case 124: - return jjStopAtPos(0, 33); - default : - return jjMoveNfa_0(3, 0); - } -} -private int jjMoveStringLiteralDfa1_0(long active0) -{ - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { - jjStopStringLiteralDfa_0(0, active0); - return 1; - } - switch(curChar) - { - case 42: - if ((active0 & 0x100L) != 0L) - return jjStartNfaWithStates_0(1, 8, 0); - break; - case 47: - if ((active0 & 0x40L) != 0L) - return jjStopAtPos(1, 6); - break; - case 49: - return jjMoveStringLiteralDfa2_0(active0, 0x8000000L); - case 109: - return jjMoveStringLiteralDfa2_0(active0, 0x4000L); - case 114: - return jjMoveStringLiteralDfa2_0(active0, 0x2000L); - case 117: - return jjMoveStringLiteralDfa2_0(active0, 0x8000L); - default : - break; - } - return jjStartNfa_0(0, active0); -} -private int jjMoveStringLiteralDfa2_0(long old0, long active0) -{ - if (((active0 &= old0)) == 0L) - return jjStartNfa_0(0, old0); - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { - jjStopStringLiteralDfa_0(1, active0); - return 2; - } - switch(curChar) - { - case 46: - return jjMoveStringLiteralDfa3_0(active0, 0x8000000L); - case 97: - return jjMoveStringLiteralDfa3_0(active0, 0x2000L); - case 98: - return jjMoveStringLiteralDfa3_0(active0, 0x8000L); - case 112: - return jjMoveStringLiteralDfa3_0(active0, 0x4000L); - default : - break; - } - return jjStartNfa_0(1, active0); -} -private int jjMoveStringLiteralDfa3_0(long old0, long active0) -{ - if (((active0 &= old0)) == 0L) - return jjStartNfa_0(1, old0); - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { - jjStopStringLiteralDfa_0(2, active0); - return 3; - } - switch(curChar) - { - case 48: - if ((active0 & 0x8000000L) != 0L) - return jjStopAtPos(3, 27); - break; - case 108: - return jjMoveStringLiteralDfa4_0(active0, 0x8000L); - case 109: - return jjMoveStringLiteralDfa4_0(active0, 0x2000L); - case 111: - return jjMoveStringLiteralDfa4_0(active0, 0x4000L); - default : - break; - } - return jjStartNfa_0(2, active0); -} -private int jjMoveStringLiteralDfa4_0(long old0, long active0) -{ - if (((active0 &= old0)) == 0L) - return jjStartNfa_0(2, old0); - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { - jjStopStringLiteralDfa_0(3, active0); - return 4; - } - switch(curChar) - { - case 105: - return jjMoveStringLiteralDfa5_0(active0, 0x8000L); - case 109: - return jjMoveStringLiteralDfa5_0(active0, 0x2000L); - case 114: - return jjMoveStringLiteralDfa5_0(active0, 0x4000L); - default : - break; - } - return jjStartNfa_0(3, active0); -} -private int jjMoveStringLiteralDfa5_0(long old0, long active0) -{ - if (((active0 &= old0)) == 0L) - return jjStartNfa_0(3, old0); - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { - jjStopStringLiteralDfa_0(4, active0); - return 5; - } - switch(curChar) - { - case 97: - return jjMoveStringLiteralDfa6_0(active0, 0x2000L); - case 99: - if ((active0 & 0x8000L) != 0L) - return jjStartNfaWithStates_0(5, 15, 37); - break; - case 116: - if ((active0 & 0x4000L) != 0L) - return jjStartNfaWithStates_0(5, 14, 37); - break; - default : - break; - } - return jjStartNfa_0(4, active0); -} -private int jjMoveStringLiteralDfa6_0(long old0, long active0) -{ - if (((active0 &= old0)) == 0L) - return jjStartNfa_0(4, old0); - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { - jjStopStringLiteralDfa_0(5, active0); - return 6; - } - switch(curChar) - { - case 114: - if ((active0 & 0x2000L) != 0L) - return jjStartNfaWithStates_0(6, 13, 37); - break; - default : - break; - } - return jjStartNfa_0(5, active0); -} -private int jjStartNfaWithStates_0(int pos, int kind, int state) -{ - jjmatchedKind = kind; - jjmatchedPos = pos; - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { return pos + 1; } - return jjMoveNfa_0(state, pos + 1); -} -static final long[] jjbitVec0 = { - 0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL -}; -static final long[] jjbitVec2 = { - 0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL -}; -static final long[] jjbitVec3 = { - 0x1ff00000fffffffeL, 0xffffffffffffc000L, 0xffffffffL, 0x600000000000000L -}; -static final long[] jjbitVec4 = { - 0x0L, 0x0L, 0x0L, 0xff7fffffff7fffffL -}; -static final long[] jjbitVec5 = { - 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL -}; -static final long[] jjbitVec6 = { - 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffL, 0x0L -}; -static final long[] jjbitVec7 = { - 0xffffffffffffffffL, 0xffffffffffffffffL, 0x0L, 0x0L -}; -static final long[] jjbitVec8 = { - 0x3fffffffffffL, 0x0L, 0x0L, 0x0L -}; -private int jjMoveNfa_0(int startState, int curPos) -{ - int startsAt = 0; - jjnewStateCnt = 54; - int i = 1; - jjstateSet[0] = startState; - int kind = 0x7fffffff; - for (;;) - { - if (++jjround == 0x7fffffff) - ReInitRounds(); - if (curChar < 64) - { - long l = 1L << curChar; - do - { - switch(jjstateSet[--i]) - { - case 3: - if ((0x7ff30fa00000000L & l) != 0L) - { - if (kind > 23) - kind = 23; - jjCheckNAdd(37); - } - else if (curChar == 34) - jjCheckNAddStates(0, 2); - else if (curChar == 46) - jjCheckNAdd(5); - else if (curChar == 47) - jjstateSet[jjnewStateCnt++] = 2; - if ((0x3ff000000000000L & l) != 0L) - { - if (kind > 16) - kind = 16; - jjCheckNAddStates(3, 10); - } - else if (curChar == 39) - jjAddStates(11, 12); - break; - case 0: - if (curChar == 42) - jjstateSet[jjnewStateCnt++] = 1; - break; - case 1: - if ((0xffff7fffffffffffL & l) != 0L && kind > 7) - kind = 7; - break; - case 2: - if (curChar == 42) - jjstateSet[jjnewStateCnt++] = 0; - break; - case 4: - if (curChar == 46) - jjCheckNAdd(5); - break; - case 5: - if ((0x3ff000000000000L & l) == 0L) - break; - if (kind > 18) - kind = 18; - jjCheckNAddStates(13, 15); - break; - case 7: - if ((0x280000000000L & l) != 0L) - jjCheckNAdd(8); - break; - case 8: - if ((0x3ff000000000000L & l) == 0L) - break; - if (kind > 18) - kind = 18; - jjCheckNAddTwoStates(8, 9); - break; - case 10: - if (curChar == 39) - jjAddStates(11, 12); - break; - case 11: - if ((0xffffff7fffffdbffL & l) != 0L) - jjCheckNAdd(12); - break; - case 12: - if (curChar == 39 && kind > 20) - kind = 20; - break; - case 14: - if ((0x8400000000L & l) != 0L) - jjCheckNAdd(12); - break; - case 15: - if ((0xff000000000000L & l) != 0L) - jjCheckNAddTwoStates(16, 12); - break; - case 16: - if ((0xff000000000000L & l) != 0L) - jjCheckNAdd(12); - break; - case 17: - if ((0xf000000000000L & l) != 0L) - jjstateSet[jjnewStateCnt++] = 18; - break; - case 18: - if ((0xff000000000000L & l) != 0L) - jjCheckNAdd(16); - break; - case 19: - if (curChar == 34) - jjCheckNAddStates(0, 2); - break; - case 20: - if ((0xfffffffbffffdbffL & l) != 0L) - jjCheckNAddStates(0, 2); - break; - case 22: - if ((0x8400000000L & l) != 0L) - jjCheckNAddStates(0, 2); - break; - case 23: - if (curChar == 34 && kind > 21) - kind = 21; - break; - case 24: - if ((0xff000000000000L & l) != 0L) - jjCheckNAddStates(16, 19); - break; - case 25: - if ((0xff000000000000L & l) != 0L) - jjCheckNAddStates(0, 2); - break; - case 26: - if ((0xf000000000000L & l) != 0L) - jjstateSet[jjnewStateCnt++] = 27; - break; - case 27: - if ((0xff000000000000L & l) != 0L) - jjCheckNAdd(25); - break; - case 29: - jjCheckNAddStates(20, 22); - break; - case 31: - if ((0x8400000000L & l) != 0L) - jjCheckNAddStates(20, 22); - break; - case 33: - if ((0xff000000000000L & l) != 0L) - jjCheckNAddStates(23, 26); - break; - case 34: - if ((0xff000000000000L & l) != 0L) - jjCheckNAddStates(20, 22); - break; - case 35: - if ((0xf000000000000L & l) != 0L) - jjstateSet[jjnewStateCnt++] = 36; - break; - case 36: - if ((0xff000000000000L & l) != 0L) - jjCheckNAdd(34); - break; - case 37: - if ((0x7ff30fa00000000L & l) == 0L) - break; - if (kind > 23) - kind = 23; - jjCheckNAdd(37); - break; - case 38: - if ((0x3ff000000000000L & l) == 0L) - break; - if (kind > 16) - kind = 16; - jjCheckNAddStates(3, 10); - break; - case 39: - if ((0x3ff000000000000L & l) == 0L) - break; - if (kind > 16) - kind = 16; - jjCheckNAdd(39); - break; - case 40: - if ((0x3ff000000000000L & l) != 0L) - jjCheckNAddTwoStates(40, 41); - break; - case 41: - if (curChar != 46) - break; - if (kind > 18) - kind = 18; - jjCheckNAddStates(27, 29); - break; - case 42: - if ((0x3ff000000000000L & l) == 0L) - break; - if (kind > 18) - kind = 18; - jjCheckNAddStates(27, 29); - break; - case 44: - if ((0x280000000000L & l) != 0L) - jjCheckNAdd(45); - break; - case 45: - if ((0x3ff000000000000L & l) == 0L) - break; - if (kind > 18) - kind = 18; - jjCheckNAddTwoStates(45, 9); - break; - case 46: - if ((0x3ff000000000000L & l) != 0L) - jjCheckNAddTwoStates(46, 47); - break; - case 48: - if ((0x280000000000L & l) != 0L) - jjCheckNAdd(49); - break; - case 49: - if ((0x3ff000000000000L & l) == 0L) - break; - if (kind > 18) - kind = 18; - jjCheckNAddTwoStates(49, 9); - break; - case 50: - if ((0x3ff000000000000L & l) != 0L) - jjCheckNAddStates(30, 32); - break; - case 52: - if ((0x280000000000L & l) != 0L) - jjCheckNAdd(53); - break; - case 53: - if ((0x3ff000000000000L & l) != 0L) - jjCheckNAddTwoStates(53, 9); - break; - default : break; - } - } while(i != startsAt); - } - else if (curChar < 128) - { - long l = 1L << (curChar & 077); - do - { - switch(jjstateSet[--i]) - { - case 3: - if ((0x47fffffed7ffffffL & l) != 0L) - { - if (kind > 23) - kind = 23; - jjCheckNAdd(37); - } - else if (curChar == 123) - jjCheckNAddStates(20, 22); - break; - case 1: - if (kind > 7) - kind = 7; - break; - case 6: - if ((0x2000000020L & l) != 0L) - jjAddStates(33, 34); - break; - case 9: - if ((0x5000000050L & l) != 0L && kind > 18) - kind = 18; - break; - case 11: - if ((0xffffffffefffffffL & l) != 0L) - jjCheckNAdd(12); - break; - case 13: - if (curChar == 92) - jjAddStates(35, 37); - break; - case 14: - if ((0x14404410000000L & l) != 0L) - jjCheckNAdd(12); - break; - case 20: - if ((0xffffffffefffffffL & l) != 0L) - jjCheckNAddStates(0, 2); - break; - case 21: - if (curChar == 92) - jjAddStates(38, 40); - break; - case 22: - if ((0x14404410000000L & l) != 0L) - jjCheckNAddStates(0, 2); - break; - case 28: - if (curChar == 123) - jjCheckNAddStates(20, 22); - break; - case 29: - if ((0xdfffffffffffffffL & l) != 0L) - jjCheckNAddStates(20, 22); - break; - case 30: - if (curChar == 92) - jjAddStates(41, 43); - break; - case 31: - if ((0x2014404410000000L & l) != 0L) - jjCheckNAddStates(20, 22); - break; - case 32: - if (curChar == 125 && kind > 22) - kind = 22; - break; - case 37: - if ((0x47fffffed7ffffffL & l) == 0L) - break; - if (kind > 23) - kind = 23; - jjCheckNAdd(37); - break; - case 43: - if ((0x2000000020L & l) != 0L) - jjAddStates(44, 45); - break; - case 47: - if ((0x2000000020L & l) != 0L) - jjAddStates(46, 47); - break; - case 51: - if ((0x2000000020L & l) != 0L) - jjAddStates(48, 49); - break; - default : break; - } - } while(i != startsAt); - } - else - { - int hiByte = (int)(curChar >> 8); - int i1 = hiByte >> 6; - long l1 = 1L << (hiByte & 077); - int i2 = (curChar & 0xff) >> 6; - long l2 = 1L << (curChar & 077); - do - { - switch(jjstateSet[--i]) - { - case 3: - case 37: - if (!jjCanMove_1(hiByte, i1, i2, l1, l2)) - break; - if (kind > 23) - kind = 23; - jjCheckNAdd(37); - break; - case 1: - if (jjCanMove_0(hiByte, i1, i2, l1, l2) && kind > 7) - kind = 7; - break; - case 11: - if (jjCanMove_0(hiByte, i1, i2, l1, l2)) - jjstateSet[jjnewStateCnt++] = 12; - break; - case 20: - if (jjCanMove_0(hiByte, i1, i2, l1, l2)) - jjAddStates(0, 2); - break; - case 29: - if (jjCanMove_0(hiByte, i1, i2, l1, l2)) - jjAddStates(20, 22); - break; - default : break; - } - } while(i != startsAt); - } - if (kind != 0x7fffffff) - { - jjmatchedKind = kind; - jjmatchedPos = curPos; - kind = 0x7fffffff; - } - ++curPos; - if ((i = jjnewStateCnt) == (startsAt = 54 - (jjnewStateCnt = startsAt))) - return curPos; - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { return curPos; } - } -} -private int jjMoveStringLiteralDfa0_3() -{ - switch(curChar) - { - case 42: - return jjMoveStringLiteralDfa1_3(0x800L); - default : - return 1; - } -} -private int jjMoveStringLiteralDfa1_3(long active0) -{ - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { - return 1; - } - switch(curChar) - { - case 47: - if ((active0 & 0x800L) != 0L) - return jjStopAtPos(1, 11); - break; - default : - return 2; - } - return 2; -} -private int jjMoveStringLiteralDfa0_1() -{ - return jjMoveNfa_1(4, 0); -} -private int jjMoveNfa_1(int startState, int curPos) -{ - int startsAt = 0; - jjnewStateCnt = 4; - int i = 1; - jjstateSet[0] = startState; - int kind = 0x7fffffff; - for (;;) - { - if (++jjround == 0x7fffffff) - ReInitRounds(); - if (curChar < 64) - { - long l = 1L << curChar; - do - { - switch(jjstateSet[--i]) - { - case 4: - if ((0xffffffffffffdbffL & l) != 0L) - { - if (kind > 9) - kind = 9; - jjCheckNAddStates(50, 52); - } - else if ((0x2400L & l) != 0L) - { - if (kind > 9) - kind = 9; - } - if (curChar == 13) - jjstateSet[jjnewStateCnt++] = 2; - break; - case 0: - if ((0xffffffffffffdbffL & l) == 0L) - break; - kind = 9; - jjCheckNAddStates(50, 52); - break; - case 1: - if ((0x2400L & l) != 0L && kind > 9) - kind = 9; - break; - case 2: - if (curChar == 10 && kind > 9) - kind = 9; - break; - case 3: - if (curChar == 13) - jjstateSet[jjnewStateCnt++] = 2; - break; - default : break; - } - } while(i != startsAt); - } - else if (curChar < 128) - { - long l = 1L << (curChar & 077); - do - { - switch(jjstateSet[--i]) - { - case 4: - case 0: - kind = 9; - jjCheckNAddStates(50, 52); - break; - default : break; - } - } while(i != startsAt); - } - else - { - int hiByte = (int)(curChar >> 8); - int i1 = hiByte >> 6; - long l1 = 1L << (hiByte & 077); - int i2 = (curChar & 0xff) >> 6; - long l2 = 1L << (curChar & 077); - do - { - switch(jjstateSet[--i]) - { - case 4: - case 0: - if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) - break; - if (kind > 9) - kind = 9; - jjCheckNAddStates(50, 52); - break; - default : break; - } - } while(i != startsAt); - } - if (kind != 0x7fffffff) - { - jjmatchedKind = kind; - jjmatchedPos = curPos; - kind = 0x7fffffff; - } - ++curPos; - if ((i = jjnewStateCnt) == (startsAt = 4 - (jjnewStateCnt = startsAt))) - return curPos; - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { return curPos; } - } -} -private int jjMoveStringLiteralDfa0_2() -{ - switch(curChar) - { - case 42: - return jjMoveStringLiteralDfa1_2(0x400L); - default : - return 1; - } -} -private int jjMoveStringLiteralDfa1_2(long active0) -{ - try { curChar = input_stream.readChar(); } - catch(java.io.IOException e) { - return 1; - } - switch(curChar) - { - case 47: - if ((active0 & 0x400L) != 0L) - return jjStopAtPos(1, 10); - break; - default : - return 2; - } - return 2; -} -static final int[] jjnextStates = { - 20, 21, 23, 39, 40, 41, 46, 47, 50, 51, 9, 11, 13, 5, 6, 9, - 20, 21, 25, 23, 29, 30, 32, 29, 30, 34, 32, 42, 43, 9, 50, 51, - 9, 7, 8, 14, 15, 17, 22, 24, 26, 31, 33, 35, 44, 45, 48, 49, - 52, 53, 0, 1, 3, -}; -private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2) -{ - switch(hiByte) - { - case 0: - return ((jjbitVec2[i2] & l2) != 0L); - default : - if ((jjbitVec0[i1] & l1) != 0L) - return true; - return false; - } -} -private static final boolean jjCanMove_1(int hiByte, int i1, int i2, long l1, long l2) -{ - switch(hiByte) - { - case 0: - return ((jjbitVec4[i2] & l2) != 0L); - case 48: - return ((jjbitVec5[i2] & l2) != 0L); - case 49: - return ((jjbitVec6[i2] & l2) != 0L); - case 51: - return ((jjbitVec7[i2] & l2) != 0L); - case 61: - return ((jjbitVec8[i2] & l2) != 0L); - default : - if ((jjbitVec3[i1] & l1) != 0L) - return true; - return false; - } -} - -public static final String[] jjstrLiteralImages = { -"", null, null, null, null, null, null, null, null, null, null, null, null, -"\147\162\141\155\155\141\162", "\151\155\160\157\162\164", "\160\165\142\154\151\143", null, null, null, null, -null, null, null, null, null, null, "\73", "\126\61\56\60", "\74", "\56", "\52", -"\76", "\75", "\174", "\57", "\53", "\50", "\51", "\133", "\135", }; - -public static final String[] lexStateNames = { - "DEFAULT", - "IN_SINGLE_LINE_COMMENT", - "IN_FORMAL_COMMENT", - "IN_MULTI_LINE_COMMENT", -}; - -public static final int[] jjnewLexState = { - -1, -1, -1, -1, -1, -1, 1, 2, 3, 0, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -}; -static final long[] jjtoToken = { - 0xfffcf5e001L, -}; -static final long[] jjtoSkip = { - 0xe3eL, -}; -static final long[] jjtoSpecial = { - 0xe00L, -}; -static final long[] jjtoMore = { - 0x11c0L, -}; -protected JavaCharStream input_stream; -private final int[] jjrounds = new int[54]; -private final int[] jjstateSet = new int[108]; -private final StringBuilder jjimage = new StringBuilder(); -private StringBuilder image = jjimage; -private int jjimageLen; -private int lengthOfMatch; -protected char curChar; - -public JSGFParserTokenManager(JavaCharStream stream){ - if (JavaCharStream.staticFlag) - throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer."); - input_stream = stream; -} - -public JSGFParserTokenManager(JavaCharStream stream, int lexState){ - this(stream); - SwitchTo(lexState); -} - -public void ReInit(JavaCharStream stream) -{ - jjmatchedPos = jjnewStateCnt = 0; - curLexState = defaultLexState; - input_stream = stream; - ReInitRounds(); -} -private void ReInitRounds() -{ - int i; - jjround = 0x80000001; - for (i = 54; i-- > 0;) - jjrounds[i] = 0x80000000; -} - -public void ReInit(JavaCharStream stream, int lexState) -{ - ReInit(stream); - SwitchTo(lexState); -} - -public void SwitchTo(int lexState) -{ - if (lexState >= 4 || lexState < 0) - throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE); - else - curLexState = lexState; -} - -protected Token jjFillToken() -{ - final Token t; - final String curTokenImage; - final int beginLine; - final int endLine; - final int beginColumn; - final int endColumn; - if (jjmatchedPos < 0) - { - if (image == null) - curTokenImage = ""; - else - curTokenImage = image.toString(); - beginLine = endLine = input_stream.getBeginLine(); - beginColumn = endColumn = input_stream.getBeginColumn(); - } - else - { - String im = jjstrLiteralImages[jjmatchedKind]; - curTokenImage = (im == null) ? input_stream.GetImage() : im; - beginLine = input_stream.getBeginLine(); - beginColumn = input_stream.getBeginColumn(); - endLine = input_stream.getEndLine(); - endColumn = input_stream.getEndColumn(); - } - t = Token.newToken(jjmatchedKind, curTokenImage); - - t.beginLine = beginLine; - t.endLine = endLine; - t.beginColumn = beginColumn; - t.endColumn = endColumn; - - return t; -} - -int curLexState = 0; -int defaultLexState = 0; -int jjnewStateCnt; -int jjround; -int jjmatchedPos; -int jjmatchedKind; - -public Token getNextToken() -{ - Token specialToken = null; - Token matchedToken; - int curPos = 0; - - EOFLoop : - for (;;) - { - try - { - curChar = input_stream.BeginToken(); - } - catch(java.io.IOException e) - { - jjmatchedKind = 0; - matchedToken = jjFillToken(); - matchedToken.specialToken = specialToken; - return matchedToken; - } - image = jjimage; - image.setLength(0); - jjimageLen = 0; - - for (;;) - { - switch(curLexState) - { - case 0: - try { input_stream.backup(0); - while (curChar <= 32 && (0x100003600L & (1L << curChar)) != 0L) - curChar = input_stream.BeginToken(); - } - catch (java.io.IOException e1) { continue EOFLoop; } - jjmatchedKind = 0x7fffffff; - jjmatchedPos = 0; - curPos = jjMoveStringLiteralDfa0_0(); - break; - case 1: - jjmatchedKind = 9; - jjmatchedPos = -1; - curPos = 0; - curPos = jjMoveStringLiteralDfa0_1(); - if (jjmatchedPos < 0 || (jjmatchedPos == 0 && jjmatchedKind > 12)) - { - jjmatchedKind = 12; - jjmatchedPos = 0; - } - break; - case 2: - jjmatchedKind = 0x7fffffff; - jjmatchedPos = 0; - curPos = jjMoveStringLiteralDfa0_2(); - if (jjmatchedPos == 0 && jjmatchedKind > 12) - { - jjmatchedKind = 12; - } - break; - case 3: - jjmatchedKind = 0x7fffffff; - jjmatchedPos = 0; - curPos = jjMoveStringLiteralDfa0_3(); - if (jjmatchedPos == 0 && jjmatchedKind > 12) - { - jjmatchedKind = 12; - } - break; - } - if (jjmatchedKind != 0x7fffffff) - { - if (jjmatchedPos + 1 < curPos) - input_stream.backup(curPos - jjmatchedPos - 1); - if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L) - { - matchedToken = jjFillToken(); - matchedToken.specialToken = specialToken; - if (jjnewLexState[jjmatchedKind] != -1) - curLexState = jjnewLexState[jjmatchedKind]; - return matchedToken; - } - else if ((jjtoSkip[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L) - { - if ((jjtoSpecial[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L) - { - matchedToken = jjFillToken(); - if (specialToken == null) - specialToken = matchedToken; - else - { - matchedToken.specialToken = specialToken; - specialToken = (specialToken.next = matchedToken); - } - SkipLexicalActions(matchedToken); - } - else - SkipLexicalActions(null); - if (jjnewLexState[jjmatchedKind] != -1) - curLexState = jjnewLexState[jjmatchedKind]; - continue EOFLoop; - } - MoreLexicalActions(); - if (jjnewLexState[jjmatchedKind] != -1) - curLexState = jjnewLexState[jjmatchedKind]; - curPos = 0; - jjmatchedKind = 0x7fffffff; - try { - curChar = input_stream.readChar(); - continue; - } - catch (java.io.IOException e1) { } - } - int error_line = input_stream.getEndLine(); - int error_column = input_stream.getEndColumn(); - String error_after = null; - boolean EOFSeen = false; - try { input_stream.readChar(); input_stream.backup(1); } - catch (java.io.IOException e1) { - EOFSeen = true; - error_after = curPos <= 1 ? "" : input_stream.GetImage(); - if (curChar == '\n' || curChar == '\r') { - error_line++; - error_column = 0; - } - else - error_column++; - } - if (!EOFSeen) { - input_stream.backup(1); - error_after = curPos <= 1 ? "" : input_stream.GetImage(); - } - throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR); - } - } -} - -void SkipLexicalActions(Token matchedToken) -{ - switch(jjmatchedKind) - { - default : - break; - } -} -void MoreLexicalActions() -{ - jjimageLen += (lengthOfMatch = jjmatchedPos + 1); - switch(jjmatchedKind) - { - case 7 : - image.append(input_stream.GetSuffix(jjimageLen)); - jjimageLen = 0; - input_stream.backup(1); - break; - default : - break; - } -} -private void jjCheckNAdd(int state) -{ - if (jjrounds[state] != jjround) - { - jjstateSet[jjnewStateCnt++] = state; - jjrounds[state] = jjround; - } -} -private void jjAddStates(int start, int end) -{ - do { - jjstateSet[jjnewStateCnt++] = jjnextStates[start]; - } while (start++ != end); -} -private void jjCheckNAddTwoStates(int state1, int state2) -{ - jjCheckNAdd(state1); - jjCheckNAdd(state2); -} - -private void jjCheckNAddStates(int start, int end) -{ - do { - jjCheckNAdd(jjnextStates[start]); - } while (start++ != end); -} - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/JavaCharStream.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/JavaCharStream.java deleted file mode 100755 index 2f87a571..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/JavaCharStream.java +++ /dev/null @@ -1,578 +0,0 @@ -/* Generated By:JavaCC: Do not edit this line. JavaCharStream.java Version 5.0 */ -/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ -package edu.cmu.sphinx.jsgf.parser; - -/* - * An implementation of interface CharStream, where the stream is assumed to - * contain only ASCII characters (with java-like unicode escape processing). - */ -public -@SuppressWarnings("all") -class JavaCharStream -{ - public static final boolean staticFlag = false; - - static final int hexval(char c) throws java.io.IOException { - switch(c) - { - case '0' : - return 0; - case '1' : - return 1; - case '2' : - return 2; - case '3' : - return 3; - case '4' : - return 4; - case '5' : - return 5; - case '6' : - return 6; - case '7' : - return 7; - case '8' : - return 8; - case '9' : - return 9; - - case 'a' : - case 'A' : - return 10; - case 'b' : - case 'B' : - return 11; - case 'c' : - case 'C' : - return 12; - case 'd' : - case 'D' : - return 13; - case 'e' : - case 'E' : - return 14; - case 'f' : - case 'F' : - return 15; - } - - throw new java.io.IOException(); // Should never come here - } - - public int bufpos = -1; - int bufsize; - int available; - int tokenBegin; - protected int bufline[]; - protected int bufcolumn[]; - - protected int column = 0; - protected int line = 1; - - protected boolean prevCharIsCR = false; - protected boolean prevCharIsLF = false; - - protected java.io.Reader inputStream; - - protected char[] nextCharBuf; - protected char[] buffer; - protected int maxNextCharInd = 0; - protected int nextCharInd = -1; - protected int inBuf = 0; - protected int tabSize = 8; - - protected void setTabSize(int i) { tabSize = i; } - protected int getTabSize(int i) { return tabSize; } - - protected void ExpandBuff(boolean wrapAround) - { - char[] newbuffer = new char[bufsize + 2048]; - int newbufline[] = new int[bufsize + 2048]; - int newbufcolumn[] = new int[bufsize + 2048]; - - try - { - if (wrapAround) - { - System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin); - System.arraycopy(buffer, 0, newbuffer, bufsize - tokenBegin, bufpos); - buffer = newbuffer; - - System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin); - System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos); - bufline = newbufline; - - System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin); - System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos); - bufcolumn = newbufcolumn; - - bufpos += (bufsize - tokenBegin); - } - else - { - System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin); - buffer = newbuffer; - - System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin); - bufline = newbufline; - - System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin); - bufcolumn = newbufcolumn; - - bufpos -= tokenBegin; - } - } - catch (Throwable t) - { - throw new Error(t.getMessage()); - } - - available = (bufsize += 2048); - tokenBegin = 0; - } - - protected void FillBuff() throws java.io.IOException - { - int i; - if (maxNextCharInd == 4096) - maxNextCharInd = nextCharInd = 0; - - try { - if ((i = inputStream.read(nextCharBuf, maxNextCharInd, - 4096 - maxNextCharInd)) == -1) - { - inputStream.close(); - throw new java.io.IOException(); - } - else - maxNextCharInd += i; - return; - } - catch(java.io.IOException e) { - if (bufpos != 0) - { - --bufpos; - backup(0); - } - else - { - bufline[bufpos] = line; - bufcolumn[bufpos] = column; - } - throw e; - } - } - - protected char ReadByte() throws java.io.IOException - { - if (++nextCharInd >= maxNextCharInd) - FillBuff(); - - return nextCharBuf[nextCharInd]; - } - - public char BeginToken() throws java.io.IOException - { - if (inBuf > 0) - { - --inBuf; - - if (++bufpos == bufsize) - bufpos = 0; - - tokenBegin = bufpos; - return buffer[bufpos]; - } - - tokenBegin = 0; - bufpos = -1; - - return readChar(); - } - - protected void AdjustBuffSize() - { - if (available == bufsize) - { - if (tokenBegin > 2048) - { - bufpos = 0; - available = tokenBegin; - } - else - ExpandBuff(false); - } - else if (available > tokenBegin) - available = bufsize; - else if ((tokenBegin - available) < 2048) - ExpandBuff(true); - else - available = tokenBegin; - } - - protected void UpdateLineColumn(char c) - { - column++; - - if (prevCharIsLF) - { - prevCharIsLF = false; - line += (column = 1); - } - else if (prevCharIsCR) - { - prevCharIsCR = false; - if (c == '\n') - { - prevCharIsLF = true; - } - else - line += (column = 1); - } - - switch (c) - { - case '\r' : - prevCharIsCR = true; - break; - case '\n' : - prevCharIsLF = true; - break; - case '\t' : - column--; - column += (tabSize - (column % tabSize)); - break; - default : - break; - } - - bufline[bufpos] = line; - bufcolumn[bufpos] = column; - } - - public char readChar() throws java.io.IOException - { - if (inBuf > 0) - { - --inBuf; - - if (++bufpos == bufsize) - bufpos = 0; - - return buffer[bufpos]; - } - - char c; - - if (++bufpos == available) - AdjustBuffSize(); - - if ((buffer[bufpos] = c = ReadByte()) == '\\') - { - UpdateLineColumn(c); - - int backSlashCnt = 1; - - for (;;) // Read all the backslashes - { - if (++bufpos == available) - AdjustBuffSize(); - - try - { - if ((buffer[bufpos] = c = ReadByte()) != '\\') - { - UpdateLineColumn(c); - // found a non-backslash char. - if ((c == 'u') && ((backSlashCnt & 1) == 1)) - { - if (--bufpos < 0) - bufpos = bufsize - 1; - - break; - } - - backup(backSlashCnt); - return '\\'; - } - } - catch(java.io.IOException e) - { - // We are returning one backslash so we should only backup (count-1) - if (backSlashCnt > 1) - backup(backSlashCnt-1); - - return '\\'; - } - - UpdateLineColumn(c); - backSlashCnt++; - } - - // Here, we have seen an odd number of backslash's followed by a 'u' - try - { - while ((c = ReadByte()) == 'u') - ++column; - - buffer[bufpos] = c = (char)(hexval(c) << 12 | - hexval(ReadByte()) << 8 | - hexval(ReadByte()) << 4 | - hexval(ReadByte())); - - column += 4; - } - catch(java.io.IOException e) - { - throw new Error("Invalid escape character at line " + line + - " column " + column + "."); - } - - if (backSlashCnt == 1) - return c; - else - { - backup(backSlashCnt - 1); - return '\\'; - } - } - else - { - UpdateLineColumn(c); - return c; - } - } - - @Deprecated - public int getColumn() { - return bufcolumn[bufpos]; - } - - @Deprecated - public int getLine() { - return bufline[bufpos]; - } - - public int getEndColumn() { - return bufcolumn[bufpos]; - } - - public int getEndLine() { - return bufline[bufpos]; - } - - public int getBeginColumn() { - return bufcolumn[tokenBegin]; - } - - public int getBeginLine() { - return bufline[tokenBegin]; - } - - public void backup(int amount) { - - inBuf += amount; - if ((bufpos -= amount) < 0) - bufpos += bufsize; - } - - public JavaCharStream(java.io.Reader dstream, - int startline, int startcolumn, int buffersize) - { - inputStream = dstream; - line = startline; - column = startcolumn - 1; - - available = bufsize = buffersize; - buffer = new char[buffersize]; - bufline = new int[buffersize]; - bufcolumn = new int[buffersize]; - nextCharBuf = new char[4096]; - } - - public JavaCharStream(java.io.Reader dstream, - int startline, int startcolumn) - { - this(dstream, startline, startcolumn, 4096); - } - - public JavaCharStream(java.io.Reader dstream) - { - this(dstream, 1, 1, 4096); - } - - public void ReInit(java.io.Reader dstream, - int startline, int startcolumn, int buffersize) - { - inputStream = dstream; - line = startline; - column = startcolumn - 1; - - if (buffer == null || buffersize != buffer.length) - { - available = bufsize = buffersize; - buffer = new char[buffersize]; - bufline = new int[buffersize]; - bufcolumn = new int[buffersize]; - nextCharBuf = new char[4096]; - } - prevCharIsLF = prevCharIsCR = false; - tokenBegin = inBuf = maxNextCharInd = 0; - nextCharInd = bufpos = -1; - } - - public void ReInit(java.io.Reader dstream, - int startline, int startcolumn) - { - ReInit(dstream, startline, startcolumn, 4096); - } - - public void ReInit(java.io.Reader dstream) - { - ReInit(dstream, 1, 1, 4096); - } - - public JavaCharStream(java.io.InputStream dstream, String encoding, int startline, - int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException - { - this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize); - } - - public JavaCharStream(java.io.InputStream dstream, int startline, - int startcolumn, int buffersize) - { - this(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096); - } - - public JavaCharStream(java.io.InputStream dstream, String encoding, int startline, - int startcolumn) throws java.io.UnsupportedEncodingException - { - this(dstream, encoding, startline, startcolumn, 4096); - } - - public JavaCharStream(java.io.InputStream dstream, int startline, - int startcolumn) - { - this(dstream, startline, startcolumn, 4096); - } - - public JavaCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException - { - this(dstream, encoding, 1, 1, 4096); - } - - public JavaCharStream(java.io.InputStream dstream) - { - this(dstream, 1, 1, 4096); - } - - public void ReInit(java.io.InputStream dstream, String encoding, int startline, - int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException - { - ReInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize); - } - - public void ReInit(java.io.InputStream dstream, int startline, - int startcolumn, int buffersize) - { - ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize); - } - public void ReInit(java.io.InputStream dstream, String encoding, int startline, - int startcolumn) throws java.io.UnsupportedEncodingException - { - ReInit(dstream, encoding, startline, startcolumn, 4096); - } - public void ReInit(java.io.InputStream dstream, int startline, - int startcolumn) - { - ReInit(dstream, startline, startcolumn, 4096); - } - public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException - { - ReInit(dstream, encoding, 1, 1, 4096); - } - - public void ReInit(java.io.InputStream dstream) - { - ReInit(dstream, 1, 1, 4096); - } - - public String GetImage() - { - if (bufpos >= tokenBegin) - return new String(buffer, tokenBegin, bufpos - tokenBegin + 1); - else - return new String(buffer, tokenBegin, bufsize - tokenBegin) + - new String(buffer, 0, bufpos + 1); - } - - public char[] GetSuffix(int len) - { - char[] ret = new char[len]; - - if ((bufpos + 1) >= len) - System.arraycopy(buffer, bufpos - len + 1, ret, 0, len); - else - { - System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0, - len - bufpos - 1); - System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1); - } - - return ret; - } - - public void Done() - { - nextCharBuf = null; - buffer = null; - bufline = null; - bufcolumn = null; - } - - public void adjustBeginLineColumn(int newLine, int newCol) - { - int start = tokenBegin; - int len; - - if (bufpos >= tokenBegin) - { - len = bufpos - tokenBegin + inBuf + 1; - } - else - { - len = bufsize - tokenBegin + bufpos + 1 + inBuf; - } - - int i = 0, j = 0, k = 0; - int nextColDiff = 0, columnDiff = 0; - - while (i < len && bufline[j = start % bufsize] == bufline[k = ++start % bufsize]) - { - bufline[j] = newLine; - nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j]; - bufcolumn[j] = newCol + columnDiff; - columnDiff = nextColDiff; - i++; - } - - if (i < len) - { - bufline[j] = newLine++; - bufcolumn[j] = newCol + columnDiff; - - while (i++ < len) - { - if (bufline[j = start % bufsize] != bufline[++start % bufsize]) - bufline[j] = newLine++; - else - bufline[j] = newLine; - } - } - - line = bufline[j]; - column = bufcolumn[j]; - } - -} -/* JavaCC - OriginalChecksum=92a8b68bea3fb806dee0bf9f5f49e7c4 (do not edit this line) */ diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/ParseException.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/ParseException.java deleted file mode 100755 index 4b33e461..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/ParseException.java +++ /dev/null @@ -1,136 +0,0 @@ -/* Generated By:JavaCC: Do not edit this line. ParseException.java Version 5.0 */ -/* JavaCCOptions:KEEP_LINE_COL=null */ -package edu.cmu.sphinx.jsgf.parser; - -/* - * This exception is thrown when parse errors are encountered. - * You can explicitly create objects of this exception type by - * calling the method generateParseException in the generated - * parser. - * - * You can modify this class to customize your error reporting - * mechanisms so long as you retain the public fields. - */ -@SuppressWarnings("all") -public class ParseException extends Exception { - - private static final long serialVersionUID = 1L; - - public ParseException(Token currentTokenVal, - int[][] expectedTokenSequencesVal, - String[] tokenImageVal - ) - { - super(initialise(currentTokenVal, expectedTokenSequencesVal, tokenImageVal)); - currentToken = currentTokenVal; - expectedTokenSequences = expectedTokenSequencesVal; - tokenImage = tokenImageVal; - } - - public ParseException() { - super(); - } - - public ParseException(String message) { - super(message); - } - - - public Token currentToken; - - public int[][] expectedTokenSequences; - - public String[] tokenImage; - - private static String initialise(Token currentToken, - int[][] expectedTokenSequences, - String[] tokenImage) { - String eol = System.getProperty("line.separator", "\n"); - StringBuffer expected = new StringBuffer(); - int maxSize = 0; - for (int i = 0; i < expectedTokenSequences.length; i++) { - if (maxSize < expectedTokenSequences[i].length) { - maxSize = expectedTokenSequences[i].length; - } - for (int j = 0; j < expectedTokenSequences[i].length; j++) { - expected.append(tokenImage[expectedTokenSequences[i][j]]).append(' '); - } - if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) { - expected.append("..."); - } - expected.append(eol).append(" "); - } - String retval = "Encountered \""; - Token tok = currentToken.next; - for (int i = 0; i < maxSize; i++) { - if (i != 0) retval += " "; - if (tok.kind == 0) { - retval += tokenImage[0]; - break; - } - retval += " " + tokenImage[tok.kind]; - retval += " \""; - retval += add_escapes(tok.image); - retval += " \""; - tok = tok.next; - } - retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn; - retval += "." + eol; - if (expectedTokenSequences.length == 1) { - retval += "Was expecting:" + eol + " "; - } else { - retval += "Was expecting one of:" + eol + " "; - } - retval += expected.toString(); - return retval; - } - - protected String eol = System.getProperty("line.separator", "\n"); - - static String add_escapes(String str) { - StringBuffer retval = new StringBuffer(); - char ch; - for (int i = 0; i < str.length(); i++) { - switch (str.charAt(i)) - { - case 0 : - continue; - case '\b': - retval.append("\\b"); - continue; - case '\t': - retval.append("\\t"); - continue; - case '\n': - retval.append("\\n"); - continue; - case '\f': - retval.append("\\f"); - continue; - case '\r': - retval.append("\\r"); - continue; - case '\"': - retval.append("\\\""); - continue; - case '\'': - retval.append("\\\'"); - continue; - case '\\': - retval.append("\\\\"); - continue; - default: - if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) { - String s = "0000" + Integer.toString(ch, 16); - retval.append("\\u" + s.substring(s.length() - 4, s.length())); - } else { - retval.append(ch); - } - continue; - } - } - return retval.toString(); - } - -} -/* JavaCC - OriginalChecksum=1dcccf441da02fe67292661367446e03 (do not edit this line) */ diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/Token.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/Token.java deleted file mode 100755 index 0be248bf..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/Token.java +++ /dev/null @@ -1,108 +0,0 @@ -/* Generated By:JavaCC: Do not edit this line. Token.java Version 5.0 */ -/* JavaCCOptions:TOKEN_EXTENDS=,KEEP_LINE_COL=null,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ -package edu.cmu.sphinx.jsgf.parser; - -/* - * Describes the input token stream. - */ - -@SuppressWarnings("all") -public class Token implements java.io.Serializable { - - /* - * The version identifier for this Serializable class. - * Increment only if the serialized form of the - * class changes. - */ - private static final long serialVersionUID = 1L; - - /* - * An integer that describes the kind of this token. This numbering - * system is determined by JavaCCParser, and a table of these numbers is - * stored in the file ...Constants.java. - */ - public int kind; - - /* The line number of the first character of this Token. */ - public int beginLine; - /* The column number of the first character of this Token. */ - public int beginColumn; - /* The line number of the last character of this Token. */ - public int endLine; - /* The column number of the last character of this Token. */ - public int endColumn; - - /* - * The string image of the token. - */ - public String image; - - /* - * A reference to the next regular (non-special) token from the input - * stream. If this is the last token from the input stream, or if the - * token manager has not read tokens beyond this one, this field is - * set to null. This is true only if this token is also a regular - * token. Otherwise, see below for a description of the contents of - * this field. - */ - public Token next; - - /* - * This field is used to access special tokens that occur prior to this - * token, but after the immediately preceding regular (non-special) token. - * If there are no such special tokens, this field is set to null. - * When there are more than one such special token, this field refers - * to the last of these special tokens, which in turn refers to the next - * previous special token through its specialToken field, and so on - * until the first special token (whose specialToken field is null). - * The next fields of special tokens refer to other special tokens that - * immediately follow it (without an intervening regular token). If there - * is no such token, this field is null. - */ - public Token specialToken; - - /* - * An optional attribute value of the Token. - * Tokens which are not used as syntactic sugar will often contain - * meaningful values that will be used later on by the compiler or - * interpreter. This attribute value is often different from the image. - * Any subclass of Token that actually wants to return a non-null value can - * override this method as appropriate. - */ - public Object getValue() { - return null; - } - - public Token() {} - - public Token(int kind) - { - this(kind, null); - } - - public Token(int kind, String image) - { - this.kind = kind; - this.image = image; - } - - public String toString() - { - return image; - } - - public static Token newToken(int ofKind, String image) - { - switch(ofKind) - { - default : return new Token(ofKind, image); - } - } - - public static Token newToken(int ofKind) - { - return newToken(ofKind, null); - } - -} -/* JavaCC - OriginalChecksum=8ff98df8abd1e386f171b2d65a9a675d (do not edit this line) */ diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/TokenMgrError.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/TokenMgrError.java deleted file mode 100755 index af0d91bf..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/parser/TokenMgrError.java +++ /dev/null @@ -1,120 +0,0 @@ -/* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 5.0 */ -/* JavaCCOptions: */ -package edu.cmu.sphinx.jsgf.parser; - -/* Token Manager Error. */ -@SuppressWarnings("all") -public class TokenMgrError extends Error -{ - - /* - * The version identifier for this Serializable class. - * Increment only if the serialized form of the - * class changes. - */ - private static final long serialVersionUID = 1L; - - /* - * Ordinals for various reasons why an Error of this type can be thrown. - */ - - /* - * Lexical error occurred. - */ - static final int LEXICAL_ERROR = 0; - - /* - * An attempt was made to create a second instance of a static token manager. - */ - static final int STATIC_LEXER_ERROR = 1; - - /* - * Tried to change to an invalid lexical state. - */ - static final int INVALID_LEXICAL_STATE = 2; - - /* - * Detected (and bailed out of) an infinite loop in the token manager. - */ - static final int LOOP_DETECTED = 3; - - /* - * Indicates the reason why the exception is thrown. It will have - * one of the above 4 values. - */ - int errorCode; - - /* - * Replaces unprintable characters by their escaped (or unicode escaped) - * equivalents in the given string - */ - protected static final String addEscapes(String str) { - StringBuffer retval = new StringBuffer(); - char ch; - for (int i = 0; i < str.length(); i++) { - switch (str.charAt(i)) - { - case 0 : - continue; - case '\b': - retval.append("\\b"); - continue; - case '\t': - retval.append("\\t"); - continue; - case '\n': - retval.append("\\n"); - continue; - case '\f': - retval.append("\\f"); - continue; - case '\r': - retval.append("\\r"); - continue; - case '\"': - retval.append("\\\""); - continue; - case '\'': - retval.append("\\\'"); - continue; - case '\\': - retval.append("\\\\"); - continue; - default: - if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) { - String s = "0000" + Integer.toString(ch, 16); - retval.append("\\u" + s.substring(s.length() - 4, s.length())); - } else { - retval.append(ch); - } - continue; - } - } - return retval.toString(); - } - - protected static String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) { - return("Lexical error at line " + - errorLine + ", column " + - errorColumn + ". Encountered: " + - (EOFSeen ? " " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int)curChar + "), ") + - "after : \"" + addEscapes(errorAfter) + "\""); - } - - public String getMessage() { - return super.getMessage(); - } - - public TokenMgrError() { - } - - public TokenMgrError(String message, int reason) { - super(message); - errorCode = reason; - } - - public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar, int reason) { - this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason); - } -} -/* JavaCC - OriginalChecksum=4cdc97d5578e9618475d56bd4cdf2fb2 (do not edit this line) */ diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRule.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRule.java deleted file mode 100755 index b0cfbc8b..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRule.java +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Copyright 1998-2009 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.jsgf.rule; - -public class JSGFRule { - - public String ruleName; - public JSGFRule parent; - - @Override - public String toString() { - return ruleName; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRuleAlternatives.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRuleAlternatives.java deleted file mode 100755 index 778ab5e9..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRuleAlternatives.java +++ /dev/null @@ -1,109 +0,0 @@ -/** - * Copyright 1998-2009 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.jsgf.rule; - -import java.util.List; - -public class JSGFRuleAlternatives extends JSGFRule { - protected List rules; - protected List weights; - - public JSGFRuleAlternatives() { - } - - public JSGFRuleAlternatives(List rules) { - setRules(rules); - weights = null; - } - - public JSGFRuleAlternatives(List rules, List weights) - throws IllegalArgumentException { - assert (rules.size() == weights.size()); - setRules(rules); - setWeights(weights); - } - - public void append(JSGFRule rule) { - assert rule != null; - rules.add(rule); - if (weights != null) - weights.add(1.0f); - } - - public List getRules() { - return rules; - } - - public List getWeights() { - return weights; - } - - public void setRules(List rules) { - if ((weights != null) && (rules.size() != weights.size())) { - weights = null; - } - this.rules = rules; - } - - public void setWeights(List newWeights) - throws IllegalArgumentException { - if ((newWeights == null) || (newWeights.size() == 0)) { - weights = null; - return; - } - - if (newWeights.size() != rules.size()) { - throw new IllegalArgumentException( - "weights/rules array length mismatch"); - } - float f = 0.0F; - - for (Float w : newWeights) { - if (Float.isNaN(w)) - throw new IllegalArgumentException("illegal weight value: NaN"); - if (Float.isInfinite(w)) - throw new IllegalArgumentException( - "illegal weight value: infinite"); - if (w < 0.0D) { - throw new IllegalArgumentException( - "illegal weight value: negative"); - } - f += w; - } - - if (f <= 0.0D) { - throw new IllegalArgumentException( - "illegal weight values: all zero"); - } - weights = newWeights; - } - - @Override - public String toString() { - if (rules == null || rules.size() == 0) { - return ""; - } - StringBuilder sb = new StringBuilder(); - - for (int i = 0; i < rules.size(); ++i) { - if (i > 0) - sb.append(" | "); - - if (weights != null) - sb.append("/" + weights.get(i) + "/ "); - - JSGFRule r = rules.get(i); - if (rules.get(i) instanceof JSGFRuleAlternatives) - sb.append("( ").append(r).append(" )"); - else { - sb.append(r); - } - } - return sb.toString(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRuleCount.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRuleCount.java deleted file mode 100755 index 469024cb..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRuleCount.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * Copyright 1998-2009 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.jsgf.rule; - -public class JSGFRuleCount extends JSGFRule { - protected JSGFRule rule; - protected int count; - - public static int OPTIONAL = 2; - public static int ONCE_OR_MORE = 3; - public static int ZERO_OR_MORE = 4; - - public JSGFRuleCount() { - setRule(null); - setCount(OPTIONAL); - } - - public JSGFRuleCount(JSGFRule rule, int count) { - setRule(rule); - setCount(count); - } - - public int getCount() { - return count; - } - - public JSGFRule getRule() { - return rule; - } - - public void setCount(int count) { - if ((count != OPTIONAL) && (count != ZERO_OR_MORE) - && (count != ONCE_OR_MORE)) { - return; - } - this.count = count; - } - - public void setRule(JSGFRule rule) { - this.rule = rule; - } - - @Override - public String toString() { - if (count == OPTIONAL) { - return '[' + rule.toString() + ']'; - } - String str = null; - - if ((rule instanceof JSGFRuleToken) || (rule instanceof JSGFRuleName)) - str = rule.toString(); - else { - str = '(' + rule.toString() + ')'; - } - - if (count == ZERO_OR_MORE) - return str + " *"; - if (count == ONCE_OR_MORE) { - return str + " +"; - } - return str + "???"; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRuleName.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRuleName.java deleted file mode 100755 index 46354eca..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRuleName.java +++ /dev/null @@ -1,152 +0,0 @@ -/** - * Copyright 1998-2009 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.jsgf.rule; - -import java.util.StringTokenizer; - -public class JSGFRuleName extends JSGFRule { - - protected String fullRuleName; - - protected String packageName; - protected String simpleGrammarName; - protected String simpleRuleName; - - public String resolvedRuleName; - - public static JSGFRuleName NULL = new JSGFRuleName("NULL"); - - public static JSGFRuleName VOID = new JSGFRuleName("VOID"); - - public JSGFRuleName() { - this("NULL"); - } - - public JSGFRuleName(String name) { - // System.out.println ("Building rule name " + name); - setRuleName(name); - } - - public String getFullGrammarName() { - // System.out.println ("Getting full grammar name from " + fullRuleName); - if (packageName != null) { - return packageName + "." + simpleGrammarName; - } - // System.out.println ("Result is " + simpleGrammarName); - return simpleGrammarName; - } - - public String getPackageName() { - return packageName; - } - - public String getRuleName() { - return fullRuleName; - } - - public String getSimpleGrammarName() { - return simpleGrammarName; - } - - public String getSimpleRuleName() { - return simpleRuleName; - } - - public boolean isLegalRuleName() { - return isLegalRuleName(fullRuleName); - } - - public static boolean isLegalRuleName(String name) { - if (name == null) { - return false; - } - name = stripRuleName(name); - - if (name.endsWith(".*")) { - name = name.substring(0, name.length() - 2); - } - - if (name.length() == 0) { - return false; - } - - if ((name.startsWith(".")) || (name.endsWith(".")) - || (name.indexOf("..") >= 0)) { - return false; - } - - StringTokenizer localStringTokenizer = new StringTokenizer(name, "."); - - while (localStringTokenizer.hasMoreTokens()) { - String str = localStringTokenizer.nextToken(); - - int i = str.length(); - - if (i == 0) - return false; - - for (int j = 0; j < i; ++j) { - if (!(isRuleNamePart(str.charAt(j)))) - return false; - } - } - return true; - } - - public static boolean isRuleNamePart(char c) { - if (Character.isJavaIdentifierPart(c)) { - return true; - } - return ((c == '!') || (c == '#') || (c == '%') - || (c == '&') || (c == '(') - || (c == ')') || (c == '+') - || (c == ',') || (c == '-') - || (c == '/') || (c == ':') - || (c == ';') || (c == '=') - || (c == '@') || (c == '[') - || (c == '\\') || (c == ']') - || (c == '^') || (c == '|') || (c == '~')); - } - - public void setRuleName(String ruleName) { - String strippedName = stripRuleName(ruleName); - fullRuleName = strippedName; - - int j = strippedName.lastIndexOf('.'); - - if (j < 0) { - packageName = null; - simpleGrammarName = null; - simpleRuleName = strippedName; - } else { - int i = strippedName.lastIndexOf('.', j - 1); - - if (i < 0) { - packageName = null; - simpleGrammarName = strippedName.substring(0, j); - simpleRuleName = strippedName.substring(j + 1); - } else { - packageName = strippedName.substring(0, i); - simpleGrammarName = strippedName.substring(i + 1, j); - simpleRuleName = strippedName.substring(j + 1); - } - } - } - - public static String stripRuleName(String name) { - if ((name.startsWith("<")) && (name.endsWith(">"))) { - return name.substring(1, name.length() - 1); - } - return name; - } - - @Override - public String toString() { - return "<" + fullRuleName + ">"; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRuleSequence.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRuleSequence.java deleted file mode 100755 index ab83fd9f..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRuleSequence.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * Copyright 1998-2009 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.jsgf.rule; - -import java.util.List; - -public class JSGFRuleSequence extends JSGFRule { - protected List rules; - - public JSGFRuleSequence() { - setRules(null); - } - - public JSGFRuleSequence(List rules) { - setRules(rules); - } - - public void append(JSGFRule rule) { - if (rules == null) { - throw new NullPointerException("null rule to append"); - } - rules.add(rule); - } - - public List getRules() { - return rules; - } - - public void setRules(List rules) { - this.rules = rules; - } - - @Override - public String toString() { - if (rules.size() == 0) { - return ""; - } - StringBuilder sb = new StringBuilder(); - - for (int i = 0; i < rules.size(); ++i) { - if (i > 0) - sb.append(' '); - - JSGFRule r = rules.get(i); - if ((r instanceof JSGFRuleAlternatives) || (r instanceof JSGFRuleSequence)) - sb.append("( ").append(r).append(" )"); - else { - sb.append(r); - } - } - return sb.toString(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRuleTag.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRuleTag.java deleted file mode 100755 index 92781d1d..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRuleTag.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * Copyright 1998-2009 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.jsgf.rule; - -public class JSGFRuleTag extends JSGFRule { - protected JSGFRule rule; - protected String tag; - - public JSGFRuleTag() { - setRule(null); - setTag(null); - } - - public JSGFRuleTag(JSGFRule rule, String tag) { - setRule(rule); - setTag(tag); - } - - private String escapeTag(String tag) { - StringBuilder stringBuilder = new StringBuilder(tag); - - if ((tag.indexOf('}') >= 0) || (tag.indexOf('\\') >= 0) - || (tag.indexOf('{') >= 0)) { - for (int i = stringBuilder.length() - 1; i >= 0; --i) { - int j = stringBuilder.charAt(i); - if ((j == '\\') || (j == '}') || (j == '{')) { - stringBuilder.insert(i, '\\'); - } - } - } - return stringBuilder.toString(); - } - - public JSGFRule getRule() { - return rule; - } - - public String getTag() { - return tag; - } - - public void setRule(JSGFRule rule) { - this.rule = rule; - } - - public void setTag(String tag) { - if (tag == null) - this.tag = ""; - else - this.tag = tag; - } - - @Override - public String toString() { - String str = " {" + escapeTag(tag) + "}"; - - if ((rule instanceof JSGFRuleToken) || (rule instanceof JSGFRuleName)) { - return rule.toString() + str; - } - return "(" + rule.toString() + ")" + str; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRuleToken.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRuleToken.java deleted file mode 100755 index 437ee125..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/jsgf/rule/JSGFRuleToken.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * Copyright 1998-2009 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.jsgf.rule; - -public class JSGFRuleToken extends JSGFRule { - protected String text; - - public JSGFRuleToken() { - setText(null); - } - - public JSGFRuleToken(String text) { - setText(text); - } - - private boolean containsWhiteSpace(String text) { - for (int i = 0; i < text.length(); ++i) { - if (Character.isWhitespace(text.charAt(i))) - return true; - } - return false; - } - - public String getText() { - return text; - } - - public void setText(String text) { - this.text = text; - } - - @Override - public String toString() { - if ((containsWhiteSpace(text)) || (text.indexOf('\\') >= 0) - || (text.indexOf('"') >= 0)) { - StringBuilder stringBuilder = new StringBuilder(text); - - for (int j = stringBuilder.length() - 1; j >= 0; --j) { - int i; - i = stringBuilder.charAt(j); - if ((i == '"') || (i == '\\')) { - stringBuilder.insert(j, '\\'); - } - } - stringBuilder.insert(0, '"'); - stringBuilder.append('"'); - - return stringBuilder.toString(); - } - return text; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/HMMSearchState.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/HMMSearchState.java deleted file mode 100755 index db6ecdde..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/HMMSearchState.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist; - -import edu.cmu.sphinx.linguist.acoustic.HMMState; - -/** Represents a single HMM state in a language search space */ -public interface HMMSearchState extends SearchState { - - /** - * Gets the hmm state - * - * @return the hmm state - */ - HMMState getHMMState(); - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/Linguist.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/Linguist.java deleted file mode 100755 index f3f82b38..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/Linguist.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist; - -import edu.cmu.sphinx.util.props.Configurable; -import edu.cmu.sphinx.util.props.S4Double; - -import java.io.IOException; - -/** - * The linguist is responsible for representing and managing the search space for the decoder. The role of the linguist - * is to provide, upon request, the search graph that is to be used by the decoder. The linguist is a generic interface - * that provides language model services. - *

    - * The main role of any linguist is to represent the search space for the decoder. The search space can be retrieved by - * a SearchManager via a call to getSearchGraph. This method returns a SearchGraph. The initial state in - * the search graph can be retrieved via a call to getInitialState Successor states can be retrieved via - * calls to SearchState.getSuccessors().. There are a number of search state subinterfaces that are used to - * indicate different types of states in the search space: - *

    • WordSearchState - represents a word in the search space.
    • UnitSearchState - represents a - * unit in the search space
    • HMMSearchState represents an HMM state in the search space - *
    - * A linguist has a great deal of latitude about the order in which it returns states. For instance a 'flat' linguist - * may return a WordState at the beginning of a word, while a 'tree' linguist may return WordStates at the ending of a - * word. Likewise, a linguist may omit certain state types completely (such as a unit state). Some Search Managers may - * want to know a priori the order in which different state types will be generated by the linguist. The method - * SearchGraph.getNumStateOrder() can be used to retrieve the number of state types that will be returned - * by the linguist. The method SearchState.getOrder() returns the ranking for a particular state. - *

    - * Depending on the vocabulary size and topology, the search space represented by the linguist may include a very large - * number of states. Some linguists will generate the search states dynamically, that is, the object representing a - * particular state in the search space is not created until it is needed by the SearchManager. SearchManagers often - * need to be able to determine if a particular state has been entered before by comparing states. Because SearchStates - * may be generated dynamically, the SearchState.equals() call (as opposed to the reference equals '==' - * method) should be used to determine if states are equal. The states returned by the linguist will generally provide - * very efficient implementations of equals and hashCode. This will allow a SearchManager to - * maintain collections of states in HashMaps efficiently. - *

    - * The lifecycle of a linguist is as follows: - *

      - *
    • The linguist is created by the configuration manager - *
    • The linguist is given an opportunity to register its properties via a call to its register method. - *
    • The linguist is given a new set of properties via the newProperties call. A well written linguist - * should be prepared to respond to newProperties call at any time. - *
    • The allocate method is called. During this call the linguist generally allocates resources such as - * acoustic and language models. This can often take a significant amount of time. A well-written linguist will be able - * to deal with multiple calls to allocate. This can happen if a linguist is shared by multiple search - * managers. - *
    • The getSearchGraph method is called by the search to retrieve the search graph that is used to - * guide the decoding/search. This method is typically called at the beginning of each recognition. The linguist should - * endeavor to return the search graph as quickly as possible to reduce any recognition latency. Some linguists will - * pre-generate the search graph in the allocate method, and only need to return a reference to the search - * graph, while other linguists may dynamically generate the search graph on each call. Also note that some linguists - * may change the search graph between calls so a search manager should always get a new search graph before the start - * of each recognition. - *
    • The startRecognition method is called just before recognition starts. This gives the linguist the - * opportunity to prepare for the recognition task. Some linguists may keep caches of search states that need to be - * primed or flushed. Note however that if a linguist depends on startRecognition or - * stopRecognition it is likely to not be a reentrant linguist which could limit its usefulness in some - * multi-threaded environments. - *
    • The stopRecognition method is called just after recognition completes. This gives the linguist the - * opportunity to cleanup after the recognition task. Some linguists may keep caches of search states that need to be - * primed or flushed. Note however that if a linguist depends on startRecognition or - * stopRecognition it is likely to not be a reentrant linguist which could limit its usefulness in some - * multi-threaded environments. - *
    - */ -public interface Linguist extends Configurable { - - /** Word insertion probability property */ - @S4Double(defaultValue = 1.0) - public final static String PROP_WORD_INSERTION_PROBABILITY = "wordInsertionProbability"; - - /** Unit insertion probability property */ - @S4Double(defaultValue = 1.0) - public final static String PROP_UNIT_INSERTION_PROBABILITY = "unitInsertionProbability"; - - /** Silence insertion probability property */ - @S4Double(defaultValue = 1.0) - public final static String PROP_SILENCE_INSERTION_PROBABILITY = "silenceInsertionProbability"; - - /** Filler insertion probability property */ - @S4Double(defaultValue = 1.0) - public final static String PROP_FILLER_INSERTION_PROBABILITY = "fillerInsertionProbability"; - - /** The property that defines the language weight for the search */ - @S4Double(defaultValue = 1.0) - public final static String PROP_LANGUAGE_WEIGHT = "languageWeight"; - - - /** - * Retrieves search graph. The search graph represents the search space to be used to guide the search. - *

    - * Implementor's note: This method is typically called at the beginning of each recognition and therefore should be - * - * @return the search graph - */ - public SearchGraph getSearchGraph(); - - - /** - * Called before a recognition. This method gives a linguist the opportunity to prepare itself before a recognition - * begins. - *

    - * Implementor's Note - Some linguists (or underlying lanaguge or acoustic models) may keep caches or pools that - * need to be initialzed before a recognition. A linguist may implement this method to perform such initialization. - * Note however, that an ideal linguist will, once allocated, be state-less. This will allow the linguist to be - * shared by multiple simulataneous searches. Reliance on a 'startRecognition' may prevent a linguist from being - * used in a multi-threaded search. - */ - public void startRecognition(); - - - /** - * Called after a recognition. This method gives a linguist the opportunity to clean up after a recognition has been - * completed. - *

    - * Implementor's Note - Some linguists (or underlying lanaguge or acoustic models) may keep caches or pools that - * need to be flushed after a recognition. A linguist may implement this method to perform such flushing. Note - * however, that an ideal linguist will once allocated, be state-less. This will allow the linguist to be shared by - * multiple simulataneous searches. Reliance on a 'stopRecognition' may prevent a linguist from being used in a - * multi-threaded search. - */ - public void stopRecognition(); - - - /** - * Allocates the linguist. Resources allocated by the linguist are allocated here. This method may take many seconds - * to complete depending upon the linguist. - *

    - * Implementor's Note - A well written linguist will allow allocate to be called multiple times without harm. This - * will allow a linguist to be shared by multiple search managers. - * - * @throws IOException if an IO error occurs - */ - public void allocate() throws IOException; - - - /** - * Deallocates the linguist. Any resources allocated by this linguist are released. - *

    - * Implementor's Note - if the linguist is being shared by multiple searches, the deallocate should only actually - * deallocate things when the last call to deallocate is made. Two approaches for dealing with this: - *

    - * (1) Keep an allocation counter that is incremented during allocate and decremented during deallocate. Only when - * the counter reaches zero should the actually deallocation be performed. - *

    - * (2) Do nothing in dellocate - just the the GC take care of things - * - * @throws IOException if an IO error occurs - */ - public void deallocate() throws IOException; -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/LinguistProcessor.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/LinguistProcessor.java deleted file mode 100755 index 10b70a13..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/LinguistProcessor.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 1999-2003 Carnegie Mellon University. - * Portions Copyright 2002-2003 Sun Microsystems, Inc. - * Portions Copyright 2002-2003 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist; - -import edu.cmu.sphinx.util.props.*; - -/** A standard interface for a linguist processor */ -public class LinguistProcessor implements Configurable, Runnable { - - /** The property that defines the name of the linguist to process */ - @S4Component(type = Linguist.class) - public final static String PROP_LINGUIST = "linguist"; - - - // ---------------------------- - // Configuration data - // ---------------------------- - private String name; - private Linguist linguist; - - public LinguistProcessor( Linguist linguist ) { - this.linguist = linguist; - } - - public LinguistProcessor( ) { - } - - /* (non-Javadoc) - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - public void newProperties(PropertySheet ps) throws PropertyException { - linguist = (Linguist) ps.getComponent(PROP_LINGUIST); - } - - - /* (non-Javadoc) - * @see edu.cmu.sphinx.util.props.Configurable#getName() - */ - public String getName() { - return name; - } - - - /* (non-Javadoc) - * @see java.lang.Runnable#run() - */ - public void run() { - - } - - - /** - * Returns the configured lingust - * - * @return the linguist - */ - protected Linguist getLinguist() { - return linguist; - } -} - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/SearchGraph.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/SearchGraph.java deleted file mode 100755 index c55fac8b..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/SearchGraph.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist; - -/** Represents a search graph */ -public interface SearchGraph { - - /** - * Retrieves initial search state - * - * @return the set of initial search state - */ - SearchState getInitialState(); - - - /** - * Returns the number of different state types maintained in the search graph - * - * @return the number of different state types - */ - int getNumStateOrder(); - - /** - * @return order of words and data tokens - */ - boolean getWordTokenFirst(); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/SearchState.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/SearchState.java deleted file mode 100755 index 4d26786d..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/SearchState.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist; - -/** Represents a single state in a language search space */ -public interface SearchState { - - /** - * Gets a successor to this search state - * - * @return the set of successors - */ - SearchStateArc[] getSuccessors(); - - - /** - * Determines if this is an emitting state - * - * @return true if the state is an emitting state - */ - boolean isEmitting(); - - - /** - * Determines if this is a final state - * - * @return true if the state is a final state - */ - boolean isFinal(); - - - /** - * Returns a pretty version of the string representation for this object - * - * @return a pretty string - */ - String toPrettyString(); - - - /** - * Returns a unique signature for this state - * - * @return the signature for the state - */ - String getSignature(); - - - /** - * Gets the word history for this state - * - * @return the word history - */ - WordSequence getWordHistory(); - - - /** - * Returns the lex tree state - * - * @return the lex tree state - */ - Object getLexState(); - - - /** - * Returns the order of this particular state - * - * @return the state order for this state - */ - int getOrder(); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/SearchStateArc.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/SearchStateArc.java deleted file mode 100755 index 0b6c8db6..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/SearchStateArc.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist; - - -/** Represents a single state in a language search space */ -public interface SearchStateArc { - - /** - * Gets a successor to this search state - * - * @return the successor state - */ - SearchState getState(); - - - /** - * Gets the composite probability of entering this state - * - * @return the log probability - */ - float getProbability(); - - - /** - * Gets the language probability of entering this state - * - * @return the log probability - */ - float getLanguageProbability(); - - /** - * Gets the insertion probability of entering this state - * - * @return the log probability - */ - float getInsertionProbability(); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/UnitSearchState.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/UnitSearchState.java deleted file mode 100755 index 3b42efbe..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/UnitSearchState.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist; - -import edu.cmu.sphinx.linguist.acoustic.Unit; - -/** Represents a unit state in a search space */ -public interface UnitSearchState extends SearchState { - - /** - * Gets the unit - * - * @return the unit - */ - public Unit getUnit(); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/WordSearchState.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/WordSearchState.java deleted file mode 100755 index 7f2ee490..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/WordSearchState.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist; - -import edu.cmu.sphinx.linguist.dictionary.Pronunciation; - -/** Represents a single word state in a language search space */ -public interface WordSearchState extends SearchState { - - /** - * Gets the word (as a pronunciation) - * - * @return the word - */ - Pronunciation getPronunciation(); - - - /** - * Returns true if this WordSearchState indicates the start of a word. Returns false if this WordSearchState - * indicates the end of a word. - * - * @return true if this WordSearchState indicates the start of a word, false if this WordSearchState indicates the - * end of a word - */ - public boolean isWordStart(); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/WordSequence.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/WordSequence.java deleted file mode 100755 index 2677638c..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/WordSequence.java +++ /dev/null @@ -1,273 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist; - -import static java.lang.Math.min; - -import java.util.*; - -import edu.cmu.sphinx.linguist.dictionary.Dictionary; -import edu.cmu.sphinx.linguist.dictionary.Word; - -/** - * This class can be used to keep track of a word sequence. This class is an - * immutable class. It can never be modified once it is created (except, - * perhaps for transient, cached things such as a precalculated hashcode). - */ - -public final class WordSequence implements Comparable { - - /** - * Comparator that compares two sequences by their oldest part. - */ - public final static Comparator OLDEST_COMPARATOR = - new Comparator() { - public int compare(WordSequence o1, WordSequence o2) { - return o1.getOldest().compareTo(o2.getOldest()); - } - }; - - /** an empty word sequence, that is, it has no words. */ - public final static WordSequence EMPTY = new WordSequence(0); - - public static WordSequence asWordSequence(final Dictionary dictionary, - String... words) { - Word[] dictWords = new Word[words.length]; - for (int i = 0; i < words.length; i++) { - dictWords[i] = dictionary.getWord(words[i]); - } - return new WordSequence(dictWords); - } - - private final Word[] words; - private transient int hashCode = -1; - - /** - * Constructs a word sequence with the given depth. - * - * @param size the maximum depth of the word history - */ - private WordSequence(int size) { - words = new Word[size]; - } - - /** - * Constructs a word sequence with the given word IDs - * - * @param words the word IDs of the word sequence - */ - public WordSequence(Word... words) { - this(Arrays.asList(words)); - } - - /** - * Constructs a word sequence from the list of words - * - * @param list the list of words - */ - public WordSequence(List list) { - this.words = list.toArray(new Word[list.size()]); - check(); - } - - private void check() { - for (Word word : words) - if (word == null) - throw new Error("WordSequence should not have null Words."); - } - - /** - * Returns a new word sequence with the given word added to the sequence - * - * @param word the word to add to the sequence - * @param maxSize the maximum size of the generated sequence - * @return a new word sequence with the word added (but trimmed to - * maxSize). - */ - public WordSequence addWord(Word word, int maxSize) { - if (maxSize <= 0) { - return EMPTY; - } - int nextSize = ((size() + 1) > maxSize) ? maxSize : (size() + 1); - WordSequence next = new WordSequence(nextSize); - int nextIndex = nextSize - 1; - int thisIndex = size() - 1; - next.words[nextIndex--] = word; - - while (nextIndex >= 0 && thisIndex >= 0) { - next.words[nextIndex--] = this.words[thisIndex--]; - } - next.check(); - - return next; - } - - /** - * Returns the oldest words in the sequence (the newest word is omitted) - * - * @return the oldest words in the sequence, with the newest word omitted - */ - public WordSequence getOldest() { - WordSequence next = EMPTY; - - if (size() >= 1) { - next = new WordSequence(words.length - 1); - System.arraycopy(this.words, 0, next.words, 0, next.words.length); - } - return next; - } - - /** - * Returns the newest words in the sequence (the old word is omitted) - * - * @return the newest words in the sequence with the oldest word omitted - */ - public WordSequence getNewest() { - WordSequence next = EMPTY; - - if (size() >= 1) { - next = new WordSequence(words.length - 1); - System.arraycopy(this.words, 1, next.words, 0, next.words.length); - } - return next; - } - - /** - * Returns a word sequence that is no longer than the given size, that is - * filled in with the newest words from this sequence - * - * @param maxSize the maximum size of the sequence - * @return a new word sequence, trimmed to maxSize. - */ - public WordSequence trim(int maxSize) { - if (maxSize <= 0 || size() == 0) { - return EMPTY; - } else if (maxSize == size()) { - return this; - } else { - if (maxSize > size()) { - maxSize = size(); - } - WordSequence next = new WordSequence(maxSize); - int thisIndex = words.length - 1; - int nextIndex = next.words.length - 1; - - for (int i = 0; i < maxSize; i++) { - next.words[nextIndex--] = this.words[thisIndex--]; - } - return next; - } - } - - /** - * Returns the n-th word in this sequence - * - * @param n which word to return - * @return the n-th word in this sequence - */ - public Word getWord(int n) { - assert n < words.length; - return words[n]; - } - - /** - * Returns the number of words in this sequence - * - * @return the number of words - */ - public int size() { - return words.length; - } - - /** - * Returns a string representation of this word sequence. The format is: - * [ID_0][ID_1][ID_2]. - * - * @return the string - */ - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - for (Word word : words) - sb.append('[').append(word).append(']'); - return sb.toString(); - } - - /** - * Calculates the hashcode for this object - * - * @return a hashcode for this object - */ - @Override - public int hashCode() { - if (hashCode == -1) { - int code = 123; - for (int i = 0; i < words.length; i++) { - code += words[i].hashCode() * (2 * i + 1); - } - hashCode = code; - } - return hashCode; - } - - /** - * compares the given object to see if it is identical to this WordSequence - * - * @param object the object to compare this to - * @return true if the given object is equal to this object - */ - @Override - public boolean equals(Object object) { - if (this == object) - return true; - if (!(object instanceof WordSequence)) - return false; - - return Arrays.equals(words, ((WordSequence) object).words); - } - - /** - * @param startIndex start index - * @param stopIndex stop index - * @return a subsequence with both startIndex and - * stopIndex exclusive. - */ - public WordSequence getSubSequence(int startIndex, int stopIndex) { - List subseqWords = new ArrayList(); - - for (int i = startIndex; i < stopIndex; i++) { - subseqWords.add(getWord(i)); - } - - return new WordSequence(subseqWords); - } - - /** - * @return the words of the WordSequence. - */ - public Word[] getWords() { - return getSubSequence(0, size()).words; // create a copy to keep the - // class immutable - } - - public int compareTo(WordSequence other) { - int n = min(words.length, other.words.length); - for (int i = 0; i < n; ++i) { - if (!words[i].equals(other.words[i])) { - return words[i].compareTo(other.words[i]); - } - } - - return words.length - other.words.length; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/AcousticModel.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/AcousticModel.java deleted file mode 100755 index 8f81a518..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/AcousticModel.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.acoustic; - -import edu.cmu.sphinx.util.props.Configurable; - -import java.io.IOException; -import java.util.Iterator; -import java.util.Properties; -import edu.cmu.sphinx.util.props.S4String; - -/** Represents the generic interface to the Acoustic Model for sphinx4 */ -public interface AcousticModel extends Configurable { - - /** The directory where the acoustic model data can be found. */ - @S4String(defaultValue = ".") - public final static String PROP_LOCATION = "location"; - - /** - * Gets this acoustic model ready to use, allocating all necessary resources. - * - * @throws IOException if the model could not be loaded - */ - public void allocate() throws IOException; - - - /** Deallocates previously allocated resources */ - public void deallocate(); - - - /** - * Returns the name of this AcousticModel, or null if it has no name. - * - * @return the name of this AcousticModel, or null if it has no name - */ - public String getName(); - - - /** - * Given a unit, returns the HMM that best matches the given unit. If exactMatch is false and an exact match is not - * found, then different word positions are used. If any of the contexts are non-silence filler units. a silence - * filler unit is tried instead. - * - * @param unit the unit of interest - * @param position the position of the unit of interest - * @param exactMatch if true, only an exact match is acceptable. - * @return the HMM that best matches, or null if no match could be found. - */ - public HMM lookupNearestHMM(Unit unit, HMMPosition position, - boolean exactMatch); - - - /** - * Returns an iterator that can be used to iterate through all the HMMs of the acoustic model - * - * @return an iterator that can be used to iterate through all HMMs in the model. The iterator returns objects of - * type HMM. - */ - public Iterator getHMMIterator(); - - - /** - * Returns an iterator that can be used to iterate through all the CI units in the acoustic model - * - * @return an iterator that can be used to iterate through all CI units. The iterator returns objects of type - * Unit - */ - public Iterator getContextIndependentUnitIterator(); - - - /** - * Returns the size of the left context for context dependent units - * - * @return the left context size - */ - public int getLeftContextSize(); - - - /** - * Returns the size of the right context for context dependent units - * - * @return the left context size - */ - public int getRightContextSize(); - - - /** - * Returns the properties of this acoustic model. - * - * @return the properties of this acoustic model - */ - public Properties getProperties(); -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/Context.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/Context.java deleted file mode 100755 index f9973dc3..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/Context.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.acoustic; - -import java.io.Serializable; - -/** Represents the context for a unit */ -@SuppressWarnings("serial") -public class Context implements Serializable { - - /** Represents an empty context */ - public final static Context EMPTY_CONTEXT = new Context(); - - - /** No instantiations allowed */ - protected Context() { - } - - - /** - * Checks to see if there is a partial match with the given context. For a simple context such as this we always - * match. - * - * @param context the context to check - * @return true if there is a partial match - */ - public boolean isPartialMatch(Context context) { - return true; - } - - - /** Provides a string representation of a context */ - @Override - public String toString() { - return ""; - } - - - /** - * Determines if an object is equal to this context - * - * @param o the object to check - * @return true if the objects are equal - */ - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } else if (o instanceof Context) { - Context otherContext = (Context) o; - return toString().equals(otherContext.toString()); - } else { - return false; - } - } - - - /** - * calculates a hashCode for this context. Since we defined an equals for context, we must define a hashCode as - * well - * - * @return the hashcode for this object - */ - @Override - public int hashCode() { - return toString().hashCode(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/HMM.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/HMM.java deleted file mode 100755 index c2224081..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/HMM.java +++ /dev/null @@ -1,70 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.acoustic; - - -/** - * Represents a hidden-markov-model. An HMM consists of a unit (context dependent or independent), a transition matrix - * from state to state, and a sequence of senones associated with each state. This representation of an HMM is a - * specialized left-to-right markov model. No backward transitions are allowed. - */ - -public interface HMM { - - /** - * Gets the unit associated with this HMM - * - * @return the unit associated with this HMM - */ - public Unit getUnit(); - - - /** - * Gets the base unit associated with this HMM - * - * @return the unit associated with this HMM - */ - public Unit getBaseUnit(); - - - /** - * @param which the state of interest - * @return hmm state - */ - public HMMState getState(int which); - - - /** - * Returns the order of the HMM - * - * @return the order of the HMM - */ - public int getOrder(); - - - /** - * Retrieves the position of this HMM. - * - * @return the position for this HMM - */ - public HMMPosition getPosition(); - - - /** - * Gets the initial states (with probabilities) for this HMM - * - * @return the set of arcs that transition to the initial states for this HMM - */ - public HMMState getInitialState(); -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/HMMPool.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/HMMPool.java deleted file mode 100755 index a922edb0..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/HMMPool.java +++ /dev/null @@ -1,399 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.acoustic; - -import edu.cmu.sphinx.util.TimerPool; - -import java.util.Iterator; -import java.util.Map; -import java.util.EnumMap; -import java.util.logging.Level; -import java.util.logging.Logger; - - -/** - * The HMMPool provides the ability to manage units via small integer IDs. Context Independent units and context - * dependent units can be converted to an ID. IDs can be used to quickly retrieve a unit or an hmm associated with the - * unit. This class operates under the constraint that context sizes are exactly one, which is generally only valid for - * large vocabulary tasks. - */ - -public class HMMPool { - - private AcousticModel model; - private Unit[] unitTable; - private Map hmmTable; - private int numCIUnits; - private Logger logger; - private UnitManager unitManager; - - - protected HMMPool(){ - } - - /** - * Constructs a HMMPool object. - * - * @param model the model to use for the pool - * @param logger the logger for messages - * @param unitManager manager for units - */ - public HMMPool(AcousticModel model, Logger logger, UnitManager unitManager) - { - this.logger = logger; - int maxCIUnits = 0; - this.model = model; - this.unitManager = unitManager; - - if (model.getLeftContextSize() != 1) - throw new Error("LexTreeLinguist: Unsupported left context size"); - - if (model.getRightContextSize() != 1) - throw new Error("LexTreeLinguist: Unsupported right context size"); - - // count CI units: - for (Iterator i = model.getContextIndependentUnitIterator(); i.hasNext();) { - Unit unit = i.next(); - logger.fine("CI unit " + unit); - if (unit.getBaseID() > maxCIUnits) { - maxCIUnits = unit.getBaseID(); - } - } - - numCIUnits = maxCIUnits + 1; - - unitTable = new Unit[numCIUnits * numCIUnits * numCIUnits]; - - for (Iterator i = model.getHMMIterator(); i.hasNext();) { - HMM hmm = i.next(); - Unit unit = hmm.getUnit(); - int id = getID(unit); - unitTable[id] = unit; - if (logger.isLoggable(Level.FINER)) { - logger.finer("Unit " + unit + " id " + id); - } - } - - // build up the hmm table to allow quick access to the hmms - hmmTable = new EnumMap(HMMPosition.class); - for (HMMPosition position : HMMPosition.values()) { - HMM[] hmms = new HMM[unitTable.length]; - hmmTable.put(position, hmms); - for (int j = 1; j < unitTable.length; j++) { - Unit unit = unitTable[j]; - if (unit == null) { - unit = synthesizeUnit(j); - } - if (unit != null) { - hmms[j] = model.lookupNearestHMM(unit, position, false); - assert hmms[j] != null; - } - } - } - } - - - public AcousticModel getModel() { - return model; - } - - - /** - * Given a unit ID, generate a full context dependent unit that will allow us to look for a suitable hmm - * - * @param id the unit id - * @return a context dependent unit for the ID - */ - private Unit synthesizeUnit(int id) { - int centralID = getCentralUnitID(id); - int leftID = getLeftUnitID(id); - int rightID = getRightUnitID(id); - - if (centralID == 0 || leftID == 0 || rightID == 0) { - return null; - } - - Unit centralUnit = unitTable[centralID]; - Unit leftUnit = unitTable[leftID]; - Unit rightUnit = unitTable[rightID]; - - assert centralUnit != null; - assert leftUnit != null; - assert rightUnit != null; - - Unit[] lc = new Unit[1]; - Unit[] rc = new Unit[1]; - lc[0] = leftUnit; - rc[0] = rightUnit; - LeftRightContext context = LeftRightContext.get(lc, rc); - - Unit unit = unitManager.getUnit( - centralUnit.getName(), centralUnit.isFiller(), - context); - - if (logger.isLoggable(Level.FINER)) { - logger.finer("Missing " + getUnitNameFromID(id) - + " returning " + unit); - } - return unit; - } - - - /** - * Returns the number of CI units - * - * @return the number of CI Units - */ - public int getNumCIUnits() { - return numCIUnits; - } - - - /** - * Gets the unit for the given id - * - * @param unitID the id for the unit - * @return the unit associated with the ID - */ - public Unit getUnit(int unitID) { - return unitTable[unitID]; - } - - - /** - * Given a unit id and a position, return the HMM associated with the - * unit/position. - * - * @param unitID the id of the unit - * @param position the position within the word - * @return the hmm associated with the unit/position - */ - public HMM getHMM(int unitID, HMMPosition position) { - return hmmTable.get(position)[unitID]; - } - - - /** - * given a unit return its ID - * - * @param unit the unit - * @return an ID - */ - public int getID(Unit unit) { - if (unit.isContextDependent()) { - LeftRightContext context = (LeftRightContext) unit.getContext(); - assert context.getLeftContext().length == 1; - assert context.getRightContext().length == 1; - return buildID(getSimpleUnitID(unit), - getSimpleUnitID(context.getLeftContext()[0]), - getSimpleUnitID(context.getRightContext()[0])); - } else { - return getSimpleUnitID(unit); - } - } - - - /** - * Returns a context independent ID - * - * @param unit the unit of interest - * @return the ID of the central unit (ignoring any context) - */ - private int getSimpleUnitID(Unit unit) { - return unit.getBaseID(); - } - - - public boolean isValidID(int unitID) { - return unitID >= 0 && - unitID < unitTable.length && - unitTable[unitID] != null; - } - - - /** - * Builds an id from the given unit and its left and right unit ids - * - * @param unitID the id of the central unit - * @param leftID the id of the left context unit - * @param rightID the id of the right context unit - * @return the id for the context dependent unit - */ - public int buildID(int unitID, int leftID, int rightID) { - // special case ... if the unitID is associated with - // filler than we have no context ... so use the CI - // form - - if (unitTable[unitID] == null) - return -1; - - int id; - if (unitTable[unitID].isFiller()) { - id = unitID; - } else { - id = unitID * (numCIUnits * numCIUnits) - + (leftID * numCIUnits) - + rightID; - } - - assert id < unitTable.length; - - return id; - } - - - /** - * Given a unit id extract the left context unit id - * - * @param id the unit id - * @return the unit id of the left context (0 means no left context) - */ - private int getLeftUnitID(int id) { - return (id / numCIUnits) % numCIUnits; - } - - - /** - * Given a unit id extract the right context unit id - * - * @param id the unit id - * @return the unit id of the right context (0 means no right context) - */ - private int getRightUnitID(int id) { - return id % numCIUnits; - } - - - /** - * Given a unit id extract the central unit id - * - * @param id the unit id - * @return the central unit id - */ - private int getCentralUnitID(int id) { - return id / (numCIUnits * numCIUnits); - } - - - /** - * Given an ID, build up a name for display - * - * @return the name baed on the ID - */ - private String getUnitNameFromID(int id) { - int centralID = getCentralUnitID(id); - int leftID = getLeftUnitID(id); - int rightID = getRightUnitID(id); - - String cs = unitTable[centralID] == null ? "(" + centralID + ')' : - unitTable[centralID].toString(); - String ls = unitTable[leftID] == null ? ("(" + leftID + ')') : - unitTable[leftID].toString(); - String rs = unitTable[rightID] == null ? "(" + rightID + ')' : - unitTable[rightID].toString(); - - return cs + '[' + ls + ',' + rs + ']'; - } - - /** - * Retrieves an HMM for a unit in context. If there is no direct match, the - * nearest match will be used. Note that we are currently only dealing with, - * at most, single unit left and right contexts. - * - * @param base - * the base CI unit - * @param lc - * the left context - * @param rc - * the right context - * @param pos - * the position of the base unit within the word - * @return the HMM. (This should never return null) - */ - public HMM getHMM(Unit base, Unit lc, Unit rc, HMMPosition pos) { - int id = -1; - int bid = getID(base); - int lid = getID(lc); - int rid = getID(rc); - - if (!isValidID(bid)) { - logger.severe("Bad HMM Unit: " + base.getName()); - return null; - } - if (!isValidID(lid)) { - logger.severe("Bad HMM Unit: " + lc.getName()); - return null; - } - if (!isValidID(rid)) { - logger.severe("Bad HMM Unit: " + rc.getName()); - return null; - } - id = buildID(bid, lid, rid); - if (id < 0) { - logger.severe("Unable to build HMM Unit ID for " + base.getName() - + " lc=" + lc.getName() + " rc=" + rc.getName()); - return null; - } - HMM hmm = getHMM(id, pos); - if (hmm == null) { - logger.severe("Missing HMM Unit for " + base.getName() + " lc=" - + lc.getName() + " rc=" + rc.getName()); - } - - return hmm; - } - - - - /** Dumps out info about this pool */ - public void dumpInfo() { - logger.info("Max CI Units " + numCIUnits); - logger.info("Unit table size " + unitTable.length); - - if (logger.isLoggable(Level.FINER)) { - for (int i = 0; i < unitTable.length; i++) { - logger.finer(String.valueOf(i) + ' ' + unitTable[i]); - } - } - } - - - /** - * A quick and dirty benchmark to get an idea how long the HMM lookups will take. This experiment shows that on a - * 1GHZ sparc system, the lookup takes a little less than 1uSec. This is probably fast enough. - */ - - static final HMMPosition[] pos = { - HMMPosition.BEGIN, HMMPosition.END, HMMPosition.SINGLE, - HMMPosition.INTERNAL}; - - static final int[] ids = {9206, 9320, 9620, 9865, 14831, 15836}; - - void benchmark() { - int nullCount = 0; - System.out.println("benchmarking ..."); - TimerPool.getTimer(this,"hmmPoolBenchmark").start(); - - for (int i = 0; i < 1000000; i++) { - int id = ids[i % ids.length]; - HMMPosition position = pos[i % pos.length]; - HMM hmm = getHMM(id, position); - if (hmm == null) { - nullCount++; - } - } - TimerPool.getTimer(this,"hmmPoolBenchmark").stop(); - System.out.println("null count " + nullCount); - } -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/HMMPosition.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/HMMPosition.java deleted file mode 100755 index ec1f3a15..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/HMMPosition.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.acoustic; - -/** - * Defines possible positions of HMMs. Note that even though the positions are defined to be within words, some - * recognizers may classify positions in terms of other elements besides words. - */ -public enum HMMPosition { - - BEGIN ('b'), // HMM is at the beginning position of the word - END ('e'), // HMM is at the end position of the word - SINGLE ('s'), // HMM is at the beginning and the end of the word - INTERNAL ('i'), // HMM is completely internal to the word - UNDEFINED ('-'); // HMM is at an undefined position in the word - - private static final HMMPosition[] posByRep; - static { - int maxChar = 0; - for (HMMPosition pos : values()) // determine max char to use as index - if (pos.rep.charAt(0) > maxChar) - maxChar = pos.rep.charAt(0); - posByRep = new HMMPosition[maxChar + 1]; - for (HMMPosition pos : values()) // cache HMMPositions according to rep - posByRep[pos.rep.charAt(0)] = pos; - } - - private final String rep; - - /** - * Looks up an HMMPosition based upon its representation - * - * @param rep the string representation - * @return the HMMPosition represented by rep or null if not found - */ - private HMMPosition(char rep) { - this.rep = String.valueOf(rep); - } - - /** - * Looks up an HMMPosition based upon its representation - * - * @param rep the string representation - * @return the HMMPosition represented by rep or null if not found - */ - public static HMMPosition lookup(String rep) { - return rep == null || rep.isEmpty() ? null : posByRep[rep.charAt(0)]; - } - - /** - * Determines if this position is an end word position - * - * @return true if this is an end of word position - */ - public boolean isWordEnd() { - return this == SINGLE || this == END; - } - - /** - * Determines if this position is word beginning position - * - * @return true if this is a word beginning position - */ - public boolean isWordBeginning() { - return this == SINGLE || this == BEGIN; - } - - /** - * Returns a string representation of this object - * - * @return the string representation - */ - @Override - public String toString() { - return rep; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/HMMState.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/HMMState.java deleted file mode 100755 index cd3feb03..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/HMMState.java +++ /dev/null @@ -1,89 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.acoustic; - -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.MixtureComponent; - -/** Represents a single state in an HMM */ -public interface HMMState { - - /** - * Gets the HMM associated with this state - * - * @return the HMM - */ - public HMM getHMM(); - - /** - * Returns the mixture components associated with this Gaussian - * - * @return the array of mixture components - */ - public MixtureComponent[] getMixtureComponents(); - - /** - * Gets the id of the mixture - * - * @return the id - */ - public long getMixtureId(); - - /** - * - * @return the mixture weights vector - */ - public float[] getLogMixtureWeights(); - - /** - * Gets the state - * - * @return the state - */ - public int getState(); - - - /** - * Gets the score for this HMM state - * - * @param data the data to be scored - * @return the acoustic score for this state. - */ - public float getScore(Data data); - - public float[] calculateComponentScore(Data data); - - /** - * Determines if this HMMState is an emitting state - * - * @return true if the state is an emitting state - */ - public boolean isEmitting(); - - - /** - * Retrieves the state of successor states for this state - * - * @return the set of successor state arcs - */ - public HMMStateArc[] getSuccessors(); - - - /** - * Determines if this state is an exit state of the HMM - * - * @return true if the state is an exit state - */ - public boolean isExitState(); -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/HMMStateArc.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/HMMStateArc.java deleted file mode 100755 index c1648536..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/HMMStateArc.java +++ /dev/null @@ -1,65 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.acoustic; - - -/** - * Represents a transition to single state in an HMM - *

    - * All probabilities are maintained in linear base - */ -public class HMMStateArc { - - private final HMMState hmmState; - private final float probability; - - - /** - * Constructs an HMMStateArc - * - * @param hmmState destination state for this arc - * @param probability the probability for this transition - */ - public HMMStateArc(HMMState hmmState, float probability) { - this.hmmState = hmmState; - this.probability = probability; - } - - - /** - * Gets the HMM associated with this state - * - * @return the HMM - */ - public HMMState getHMMState() { - return hmmState; - } - - - /** - * Gets log transition probability - * - * @return the probability in the LogMath log domain - */ - public float getLogProbability() { - return probability; - } - - - /** returns a string representation of the arc */ - @Override - public String toString() { - return "HSA " + hmmState + " prob " + probability; - } -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/LeftRightContext.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/LeftRightContext.java deleted file mode 100755 index 7fef5fa0..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/LeftRightContext.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.acoustic; - -/** Represents the context for a unit */ -@SuppressWarnings("serial") -public class LeftRightContext extends Context { - - String stringRepresentation; - final Unit[] leftContext; - final Unit[] rightContext; - - /** - * Creates a LeftRightContext - * - * @param leftContext the left context or null if no left context - * @param rightContext the right context or null if no right context - */ - private LeftRightContext(Unit[] leftContext, Unit[] rightContext) { - this.leftContext = leftContext; - this.rightContext = rightContext; - } - - /** Provides a string representation of a context */ - @Override - public String toString() { - return getContextName(leftContext) + ',' + getContextName(rightContext); - } - - /** - * Factory method for creating a left/right context - * - * @param leftContext the left context or null if no left context - * @param rightContext the right context or null if no right context - * @return a left right context - */ - public static LeftRightContext get(Unit[] leftContext, Unit[] rightContext) { - return new LeftRightContext(leftContext, rightContext); - } - - /** - * Retrieves the left context for this unit - * - * @return the left context - */ - public Unit[] getLeftContext() { - return leftContext; - } - - /** - * Retrieves the right context for this unit - * - * @return the right context - */ - public Unit[] getRightContext() { - return rightContext; - } - - /** - * Gets the context name for a particular array of units - * - * @param context the context - * @return the context name - */ - public static String getContextName(Unit[] context) { - if (context == null) - return "*"; - if (context.length == 0) - return "(empty)"; - StringBuilder sb = new StringBuilder(); - for (Unit unit : context) { - sb.append(unit == null ? null : unit.getName()).append('.'); - } - sb.setLength(sb.length() - 1); // remove last period - return sb.toString(); - } - - /** - * Checks to see if there is a partial match with the given context. If both contexts are LeftRightContexts then a - * left or right context that is null is considered a wild card and matches anything, othewise the contexts must - * match exactly. Anything matches the Context.EMPTY_CONTEXT - * - * @param context the context to check - * @return true if there is a partial match - */ - @Override - public boolean isPartialMatch(Context context) { - if (context instanceof LeftRightContext) { - LeftRightContext lrContext = (LeftRightContext)context; - Unit[] lc = lrContext.getLeftContext(); - Unit[] rc = lrContext.getRightContext(); - - return (lc == null || leftContext == null || Unit.isContextMatch(lc, leftContext)) - && (rc == null || rightContext == null || Unit.isContextMatch(rc, rightContext)); - } - return context == Context.EMPTY_CONTEXT && leftContext == null && rightContext == null; - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/Unit.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/Unit.java deleted file mode 100755 index 4000c143..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/Unit.java +++ /dev/null @@ -1,226 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist.acoustic; - -import java.util.Arrays; - -/** Represents a unit of speech. Units may represent phones, words or any other suitable unit */ - -public class Unit { - - public final static Unit[] EMPTY_ARRAY = new Unit[0]; - - private final String name; - private final boolean filler; - private final boolean silence; - private final int baseID; - private final Unit baseUnit; - private final Context context; - - private volatile String key; - - /** - * Constructs a context independent unit. Constructors are package private, use the UnitManager to create and access - * units. - * - * @param name the name of the unit - * @param filler true if the unit is a filler unit - * @param id the base id for the unit - */ - Unit(String name, boolean filler, int id) { - this.name = name; - this.filler = filler; - this.silence = name.equals(UnitManager.SILENCE_NAME); - this.baseID = id; - this.baseUnit = this; - this.context = Context.EMPTY_CONTEXT; - } - - /** - * Constructs a context dependent unit. Constructors are package private, use the UnitManager to create and access - * units. - * - * @param baseUnit the base id for the unit - * @param filler true if the unit is a filler unit - * @param context the context for this unit - */ - Unit(Unit baseUnit, boolean filler, Context context) { - this.name = baseUnit.getName(); - this.filler = filler; - this.silence = name.equals(UnitManager.SILENCE_NAME); - this.baseID = baseUnit.getBaseID(); - this.baseUnit = baseUnit; - this.context = context; - } - - /** - * Gets the name for this unit - * - * @return the name for this unit - */ - public String getName() { - return name; - } - - /** - * Determines if this unit is a filler unit - * - * @return true if the unit is a filler unit - */ - public boolean isFiller() { - return filler; - } - - /** - * Determines if this unit is the silence unit - * - * @return true if the unit is the silence unit - */ - public boolean isSilence() { - return silence; - } - - /** - * Gets the base ID for this unit - * - * @return the id - */ - public int getBaseID() { - return baseID; - } - - /** - * Gets the base unit associated with this HMM - * - * @return the unit associated with this HMM - */ - public Unit getBaseUnit() { - return baseUnit; - } - - /** - * Returns the context for this unit - * - * @return the context for this unit (or null if context independent) - */ - public Context getContext() { - return context; - } - - /** - * Determines if this unit is context dependent - * - * @return true if the unit is context dependent - */ - public boolean isContextDependent() { - return getContext() != Context.EMPTY_CONTEXT; - } - - /** gets the key for this unit - * @return the key - */ - private String getKey() { - return toString(); - } - - /** - * Checks to see of an object is equal to this unit - * - * @param o the object to check - * @return true if the objects are equal - */ - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } else if (o instanceof Unit) { - Unit otherUnit = (Unit) o; - return getKey().equals(otherUnit.getKey()); - } else { - return false; - } - } - - /** - * calculates a hashCode for this unit. Since we defined an equals for Unit, we must define a hashCode as well - * - * @return the hashcode for this object - */ - @Override - public int hashCode() { - return getKey().hashCode(); - } - - /** - * Converts to a string - * - * @return string version - */ - @Override - public String toString() { - if (key == null) { - if (context == Context.EMPTY_CONTEXT) { - key = (filler ? "*" : "") + name; - } else { - key = (filler ? "*" : "") + name + '[' + context + ']'; - } - } - return key; - } - - /** - * Checks to see if the given unit with associated contexts is a partial match for this unit. Zero, One or both - * contexts can be null. A null context matches any context - * - * @param name the name of the unit - * @param context the context to match against - * @return true if this unit matches the name and non-null context - */ - public boolean isPartialMatch(String name, Context context) { - return getName().equals(name) && context.isPartialMatch(this.context); - } - - /** - * Creates and returns an empty context with the given size. The context is padded with SIL filler - * - * @param size the size of the context - * @return the context - */ - - public static Unit[] getEmptyContext(int size) { - Unit[] context = new Unit[size]; - Arrays.fill(context, UnitManager.SILENCE); - return context; - } - - /** - * Checks to see that there is 100% overlap in the given contexts - * - * @param a context to check for a match - * @param b context to check for a match - * @return true if the contexts match - */ - public static boolean isContextMatch(Unit[] a, Unit[] b) { - if (a == null || b == null) { - return a == b; - } else if (a.length != b.length) { - return false; - } else { - for (int i = 0; i < a.length; i++) { - if (!a[i].getName().equals(b[i].getName())) { - return false; - } - } - return true; - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/UnitManager.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/UnitManager.java deleted file mode 100755 index 7b474417..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/UnitManager.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist.acoustic; - -import edu.cmu.sphinx.util.props.Configurable; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; - -import java.util.HashMap; -import java.util.Map; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** Manages the set of units for a recognizer */ -public class UnitManager implements Configurable { - - /** The name for the silence unit */ - public final static String SILENCE_NAME = "SIL"; - private final static int SILENCE_ID = 1; - - /** The silence unit */ - public final static Unit SILENCE = new Unit(SILENCE_NAME, true, SILENCE_ID); - - private final Map ciMap = new HashMap(); - { - ciMap.put(SILENCE_NAME, SILENCE); - } - - private int nextID = SILENCE_ID + 1; - private Logger logger; - - public UnitManager() { - logger = Logger.getLogger(getClass().getName()); - } - - public void newProperties(PropertySheet ps) throws PropertyException { - logger = ps.getLogger(); - } - - /** - * Gets or creates a unit from the unit pool - * - * @param name the name of the unit - * @param filler true if the unit is a filler unit - * @param context the context for this unit - * @return the unit - */ - public Unit getUnit(String name, boolean filler, Context context) { - Unit unit = ciMap.get(name); - if (context == Context.EMPTY_CONTEXT) { - if (unit == null) { - unit = new Unit(name, filler, nextID++); - ciMap.put(name, unit); - if (logger != null && logger.isLoggable(Level.INFO)) { - logger.info("CI Unit: " + unit); - } - } - } else { - unit = new Unit(unit, filler, context); - } - return unit; - } - - /** - * Gets or creates a unit from the unit pool - * - * @param name the name of the unit - * @param filler true if the unit is a filler unit - * @return the unit - */ - public Unit getUnit(String name, boolean filler) { - return getUnit(name, filler, Context.EMPTY_CONTEXT); - } - - /** - * Gets or creates a unit from the unit pool - * - * @param name the name of the unit - * @return the unit - */ - public Unit getUnit(String name) { - return getUnit(name, false, Context.EMPTY_CONTEXT); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/CompositeSenone.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/CompositeSenone.java deleted file mode 100755 index 9801e2e6..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/CompositeSenone.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate; - -import edu.cmu.sphinx.frontend.Data; - -import java.util.Collection; - - -/** - * Represents a composite senone. A composite senone consists of a set of all possible {@link Senone senones} for a - * given state. CompositeSenones are used when the exact context of a senone is not known. The CompositeSenone - * represents all the possible senones. - *

    - * This class currently only needs to be public for testing purposes. - *

    - * Note that all scores are maintained in LogMath log base - */ - -@SuppressWarnings("serial") -public class CompositeSenone extends ScoreCachingSenone { - - private final static int MAX_SENONES = 20000; - private final static boolean wantMaxScore = true; - private final Senone[] senones; - private final float weight; - - /** - * a factory method that creates a CompositeSenone from a list of senones. - * - * @param senoneCollection the Collection of senones - * @param weight weigth - * @return a composite senone - */ - public static CompositeSenone create(Collection senoneCollection, - float weight) { - return new CompositeSenone(senoneCollection.toArray(new Senone[senoneCollection.size()]), weight); - } - - - /** - * Constructs a CompositeSenone given the set of constituent senones - * - * @param senones the set of constituent senones - * @param weight weigth for composition - */ - public CompositeSenone(Senone[] senones, float weight) { - this.senones = senones; - this.weight = weight; - System.out.print(" " + senones.length); - } - - - /** - * Dumps this senone - * - * @param msg annotation for the dump - */ - public void dump(String msg) { - System.out.println(" CompositeSenone " + msg + ": "); - for (Senone senone : senones) { - senone.dump(" "); - } - } - - - /** - * Calculates the composite senone score. Typically this is the best score for all of the constituent senones - */ - @Override - public float calculateScore(Data feature) { - float logScore; - if (wantMaxScore) { - logScore = -Float.MAX_VALUE; - for (Senone senone : senones) { - logScore = Math.max(logScore, senone.getScore(feature)); - } - } else { // average score - logScore = 0.0f; - for (Senone senone : senones) { - logScore += senone.getScore(feature); - } - logScore = logScore / senones.length; - } - return logScore + weight; - } - - - /** - * Calculate scores for each component in the senone's distribution. Not yet implemented. - * - * @param feature the current feature - * @return the score for the feature in LogMath - */ - public float[] calculateComponentScore(Data feature) { - assert false : "Not implemented!"; - return null; - } - - - /** - * Returns the set of senones that compose this composite senone. This method is only needed for unit testing. - * - * @return the array of senones. - */ - public Senone[] getSenones() { - return senones; - } - - - /** - * Determines if two objects are equal - * - * @param o the object to compare to this. - * @return true if the objects are equal - */ - @Override - public boolean equals(Object o) { - if (!(o instanceof Senone)) { - return false; - } - Senone other = (Senone) o; - return this.getID() == other.getID(); - } - - - /** - * Returns the hashcode for this object - * - * @return the hashcode - */ - @Override - public int hashCode() { - long id = getID(); - int high = (int) ((id >> 32)); - int low = (int) (id); - return high + low; - } - - - /** - * Gets the ID for this senone - * - * @return the senone id - */ - public long getID() { - long factor = 1L; - long id = 0L; - for (Senone senone : senones) { - id += senone.getID() * factor; - factor = factor * MAX_SENONES; - } - return id; - } - - - /** - * Retrieves a string form of this object - * - * @return the string representation of this object - */ - @Override - public String toString() { - return "senone id: " + getID(); - } - - public MixtureComponent[] getMixtureComponents() { - return null; - } - - - public float[] getLogMixtureWeights() { - return null; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/GaussianMixture.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/GaussianMixture.java deleted file mode 100755 index be218993..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/GaussianMixture.java +++ /dev/null @@ -1,196 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate; - -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.frontend.DoubleData; -import edu.cmu.sphinx.frontend.FloatData; -import edu.cmu.sphinx.util.LogMath; - -/** - * Represents a concrete implementation of a simple {@link Senone senone}. A simple senone is a set of probability - * density functions implemented as a Gaussian mixture. - *

    - * All scores and weights are maintained in LogMath log base. - */ - -@SuppressWarnings("serial") -public class GaussianMixture extends ScoreCachingSenone { - - // these data element in a senone may be shared with other senones - // and therefore should not be written to. - protected GaussianWeights mixtureWeights; - private MixtureComponent[] mixtureComponents; - protected int id; - - protected LogMath logMath; - - - /** - * Creates a new senone from the given components. - * - * @param mixtureWeights the mixture weights for this senone in LogMath log base - * @param mixtureComponents the mixture components for this senone - * @param id id of the mixture - */ - public GaussianMixture(GaussianWeights mixtureWeights, - MixtureComponent[] mixtureComponents, int id) { - - logMath = LogMath.getLogMath(); - this.mixtureComponents = mixtureComponents; - this.mixtureWeights = mixtureWeights; - this.id = id; - } - - - /** - * Dumps this senone. - * - * @param msg annotation message - */ - public void dump(String msg) { - System.out.println(msg + " GaussianMixture: ID " + getID()); - } - - /** - * Determines if two objects are equal - * - * @param o the object to compare to this. - * @return true if the objects are equal - */ - @Override - public boolean equals(Object o) { - if (!(o instanceof Senone)) { - return false; - } - Senone other = (Senone) o; - return this.getID() == other.getID(); - } - - - /** - * Returns the hashcode for this object - * - * @return the hashcode - */ - @Override - public int hashCode() { - long id = getID(); - int high = (int) ((id >> 32)); - int low = (int) (id); - return high + low; - } - - - - public long getID() { - return id; - } - - - /** - * Retrieves a string form of this object - * - * @return the string representation of this object - */ - @Override - public String toString() { - return "senone id: " + getID(); - } - - @Override - public float calculateScore(Data feature) { - if (feature instanceof DoubleData) - System.err.println("DoubleData conversion required on mixture level!"); - - float[] featureVector = FloatData.toFloatData(feature).getValues(); - - float logTotal = LogMath.LOG_ZERO; - for (int i = 0; i < mixtureComponents.length; i++) { - // In linear form, this would be: - // - // Total += Mixture[i].score * MixtureWeight[i] - logTotal = logMath.addAsLinear(logTotal, - mixtureComponents[i].getScore(featureVector) + mixtureWeights.get(id, 0, i)); - } - - return logTotal; - } - - - /** - * Calculates the scores for each component in the senone. - * - * @param feature the feature to score - * @return the LogMath log scores for the feature, one for each component - */ - public float[] calculateComponentScore(Data feature) { - if (feature instanceof DoubleData) - System.err.println("DoubleData conversion required on mixture level!"); - - float[] featureVector = FloatData.toFloatData(feature).getValues(); - - float[] logComponentScore = new float[mixtureComponents.length]; - for (int i = 0; i < mixtureComponents.length; i++) { - // In linear form, this would be: - // - // Total += Mixture[i].score * MixtureWeight[i] - logComponentScore[i] = mixtureComponents[i].getScore(featureVector) + mixtureWeights.get(id, 0, i); - } - - return logComponentScore; - } - - - public MixtureComponent[] getMixtureComponents() { - return mixtureComponents; - } - - - /** @return the dimension of the modeled feature space */ - public int dimension() { - return mixtureComponents[0].getMean().length; - } - - - /** @return the number of component densities of this GaussianMixture. */ - public int numComponents() { - return mixtureComponents.length; - } - - - public float[] getLogMixtureWeights(){ - float[] logWeights = new float[getMixtureComponents().length]; - for (int i = 0; i < logWeights.length; i++) - logWeights[i] = mixtureWeights.get(id, 0, i); - return logWeights; - } - - - /** @return the (linearly scaled) mixture weights of the component densities */ - public float[] getComponentWeights() { - float[] mixWeights = new float[getMixtureComponents().length]; - for (int i = 0; i < mixWeights.length; i++) - mixWeights[i] = (float) logMath.logToLinear(mixtureWeights.get(id, 0, i)); - - return mixWeights; - } - - /** - * @param index of the component - * @return the (log-scaled) mixture weight of the component density - * index */ - public float getLogComponentWeight(int index) { - return mixtureWeights.get(id, 0, index); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/GaussianWeights.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/GaussianWeights.java deleted file mode 100755 index 3037046a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/GaussianWeights.java +++ /dev/null @@ -1,66 +0,0 @@ -/* -* Copyright 2014 Carnegie Mellon University. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate; - -import java.util.logging.Logger; - -/** Structure to store weights for all gaussians in AM. - * Supposed to provide faster access in case of large models */ -public class GaussianWeights { - - private final float[][] weights; - private final int numStates; - private final int gauPerState; - private final int numStreams; - private final String name; - - public GaussianWeights(String name, int numStates, int gauPerState, int numStreams) { - this.numStates = numStates; - this.gauPerState = gauPerState; - this.numStreams = numStreams; - this.name = name; - weights = new float[gauPerState][numStates * numStreams]; - } - - public void put(int stateId, int streamId, float[] gauWeights) { - assert gauWeights.length == gauPerState; - for (int i = 0; i < gauPerState; i++) - weights[i][stateId * numStreams + streamId] = gauWeights[i]; - } - - public float get(int stateId, int streamId, int gaussianId) { - return weights[gaussianId][stateId * numStreams + streamId]; - } - - public int getStatesNum() { - return numStates; - } - - public int getGauPerState() { - return gauPerState; - } - - public int getStreamsNum() { - return numStreams; - } - - public String getName() { - return name; - } - - public void logInfo(Logger logger) { - logger.info("Gaussian weights: " + name + ". Entries: " + numStates * numStreams); - } - - public Pool convertToPool() { - return null; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HMMManager.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HMMManager.java deleted file mode 100755 index 7ada4083..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HMMManager.java +++ /dev/null @@ -1,95 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate; - -import edu.cmu.sphinx.linguist.acoustic.HMM; -import edu.cmu.sphinx.linguist.acoustic.HMMPosition; -import edu.cmu.sphinx.linguist.acoustic.Unit; - -import java.util.*; -import java.util.logging.Logger; - - -/** - * Manages HMMs. This HMMManager groups {@link edu.cmu.sphinx.linguist.acoustic.HMM HMMs} together by their {@link - * edu.cmu.sphinx.linguist.acoustic.HMMPosition position} with the word. - */ -public class HMMManager implements Iterable { - - private final List allHMMs = new ArrayList(); - private final Map> hmmsPerPosition = new EnumMap>(HMMPosition.class); - - public HMMManager () { - for (HMMPosition pos : HMMPosition.values()) - hmmsPerPosition.put(pos, new HashMap()); - } - - /** - * Put an HMM into this manager - * - * @param hmm the hmm to manage - */ - public void put(HMM hmm) { - hmmsPerPosition.get(hmm.getPosition()).put(hmm.getUnit(), hmm); - allHMMs.add(hmm); - } - - - /** - * Retrieves an HMM by position and unit - * - * @param position the position of the HMM - * @param unit the unit that this HMM represents - * @return the HMM for the unit at the given position or null if no HMM at the position could be found - */ - public HMM get(HMMPosition position, Unit unit) { - return hmmsPerPosition.get(position).get(unit); - } - - - /** - * Gets an iterator that iterates through all HMMs - * - * @return an iterator that iterates through all HMMs - */ - public Iterator iterator() { - return allHMMs.iterator(); - } - - - /** - * Returns the number of HMMS in this manager - * - * @return the number of HMMs - */ - private int getNumHMMs() { - int count = 0; - - for (Map map : hmmsPerPosition.values()) { - if (map != null) { - count += map.size(); - } - } - return count; - } - - - /** - * Log information about this manager - * - * @param logger logger to use for this logInfo - */ - public void logInfo(Logger logger) { - logger.info("HMM Manager: " + getNumHMMs() + " hmms"); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HTK/GMMDiag.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HTK/GMMDiag.java deleted file mode 100755 index 2b1e172f..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HTK/GMMDiag.java +++ /dev/null @@ -1,552 +0,0 @@ -/* - * Copyright 2007 LORIA, France. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.linguist.acoustic.tiedstate.HTK; - -import edu.cmu.sphinx.util.LogMath; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.StringTokenizer; - -/** - * This a producer for observations, it outputs the log likelihoods for - * guassians - * - * @author Christophe Cerisara - * - */ - -public class GMMDiag { - public int nT; - public String nom; - public LogMath logMath; - - private int ncoefs; - private int ngauss; - protected float[] weights; - protected float[][] means; - protected float[][] covar; - private float[] logPreComputedGaussianFactor; - protected float[] loglikes; - - public GMMDiag() { - } - - public GMMDiag(int ng, int nc) { - ngauss = ng; - ncoefs = nc; - allocate(); - } - - public int getNgauss() { - return ngauss; - } - - public float getWeight(int i) { - return (float) logMath.logToLinear(weights[i]); - } - - public float getVar(int i, int j) { - return -1f / (2f * covar[i][j]); - } - - public void setWeight(int i, float w) { - if (weights == null) - weights = new float[ngauss]; - weights[i] = logMath.linearToLog(w); - } - - public void setVar(int i, int j, float v) { - if (v <= 0) - // This is not a error, because you can use the GMM just to store - // values and retrieve them later. - // TODO: good constant is not very clean, because we must still have variance > 0 - System.err.println("WARNING: setVar " + v); - covar[i][j] = -1f / (2f * v); - } - - public void setMean(int i, int j, float v) { - means[i][j] = v; - } - - public float getMean(int i, int j) { - return means[i][j]; - } - - /** - * Saves in proprietary format - * @param name name of file to save - */ - public void save(String name) { - try { - PrintWriter fout = new PrintWriter(new FileWriter(name)); - fout.println(ngauss + " " + ncoefs); - for (int i = 0; i < ngauss; i++) { - fout.println("gauss " + i + ' ' + getWeight(i)); - for (int j = 0; j < ncoefs; j++) - fout.print(means[i][j] + " "); - fout.println(); - for (int j = 0; j < ncoefs; j++) - fout.print(getVar(i, j) + " "); - fout.println(); - } - fout.println(nT); - fout.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - /** - * Load from text proprietary format - * @param name filename to load from - */ - public void load(String name) { - try { - BufferedReader fin = new BufferedReader(new FileReader(name)); - String s = fin.readLine(); - String[] ss = s.split(" "); - ngauss = Integer.parseInt(ss[0]); - ncoefs = Integer.parseInt(ss[1]); - allocate(); - for (int i = 0; i < ngauss; i++) { - s = fin.readLine(); - ss = s.split(" "); - if (!ss[0].equals("gauss") || Integer.parseInt(ss[1]) != i) { - System.err.println("Error loading GMM " + s + ' ' + i); - System.exit(1); - } - setWeight(i, Float.parseFloat(ss[2])); - // means - s = fin.readLine(); - ss = s.split(" "); - for (int j = 0; j < ncoefs; j++) { - setMean(i, j, Float.parseFloat(ss[j])); - } - // covariances - s = fin.readLine(); - ss = s.split(" "); - for (int j = 0; j < ncoefs; j++) { - setVar(i, j, Float.parseFloat(ss[j])); - } - } - s = fin.readLine(); - if (s != null) { - // can be added to store the amount of data on which the GMM has been - // learned - nT = Integer.parseInt(s); - } - fin.close(); - precomputeDistance(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public void saveHTK(String nomFich, String nomHMM) { - saveHTK(nomFich, nomHMM, ""); - } - - public PrintWriter saveHTKheader(String nomFich, String parmKind) { - try { - PrintWriter fout = new PrintWriter(new FileWriter(nomFich)); - fout.println("~o"); - fout.println(" tree"); - fout.println(" 1 " + getNcoefs()); - fout.println(" " + getNcoefs() + "" + parmKind - + ""); - fout.println("~r \"rtree_1\""); - fout.println(" 1"); - fout.println(" 1 " + getNgauss()); - return fout; - } catch (IOException e) { - e.printStackTrace(); - return null; - } - } - - public void saveHTKState(PrintWriter fout) { - fout.println(" " + getNgauss()); - for (int i = 1; i <= getNgauss(); i++) { - fout.println(" " + i + ' ' + getWeight(i - 1)); - fout.println(" 1"); - fout.println(" " + getNcoefs()); - for (int j = 0; j < getNcoefs(); j++) { - fout.print(getMean(i - 1, j) + " "); - } - fout.println(); - fout.println(" " + getNcoefs()); - for (int j = 0; j < getNcoefs(); j++) { - fout.print(getVar(i - 1, j) + " "); - } - fout.println(); - } - } - - public void saveHTKtailer(int nstates, PrintWriter fout) { - fout.println(" " + nstates); - // First state is non emitting - for (int j = 0; j < nstates; j++) - fout.print("0 "); - fout.println(); - for (int i = 1; i < nstates - 1; i++) { - for (int j = 0; j < i; j++) - fout.print("0 "); - fout.print("0.5 0.5"); - for (int j = i + 3; j < nstates; j++) - fout.print("0 "); - } - fout.println(); - fout.println("0 0 0"); - fout.println(""); - } - - public void saveHTK(String nomFich, String nomHMM, String parmKind) { - try { - PrintWriter fout = new PrintWriter(new FileWriter(nomFich)); - fout.println("~o"); - fout.println(" tree"); - fout.println(" 1 " + getNcoefs()); - fout.println(" " + getNcoefs() + "" + parmKind - + ""); - fout.println("~r \"rtree_1\""); - fout.println(" 1"); - fout.println(" 1 " + getNgauss()); - fout.println("~h \"" + nomHMM + '\"'); - fout.println(""); - fout.println(" 3"); - fout.println(" 2"); - fout.println(" " + getNgauss()); - for (int i = 1; i <= getNgauss(); i++) { - fout.println(" " + i + ' ' + getWeight(i - 1)); - fout.println(" 1"); - fout.println(" " + getNcoefs()); - for (int j = 0; j < getNcoefs(); j++) { - fout.print(getMean(i - 1, j) + " "); - } - fout.println(); - fout.println(" " + getNcoefs()); - for (int j = 0; j < getNcoefs(); j++) { - fout.print(getVar(i - 1, j) + " "); - } - fout.println(); - } - fout.println(" 3"); - fout.println("0 1 0"); - fout.println("0 0.7 0.3"); - fout.println("0 0 0"); - fout.println(""); - fout.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public void loadHTK(String nom) { - try { - BufferedReader fin = new BufferedReader(new FileReader(nom)); - String s, s2; - StringTokenizer st; - ngauss = 0; - ncoefs = 0; - for (;;) { - s = fin.readLine(); - if (s == null) - break; - if (s.contains("")) { - ngauss++; - if (ncoefs == 0) { - st = new StringTokenizer(s); - st.nextToken(); - ncoefs = Integer.parseInt(st.nextToken()); - } - } - } - fin.close(); - allocate(); - fin = new BufferedReader(new FileReader(nom)); - for (int g = 0;;) { - s = fin.readLine(); - if (s == null) - break; - if (s.contains("")) { - s = fin.readLine(); - st = new StringTokenizer(s); - for (int c = 0; st.hasMoreTokens(); c++) { - s2 = st.nextToken(); - setMean(g, c, Float.parseFloat(s2)); - } - s = fin.readLine(); - if (!s.contains("")) { - fin.close(); - throw new IOException(); - } - s = fin.readLine(); - st = new StringTokenizer(s); - for (int c = 0; st.hasMoreTokens(); c++) { - s2 = st.nextToken(); - setVar(g, c, Float.parseFloat(s2)); - } - g++; - } - } - fin.close(); - precomputeDistance(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public void loadScaleKMeans(String nom) { - String s; - String[] ss; - int ng = 0; - try { - BufferedReader fin = new BufferedReader(new FileReader(nom)); - for (;; ng++) { - s = fin.readLine(); - if (s == null) - break; - } - ngauss = ng / 2; - fin.close(); - fin = new BufferedReader(new FileReader(nom)); - s = fin.readLine(); - ss = s.split(" "); - ncoefs = ss.length - 1; - fin.close(); - fin = new BufferedReader(new FileReader(nom)); - allocate(); - nT = 0; - for (int i = 0; i < ngauss; i++) { - s = fin.readLine(); - ss = s.split(" "); - weights[i] = Float.parseFloat(ss[0]); - nT += weights[i]; - for (int j = 0; j < ncoefs; j++) { - setMean(i, j, Float.parseFloat(ss[j + 1])); - } - s = fin.readLine(); - ss = s.split(" "); - for (int j = 0; j < ncoefs; j++) { - setVar(i, j, Float.parseFloat(ss[j])); - } - } - for (int i = 0; i < ngauss; i++) { - setWeight(i, weights[i] / nT); - } - fin.close(); - precomputeDistance(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - private void allocateWeights() { - logMath = LogMath.getLogMath(); - weights = new float[ngauss]; - for (int i = 0; i < ngauss; i++) { - setWeight(i, 1f / ngauss); - } - } - - public void precomputeDistance() { - for (int gidx = 0; gidx < ngauss; gidx++) { - float fact = 0.0f; - for (int i = 0; i < ncoefs; i++) { - fact += logMath.linearToLog(getVar(gidx, i)); - } - fact += logMath.linearToLog(2.0 * Math.PI) * ncoefs; - logPreComputedGaussianFactor[gidx] = fact * 0.5f; - } - } - - private void allocate() { - if (weights == null) - allocateWeights(); - if (means == null) { - loglikes = new float[ngauss]; - means = new float[ngauss][ncoefs]; - covar = new float[ngauss][ncoefs]; - logPreComputedGaussianFactor = new float[ngauss]; - } - } - - /* - * Log likelihood calculation - */ - - private static final float distFloor = -Float.MAX_VALUE; - - public void computeLogLikes(float[] data) { - float logDval1gauss = 0f; - for (int gidx = 0; gidx < ngauss; gidx++) { - logDval1gauss = 0f; - for (int i = 0; i < data.length; i++) { - float logDiff = data[i] - means[gidx][i]; - logDval1gauss += logDiff * logDiff * covar[gidx][i]; - } - logDval1gauss -= logPreComputedGaussianFactor[gidx]; - if (Float.isNaN(logDval1gauss)) { - System.err.println("gs2 is Nan, converting to 0 debug " + gidx - + ' ' + logPreComputedGaussianFactor[gidx] + ' ' - + means[gidx][0] + ' ' + covar[gidx][0]); - logDval1gauss = LogMath.LOG_ZERO; - } - if (logDval1gauss < distFloor) { - logDval1gauss = distFloor; - } - // Including apriori probability for each gaussian - loglikes[gidx] = weights[gidx] + logDval1gauss; - } - } - - /** - * Calculate log probability of the observation - * must be called AFTER next() ! - * - * @return log likelihood - */ - public float getLogLike() { - float sc = loglikes[0]; - for (int i = 1; i < ngauss; i++) { - sc = logMath.addAsLinear(sc, loglikes[i]); - } - return sc; - } - - /** - * must be called AFTER next() - * - * @return best gaussian - */ - public int getWinningGauss() { - int imax = 0; - for (int i = 1; i < ngauss; i++) { - if (loglikes[i] > loglikes[imax]) - imax = i; - } - return imax; - } - - public int getNcoefs() { - return ncoefs; - } - - /* - * Manipulations with HMMs - */ - - public GMMDiag getMarginal(boolean[] mask) { - int nc = 0; - for (boolean flag : mask) - if (flag) - nc++; - GMMDiag g = new GMMDiag(getNgauss(), nc); - int curc = 0; - for (int j = 0; j < ncoefs; j++) { - if (mask[j]) { - for (int i = 0; i < ngauss; i++) { - g.setMean(i, curc, getMean(i, j)); - g.setVar(i, curc, getVar(i, j)); - } - curc++; - } - } - for (int i = 0; i < ngauss; i++) { - g.setWeight(i, getWeight(i)); - } - g.precomputeDistance(); - return g; - } - - /** - * - * @param g second GMM for the merge - * @param w1 weight of the first GMM for the merge - * @return gaussian - */ - public GMMDiag merge(GMMDiag g, float w1) { - GMMDiag res = new GMMDiag(getNgauss() + g.getNgauss(), getNcoefs()); - for (int i = 0; i < getNgauss(); i++) { - System.arraycopy(means[i], 0, res.means[i], 0, getNcoefs()); - System.arraycopy(covar[i], 0, res.covar[i], 0, getNcoefs()); - res.setWeight(i, getWeight(i) * w1); - } - for (int i = 0; i < g.getNgauss(); i++) { - System.arraycopy(g.means[i], 0, res.means[ngauss + i], 0, - getNcoefs()); - System.arraycopy(g.covar[i], 0, res.covar[ngauss + i], 0, - getNcoefs()); - res.setWeight(ngauss + i, g.getWeight(i) * (1f - w1)); - } - res.precomputeDistance(); - return res; - } - - /** - * extracts ONE gaussian from the GMM - * - * @param i position - * @return gaussian - */ - public GMMDiag getGauss(int i) { - GMMDiag res = new GMMDiag(1, getNcoefs()); - System.arraycopy(means[i], 0, res.means[0], 0, getNcoefs()); - System.arraycopy(covar[i], 0, res.covar[0], 0, getNcoefs()); - res.setWeight(0, 1); - res.precomputeDistance(); - return res; - } - - public void setNom(String s) { - nom = s; - } - - /** - * 2 GMMs are considered to be equal when all of their parameters do not - * differ from more than 1% - * @param g second gmm to compare to - * @return if GMMs are equal - */ - public boolean isEqual(GMMDiag g) { - if (getNgauss() != g.getNgauss()) - return false; - if (getNgauss() != g.getNcoefs()) - return false; - for (int i = 0; i < getNgauss(); i++) { - if (isDiff(getWeight(i), g.getWeight(i))) - return false; - for (int j = 0; j < getNcoefs(); j++) { - if (isDiff(getMean(i, j), g.getMean(i, j))) - return false; - if (isDiff(getVar(i, j), g.getVar(i, j))) - return false; - } - } - return true; - } - - private boolean isDiff(float a, float b) { - return Math.abs(1 - b / a) > 0.01; - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder (); - for (int i = 0; i < getNgauss(); i++) { - sb.append(getMean(i, 0)).append(' ').append(getVar(i, 0)).append( - '\n'); - } - return sb.toString(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HTK/HMMSet.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HTK/HMMSet.java deleted file mode 100755 index 8c7630e0..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HTK/HMMSet.java +++ /dev/null @@ -1,518 +0,0 @@ -/* - * Copyright 2007 LORIA, France. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.linguist.acoustic.tiedstate.HTK; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.util.*; - -/** - * - * @author Christophe Cerisara - */ - -public class HMMSet { - private GMMDiag g; - private int nGaussians; - float[][] trans; - /** - * contains HMMState instances - */ - public final List states; - public final List transitions = new ArrayList(); - public final Map transNames = new HashMap(); - - public Iterator get1phIt() { - Iterator it = new Iterator() { - int cur; - - public void remove() { - } - - public SingleHMM next() { - for (;;) { - if (cur >= hmms.size()) - return null; - SingleHMM hmm = hmms.get(cur++); - if (hmm.getName().indexOf('-') >= 0 - || hmm.getName().indexOf('+') >= 0) - continue; - return hmm; - } - } - - public boolean hasNext() { - return false; - } - }; - return it; - } - - public Iterator get3phIt() { - Iterator it = new Iterator() { - int cur; - - public void remove() { - } - - public SingleHMM next() { - for (;;) { - if (cur >= hmms.size()) - return null; - SingleHMM hmm = hmms.get(cur++); - if (!(hmm.getName().indexOf('-') >= 0 || hmm.getName() - .indexOf('+') >= 0)) - continue; - return hmm; - } - } - - public boolean hasNext() { - return false; - } - }; - return it; - } - - public int getStateIdx(HMMState st) { - return st.gmmidx; - } - - public int getHMMidx(SingleHMM hmm) { - for (int i = 0; i < hmms.size(); i++) { - SingleHMM h = hmms.get(i); - if (h == hmm) - return i; - } - return -1; - } - - public int getNstates() { - return gmms.size(); - } - - public String[] getHMMnames() { - String[] rep = new String[hmms.size()]; - for (int i = 0; i < rep.length; i++) { - SingleHMM h = hmms.get(i); - rep[i] = h.getName(); - } - return rep; - } - - /** - * contains GMMDiag instances - */ - public final List gmms; - /** - * contains HMM instances - */ - public final List hmms; - - public int getNhmms() { - return hmms.size(); - } - - public int getNhmmsMono() { - int n = 0; - for (SingleHMM hmm : hmms) { - if (!(hmm.getName().indexOf('-') >= 0 || hmm.getName().indexOf('+') >= 0)) - n++; - } - return n; - } - - public int getNhmmsTri() { - int n = 0; - for (SingleHMM hmm : hmms) { - if (hmm.getName().indexOf('-') >= 0 - || hmm.getName().indexOf('+') >= 0) - n++; - } - return n; - } - - public int getHMMIndex(SingleHMM h) { - return hmms.indexOf(h); - } - - /** - * @param hmmidx index of the HMM (begins at 0) - * @param stateidx index of the state WITHIN the HMM ! (begins at 1, as in MMF) - * @return index of the state in the vector of all the states of the HMMSet - */ - public int getStateIdx(int hmmidx, int stateidx) { - // TODO: store a table not to recalculate every time - SingleHMM hmm; - int nEmittingStates = 0; - for (int i = 0; i < hmmidx; i++) { - hmm = hmms.get(i); - nEmittingStates += hmm.getNbEmittingStates(); - } - hmm = hmms.get(hmmidx); - for (int i = 1; i < stateidx; i++) { - if (hmm.isEmitting(i)) - nEmittingStates++; - } - if (hmm.isEmitting(stateidx)) - return nEmittingStates; // Don't add 1 since states are counted from - // 0 - else - return -1; - } - - public SingleHMM getHMM(int idx) { - return hmms.get(idx); - } - - public SingleHMM getHMM(String nom) { - SingleHMM h = null; - for (SingleHMM hmm : hmms) { - h = hmm; - if (h.getName().equals(nom)) - break; - } - return h; - } - - public HMMSet() { - states = new ArrayList(); - hmms = new ArrayList(); - gmms = new ArrayList(); - } - - public void loadHTK(String nomFich) { - try { - BufferedReader f = new BufferedReader(new FileReader(nomFich)); - String s; - for (;;) { - s = f.readLine(); - if (s == null) - break; - if (s.startsWith("~s")) { - String nomEtat = s.substring(s.indexOf('"') + 1, s - .lastIndexOf('"')); - loadState(f, nomEtat, null); - } else if (s.startsWith("~v")) { - // variance floor: bypass - } else if (s.startsWith("~t")) { - String nomTrans = s.substring(s.indexOf('"') + 1, s - .lastIndexOf('"')); - loadTrans(f, nomTrans, null); - } else if (s.startsWith("~h")) { - String nomHMM = s.substring(s.indexOf('"') + 1, s - .lastIndexOf('"')); - if (nomHMM.toUpperCase().equals(nomHMM)) { - System.out - .println("WARNING: HMM is in lowercase, converting to upper"); - } - hmms.add(loadHMM(f, nomHMM.toUpperCase(), gmms)); - } - } - f.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - private String[][] tiedHMMs; - - public void loadTiedList(String nomFich) { - try { - BufferedReader f = new BufferedReader(new FileReader(nomFich)); - String s; - String[] ss; - int ntiedstates = 0; - for (;;) { - s = f.readLine(); - if (s == null) - break; - ss = s.split(" "); - if (ss.length >= 2) { - // We have a tiedstate - ntiedstates++; - } - } - tiedHMMs = new String[ntiedstates][2]; - f.close(); - f = new BufferedReader(new FileReader(nomFich)); - for (int i = 0;;) { - s = f.readLine(); - if (s == null) - break; - ss = s.split(" "); - if (ss.length >= 2) { - // We have a tiedstate - tiedHMMs[i][0] = ss[0]; - tiedHMMs[i++][1] = ss[1]; - } - } - f.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - /** - * WARNING To be compliant with sphinx3 models, we remove the first - * non-emitting state ! - * - - - - * @throws IOException - - */ - private SingleHMM loadHMM(BufferedReader f, String n, - List autresEtats) throws IOException { - GMMDiag e = null; - int curstate; - String name = n; - String s = ""; - - while (!s.startsWith("")) { - s = f.readLine(); - } - int nstates = Integer.parseInt(s.substring(s.indexOf(' ') + 1)); - // Compliance with sphinx3 - nstates--; - SingleHMM theHMM = new SingleHMM(nstates); - theHMM.setName(n); - theHMM.hmmset = this; - while (!s.startsWith("")) - s = f.readLine(); - while (s.startsWith("")) { - curstate = Integer.parseInt(s.substring(s.indexOf(' ') + 1)); - // Compliance with sphinx3 - curstate--; - s = f.readLine(); - int gmmidx = -1; - if (s.startsWith("~s")) { - String nomEtat = s.substring(s.indexOf('"') + 1, s - .lastIndexOf('"')); - int i; - for (i = 0; i < autresEtats.size(); i++) { - e = autresEtats.get(i); - if (e.nom.equals(nomEtat)) - break; - } - gmmidx = i; - if (i == autresEtats.size()) { - System.err.println("Error creatiing HMM : state " + name + " not found"); - System.exit(1); - } - } else { - loadState(f, "", s); - gmmidx = gmms.size() - 1; - e = gmms.get(gmms.size() - 1); - } - HMMState st = new HMMState(e, new Lab(name, curstate)); - st.gmmidx = gmmidx; - states.add(st); - theHMM.setState(curstate - 1, st); // -1 because in HTK HMMs are counted from 1 - s = f.readLine(); - // t eliminates the gconst because it is then recalculated! - if (s.startsWith("")) - s = f.readLine(); - } - if (s.startsWith("~t")) { - // simple application of the - String nomTrans = s.substring(s.indexOf('"') + 1, s - .lastIndexOf('"')); - int tridx = getTrans(nomTrans); - theHMM.setTrans(tridx); - } else { - // The transitions are explicit - if (!s.startsWith("")) { - System.err.println("Error reading model: missing transitions." + s); - System.exit(1); - } - loadTrans(f, null, s); - theHMM.setTrans(trans); - } - s = f.readLine(); - if (!s.startsWith("")) { - System.err.println("Error reading model: missing ENDHMM." + s); - System.exit(1); - } - return theHMM; - } - - private int loadTrans(BufferedReader f, String nomEtat, String prem) - throws IOException { - String s; - int nstates = 0; - if (prem != null) - s = prem; - else - s = f.readLine().trim(); - if (s.startsWith("")) { - nstates = Integer.parseInt(s.substring(s.indexOf(' ') + 1)); - // Compliance with sphinx3 - nstates--; - } else { - System.err.println("ERROR no TRANSP !"); - System.exit(1); - } - String[] ss; - trans = new float[nstates][nstates]; - // Compliance with sphinx3 - f.readLine(); - for (int i = 0; i < nstates; i++) { - s = f.readLine().trim(); - ss = s.split(" "); - for (int j = 0; j < nstates; j++) { - // Compliance with sphinx3 - trans[i][j] = Float.parseFloat(ss[j + 1]); - } - } - if (nomEtat != null) { - int tridx = transitions.size(); - transNames.put(nomEtat, tridx); - transitions.add(trans); - return tridx; - } else { - return -1; - // Application can recover the transitions in the pool - } - } - - private int getTrans(String trnom) { - int tridx = transNames.get(trnom); - return tridx; - } - - private void loadState(BufferedReader f, String nomEtat, String prem) - throws IOException { - nGaussians = 1; - String s; - if (prem != null) - s = prem; - else - s = f.readLine().trim(); - if (s.startsWith("")) { - nGaussians = Integer.parseInt(s.substring(s.indexOf(' ') + 1)); - s = f.readLine().trim(); - } - g = null; - if (!s.startsWith("")) { - // This model has single mixture - if (nGaussians != 1) { - System.err.println("Error loading model: number of mixtures is " + nGaussians - + " while state " + s + " has 1 mixture."); - System.exit(1); - } - loadHTKGauss(f, 0, s); - g.setWeight(0, 1f); - } else { - String[] ss; - for (int i = 0; i < nGaussians; i++) { - if (i > 0) - s = f.readLine().trim(); - // Don't load GCONST - if (s.startsWith("")) - s = f.readLine().trim(); - ss = s.split(" "); - if (Integer.parseInt(ss[1]) != i + 1) { - System.err.println("Error reading model: mixture conflict " - + i + ' ' + s); - System.exit(1); - } - loadHTKGauss(f, i, null); - g.setWeight(i, Float.parseFloat(ss[2])); - } - } - g.precomputeDistance(); - g.setNom(nomEtat); - gmms.add(g); - } - - /** - * Read until the last line of the file but it may leave one last line - * so it can loose GCONST. - * @throws java.io.IOException - */ - private void loadHTKGauss(BufferedReader f, int n, String prem) - throws IOException { - String s; - String[] ss; - if (prem != null) { - // First line is taken into account - s = prem; - } else - s = f.readLine().trim(); - if (s.startsWith("")) - s = f.readLine().trim(); - if (s.startsWith("")) - s = f.readLine().trim(); - if (!s.startsWith("")) { - System.err.println("Error loading model: can't find ! " + s); - System.exit(1); - } - int ncoefs = Integer.parseInt(s.substring(s.indexOf(' ') + 1)); - if (g == null) - g = new GMMDiag(nGaussians, ncoefs); - s = f.readLine().trim(); - ss = s.split(" "); - if (ss.length != ncoefs) { - System.err.println("Error loading model: incorrect number of coefficients " - + ncoefs + ' ' + s + ' ' + ss[0] + ' ' + ss[39]); - System.exit(1); - } - for (int i = 0; i < ncoefs; i++) { - g.setMean(n, i, Float.parseFloat(ss[i])); - } - s = f.readLine().trim(); - if (!s.startsWith("")) { - System.err.println("Error loading model: missing ! " + s); - System.exit(1); - } - s = f.readLine().trim(); - ss = s.split(" "); - if (ss.length != ncoefs) { - System.err.println("Error loading model: incorrect number of coefficients " - + ncoefs + ' ' + s); - System.exit(1); - } - for (int i = 0; i < ncoefs; i++) { - g.setVar(n, i, Float.parseFloat(ss[i])); - } - } - - public GMMDiag findState(Lab l) { - while (true) { - HMMState s = null; - int i; - for (i = 0; i < states.size(); i++) { - s = states.get(i); - if (s.getLab().isEqual(l)) - break; - } - if (i < states.size()) { - return s.gmm; - } else { - if (tiedHMMs != null) { - // May be that state appears in the tied states - for (i = 0; i < tiedHMMs.length; i++) { - if (tiedHMMs[i][0].equals(l.getName())) { - break; - } - } - if (i < tiedHMMs.length) { - l = new Lab(tiedHMMs[i][1], l.getState()); - continue; - } - } - System.err.println("WARNING: state is not found in hmmset " + l); - return null; - } - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HTK/HMMState.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HTK/HMMState.java deleted file mode 100755 index 6e13e4cb..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HTK/HMMState.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2007 LORIA, France. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.linguist.acoustic.tiedstate.HTK; - -/** - * This is simply a GMMDiag with a label which is a HMM name (String) and a state - * number - * - * @author Christophe Cerisara - * - */ -public class HMMState { - public int gmmidx = -1; - - public float getLogLike() { - return gmm.getLogLike(); - } - - public HMMState(GMMDiag g, Lab l) { - lab = l; - gmm = g; - } - - public void setLab(Lab l) { - lab = l; - } - - public Lab getLab() { - return lab; - } - - public Lab lab; - public final GMMDiag gmm; -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HTK/Lab.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HTK/Lab.java deleted file mode 100755 index 8df351db..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HTK/Lab.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright 2007 LORIA, France. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.linguist.acoustic.tiedstate.HTK; - -/** - * Represents a label, i.e. a model name + a state number - * - * @author Christophe Cerisara - * - */ -public class Lab { - private String nameHMM; - private int numState = -1; - private int start = -1, end = -1; - - public Lab() { - } - - public Lab(String s) { - setName(s); - } - - public Lab(String s, int n) { - setName(s); - setStateIdx(n); - } - - // copy-constructor - public Lab(Lab ref) { - setDeb(ref.getStart()); - setFin(ref.getEnd()); - setName(ref.getName()); - setStateIdx(ref.getState()); - } - - public String getName() { - return nameHMM; - } - - public int getState() { - return numState; - } - - public int getStart() { - return start; - } - - public int getEnd() { - return end; - } - - public void setName(String s) { - nameHMM = s; - } - - public void setStateIdx(int i) { - numState = i; - } - - public void setDeb(int i) { - start = i; - } - - public void setFin(int i) { - end = i; - } - - public boolean isEqual(Lab l) { - if (l.getState() != -1 && getState() != -1) { - return l.getName().equals(getName()) && l.getState() == getState(); - } else { - return l.getName().equals(getName()); - } - } - - @Override - public String toString() { - String r = ""; - if (start >= 0 && end >= start) - r += start + " " + end + ' '; - r += nameHMM; - if (numState >= 0) - r += "[" + numState + ']'; - return r; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HTK/NamesConversion.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HTK/NamesConversion.java deleted file mode 100755 index d563cc53..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/HTK/NamesConversion.java +++ /dev/null @@ -1,347 +0,0 @@ -/* - * Copyright 2007 LORIA, France. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.linguist.acoustic.tiedstate.HTK; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.HashMap; -import java.util.StringTokenizer; - -/** - * HTK is case-sensitive, S4 is not. - * - * One must then first convert the HMM names to upper-case, resolve conflicts, - * and use the same conversion to convert the lexicons and grammar. This tool - * does it. - * - * @author Christophe Cerisara - * - */ -public class NamesConversion { - final HashMap phoneConv = new HashMap(); - final HashMap wordConv = new HashMap(); - String left, base, right; - - public NamesConversion() { - } - - void addInConv(String item, HashMap conv) { - if (!conv.containsKey(item)) { - // new item - String cand = item.toUpperCase(); - while (conv.containsValue(cand)) { - // conflict ! - cand = cand+"_X"; - } - conv.put(item,cand); - } - } - - void buildPhoneConversion(String MMFfile) { - try { - BufferedReader bf = new BufferedReader(new FileReader(MMFfile)); - String s; - for (;;) { - s=bf.readLine(); - if (s==null) break; - int i=s.indexOf("~h"); - if (i>=0) { - i=s.indexOf('"'); - int j = s.lastIndexOf('"'); - String nom = s.substring(i+1,j); - split3ph(nom); - if (left!=null) addInConv(left,phoneConv); - if (base!=null) addInConv(base,phoneConv); - if (right!=null) addInConv(right,phoneConv); - } - } - bf.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - void buildWordConversion(String lexFile) { - try { - BufferedReader bf = new BufferedReader(new FileReader(lexFile)); - String s; - for (;;) { - s=bf.readLine(); - if (s==null) break; - StringTokenizer st = new StringTokenizer(s); - if (st.hasMoreTokens()) { - String word = st.nextToken(); - addInConv(word,wordConv); - } - } - bf.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - void split3ph(String nom) { - int i = nom.indexOf('-'); - if (i>=0) { - left = nom.substring(0,i); - } else {left=null; i=-1;} - String s = nom.substring(i+1); - i = s.indexOf('+'); - if (i>=0) { - right = s.substring(i+1); - } else {right=null; i=s.length();} - base = s.substring(0,i); - } - - String conv3ph() { - String rep; - if (left!=null) { - rep=conv1ph(left)+ '-'; - } else rep=""; - rep+=conv1ph(base); - if (right!=null) { - rep+= '+' +conv1ph(right); - } - if (rep.equals("null")) { - System.err.println("detson error "+left+ ' ' +base+ ' ' +right); - System.exit(1); - } - return rep; - } - String conv1ph(String p) { - return phoneConv.get(p); - } - - void convertMMF(String MMFfile) { - try { - BufferedReader bf = new BufferedReader(new FileReader(MMFfile)); - PrintWriter pf = new PrintWriter(new FileWriter(MMFfile+".conv")); - String s; - for (;;) { - s=bf.readLine(); - if (s==null) break; - int i=s.indexOf("~h"); - if (i>=0) { - i=s.indexOf('"'); - int j = s.lastIndexOf('"'); - String nom = s.substring(i+1,j); - split3ph(nom); - String newnom = conv3ph(); - pf.println("~h \""+newnom+ '\"'); - } else - pf.println(s); - } - pf.close(); - bf.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - void convertWordGrammar(String gramFile) { - try { - BufferedReader bf = new BufferedReader(new FileReader(gramFile)); - PrintWriter pf = new PrintWriter(new FileWriter(gramFile+".conv")); - String s; - // skip comments - for (;;) { - s=bf.readLine(); - if (s==null) {pf.close();bf.close();return;} - pf.println(s); - int i=s.indexOf("\\data\\"); - if (i==0) break; - } - // wait for 1-gram - for (;;) { - s=bf.readLine(); - if (s==null) {pf.close();bf.close();return;} - pf.println(s); - int i=s.indexOf("\\1-grams:"); - if (i==0) break; - } - // 1-grams: - boolean fin=false; - while (!fin) { - s=bf.readLine(); - if (s==null) {pf.close();bf.close();return;} - int i=s.indexOf("\\2-grams:"); - if (i==0) { - pf.println(s); break; - } - i=s.indexOf("\\end\\"); - if (i==0) {fin=true; pf.println(s); break;} - StringTokenizer st = new StringTokenizer(s); - if (st!=null & st.hasMoreTokens()) { - pf.print(st.nextToken()+ ' '); - if (st.hasMoreTokens()) { - String mot = st.nextToken(); - String newmot = wordConv.get(mot); - if (newmot==null) { - // when the word is not in the lexicon, we get null here. - // we should then build a new converted item - System.err.println("WARNING word "+mot+" not in lexicon !"); - addInConv(mot,wordConv); - newmot = wordConv.get(mot); - } - pf.print(newmot+ ' '); - while (st.hasMoreTokens()) - pf.print(st.nextToken()+ ' '); - } - pf.println(); - } - } - // 2-grams: - while (!fin) { - s=bf.readLine(); - if (s==null) {pf.close();bf.close();return;} - int i=s.indexOf("\\3-grams:"); - if (i==0) { - pf.println(s); break; - } - i=s.indexOf("\\end\\"); - if (i==0) {fin=true; pf.println(s); break;} - StringTokenizer st = new StringTokenizer(s); - if (st!=null & st.hasMoreTokens()) { - pf.print(st.nextToken()+ ' '); - if (st.hasMoreTokens()) { - String mot = st.nextToken(); - String newmot = wordConv.get(mot); - if (newmot==null) newmot=mot; - pf.print(newmot+ ' '); - if (st.hasMoreTokens()) { - mot = st.nextToken(); - newmot = wordConv.get(mot); - if (newmot==null) newmot=mot; - pf.print(newmot+ ' '); - while (st.hasMoreTokens()) - pf.print(st.nextToken()+ ' '); - } - } - pf.println(); - } - } - // 3-grams: - while (!fin) { - s=bf.readLine(); - if (s==null) {pf.close();bf.close();return;} - int i=s.indexOf("\\end\\"); - if (i==0) {fin=true; pf.println(s); break;} - StringTokenizer st = new StringTokenizer(s); - if (st!=null & st.hasMoreTokens()) { - pf.print(st.nextToken()+ ' '); - if (st.hasMoreTokens()) { - String mot = st.nextToken(); - String newmot = wordConv.get(mot); - if (newmot==null) newmot=mot; - pf.print(newmot+ ' '); - if (st.hasMoreTokens()) { - mot = st.nextToken(); - newmot = wordConv.get(mot); - if (newmot==null) newmot=mot; - pf.print(newmot+ ' '); - if (st.hasMoreTokens()) { - mot = st.nextToken(); - newmot = wordConv.get(mot); - if (newmot==null) newmot=mot; - pf.print(newmot+ ' '); - while (st.hasMoreTokens()) - pf.print(st.nextToken()+ ' '); - } - } - } - pf.println(); - } - } - pf.close(); - bf.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - void convertLexicon(String lexFile) { - try { - BufferedReader bf = new BufferedReader(new FileReader(lexFile)); - PrintWriter pf = new PrintWriter(new FileWriter(lexFile+".conv")); - String s; - for (;;) { - s=bf.readLine(); - if (s==null) break; - StringTokenizer st = new StringTokenizer(s); - if (st==null || !st.hasMoreTokens()) continue; - String mot = st.nextToken(); - String newmot = wordConv.get(mot); - if (newmot!=null) mot=newmot; - pf.print(mot+ ' '); - while (st.hasMoreTokens()) { - String ph = st.nextToken(); - // format julius: delete the output string between [..] - if (ph.charAt(0)=='[') { - for (;;) { - if (ph.endsWith("]")) break; - ph = st.nextToken(); - } - ph = st.nextToken(); - } - split3ph(ph); - String newnom = conv3ph(); - pf.print(newnom+ ' '); - } - pf.println(); - } - pf.close(); - bf.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - // TODO: support without filler, which shall be loaded from the HTK lexicon in the future - public static void main(String args[]) { - String MMFfile = null; - String lexFile = null; - String fillerFile = null; - String gramFile = null; - - for (int i=0;i meansPool; - private Pool variancePool; - private Pool matrixPool; - private Pool meanTransformationMatrixPool; - private Pool meanTransformationVectorPool; - private Pool varianceTransformationMatrixPool; - private Pool varianceTransformationVectorPool; - private GaussianWeights mixtureWeights; - private Pool senonePool; - private Map contextIndependentUnits; - private HMMManager hmmManager; - private LogMath logMath; - private UnitManager unitManager; - private Properties properties; - private boolean swap; - protected final static String DENSITY_FILE_VERSION = "1.0"; - protected final static String MIXW_FILE_VERSION = "1.0"; - protected final static String TMAT_FILE_VERSION = "1.0"; - // -------------------------------------- - // Configuration variables - // -------------------------------------- - private String name; - private Logger logger; - private String location; - private String model; - private String dataDir; - private String propsFile; - private float distFloor; - private float mixtureWeightFloor; - private float varianceFloor; - private boolean useCDUnits; - private boolean loaded; - private boolean tie1ph; - - public HTKLoader(String propsFile, - UnitManager unitManager, boolean isBinary, int vectorLength, - String model, boolean tie1ph, float distFloor, - float mixtureWeightFloor, float varianceFloor) { - - this.logger = Logger.getLogger(getClass().getName()); - - this.propsFile = propsFile; - loadProperties(); - - logMath = LogMath.getLogMath(); - this.unitManager = unitManager; - this.model = model; - this.tie1ph = tie1ph; - this.distFloor = distFloor; - this.mixtureWeightFloor = mixtureWeightFloor; - this.varianceFloor = varianceFloor; - } - - public HTKLoader() { - - } - - public void newProperties(PropertySheet ps) throws PropertyException { - logger = ps.getLogger(); - - propsFile = ps.getString(PROP_PROPERTIES_FILE); - loadProperties(); - - unitManager = (UnitManager) ps.getComponent(PROP_UNIT_MANAGER); - - String mdef = (String) properties.get(PROP_MODEL); - model = mdef != null ? mdef : ps.getString(PROP_MODEL); - - tie1ph = ps.getBoolean(PROP_TIE_1PH); - - distFloor = ps.getFloat(PROP_MC_FLOOR); - mixtureWeightFloor = ps.getFloat(PROP_MW_FLOOR); - varianceFloor = ps.getFloat(PROP_VARIANCE_FLOOR); - } - - private void loadProperties() { - if (properties == null) { - properties = new Properties(); - try { - URL url = getClass().getResource(propsFile); - if (url != null) - properties.load(url.openStream()); - } catch (IOException ioe) { - ioe.printStackTrace(); - } - } - } - - public void load() throws IOException { - if (!loaded) { - hmmManager = new HMMManager(); - contextIndependentUnits = new LinkedHashMap(); - // dummy pools for these elements - meanTransformationMatrixPool = null; - meanTransformationVectorPool = null; - varianceTransformationMatrixPool = null; - varianceTransformationVectorPool = null; - // do the actual acoustic model loading - loadModelFiles(model); - System.err.println("HTK -> S4 conversion finished"); - loaded = true; - } - } - - public String getName() { - return name; - } - - /** - * Return the acoustic model properties. - * - * @return the acoustic model properties - */ - public Properties getProperties() { - if (properties == null) { - loadProperties(); - } - return properties; - } - - /** - * Return the location. - * - * @return the location - */ - protected String getLocation() { - return location; - } - - /** - * Loads the AcousticModel from an HTK MMF - * - * - * @param MMFname the name of the acoustic model; if null we just load from the default - * location - * - * @throws java.io.IOException - */ - private void loadModelFiles(String MMFname) throws IOException { - - logger.config("Loading HTK acoustic model: " + MMFname); - logger.config(" Path : " + location); - logger.config(" modellName: " + model); - logger.config(" dataDir : " + dataDir); - - HTKStruct htkmods = new HTKStruct(); - htkmods.load(MMFname); - - meansPool = htkmods.htkMeans(MMFname); - variancePool = htkmods.htkVars(MMFname, varianceFloor); - mixtureWeights = htkmods.htkWeights(MMFname, mixtureWeightFloor); - matrixPool = htkmods.htkTrans(MMFname); - - // senonePool represents the set of the emitting states - senonePool = createSenonePool(distFloor, varianceFloor); - loadHMMPool(useCDUnits, htkmods, location + File.separator + model); - } - - public Map getContextIndependentUnits() { - return contextIndependentUnits; - } - - /** - * Creates the senone pool from the rest of the pools. assumes the means and - * variances are in the same order - * - * @param distFloor the lowest allowed score - * @param varianceFloor the lowest allowed variance - * @return the senone pool - */ - private Pool createSenonePool(float distFloor, float varianceFloor) { - Pool pool = new Pool("senones"); - - int numMeans = meansPool.size(); - int numVariances = variancePool.size(); - // TODO: remove this variable to allow different number of states per - // HMM - int numGaussiansPerSenone = mixtureWeights.getGauPerState(); - int numSenones = mixtureWeights.getStatesNum(); - int whichGaussian = 0; - - logger.fine("NG " + numGaussiansPerSenone); - logger.fine("NS " + numSenones); - logger.fine("NMNS " + numMeans); - logger.fine("NMNS " + numVariances); - - assert numGaussiansPerSenone > 0; - assert numVariances == numSenones * numGaussiansPerSenone; - assert numMeans == numSenones * numGaussiansPerSenone; - - float [][] meansTransformationMatrix = meanTransformationMatrixPool == null ? - null : meanTransformationMatrixPool.get(0); - float [] meansTransformationVector = meanTransformationVectorPool == null ? - null : meanTransformationVectorPool.get(0); - float [][] varianceTransformationMatrix = varianceTransformationMatrixPool == null ? - null : varianceTransformationMatrixPool.get(0); - float [] varianceTransformationVector = varianceTransformationVectorPool == null ? - null : varianceTransformationVectorPool.get(0); - - for (int i = 0; i < numSenones; i++) { - MixtureComponent[] mixtureComponents = new MixtureComponent[numGaussiansPerSenone]; - for (int j = 0; j < numGaussiansPerSenone; j++) { - mixtureComponents[j] = new MixtureComponent( - meansPool.get(whichGaussian), - meansTransformationMatrix, - meansTransformationVector, - variancePool.get(whichGaussian), - varianceTransformationMatrix, - varianceTransformationVector, - distFloor, - varianceFloor); - - whichGaussian++; - } - - Senone senone = new GaussianMixture(mixtureWeights, mixtureComponents, i); - - pool.put(i, senone); - } - return pool; - } - - /** - * Reads the next word (text separated by whitespace) from the given stream. - * - * the input stream - * - * @return the next word - * @throws IOException - * on error - */ - String readWord(DataInputStream dis) throws IOException { - StringBuilder sb = new StringBuilder(); - char c; - // skip leading whitespace - do { - c = readChar(dis); - } while (Character.isWhitespace(c)); - // read the word - do { - sb.append(c); - c = readChar(dis); - } while (!Character.isWhitespace(c)); - return sb.toString(); - } - - /** - * Reads a single char from the stream. - * - * the stream to read - * - * @return the next character on the stream - * @throws IOException - * if an error occurs - */ - private char readChar(DataInputStream dis) throws IOException { - return (char) dis.readByte(); - } - - /** - * Read an integer from the input stream, byte-swapping as necessary. - * - * - * @param dis the input stream - * @return an integer value - * @throws IOException - * on error - */ - protected int readInt(DataInputStream dis) throws IOException { - if (swap) { - return Utilities.readLittleEndianInt(dis); - } else { - return dis.readInt(); - } - } - - /** - * Read a float from the input stream, byte-swapping as necessary. the input - * stream - * - * @param dis the input stream - * @return a floating value - * @throws IOException - * on error - */ - protected float readFloat(DataInputStream dis) throws IOException { - float val; - if (swap) { - val = Utilities.readLittleEndianFloat(dis); - } else { - val = dis.readFloat(); - } - return val; - } - - - /** - * Reads the given number of floats from the stream and returns them in an - * array of floats. - * - * @param dis the stream to read data from the number of floats to read - * @param size size of the array - * @return an array of size float elements - * @throws IOException - * if an exception occurs - */ - protected float[] readFloatArray(DataInputStream dis, int size) - throws IOException { - float[] data = new float[size]; - for (int i = 0; i < size; i++) { - data[i] = readFloat(dis); - } - return data; - } - - /** - * Loads the model file. A set of density arrays are created and placed in - * the given pool. - * - * - * @param useCDUnits if true, loads also the context dependent units - * @param htkModels the set of HTK models - * @param path the path to a density file - * - * @throws IOException - * if an error occurs while loading the data - */ - protected void loadHMMPool(boolean useCDUnits, HTKStruct htkModels, - String path) throws IOException { - int numStatePerHMM; - - // assert numTiedState == mixtureWeightsPool.getFeature(NUM_SENONES, 0); - // assert numTiedTransitionMatrices == matrixPool.size(); - - // Load the base phones - /** - * This version loads the phones from the .MMF But contrary to S4, HTK - * do not produce reliable monophones, and some monophones may be - * missing ! An option might be to load 1ph trained independently from - * the 3ph but this file may not be always available. An easy fallback - * solution for now is to tie all the monophone to the first 3ph with - * the same base name found... - */ - if (!tie1ph) { - for (Iterator monoPhones = htkModels.hmmsHTK.get1phIt(); monoPhones - .hasNext();) { - SingleHMM hmm = monoPhones.next(); - if (hmm == null) - break; - String name = hmm.getName(); - String attribute; - if (name.equals("sil") || name.equals("sp") - || name.equals("bb") || name.equals("xx") - || name.equals("hh")) - attribute = FILLER; - else - attribute = "nofiller"; - // get the transition index - int tmat = hmm.trIdx; - - // This includes non-emitting states ! - numStatePerHMM = hmm.getNstates(); - int[] stid = new int[hmm.getNbEmittingStates()]; - - // stid contains the number of senone as it in senone pool - int j = 0; - for (int ii = 0; ii < numStatePerHMM; ii++) { - if (hmm.isEmitting(ii)) { - HMMState s = hmm.getState(ii); - // we use the index of HMM in MMF file - stid[j] = htkModels.hmmsHTK.getStateIdx(s); - j++; - // assert stid[j] >= 0 && stid[j] < - // numContextIndependentTiedState; - } - } - // assert tmat < numTiedTransitionMatrices; - - Unit unit = unitManager.getUnit(name, attribute.equals(FILLER)); - contextIndependentUnits.put(unit.getName(), unit); - - if (logger.isLoggable(Level.FINE)) { - logger.fine("Loaded " + unit); - } - - // The first filler - if (unit.isFiller() && unit.getName().equals(SILENCE_CIPHONE)) { - unit = UnitManager.SILENCE; - } - - float[][] transitionMatrix = matrixPool.get(tmat); - SenoneSequence ss = getSenoneSequence(stid); - - HMM hmm2 = new SenoneHMM(unit, ss, transitionMatrix, - HMMPosition.lookup("-")); - hmmManager.put(hmm2); - } - } else { - // build the 1ph by tying to the first 3ph - for (int i = 0; i < htkModels.hmmsHTK.getNhmms(); i++) { - SingleHMM hmm = htkModels.hmmsHTK.getHMM(i); - if (hmm == null) - break; - String name = hmm.getBaseName(); - if (!contextIndependentUnits.containsKey(name)) { - String attribute; - - if (name.equals("SIL") || name.equals("SP") - || name.equals("BB") || name.equals("XX") - || name.equals("HH")) - attribute = FILLER; - else - attribute = "nofiller"; - // get the transition index - int tmat = hmm.trIdx; - - // warning ! this includes non-emitting states ! - numStatePerHMM = hmm.getNstates(); - int[] stid = new int[hmm.getNbEmittingStates()]; - - // stid contains the identifier of senone used during - // creation of senone pool - int j = 0; - for (int ii = 0; ii < numStatePerHMM; ii++) { - if (hmm.isEmitting(ii)) { - HMMState s = hmm.getState(ii); - // We get an index of HMM in MMF file - stid[j] = htkModels.hmmsHTK.getStateIdx(s); - j++; - // assert stid[j] >= 0 && stid[j] < - // numContextIndependentTiedState; - } - } - // assert tmat < numTiedTransitionMatrices; - - Unit unit = unitManager.getUnit(name, attribute - .equals(FILLER)); - contextIndependentUnits.put(unit.getName(), unit); - - if (logger.isLoggable(Level.FINE)) { - logger.fine("Loaded " + unit); - } - - // The first filler - if (unit.isFiller() - && unit.getName().equals(SILENCE_CIPHONE)) { - unit = UnitManager.SILENCE; - } - - float[][] transitionMatrix = matrixPool.get(tmat); - SenoneSequence ss = getSenoneSequence(stid); - - HMM hmm2 = new SenoneHMM(unit, ss, transitionMatrix, - HMMPosition.lookup("-")); - hmmManager.put(hmm2); - } - } - } - // Load the context dependent phones. If the useCDUnits - // property is false, the CD phones will not be created, but - // the values still need to be read in from the file. - - String lastUnitName = ""; - Unit lastUnit = null; - int[] lastStid = null; - SenoneSequence lastSenoneSequence = null; - - List HMMdejavu = new ArrayList(); - for (Iterator triPhones = htkModels.hmmsHTK.get3phIt(); triPhones - .hasNext();) { - SingleHMM hmm = triPhones.next(); - if (hmm == null) - break; - String name = hmm.getBaseName(); - String left = hmm.getLeft(); - String right = hmm.getRight(); - - { - // diphones are transformed into triphones with SIL context, as - // it looks - // like S4 do not support diphones - if (left.equals("-")) - left = "SIL"; - if (right.equals("-")) - right = "SIL"; - String s = left + ' ' + name + ' ' + right; - if (HMMdejavu.contains(s)) { - // this may happen when a diphone is transformed into a - // triphone with SIL - continue; - } - HMMdejavu.add(s); - } - - // TODO: For this moment we don't know if the HMMS are in the end or - // not - String position = "i"; - int tmat = hmm.trIdx; - - numStatePerHMM = hmm.getNstates(); - int[] stid = new int[hmm.getNbEmittingStates()]; - - int j = 0; - for (int ii = 0; ii < numStatePerHMM; ii++) { - if (hmm.isEmitting(ii)) { - HMMState s = hmm.getState(ii); - stid[j] = htkModels.hmmsHTK.getStateIdx(s); - j++; - // assert stid[j] >= 0 && stid[j] < - // numContextIndependentTiedState; - } - } - - if (useCDUnits) { - Unit unit; - String unitName = (name + ' ' + left + ' ' + right); - - if (unitName.equals(lastUnitName)) { - unit = lastUnit; - } else { - Unit[] leftContext = new Unit[1]; - leftContext[0] = contextIndependentUnits.get(left); - - Unit[] rightContext = new Unit[1]; - rightContext[0] = contextIndependentUnits.get(right); - - Context context = LeftRightContext.get(leftContext, - rightContext); - unit = unitManager.getUnit(name, false, context); - } - lastUnitName = unitName; - lastUnit = unit; - - if (logger.isLoggable(Level.FINE)) { - logger.fine("Loaded " + unit); - } - - float[][] transitionMatrix = matrixPool.get(tmat); - - SenoneSequence ss = lastSenoneSequence; - if (ss == null || !sameSenoneSequence(stid, lastStid)) { - ss = getSenoneSequence(stid); - } - lastSenoneSequence = ss; - lastStid = stid; - - HMM hmm2 = new SenoneHMM(unit, ss, transitionMatrix, - HMMPosition.lookup(position)); - hmmManager.put(hmm2); - } - } - } - - /** - * Returns true if the given senone sequence IDs are the same. - * - * @param ssid1 first sequence of senones - * @param ssid2 second sequence of senones - * @return true if the given senone sequence IDs are the same, false - * otherwise - */ - protected boolean sameSenoneSequence(int[] ssid1, int[] ssid2) { - if (ssid1.length == ssid2.length) { - for (int i = 0; i < ssid1.length; i++) { - if (ssid1[i] != ssid2[i]) { - return false; - } - } - return true; - } else { - return false; - } - } - - /** - * Gets the senone sequence representing the given senones. - * - * @param stateId is the array of senone state ids - * @return the senone sequence associated with the states - */ - protected SenoneSequence getSenoneSequence(int[] stateId) { - Senone[] senones = new Senone[stateId.length]; - for (int i = 0; i < stateId.length; i++) { - senones[i] = senonePool.get(stateId[i]); - } - return new SenoneSequence(senones); - } - - - public Pool getMeansPool() { - return meansPool; - } - - public Pool getMeansTransformationMatrixPool() { - return meanTransformationMatrixPool; - } - - public Pool getMeansTransformationVectorPool() { - return meanTransformationVectorPool; - } - - public Pool getVariancePool() { - return variancePool; - } - - public Pool getVarianceTransformationMatrixPool() { - return varianceTransformationMatrixPool; - } - - public Pool getVarianceTransformationVectorPool() { - return varianceTransformationVectorPool; - } - - public GaussianWeights getMixtureWeights() { - return mixtureWeights; - } - - public Pool getTransitionMatrixPool() { - return matrixPool; - } - - public float[][] getTransformMatrix() { - return null; - } - - public Pool getSenonePool() { - return senonePool; - } - - public int getLeftContextSize() { - return CONTEXT_SIZE; - } - - public int getRightContextSize() { - return CONTEXT_SIZE; - } - - public HMMManager getHMMManager() { - return hmmManager; - } - - public void logInfo() { - logger.info("HTKLoader"); - meansPool.logInfo(logger); - variancePool.logInfo(logger); - matrixPool.logInfo(logger); - senonePool.logInfo(logger); - - if (meanTransformationMatrixPool != null) - meanTransformationMatrixPool.logInfo(logger); - if (meanTransformationVectorPool != null) - meanTransformationVectorPool.logInfo(logger); - if (varianceTransformationMatrixPool != null) - varianceTransformationMatrixPool.logInfo(logger); - if (varianceTransformationVectorPool != null) - varianceTransformationVectorPool.logInfo(logger); - - senonePool.logInfo(logger); - logger.info("Context Independent Unit Entries: " - + contextIndependentUnits.size()); - hmmManager.logInfo(logger); - } - - class HTKStruct { - - HMMSet hmmsHTK; - - public void load(String name) { - System.err.println("HTK loading..."); - hmmsHTK = new HMMSet(); - hmmsHTK.loadHTK(name); - // TODO: Is tied list useful for sphinx4 - // hmmsHTK.loadTiedList(name + ".tiedlist"); - System.err.println("HTK loading finished"); - } - - int getNumStates() { - return hmmsHTK.getNstates(); - } - - int getGMMSize() { - GMMDiag gmm = hmmsHTK.gmms.get(0); - return gmm.getNgauss(); - } - - int getNcoefs() { - GMMDiag gmm = hmmsHTK.gmms.get(0); - return gmm.getNcoefs(); - } - - int getNumHMMs() { - return hmmsHTK.getNhmms(); - } - - public Pool htkMeans(String path) { - Pool pool = new Pool(path); - // Suppose this is the number of shared states - int numStates = getNumStates(); - int numStreams = 1; - int numGaussiansPerState = getGMMSize(); - pool.setFeature(NUM_SENONES, numStates); - pool.setFeature(NUM_STREAMS, numStreams); - pool.setFeature(NUM_GAUSSIANS_PER_STATE, numGaussiansPerState); - int ncoefs = getNcoefs(); - for (int i = 0; i < numStates; i++) { - GMMDiag gmm = hmmsHTK.gmms.get(i); - for (int j = 0; j < numGaussiansPerState; j++) { - float[] density = new float[ncoefs]; - for (int k = 0; k < ncoefs; k++) { - density[k] = gmm.getMean(j, k); - } - int id = i * numGaussiansPerState + j; - // the order of the means is the order in the HMMSet.gmms - // vector which is the order of appearance in the MMF file - pool.put(id, density); - } - } - return pool; - } - - public Pool htkVars(String path, float floor) { - Pool pool = new Pool(path); - int numStates = getNumStates(); - int numStreams = 1; - int numGaussiansPerState = getGMMSize(); - pool.setFeature(NUM_SENONES, numStates); - pool.setFeature(NUM_STREAMS, numStreams); - pool.setFeature(NUM_GAUSSIANS_PER_STATE, numGaussiansPerState); - int ncoefs = getNcoefs(); - for (int i = 0; i < numStates; i++) { - GMMDiag gmm = hmmsHTK.gmms.get(i); - for (int j = 0; j < numGaussiansPerState; j++) { - float[] vars = new float[ncoefs]; - for (int k = 0; k < ncoefs; k++) { - // TODO: check: shall we put inverse vars here ? - vars[k] = gmm.getVar(j, k); - } - Utilities.floorData(vars, varianceFloor); - int id = i * numGaussiansPerState + j; - // the order of the vars is the order in the HMMSet.gmms - // vector which is the order of appearance in the MMF file - pool.put(id, vars); - } - } - return pool; - } - - public GaussianWeights htkWeights(String path, float floor) { - int numStates = getNumStates(); - int numStreams = 1; - int numGaussiansPerState = getGMMSize(); - GaussianWeights mixtureWeights = new GaussianWeights(path, numStates, numGaussiansPerState, numStreams); - for (int i = 0; i < numStates; i++) { - GMMDiag gmm = hmmsHTK.gmms.get(i); - float[] logWeights = new float[numGaussiansPerState]; - for (int j = 0; j < numGaussiansPerState; j++) { - logWeights[j] = gmm.getWeight(j); - } - Utilities.floorData(logWeights, mixtureWeightFloor); - logMath.linearToLog(logWeights); - // the order of the weights is the order in the HMMSet.gmms - // vector which is the order of appearance in the MMF file - mixtureWeights.put(i, 0, logWeights); - } - return mixtureWeights; - } - - public Pool htkTrans(String path) { - Pool pool = new Pool(path); - int numMatrices = getNumHMMs(); - int i = 0; - - /* - * the order of the transitions is first, the order of the trans - * macro, and then the order of the trans in the HMMs... in other - * words, this is simply the order of the trans in the MMF ! - */ - - // tied-trans - if (hmmsHTK.transitions != null) - for (; i < hmmsHTK.transitions.size(); i++) { - float[][] tr = hmmsHTK.transitions.get(i); - float[][] tmat = new float[tr.length][tr[0].length]; - for (int j = 0; j < tmat.length; j++) - for (int k = 0; k < tmat[j].length; k++) { - tmat[j][k] = logMath.linearToLog(tr[j][k]); - } - pool.put(i, tmat); - } - - // untied-trans - for (int l = 0; l < numMatrices; l++) { - SingleHMM hmm = hmmsHTK.getHMM(l); - if (hmm.trans != null) { - float[][] tr = hmm.trans; - float[][] tmat = new float[tr.length][tr[0].length]; - for (int j = 0; j < tmat.length; j++) - for (int k = 0; k < tmat[j].length; k++) { - tmat[j][k] = logMath.linearToLog(tr[j][k]); - } - hmm.trIdx = i; - pool.put(i++, tmat); - } else { - // The index in the pool is the same as the index in the - // macros - hmm.trIdx = hmm.getTransIdx(); - } - } - return pool; - } - } - - @Override - public void update(Transform transform, ClusteredDensityFileData clusters) { - // TODO not implemented yet - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/KaldiLoader.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/KaldiLoader.java deleted file mode 100755 index f34cd564..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/KaldiLoader.java +++ /dev/null @@ -1,294 +0,0 @@ -/* - * Copyright 2013 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate; - -import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.net.URL; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Properties; - -import edu.cmu.sphinx.decoder.adaptation.ClusteredDensityFileData; -import edu.cmu.sphinx.decoder.adaptation.Transform; -import edu.cmu.sphinx.linguist.acoustic.HMMPosition; -import edu.cmu.sphinx.linguist.acoustic.Unit; -import edu.cmu.sphinx.linguist.acoustic.UnitManager; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.kaldi.KaldiGmmPool; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.kaldi.KaldiTextParser; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.kaldi.TransitionModel; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Component; -import edu.cmu.sphinx.util.props.S4String; - - -public class KaldiLoader implements Loader { - - @S4Component(type = UnitManager.class) - public final static String PROP_UNIT_MANAGER = "unitManager"; - private String location; - - @S4String(mandatory = true) - public final static String PROP_LOCATION = "location"; - private UnitManager unitManager; - - private Pool senonePool; - private HMMManager hmmManager; - private Properties modelProperties; - private Map contextIndependentUnits; - private float[][] transform; - - /** - * Constructs empty object. - * - * Does nothing but is required for instantiation from the context object. - */ - public KaldiLoader() { - } - - public KaldiLoader(String location, UnitManager unitManager) { - init(location, unitManager); - } - - public void init(String location, UnitManager unitManager) { - this.location = location; - this.unitManager = unitManager; - } - - public void newProperties(PropertySheet ps) throws PropertyException { - init(ps.getString(PROP_LOCATION), - (UnitManager) ps.getComponent(PROP_UNIT_MANAGER)); - } - - /** - * Loads the acoustic model. - * - * @throws IOException if an error occurs while loading the model - */ - public void load() throws IOException { - KaldiTextParser parser = new KaldiTextParser(location); - TransitionModel transitionModel = new TransitionModel(parser); - senonePool = new KaldiGmmPool(parser); - - File file = new File(location, "phones.txt"); - InputStream stream = new URL(file.getPath()).openStream(); - Reader reader = new InputStreamReader(stream); - BufferedReader br = new BufferedReader(reader); - Map symbolTable = new HashMap(); - String line; - - while (null != (line = br.readLine())) { - String[] fields = line.split(" "); - if (Character.isLetter(fields[0].charAt(0))) - symbolTable.put(fields[0], Integer.parseInt(fields[1])); - } - - contextIndependentUnits = new HashMap(); - hmmManager = new LazyHmmManager(parser, transitionModel, - senonePool, symbolTable); - - for (String phone : symbolTable.keySet()) { - Unit unit = unitManager.getUnit(phone, "SIL".equals(phone)); - contextIndependentUnits.put(unit.getName(), unit); - // Ensure monophone HMMs are created. - hmmManager.get(HMMPosition.UNDEFINED, unit); - } - - loadTransform(); - loadProperties(); - } - - private void loadTransform() throws IOException { - URL transformUrl = new URL(new File(location, "final.mat").getPath()); - Reader reader = new InputStreamReader(transformUrl.openStream()); - BufferedReader br = new BufferedReader(reader); - List values = new ArrayList(); - int numRows = 0; - int numCols = 0; - String line; - - while (null != (line = br.readLine())) { - int colCount = 0; - - for (String word : line.split("\\s+")) { - if (word.isEmpty() || "[".equals(word) || "]".equals(word)) - continue; - - values.add(Float.parseFloat(word)); - ++colCount; - } - - if (colCount > 0) - ++numRows; - - numCols = colCount; - } - - transform = new float[numRows][numCols]; - Iterator valueIterator = values.iterator(); - - for (int i = 0; i < numRows; ++i) { - for (int j = 0; j < numCols; ++j) - transform[i][j] = valueIterator.next(); - } - } - - private void loadProperties() throws IOException { - File file = new File(location, "feat.params"); - InputStream stream = new URL(file.getPath()).openStream(); - Reader reader = new InputStreamReader(stream); - BufferedReader br = new BufferedReader(reader); - modelProperties = new Properties(); - String line; - - while ((line = br.readLine()) != null) { - String[] tokens = line.split(" "); - modelProperties.put(tokens[0], tokens[1]); - } - } - - /** - * Gets the senone pool for this loader. - * - * @return the pool - */ - public Pool getSenonePool() { - return senonePool; - } - - /** - * Returns the HMM Manager for this loader. - * - * @return the HMM Manager - */ - public HMMManager getHMMManager() { - return hmmManager; - } - - /** - * Returns the map of context indepent units. - * - * The map can be accessed by unit name. - * - * @return the map of context independent units - */ - public Map getContextIndependentUnits() { - return contextIndependentUnits; - } - - /** - * Returns the size of the left context for context dependent units. - * - * @return the left context size - */ - public int getLeftContextSize() { - return 1; - } - - /** - * Returns the size of the right context for context dependent units. - * - * @return the right context size - */ - public int getRightContextSize() { - return 1; - } - - /** - * Returns the model properties - */ - public Properties getProperties() { - return modelProperties; - } - - /** - * Logs information about this loader - */ - public void logInfo() { - } - - /** - * Not implemented. - */ - public Pool getMeansPool() { - return null; - } - - /** - * Not implemented. - */ - public Pool getMeansTransformationMatrixPool() { - return null; - } - - /** - * Not implemented. - */ - public Pool getMeansTransformationVectorPool() { - return null; - } - - /** - * Not implemented. - */ - public Pool getVariancePool() { - return null; - } - - /** - * Not implemented. - */ - public Pool getVarianceTransformationMatrixPool() { - return null; - } - - /** - * Not implemented. - */ - public Pool getVarianceTransformationVectorPool() { - return null; - } - - /** - * Not implemented. - */ - public GaussianWeights getMixtureWeights() { - return null; - } - - /** - * Not implemented. - */ - public Pool getTransitionMatrixPool() { - return null; - } - - /** - * Not implemented. - */ - public float[][] getTransformMatrix() { - return transform; - } - - @Override - public void update(Transform transform, ClusteredDensityFileData clusters) { - // TODO Not implemented yet - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/LazyHmmManager.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/LazyHmmManager.java deleted file mode 100755 index 2e63fe67..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/LazyHmmManager.java +++ /dev/null @@ -1,134 +0,0 @@ -package edu.cmu.sphinx.linguist.acoustic.tiedstate; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.InputMismatchException; -import java.util.List; -import java.util.Map; - -import edu.cmu.sphinx.linguist.acoustic.HMM; -import edu.cmu.sphinx.linguist.acoustic.HMMPosition; -import edu.cmu.sphinx.linguist.acoustic.LeftRightContext; -import edu.cmu.sphinx.linguist.acoustic.Unit; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.kaldi.ConstantEventMap; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.kaldi.EventMap; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.kaldi.KaldiTextParser; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.kaldi.SplitEventMap; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.kaldi.TableEventMap; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.kaldi.TransitionModel; - -/** - * {@link HMMManager} extension to load HMMs from Kaldi model. - * - * Initially empty this class creates HMMs on request. - */ -public class LazyHmmManager extends HMMManager { - - private final EventMap eventMap; - private final Pool senonePool; - private final Map symbolTable; - private final TransitionModel transitionModel; - - public LazyHmmManager(KaldiTextParser parser, - TransitionModel transitionModel, - Pool senonePool, - Map symbolTable) - { - this.transitionModel = transitionModel; - this.senonePool = senonePool; - this.symbolTable = symbolTable; - - parser.expectToken("ContextDependency"); - parser.getInt(); - parser.getInt(); - parser.expectToken("ToPdf"); - eventMap = parseEventMap(parser); - parser.expectToken("EndContextDependency"); - } - - private EventMap parseEventMap(KaldiTextParser parser) { - String token = parser.getToken(); - - if ("CE".equals(token)) - return new ConstantEventMap(parser.getInt()); - - if ("SE".equals(token)) - return parseSplitEventMap(parser); - - if ("TE".equals(token)) - return parseTableEventMap(parser); - - if ("NULL".equals(token)) - return null; - - throw new InputMismatchException(token); - } - - private EventMap parseSplitEventMap(KaldiTextParser parser) { - int key = parser.getInt(); - Collection values; - values = new ArrayList(); - for (Integer n : parser.getIntArray()) - values.add(n); - - parser.expectToken("{"); - EventMap yesMap = parseEventMap(parser); - EventMap noMap = parseEventMap(parser); - EventMap eventMap = new SplitEventMap(key, values, yesMap, noMap); - parser.expectToken("}"); - - return eventMap; - } - - private EventMap parseTableEventMap(KaldiTextParser parser) { - int key = parser.getInt(); - int size = parser.getInt(); - List table = new ArrayList(size); - - parser.expectToken("("); - - while (0 < size--) - table.add(parseEventMap(parser)); - - parser.expectToken(")"); - return new TableEventMap(key, table); - } - - @Override - public HMM get(HMMPosition position, Unit unit) { - HMM hmm = super.get(position, unit); - if (null != hmm) return hmm; - - int[] ids = new int[3]; - ids[1] = symbolTable.get(unit.getName()); - - if (unit.isContextDependent()) { - LeftRightContext context = (LeftRightContext) unit.getContext(); - Unit left = context.getLeftContext()[0]; - Unit right = context.getRightContext()[0]; - ids[0] = symbolTable.get(left.getName()); - ids[2] = symbolTable.get(right.getName()); - } else { - ids[0] = symbolTable.get("SIL"); - ids[2] = symbolTable.get("SIL"); - } - - int[] pdfs = new int[3]; - pdfs[0] = eventMap.map(0, ids); - pdfs[1] = eventMap.map(1, ids); - pdfs[2] = eventMap.map(2, ids); - - Senone[] senones = new Senone[3]; - senones[0] = senonePool.get(pdfs[0]); - senones[1] = senonePool.get(pdfs[1]); - senones[2] = senonePool.get(pdfs[2]); - SenoneSequence ss = new SenoneSequence(senones); - - float[][] transitionMatrix; - transitionMatrix = transitionModel.getTransitionMatrix(ids[1], pdfs); - hmm = new SenoneHMM(unit, ss, transitionMatrix, position); - put(hmm); - - return hmm; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/Loader.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/Loader.java deleted file mode 100755 index 2dba12d5..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/Loader.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate; - -import edu.cmu.sphinx.util.props.Configurable; -import edu.cmu.sphinx.decoder.adaptation.ClusteredDensityFileData; -import edu.cmu.sphinx.decoder.adaptation.Transform; -import edu.cmu.sphinx.linguist.acoustic.Unit; - -import java.io.IOException; -import java.util.Map; -import java.util.Properties; - -/** Generic interface for a loader of acoustic models */ -public interface Loader extends Configurable { - - /** - * Loads the acoustic model. - * - * @throws IOException if an error occurs while loading the model - */ - public void load() throws IOException; - - /** - * Gets the pool of means for this loader. - * - * @return the pool - */ - public Pool getMeansPool(); - - /** - * Gets the means transformation matrix pool. - * - * @return the pool - */ - public Pool getMeansTransformationMatrixPool(); - - /** - * Gets the means transformation vectors pool. - * - * @return the pool - */ - public Pool getMeansTransformationVectorPool(); - - /** - * Gets the variance pool. - * - * @return the pool - */ - public Pool getVariancePool(); - - /** - * Gets the variance transformation matrix pool. - * - * @return the pool - */ - public Pool getVarianceTransformationMatrixPool(); - - /** - * Gets the variance transformation vectors pool. - * - * @return the pool - */ - public Pool getVarianceTransformationVectorPool(); - - /** - * Gets the mixture weight pool. - * - * @return the pool - */ - public GaussianWeights getMixtureWeights(); - - /** - * Gets the transition matrix pool. - * - * @return the pool - */ - public Pool getTransitionMatrixPool(); - - /** - * Gets the transformation matrix. - * - * @return the matrix - */ - public float[][] getTransformMatrix(); - - /** - * Gets the senone pool for this loader. - * - * @return the pool - */ - public Pool getSenonePool(); - - /** - * Returns the HMM Manager for this loader. - * - * @return the HMM Manager - */ - public HMMManager getHMMManager(); - - /** - * Returns the map of context indepent units. The map can be accessed by unit name. - * - * @return the map of context independent units - */ - public Map getContextIndependentUnits(); - - /** logs information about this loader */ - public void logInfo(); - - /** - * Returns the size of the left context for context dependent units. - * - * @return the left context size - */ - public int getLeftContextSize(); - - /** - * Returns the size of the right context for context dependent units. - * - * @return the left context size - */ - public int getRightContextSize(); - - /** - * @return the model properties - */ - public Properties getProperties(); - - /** - * Apply the transform - * @param transform transform to apply to the model - * @param clusters transform clusters - */ - public void update(Transform transform, ClusteredDensityFileData clusters); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/MixtureComponent.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/MixtureComponent.java deleted file mode 100755 index fef9a216..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/MixtureComponent.java +++ /dev/null @@ -1,345 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate; - -import edu.cmu.sphinx.frontend.FloatData; -import edu.cmu.sphinx.util.LogMath; - -import java.io.Serializable; -import java.util.Arrays; - -/** - * Defines the set of shared elements for a GaussianMixture. Since these elements are potentially - * shared by a number of {@link GaussianMixture GaussianMixtures}, these elements should not be - * written to. The GaussianMixture defines a single probability density function along with a set of - * adaptation parameters. - *

    - * Note that all scores and weights are in LogMath log base - */ -// TODO: Since many of the subcomponents of a MixtureComponent are shared, are -// there some potential opportunities to reduce the number of computations in scoring -// senones by sharing intermediate results for these subcomponents? -@SuppressWarnings("serial") -public class MixtureComponent implements Cloneable, Serializable { - - private float[] mean; - /** Mean after transformed by the adaptation parameters. */ - protected float[] meanTransformed; - private float[][] meanTransformationMatrix; - private float[] meanTransformationVector; - private float[] variance; - /** Precision is the inverse of the variance. This includes adaptation. */ - protected float[] precisionTransformed; - private float[][] varianceTransformationMatrix; - private float[] varianceTransformationVector; - - protected float distFloor; - private float varianceFloor; - - public static final float DEFAULT_VAR_FLOOR = 0.0001f; // this also seems to be the default of SphinxTrain - public static final float DEFAULT_DIST_FLOOR = 0.0f; - - protected float logPreComputedGaussianFactor; - protected LogMath logMath; - - /** - * Create a MixtureComponent with the given sub components. - * - * @param mean the mean vector for this PDF - * @param variance the variance for this PDF - */ - public MixtureComponent(float[] mean, float[] variance) { - this(mean, null, null, variance, null, null, DEFAULT_DIST_FLOOR, DEFAULT_VAR_FLOOR); - } - - - /** - * Create a MixtureComponent with the given sub components. - * - * @param mean the mean vector for this PDF - * @param meanTransformationMatrix transformation matrix for this pdf - * @param meanTransformationVector transform vector for this PDF - * @param variance the variance for this PDF - * @param varianceTransformationMatrix var. transform matrix for this PDF - * @param varianceTransformationVector var. transform vector for this PDF - */ - public MixtureComponent( - float[] mean, - float[][] meanTransformationMatrix, - float[] meanTransformationVector, - float[] variance, - float[][] varianceTransformationMatrix, - float[] varianceTransformationVector) { - this(mean, meanTransformationMatrix, meanTransformationVector, variance, - varianceTransformationMatrix, varianceTransformationVector, DEFAULT_DIST_FLOOR, DEFAULT_VAR_FLOOR); - } - - - /** - * Create a MixtureComponent with the given sub components. - * - * @param mean the mean vector for this PDF - * @param meanTransformationMatrix transformation matrix for this pdf - * @param meanTransformationVector transform vector for this PDF - * @param variance the variance for this PDF - * @param varianceTransformationMatrix var. transform matrix for this PDF - * @param varianceTransformationVector var. transform vector for this PDF - * @param distFloor the lowest score value (in linear domain) - * @param varianceFloor the lowest value for the variance - */ - public MixtureComponent( - float[] mean, - float[][] meanTransformationMatrix, - float[] meanTransformationVector, - float[] variance, - float[][] varianceTransformationMatrix, - float[] varianceTransformationVector, - float distFloor, - float varianceFloor) { - - assert variance.length == mean.length; - - logMath = LogMath.getLogMath(); - this.mean = mean; - this.meanTransformationMatrix = meanTransformationMatrix; - this.meanTransformationVector = meanTransformationVector; - this.variance = variance; - this.varianceTransformationMatrix = varianceTransformationMatrix; - this.varianceTransformationVector = varianceTransformationVector; - - assert distFloor >= 0.0 : "distFloot seems to be already in log-domain"; - this.distFloor = logMath.linearToLog(distFloor); - this.varianceFloor = varianceFloor; - - transformStats(); - - logPreComputedGaussianFactor = precomputeDistance(); - } - - - /** - * Returns the mean for this component. - * - * @return the mean - */ - public float[] getMean() { - return mean; - } - - - /** - * Returns the variance for this component. - * - * @return the variance - */ - public float[] getVariance() { - return variance; - } - - - /** - * Calculate the score for this mixture against the given feature. - *

    - * Note: The support of DoubleData-features would require an array conversion to - * float[]. Because getScore might be invoked with very high frequency, features are restricted - * to be FloatDatas. - * - * @param feature the feature to score - * @return the score, in log, for the given feature - */ - public float getScore(FloatData feature) { - return getScore(feature.getValues()); - } - - - /** - * Calculate the score for this mixture against the given feature. We model the output - * distributions using a mixture of Gaussians, therefore the current implementation is simply - * the computation of a multi-dimensional Gaussian.

    Normal(x) = exp{-0.5 * (x-m)' * - * inv(Var) * (x-m)} / {sqrt((2 * PI) ^ N) * det(Var))}

    - *

    - * where x and m are the incoming cepstra and mean vector respectively, - * Var is the Covariance matrix, det() is the determinant of a matrix, - * inv() is its inverse, exp is the exponential operator, x' is the - * transposed vector of x and N is the dimension of the vectors x and - * m. - * - * @param feature the feature to score - * @return the score, in log, for the given feature - */ - public float getScore(float[] feature) { - float logDval = logPreComputedGaussianFactor; - - // First, compute the argument of the exponential function in - // the definition of the Gaussian, then convert it to the - // appropriate base. If the log base is Math.E, - // then no operation is necessary. - - for (int i = 0; i < feature.length; i++) { - float logDiff = feature[i] - meanTransformed[i]; - logDval += logDiff * logDiff * precisionTransformed[i]; - } - // logDval = -logVal / 2; - - // At this point, we have the ln() of what we need, that is, - // the argument of the exponential in the javadoc comment. - - // Convert to the appropriate base. - logDval = logMath.lnToLog(logDval); - - // System.out.println("MC: getscore " + logDval); - - // TODO: Need to use mean and variance transforms here - - if (Float.isNaN(logDval)) { - System.out.println("gs is Nan, converting to 0"); - logDval = LogMath.LOG_ZERO; - } - - if (logDval < distFloor) { - logDval = distFloor; - } - - return logDval; - } - - - /** - * Pre-compute factors for the Mahalanobis distance. Some of the Mahalanobis distance - * computation can be carried out in advance. Specifically, the factor containing only variance - * in the Gaussian can be computed in advance, keeping in mind that the the determinant of the - * covariance matrix, for the degenerate case of a mixture with independent components - only - * the diagonal elements are non-zero - is simply the product of the diagonal elements.

    - * We're computing the expression: - *

    {sqrt((2 * PI) ^ N) * det(Var))}
    - * - * @return the precomputed distance - */ - public float precomputeDistance() { - double logPreComputedGaussianFactor = 0.0; // = log(1.0) - // Compute the product of the elements in the Covariance - // matrix's main diagonal. Covariance matrix is assumed - // diagonal - independent dimensions. In log, the product - // becomes a summation. - for (int i = 0; i < variance.length; i++) { - logPreComputedGaussianFactor += - Math.log(precisionTransformed[i] * -2); - // variance[i] = 1.0f / (variance[i] * 2.0f); - } - - // We need the minus sign since we computed - // logPreComputedGaussianFactor based on precision, which is - // the inverse of the variance. Therefore, in the log domain, - // the two quantities have opposite signs. - - // The covariance matrix's dimension becomes a multiplicative - // factor in log scale. - logPreComputedGaussianFactor = - Math.log(2.0 * Math.PI) * variance.length - - logPreComputedGaussianFactor; - - // The sqrt above is a 0.5 multiplicative factor in log scale. - return -(float)logPreComputedGaussianFactor * 0.5f; - } - - - /** Applies transformations to means and variances. */ - public void transformStats() { - int featDim = mean.length; - /* - * The transformed mean vector is given by: - * - *

    M = A * m + B

    - * - * where M and m are the mean vector after and - * before transformation, respectively, and A and - * B are the transformation matrix and vector, - * respectively. - * - * if A or B are null the according substeps are skipped - */ - if (meanTransformationMatrix != null) { - meanTransformed = new float[featDim]; - for (int i = 0; i < featDim; i++) - for (int j = 0; j < featDim; j++) - meanTransformed[i] += mean[j] * meanTransformationMatrix[i][j]; - } else { - meanTransformed = mean; - } - - if (meanTransformationVector != null) - for (int k = 0; k < featDim; k++) - meanTransformed[k] += meanTransformationVector[k]; - - /** - * We do analogously with the variance. In this case, we also - * invert the variance, and work with precision instead of - * variance. - */ - if (varianceTransformationMatrix != null) { - precisionTransformed = new float[variance.length]; - for (int i = 0; i < featDim; i++) - for (int j = 0; j < featDim; j++) - precisionTransformed[i] += variance[j] * varianceTransformationMatrix[i][j]; - } else - precisionTransformed = variance.clone(); - - if (varianceTransformationVector != null) - for (int k = 0; k < featDim; k++) - precisionTransformed[k] += varianceTransformationVector[k]; - - for (int k = 0; k < featDim; k++) { - float flooredPrecision = (precisionTransformed[k] < varianceFloor ? varianceFloor : precisionTransformed[k]); - precisionTransformed[k] = 1.0f / (-2.0f * flooredPrecision); - } - } - - @Override - public MixtureComponent clone() throws CloneNotSupportedException { - MixtureComponent mixComp = (MixtureComponent)super.clone(); - - mixComp.distFloor = distFloor; - mixComp.varianceFloor = varianceFloor; - mixComp.logPreComputedGaussianFactor = logPreComputedGaussianFactor; - - mixComp.mean = this.mean != null ? this.mean.clone() : null; - if (meanTransformationMatrix != null) { - mixComp.meanTransformationMatrix = this.meanTransformationMatrix.clone(); - for (int i = 0; i < meanTransformationMatrix.length; i++) - mixComp.meanTransformationMatrix[i] = meanTransformationMatrix[i].clone(); - } - mixComp.meanTransformationVector = this.meanTransformationVector != null ? - this.meanTransformationVector.clone() : null; - mixComp.meanTransformed = this.meanTransformed != null ? this.meanTransformed.clone() : null; - - mixComp.variance = this.variance != null ? this.variance.clone() : null; - if (varianceTransformationMatrix != null) { - mixComp.varianceTransformationMatrix = this.varianceTransformationMatrix.clone(); - for (int i = 0; i < varianceTransformationMatrix.length; i++) - mixComp.varianceTransformationMatrix[i] = varianceTransformationMatrix[i].clone(); - } - mixComp.varianceTransformationVector = this.varianceTransformationVector != null ? - this.varianceTransformationVector.clone() : null; - mixComp.precisionTransformed = this.precisionTransformed != null ? - this.precisionTransformed.clone() : null; - - return mixComp; - } - - - @Override - public String toString() { - return "mu=" + Arrays.toString(mean) + " cov=" + Arrays.toString(variance); - } -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/Pool.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/Pool.java deleted file mode 100755 index 4d58b0ba..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/Pool.java +++ /dev/null @@ -1,121 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate; - - -import java.util.*; -import java.util.logging.Logger; - -/** Used to pool shared objects in the acoustic model */ -public class Pool { - - public enum Feature { NUM_SENONES, NUM_GAUSSIANS_PER_STATE, NUM_STREAMS } - - private final String name; - private final List pool; - private final Map features = new EnumMap(Feature.class); - - /** - * Creates a new pool. - * - * @param name the name of the pool - */ - public Pool(String name) { - this.name = name; - pool = new ArrayList(); - } - - /** - * Returns the pool's name. - * - * @return the pool name - */ - public String getName() { - return name; - } - - /** - * Returns the object with the given ID from the pool. - * - * @param id the id of the object - * @return the object - * @throws IndexOutOfBoundsException if the ID is out of range - */ - public T get(int id) { - return pool.get(id); - } - - /** - * Returns the ID of a given object from the pool. - * - * @param object the object - * @return the index - */ - public int indexOf(T object) { - return pool.indexOf(object); - } - - /** - * Places the given object in the pool. - * - * @param id a unique ID for this object - * @param o the object to add to the pool - */ - public void put(int id, T o) { - if (id == pool.size()) { - pool.add(o); - } else { - pool.set(id, o); - } - } - - /** - * Retrieves the size of the pool. - * - * @return the size of the pool - */ - public int size() { - return pool.size(); - } - - /** - * Dump information on this pool to the given logger. - * - * @param logger the logger to send the info to - */ - public void logInfo(Logger logger) { - logger.info("Pool " + name + " Entries: " + size()); - } - - /** - * Sets a feature for this pool. - * - * @param feature feature to set - * @param value the value for the feature - */ - public void setFeature(Feature feature, int value) { - features.put(feature, value); - } - - /** - * Retrieves a feature from this pool. - * - * @param feature feature to get - * @param defaultValue the defaultValue for the pool - * @return the value for the feature - */ - public int getFeature(Feature feature, int defaultValue) { - Integer val = features.get(feature); - return val == null ? defaultValue : val; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/Saver.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/Saver.java deleted file mode 100755 index 46b8984b..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/Saver.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate; - -import edu.cmu.sphinx.util.props.Configurable; -import edu.cmu.sphinx.util.props.S4Double; -import edu.cmu.sphinx.util.props.S4Boolean; -import edu.cmu.sphinx.linguist.acoustic.Unit; - -import java.util.Map; -import java.io.IOException; - -/** Generic interface for a saver of acoustic models */ -public interface Saver extends Configurable { - - @S4Double(defaultValue = 0.0001f) - public final static String PROP_VARIANCE_FLOOR = "varianceFloor"; - - /** Mixture component score floor. */ - @S4Double(defaultValue = 0.0f) - public final static String PROP_MC_FLOOR = "MixtureComponentScoreFloor"; - - /** Mixture weight floor. */ - @S4Double(defaultValue = 1e-7f) - public final static String PROP_MW_FLOOR = "mixtureWeightFloor"; - - @S4Boolean(defaultValue = true) - public final static String PROP_SPARSE_FORM = "sparseForm"; - - /** - * Gets the pool of means for this loader. - * - * @return the pool - */ - public Pool getMeansPool(); - - /** - * Gets the pool of means transformation matrices for this loader. - * - * @return the pool - */ - public Pool getMeansTransformationMatrixPool(); - - /** - * Gets the pool of means transformation vectors for this loader. - * - * @return the pool - */ - public Pool getMeansTransformationVectorPool(); - - /** - * Gets the variance pool. - * - * @return the pool - */ - public Pool getVariancePool(); - - /** - * Gets the variance transformation matrix pool. - * - * @return the pool - */ - public Pool getVarianceTransformationMatrixPool(); - - /** - * Gets the variance transformation vectorpool. - * - * @return the pool - */ - public Pool getVarianceTransformationVectorPool(); - - /** - * Gets the senone pool for this loader. - * - * @return the pool - */ - public Pool getSenonePool(); - - /** - * Returns the HMM Manager for this loader. - * - * @return the HMM Manager - */ - public HMMManager getHMMManager(); - - /** - * Returns the map of context indepent units. The map can be accessed by unit name. - * - * @return the map of context independent units - */ - public Map getContextIndependentUnits(); - - /** logs information about this loader */ - public void logInfo(); - - /** - * Returns the size of the left context for context dependent units. - * - * @return the left context size - */ - public int getLeftContextSize(); - - /** - * Returns the size of the right context for context dependent units. - * - * @return the left context size - */ - public int getRightContextSize(); - - public void save(String name, boolean b) throws IOException; -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/ScoreCachingSenone.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/ScoreCachingSenone.java deleted file mode 100755 index f6d84524..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/ScoreCachingSenone.java +++ /dev/null @@ -1,54 +0,0 @@ -package edu.cmu.sphinx.linguist.acoustic.tiedstate; - -import edu.cmu.sphinx.frontend.Data; - -/** - * Implements a Senone that contains a cache of the last scored data. - *

    - * Subclasses should implement the abstract {@link #calculateScore} method, - * which is called by the {@link #getScore} method to calculate the score - * for each cache miss. - *

    - * Note: this implementation is thread-safe and can be safely used - * across different threads without external synchronization. - * - * @author Yaniv Kunda - */ -@SuppressWarnings("serial") -public abstract class ScoreCachingSenone implements Senone { - - private class ScoreCache { - private final Data feature; - private final float score; - - public ScoreCache(Data feature, float score) { - this.feature = feature; - this.score = score; - } - } - - private volatile ScoreCache scoreCache = new ScoreCache(null, 0.0f); - - /** - * Gets the cached score for this senone based upon the given feature. - * If the score was not cached, it is calculated using {@link #calculateScore}, - * cached, and then returned. - */ - public float getScore(Data feature) { - ScoreCache cached = scoreCache; - if (feature != cached.feature) { - cached = new ScoreCache(feature, calculateScore(feature)); - scoreCache = cached; - } - return cached.score; - } - - /** - * Calculates the score for this senone based upon the given feature. - * - * @param feature the feature vector to score this senone against - * @return the score for this senone in LogMath log base - */ - protected abstract float calculateScore(Data feature); - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/Senone.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/Senone.java deleted file mode 100755 index cf5da030..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/Senone.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate; - - -import edu.cmu.sphinx.frontend.Data; - -import java.io.Serializable; - -/** Represents a set of acoustic data that can be scored against a feature */ -public interface Senone extends Serializable { - - /** - * Calculates the score for this senone based upon the given feature. - * - * @param feature the feature vector to score this senone against - * @return the score for this senone in LogMath log base - */ - public float getScore(Data feature); - - - /** - * Calculates the component scores for the mixture components in this senone based upon the given feature. - * - * @param feature the feature vector to score this senone against - * @return the scores for this senone in LogMath log base - */ - public float[] calculateComponentScore(Data feature); - - - /** - * Gets the ID for this senone - * - * @return the senone id - */ - public long getID(); - - - /** - * Dumps a senone - * - * @param msg an annotation for the dump - */ - public void dump(String msg); - - /** - * Returns the mixture components associated with this Gaussian - * - * @return the array of mixture components - */ - public MixtureComponent[] getMixtureComponents(); - - /** - * - * @return the mixture weights vector - */ - public float[] getLogMixtureWeights(); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/SenoneHMM.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/SenoneHMM.java deleted file mode 100755 index 64b613b6..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/SenoneHMM.java +++ /dev/null @@ -1,230 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate; - -import edu.cmu.sphinx.linguist.acoustic.HMM; -import edu.cmu.sphinx.linguist.acoustic.HMMPosition; -import edu.cmu.sphinx.linguist.acoustic.HMMState; -import edu.cmu.sphinx.linguist.acoustic.Unit; -import edu.cmu.sphinx.util.Utilities; - -/** - * Represents a hidden-markov-model. An HMM consists of a unit (context dependent or independent), a transition matrix - * from state to state, and a sequence of senones associated with each state. This representation of an HMM is a - * specialized left-to-right markov model. No backward transitions are allowed. - */ -public class SenoneHMM implements HMM { - - private final Unit unit; - private final Unit baseUnit; - private final SenoneSequence senoneSequence; - private final float[][] transitionMatrix; - private final HMMPosition position; - private static int objectCount; - private final HMMState[] hmmStates; - - - /** - * Constructs an HMM - * - * @param unit the unit for this HMM - * @param senoneSequence the sequence of senones for this HMM - * @param transitionMatrix the state transition matrix - * @param position the position associated with this HMM - */ - public SenoneHMM(Unit unit, SenoneSequence senoneSequence, - float[][] transitionMatrix, HMMPosition position) { - this.unit = unit; - this.senoneSequence = senoneSequence; - this.transitionMatrix = transitionMatrix; - this.position = position; - Utilities.objectTracker("HMM", objectCount++); - - hmmStates = new HMMState[transitionMatrix.length]; - for (int i = 0; i < hmmStates.length; i++) { - hmmStates[i] = new SenoneHMMState(this, i); - } - // baseUnit = Unit.getUnit(unit.getName()); - baseUnit = unit.getBaseUnit(); - } - - - /** - * Gets the unit associated with this HMM - * - * @return the unit associated with this HMM - */ - public Unit getUnit() { - return unit; - } - - - /** - * Gets the base unit associated with this HMM - * - * @return the unit associated with this HMM - */ - public Unit getBaseUnit() { - return baseUnit; - } - - - /** - * Retrieves the hmm state - * - * @param which the state of interest - */ - public HMMState getState(int which) { - return hmmStates[which]; - } - - - /** - * Returns the order of the HMM - * - * @return the order of the HMM - */ - // [[[NOTE: this method is probably not explicitly needed since - // getSenoneSequence.getSenones().length will provide the same - // value, but this is certainly more convenient and easier to - // understand - public int getOrder() { - return getSenoneSequence().getSenones().length; - } - - - /** - * Returns the SenoneSequence associated with this HMM - * - * @return the sequence of senones associated with this HMM. The length of the sequence is N, where N is the order - * of the HMM. Note that senone sequences may be shared among HMMs. - */ - // [[ NOTE: the senone sequence may in fact be a sequence of - // composite senones - public SenoneSequence getSenoneSequence() { - return senoneSequence; - } - - - /** - * Determines if this HMM is a composite HMM - * - * @return true if this is a composite hmm - */ - public boolean isComposite() { - Senone[] senones = getSenoneSequence().getSenones(); - for (Senone senone : senones) { - if (senone instanceof CompositeSenone) { - return true; - } - } - return false; - } - - - /** - * Returns the transition matrix that determines the state transition probabilities for the matrix. Each entry in - * the transition matrix defines the probability of transitioning from one state to the next. For example, the - * probability of transitioning from state 1 to state 2 can be determined by accessing transition matrix - * element[1][2]. - * - * @return the transition matrix (in log domain) of size NxN where N is the order of the HMM - */ - public float[][] getTransitionMatrix() { - return transitionMatrix; - } - - - /** - * Returns the transition probability between two states. - * - * @param stateFrom the index of the state this transition goes from - * @param stateTo the index of the state this transition goes to - * @return the transition probability (in log domain) - */ - public float getTransitionProbability(int stateFrom, int stateTo) { - return transitionMatrix[stateFrom][stateTo]; - } - - - /** - * Retrieves the position of this HMM. Possible - * - * @return the position for this HMM - */ - public HMMPosition getPosition() { - return position; - } - - - /** - * Determines if this HMM represents a filler unit. A filler unit is speech that is not meaningful such as a cough, - * 'um' , 'er', or silence. - * - * @return true if the HMM represents a filler unit - */ - public boolean isFiller() { - return unit.isFiller(); - } - - - /** - * Determines if this HMM corresponds to a context dependent unit - * - * @return true if the HMM is context dependent - */ - public boolean isContextDependent() { - return unit.isContextDependent(); - } - - - /** - * Gets the initial states (with probabilities) for this HMM - * - * @return the set of arcs that transition to the initial states for this HMM - */ - public HMMState getInitialState() { - return getState(0); - } - - - /** - * Returns the string representation of this object - * - * @return the string representation - */ - @Override - public String toString() { - String name = isComposite() ? "HMM@" : "HMM"; - return name + '(' + unit + "):" + position; - } - - - @Override - public int hashCode() { - return getSenoneSequence().hashCode(); - } - - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } else if (o instanceof SenoneHMM) { - SenoneHMM other = (SenoneHMM) o; - return getSenoneSequence().equals(other.getSenoneSequence()); - } - return false; - } -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/SenoneHMMState.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/SenoneHMMState.java deleted file mode 100755 index 0a9f8ece..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/SenoneHMMState.java +++ /dev/null @@ -1,208 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate; - -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.linguist.acoustic.HMM; -import edu.cmu.sphinx.linguist.acoustic.HMMState; -import edu.cmu.sphinx.linguist.acoustic.HMMStateArc; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.Utilities; - -import java.util.ArrayList; -import java.util.List; - -/** Represents a single state in an HMM */ -public class SenoneHMMState implements HMMState { - - private final SenoneHMM hmm; - private final int state; - HMMStateArc[] arcs; - private final boolean isEmitting; - private Senone senone; - private final int hashCode; - - private static int objectCount; - - - /** - * Constructs a SenoneHMMState - * - * @param hmm the HMM for this state - * @param which the index for this particular state - */ - SenoneHMMState(SenoneHMM hmm, int which) { - this.hmm = hmm; - this.state = which; - this.isEmitting = ((hmm.getTransitionMatrix().length - 1) != state); - if (isEmitting) { - SenoneSequence ss = hmm.getSenoneSequence(); - senone = ss.getSenones()[state]; - } - Utilities.objectTracker("HMMState", objectCount++); - hashCode = hmm.hashCode() + 37 * state; - } - - - /** - * Gets the HMM associated with this state - * - * @return the HMM - */ - public HMM getHMM() { - return hmm; - } - - - /** - * Gets the state - * - * @return the state - */ - public int getState() { - return state; - } - - - /** - * Gets the score for this HMM state - * - * @param feature the feature to be scored - * @return the acoustic score for this state. - */ - public float getScore(Data feature) { - return senone.getScore(feature); - } - - - /** - * Gets the scores for each mixture component in this HMM state - * - * @param feature the feature to be scored - * @return the acoustic scores for the components of this state. - */ - public float[] calculateComponentScore(Data feature) { - hmm.getSenoneSequence(); - return senone.calculateComponentScore(feature); - } - - - /** - * Gets the senone for this HMM state - * - * @return the senone for this state. - */ - public Senone getSenone() { - return senone; - } - - - /** - * Determines if two HMMStates are equal - * - * @param other the state to compare this one to - * @return true if the states are equal - */ - @Override - public boolean equals(Object other) { - if (this == other) { - return true; - } else if (!(other instanceof SenoneHMMState)) { - return false; - } else { - SenoneHMMState otherState = (SenoneHMMState) other; - return this.hmm == otherState.hmm && - this.state == otherState.state; - } - } - - - /** - * Returns the hashcode for this state - * - * @return the hashcode - */ - @Override - public int hashCode() { - return hashCode; - } - - - /** - * Determines if this HMMState is an emitting state - * - * @return true if the state is an emitting state - */ - // TODO: We may have non-emitting entry states as well. - public final boolean isEmitting() { - return isEmitting; - } - - - /** - * Retrieves the state of successor states for this state - * - * @return the set of successor state arcs - */ - public HMMStateArc[] getSuccessors() { - if (arcs == null) { - List list = new ArrayList(); - float[][] transitionMatrix = hmm.getTransitionMatrix(); - - for (int i = 0; i < transitionMatrix.length; i++) { - if (transitionMatrix[state][i] > LogMath.LOG_ZERO) { - HMMStateArc arc = new HMMStateArc(hmm.getState(i), - transitionMatrix[state][i]); - list.add(arc); - } - } - arcs = list.toArray(new HMMStateArc[list.size()]); - } - return arcs; - } - - - /** - * Determines if this state is an exit state of the HMM - * - * @return true if the state is an exit state - */ - public boolean isExitState() { - // return (hmm.getTransitionMatrix().length - 1) == state; - return !isEmitting; - } - - - /** - * returns a string representation of this object - * - * @return a string representation - */ - @Override - public String toString() { - return "HMMS " + hmm + " state " + state; - } - - public MixtureComponent[] getMixtureComponents() { - return senone.getMixtureComponents(); - } - - public long getMixtureId() { - return senone.getID(); - } - - public float[] getLogMixtureWeights() { - return senone.getLogMixtureWeights(); - } -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/SenoneSequence.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/SenoneSequence.java deleted file mode 100755 index c25c179f..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/SenoneSequence.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate; - -import java.io.Serializable; -import java.util.List; - -/** Contains an ordered list of senones. */ -@SuppressWarnings("serial") -public class SenoneSequence implements Serializable { - - private final Senone[] senones; - - - /** - * a factory method that creates a SeononeSequence from a list of senones. - * - * @param senoneList the list of senones - * @return a composite senone - */ - public static SenoneSequence create(List senoneList) { - return new SenoneSequence(senoneList.toArray(new Senone[senoneList.size()])); - } - - - /** - * Constructs a senone sequence - * - * @param sequence the ordered set of senones for this sequence - */ - public SenoneSequence(Senone[] sequence) { - this.senones = sequence; - } - - - /** - * Returns the ordered set of senones for this sequence - * - * @return the ordered set of senones for this sequence - */ - public Senone[] getSenones() { - return senones; - } - - - /** - * Returns the hashCode for this object - * - * @return the object hashcode - */ - @Override - public int hashCode() { - int hashCode = 31; - for (Senone senone : senones) { - hashCode = hashCode * 91 + senone.hashCode(); - } - return hashCode; - } - - - /** - * Returns true if the objects are equal - * - * @return true if the objects are equal - */ - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } else { - if (o instanceof SenoneSequence) { - SenoneSequence other = (SenoneSequence) o; - if (senones.length != other.senones.length) { - return false; - } else { - for (int i = 0; i < senones.length; i++) { - if (!senones[i].equals(other.senones[i])) { - return false; - } - } - return true; - } - } - return false; - } - } - - - /** - * Dumps this senone sequence - * - * @param msg a string annotation - */ - public void dump(String msg) { - System.out.println(" SenoneSequence " + msg + ':'); - for (Senone senone : senones) { - senone.dump(" seq:"); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/Sphinx3Loader.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/Sphinx3Loader.java deleted file mode 100755 index 9a3fdee0..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/Sphinx3Loader.java +++ /dev/null @@ -1,1300 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist.acoustic.tiedstate; - -import edu.cmu.sphinx.decoder.adaptation.ClusteredDensityFileData; -import edu.cmu.sphinx.decoder.adaptation.Transform; -import edu.cmu.sphinx.linguist.acoustic.*; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.tiedmixture.MixtureComponentSet; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.tiedmixture.PrunableMixtureComponent; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.tiedmixture.SetBasedGaussianMixture; -import static edu.cmu.sphinx.linguist.acoustic.tiedstate.Pool.Feature.*; -import edu.cmu.sphinx.util.ExtendedStreamTokenizer; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.TimerPool; -import edu.cmu.sphinx.util.Utilities; -import edu.cmu.sphinx.util.props.*; - -import java.io.*; -import java.net.MalformedURLException; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Properties; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * Loads a tied-state acoustic model generated by the Sphinx-3 trainer. - *

    - * The acoustic model is stored as a directory specified by a URL. The - * dictionary and language model files are not required to be in the package. - * You can specify their locations separately. - *

    - * Configuration file should set mandatory property of component: location - - * this specifies the directory where the actual model - * data files are. You can use resource: prefix to refer to files packed - * inside jar or any other URI scheme. - * The actual model data files are named "mdef", "means", "variances", - * "transition_matrices", "mixture_weights". - *

    - * If model has some layout that is different default generated by SphinxTrain, - * you may specify additional properties like dataLocation to set the - * path to the binary files, mdef to set the path to the model definition - * file. - */ - -public class Sphinx3Loader implements Loader { - - /** - * The unit manager - */ - @S4Component(type = UnitManager.class) - public final static String PROP_UNIT_MANAGER = "unitManager"; - - /** - * The root location of the model directory structure - */ - @S4String(mandatory = true) - public final static String PROP_LOCATION = "location"; - - /** - * The name of the model definition file (contains the HMM data) - */ - @S4String(mandatory = false, defaultValue = "mdef") - public final static String PROP_MODEL = "modelDefinition"; - - /** - * Subfolder where the acoustic model can be found - */ - @S4String(mandatory = false, defaultValue = "") - public final static String PROP_DATA_LOCATION = "dataLocation"; - - /** - * The property specifying whether context-dependent units should be used. - */ - @S4Boolean(defaultValue = true) - public final static String PROP_USE_CD_UNITS = "useCDUnits"; - - /** - * Mixture component score floor. - */ - @S4Double(defaultValue = 0.0f) - public final static String PROP_MC_FLOOR = "MixtureComponentScoreFloor"; - - /** - * Variance floor. - */ - @S4Double(defaultValue = 0.0001f) - public final static String PROP_VARIANCE_FLOOR = "varianceFloor"; - - /** - * Mixture weight floor - */ - @S4Double(defaultValue = 1e-7f) - public final static String PROP_MW_FLOOR = "mixtureWeightFloor"; - - /** - * Number of top Gaussians to use in scoring - */ - @S4Integer(defaultValue = 4) - public final static String PROP_TOPN = "topGaussiansNum"; - - protected final static String FILLER = "filler"; - protected final static String SILENCE_CIPHONE = "SIL"; - protected final static int BYTE_ORDER_MAGIC = 0x11223344; - - /** - * Supports this version of the acoustic model - */ - public final static String MODEL_VERSION = "0.3"; - - private final static int CONTEXT_SIZE = 1; - protected Properties modelProps; - protected Pool meansPool; - protected Pool variancePool; - protected Pool transitionsPool; - protected GaussianWeights mixtureWeights; - private int numStates; - private int numStreams; - private int numBase; - private int numGaussiansPerState; - private int[] vectorLength; - private int[] senone2ci; - - protected Pool meanTransformationMatrixPool; - protected Pool meanTransformationVectorPool; - protected Pool varianceTransformationMatrixPool; - protected Pool varianceTransformationVectorPool; - - protected float[][] transformMatrix; - private MixtureComponentSet[] phoneticTiedMixtures; - protected Pool senonePool; - - private Map contextIndependentUnits; - private HMMManager hmmManager; - protected LogMath logMath; - private UnitManager unitManager; - private boolean swap; - - private final static String DENSITY_FILE_VERSION = "1.0"; - private final static String MIXW_FILE_VERSION = "1.0"; - private final static String TMAT_FILE_VERSION = "1.0"; - private final static String TRANSFORM_FILE_VERSION = "0.1"; - // -------------------------------------- - // Configuration variables - // -------------------------------------- - protected Logger logger; - private URL location; - protected String model; - protected String dataLocation; - protected float distFloor; - protected float mixtureWeightFloor; - protected float varianceFloor; - private int topGauNum; - protected boolean useCDUnits; - private boolean loaded; - - public Sphinx3Loader(URL location, String model, String dataLocation, - UnitManager unitManager, float distFloor, float mixtureWeightFloor, - float varianceFloor, int topGauNum, boolean useCDUnits) { - - init(location, model, dataLocation, unitManager, distFloor, - mixtureWeightFloor, varianceFloor, topGauNum, useCDUnits, - Logger.getLogger(getClass().getName())); - } - - public Sphinx3Loader(String location, String model, String dataLocation, - UnitManager unitManager, float distFloor, float mixtureWeightFloor, - float varianceFloor, int topGauNum, boolean useCDUnits) - throws MalformedURLException, ClassNotFoundException { - - init(ConfigurationManagerUtils.resourceToURL(location), model, - dataLocation, unitManager, distFloor, mixtureWeightFloor, - varianceFloor, topGauNum, useCDUnits, - Logger.getLogger(getClass().getName())); - } - - protected void init(URL location, String model, String dataLocatoin, - UnitManager unitManager, float distFloor, float mixtureWeightFloor, - float varianceFloor, int topGauNum, boolean useCDUnits, Logger logger) { - logMath = LogMath.getLogMath(); - this.location = location; - this.logger = logger; - this.model = model; - this.dataLocation = dataLocatoin; - this.unitManager = unitManager; - this.distFloor = distFloor; - this.mixtureWeightFloor = mixtureWeightFloor; - this.varianceFloor = varianceFloor; - this.topGauNum = topGauNum; - this.useCDUnits = useCDUnits; - } - - public Sphinx3Loader() { - - } - - public int getNumStates() { - return numStates; - } - - public int getNumStreams() { - return numStreams; - } - - public int getNumGaussiansPerState() { - return numGaussiansPerState; - } - - public int[] getVectorLength() { - return vectorLength; - } - - public int[] getSenone2Ci() { - return senone2ci; - } - - public String getLocation() { - return this.location.getPath(); - } - - public boolean hasTiedMixtures() { - String modelType = modelProps.getProperty("-model", "cont"); - return modelType.equals("ptm"); - } - - public void newProperties(PropertySheet ps) throws PropertyException { - - init(ConfigurationManagerUtils.getResource(PROP_LOCATION, ps), - ps.getString(PROP_MODEL), ps.getString(PROP_DATA_LOCATION), - (UnitManager) ps.getComponent(PROP_UNIT_MANAGER), - ps.getFloat(PROP_MC_FLOOR), ps.getFloat(PROP_MW_FLOOR), - ps.getFloat(PROP_VARIANCE_FLOOR), - ps.getInt(PROP_TOPN), - ps.getBoolean(PROP_USE_CD_UNITS), ps.getLogger()); - } - - // This function is a bit different from the - // ConfigurationManagerUtils.getResource - // for compatibility reasons. By default it looks for the resources, not - // for the files. - protected InputStream getDataStream(String path) throws IOException, - URISyntaxException { - return new URL(location.toURI().toString() + "/" + path).openStream(); - } - - public void load() throws IOException { - if (!loaded) { - TimerPool.getTimer(this, "Load AM").start(); - - hmmManager = new HMMManager(); - contextIndependentUnits = new LinkedHashMap(); - - // dummy pools for these elements - meanTransformationMatrixPool = null; - meanTransformationVectorPool = null; - varianceTransformationMatrixPool = null; - varianceTransformationVectorPool = null; - transformMatrix = null; - - // do the actual acoustic model loading - try { - loadModelFiles(model); - } catch (URISyntaxException e) { - throw new RuntimeException(e); - } - - // done - loaded = true; - TimerPool.getTimer(this, "Load AM").stop(); - } - } - - /** - * Return the HmmManager. - * - * @return the hmmManager - */ - protected HMMManager getHmmManager() { - return hmmManager; - } - - /** - * Return the MatrixPool. - * - * @return the matrixPool - */ - protected Pool getMatrixPool() { - return transitionsPool; - } - - /** - * Return the MixtureWeightsPool. - * - * @return the mixtureWeightsPool - */ - protected GaussianWeights getMixtureWeightsPool() { - return mixtureWeights; - } - - /** - * Loads the AcousticModel from a directory in the file system. - * - * @param modelDef - * the name of the acoustic modelDef; if null we just load from - * the default location - * @throws IOException IO went wrong - * @throws URISyntaxException uri was incorrectly specified - */ - protected void loadModelFiles(String modelDef) throws IOException, - URISyntaxException { - - logger.config("Loading Sphinx3 acoustic model: " + modelDef); - logger.config(" modelName: " + this.model); - logger.config(" dataLocation : " + dataLocation); - - meansPool = loadDensityFile(dataLocation + "means", -Float.MAX_VALUE); - variancePool = loadDensityFile(dataLocation + "variances", - varianceFloor); - mixtureWeights = loadMixtureWeights(dataLocation - + "mixture_weights", mixtureWeightFloor); - transitionsPool = loadTransitionMatrices(dataLocation - + "transition_matrices"); - transformMatrix = loadTransformMatrix(dataLocation - + "feature_transform"); - modelProps = loadModelProps(dataLocation + "feat.params"); - - if (hasTiedMixtures()) { - //create senone to CI mapping - getSenoneToCIPhone(); - //create tied senone pool - senonePool = createTiedSenonePool(distFloor, varianceFloor); - } else { - //create regular senone poll - senonePool = createSenonePool(distFloor, varianceFloor); - } - - // load the HMM modelDef file - InputStream modelStream = getDataStream(this.model); - if (modelStream == null) { - throw new IOException("can't find modelDef " + this.model); - } - loadHMMPool(useCDUnits, modelStream, this.model); - } - - public Map getContextIndependentUnits() { - return contextIndependentUnits; - } - - /** - * Creates senone to CI phone mapping, reading model definition file - */ - private void getSenoneToCIPhone() throws IOException, URISyntaxException { - InputStream inputStream = getDataStream(model); - if (inputStream == null) { - throw new IOException("can't find modelDef " + model); - } - ExtendedStreamTokenizer est = new ExtendedStreamTokenizer(inputStream, - '#', false); - - logger.fine("Loading HMM file from: " + model); - - est.expectString(MODEL_VERSION); - - numBase = est.getInt("numBase"); - est.expectString("n_base"); - - int numTri = est.getInt("numTri"); - est.expectString("n_tri"); - - int numStateMap = est.getInt("numStateMap"); - est.expectString("n_state_map"); - - int numTiedState = est.getInt("numTiedState"); - est.expectString("n_tied_state"); - - senone2ci = new int[numTiedState]; - - est.getInt("numContextIndependentTiedState"); - est.expectString("n_tied_ci_state"); - - int numTiedTransitionMatrices = est.getInt("numTiedTransitionMatrices"); - est.expectString("n_tied_tmat"); - - int numStatePerHMM = numStateMap / (numTri + numBase); - - assert numTiedState == mixtureWeights.getStatesNum(); - assert numTiedTransitionMatrices == transitionsPool.size(); - - // Load the base phones - for (int i = 0; i < numBase + numTri; i++) { - //TODO name this magic const somehow - for (int j = 0; j < 5; j++) - est.getString(); - int tmat = est.getInt("tmat"); - - for (int j = 0; j < numStatePerHMM - 1; j++) { - senone2ci[est.getInt("j")] = tmat; - } - est.expectString("N"); - - assert tmat < numTiedTransitionMatrices; - } - - est.close(); - } - - /** - * Creates the senone pool from the rest of the pools. - * - * @param distFloor - * the lowest allowed score - * @param varianceFloor - * the lowest allowed variance - * @return the senone pool - */ - protected Pool createSenonePool(float distFloor, float varianceFloor) { - Pool pool = new Pool("senones"); - - int numMeans = meansPool.size(); - int numVariances = variancePool.size(); - int numGaussiansPerSenone = mixtureWeights.getGauPerState(); - int numSenones = mixtureWeights.getStatesNum(); - int numStreams = mixtureWeights.getStreamsNum(); - int whichGaussian = 0; - - logger.fine("Senones " + numSenones); - logger.fine("Gaussians Per Senone " + numGaussiansPerSenone); - logger.fine("Means " + numMeans); - logger.fine("Variances " + numVariances); - - assert numGaussiansPerSenone > 0; - assert numVariances == numSenones * numGaussiansPerSenone; - assert numMeans == numSenones * numGaussiansPerSenone; - - float[][] meansTransformationMatrix = meanTransformationMatrixPool == null ? null - : meanTransformationMatrixPool.get(0); - float[] meansTransformationVector = meanTransformationVectorPool == null ? null - : meanTransformationVectorPool.get(0); - float[][] varianceTransformationMatrix = varianceTransformationMatrixPool == null ? null - : varianceTransformationMatrixPool.get(0); - float[] varianceTransformationVector = varianceTransformationVectorPool == null ? null - : varianceTransformationVectorPool.get(0); - - for (int i = 0; i < numSenones; i++) { - MixtureComponent[] mixtureComponents = new MixtureComponent[numGaussiansPerSenone - * numStreams]; - for (int j = 0; j < numGaussiansPerSenone; j++) { - mixtureComponents[j] = new MixtureComponent( - meansPool.get(whichGaussian), - meansTransformationMatrix, meansTransformationVector, - variancePool.get(whichGaussian), - varianceTransformationMatrix, - varianceTransformationVector, distFloor, varianceFloor); - - whichGaussian++; - } - - Senone senone = new GaussianMixture(mixtureWeights, mixtureComponents, i); - pool.put(i, senone); - } - return pool; - } - - /** - * Creates the tied senone pool from the rest of the pools. - * - * @param distFloor - * the lowest allowed score - * @param varianceFloor - * the lowest allowed variance - * @return the senone pool - */ - private Pool createTiedSenonePool(float distFloor, float varianceFloor) { - Pool pool = new Pool("senones"); - - int numMeans = meansPool.size(); - int numVariances = variancePool.size(); - int numGaussiansPerState = mixtureWeights.getGauPerState(); - int numSenones = mixtureWeights.getStatesNum(); - int numStreams = mixtureWeights.getStreamsNum(); - - logger.fine("Senones " + numSenones); - logger.fine("Gaussians Per State " + numGaussiansPerState); - logger.fine("Means " + numMeans); - logger.fine("Variances " + numVariances); - - assert numGaussiansPerState > 0; - assert numVariances == numBase * numGaussiansPerState * numStreams; - assert numMeans == numBase * numGaussiansPerState * numStreams; - - float[][] meansTransformationMatrix = meanTransformationMatrixPool == null ? null - : meanTransformationMatrixPool.get(0); - float[] meansTransformationVector = meanTransformationVectorPool == null ? null - : meanTransformationVectorPool.get(0); - float[][] varianceTransformationMatrix = varianceTransformationMatrixPool == null ? null - : varianceTransformationMatrixPool.get(0); - float[] varianceTransformationVector = varianceTransformationVectorPool == null ? null - : varianceTransformationVectorPool.get(0); - - phoneticTiedMixtures = new MixtureComponentSet[numBase]; - for (int i = 0; i < numBase; i++) { - ArrayList mixtureComponents = new ArrayList(); - for (int j = 0; j < numStreams; j++) { - PrunableMixtureComponent[] featMixtureComponents = new PrunableMixtureComponent[numGaussiansPerState]; - for (int k = 0; k < numGaussiansPerState; k++) { - int whichGaussian = i * numGaussiansPerState * numStreams + j * numGaussiansPerState + k; - featMixtureComponents[k] = new PrunableMixtureComponent( - meansPool.get(whichGaussian), - meansTransformationMatrix, meansTransformationVector, - variancePool.get(whichGaussian), - varianceTransformationMatrix, - varianceTransformationVector, distFloor, varianceFloor, k); - } - mixtureComponents.add(featMixtureComponents); - } - phoneticTiedMixtures[i] = new MixtureComponentSet(mixtureComponents, topGauNum); - } - - for (int i = 0; i < numSenones; i++) { - Senone senone = new SetBasedGaussianMixture(mixtureWeights, phoneticTiedMixtures[senone2ci[i]], i); - pool.put(i, senone); - } - return pool; - } - - /** - * Loads the sphinx3 density file, a set of density arrays are created and - * placed in the given pool. - * - * @param path - * the name of the data - * @param floor - * the minimum density allowed - * @return a pool of loaded densities - * @throws FileNotFoundException - * if a file cannot be found - * @throws IOException - * if an error occurs while loading the data - * @throws URISyntaxException uri was incorrectly specified - */ - public Pool loadDensityFile(String path, float floor) - throws IOException, URISyntaxException { - Properties props = new Properties(); - int blockSize = 0; - - DataInputStream dis = readS3BinaryHeader(path, props); - - String version = props.getProperty("version"); - - if (version == null || !version.equals(DENSITY_FILE_VERSION)) { - throw new IOException("Unsupported version in " + path); - } - - String checksum = props.getProperty("chksum0"); - boolean doCheckSum = (checksum != null && checksum.equals("yes")); - resetChecksum(); - - int numStates = readInt(dis); - int numStreams = readInt(dis); - int numGaussiansPerState = readInt(dis); - - int[] vectorLength = new int[numStreams]; - for (int i = 0; i < numStreams; i++) { - vectorLength[i] = readInt(dis); - } - - int rawLength = readInt(dis); - - logger.fine("Number of states " + numStates); - logger.fine("Number of streams " + numStreams); - logger.fine("Number of gaussians per state " + numGaussiansPerState); - logger.fine("Vector length " + vectorLength.length); - logger.fine("Raw length " + rawLength); - - for (int i = 0; i < numStreams; i++) { - blockSize += vectorLength[i]; - } - - assert rawLength == numGaussiansPerState * blockSize * numStates; - - Pool pool = new Pool(path); - pool.setFeature(NUM_SENONES, numStates); - pool.setFeature(NUM_STREAMS, numStreams); - pool.setFeature(NUM_GAUSSIANS_PER_STATE, numGaussiansPerState); - - for (int i = 0; i < numStates; i++) { - for (int j = 0; j < numStreams; j++) { - for (int k = 0; k < numGaussiansPerState; k++) { - float[] density = readFloatArray(dis, vectorLength[j]); - Utilities.floorData(density, floor); - pool.put(i * numStreams * numGaussiansPerState + j - * numGaussiansPerState + k, density); - } - } - } - - validateChecksum(dis, doCheckSum); - - dis.close(); - - this.numStates = numStates; - this.numStreams = numStreams; - this.numGaussiansPerState = numGaussiansPerState; - this.vectorLength = vectorLength; - - return pool; - } - - /** - * Reads the S3 binary header from the given location + path. Adds header - * information to the given set of properties. - * - * @param path - * the name of the file - * @param props - * the properties - * @return the input stream positioned after the header - * @throws IOException - * on error - * @throws URISyntaxException uri was incorrectly specified - */ - public DataInputStream readS3BinaryHeader(String path, Properties props) - throws IOException, URISyntaxException { - - InputStream inputStream = getDataStream(path); - - if (inputStream == null) { - throw new IOException("Can't open " + path); - } - DataInputStream dis = new DataInputStream(new BufferedInputStream( - inputStream)); - String id = readWord(dis); - if (!id.equals("s3")) { - throw new IOException("Not proper s3 binary file " + path); - } - String name; - while ((name = readWord(dis)) != null) { - if (!name.equals("endhdr")) { - String value = readWord(dis); - props.setProperty(name, value); - } else { - break; - } - } - int byteOrderMagic = dis.readInt(); - if (byteOrderMagic == BYTE_ORDER_MAGIC) { - logger.fine("Not swapping " + path); - swap = false; - } else if (Utilities.swapInteger(byteOrderMagic) == BYTE_ORDER_MAGIC) { - logger.fine("Swapping " + path); - swap = true; - } else { - throw new IOException("Corrupted S3 file " + path); - } - return dis; - } - - /** - * Reads the next word (text separated by whitespace) from the given stream. - * - * @param dis - * the input stream - * @return the next word - * @throws IOException - * on error - */ - String readWord(DataInputStream dis) throws IOException { - StringBuilder sb = new StringBuilder(); - char c; - // skip leading whitespace - do { - c = readChar(dis); - } while (Character.isWhitespace(c)); - // read the word - do { - sb.append(c); - c = readChar(dis); - } while (!Character.isWhitespace(c)); - return sb.toString(); - } - - /** - * Reads a single char from the stream. - * - * @param dis - * the stream to read - * @return the next character on the stream - * @throws IOException - * if an error occurs - */ - private char readChar(DataInputStream dis) throws IOException { - return (char) dis.readByte(); - } - - /* Stores checksum during loading */ - private long calculatedCheckSum = 0; - - /** - * Resets the checksum before loading a new chunk of data - */ - private void resetChecksum() { - calculatedCheckSum = 0; - } - - /** - * Validates checksum in the stream - * - * @param dis - * input stream - * @param doCheckSum - * validates - * @throws IOException - * on error - **/ - private void validateChecksum(DataInputStream dis, boolean doCheckSum) - throws IOException { - if (!doCheckSum) - return; - int oldCheckSum = (int) calculatedCheckSum; - int checkSum = readInt(dis); - if (checkSum != oldCheckSum) { - throw new IOException("Invalid checksum " - + Long.toHexString(calculatedCheckSum) + " must be " - + Integer.toHexString(checkSum)); - } - } - - /** - * Read an integer from the input stream, byte-swapping as necessary. - * - * @param dis - * the input stream - * @return an integer value - * @throws IOException - * on error - */ - public int readInt(DataInputStream dis) throws IOException { - int val; - if (swap) { - val = Utilities.readLittleEndianInt(dis); - } else { - val = dis.readInt(); - } - calculatedCheckSum = ((calculatedCheckSum << 20 | calculatedCheckSum >> 12) + val) & 0xFFFFFFFFL; - return val; - } - - /** - * Read a float from the input stream, byte-swapping as necessary. - * - * @param dis - * the input stream - * @return a floating pint value - * @throws IOException - * on error - */ - public float readFloat(DataInputStream dis) throws IOException { - int val; - if (swap) { - val = Utilities.readLittleEndianInt(dis); - } else { - val = dis.readInt(); - } - calculatedCheckSum = ((calculatedCheckSum << 20 | calculatedCheckSum >> 12) + val) & 0xFFFFFFFFL; - return Float.intBitsToFloat(val); - } - - /** - * Reads the given number of floats from the stream and returns them in an - * array of floats. - * - * @param dis - * the stream to read data from - * @param size - * the number of floats to read - * @return an array of size float elements - * @throws IOException - * if an exception occurs - */ - public float[] readFloatArray(DataInputStream dis, int size) - throws IOException { - float[] data = new float[size]; - for (int i = 0; i < size; i++) { - data[i] = readFloat(dis); - } - return data; - } - - /** - * Loads the sphinx3 density file, a set of density arrays are created and - * placed in the given pool. - * - * @param useCDUnits - * if true, loads also the context dependent units - * @param inputStream - * the open input stream to use - * @param path - * the path to a density file - * @throws FileNotFoundException - * if a file cannot be found - * @throws IOException - * if an error occurs while loading the data - */ - protected void loadHMMPool(boolean useCDUnits, InputStream inputStream, - String path) throws IOException { - ExtendedStreamTokenizer est = new ExtendedStreamTokenizer(inputStream, - '#', false); - - logger.fine("Loading HMM file from: " + path); - - est.expectString(MODEL_VERSION); - - int numBase = est.getInt("numBase"); - est.expectString("n_base"); - - int numTri = est.getInt("numTri"); - est.expectString("n_tri"); - - int numStateMap = est.getInt("numStateMap"); - est.expectString("n_state_map"); - - int numTiedState = est.getInt("numTiedState"); - est.expectString("n_tied_state"); - - int numContextIndependentTiedState = est - .getInt("numContextIndependentTiedState"); - est.expectString("n_tied_ci_state"); - - int numTiedTransitionMatrices = est.getInt("numTiedTransitionMatrices"); - est.expectString("n_tied_tmat"); - - int numStatePerHMM = numStateMap / (numTri + numBase); - - assert numTiedState == mixtureWeights.getStatesNum(); - assert numTiedTransitionMatrices == transitionsPool.size(); - - // Load the base phones - for (int i = 0; i < numBase; i++) { - String name = est.getString(); - String left = est.getString(); - String right = est.getString(); - String position = est.getString(); - String attribute = est.getString(); - int tmat = est.getInt("tmat"); - - int[] stid = new int[numStatePerHMM - 1]; - - for (int j = 0; j < numStatePerHMM - 1; j++) { - stid[j] = est.getInt("j"); - assert stid[j] >= 0 && stid[j] < numContextIndependentTiedState; - } - est.expectString("N"); - - assert left.equals("-"); - assert right.equals("-"); - assert position.equals("-"); - assert tmat < numTiedTransitionMatrices; - - Unit unit = unitManager.getUnit(name, attribute.equals(FILLER)); - contextIndependentUnits.put(unit.getName(), unit); - - if (logger.isLoggable(Level.FINE)) { - logger.fine("Loaded " + unit); - } - - // The first filler - if (unit.isFiller() && unit.getName().equals(SILENCE_CIPHONE)) { - unit = UnitManager.SILENCE; - } - - float[][] transitionMatrix = transitionsPool.get(tmat); - SenoneSequence ss = getSenoneSequence(stid); - - HMM hmm = new SenoneHMM(unit, ss, transitionMatrix, - HMMPosition.lookup(position)); - hmmManager.put(hmm); - } - - if (hmmManager.get(HMMPosition.UNDEFINED, UnitManager.SILENCE) == null) { - throw new IOException("Could not find SIL unit in acoustic model"); - } - - // Load the context dependent phones. If the useCDUnits - // property is false, the CD phones will not be created, but - // the values still need to be read in from the file. - - String lastUnitName = ""; - Unit lastUnit = null; - int[] lastStid = null; - SenoneSequence lastSenoneSequence = null; - - for (int i = 0; i < numTri; i++) { - String name = est.getString(); - String left = est.getString(); - String right = est.getString(); - String position = est.getString(); - String attribute = est.getString(); - int tmat = est.getInt("tmat"); - - int[] stid = new int[numStatePerHMM - 1]; - - for (int j = 0; j < numStatePerHMM - 1; j++) { - stid[j] = est.getInt("j"); - assert stid[j] >= numContextIndependentTiedState - && stid[j] < numTiedState; - } - est.expectString("N"); - - assert !left.equals("-"); - assert !right.equals("-"); - assert !position.equals("-"); - assert attribute.equals("n/a"); - assert tmat < numTiedTransitionMatrices; - - if (useCDUnits) { - Unit unit; - String unitName = (name + ' ' + left + ' ' + right); - - if (unitName.equals(lastUnitName)) { - unit = lastUnit; - } else { - Unit[] leftContext = new Unit[1]; - leftContext[0] = contextIndependentUnits.get(left); - - Unit[] rightContext = new Unit[1]; - rightContext[0] = contextIndependentUnits.get(right); - - Context context = LeftRightContext.get(leftContext, - rightContext); - unit = unitManager.getUnit(name, false, context); - } - lastUnitName = unitName; - lastUnit = unit; - - if (logger.isLoggable(Level.FINE)) { - logger.fine("Loaded " + unit); - } - - float[][] transitionMatrix = transitionsPool.get(tmat); - - SenoneSequence ss = lastSenoneSequence; - if (ss == null || !sameSenoneSequence(stid, lastStid)) { - ss = getSenoneSequence(stid); - } - lastSenoneSequence = ss; - lastStid = stid; - - HMM hmm = new SenoneHMM(unit, ss, transitionMatrix, - HMMPosition.lookup(position)); - hmmManager.put(hmm); - } - } - - est.close(); - } - - /** - * Returns true if the given senone sequence IDs are the same. - * - * @param ssid1 ids of first senone sequence - * @param ssid2 ids of second senone sequence - * @return true if the given senone sequence IDs are the same, false - * otherwise - */ - protected boolean sameSenoneSequence(int[] ssid1, int[] ssid2) { - if (ssid1.length == ssid2.length) { - for (int i = 0; i < ssid1.length; i++) { - if (ssid1[i] != ssid2[i]) { - return false; - } - } - return true; - } else { - return false; - } - } - - /** - * Gets the senone sequence representing the given senones. - * - * @param stateid - * is the array of senone state ids - * @return the senone sequence associated with the states - */ - protected SenoneSequence getSenoneSequence(int[] stateid) { - Senone[] senones = new Senone[stateid.length]; - for (int i = 0; i < stateid.length; i++) { - senones[i] = senonePool.get(stateid[i]); - } - return new SenoneSequence(senones); - } - - /** - * Loads the mixture weights (Binary). - * - * @param path - * the path to the mixture weight file - * @param floor - * the minimum mixture weight allowed - * @return a pool of mixture weights - * @throws IOException - * if an error occurs while loading the data - * @throws URISyntaxException uri was incorrectly specified - */ - protected GaussianWeights loadMixtureWeights(String path, float floor) - throws IOException, URISyntaxException { - logger.fine("Loading mixture weights from: " + path); - - Properties props = new Properties(); - - DataInputStream dis = readS3BinaryHeader(path, props); - - String version = props.getProperty("version"); - - if (version == null || !version.equals(MIXW_FILE_VERSION)) { - throw new IOException("Unsupported version in " + path); - } - - String checksum = props.getProperty("chksum0"); - boolean doCheckSum = (checksum != null && checksum.equals("yes")); - resetChecksum(); - - int numStates = readInt(dis); - int numStreams = readInt(dis); - int numGaussiansPerState = readInt(dis); - int numValues = readInt(dis); - GaussianWeights mixtureWeights = new GaussianWeights(path, numStates, numGaussiansPerState, numStreams); - - logger.fine("Number of states " + numStates); - logger.fine("Number of streams " + numStreams); - logger.fine("Number of gaussians per state " + numGaussiansPerState); - - assert numValues == numStates * numStreams * numGaussiansPerState; - - for (int i = 0; i < numStates; i++) { - for (int j = 0; j < numStreams; j++) { - float[] logStreamMixtureWeight = readFloatArray(dis, - numGaussiansPerState); - Utilities.normalize(logStreamMixtureWeight); - Utilities.floorData(logStreamMixtureWeight, floor); - logMath.linearToLog(logStreamMixtureWeight); - mixtureWeights.put(i, j, logStreamMixtureWeight); - } - } - - validateChecksum(dis, doCheckSum); - - dis.close(); - return mixtureWeights; - } - - /** - * Loads the transition matrices (Binary). - * - * @param path - * the path to the transitions matrices - * @return a pool of transition matrices - * @throws IOException - * if an error occurs while loading the data - * @throws URISyntaxException uri was incorrectly specified - */ - protected Pool loadTransitionMatrices(String path) - throws IOException, URISyntaxException { - logger.fine("Loading transition matrices from: " + path); - - Properties props = new Properties(); - DataInputStream dis = readS3BinaryHeader(path, props); - - String version = props.getProperty("version"); - - if (version == null || !version.equals(TMAT_FILE_VERSION)) { - throw new IOException("Unsupported version in " + path); - } - - String checksum = props.getProperty("chksum0"); - boolean doCheckSum = (checksum != null && checksum.equals("yes")); - resetChecksum(); - - Pool pool = new Pool(path); - - int numMatrices = readInt(dis); - int numRows = readInt(dis); - int numStates = readInt(dis); - int numValues = readInt(dis); - - assert numValues == numStates * numRows * numMatrices; - - for (int i = 0; i < numMatrices; i++) { - float[][] tmat = new float[numStates][]; - // last row should be zeros - tmat[numStates - 1] = new float[numStates]; - logMath.linearToLog(tmat[numStates - 1]); - - for (int j = 0; j < numRows; j++) { - tmat[j] = readFloatArray(dis, numStates); - Utilities.nonZeroFloor(tmat[j], 0f); - Utilities.normalize(tmat[j]); - logMath.linearToLog(tmat[j]); - } - pool.put(i, tmat); - } - - validateChecksum(dis, doCheckSum); - - dis.close(); - return pool; - } - - /** - * Loads the transform matrices (Binary). - * - * @param path - * the path to the transform matrix - * @return a transform matrix - * @throws java.io.FileNotFoundException - * if a file cannot be found - * @throws java.io.IOException - * if an error occurs while loading the data - */ - protected float[][] loadTransformMatrix(String path) throws IOException { - logger.fine("Loading transform matrix from: " + path); - - Properties props = new Properties(); - - DataInputStream dis; - try { - dis = readS3BinaryHeader(path, props); - } catch (URISyntaxException e) { - throw new RuntimeException(e); - } catch (IOException e) { - return null; - } - - String version = props.getProperty("version"); - - if (version == null || !version.equals(TRANSFORM_FILE_VERSION)) { - throw new IOException("Unsupported version in " + path); - } - - String checksum = props.getProperty("chksum0"); - boolean doCheckSum = (checksum != null && checksum.equals("yes")); - resetChecksum(); - - readInt(dis); - int numRows = readInt(dis); - int numValues = readInt(dis); - int num = readInt(dis); - - assert num == numRows * numValues; - - float[][] result = new float[numRows][]; - for (int i = 0; i < numRows; i++) { - result[i] = readFloatArray(dis, numValues); - } - - validateChecksum(dis, doCheckSum); - - dis.close(); - return result; - } - - public void clearGauScores() { - if (phoneticTiedMixtures == null) - return; - for (MixtureComponentSet mixture : phoneticTiedMixtures) - mixture.clearStoredScores(); - } - - public void setGauScoresQueueLength(int scoresQueueLen) { - if (phoneticTiedMixtures == null) - return; - for (MixtureComponentSet mixture : phoneticTiedMixtures) - mixture.setScoreQueueLength(scoresQueueLen); - } - - public Pool getMeansPool() { - return meansPool; - } - - public Pool getMeansTransformationMatrixPool() { - return meanTransformationMatrixPool; - } - - public Pool getMeansTransformationVectorPool() { - return meanTransformationVectorPool; - } - - public Pool getVariancePool() { - return variancePool; - } - - public Pool getVarianceTransformationMatrixPool() { - return varianceTransformationMatrixPool; - } - - public Pool getVarianceTransformationVectorPool() { - return varianceTransformationVectorPool; - } - - public GaussianWeights getMixtureWeights() { - return mixtureWeights; - } - - public Pool getTransitionMatrixPool() { - return transitionsPool; - } - - public float[][] getTransformMatrix() { - return transformMatrix; - } - - public Pool getSenonePool() { - return senonePool; - } - - public int getLeftContextSize() { - return CONTEXT_SIZE; - } - - public int getRightContextSize() { - return CONTEXT_SIZE; - } - - public HMMManager getHMMManager() { - return hmmManager; - } - - public void logInfo() { - logger.info("Loading tied-state acoustic model from: " + location); - meansPool.logInfo(logger); - variancePool.logInfo(logger); - transitionsPool.logInfo(logger); - senonePool.logInfo(logger); - - if (meanTransformationMatrixPool != null) - meanTransformationMatrixPool.logInfo(logger); - if (meanTransformationVectorPool != null) - meanTransformationVectorPool.logInfo(logger); - if (varianceTransformationMatrixPool != null) - varianceTransformationMatrixPool.logInfo(logger); - if (varianceTransformationVectorPool != null) - varianceTransformationVectorPool.logInfo(logger); - - mixtureWeights.logInfo(logger); - senonePool.logInfo(logger); - logger.info("Context Independent Unit Entries: " - + contextIndependentUnits.size()); - hmmManager.logInfo(logger); - } - - public Properties getProperties() { - return modelProps; - } - - protected Properties loadModelProps(String path) - throws MalformedURLException, IOException, URISyntaxException { - Properties props = new Properties(); - BufferedReader reader = new BufferedReader(new InputStreamReader( - getDataStream(path))); - String line; - while ((line = reader.readLine()) != null) { - String[] tokens = line.split(" "); - props.put(tokens[0], tokens[1]); - } - return props; - } - - @Override - public void update(Transform transform, ClusteredDensityFileData clusters) { - for (int index = 0; index < meansPool.size(); index++) { - int transformClass = clusters.getClassIndex(index); - float[] tmean = new float[getVectorLength()[0]]; - float[] mean = meansPool.get(index); - - for (int i = 0; i < numStreams; i++) { - for (int l = 0; l < getVectorLength()[i]; l++) { - tmean[l] = 0; - for (int m = 0; m < getVectorLength()[i]; m++) { - tmean[l] += transform.getAs()[transformClass][i][l][m] - * mean[m]; - } - tmean[l] += transform.getBs()[transformClass][i][l]; - } - System.arraycopy(tmean, 0, mean, 0, tmean.length); - } - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/SphinxAsciiLoader.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/SphinxAsciiLoader.java deleted file mode 100755 index 986b917a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/SphinxAsciiLoader.java +++ /dev/null @@ -1,235 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist.acoustic.tiedstate; - -import edu.cmu.sphinx.linguist.acoustic.*; -import static edu.cmu.sphinx.linguist.acoustic.tiedstate.Pool.Feature.*; -import edu.cmu.sphinx.util.ExtendedStreamTokenizer; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.props.*; - -import java.io.*; -import java.net.MalformedURLException; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * Sphinx loader that loads ASCII versions. - */ - -public class SphinxAsciiLoader extends Sphinx3Loader { - - public SphinxAsciiLoader(URL location, String model, String dataLocation, - UnitManager unitManager, float distFloor, float mixtureWeightFloor, - float varianceFloor, int topGauNum, boolean useCDUnits) - { - init(location, model, dataLocation, unitManager, distFloor, mixtureWeightFloor, varianceFloor, topGauNum, - useCDUnits, Logger.getLogger(getClass().getName())); - } - - public SphinxAsciiLoader(String location, String model, - String dataLocation, UnitManager unitManager, - float distFloor, float mixtureWeightFloor, float varianceFloor, - int topGauNum, boolean useCDUnits) - throws MalformedURLException, ClassNotFoundException - { - init(ConfigurationManagerUtils.resourceToURL(location), model, - dataLocation, unitManager, distFloor, - mixtureWeightFloor, varianceFloor, topGauNum, useCDUnits, Logger.getLogger(getClass().getName())); - } - - public SphinxAsciiLoader() { - - } - - @Override - protected void loadModelFiles(String modelDef) throws IOException, URISyntaxException { - - logger.config("Loading Sphinx3 acoustic model: " + modelDef); - logger.config(" modelName: " + this.model); - logger.config(" dataLocation : " + dataLocation); - - meansPool = loadDensityFile(dataLocation + "means.ascii", -Float.MAX_VALUE); - variancePool = loadDensityFile(dataLocation + "variances.ascii", varianceFloor); - mixtureWeights = loadMixtureWeights(dataLocation + "mixture_weights.ascii", mixtureWeightFloor); - transitionsPool = loadTransitionMatrices(dataLocation + "transition_matrices.ascii"); - - senonePool = createSenonePool(distFloor, varianceFloor); - // load the HMM modelDef file - InputStream modelStream = getDataStream(this.model); - if (modelStream == null) { - throw new IOException("can't find modelDef " + this.model); - } - loadHMMPool(useCDUnits, modelStream, this.model); - } - - /** - * Loads the sphinx3 density file, a set of density arrays are created and - * placed in the given pool. - * - * @param path - * the name of the data - * @param floor - * the minimum density allowed - * @return a pool of loaded densities - * @throws FileNotFoundException - * if a file cannot be found - * @throws IOException - * if an error occurs while loading the data - */ - @Override - public Pool loadDensityFile(String path, float floor) throws IOException, URISyntaxException { - logger.fine("Loading density file from: " + path); - InputStream inputStream = getDataStream(path); - if (inputStream == null) { - throw new FileNotFoundException("Error trying to read file " + path); - } - - // 'false' argument refers to EOL is insignificant - ExtendedStreamTokenizer est = new ExtendedStreamTokenizer(inputStream, '#', false); - Pool pool = new Pool(path); - est.expectString("param"); - int numStates = est.getInt("numStates"); - int numStreams = est.getInt("numStreams"); - int numGaussiansPerState = est.getInt("numGaussiansPerState"); - pool.setFeature(NUM_SENONES, numStates); - pool.setFeature(NUM_STREAMS, numStreams); - pool.setFeature(NUM_GAUSSIANS_PER_STATE, numGaussiansPerState); - int vectorLength = 39; - - for (int i = 0; i < numStates; i++) { - est.expectString("mgau"); - est.expectInt("mgau index", i); - est.expectString("feat"); - est.expectInt("feat index", 0); - for (int j = 0; j < numGaussiansPerState; j++) { - est.expectString("density"); - est.expectInt("densityValue", j); - float[] density = new float[vectorLength]; - for (int k = 0; k < vectorLength; k++) { - density[k] = est.getFloat("val"); - if (density[k] < floor) { - density[k] = floor; - } - } - int id = i * numGaussiansPerState + j; - pool.put(id, density); - } - } - est.close(); - return pool; - } - - /** - * Loads the mixture weights. - * - * @param path - * the path to the mixture weight file - * @param floor - * the minimum mixture weight allowed - * @return a pool of mixture weights - * @throws FileNotFoundException - * if a file cannot be found - * @throws IOException - * if an error occurs while loading the data - */ - @Override - protected GaussianWeights loadMixtureWeights(String path, float floor) throws IOException, URISyntaxException { - logger.fine("Loading mixture weights from: " + path); - InputStream inputStream = getDataStream(path); - if (inputStream == null) { - throw new FileNotFoundException("Error trying to read file " + path); - } - - ExtendedStreamTokenizer est = new ExtendedStreamTokenizer(inputStream, '#', false); - est.expectString("mixw"); - int numStates = est.getInt("numStates"); - int numStreams = est.getInt("numStreams"); - int numGaussiansPerState = est.getInt("numGaussiansPerState"); - GaussianWeights mixtureWeights = new GaussianWeights(path, numStates, numGaussiansPerState, numStreams); - for (int i = 0; i < numStates; i++) { - est.expectString("mixw"); - est.expectString("[" + i); - est.expectString("0]"); - // float total = est.getFloat("total"); - float[] gauMixtureWeight = new float[numGaussiansPerState]; - for (int j = 0; j < numGaussiansPerState; j++) { - float val = est.getFloat("mixwVal"); - if (val < floor) { - val = floor; - } - gauMixtureWeight[j] = val; - } - LogMath.getLogMath().linearToLog(gauMixtureWeight); - mixtureWeights.put(i, 0, gauMixtureWeight); - } - est.close(); - return mixtureWeights; - } - - /** - * Loads the transition matrices. - * - * @param path - * the path to the transitions matrices - * @return a pool of transition matrices - * @throws FileNotFoundException - * if a file cannot be found - * @throws IOException - * if an error occurs while loading the data - */ - @Override - protected Pool loadTransitionMatrices(String path) throws IOException, URISyntaxException { - logger.fine("Loading transition matrices from: " + path); - - InputStream inputStream = getDataStream(path); - if (inputStream == null) { - throw new FileNotFoundException("Error trying to read file " + path); - } - - Pool pool = new Pool(path); - ExtendedStreamTokenizer est = - new ExtendedStreamTokenizer(inputStream, '#', false); - LogMath logMath = LogMath.getLogMath(); - est.expectString("tmat"); - int numMatrices = est.getInt("numMatrices"); - int numStates = est.getInt("numStates"); - logger.fine("with " + numMatrices + " and " + numStates + " states"); - - // read in the matrices - for (int i = 0; i < numMatrices; i++) { - est.expectString("tmat"); - est.expectString("[" + i + ']'); - float[][] tmat = new float[numStates][numStates]; - for (int j = 0; j < numStates; j++) { - for (int k = 0; k < numStates; k++) { - // the last row is just zeros, so we just do - // the first (numStates - 1) rows - if (j < numStates - 1) { - if (k == j || k == j + 1) { - tmat[j][k] = est.getFloat("tmat value"); - } - } - tmat[j][k] = logMath.linearToLog(tmat[j][k]); - if (logger.isLoggable(Level.FINE)) { - logger.fine("tmat j " + j + " k " + k + " tm " + tmat[j][k]); - } - } - } - pool.put(i, tmat); - } - est.close(); - return pool; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/TiedStateAcousticModel.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/TiedStateAcousticModel.java deleted file mode 100755 index 40e9ded8..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/TiedStateAcousticModel.java +++ /dev/null @@ -1,554 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate; - -// Placeholder for a package import - -import edu.cmu.sphinx.linguist.acoustic.*; -import edu.cmu.sphinx.util.props.*; - -import java.io.IOException; -import java.util.*; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * Loads a tied-state acoustic model generated by the Sphinx-3 trainer. - *

    - * It is not the goal of this documentation to provide an explanation about the concept of HMMs. The explanation below - * is superficial, and provided only in a way that the files in the acoustic model package make sense. - *

    - * An HMM models a process using a sequence of states. Associated with each state, there is a probability density - * function. A popular choice for this function is a Gaussian mixture, that is, a summation of Gaussians. As you may - * recall, a single Gaussian is defined by a mean and a variance, or, in the case of a multidimensional Gaussian, by a - * mean vector and a covariance matrix, or, under some simplifying assumptions, a variance vector. The "means" and - * "variances" files in the "continuous" directory contain exactly this: a table in which each line contains a mean - * vector or a variance vector respectively. The dimension of these vectors is the same as the incoming data, the - * encoded speech signal. The Gaussian mixture is a summation of Gaussians, with different weights for different - * Gaussians. The "mixture_weights" file contains this: each line contains the weights for a combination of Gaussians. - *

    - * The HMM is a model with a set of states. The transitions between states have an associated probability. These - * probabilities make up the transition matrices stored in the "transition_matrices" file. - *

    - * The files in the "continuous" directory are, therefore, tables, or pools, of means, variances, mixture weights, and - * transition probabilities. - *

    - * The dictionary is a file that maps words to their phonetic transcriptions, that is, it maps words to sequences of - * phonemes. - *

    - * The language model contains information about probabilities of words in a language. These probabilities could be for - * individual words or for sequences of two or three words. - *

    - * The model definition file in a way ties everything together. If the recognition system models phonemes, there is an - * HMM for each phoneme. The model definition file has one line for each phoneme. The phoneme could be in a context - * dependent or independent. Each line, therefore, identifies a unique HMM. This line has the phoneme identification, - * the non-required left or right context, the index of a transition matrix, and, for each state, the index of a mean - * vector, a variance vector, and a set of mixture weights. - */ -public class TiedStateAcousticModel implements AcousticModel { - - /** The property that defines the component used to load the acoustic model */ - @S4Component(type = Loader.class) - public final static String PROP_LOADER = "loader"; - - /** The property that defines the unit manager */ - @S4Component(type = UnitManager.class) - public final static String PROP_UNIT_MANAGER = "unitManager"; - - /** Controls whether we generate composites or CI units when no context is given during a lookup. */ - @S4Boolean(defaultValue = true) - public final static String PROP_USE_COMPOSITES = "useComposites"; - - - // ----------------------------- - // Configured variables - // ----------------------------- - protected String name; - protected Logger logger; - protected Loader loader; - protected UnitManager unitManager; - private boolean useComposites; - private Properties properties; - - // ---------------------------- - // internal variables - // ----------------------------- - final transient private Map compositeSenoneSequenceCache = new HashMap(); - private boolean allocated; - - public TiedStateAcousticModel( Loader loader, UnitManager unitManager, boolean useComposites) { - this.loader = loader; - this.unitManager = unitManager; - this.useComposites = useComposites; - this.logger = Logger.getLogger(getClass().getName()); - } - - public TiedStateAcousticModel() { - - } - - public void newProperties(PropertySheet ps) throws PropertyException { - loader = (Loader) ps.getComponent(PROP_LOADER); - unitManager = (UnitManager) ps.getComponent(PROP_UNIT_MANAGER); - useComposites = ps.getBoolean(PROP_USE_COMPOSITES); - logger = ps.getLogger(); - } - - /** - * initialize this acoustic model with the given name and context. - * - * @throws IOException if the model could not be loaded - */ - public void allocate() throws IOException { - if (!allocated) { - loader.load(); - logInfo(); - allocated = true; - } - } - - - /* (non-Javadoc) - * @see edu.cmu.sphinx.linguist.acoustic.AcousticModel#deallocate() - */ - public void deallocate() { - } - - - /** - * Returns the name of this AcousticModel, or null if it has no name. - * - * @return the name of this AcousticModel, or null if it has no name - */ - public String getName() { - return name; - } - - - /** - * Gets a composite HMM for the given unit and context - * - * @param unit the unit for the hmm - * @param position the position of the unit within the word - * @return a composite HMM - */ - private HMM getCompositeHMM(Unit unit, HMMPosition position) { - - Unit ciUnit = unitManager.getUnit(unit.getName(), unit.isFiller(), - Context.EMPTY_CONTEXT); - - SenoneSequence compositeSequence = getCompositeSenoneSequence(unit, - position); - - SenoneHMM contextIndependentHMM = (SenoneHMM) lookupNearestHMM(ciUnit, - HMMPosition.UNDEFINED, true); - float[][] tmat = contextIndependentHMM.getTransitionMatrix(); - return new SenoneHMM(unit, compositeSequence, tmat, position); - } - - - /** - * Given a unit, returns the HMM that best matches the given unit. If exactMatch is false and an exact match is not - * found, then different word positions are used. If any of the contexts are non-silence filler units. a silence - * filler unit is tried instead. - * - * @param unit the unit of interest - * @param position the position of the unit of interest - * @param exactMatch if true, only an exact match is acceptable. - * @return the HMM that best matches, or null if no match could be found. - */ - public HMM lookupNearestHMM(Unit unit, HMMPosition position, - boolean exactMatch) { - - if (exactMatch) - return lookupHMM(unit, position); - - HMMManager mgr = loader.getHMMManager(); - HMM hmm = mgr.get(position, unit); - - if (hmm != null) { - return hmm; - } - // no match, try a composite - - if (useComposites && hmm == null) { - if (isComposite(unit)) { - - hmm = getCompositeHMM(unit, position); - if (hmm != null) { - mgr.put(hmm); - } - } - } - // no match, try at other positions - if (hmm == null) { - hmm = getHMMAtAnyPosition(unit); - } - // still no match, try different filler - if (hmm == null) { - hmm = getHMMInSilenceContext(unit, position); - } - - // still no match, backoff to base phone - if (hmm == null) { - Unit ciUnit = lookupUnit(unit.getName()); - - assert unit.isContextDependent(); - if (ciUnit == null) { - logger.severe("Can't find HMM for " + unit.getName()); - } - assert ciUnit != null; - assert !ciUnit.isContextDependent(); - - hmm = mgr.get(HMMPosition.UNDEFINED, ciUnit); - } - - assert hmm != null; - - // System.out.println("PROX match for " - // + unit + " at " + position + ":" + hmm); - - return hmm; - } - - - /** - * Determines if a unit is a composite unit - * - * @param unit the unit to test - * @return true if the unit is missing a right context - */ - private boolean isComposite(Unit unit) { - - if (unit.isFiller()) { - return false; - } - - Context context = unit.getContext(); - if (context instanceof LeftRightContext) { - LeftRightContext lrContext = (LeftRightContext) context; - if (lrContext.getRightContext() == null) { - return true; - } - if (lrContext.getLeftContext() == null) { - return true; - } - } - return false; - } - - - /** - * Looks up the context independent unit given the name - * - * @param name the name of the unit - * @return the unit or null if the unit was not found - */ - private Unit lookupUnit(String name) { - return loader.getContextIndependentUnits().get(name); - } - - - /** - * Returns an iterator that can be used to iterate through all the HMMs of the acoustic model - * - * @return an iterator that can be used to iterate through all HMMs in the model. The iterator returns objects of - * type HMM. - */ - public Iterator getHMMIterator() { - return loader.getHMMManager().iterator(); - } - - - /** - * Returns an iterator that can be used to iterate through all the CI units in the acoustic model - * - * @return an iterator that can be used to iterate through all CI units. The iterator returns objects of type - * Unit - */ - public Iterator getContextIndependentUnitIterator() { - return loader.getContextIndependentUnits().values().iterator(); - } - - - /** - * Get a composite senone sequence given the unit. - * - * The unit should have a LeftRightContext, where one or two of 'left' or - * 'right' may be null to indicate that the match should succeed on any - * context. - * - * @param unit the unit - * @param position position in HMM - * @return senone sequence - */ - public SenoneSequence getCompositeSenoneSequence(Unit unit, - HMMPosition position) - { - String unitStr = unit.toString(); - SenoneSequence compositeSenoneSequence; - compositeSenoneSequence = compositeSenoneSequenceCache.get(unitStr); - - if (logger.isLoggable(Level.FINE)) - logger.fine("getCompositeSenoneSequence: " - + unit + - compositeSenoneSequence == null ? "" : "Cached"); - - if (compositeSenoneSequence != null) - return compositeSenoneSequence; - - // Iterate through all HMMs looking for - // a) An hmm with a unit that has the proper base - // b) matches the non-null context - - Context context = unit.getContext(); - List senoneSequenceList; - senoneSequenceList = new ArrayList(); - - // collect all senone sequences that match the pattern - for (Iterator i = getHMMIterator(); i.hasNext();) { - SenoneHMM hmm = (SenoneHMM) i.next(); - if (hmm.getPosition() == position) { - Unit hmmUnit = hmm.getUnit(); - if (hmmUnit.isPartialMatch(unit.getName(), context)) { - if (logger.isLoggable(Level.FINE)) { - logger.fine("collected: " + hmm.getUnit()); - } - senoneSequenceList.add(hmm.getSenoneSequence()); - } - } - } - - // couldn't find any matches, so at least include the CI unit - if (senoneSequenceList.isEmpty()) { - Unit ciUnit = unitManager.getUnit(unit.getName(), unit.isFiller()); - SenoneHMM baseHMM = lookupHMM(ciUnit, HMMPosition.UNDEFINED); - senoneSequenceList.add(baseHMM.getSenoneSequence()); - } - - // Add this point we have all of the senone sequences that - // match the base/context pattern collected into the list. - // Next we build a CompositeSenone consisting of all of the - // senones in each position of the list. - - // First find the longest senone sequence - - int longestSequence = 0; - for (SenoneSequence ss : senoneSequenceList) { - if (ss.getSenones().length > longestSequence) { - longestSequence = ss.getSenones().length; - } - } - - // now collect all of the senones at each position into - // arrays so we can create CompositeSenones from them - // QUESTION: is is possible to have different size senone - // sequences. For now lets assume the worst case. - - List compositeSenones = new ArrayList(); - float logWeight = 0.0f; - for (int i = 0; i < longestSequence; i++) { - Set compositeSenoneSet = new HashSet(); - for (SenoneSequence senoneSequence : senoneSequenceList) { - if (i < senoneSequence.getSenones().length) { - Senone senone = senoneSequence.getSenones()[i]; - compositeSenoneSet.add(senone); - } - } - compositeSenones.add(CompositeSenone.create( - compositeSenoneSet, logWeight)); - } - - compositeSenoneSequence = SenoneSequence.create(compositeSenones); - compositeSenoneSequenceCache.put(unit.toString(), - compositeSenoneSequence); - - if (logger.isLoggable(Level.FINE)) { - logger.fine(unit + " consists of " + compositeSenones.size() + " composite senones"); - if (logger.isLoggable(Level.FINEST)) { - compositeSenoneSequence.dump("am"); - } - } - return compositeSenoneSequence; - } - - - /** - * Returns the size of the left context for context dependent units - * - * @return the left context size - */ - public int getLeftContextSize() { - return loader.getLeftContextSize(); - } - - - /** - * Returns the size of the right context for context dependent units - * - * @return the left context size - */ - public int getRightContextSize() { - return loader.getRightContextSize(); - } - - - /** - * Given a unit, returns the HMM that exactly matches the given unit. - * - * @param unit the unit of interest - * @param position the position of the unit of interest - * @return the HMM that exactly matches, or null if no match could be found. - */ - private SenoneHMM lookupHMM(Unit unit, HMMPosition position) { - return (SenoneHMM) loader.getHMMManager().get(position, unit); - } - - - public Senone getSenone(long id) { - return loader.getSenonePool().get((int)id); - } - - /** Dumps information about this model to the logger */ - protected void logInfo() { - if (loader != null) { - loader.logInfo(); - } - logger.info("CompositeSenoneSequences: " + - compositeSenoneSequenceCache.size()); - } - - - /** - * Searches an hmm at any position - * - * @param unit the unit to search for - * @return hmm the hmm or null if it was not found - */ - private SenoneHMM getHMMAtAnyPosition(Unit unit) { - HMMManager mgr = loader.getHMMManager(); - for (HMMPosition pos : HMMPosition.values()) { - SenoneHMM hmm = (SenoneHMM)mgr.get(pos, unit); - if (hmm != null) - return hmm; - } - return null; - } - - - /** - * Given a unit, search for the HMM associated with this unit by replacing all non-silence filler contexts with the - * silence filler context - * - * @param unit the unit of interest - * @return the associated hmm or null - */ - private SenoneHMM getHMMInSilenceContext(Unit unit, HMMPosition position) { - SenoneHMM hmm = null; - HMMManager mgr = loader.getHMMManager(); - Context context = unit.getContext(); - - if (context instanceof LeftRightContext) { - LeftRightContext lrContext = (LeftRightContext) context; - - Unit[] lc = lrContext.getLeftContext(); - Unit[] rc = lrContext.getRightContext(); - - Unit[] nlc; - Unit[] nrc; - - if (hasNonSilenceFiller(lc)) { - nlc = replaceNonSilenceFillerWithSilence(lc); - } else { - nlc = lc; - } - - if (hasNonSilenceFiller(rc)) { - nrc = replaceNonSilenceFillerWithSilence(rc); - } else { - nrc = rc; - } - - if (nlc != lc || nrc != rc) { - Context newContext = LeftRightContext.get(nlc, nrc); - Unit newUnit = unitManager.getUnit(unit.getName(), - unit.isFiller(), newContext); - hmm = (SenoneHMM) mgr.get(position, newUnit); - if (hmm == null) { - hmm = getHMMAtAnyPosition(newUnit); - } - } - } - return hmm; - } - - - /** - * Returns true if the array of units contains a non-silence filler - * - * @param units the units to check - * @return true if the array contains a filler that is not the silence filler - */ - private boolean hasNonSilenceFiller(Unit[] units) { - if (units == null) { - return false; - } - - for (Unit unit : units) { - if (unit.isFiller() && - !unit.equals(UnitManager.SILENCE)) { - return true; - } - } - return false; - } - - - /** - * Returns a unit array with all non-silence filler units replaced with the silence filler a non-silence filler - * - * @param context the context to check - * @return true if the array contains a filler that is not the silence filler - */ - private Unit[] replaceNonSilenceFillerWithSilence(Unit[] context) { - Unit[] replacementContext = new Unit[context.length]; - for (int i = 0; i < context.length; i++) { - if (context[i].isFiller() && - !context[i].equals(UnitManager.SILENCE)) { - replacementContext[i] = UnitManager.SILENCE; - } else { - replacementContext[i] = context[i]; - } - } - return replacementContext; - } - - - /** - * Returns the properties of this acoustic model. - * - * @return the properties of this acoustic model - */ - public Properties getProperties() { - if (properties == null) { - properties = new Properties(); - try { - properties.load - (getClass().getResource("model.props").openStream()); - } catch (IOException ioe) { - ioe.printStackTrace(); - } - } - return properties; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/ConstantEventMap.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/ConstantEventMap.java deleted file mode 100755 index 7f10f89b..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/ConstantEventMap.java +++ /dev/null @@ -1,31 +0,0 @@ -package edu.cmu.sphinx.linguist.acoustic.tiedstate.kaldi; - - -/** - * Stores a single answer. - * - * This is always a leaf node in decision tree. - */ -public class ConstantEventMap implements EventMap { - - private final int value; - - /** - * Constructs a constant event map that returns one value. - * - * @param value returned value - */ - public ConstantEventMap(int value) { - this.value = value; - } - - /** - * @param pdfClass is not used - * @param context is not used - * - * @return stored value - */ - public int map(int pdfClass, int[] context) { - return value; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/DiagGmm.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/DiagGmm.java deleted file mode 100755 index 04c55bef..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/DiagGmm.java +++ /dev/null @@ -1,110 +0,0 @@ -package edu.cmu.sphinx.linguist.acoustic.tiedstate.kaldi; - -import java.util.Arrays; - -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.frontend.FloatData; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.MixtureComponent; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.ScoreCachingSenone; -import edu.cmu.sphinx.util.LogMath; - -/** - * Gaussian Mixture Model with diagonal covariances. - * - * @see DiagGmm class in Kaldi. - */ -@SuppressWarnings("serial") -public class DiagGmm extends ScoreCachingSenone { - - private int id; - private float[] gconsts; - private float[] invVars; - private float[] meansInvVars; - - /** - * Constructs new mixture model. - * - * @param id identifier of this GMM as defined in the model - * @param parser text format parser - */ - public DiagGmm(int id, KaldiTextParser parser) { - this.id = id; - - parser.expectToken(""); - parser.expectToken(""); - gconsts = parser.getFloatArray(); - - parser.expectToken(""); - // Do not use weights as they are in gconsts. - parser.getFloatArray(); - - parser.expectToken(""); - meansInvVars = parser.getFloatArray(); - - parser.expectToken(""); - invVars = parser.getFloatArray(); - parser.expectToken(""); - } - - /** - * Convenient method if 32-bit ID is required. - * - * Kaldi model uses 32-bit integer to store GMM id while Senone contract - * imposes long type. This method is present to avaoid type cast when - * working in the Kaldi domain. - * @return the ID of gmm - */ - public int getId() { - return id; - } - - @Override - public float calculateScore(Data data) { - float logTotal = LogMath.LOG_ZERO; - LogMath logMath = LogMath.getLogMath(); - for (Float mixtureScore : calculateComponentScore(data)) - logTotal = logMath.addAsLinear(logTotal, mixtureScore); - - return logTotal; - } - - public float[] calculateComponentScore(Data data) { - float[] features = FloatData.toFloatData(data).getValues(); - int dim = meansInvVars.length / gconsts.length; - - if (features.length != dim) { - String fmt = "feature vector must be of length %d, got %d"; - String msg = String.format(fmt, dim, features.length); - throw new IllegalArgumentException(msg); - } - - float[] likelihoods = Arrays.copyOf(gconsts, gconsts.length); - for (int i = 0; i < likelihoods.length; ++i) { - for (int j = 0; j < features.length; ++j) { - int k = i * features.length + j; - likelihoods[i] += meansInvVars[k] * features[j]; - likelihoods[i] -= .5f * invVars[k] * features[j] * features[j]; - } - - likelihoods[i] = LogMath.getLogMath().lnToLog(likelihoods[i]); - } - - return likelihoods; - } - - public long getID() { - return id; - } - - public void dump(String msg) { - System.out.format("%s DiagGmm: ID %d\n", msg, id); - } - - public MixtureComponent[] getMixtureComponents() { - return null; - } - - public float[] getLogMixtureWeights() { - return null; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/EventMap.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/EventMap.java deleted file mode 100755 index 5133fb3b..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/EventMap.java +++ /dev/null @@ -1,18 +0,0 @@ -package edu.cmu.sphinx.linguist.acoustic.tiedstate.kaldi; - - -/** - * Decision tree. - */ -public interface EventMap { - - /** - * Maps speech unit to probability distribution function. - * - * @param pdfClass pdf-class - * @param context context - * - * @return identifier of probability distribution function - */ - public int map(int pdfClass, int[] context); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/EventMapWithKey.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/EventMapWithKey.java deleted file mode 100755 index 77a1549e..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/EventMapWithKey.java +++ /dev/null @@ -1,34 +0,0 @@ -package edu.cmu.sphinx.linguist.acoustic.tiedstate.kaldi; - - -/** - * Event map that splits on a key. - */ -public abstract class EventMapWithKey implements EventMap { - - protected final int key; - - /** - * Constructs new event map. - * - * @param key key to split on - */ - protected EventMapWithKey(int key) { - this.key = key; - } - - /** - * Returns value of the given context for the key. - * - * Convenient method to retrieve value for the key. - * - * @param pdfClass pdf-class - * @param context context - * - * @return phone ID for non-negative values of the key and pdf-class if the - * key equals -1 - */ - protected int getKeyValue(int pdfClass, int[] context) { - return -1 == key ? pdfClass : context[key]; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/KaldiGmmPool.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/KaldiGmmPool.java deleted file mode 100755 index e4af4a73..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/KaldiGmmPool.java +++ /dev/null @@ -1,27 +0,0 @@ -package edu.cmu.sphinx.linguist.acoustic.tiedstate.kaldi; - -import edu.cmu.sphinx.linguist.acoustic.tiedstate.Pool; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.Senone; - - -/** - * Pool of GMMs loaded from Kaldi model. - */ -public class KaldiGmmPool extends Pool { - - /** - * Constructs new pool of GMMs loading them from the provided parser. - * @param parser text parser - */ - public KaldiGmmPool(KaldiTextParser parser) { - super("senones"); - parser.expectToken(""); - // Skip dimension value. - parser.getInt(); - parser.expectToken(""); - int npdf = parser.getInt(); - - for (int i = 0; i < npdf; ++i) - put(i, new DiagGmm(i, parser)); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/KaldiTextParser.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/KaldiTextParser.java deleted file mode 100755 index ffeef24b..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/KaldiTextParser.java +++ /dev/null @@ -1,92 +0,0 @@ -package edu.cmu.sphinx.linguist.acoustic.tiedstate.kaldi; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.SequenceInputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.InputMismatchException; -import java.util.List; -import java.util.Scanner; - - -public class KaldiTextParser { - - private final Scanner scanner; - - public KaldiTextParser(String path) - throws IOException, MalformedURLException - { - // TODO: rewrite with StreamTokenizer, see ExtendedStreamTokenizer. - File modelFile = new File(path, "final.mdl"); - InputStream modelStream = new URL(modelFile.getPath()).openStream(); - File treeFile = new File(path, "tree"); - InputStream treeStream = new URL(treeFile.getPath()).openStream(); - - InputStream stream = new SequenceInputStream(modelStream, treeStream); - scanner = new Scanner(stream); - } - - public String getToken() { - return scanner.next(); - } - - public int getInt() { - return scanner.nextInt(); - } - - public float parseFloat() { - return scanner.nextFloat(); - } - - public int[] getIntArray() { - List ints = new ArrayList(); - for (String token : getTokenList("[", "]")) - ints.add(Integer.parseInt(token)); - - int[] result = new int[ints.size()]; - for (int i = 0 ; i < result.length; ++i) - result[i] = ints.get(i); - - return result; - } - - public float[] getFloatArray() { - List floats = new ArrayList(); - for (String token : getTokenList("[", "]")) - floats.add(Float.parseFloat(token)); - - float[] result = new float[floats.size()]; - for (int i = 0; i < result.length; ++i) - result[i] = floats.get(i); - - return result; - } - - public List getTokenList(String openToken, String closeToken) { - expectToken(openToken); - List tokens = new ArrayList(); - String token; - - while (!closeToken.equals(token = scanner.next())) - tokens.add(token); - - return tokens; - } - - public void expectToken(String expected) { - String actual = scanner.next(); - assertToken(expected, actual); - } - - public void assertToken(String expected, String actual) { - if (actual.equals(expected)) - return; - - String msg; - msg = String.format("'%s' expected, '%s' got", expected, actual); - throw new InputMismatchException(msg); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/SplitEventMap.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/SplitEventMap.java deleted file mode 100755 index 13a877a1..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/SplitEventMap.java +++ /dev/null @@ -1,52 +0,0 @@ -package edu.cmu.sphinx.linguist.acoustic.tiedstate.kaldi; - -import java.util.Collection; -import java.util.HashSet; -import java.util.Set; - - -/** - * Binary decision tree. - * - * Splits on a certain key and goes to the "yes" or "no" child node depending - * on the answer. Its Map function calls the Map function of the appropriate - * child node. It stores a set of integers of type kAnswerType that correspond - * to the "yes" child (everything else goes to "no"). - */ -public class SplitEventMap extends EventMapWithKey { - - private final Set values; - private final EventMap yesMap; - private final EventMap noMap; - - /** - * Constructs new event map. - * - * @param key key to split on - * @param values values - * @param yesMap event map for "yes" answer - * @param noMap eventMap for no answer - */ - public SplitEventMap(int key, - Collection values, - EventMap yesMap, EventMap noMap) - { - super(key); - this.values = new HashSet(values); - this.yesMap = yesMap; - this.noMap = noMap; - } - - /** - * Maps given context to probability distribution function. - * - * @param context phonetic context - * - * @return identifier of probability distribution function. - */ - public int map(int pdfClass, int[] context) { - return values.contains(getKeyValue(pdfClass, context)) ? - yesMap.map(pdfClass, context) : noMap.map(pdfClass, context); - } -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/TableEventMap.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/TableEventMap.java deleted file mode 100755 index 447b32ee..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/TableEventMap.java +++ /dev/null @@ -1,29 +0,0 @@ -package edu.cmu.sphinx.linguist.acoustic.tiedstate.kaldi; - -import java.util.ArrayList; -import java.util.List; - - -public class TableEventMap extends EventMapWithKey { - - private final List table; - - /** - * Constructs new table event map. - * - * @param key key to split on - * @param table event map - */ - public TableEventMap(int key, List table) { - super(key); - this.table = new ArrayList(table); - } - - /** - * - */ - public int map(int pdfClass, int[] context) { - EventMap eventMap = table.get(getKeyValue(pdfClass, context)); - return eventMap.map(pdfClass, context); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/TransitionModel.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/TransitionModel.java deleted file mode 100755 index b58600d8..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/kaldi/TransitionModel.java +++ /dev/null @@ -1,194 +0,0 @@ -package edu.cmu.sphinx.linguist.acoustic.tiedstate.kaldi; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import edu.cmu.sphinx.util.LogMath; - -final class HmmState { - - private final int id; - private final int pdfClass; - private final List transitions; - - public HmmState(int id, int pdfClass, Collection transitions) { - this.id = id; - this.pdfClass = pdfClass; - this.transitions = new ArrayList(transitions); - } - - public int getId() { - return id; - } - - public int getPdfClass() { - return pdfClass; - } - - public List getTransitions() { - return transitions; - } - - public int size() { - return transitions.size(); - } - - @Override - public String toString() { - return String.format("HmmSate {%d, %d, %s}", - id, pdfClass, transitions); - } -} - -final class Triple { - - private int phone; - private int hmmState; - private int pdf; - - public Triple(int phone, int hmmState, int pdf) { - this.phone = phone; - this.hmmState = hmmState; - this.pdf = pdf; - } - - @Override - public boolean equals(Object object) { - if (!(object instanceof Triple)) - return false; - - Triple other = (Triple) object; - - return phone == other.phone && - hmmState == other.hmmState && - pdf == other.pdf; - } - - @Override - public int hashCode() { - return 31 * (31 * phone + hmmState) + pdf; - } - - @Override - public String toString() { - return String.format("Triple {%d, %d, %d}", phone, hmmState, pdf); - } -} - -/** - * Represents transition model of a Kaldi acoustic model. - */ -public class TransitionModel { - - private Map> phoneStates; - private Map transitionStates; - private float[] logProbabilities; - - /** - * Loads transition model using provided parser. - * - * @param parser parser - */ - public TransitionModel(KaldiTextParser parser) { - parser.expectToken(""); - parseTopology(parser); - - parser.expectToken(""); - transitionStates = new HashMap(); - int numTriples = parser.getInt(); - int transitionId = 1; - - for (int i = 0; i < numTriples; ++i) { - int phone = parser.getInt(); - int hmmState = parser.getInt(); - int pdf = parser.getInt(); - Triple triple = new Triple(phone, hmmState, pdf); - transitionStates.put(triple, transitionId); - transitionId += - phoneStates.get(phone).get(hmmState).getTransitions().size(); - } - - parser.expectToken(""); - parser.expectToken(""); - logProbabilities = parser.getFloatArray(); - parser.expectToken(""); - parser.expectToken(""); - - LogMath logMath = LogMath.getLogMath(); - for (int i = 0; i < logProbabilities.length; ++i) - logProbabilities[i] = logMath.lnToLog(logProbabilities[i]); - } - - private void parseTopology(KaldiTextParser parser) { - parser.expectToken(""); - - phoneStates = new HashMap>(); - String token; - - while ("".equals(token = parser.getToken())) { - parser.assertToken("", token); - parser.expectToken(""); - - List phones = new ArrayList(); - while (!"".equals(token = parser.getToken())) - phones.add(Integer.parseInt(token)); - - List states = new ArrayList(3); - while ("".equals(token = parser.getToken())) { - // Skip state number. - int id = parser.getInt(); - token = parser.getToken(); - - if ("".equals(token)) { - int pdfClass = parser.getInt(); - List transitions = new ArrayList(); - while ("".equals(token = parser.getToken())) { - transitions.add(parser.getInt()); - // Skip initial probability. - parser.getToken(); - } - - parser.assertToken("", token); - states.add(new HmmState(id, pdfClass, transitions)); - } - } - - for (Integer id : phones) - phoneStates.put(id, states); - } - - parser.assertToken("", token); - } - - /** - * Returns transition matrix for the given context. - * - * @param phone central phone in the context - * @param pdfs array of pdf identifiers of the context units - * - * @return - * 4 by 4 matrix where cell i,j contains probability in {@link LogMath} - * domain of transition from state i to state j - */ - public float[][] getTransitionMatrix(int phone, int[] pdfs) { - // TODO: use variable size - float[][] transitionMatrix = new float[4][4]; - Arrays.fill(transitionMatrix[3], LogMath.LOG_ZERO); - - for (HmmState state : phoneStates.get(phone)) { - int stateId = state.getId(); - Arrays.fill(transitionMatrix[stateId], LogMath.LOG_ZERO); - Triple triple = new Triple(phone, stateId, pdfs[stateId]); - int i = transitionStates.get(triple); - - for (Integer j : state.getTransitions()) - transitionMatrix[stateId][j] = logProbabilities[i++]; - } - - return transitionMatrix; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/tiedmixture/MixtureComponentSet.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/tiedmixture/MixtureComponentSet.java deleted file mode 100755 index ffd74e78..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/tiedmixture/MixtureComponentSet.java +++ /dev/null @@ -1,269 +0,0 @@ -/* - * Copyright 2014 Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate.tiedmixture; - -import java.lang.reflect.Array; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Comparator; -import java.util.LinkedList; - -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.frontend.DoubleData; -import edu.cmu.sphinx.frontend.FloatData; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.MixtureComponent; - -/** - * MixtureComponentsSet - phonetically tied set of gaussians - */ -public class MixtureComponentSet { - - private int scoresQueueLen; - private boolean toStoreScore; - private LinkedList storedScores; - MixtureComponentSetScores curScores; - - private ArrayList components; - private ArrayList topComponents; - private int numStreams; - private int topGauNum; - private int gauNum; - private long gauCalcSampleNumber; - - public MixtureComponentSet(ArrayList components, int topGauNum) { - this.components = components; - this.numStreams = components.size(); - this.topGauNum = topGauNum; - this.gauNum = components.get(0).length; - topComponents = new ArrayList(); - for (int i = 0; i < numStreams; i++) { - PrunableMixtureComponent[] featTopComponents = new PrunableMixtureComponent[topGauNum]; - for (int j = 0; j < topGauNum; j++) - featTopComponents[j] = components.get(i)[j]; - topComponents.add(featTopComponents); - } - gauCalcSampleNumber = -1; - toStoreScore = false; - storedScores = new LinkedList(); - curScores = null; - } - - private void storeScores(MixtureComponentSetScores scores) { - storedScores.add(scores); - while(storedScores.size() > scoresQueueLen) - storedScores.poll(); - } - - private MixtureComponentSetScores getStoredScores(long frameFirstSample) { - if (storedScores.isEmpty()) - return null; - if (storedScores.peekLast().getFrameStartSample() < frameFirstSample) - //new frame - return null; - for (MixtureComponentSetScores scores : storedScores) { - if (scores.getFrameStartSample() == frameFirstSample) - return scores; - } - //Failed to find score. Seems it wasn't calculated yet - return null; - } - - private MixtureComponentSetScores createFromTopGau(long firstFrameSample) { - MixtureComponentSetScores scores = new MixtureComponentSetScores(numStreams, topGauNum, firstFrameSample); - for (int i = 0; i < numStreams; i++) { - for (int j = 0; j < topGauNum; j++) { - scores.setScore(i, j, topComponents.get(i)[j].getStoredScore()); - scores.setGauId(i, j, topComponents.get(i)[j].getId()); - } - } - return scores; - } - - private void insertTopComponent(PrunableMixtureComponent[] topComponents, PrunableMixtureComponent component) { - int i; - for (i = 0; i < topComponents.length - 1; i++) { - if (component.getPartialScore() < topComponents[i].getPartialScore()) { - topComponents[i - 1] = component; - return; - } - topComponents[i] = topComponents[i + 1]; - } - if (component.getPartialScore() < topComponents[topComponents.length - 1].getPartialScore()) - topComponents[topComponents.length - 2] = component; - else - topComponents[topComponents.length - 1] = component; - } - - private boolean isInTopComponents(PrunableMixtureComponent[] topComponents, PrunableMixtureComponent component) { - for (PrunableMixtureComponent topComponent : topComponents) - if (topComponent.getId() == component.getId()) - return true; - return false; - } - - private void updateTopScores(float[] featureVector) { - int step = featureVector.length / numStreams; - - float[] streamVector = new float[step]; - for (int i = 0; i < numStreams; i++) { - System.arraycopy(featureVector, i * step, streamVector, 0, step); - PrunableMixtureComponent[] featTopComponents = topComponents.get(i); - PrunableMixtureComponent[] featComponents = components.get(i); - - //update scores in top gaussians from previous frame - for (PrunableMixtureComponent topComponent : featTopComponents) - topComponent.updateScore(streamVector); - Arrays.sort(featTopComponents, componentComparator); - - //Check if there is any gaussians that should float into top - float threshold = featTopComponents[0].getPartialScore(); - for (PrunableMixtureComponent component : featComponents) { - if (isInTopComponents(featTopComponents, component)) - continue; - if (component.isTopComponent(streamVector, threshold)) { - insertTopComponent(featTopComponents, component); - threshold = featTopComponents[0].getPartialScore(); - } - } - } - } - - public void updateTopScores(Data feature) { - - if (feature instanceof DoubleData) - System.err.println("DoubleData conversion required on mixture level!"); - - long firstSampleNumber = FloatData.toFloatData(feature).getFirstSampleNumber(); - if (toStoreScore) { - curScores = getStoredScores(firstSampleNumber); - } else { - if (curScores != null && curScores.getFrameStartSample() != firstSampleNumber) - curScores = null; - } - if (curScores != null) - //component scores for this frame was already calculated - return; - float[] featureVector = FloatData.toFloatData(feature).getValues(); - updateTopScores(featureVector); - //store just calculated score in list - curScores = createFromTopGau(firstSampleNumber); - if (toStoreScore) - storeScores(curScores); - } - - private void updateScores(float[] featureVector) { - int step = featureVector.length / numStreams; - float[] streamVector = new float[step]; - for (int i = 0; i < numStreams; i++) { - System.arraycopy(featureVector, i * step, streamVector, 0, step); - for (PrunableMixtureComponent component : components.get(i)) { - component.updateScore(streamVector); - } - } - } - - public void updateScores(Data feature) { - if (feature instanceof DoubleData) - System.err.println("DoubleData conversion required on mixture level!"); - - long firstSampleNumber = FloatData.toFloatData(feature).getFirstSampleNumber(); - if (gauCalcSampleNumber != firstSampleNumber) { - float[] featureVector = FloatData.toFloatData(feature).getValues(); - updateScores(featureVector); - gauCalcSampleNumber = firstSampleNumber; - } - } - - /** - * Should be called on each new utterance to scores for old frames - */ - public void clearStoredScores() { - storedScores.clear(); - } - - /** - * How long scores for previous frames should be stored. - * For fast match this value is lookahead_window_length + 1) - * @param scoresQueueLen queue length - */ - public void setScoreQueueLength(int scoresQueueLen) { - toStoreScore = scoresQueueLen > 0; - this.scoresQueueLen = scoresQueueLen; - } - - public int getTopGauNum() { - return topGauNum; - } - - public int getGauNum() { - return gauNum; - } - - public float getTopGauScore(int streamId, int topGauId) { - return curScores.getScore(streamId, topGauId); - } - - public int getTopGauId(int streamId, int topGauId) { - return curScores.getGauId(streamId, topGauId); - } - - public float getGauScore(int streamId, int topGauId) { - return components.get(streamId)[topGauId].getStoredScore(); - } - - public int getGauId(int streamId, int topGauId) { - return components.get(streamId)[topGauId].getId(); - } - - private T[] concatenate (T[] A, T[] B) { - int aLen = A.length; - int bLen = B.length; - - @SuppressWarnings("unchecked") - T[] C = (T[]) Array.newInstance(A.getClass().getComponentType(), aLen+bLen); - System.arraycopy(A, 0, C, 0, aLen); - System.arraycopy(B, 0, C, aLen, bLen); - - return C; - } - - protected MixtureComponent[] toArray() { - PrunableMixtureComponent[] allComponents = new PrunableMixtureComponent[0]; - for (int i = 0; i < numStreams; i++) - concatenate(allComponents, components.get(i)); - return allComponents; - } - - protected int dimension() { - int dimension = 0; - for (int i = 0; i < numStreams; i++) { - dimension+= components.get(i)[0].getMean().length; - } - return dimension; - } - - protected int size() { - int size = 0; - for (int i = 0; i < numStreams; i++) { - size += components.get(0).length; - } - return size; - } - - private Comparator componentComparator = new Comparator() { - - @Override - public int compare(PrunableMixtureComponent a, PrunableMixtureComponent b) { - return (int)(a.getStoredScore() - b.getStoredScore()); - } - }; - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/tiedmixture/MixtureComponentSetScores.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/tiedmixture/MixtureComponentSetScores.java deleted file mode 100755 index 75c7ba8c..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/tiedmixture/MixtureComponentSetScores.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2014 Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate.tiedmixture; - -/** - * Class to keep scores of mixture components for certain frame. - * Is use useful in case of fast match to avoid scoring gaussians twice - */ -public class MixtureComponentSetScores { - - private float[][] scores; //scores[featureStreamIdx][gaussianIndex] - private int[][] ids; //id[featureStreamIdx][gaussianIndex] - private long frameStartSample; - - public MixtureComponentSetScores(int numStreams, int gauNum, long frameStartSample) { - scores = new float[numStreams][gauNum]; - ids = new int[numStreams][gauNum]; - this.frameStartSample = frameStartSample; - } - - public void setScore(int featStream, int gauIdx, float score) { - scores[featStream][gauIdx] = score; - } - - public void setGauId(int featStream, int gauIdx, int id) { - ids[featStream][gauIdx] = id; - } - - public float getScore(int featStream, int gauIdx) { - return scores[featStream][gauIdx]; - } - - public int getGauId(int featStream, int gauIdx) { - return ids[featStream][gauIdx]; - } - - public long getFrameStartSample() { - return frameStartSample; - } - - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/tiedmixture/PrunableMixtureComponent.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/tiedmixture/PrunableMixtureComponent.java deleted file mode 100755 index 7b740709..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/tiedmixture/PrunableMixtureComponent.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright 2014 Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate.tiedmixture; - -import edu.cmu.sphinx.linguist.acoustic.tiedstate.MixtureComponent; -import edu.cmu.sphinx.util.LogMath; - -/** - * Mixture component with partial score computation result. - * Allows to skip score computing if temporary score reaches provided threshold - */ -@SuppressWarnings("serial") -public class PrunableMixtureComponent extends MixtureComponent { - - private float score = LogMath.LOG_ZERO; - private float partScore = LogMath.LOG_ZERO; - private int id; - - public PrunableMixtureComponent( - float[] mean, - float[][] meanTransformationMatrix, - float[] meanTransformationVector, - float[] variance, - float[][] varianceTransformationMatrix, - float[] varianceTransformationVector, - float distFloor, - float varianceFloor, - int id) { - super(mean, meanTransformationMatrix, meanTransformationVector, variance, varianceTransformationMatrix, varianceTransformationVector, distFloor, varianceFloor); - this.id = id; - } - - private float convertScore(float val) { - // Convert to the appropriate base. - val = logMath.lnToLog(val); - - // TODO: Need to use mean and variance transforms here - - if (Float.isNaN(val)) { - System.out.println("gs is Nan, converting to 0"); - val = LogMath.LOG_ZERO; - } - - if (val < distFloor) { - val = distFloor; - } - - return val; - } - - public boolean isTopComponent(float[] feature, float threshold) { - - float logDval = logPreComputedGaussianFactor; - - // First, compute the argument of the exponential function in - // the definition of the Gaussian, then convert it to the - // appropriate base. If the log base is Math.E, - // then no operation is necessary. - for (int i = 0; i < feature.length; i++) { - float logDiff = feature[i] - meanTransformed[i]; - logDval += logDiff * logDiff * precisionTransformed[i]; - if (logDval < threshold) - return false; - } - - partScore = logDval; - score = convertScore(logDval); - return true; - } - - public void updateScore(float[] feature) { - - float logDval = logPreComputedGaussianFactor; - - // First, compute the argument of the exponential function in - // the definition of the Gaussian, then convert it to the - // appropriate base. If the log base is Math.E, - // then no operation is necessary. - for (int i = 0; i < feature.length; i++) { - float logDiff = feature[i] - meanTransformed[i]; - logDval += logDiff * logDiff * precisionTransformed[i]; - } - - partScore = logDval; - score = convertScore(logDval); - } - - public float getStoredScore() { - return score; - } - - public float getPartialScore() { - return partScore; - } - - public int getId() { - return id; - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/tiedmixture/SetBasedGaussianMixture.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/tiedmixture/SetBasedGaussianMixture.java deleted file mode 100755 index 8bc6f1b4..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/tiedmixture/SetBasedGaussianMixture.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright 2014 Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate.tiedmixture; - -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.GaussianMixture; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.GaussianWeights; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.MixtureComponent; -import edu.cmu.sphinx.util.LogMath; - -/** - * Represents gaussian mixture that is based on provided mixture component set - *

    - * All scores and weights are maintained in LogMath log base. - */ - -@SuppressWarnings("serial") -public class SetBasedGaussianMixture extends GaussianMixture { - - private MixtureComponentSet mixtureComponentSet; - - public SetBasedGaussianMixture(GaussianWeights mixtureWeights, - MixtureComponentSet mixtureComponentSet, int id) { - super(mixtureWeights, null, id); - this.mixtureComponentSet = mixtureComponentSet; - } - - @Override - public float calculateScore(Data feature) { - mixtureComponentSet.updateTopScores(feature); - float ascore = 0; - for (int i = 0; i < mixtureWeights.getStreamsNum(); i++) { - float logTotal = LogMath.LOG_ZERO; - for (int j = 0; j < mixtureComponentSet.getTopGauNum(); j++) { - float gauScore = mixtureComponentSet.getTopGauScore(i, j); - int gauId = mixtureComponentSet.getTopGauId(i, j); - logTotal = logMath.addAsLinear(logTotal, gauScore + mixtureWeights.get(id, i, gauId)); - } - ascore += logTotal; - } - return ascore; - } - - /** - * Calculates the scores for each component in the senone. - * - * @param feature the feature to score - * @return the LogMath log scores for the feature, one for each component - */ - @Override - public float[] calculateComponentScore(Data feature) { - mixtureComponentSet.updateScores(feature); - float[] scores = new float[mixtureComponentSet.size()]; - int scoreIdx = 0; - for (int i = 0; i < mixtureWeights.getStreamsNum(); i++) { - for (int j = 0; j < mixtureComponentSet.getGauNum(); j++) { - scores[scoreIdx++] = mixtureComponentSet.getGauScore(i, j) + mixtureWeights.get(id, i, mixtureComponentSet.getGauId(i, j)); - } - } - return scores; - } - - @Override - public MixtureComponent[] getMixtureComponents() { - return mixtureComponentSet.toArray(); - } - - @Override - public int dimension() { - return mixtureComponentSet.dimension(); - } - - /** @return the number of component densities of this GaussianMixture. */ - @Override - public int numComponents() { - return mixtureComponentSet.size(); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/Buffer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/Buffer.java deleted file mode 100755 index 79915f63..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/Buffer.java +++ /dev/null @@ -1,313 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate.trainer; - -import edu.cmu.sphinx.util.LogMath; - -/** Used to accumulate data for updating of models. */ -class Buffer { - - private double[] numerator; - private double denominator; - private boolean wasUsed; - // Maybe isLog should be used otherwise: one single, say, - // accumulate(), which would be directed according to isLog. But - // then again having accumulate() and logAccumulate() makes it - // clearer if we're dealing with log scale or not... - private boolean isLog; - private int id; - - - /** - * Creates a new buffer. If the values will be in log, the buffer is initialized to all - * LogMath.LOG_ZERO. - * - * @param size the number of elements in this buffer - * @param isLog if true, the values in the buffer will be in log - */ - Buffer(int size, boolean isLog, int id) { - this.id = id; - this.isLog = isLog; - wasUsed = false; - numerator = new double[size]; - if (isLog) { - denominator = LogMath.LOG_ZERO; - for (int i = 0; i < size; i++) { - numerator[i] = LogMath.LOG_ZERO; - } - } - } - - - /** - * Accumulates data to this buffer. Data are accumulated to a given numerator buffer and to the denominator buffer. - * - * @param data the data to be added - * @param entry the numerator entry to be accumulated to - */ - void accumulate(float data, int entry) { - // Not needed anymore?? - assert false; - assert numerator != null; - assert !isLog; - numerator[entry] += data; - denominator += data; - wasUsed = true; - } - - - /** - * Accumulates data to this buffer. Data are accumulated to a given numerator buffer and to the denominator buffer. - * - * @param data the data to be added - * @param entry the numerator entry to be accumulated to - * @param logMath the logMath to use - */ - void logAccumulate(float data, int entry, LogMath logMath) { - assert numerator != null; - assert isLog; - numerator[entry] = logMath.addAsLinear((float) numerator[entry], data); - denominator = logMath.addAsLinear((float) denominator, data); - wasUsed = true; - } - - - /** - * Accumulates data to this buffer. Data are accumulated to a given numerator buffer and to the denominator buffer. - * - * @param numeratorData the data to be added to the numerator - * @param denominatorData the data to be added to the denominator - */ - void accumulate(double[] numeratorData, double denominatorData) { - assert numerator != null; - assert numeratorData != null; - assert numerator.length == numeratorData.length; - assert !isLog; - for (int i = 0; i < numerator.length; i++) { - numerator[i] += numeratorData[i]; - } - denominator += denominatorData; - wasUsed = true; - } - - - /** - * Accumulates data to this buffer. Data are accumulated to a given numerator buffer and to the denominator buffer. - * - * @param logNumeratorData the data to be added to the numerator - * @param logDenominatorData the data to be added to the denominator - * @param logMath the LogMath instance to be used - */ - void logAccumulate(float[] logNumeratorData, float logDenominatorData, - LogMath logMath) { - assert numerator != null; - assert logNumeratorData != null; - assert numerator.length == logNumeratorData.length; - assert isLog; - for (int i = 0; i < numerator.length; i++) { - numerator[i] = - logMath.addAsLinear((float) numerator[i], logNumeratorData[i]); - } - denominator = logMath.addAsLinear((float) denominator, logDenominatorData); - wasUsed = true; - } - - - /** - * Normalize the buffer. This method divides the numerator by the denominator, storing the result in the numerator, - * and setting denominator to 1. - */ - void normalize() { - assert !isLog; - if (denominator == 0) { - System.out.println("Empty denominator: " + id); - // dump(); - // assert false; - wasUsed = false; - return; - } - - double invDenominator = (1.0 / denominator); - for (int i = 0; i < numerator.length; i++) { - numerator[i] *= invDenominator; - } - denominator = 1.0; - } - - - /** - * Normalize the buffer in log scale. This method divides the numerator by the denominator, storing the result in - * the numerator, and setting denominator to log(1) = 0. - */ - void logNormalize() { - assert isLog; - for (int i = 0; i < numerator.length; i++) { - numerator[i] -= denominator; - } - denominator = 0.0f; - } - - - /** - * Normalize the non-zero elements in a buffer in log scale. This method divides the numerator by the denominator, - * storing the result in the numerator, and setting denominator to log(1) = 0. A mask is used to tell whether a - * component should be normalized (non-zero) or not (zero). - * - * @param mask a vector containing zero/non-zero values. - */ - void logNormalizeNonZero(float[] mask) { - assert isLog; - assert mask.length == numerator.length; - for (int i = 0; i < numerator.length; i++) { - if (mask[i] != LogMath.LOG_ZERO) { - numerator[i] -= denominator; - } - } - denominator = 0.0; - } - - - /** Normalize the buffer. The normalization is done so that the summation of elements in the buffer is 1. */ - void normalizeToSum() { - assert !isLog; - float den = 0.0f; - for (double val : numerator) { - den += val; - } - float invDenominator = (float) (1.0 / den); - for (int i = 0; i < numerator.length; i++) { - numerator[i] *= invDenominator; - } - denominator = 1.0; - } - - - /** - * Normalize the buffer in log scale. The normalization is done so that the summation of elements in the buffer is - * log(1) = 0. In this, we assume that if an element has a value of zero, it won't be updated. - * - * @param logMath the logMath to use - */ - void logNormalizeToSum(LogMath logMath) { - assert isLog; - float logZero = LogMath.LOG_ZERO; - float den = logZero; - for (double val : numerator) { - if (val != logZero) { - den = logMath.addAsLinear(den, (float)val); - } - } - for (int i = 0; i < numerator.length; i++) { - if (numerator[i] != logZero) { - numerator[i] -= den; - } - } - denominator = 0.0; - } - - - /** - * Floor the buffer. - * - * @param floor the floor for this buffer - * @return if true, the buffer was modified - */ - protected boolean floor(float floor) { - assert !isLog; - boolean wasModified = false; - for (int i = 0; i < numerator.length; i++) { - if (numerator[i] < floor) { - wasModified = true; - numerator[i] = floor; - } - } - return wasModified; - } - - - /** - * Floor the buffer in log scale. - * - * @param logFloor the floor for this buffer, in log scale - * @return if true, the buffer was modified - */ - protected boolean logFloor(float logFloor) { - assert isLog; - boolean wasModified = false; - for (int i = 0; i < numerator.length; i++) { - if (numerator[i] < logFloor) { - wasModified = true; - numerator[i] = logFloor; - } - } - return wasModified; - } - - - /** - * Retrieves a value from this buffer. Make sure you normalize the buffer first. - * - * @param entry the index into the buffer - * @return the value - */ - protected float getValue(int entry) { - return (float) numerator[entry]; - } - - - /** - * Set the entry in this buffer to a value. - * - * @param entry the index into the buffer - * @param value the value - */ - protected void setValue(int entry, float value) { - numerator[entry] = value; - } - - - /** - * Retrieves a vector from this buffer. Make sure you normalize the buffer first. - * - * @return the value - */ - protected float[] getValues() { - float[] returnVector = new float[numerator.length]; - for (int i = 0; i < numerator.length; i++) { - returnVector[i] = (float) numerator[i]; - } - return returnVector; - } - - - /** - * Returns whether the buffer was used. - * - * @return if true, the buffer was used - */ - protected boolean wasUsed() { - return wasUsed; - } - - - /** Dump info about this buffer. */ - public void dump() { - System.out.println("Denominator= " + denominator); - System.out.println("Numerators= "); - for (int i = 0; i < numerator.length; i++) { - System.out.println("[" + i + "]= " + numerator[i]); - } - } - -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/HMMPoolManager.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/HMMPoolManager.java deleted file mode 100755 index ec831671..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/HMMPoolManager.java +++ /dev/null @@ -1,574 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate.trainer; - -import edu.cmu.sphinx.frontend.FloatData; -import edu.cmu.sphinx.linguist.acoustic.HMMState; -import edu.cmu.sphinx.linguist.acoustic.HMM; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.*; -import edu.cmu.sphinx.util.LogMath; - -import java.io.IOException; -import java.util.HashMap; -import java.util.logging.Logger; - -/** Manages the HMM pools. */ -class HMMPoolManager { - - private HMMManager hmmManager; - private HashMap indexMap; - private Pool meansPool; - private Pool variancePool; - private Pool matrixPool; - private GaussianWeights mixtureWeights; - - private Pool meansBufferPool; - private Pool varianceBufferPool; - private Pool matrixBufferPool; - private Pool mixtureWeightsBufferPool; - - private Pool senonePool; - private LogMath logMath; - - private float logMixtureWeightFloor; - private float logTransitionProbabilityFloor; - private float varianceFloor; - private float logLikelihood; - private float currentLogLikelihood; - - /** The logger for this class */ - private static Logger logger = Logger.getLogger("edu.cmu.sphinx.linguist.acoustic.HMMPoolManager"); - - /** - * Constructor for this pool manager. It gets the pointers to the pools from a loader. - * - * @param loader the loader - * @throws IOException - */ - protected HMMPoolManager(Loader loader) throws IOException { - loader.load(); - hmmManager = loader.getHMMManager(); - indexMap = new HashMap(); - meansPool = loader.getMeansPool(); - variancePool = loader.getVariancePool(); - mixtureWeights = loader.getMixtureWeights(); - matrixPool = loader.getTransitionMatrixPool(); - senonePool = loader.getSenonePool(); - -// logMath = LogMath.getLogMath(); -// float mixtureWeightFloor = -// props.getFloat(TiedStateAcousticModel.PROP_MW_FLOOR); -// logMixtureWeightFloor = logMath.linearToLog(mixtureWeightFloor); -// float transitionProbabilityFloor = -// props.getFloat(TiedStateAcousticModel.PROP_TP_FLOOR); -// logTransitionProbabilityFloor = -// logMath.linearToLog(transitionProbabilityFloor); -// varianceFloor = -// props.getFloat(TiedStateAcousticModel.PROP_VARIANCE_FLOOR); - - createBuffers(); - logLikelihood = 0.0f; - logMath = LogMath.getLogMath(); - } - - /** Recreates the buffers. */ - protected void resetBuffers() { - createBuffers(); - logLikelihood = 0.0f; - } - - /** Create buffers for all pools used by the trainer in this pool manager. */ - protected void createBuffers() { - // the option false or true refers to whether the buffer is in - // log scale or not, true if it is. - meansBufferPool = create1DPoolBuffer(meansPool, false); - varianceBufferPool = create1DPoolBuffer(variancePool, false); - matrixBufferPool = create2DPoolBuffer(matrixPool, true); - mixtureWeightsBufferPool = createWeightsPoolBuffer(mixtureWeights); - } - - - /** Create buffers for a given pool. */ - private Pool create1DPoolBuffer(Pool pool, boolean isLog) { - Pool bufferPool = new Pool(pool.getName()); - - for (int i = 0; i < pool.size(); i++) { - float[] element = pool.get(i); - indexMap.put(element, i); - Buffer buffer = new Buffer(element.length, isLog, i); - bufferPool.put(i, buffer); - } - return bufferPool; - } - - private Pool createWeightsPoolBuffer(GaussianWeights mixtureWeights) { - Pool bufferPool = new Pool(mixtureWeights.getName()); - int statesNum = mixtureWeights.getStatesNum(); - int streamsNum = mixtureWeights.getStreamsNum(); - int gauPerState = mixtureWeights.getGauPerState(); - for (int i = 0; i < streamsNum; i++) { - for (int j = 0; j < statesNum; j++) { - int id = i * statesNum + j; - Buffer buffer = new Buffer(gauPerState, true, id); - bufferPool.put(id, buffer); - } - } - return bufferPool; - } - - /** Create buffers for a given pool. */ - private Pool create2DPoolBuffer(Pool pool, boolean isLog) { - Pool bufferPool = new Pool(pool.getName()); - - for (int i = 0; i < pool.size(); i++) { - float[][] element = pool.get(i); - indexMap.put(element, i); - int poolSize = element.length; - Buffer[] bufferArray = new Buffer[poolSize]; - for (int j = 0; j < poolSize; j++) { - bufferArray[j] = new Buffer(element[j].length, isLog, j); - } - bufferPool.put(i, bufferArray); - } - return bufferPool; - } - - /** - * Accumulate the TrainerScore into the buffers. - * - * @param index the current index into the TrainerScore vector - * @param score the TrainerScore - */ - protected void accumulate(int index, TrainerScore[] score) { - accumulate(index, score, null); - } - - /** - * Accumulate the TrainerScore into the buffers. - * - * @param index the current index into the TrainerScore vector - * @param score the TrainerScore for the current frame - * @param nextScore the TrainerScore for the next time frame - */ - protected void accumulate(int index, TrainerScore[] score, TrainerScore[] nextScore) { - int senoneID; - TrainerScore thisScore = score[index]; - - // We should be doing this just once per utterance... - // currentLogLikelihood = thisScore.getLogLikelihood(); - - // Since we're scaling, the loglikelihood disappears... - currentLogLikelihood = 0; - // And the total becomes the sum of (-) scaling factors - logLikelihood -= score[0].getScalingFactor(); - - SenoneHMMState state = (SenoneHMMState) thisScore.getState(); - if (state == null) { - // We only care about the case "all models" - senoneID = thisScore.getSenoneID(); - if (senoneID == TrainerAcousticModel.ALL_MODELS) { - accumulateMean(senoneID, score[index]); - accumulateVariance(senoneID, score[index]); - accumulateMixture(senoneID, score[index]); - accumulateTransition(senoneID, index, score, nextScore); - } - } else { - // If state is non-emitting, we presume there's only one - // transition out of it. Therefore, we only accumulate - // data for emitting states. - if (state.isEmitting()) { - senoneID = senonePool.indexOf(state.getSenone()); - // accumulateMean(senoneID, score[index]); - // accumulateVariance(senoneID, score[index]); - accumulateMixture(senoneID, score[index]); - accumulateTransition(senoneID, index, score, nextScore); - } - } - } - - /** Accumulate the means. */ - private void accumulateMean(int senone, TrainerScore score) { - if (senone == TrainerAcousticModel.ALL_MODELS) { - for (int i = 0; i < senonePool.size(); i++) { - accumulateMean(i, score); - } - } else { - GaussianMixture gaussian = (GaussianMixture)senonePool.get(senone); - MixtureComponent[] mix = gaussian.getMixtureComponents(); - for (int i = 0; i < mix.length; i++) { - float[] mean = mix[i].getMean(); - // int indexMean = meansPool.indexOf(mean); - int indexMean = indexMap.get(mean); - assert indexMean >= 0; - assert indexMean == senone; - Buffer buffer = meansBufferPool.get(indexMean); - float[] feature = ((FloatData) score.getData()).getValues(); - double[] data = new double[feature.length]; - float prob = score.getComponentGamma()[i]; - prob -= currentLogLikelihood; - double dprob = logMath.logToLinear(prob); - // prob = (float) logMath.logToLinear(prob); - for (int j = 0; j < data.length; j++) { - data[j] = feature[j] * dprob; - } - buffer.accumulate(data, dprob); - } - } - } - - - /** Accumulate the variance. */ - private void accumulateVariance(int senone, TrainerScore score) { - if (senone == TrainerAcousticModel.ALL_MODELS) { - for (int i = 0; i < senonePool.size(); i++) { - accumulateVariance(i, score); - } - } else { - GaussianMixture gaussian = (GaussianMixture)senonePool.get(senone); - MixtureComponent[] mix = gaussian.getMixtureComponents(); - for (int i = 0; i < mix.length; i++) { - float[] mean = mix[i].getMean(); - float[] variance = mix[i].getVariance(); - // int indexVariance = variancePool.indexOf(variance); - int indexVariance = indexMap.get(variance); - Buffer buffer = varianceBufferPool.get(indexVariance); - float[] feature = ((FloatData) score.getData()).getValues(); - double[] data = new double[feature.length]; - float prob = score.getComponentGamma()[i]; - prob -= currentLogLikelihood; - double dprob = logMath.logToLinear(prob); - for (int j = 0; j < data.length; j++) { - data[j] = (feature[j] - mean[j]); - data[j] *= data[j] * dprob; - } - buffer.accumulate(data, dprob); - } - } - } - - /** Accumulate the mixture weights. */ - private void accumulateMixture(int senone, TrainerScore score) { - // The index into the senone pool and the mixture weight pool - // is the same - if (senone == TrainerAcousticModel.ALL_MODELS) { - for (int i = 0; i < senonePool.size(); i++) { - accumulateMixture(i, score); - } - } else { - Buffer buffer = mixtureWeightsBufferPool.get(senone); - for (int i = 0; i < mixtureWeights.getGauPerState(); i++) { - float prob = score.getComponentGamma()[i]; - prob -= currentLogLikelihood; - buffer.logAccumulate(prob, i, logMath); - } - } - } - - /** - * Accumulate transitions from a given state. - * - * @param indexScore the current index into the TrainerScore - * @param score the score information - * @param nextScore the score information for the next frame - */ - private void accumulateStateTransition(int indexScore, TrainerScore[] score, TrainerScore[] nextScore) { - HMMState state = score[indexScore].getState(); - if (state == null) { - // Non-emitting state - return; - } - int indexState = state.getState(); - SenoneHMM hmm = (SenoneHMM) state.getHMM(); - float[][] matrix = hmm.getTransitionMatrix(); - - // Find the index for current matrix in the transition matrix pool - // int indexMatrix = matrixPool.indexOf(matrix); - int indexMatrix = indexMap.get(matrix); - - // Find the corresponding buffer - Buffer[] bufferArray = matrixBufferPool.get(indexMatrix); - - // Let's concentrate on the transitions *from* the current state - float[] vector = matrix[indexState]; - - for (int i = 0; i < vector.length; i++) { - // Make sure this is a valid transition - if (vector[i] != LogMath.LOG_ZERO) { - - // We're assuming that if the states have position "a" - // and "b" in the HMM, they'll have positions "k+a" - // and "k+b" in the graph, that is, their relative - // position is the same. - - // Distance between current state and "to" state in - // the HMM - int dist = i - indexState; - - // "to" state in the graph - int indexNextScore = indexScore + dist; - - // Make sure the next state is non-emitting (the last - // in the HMM), or in the same HMM. - assert ((nextScore[indexNextScore].getState() == null) || - (nextScore[indexNextScore].getState().getHMM() == hmm)); - float alpha = score[indexScore].getAlpha(); - float beta = nextScore[indexNextScore].getBeta(); - float transitionProb = vector[i]; - float outputProb = nextScore[indexNextScore].getScore(); - float prob = alpha + beta + transitionProb + outputProb; - prob -= currentLogLikelihood; - // i is the index into the next state. - bufferArray[indexState].logAccumulate(prob, i, logMath); - /* - if ((indexMatrix == 0) && (i == 2)) { - // System.out.println("Out: " + outputProb); - // bufferArray[indexState].dump(); - } - */ - } - } - } - - /** - * Accumulate transitions from a given state. - * - * @param indexState the state index - * @param hmm the HMM - * @param value the value to accumulate - */ - private void accumulateStateTransition(int indexState, SenoneHMM hmm, float value) { - // Find the transition matrix in this hmm - float[][] matrix = hmm.getTransitionMatrix(); - - // Find the vector with transitions from the current state to - // other states. - float[] stateVector = matrix[indexState]; - - // Find the index of the current transition matrix in the - // transition matrix pool. - // int indexMatrix = matrixPool.indexOf(matrix); - int indexMatrix = indexMap.get(matrix); - - // Find the buffer for the transition matrix. - Buffer[] bufferArray = matrixBufferPool.get(indexMatrix); - - // Accumulate for the transitions from current state - for (int i = 0; i < stateVector.length; i++) { - // Make sure we're not trying to accumulate in an invalid - // transition. - if (stateVector[i] != LogMath.LOG_ZERO) { - bufferArray[indexState].logAccumulate(value, i, logMath); - } - } - } - - /** Accumulate the transition probabilities. */ - private void accumulateTransition(int indexHmm, int indexScore, TrainerScore[] score, TrainerScore[] nextScore) { - if (indexHmm == TrainerAcousticModel.ALL_MODELS) { - // Well, special case... we want to add an amount to all - // the states in all models - for (HMM hmm : hmmManager) { - for (int j = 0; j < hmm.getOrder(); j++) { - accumulateStateTransition(j, (SenoneHMM)hmm, score[indexScore].getScore()); - } - } - } else { - // For transition accumulation, we don't consider the last - // time frame, since there's no transition from there to - // anywhere... - if (nextScore != null) { - accumulateStateTransition(indexScore, score, nextScore); - } - } - } - - /** Update the log likelihood. This method should be called for every utterance. */ - protected void updateLogLikelihood() { - // logLikelihood += currentLogLikelihood; - } - - /** - * Normalize the buffers. - * - * @return the log likelihood associated with the current training set - */ - protected float normalize() { - normalizePool(meansBufferPool); - normalizePool(varianceBufferPool); - logNormalizePool(mixtureWeightsBufferPool); - logNormalize2DPool(matrixBufferPool, matrixPool); - return logLikelihood; - } - - /** - * Normalize a single buffer pool. - * - * @param pool the buffer pool to normalize - */ - private void normalizePool(Pool pool) { - assert pool != null; - for (int i = 0; i < pool.size(); i++) { - Buffer buffer = pool.get(i); - if (buffer.wasUsed()) { - buffer.normalize(); - } - } - } - - /** - * Normalize a single buffer pool in log scale. - * - * @param pool the buffer pool to normalize - */ - private void logNormalizePool(Pool pool) { - assert pool != null; - for (int i = 0; i < pool.size(); i++) { - Buffer buffer = pool.get(i); - if (buffer.wasUsed()) { - buffer.logNormalize(); - } - } - } - - /** - * Normalize a 2D buffer pool in log scale. Typically, this is the case with the transition matrix, which also needs - * a mask for values that are allowed, and therefor have to be updated, or not allowed, and should be ignored. - * - * @param pool the buffer pool to normalize - * @param maskPool pool containing a mask with zero/non-zero values. - */ - private void logNormalize2DPool(Pool pool, Pool maskPool) { - assert pool != null; - for (int i = 0; i < pool.size(); i++) { - Buffer[] bufferArray = pool.get(i); - float[][] mask = maskPool.get(i); - for (int j = 0; j < bufferArray.length; j++) { - if (bufferArray[j].wasUsed()) { - bufferArray[j].logNormalizeNonZero(mask[j]); - } - } - } - } - - /** Update the models. */ - protected void update() { - updateMeans(); - updateVariances(); - recomputeMixtureComponents(); - updateMixtureWeights(); - updateTransitionMatrices(); - } - - /** - * Copy one vector onto another. - * - * @param in the source vector - * @param out the destination vector - */ - private void copyVector(float[] in, float[] out) { - assert in.length == out.length; - System.arraycopy(in, 0, out, 0, in.length); - } - - /** Update the means. */ - private void updateMeans() { - assert meansPool.size() == meansBufferPool.size(); - for (int i = 0; i < meansPool.size(); i++) { - float[] means = meansPool.get(i); - Buffer buffer = meansBufferPool.get(i); - if (buffer.wasUsed()) { - float[] meansBuffer = buffer.getValues(); - copyVector(meansBuffer, means); - } else { - logger.info("Senone " + i + " not used."); - } - } - } - - /** Update the variances. */ - private void updateVariances() { - assert variancePool.size() == varianceBufferPool.size(); - for (int i = 0; i < variancePool.size(); i++) { - float[] means = meansPool.get(i); - float[] variance = variancePool.get(i); - Buffer buffer = varianceBufferPool.get(i); - if (buffer.wasUsed()) { - float[] varianceBuffer = buffer.getValues(); - assert means.length == varianceBuffer.length; - for (int j = 0; j < means.length; j++) { - varianceBuffer[j] -= means[j] * means[j]; - if (varianceBuffer[j] < varianceFloor) { - varianceBuffer[j] = varianceFloor; - } - } - copyVector(varianceBuffer, variance); - } - } - } - - /** Recompute the precomputed values in all mixture components. */ - private void recomputeMixtureComponents() { - for (int i = 0; i < senonePool.size(); i++) { - GaussianMixture gMix = (GaussianMixture) senonePool.get(i); - MixtureComponent[] mixComponent = gMix.getMixtureComponents(); - for (MixtureComponent component : mixComponent) { - component.precomputeDistance(); - } - } - } - - /** Update the mixture weights. */ - private void updateMixtureWeights() { - int statesNum = mixtureWeights.getStatesNum(); - int streamsNum = mixtureWeights.getStreamsNum(); - assert statesNum * streamsNum == mixtureWeightsBufferPool.size(); - for (int i = 0; i < streamsNum; i++) { - for (int j = 0; j < statesNum; j++) { - int id = i * statesNum + j; - Buffer buffer = mixtureWeightsBufferPool.get(id); - if (buffer.wasUsed()) { - if (buffer.logFloor(logMixtureWeightFloor)) { - buffer.logNormalizeToSum(logMath); - } - float[] mixtureWeightsBuffer = buffer.getValues(); - mixtureWeights.put(j, i, mixtureWeightsBuffer); - } - } - } - } - - /** Update the transition matrices. */ - private void updateTransitionMatrices() { - assert matrixPool.size() == matrixBufferPool.size(); - for (int i = 0; i < matrixPool.size(); i++) { - float[][] matrix = matrixPool.get(i); - Buffer[] bufferArray = matrixBufferPool.get(i); - for (int j = 0; j < matrix.length; j++) { - Buffer buffer = bufferArray[j]; - if (buffer.wasUsed()) { - for (int k = 0; k < matrix[j].length; k++) { - float bufferValue = buffer.getValue(k); - if (bufferValue != LogMath.LOG_ZERO) { - assert matrix[j][k] != LogMath.LOG_ZERO; - if (bufferValue < logTransitionProbabilityFloor) { - buffer.setValue(k, logTransitionProbabilityFloor); - } - } - } - buffer.logNormalizeToSum(logMath); - copyVector(buffer.getValues(), matrix[j]); - } - } - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/ModelInitializerLoader.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/ModelInitializerLoader.java deleted file mode 100755 index 2f751c96..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/ModelInitializerLoader.java +++ /dev/null @@ -1,633 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate.trainer; - -import edu.cmu.sphinx.decoder.adaptation.ClusteredDensityFileData; -import edu.cmu.sphinx.decoder.adaptation.Transform; -import edu.cmu.sphinx.linguist.acoustic.HMM; -import edu.cmu.sphinx.linguist.acoustic.HMMPosition; -import edu.cmu.sphinx.linguist.acoustic.Unit; -import edu.cmu.sphinx.linguist.acoustic.UnitManager; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.*; -import static edu.cmu.sphinx.linguist.acoustic.tiedstate.Pool.Feature.*; -import edu.cmu.sphinx.util.ExtendedStreamTokenizer; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.StreamFactory; -import edu.cmu.sphinx.util.props.*; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.StreamCorruptedException; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Properties; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * an acoustic model loader that initializes models - *

    - * Mixture weights and transition probabilities are maintained in logMath log base, - */ -public class ModelInitializerLoader implements Loader { - - private final static String SILENCE_CIPHONE = "SIL"; - - public final static String MODEL_VERSION = "0.3"; - - private final static int CONTEXT_SIZE = 1; - - private Pool meansPool; - private Pool variancePool; - private Pool matrixPool; - private Pool meanTransformationMatrixPool; - private Pool meanTransformationVectorPool; - private Pool varianceTransformationMatrixPool; - private Pool varianceTransformationVectorPool; - private GaussianWeights mixtureWeights; - - private Pool senonePool; - private int vectorLength = 39; - - private Map contextIndependentUnits; - private Map phoneList; - private HMMManager hmmManager; - - @S4String(defaultValue="model") - public static final String MODEL_NAME = "modelName"; - - @S4String(defaultValue = ".") - public static final String LOCATION = "location"; - - @S4String(defaultValue = "phonelist") - public static final String PHONE_LIST = "phones"; - - @S4String(defaultValue = "data") - public static final String DATA_DIR = "dataDir"; - - @S4String(defaultValue = "model.props") - public static final String PROP_FILE = "propsFile"; - - @S4Component(type = UnitManager.class) - public final static String PROP_UNIT_MANAGER = "unitManager"; - private UnitManager unitManager; - - @S4Boolean(defaultValue = false) - public final static String PROP_USE_CD_UNITS = "useCDUnits"; - - @S4Double(defaultValue = 0.0001f) - public final static String PROP_VARIANCE_FLOOR = "varianceFloor"; - - /** Mixture component score floor. */ - @S4Double(defaultValue = 0.0) - public final static String PROP_MC_FLOOR = "MixtureComponentScoreFloor"; - - /** Mixture weight floor. */ - @S4Double(defaultValue = 1e-7f) - public final static String PROP_MW_FLOOR = "mixtureWeightFloor"; - - private LogMath logMath; - - /** The logger for this class */ - private Logger logger; - - public void newProperties(PropertySheet ps) throws PropertyException { - logMath = LogMath.getLogMath(); - logger = ps.getLogger(); - - unitManager = (UnitManager) ps.getComponent(PROP_UNIT_MANAGER); - - hmmManager = new HMMManager(); - contextIndependentUnits = new LinkedHashMap(); - phoneList = new LinkedHashMap(); - - meanTransformationMatrixPool = createDummyMatrixPool("meanTransformationMatrix"); - meanTransformationVectorPool = createDummyVectorPool("meanTransformationMatrix"); - varianceTransformationMatrixPool = createDummyMatrixPool("varianceTransformationMatrix"); - varianceTransformationVectorPool = createDummyVectorPool("varianceTransformationMatrix"); - - String modelName = ps.getString(MODEL_NAME); - - String location = ps.getString(LOCATION); - String phone = ps.getString(PHONE_LIST); - String dataDir = ps.getString(DATA_DIR); - - logger.info("Creating Sphinx3 acoustic model: " + modelName); - logger.info(" Path : " + location); - logger.info(" phonelist : " + phone); - logger.info(" dataDir : " + dataDir); - - // load the HMM model file - boolean useCDUnits = ps.getBoolean(PROP_USE_CD_UNITS); - - assert !useCDUnits; - try { - loadPhoneList(ps, useCDUnits, StreamFactory.getInputStream(location, phone), location + File.separator + phone); - } catch (StreamCorruptedException sce) { - printPhoneListHelp(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - /** Prints out a help message with format of phone list. */ - private void printPhoneListHelp() { - System.out.println("The format for the phone list file is:"); - System.out.println("\tversion 0.1"); - System.out.println("\tsame_sized_models yes"); - System.out.println("\tn_state 3"); - System.out.println("\ttmat_skip (no|yes)"); - System.out.println("\tAA"); - System.out.println("\tAE"); - System.out.println("\tAH"); - System.out.println("\t..."); - System.out.println("Or:"); - System.out.println("\tversion 0.1"); - System.out.println("\tsame_sized_models no"); - System.out.println("\ttmat_skip (no|yes)"); - System.out.println("\tAA 5"); - System.out.println("\tAE 3"); - System.out.println("\tAH 4"); - System.out.println("\t..."); - } - - public Map getContextIndependentUnits() { - return contextIndependentUnits; - } - - /** - * Adds a model to the senone pool. - * - * @param pool the senone pool - * @param stateID vector with senone ID for an HMM - * @param distFloor the lowest allowed score - * @param varianceFloor the lowest allowed variance - * @return the senone pool - */ - private void addModelToSenonePool(Pool pool, int[] stateID, float distFloor, float varianceFloor) { - assert pool != null; - -// int numMixtureWeights = mixtureWeightsPool.size(); - - /* - int numMeans = meansPool.size(); - int numVariances = variancePool.size(); - int numSenones = mixtureWeightsPool.getFeature(NUM_SENONES, 0); - int whichGaussian = 0; - - logger.fine("NG " + numGaussiansPerSenone); - logger.fine("NS " + numSenones); - logger.fine("NMIX " + numMixtureWeights); - logger.fine("NMNS " + numMeans); - logger.fine("NMNS " + numVariances); - - assert numMixtureWeights == numSenones; - assert numVariances == numSenones * numGaussiansPerSenone; - assert numMeans == numSenones * numGaussiansPerSenone; - */ - int numGaussiansPerSenone = mixtureWeights.getGauPerState(); - assert numGaussiansPerSenone > 0; - for (int state : stateID) { - MixtureComponent[] mixtureComponents = new MixtureComponent[numGaussiansPerSenone]; - for (int j = 0; j < numGaussiansPerSenone; j++) { - int whichGaussian = state * numGaussiansPerSenone + j; - mixtureComponents[j] = new MixtureComponent( - meansPool.get(whichGaussian), - meanTransformationMatrixPool.get(0), - meanTransformationVectorPool.get(0), - variancePool.get(whichGaussian), - varianceTransformationMatrixPool.get(0), - varianceTransformationVectorPool.get(0), - distFloor, - varianceFloor); - } - - Senone senone = new GaussianMixture(mixtureWeights, mixtureComponents, state); - - pool.put(state, senone); - } - } - - /** - * Adds a set of density arrays to a given pool. - * - * @param pool the pool to add densities to - * @param stateID a vector with the senone id of the states in a model - * @param numStreams the number of streams - * @param numGaussiansPerState the number of Gaussians per state - * @throws IOException if an error occurs while loading the data - */ - private void addModelToDensityPool(Pool pool, int[] stateID, int numStreams, int numGaussiansPerState) - throws IOException { - assert pool != null; - assert stateID != null; - - int numStates = stateID.length; - - int numInPool = pool.getFeature(NUM_SENONES, 0); - pool.setFeature(NUM_SENONES, numStates + numInPool); - numInPool = pool.getFeature(NUM_STREAMS, -1); - if (numInPool == -1) { - pool.setFeature(NUM_STREAMS, numStreams); - } else { - assert numInPool == numStreams; - } - numInPool = pool.getFeature(NUM_GAUSSIANS_PER_STATE, -1); - if (numInPool == -1) { - pool.setFeature(NUM_GAUSSIANS_PER_STATE, numGaussiansPerState); - } else { - assert numInPool == numGaussiansPerState; - } - - // TODO: numStreams should be any number > 0, but for now.... - assert numStreams == 1; - for (int i = 0; i < numStates; i++) { - int state = stateID[i]; - for (int j = 0; j < numGaussiansPerState; j++) { - // We're creating densities here, so it's ok if values - // are all zero. - float[] density = new float[vectorLength]; - int id = state * numGaussiansPerState + j; - pool.put(id, density); - } - } - } - - /** - * If a data point is below 'floor' make it equal to floor. - * - * @param data the data to floor - * @param floor the floored value - */ - private void floorData(float[] data, float floor) { - for (int i = 0; i < data.length; i++) { - if (data[i] < floor) { - data[i] = floor; - } - } - } - - /** - * Normalize the given data. - * - * @param data the data to normalize - */ - private void normalize(float[] data) { - float sum = 0; - for (float val : data) { - sum += val; - } - - if (sum != 0.0f) { - // Invert, so we multiply instead of dividing inside the loop - sum = 1.0f / sum; - for (int i = 0; i < data.length; i++) { - data[i] = data[i] * sum; - } - } - } - - /** - * Loads the phone list, which possibly contains the sizes (number of states) of models. - * - * @param ps - * @param useCDUnits if true, uses context dependent units - * @param inputStream the open input stream to use - * @param path the path to a density file @throws FileNotFoundException if a file cannot be found - * @throws IOException if an error occurs while loading the data - */ - private void loadPhoneList(PropertySheet ps, boolean useCDUnits, InputStream inputStream, String path) - throws IOException { - int numState = 0; - // TODO: this should be flexible, but we're hardwiring for now - int numStreams = 1; - // Since we're initializing, we start simple. - int numGaussiansPerState = 1; - - ExtendedStreamTokenizer est = new ExtendedStreamTokenizer(inputStream, '#', false); - - // Initialize the pools we'll need. - meansPool = new Pool("means"); - variancePool = new Pool("variances"); - matrixPool = new Pool("transitionmatrices"); - senonePool = new Pool("senones"); - - float distFloor = ps.getFloat(PROP_MC_FLOOR); - float mixtureWeightFloor = ps.getFloat(PROP_MW_FLOOR); - float transitionProbabilityFloor = 0; - float varianceFloor = ps.getFloat(PROP_VARIANCE_FLOOR); - - logger.info("Loading phone list file from: "); - logger.info(path); - - // At this point, we only accept version 0.1 - String version = "0.1"; - est.expectString("version"); - est.expectString(version); - - est.expectString("same_sized_models"); - boolean sameSizedModels = est.getString().equals("yes"); - - if (sameSizedModels) { - est.expectString("n_state"); - numState = est.getInt("numBase"); - } - - // for this phone list version, let's assume left-to-right - // models, with optional state skip. - est.expectString("tmat_skip"); - boolean tmatSkip = est.getString().equals("yes"); - - // Load the phones with sizes - - // stateIndex contains the absolute state index, that is, a - // unique index in the senone pool. - int stateIndex, unitCount; - for (stateIndex = 0, unitCount = 0; ;) { - String phone = est.getString(); - if (est.isEOF()) { - break; - } - int size = numState; - if (!sameSizedModels) { - size = est.getInt("ModelSize"); - } - phoneList.put(phone, size); - logger.fine("Phone: " + phone + " size: " + size); - int[] stid = new int[size]; - String position = "-"; - - for (int j = 0; j < size; j++, stateIndex++) { - stid[j] = stateIndex; - } - - Unit unit = unitManager.getUnit(phone, phone.equals(SILENCE_CIPHONE)); - - contextIndependentUnits.put(unit.getName(), unit); - - if (logger.isLoggable(Level.FINE)) { - logger.fine("Loaded " + unit + " with " + size + " states"); - } - - // Means - addModelToDensityPool(meansPool, stid, numStreams, numGaussiansPerState); - - // Variances - addModelToDensityPool(variancePool, stid, numStreams, numGaussiansPerState); - - // Transition matrix - addModelToTransitionMatrixPool(matrixPool, unitCount, stid.length, transitionProbabilityFloor, tmatSkip); - - // After creating all pools, we create the senone pool. - addModelToSenonePool(senonePool, stid, distFloor, varianceFloor); - - // With the senone pool in place, we go through all units, and - // create the HMMs. - - // Create tmat - float[][] transitionMatrix = matrixPool.get(unitCount); - SenoneSequence ss = getSenoneSequence(stid); - - HMM hmm = new SenoneHMM(unit, ss, transitionMatrix, HMMPosition.lookup(position)); - hmmManager.put(hmm); - unitCount++; - } - // Mixture weights - all at once - mixtureWeights = initMixtureWeights(stateIndex, numStreams, numGaussiansPerState, mixtureWeightFloor); - - // If we want to use this code to load sizes/create models for - // CD units, we need to find another way of establishing the - // number of CI models, instead of just reading until the end - // of file. - - est.close(); - } - - /** - * Gets the senone sequence representing the given senones. - * - * @param stateid is the array of senone state ids - * @return the senone sequence associated with the states - */ - - private SenoneSequence getSenoneSequence(int[] stateid) { - Senone[] senones = new Senone[stateid.length]; - - for (int i = 0; i < stateid.length; i++) { - senones[i] = senonePool.get(stateid[i]); - } - - // TODO: Is there any advantage in trying to pool these? - return new SenoneSequence(senones); - } - - /** - * Adds model to the mixture weights - * - * @param numStates the number of states - * @param numStreams the number of streams - * @param numGaussiansPerState the number of Gaussians per state - * @param floor the minimum mixture weight allowed - * @return mixtureWeights the gaussian weights holder - */ - private GaussianWeights initMixtureWeights(int numStates, int numStreams, int numGaussiansPerState, float floor) { - - // TODO: allow any number for numStreams - assert numStreams == 1; - GaussianWeights mixtureWeights = new GaussianWeights("mixtureweights", numStates, numGaussiansPerState, numStreams); - for (int i = 0; i < numStates; i++) { - float[] logMixtureWeight = new float[numGaussiansPerState]; - // Initialize the weights with the same value, e.g. floor - floorData(logMixtureWeight, floor); - // Normalize, so the numbers are not all too low - normalize(logMixtureWeight); - logMath.linearToLog(logMixtureWeight); - mixtureWeights.put(i, 0, logMixtureWeight); - } - return mixtureWeights; - } - - /** - * Adds transition matrix to the transition matrices pool - * - * @param pool the pool to add matrix to - * @param hmmId current HMM's id - * @param numEmittingStates number of states in current HMM - * @param floor the transition probability floor - * @param skip if true, states can be skipped - * @throws IOException if an error occurs while loading the data - */ - private void addModelToTransitionMatrixPool(Pool pool, int hmmId, int numEmittingStates, - float floor, boolean skip) - throws IOException { - - assert pool != null; - - // Add one to account for the last, non-emitting, state - int numStates = numEmittingStates + 1; - - float[][] tmat = new float[numStates][numStates]; - - for (int j = 0; j < numStates; j++) { - for (int k = 0; k < numStates; k++) { - // Just to be sure... - tmat[j][k] = 0.0f; - - // the last row is just zeros, so we just do - // the first (numStates - 1) rows - - // The value assigned could be anything, provided - // we normalize it. - if (j < numStates - 1) { - // Usual case: state can transition to itself - // or the next state. - if (k == j || k == j + 1) { - tmat[j][k] = floor; - } - // If we can skip, we can also transition to - // the next state - if (skip) { - if (k == j + 2) { - tmat[j][k] = floor; - } - } - } - } - normalize(tmat[j]); - logMath.linearToLog(tmat[j]); - } - pool.put(hmmId, tmat); - } - - /** - * Creates a pool with a single identity matrix in it. - * - * @param name the name of the pool - * @return the pool with the matrix - */ - private Pool createDummyMatrixPool(String name) { - Pool pool = new Pool(name); - float[][] matrix = new float[vectorLength][vectorLength]; - logger.info("creating dummy matrix pool " + name); - for (int i = 0; i < vectorLength; i++) { - for (int j = 0; j < vectorLength; j++) { - if (i == j) { - matrix[i][j] = 1.0F; - } else { - matrix[i][j] = 0.0F; - } - } - } - - pool.put(0, matrix); - return pool; - } - - /** - * Creates a pool with a single zero vector in it. - * - * @param name the name of the pool - * @return the pool with the vector - */ - private Pool createDummyVectorPool(String name) { - logger.info("creating dummy vector pool " + name); - Pool pool = new Pool(name); - float[] vector = new float[vectorLength]; - for (int i = 0; i < vectorLength; i++) { - vector[i] = 0.0f; - } - pool.put(0, vector); - return pool; - } - - public void load() throws IOException { - } - - public Pool getMeansPool() { - return meansPool; - } - - public Pool getMeansTransformationMatrixPool() { - return meanTransformationMatrixPool; - } - - public Pool getMeansTransformationVectorPool() { - return meanTransformationVectorPool; - } - - public Pool getVariancePool() { - return variancePool; - } - - public Pool getVarianceTransformationMatrixPool() { - return varianceTransformationMatrixPool; - } - - public Pool getVarianceTransformationVectorPool() { - return varianceTransformationVectorPool; - } - - public GaussianWeights getMixtureWeights() { - return mixtureWeights; - } - - public Pool getTransitionMatrixPool() { - return matrixPool; - } - - public float[][] getTransformMatrix() { - return null; - } - - public Pool getSenonePool() { - return senonePool; - } - - public int getLeftContextSize() { - return CONTEXT_SIZE; - } - - public int getRightContextSize() { - return CONTEXT_SIZE; - } - - public HMMManager getHMMManager() { - return hmmManager; - } - - public void logInfo() { - logger.info("Sphinx3Loader"); - meansPool.logInfo(logger); - variancePool.logInfo(logger); - matrixPool.logInfo(logger); - senonePool.logInfo(logger); - meanTransformationMatrixPool.logInfo(logger); - meanTransformationVectorPool.logInfo(logger); - varianceTransformationMatrixPool.logInfo(logger); - varianceTransformationVectorPool.logInfo(logger); - mixtureWeights.logInfo(logger); - senonePool.logInfo(logger); - logger.info("Context Independent Unit Entries: " + contextIndependentUnits.size()); - hmmManager.logInfo(logger); - } - - public Properties getProperties() { - return new Properties(); - } - - @Override - public void update(Transform transform, ClusteredDensityFileData clusters) { - // TODO Not implemented yet - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/Sphinx3Saver.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/Sphinx3Saver.java deleted file mode 100755 index e14e39f6..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/Sphinx3Saver.java +++ /dev/null @@ -1,836 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate.trainer; - -import edu.cmu.sphinx.linguist.acoustic.LeftRightContext; -import edu.cmu.sphinx.linguist.acoustic.Unit; -import edu.cmu.sphinx.linguist.acoustic.HMM; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.*; -import static edu.cmu.sphinx.linguist.acoustic.tiedstate.Pool.Feature.*; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.StreamFactory; -import edu.cmu.sphinx.util.Utilities; -import edu.cmu.sphinx.util.props.*; - -import java.io.*; -import java.util.*; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * An acoustic model saver that saves sphinx3 ascii data. - *

    - * Mixture weights and transition probabilities are saved in linear scale. - */ -public class Sphinx3Saver implements Saver { - - /** - * The property specifying whether the transition matrices of the acoustic model is in sparse form, i.e., - * omitting the zeros of the non-transitioning states. - */ - @S4Boolean(defaultValue = true) - public final static String PROP_SPARSE_FORM = "sparseForm"; - protected boolean sparseForm; - - @S4Boolean(defaultValue = true) - public final static String PROP_USE_CD_UNITS = "useCDUnits"; - - @S4Double(defaultValue = 0.0f) - public final static String PROP_MC_FLOOR = "MixtureComponentScoreFloor"; - - - @S4Component(type = Loader.class) - public static final String LOADER = "loader"; - - @S4Integer(defaultValue = 39) - public final static String PROP_VECTOR_LENGTH = "vectorLength"; - - protected Logger logger; - - protected final static String FILLER = "filler"; - protected final static String SILENCE_CIPHONE = "SIL"; - - protected final static int BYTE_ORDER_MAGIC = 0x11223344; - - public final static String MODEL_VERSION = "0.3"; - - protected final static int CONTEXT_SIZE = 1; - - private String checksum; - private boolean doCheckSum; - - private Pool meansPool; - private Pool variancePool; - private Pool matrixPool; - private Pool meanTransformationMatrixPool; - private Pool meanTransformationVectorPool; - private Pool varianceTransformationMatrixPool; - private Pool varianceTransformationVectorPool; - private GaussianWeights mixtureWeights; - - private Pool senonePool; - private int vectorLength; - - private Map contextIndependentUnits; - private HMMManager hmmManager; - protected LogMath logMath; - private boolean binary; - private String location; - private boolean swap; - - protected final static String DENSITY_FILE_VERSION = "1.0"; - protected final static String MIXW_FILE_VERSION = "1.0"; - protected final static String TMAT_FILE_VERSION = "1.0"; - - @S4String(defaultValue = ".") - public static final String SAVE_LOCATION = "saveLocation"; - - @S4String(mandatory = false, defaultValue = "") - public final static String DATA_LOCATION = "dataLocation"; - private String dataDir; - - @S4String(mandatory = false, defaultValue = "") - public final static String DEF_FILE = "definitionFile"; - - public boolean useCDUnits; - - public void newProperties(PropertySheet ps) throws PropertyException { - logger = ps.getLogger(); - - location = ps.getString(SAVE_LOCATION); - dataDir = ps.getString(DATA_LOCATION); - - sparseForm = ps.getBoolean(PROP_SPARSE_FORM); - useCDUnits = ps.getBoolean(PROP_USE_CD_UNITS); - logMath = LogMath.getLogMath(); - - // extract the feature vector length - vectorLength = ps.getInt(PROP_VECTOR_LENGTH); - - Loader loader = (Loader) ps.getComponent(LOADER); - hmmManager = loader.getHMMManager(); - meansPool = loader.getMeansPool(); - variancePool = loader.getVariancePool(); - mixtureWeights = loader.getMixtureWeights(); - matrixPool = loader.getTransitionMatrixPool(); - senonePool = loader.getSenonePool(); - contextIndependentUnits = new LinkedHashMap (); - - // TODO: read checksum from props; - checksum = "no"; - doCheckSum = (checksum != null && checksum.equals("yes")); - swap = false; - } - - /** - * Return the checksum string. - * - * @return the checksum - */ - protected String getCheckSum() { - return checksum; - } - - /** - * Return whether to do the dochecksum. If true, checksum is performed. - * - * @return the dochecksum - */ - protected boolean getDoCheckSum() { - return doCheckSum; - } - - /** - * Return the location. - * - * @return the location - */ - protected String getLocation() { - return location; - } - - /** - * Saves the AcousticModel from a directory in the file system. - * - * @param modelName the name of the acoustic model; if null we just save from the default location - */ - public void save(String modelName, boolean b) throws IOException { - - logger.info("Saving acoustic model: " + modelName); - logger.info(" Path : " + location); - logger.info(" modellName: " + modelName); - logger.info(" dataDir : " + dataDir); - - // save the acoustic properties file (am.props), - // create a different URL depending on the data format - - if (binary) { - // First, overwrite the previous file - saveDensityFileBinary(meansPool, dataDir + "means", true); - // From now on, append to previous file - saveDensityFileBinary(variancePool, dataDir + "variances", true); - saveMixtureWeightsBinary(mixtureWeights, dataDir + "mixture_weights", true); - saveTransitionMatricesBinary(matrixPool, dataDir + "transition_matrices", true); - - } else { - saveDensityFileAscii(meansPool, dataDir + "means.ascii", true); - saveDensityFileAscii(variancePool, dataDir + "variances.ascii", true); - saveMixtureWeightsAscii(mixtureWeights, dataDir + "mixture_weights.ascii", true); - saveTransitionMatricesAscii(matrixPool, dataDir + "transition_matrices.ascii", true); - } - - // save the HMM model file - - saveHMMPool(useCDUnits, StreamFactory.getOutputStream(location, "mdef", true), location + File.separator + "mdef"); - } - - public Map getContextIndependentUnits() { - return contextIndependentUnits; - } - - - /** - * Saves the sphinx3 density file, a set of density arrays are created and placed in the given pool. - * - * @param pool the pool to be saved - * @param path the name of the data - * @param append is true, the file will be appended, useful if saving to a ZIP or JAR file - * @throws FileNotFoundException if a file cannot be found - * @throws IOException if an error occurs while saving the data - */ - private void saveDensityFileAscii(Pool pool, String path, boolean append) - throws FileNotFoundException, IOException { - logger.info("Saving density file to: "); - logger.info(path); - - OutputStream outputStream = StreamFactory.getOutputStream(location, path, append); - - if (outputStream == null) { - throw new IOException("Error trying to write file " + location + path); - } - PrintWriter pw = new PrintWriter(outputStream, true); - - pw.print("param "); - int numStates = pool.getFeature(NUM_SENONES, -1); - pw.print(numStates + " "); - int numStreams = pool.getFeature(NUM_STREAMS, -1); - pw.print(numStreams + " "); - int numGaussiansPerState = pool.getFeature(NUM_GAUSSIANS_PER_STATE, -1); - pw.println(numGaussiansPerState); - - for (int i = 0; i < numStates; i++) { - pw.println("mgau " + i); - pw.println("feat " + 0); - for (int j = 0; j < numGaussiansPerState; j++) { - - pw.print("density" + " \t" + j); - - int id = i * numGaussiansPerState + j; - float[] density = pool.get(id); - for (int k = 0; k < vectorLength; k++) { - pw.print(" " + density[k]); - // System.out.println(" " + i + " " + j + " " + k + - // " " + density[k]); - } - pw.println(); - } - } - outputStream.close(); - } - - /** - * Saves the sphinx3 density file, a set of density arrays are created and placed in the given pool. - * - * @param pool the pool to be saved - * @param path the name of the data - * @param append is true, the file will be appended, useful if saving to a ZIP or JAR file - * @throws FileNotFoundException if a file cannot be found - * @throws IOException if an error occurs while saving the data - */ - private void saveDensityFileBinary(Pool pool, String path, boolean append) - throws FileNotFoundException, IOException { - Properties props = new Properties(); - int checkSum = 0; - - logger.info("Saving density file to: "); - logger.info(path); - - props.setProperty("version", DENSITY_FILE_VERSION); - props.setProperty("chksum0", checksum); - - DataOutputStream dos = writeS3BinaryHeader(location, path, props, append); - - int numStates = pool.getFeature(NUM_SENONES, -1); - int numStreams = pool.getFeature(NUM_STREAMS, -1); - int numGaussiansPerState = pool.getFeature(NUM_GAUSSIANS_PER_STATE, -1); - - writeInt(dos, numStates); - writeInt(dos, numStreams); - writeInt(dos, numGaussiansPerState); - - int rawLength = 0; - int[] vectorLength = new int[numStreams]; - for (int i = 0; i < numStreams; i++) { - vectorLength[i] = this.vectorLength; - writeInt(dos, vectorLength[i]); - rawLength += numGaussiansPerState * numStates * vectorLength[i]; - } - - assert numStreams == 1; - assert rawLength == numGaussiansPerState * numStates * this.vectorLength; - writeInt(dos, rawLength); - - //System.out.println("Nstates " + numStates); - //System.out.println("Nstreams " + numStreams); - //System.out.println("NgaussiansPerState " + numGaussiansPerState); - //System.out.println("vectorLength " + vectorLength.length); - //System.out.println("rawLength " + rawLength); - - for (int i = 0; i < numStates; i++) { - for (int j = 0; j < numStreams; j++) { - for (int k = 0; k < numGaussiansPerState; k++) { - int id = i * numStreams * numGaussiansPerState + - j * numGaussiansPerState + k; - float[] density = pool.get(id); - // Do checksum here? - writeFloatArray(dos, density); - } - } - } - if (doCheckSum) { - assert doCheckSum = false : "Checksum not supported"; - } - // S3 requires some number here.... - writeInt(dos, checkSum); - // BUG: not checking the check sum yet. - dos.close(); - } - - /** - * Writes the S3 binary header to the given location+path. - * - * @param location the location of the file - * @param path the name of the file - * @param props the properties - * @param append is true, the file will be appended, useful if saving to a ZIP or JAR file - * @return the output stream positioned after the header - * @throws IOException on error - */ - protected DataOutputStream writeS3BinaryHeader(String location, String path, Properties props, boolean append) - throws IOException { - - OutputStream outputStream = StreamFactory.getOutputStream(location, path, append); - if (doCheckSum) { - assert false : "Checksum not supported"; - } - DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(outputStream)); - - writeWord(dos, "s3\n"); - - for (Enumeration e = props.keys(); e.hasMoreElements();) { - String name = (String) e.nextElement(); - String value = props.getProperty(name); - writeWord(dos, name + ' ' + value + '\n'); - } - writeWord(dos, "endhdr\n"); - - writeInt(dos, BYTE_ORDER_MAGIC); - - return dos; - } - - /** - * Writes the next word (without surrounding white spaces) to the given stream. - * - * @param dos the output stream - * @param word the next word - * @throws IOException on error - */ - void writeWord(DataOutputStream dos, String word) throws IOException { - dos.writeBytes(word); - } - - - /** - * Writes an integer to the output stream, byte-swapping as necessary - * - * @param dos the output stream - * @param val an integer value - * @throws IOException on error - */ - protected void writeInt(DataOutputStream dos, int val) throws IOException { - if (swap) { - dos.writeInt(Utilities.swapInteger(val)); - } else { - dos.writeInt(val); - } - } - - /** - * Writes a float to the output stream, byte-swapping as necessary - * - * @param dos the input stream - * @param val a float value - * @throws IOException on error - */ - protected void writeFloat(DataOutputStream dos, float val) - throws IOException { - if (swap) { - dos.writeFloat(Utilities.swapFloat(val)); - } else { - dos.writeFloat(val); - } - } - - - /** - * Writes the given number of floats from an array of floats to a stream. - * - * @param dos the stream to write the data to - * @param data the array of floats to write to the stream - * @throws IOException if an exception occurs - */ - protected void writeFloatArray(DataOutputStream dos, float[] data) - throws IOException { - for (float val : data) { - writeFloat(dos, val); - } - } - - /** - * Saves the sphinx3 density file, a set of density arrays are created and placed in the given pool. - * - * @param useCDUnits if true, uses context dependent units - * @param outputStream the open output stream to use - * @param path the path to a density file - * @throws FileNotFoundException if a file cannot be found - * @throws IOException if an error occurs while saving the data - */ - private void saveHMMPool(boolean useCDUnits, OutputStream outputStream, String path) - throws FileNotFoundException, IOException { - logger.info("Saving HMM file to: "); - logger.info(path); - - if (outputStream == null) { - throw new IOException("Error trying to write file " - + location + path); - } - PrintWriter pw = new PrintWriter(outputStream, true); - - /* - ExtendedStreamTokenizer est = new ExtendedStreamTokenizer - (outputStream, '#', false); - Pool pool = new Pool(path); - */ - - // First, count the HMMs - int numBase = 0; - int numTri = 0; - int numContextIndependentTiedState = 0; - int numStateMap = 0; - for (HMM hmm : hmmManager) { - numStateMap += hmm.getOrder() + 1; - if (((SenoneHMM)hmm).isContextDependent()) { - numTri++; - } else { - numBase++; - numContextIndependentTiedState += hmm.getOrder(); - } - } - pw.println(MODEL_VERSION); - pw.println(numBase + " n_base"); - pw.println(numTri + " n_tri"); - pw.println(numStateMap + " n_state_map"); - int numTiedState = mixtureWeights.getStatesNum(); - pw.println(numTiedState + " n_tied_state"); - pw.println(numContextIndependentTiedState + " n_tied_ci_state"); - int numTiedTransitionMatrices = numBase; - assert numTiedTransitionMatrices == matrixPool.size(); - pw.println(numTiedTransitionMatrices + " n_tied_tmat"); - - pw.println("#"); - pw.println("# Columns definitions"); - pw.println("#base lft rt p attrib tmat ... state id's ..."); - - // Save the base phones - for (HMM hmm0 : hmmManager) { - SenoneHMM hmm = (SenoneHMM)hmm0; - if (hmm.isContextDependent()) { - continue; - } - - Unit unit = hmm.getUnit(); - - String name = unit.getName(); - pw.print(name + '\t'); - String left = "-"; - pw.print(left + " "); - String right = "-"; - pw.print(right + ' '); - String position = hmm.getPosition().toString(); - pw.print(position + '\t'); - String attribute = unit.isFiller() ? FILLER : "n/a"; - pw.print(attribute + '\t'); - int tmat = matrixPool.indexOf(hmm.getTransitionMatrix()); - assert tmat < numTiedTransitionMatrices; - pw.print(tmat + "\t"); - - SenoneSequence ss = hmm.getSenoneSequence(); - Senone[] senones = ss.getSenones(); - for (Senone senone : senones) { - int index = senonePool.indexOf(senone); - assert index >= 0 && index < numContextIndependentTiedState; - pw.print(index + "\t"); - } - pw.println("N"); - - if (logger.isLoggable(Level.FINE)) { - logger.fine("Saved " + unit); - } - - } - - // Save the context dependent phones. - - for (HMM hmm0 : hmmManager) { - SenoneHMM hmm = (SenoneHMM)hmm0; - if (!hmm.isContextDependent()) { - continue; - } - - Unit unit = hmm.getUnit(); - LeftRightContext context = (LeftRightContext)unit.getContext(); - Unit[] leftContext = context.getLeftContext(); - Unit[] rightContext = context.getRightContext(); - assert leftContext.length == 1 && rightContext.length == 1; - - String name = unit.getName(); - pw.print(name + '\t'); - String left = leftContext[0].getName(); - pw.print(left + " "); - String right = rightContext[0].getName(); - pw.print(right + ' '); - String position = hmm.getPosition().toString(); - pw.print(position + '\t'); - String attribute = unit.isFiller() ? FILLER : "n/a"; - assert attribute.equals("n/a"); - pw.print(attribute + '\t'); - int tmat = matrixPool.indexOf(hmm.getTransitionMatrix()); - assert tmat < numTiedTransitionMatrices; - pw.print(tmat + "\t"); - - SenoneSequence ss = hmm.getSenoneSequence(); - Senone[] senones = ss.getSenones(); - for (Senone senone : senones) { - int index = senonePool.indexOf(senone); - assert index >= 0 && index < numTiedState; - pw.print(index + "\t"); - } - pw.println("N"); - - if (logger.isLoggable(Level.FINE)) { - logger.fine("Saved " + unit); - } - - } - - outputStream.close(); - } - - - /** - * Saves the mixture weights - * - * @param mixtureWeights guassian weights holder - * @param path the path to the mixture weight file - * @param append is true, the file will be appended, useful if saving to a ZIP or JAR file - * @throws FileNotFoundException if a file cannot be found - * @throws IOException if an error occurs while saving the data - */ - private void saveMixtureWeightsAscii(GaussianWeights mixtureWeights, String path, boolean append) - throws FileNotFoundException, IOException { - logger.info("Saving mixture weights to: "); - logger.info(path); - - OutputStream outputStream = StreamFactory.getOutputStream(location, path, append); - if (outputStream == null) { - throw new IOException("Error trying to write file " + location + path); - } - PrintWriter pw = new PrintWriter(outputStream, true); - - pw.print("mixw "); - int numStates = mixtureWeights.getStatesNum(); - pw.print(numStates + " "); - int numStreams = mixtureWeights.getStreamsNum(); - pw.print(numStreams + " "); - int numGaussiansPerState = mixtureWeights.getGauPerState(); - pw.println(numGaussiansPerState); - - for (int i = 0; i < numStates; i++) { - for (int j = 0; j < numStreams; j++) { - pw.print("mixw [" + i + " " + j + "] "); - float[] mixtureWeight = new float[numGaussiansPerState]; - float[] logMixtureWeight = new float[numGaussiansPerState]; - for (int k = 0; k < numGaussiansPerState; k++) - logMixtureWeight[k] = mixtureWeights.get(i, j, k); - logMath.logToLinear(logMixtureWeight, mixtureWeight); - float sum = 0.0f; - for (int k = 0; k < numGaussiansPerState; k++) - sum += mixtureWeight[k]; - pw.println(sum); - pw.print("\n\t"); - for (int k = 0; k < numGaussiansPerState; k++) - pw.print(" " + mixtureWeight[k]); - pw.println(); - } - } - outputStream.close(); - } - - /** - * Saves the mixture weights (Binary) - * - * @param mixtureWeights gaussian weights holder - * @param path the path to the mixture weight file - * @param append is true, the file will be appended, useful if saving to a ZIP or JAR file - * @throws FileNotFoundException if a file cannot be found - * @throws IOException if an error occurs while saving the data - */ - private void saveMixtureWeightsBinary(GaussianWeights mixtureWeights, String path, boolean append) - throws FileNotFoundException, IOException { - logger.info("Saving mixture weights to: "); - logger.info(path); - - Properties props = new Properties(); - - props.setProperty("version", MIXW_FILE_VERSION); - if (doCheckSum) { - props.setProperty("chksum0", checksum); - } - - DataOutputStream dos = writeS3BinaryHeader(location, path, props, append); - - int numStates = mixtureWeights.getStatesNum(); - int numStreams = mixtureWeights.getStreamsNum(); - int numGaussiansPerState = mixtureWeights.getGauPerState(); - - writeInt(dos, numStates); - writeInt(dos, numStreams); - writeInt(dos, numGaussiansPerState); - - assert numStreams == 1; - - int rawLength = numGaussiansPerState * numStates * numStreams; - writeInt(dos, rawLength); - - for (int i = 0; i < numStates; i++) { - for (int j = 0; j < numStreams; j++) { - float[] mixtureWeight = new float[numGaussiansPerState]; - float[] logMixtureWeight = new float[numGaussiansPerState]; - for (int k = 0; k < numGaussiansPerState; k++) - logMixtureWeight[k] = mixtureWeights.get(i, j, k); - logMath.logToLinear(logMixtureWeight, mixtureWeight); - writeFloatArray(dos, mixtureWeight); - } - } - if (doCheckSum) { - assert doCheckSum = false : "Checksum not supported"; - // writeInt(dos, checkSum); - } - - dos.close(); - } - - /** - * Saves the transition matrices - * - * @param pool the transition matrices pool - * @param path the path to the transitions matrices - * @param append is true, the file will be appended, useful if saving to a ZIP or JAR file - * @throws FileNotFoundException if a file cannot be found - * @throws IOException if an error occurs while saving the data - */ - protected void saveTransitionMatricesAscii(Pool pool, String path, boolean append) - throws FileNotFoundException, IOException { - OutputStream outputStream = StreamFactory.getOutputStream(location, path, append); - if (outputStream == null) { - throw new IOException("Error trying to write file " + location + path); - } - PrintWriter pw = new PrintWriter(outputStream, true); - - logger.info("Saving transition matrices to: "); - logger.info(path); - int numMatrices = pool.size(); - - assert numMatrices > 0; - float[][] tmat = pool.get(0); - int numStates = tmat[0].length; - - pw.println("tmat " + numMatrices + ' ' + numStates); - - for (int i = 0; i < numMatrices; i++) { - pw.println("tmat [" + i + ']'); - - tmat = pool.get(i); - for (int j = 0; j < numStates; j++) { - for (int k = 0; k < numStates; k++) { - - // the last row is just zeros, so we just do - // the first (numStates - 1) rows - - if (j < numStates - 1) { - if (sparseForm) { - if (k < j) { - pw.print("\t"); - } - if (k == j || k == j + 1) { - pw.print((float) - logMath.logToLinear(tmat[j][k])); - } - } else { - pw.print((float) logMath.logToLinear(tmat[j][k])); - } - if (numStates - 1 == k) { - pw.println(); - } else { - pw.print(" "); - } - - } - - if (logger.isLoggable(Level.FINE)) { - logger.fine("tmat j " + j + " k " - + k + " tm " + tmat[j][k]); - } - } - } - } - outputStream.close(); - } - - /** - * Saves the transition matrices (Binary) - * - * @param pool the transition matrices pool - * @param path the path to the transitions matrices - * @param append is true, the file will be appended, useful if saving to a ZIP or JAR file - * @throws IOException if an error occurs while saving the data - */ - protected void saveTransitionMatricesBinary(Pool pool, String path, boolean append) - throws IOException { - - logger.info("Saving transition matrices to: "); - logger.info(path); - Properties props = new Properties(); - - props.setProperty("version", TMAT_FILE_VERSION); - if (doCheckSum) { - props.setProperty("chksum0", checksum); - } - - DataOutputStream dos = writeS3BinaryHeader(location, path, props, append); - - int numMatrices = pool.size(); - assert numMatrices > 0; - writeInt(dos, numMatrices); - - float[][] tmat = pool.get(0); - int numStates = tmat[0].length; - int numRows = numStates - 1; - - writeInt(dos, numRows); - writeInt(dos, numStates); - int numValues = numStates * numRows * numMatrices; - writeInt(dos, numValues); - - for (int i = 0; i < numMatrices; i++) { - tmat = pool.get(i); - - // Last row should be all zeroes - float[] logTmatRow = tmat[numStates - 1]; - float[] tmatRow = new float[logTmatRow.length]; - - for (int j = 0; j < numStates; j++) { - assert tmatRow[j] == 0.0f; - } - - for (int j = 0; j < numRows; j++) { - logTmatRow = tmat[j]; - tmatRow = new float[logTmatRow.length]; - logMath.logToLinear(logTmatRow, tmatRow); - writeFloatArray(dos, tmatRow); - } - } - if (doCheckSum) { - assert doCheckSum = false : "Checksum not supported"; - // writeInt(dos, checkSum); - } - dos.close(); - } - - public Pool getMeansPool() { - return meansPool; - } - - public Pool getMeansTransformationMatrixPool() { - return meanTransformationMatrixPool; - } - - public Pool getMeansTransformationVectorPool() { - return meanTransformationVectorPool; - } - - public Pool getVariancePool() { - return variancePool; - } - - public Pool getVarianceTransformationMatrixPool() { - return varianceTransformationMatrixPool; - } - - public Pool getVarianceTransformationVectorPool() { - return varianceTransformationVectorPool; - } - - public Pool getSenonePool() { - return senonePool; - } - - public int getLeftContextSize() { - return CONTEXT_SIZE; - } - - public int getRightContextSize() { - return CONTEXT_SIZE; - } - - public HMMManager getHMMManager() { - return hmmManager; - } - - public void logInfo() { - logger.info("Sphinx3Saver"); - meansPool.logInfo(logger); - variancePool.logInfo(logger); - matrixPool.logInfo(logger); - senonePool.logInfo(logger); - meanTransformationMatrixPool.logInfo(logger); - meanTransformationVectorPool.logInfo(logger); - varianceTransformationMatrixPool.logInfo(logger); - varianceTransformationVectorPool.logInfo(logger); - mixtureWeights.logInfo(logger); - senonePool.logInfo(logger); - logger.info("Context Independent Unit Entries: " + contextIndependentUnits.size()); - hmmManager.logInfo(logger); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/Sphinx4Loader.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/Sphinx4Loader.java deleted file mode 100755 index 3f1660ab..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/Sphinx4Loader.java +++ /dev/null @@ -1,280 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate.trainer; - -import edu.cmu.sphinx.linguist.acoustic.*; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.*; -import edu.cmu.sphinx.util.ExtendedStreamTokenizer; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.StreamFactory; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Integer; - -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.util.Arrays; -import java.util.Map; -import java.util.logging.Level; - -/** - * an acoustic model loader that loads sphinx3 ascii data - *

    - * Mixture weights and transition probabilities are maintained in logMath log base, - */ -class Sphinx4Loader extends Sphinx3Loader { - - protected final static String TMAT_FILE_VERSION = "4.0"; - - @S4Integer(defaultValue = 10) - public final static String MAX_MODEL_SIZE = "maxStatePerModel"; - private int maxModelSize; - - - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - - maxModelSize = ps.getInt(MAX_MODEL_SIZE); - } - - /** - * Loads the sphinx4 density file, a set of density arrays are created and placed in the given pool. - * - * {@inheritDoc} - */ - @Override - protected void loadHMMPool(boolean useCDUnits, InputStream inputStream, String path) - throws IOException { - ExtendedStreamTokenizer est = new ExtendedStreamTokenizer(inputStream, '#', false); - - logger.info("Loading HMM file from: "); - logger.info(path); - - est.expectString(MODEL_VERSION); - - int numBase = est.getInt("numBase"); - est.expectString("n_base"); - - int numTri = est.getInt("numTri"); - est.expectString("n_tri"); - - est.getInt("numStateMap"); - est.expectString("n_state_map"); - - int numTiedState = est.getInt("numTiedState"); - est.expectString("n_tied_state"); - - int numContextIndependentTiedState = est.getInt("numContextIndependentTiedState"); - est.expectString("n_tied_ci_state"); - - int numTiedTransitionMatrices = est.getInt("numTiedTransitionMatrices"); - est.expectString("n_tied_tmat"); - - int[] maxStid = new int[maxModelSize]; - - HMMManager hmmManager = super.getHmmManager(); - Pool matrixPool = super.getMatrixPool(); - GaussianWeights mixtureWeights = super.getMixtureWeights(); - Map contextIndependentUnits = super.getContextIndependentUnits(); - - assert numTiedState == mixtureWeights.getStatesNum(); - assert numTiedTransitionMatrices == matrixPool.size(); - - // Load the base phones - for (int i = 0; i < numBase; i++) { - String left = est.getString(); - String right = est.getString(); - String position = est.getString(); - int tmat = est.getInt("tmat"); - - // Read all state ID in the line... - for (int j = 0; ; j++) { - String str = est.getString(); - - // ... until we reach a "N" - - if (!str.equals("N")) { - int id = Integer.parseInt(str); - try { - maxStid[j] = id; - } catch (ArrayIndexOutOfBoundsException aie) { - throw new Error("Use a larger value for " + - "maxStatePerModel"); - } - assert maxStid[j] >= 0 && - maxStid[j] < numContextIndependentTiedState; - } else { - break; - } - } - - assert left.equals("-"); - assert right.equals("-"); - assert position.equals("-"); - assert tmat < numTiedTransitionMatrices; - -// int[] stid = Arrays.copyOf(maxStid, numStates); -// Unit unit = Unit.getUnit(name, attribute.equals(FILLER)); -// contextIndependentUnits.put(unit.getName(), unit); -// -// if (logger.isLoggable(Level.FINE)) { -// logger.fine("Loaded " + unit); -// } -// The first filler -// if (unit.isFiller() && unit.getName().equals(SILENCE_CIPHONE)) { -// unit = Unit.SILENCE; -// } -// float[][] transitionMatrix = matrixPool.get(tmat); -// SenoneSequence ss = getSenoneSequence(stid); -// HMM hmm = new SenoneHMM(unit, ss, transitionMatrix, HMMPosition.lookup(position)); -// hmmManager.put(hmm); - } - - // Load the context dependent phones. If the useCDUnits - // property is false, the CD phones will not be created, but - // the values still need to be read in from the file. - - String lastUnitName = ""; - Unit lastUnit = null; - int[] lastStid = null; - SenoneSequence lastSenoneSequence = null; - - for (int i = 0; i < numTri; i++) { - String name = est.getString(); - String left = est.getString(); - String right = est.getString(); - String position = est.getString(); - String attribute = est.getString(); - int tmat = est.getInt("tmat"); - - int numStates = 0; - - // Read all state ID in the line... - for (int j = 0; ; j++) { - String str = est.getString(); - - // ... until we reach a "N" - - if (!str.equals("N")) { - int id = Integer.parseInt(str); - maxStid[j] = id; - assert maxStid[j] >= numContextIndependentTiedState && - maxStid[j] < numTiedState; - } else { - numStates = j; - break; - } - } - int[] stid = Arrays.copyOf(maxStid, numStates); - - assert !left.equals("-"); - assert !right.equals("-"); - assert !position.equals("-"); - assert attribute.equals("n/a"); - assert tmat < numTiedTransitionMatrices; - - if (useCDUnits) { - Unit unit = null; - String unitName = (name + ' ' + left + ' ' + right); - - if (unitName.equals(lastUnitName)) { - unit = lastUnit; - } else { - Unit[] leftContext = new Unit[1]; - leftContext[0] = contextIndependentUnits.get(left); - - Unit[] rightContext = new Unit[1]; - rightContext[0] = contextIndependentUnits.get(right); - - //Context context = LeftRightContext.get(leftContext, rightContext); - //unit = Unit.getUnit(name, false, context); - } - lastUnitName = unitName; - lastUnit = unit; - - if (logger.isLoggable(Level.FINE)) { - logger.fine("Loaded " + unit); - } - - float[][] transitionMatrix = matrixPool.get(tmat); - - SenoneSequence ss = lastSenoneSequence; - if (ss == null || !sameSenoneSequence(stid, lastStid)) { - ss = getSenoneSequence(stid); - } - lastSenoneSequence = ss; - lastStid = stid; - - HMM hmm = new SenoneHMM(unit, ss, transitionMatrix, HMMPosition.lookup(position)); - hmmManager.put(hmm); - } - } - - est.close(); - } - - @Override - protected Pool loadTransitionMatrices(String path) - throws FileNotFoundException, IOException { - - String location = ""; - InputStream inputStream = StreamFactory.getInputStream(location, path); - - LogMath logMath = LogMath.getLogMath(); - logger.info("Loading transition matrices from: "); - logger.info(path); - - Pool pool = new Pool(path); - ExtendedStreamTokenizer est = new ExtendedStreamTokenizer(inputStream, '#', false); - - est.expectString("tmat"); - int numMatrices = est.getInt("numMatrices"); - est.expectString("X"); - // numStates = est.getInt("numStates"); - - for (int i = 0; i < numMatrices; i++) { - est.expectString("tmat"); - est.expectString("[" + i + ']'); - est.expectString("nstate"); - // Number of emitting states + 1, final non-emitting state - int numStates = est.getInt("numStates") + 1; - float[][] tmat = new float[numStates][numStates]; - - for (int j = 0; j < numStates; j++) { - for (int k = 0; k < numStates; k++) { - - // the last row is just zeros, so we just do - // the first (numStates - 1) rows - - if (j < numStates - 1) { - if (k == j || k == j + 1) { - tmat[j][k] = est.getFloat("tmat value"); - } - } - - tmat[j][k] = logMath.linearToLog(tmat[j][k]); - - if (logger.isLoggable(Level.FINE)) { - logger.fine("tmat j " + j + " k " - + k + " tm " + tmat[j][k]); - } - } - } - pool.put(i, tmat); - } - est.close(); - return pool; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/Sphinx4Saver.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/Sphinx4Saver.java deleted file mode 100755 index f6add0a3..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/Sphinx4Saver.java +++ /dev/null @@ -1,157 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate.trainer; - -import edu.cmu.sphinx.linguist.acoustic.tiedstate.Pool; -import edu.cmu.sphinx.util.StreamFactory; - -import java.io.*; -import java.util.Properties; -import java.util.logging.Level; - -/** - * An acoustic model saver that saves sphinx3 ascii data. - *

    - * Mixture weights and transition probabilities are saved in linear scale. - */ -class Sphinx4Saver extends Sphinx3Saver { - - protected final static String TMAT_FILE_VERSION = "4.0"; - - @Override - protected void saveTransitionMatricesAscii(Pool pool, String path, boolean append) - throws IOException { - - String location = super.getLocation(); - OutputStream outputStream = StreamFactory.getOutputStream(location, path, append); - if (outputStream == null) { - throw new IOException("Error trying to write file " + location + path); - } - PrintWriter pw = new PrintWriter(outputStream, true); - - logger.info("Saving transition matrices to: "); - logger.info(path); - int numMatrices = pool.size(); - - assert numMatrices > 0; - float[][] tmat = pool.get(0); - - pw.println("tmat " + numMatrices + " X"); - - for (int i = 0; i < numMatrices; i++) { - tmat = pool.get(i); - int numStates = tmat[0].length; - - pw.println("tmat [" + i + ']'); - pw.println("nstate " + (numStates - 1)); - for (int j = 0; j < numStates; j++) { - for (int k = 0; k < numStates; k++) { - - // the last row is just zeros, so we just do - // the first (numStates - 1) rows - - if (j < numStates - 1) { - if (sparseForm) { - if (k < j) { - pw.print("\t"); - } - if (k == j || k == j + 1) { - pw.print((float)logMath.logToLinear(tmat[j][k])); - } - } else { - pw.print((float)logMath.logToLinear(tmat[j][k])); - } - if (numStates - 1 == k) { - pw.println(); - } else { - pw.print(" "); - } - - } - - if (logger.isLoggable(Level.FINE)) { - logger.fine("tmat j " + j + " k " + k + " tm " + tmat[j][k]); - } - } - } - } - outputStream.close(); - } - - @Override - protected void saveTransitionMatricesBinary(Pool pool, String path, boolean append) - throws IOException { - - logger.info("Saving transition matrices to: "); - logger.info(path); - Properties props = new Properties(); - - String strCheckSum = super.getCheckSum(); - boolean doCheckSum = super.getDoCheckSum(); - props.setProperty("version", TMAT_FILE_VERSION); - if (doCheckSum) { - props.setProperty("chksum0", strCheckSum); - } - - String location = super.getLocation(); - - DataOutputStream dos = writeS3BinaryHeader(location, path, props, append); - - int numMatrices = pool.size(); - assert numMatrices > 0; - writeInt(dos, numMatrices); - - // Now we count number of states. Since each model can have an - // arbitrary number of states, we have to visit all tmats, and - // count the total number of states. - int numStates = 0; - int numValues = 0; - for (int i = 0; i < numMatrices; i++) { - float[][] tmat = pool.get(i); - int nStates = tmat[0].length; - numStates += nStates; - // Number of elements in each transition matrix is the - // number of row, i.e. number of emitting states, times - // number of columns, i.e., number of emitting states plus - // final non-emitting state. - numValues += nStates * (nStates - 1); - } - writeInt(dos, numValues); - - for (int i = 0; i < numMatrices; i++) { - float[][] tmat = pool.get(i); - numStates = tmat[0].length; - writeInt(dos, numStates); - - // Last row should be all zeroes - float[] logTmatRow = tmat[numStates - 1]; - float[] tmatRow = new float[logTmatRow.length]; - - for (int j = 0; j < numStates; j++) { - assert tmatRow[j] == 0.0f; - } - - for (int j = 0; j < numStates - 1; j++) { - logTmatRow = tmat[j]; - tmatRow = new float[logTmatRow.length]; - logMath.logToLinear(logTmatRow, tmatRow); - writeFloatArray(dos, tmatRow); - } - } - if (doCheckSum) { - assert doCheckSum = false : "Checksum not supported"; - // writeInt(dos, checkSum); - } - dos.close(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/TrainerAcousticModel.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/TrainerAcousticModel.java deleted file mode 100755 index 3a9a656e..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/TrainerAcousticModel.java +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate.trainer; - -import edu.cmu.sphinx.linguist.acoustic.tiedstate.Loader; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.Saver; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.TiedStateAcousticModel; -import edu.cmu.sphinx.linguist.acoustic.UnitManager; -import edu.cmu.sphinx.util.props.*; - -import java.io.FileNotFoundException; -import java.io.IOException; - -/** Represents the generic interface to the Acoustic Model for sphinx4 */ -public class TrainerAcousticModel extends TiedStateAcousticModel { - - @S4Component(type = Saver.class) - public static final String SAVER = "saver"; - private Saver saver; - - @S4Double(defaultValue = 0.0001f) - public final static String PROP_VARIANCE_FLOOR = "varianceFloor"; - - /** Mixture component score floor. */ - @S4Double(defaultValue = 0.0) - public final static String PROP_MC_FLOOR = "MixtureComponentScoreFloor"; - - /** Mixture weight floor. */ - @S4Double(defaultValue = 1e-7f) - public final static String PROP_MW_FLOOR = "mixtureWeightFloor"; - - /** - * The save format for the acoustic model data. Current supported formats - * are: - */ - @S4String(defaultValue = "sphinx3.binary") - public final static String PROP_FORMAT_SAVE = "saveFormat"; - public String saveFormat; - - /** Flag indicating all models should be operated on. */ - public final static int ALL_MODELS = -1; - - /** The pool manager */ - private HMMPoolManager hmmPoolManager; - - public TrainerAcousticModel(Loader loader, UnitManager unitManager, - boolean useComposites, Saver saver, String saveFormat) throws IOException { - super(loader, unitManager, useComposites); - - this.saver = saver; - this.hmmPoolManager = new HMMPoolManager(loader); - this.saveFormat = saveFormat; - - logInfo(); - } - - public TrainerAcousticModel() { - } - - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - - saver = (Saver) ps.getComponent(SAVER); - try { - hmmPoolManager = new HMMPoolManager(loader); - } catch (IOException e) { - throw new PropertyException(e); - } - saveFormat = ps.getString(PROP_FORMAT_SAVE); - - logInfo(); - } - - /** - * Saves the acoustic model with a given name and format - * - * @param name - * the name of the acoustic model - * @throws IOException - * if the model could not be loaded - * @throws FileNotFoundException - * if the model does not exist - */ - public void save(String name) throws IOException { - saver.save(name, true); - logger.info("saved models with " + saver); - } - - /** - * Loads the acoustic models. This has to be explicitly requested in this - * class. - * - * @throws IOException - * if the model could not be loaded - * @throws FileNotFoundException - * if the model does not exist - */ - public void load() throws IOException, FileNotFoundException { - // super.load(); - logInfo(); - hmmPoolManager = new HMMPoolManager(loader); - } - - /** Resets the buffers. */ - public void resetBuffers() { - // Resets the buffers and associated variables. - hmmPoolManager.resetBuffers(); - } - - /** - * Accumulate the current TrainerScore into the buffers. - * - * @param index - * the current index into the TrainerScore vector - * @param trainerScore - * the TrainerScore in the current frame - * @param nextTrainerScore - * the TrainerScore in the next frame - */ - public void accumulate(int index, TrainerScore[] trainerScore, - TrainerScore[] nextTrainerScore) { - hmmPoolManager.accumulate(index, trainerScore, nextTrainerScore); - } - - /** - * Accumulate the current TrainerScore into the buffers. - * - * @param index - * the current index into the TrainerScore vector - * @param trainerScore - * the TrainerScore - */ - public void accumulate(int index, TrainerScore[] trainerScore) { - hmmPoolManager.accumulate(index, trainerScore); - } - - /** - * Update the log likelihood. This should be called at the end of each - * utterance. - */ - public void updateLogLikelihood() { - hmmPoolManager.updateLogLikelihood(); - } - - /** - * Normalize the buffers and update the models. - * - * @return the log likelihood for the whole training set - */ - public float normalize() { - float logLikelihood = hmmPoolManager.normalize(); - hmmPoolManager.update(); - return logLikelihood; - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/TrainerScore.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/TrainerScore.java deleted file mode 100755 index 67de09aa..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/TrainerScore.java +++ /dev/null @@ -1,334 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate.trainer; - -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.linguist.acoustic.HMMState; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.Senone; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.SenoneHMM; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.SenoneSequence; - -/** Used to transfer data from the trainer to the acoustic model */ -public class TrainerScore { - - private Data feature; - private float logOutputProbability; - private float logScalingFactor; - private int senoneID; - private HMMState hmmState; - private Senone senone; - private float logAlpha; - private float logBeta; - private float logGamma; - private float[] logComponentGamma; - private float[] logComponentProb; - static private float logLikelihood; - - - /** - * Creates a new TrainerScore - * - * @param feature the current feature - * @param probability the score for the current frame - * @param senone the id for the current senone - */ - public TrainerScore(Data feature, float probability, int senone) { - this.feature = feature; - this.logOutputProbability = probability; - this.senoneID = senone; - logScalingFactor = 0.0f; - logAlpha = 0.0f; - logBeta = 0.0f; - logGamma = 0.0f; - logComponentProb = new float[1]; - logComponentProb[0] = 0.0f; - logComponentGamma = new float[1]; - logComponentGamma[0] = 0.0f; - } - - - /** - * Creates a new buffer - * - * @param feature the current feature - * @param probability the score for the current frame - * @param state the HMMState for this score object - * @param logAlpha the forward probability - * @param logBeta the backward probability - * @param logComponentProb the mixture component a posteriori probabilities - */ - public TrainerScore(Data feature, - float probability, - HMMState state, - float logAlpha, - float logBeta, - float[] logComponentProb) { - - this.feature = feature; - this.hmmState = state; - logScalingFactor = 0.0f; - - // For dummy state, the state is a null pointer - if ((state != null) && (state.isEmitting())) { - // get the index and the HMM for this HMMState - int stateIndex = state.getState(); - SenoneHMM hmm = (SenoneHMM) state.getHMM(); - // Get the senone sequence associated with this HMM - SenoneSequence ss = hmm.getSenoneSequence(); - // Get the senone associated with this HMMState, located - // in the stateIndex-th position in the senone sequence - senone = ss.getSenones()[stateIndex]; - // After this, we need to go to the senone pool to find - // out the senone id... Or maybe we can operate directly - // on the senone - } - // Now, the probabilities - this.logOutputProbability = probability; - this.logAlpha = logAlpha; - this.logBeta = logBeta; - // gamma = alpha * beta; - this.logGamma = logAlpha + logBeta; - // Compute the gammas for each component in the mixture - // this.logComponentProb = logComponentProb; - if (logComponentProb != null) { - this.logComponentProb = new float[logComponentProb.length]; - this.logComponentGamma = new float[logComponentProb.length]; - for (int i = 0; i < logComponentProb.length; i++) { - this.logComponentProb[i] = logComponentProb[i]; - this.logComponentGamma[i] = - logComponentProb[i] + this.logGamma; - } - } else { - this.logComponentProb = null; - this.logComponentGamma = null; - } - } - - - /** - * Creates a new buffer - * - * @param feature the current feature - * @param probability the score for the current frame - * @param state the HMMState for this score object - * @param logAlpha the forward probability - * @param logComponentProb the mixture component a posteriori probabilities - */ - public TrainerScore(Data feature, - float probability, - HMMState state, - float logAlpha, - float[] logComponentProb) { - this(feature, probability, state, logAlpha, 0.0f, logComponentProb); - } - - - /** - * Creates a new buffer - * - * @param feature the current feature - * @param probability the score for the current frame - * @param state the HMMState for this score object - * @param logComponentProb the mixture component a posteriori probabilities - */ - public TrainerScore(Data feature, - float probability, - HMMState state, - float[] logComponentProb) { - this(feature, probability, state, 0.0f, 0.0f, logComponentProb); - } - - - /** - * Creates a new buffer - * - * @param feature the current feature - * @param probability the score for the current frame - * @param state the HMMState for this score object - */ - public TrainerScore(Data feature, - float probability, - HMMState state) { - this(feature, probability, state, 0.0f, 0.0f, null); - } - - - /** - * Retrieves the Data. - * - * @return the Data - */ - public Data getData() { - return feature; - } - - - /** - * Retrieves the probability. - * - * @return the probability - */ - public float getScore() { - return logOutputProbability; - } - - - /** - * Retrieves the forward probability. - * - * @return the forward log probability - */ - public float getAlpha() { - return logAlpha; - } - - - /** - * Retrieves the backward probability. - * - * @return the backward log probability - */ - public float getBeta() { - return logBeta; - } - - - /** - * Retrieves the utterance's log likelihood - * - * @return the log likelihood - */ - static public float getLogLikelihood() { - return logLikelihood; - } - - - /** - * Retrieves the a posteriori probability. - * - * @return the a posteriori log probability - */ - public float getGamma() { - return logGamma; - } - - - /** - * Retrieves the mixture component a posteriori probability. - * - * @return the a posteriori log probabilities - */ - public float[] getComponentGamma() { - return logComponentGamma; - } - - - /** - * Retrieves the scaling factor. - * - * @return the scaling factor - */ - public float getScalingFactor() { - return logScalingFactor; - } - - - /** - * Sets the overall likelihood. - * - * @param likelihood the log likelihood of the whole utterance - */ - static public void setLogLikelihood(float likelihood) { - logLikelihood = likelihood; - } - - - /** - * Sets the forward probability. - * - * @param logAlpha the forward log probability - */ - public void setAlpha(float logAlpha) { - this.logAlpha = logAlpha; - } - - - /** - * Sets the backward probability. - * - * @param logBeta the backward log probability - */ - public void setBeta(float logBeta) { - this.logBeta = logBeta; - } - - - /** - * Computes the a posteriori probability. This is the product of the current alpha and beta, or the summation of the - * current logAlpha and logBeta. The current beta is updated in the object, and the current alpha and beta are - * used. - */ - public void setGamma() { - logGamma = logAlpha + logBeta + logScalingFactor; - // Compute the gammas for each component in the mixture - if (logComponentGamma != null) { - for (int i = 0; i < logComponentGamma.length; i++) { - logComponentGamma[i] = logComponentProb[i] + logGamma; - if (logComponentGamma[i] < -Float.MAX_VALUE) { - logComponentGamma[i] = -Float.MAX_VALUE; - } - } - } - } - - - /** - * Sets the scaling factor for this frame.. - * - * @param logScalingFactor the log scaling factor - */ - public void setScalingFactor(float logScalingFactor) { - this.logScalingFactor = logScalingFactor; - } - - - /** - * Retrieves the senone ID. - * - * @return the senone ID - */ - public int getSenoneID() { - return senoneID; - } - - - /** - * Retrieves the senone. - * - * @return the senone - */ - public Senone getSenone() { - return senone; - } - - - /** - * Retrieves the HMM state. - * - * @return the HMM state - */ - public HMMState getState() { - return hmmState; - } -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/trivial/TrivialAcousticModel.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/trivial/TrivialAcousticModel.java deleted file mode 100755 index 3cbfcf47..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/acoustic/trivial/TrivialAcousticModel.java +++ /dev/null @@ -1,394 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.acoustic.trivial; - -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.frontend.FloatData; -import edu.cmu.sphinx.linguist.acoustic.*; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.MixtureComponent; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Integer; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Properties; - -/** Represents the generic interface to the Acoustic Model for sphinx4 */ -public class TrivialAcousticModel implements AcousticModel { - - /** Defines the left context size */ - @S4Integer(defaultValue = 1) - public final static String LEFT_CONTEXT_SIZE ="leftContextSize"; - - @S4Integer(defaultValue = 1) - public final static String RIGHT_CONTEXT_SIZE = "leftContextSize"; - - private String name; - private final Map hmmMap = new HashMap(); - private int leftContextSize; - private int rightContextSize; - - public TrivialAcousticModel(int leftContextSize, int rightContextSize) { - init(leftContextSize,rightContextSize); - } - - public TrivialAcousticModel() { - - } - - public void newProperties(PropertySheet ps) throws PropertyException { - // get acoustic model configuration data from the sphinx - // properties - - init(ps.getInt(LEFT_CONTEXT_SIZE),ps.getInt(RIGHT_CONTEXT_SIZE)); - - } - - private void init(int leftContextSize, int rightContextSize) { - this.leftContextSize = leftContextSize; - this.rightContextSize = rightContextSize; - - // create HMMs for all of the units - - String[] unitNames = { - "AX_one", "AY_five", "AY_nine", "EH_seven", "EY_eight", "E_seven", - "F_five", "F_four", "II_three", "II_zero", "I_six", "K_six", - "N_nine", "N_nine_2", "N_one", "N_seven", "OO_two", "OW_four", - "OW_oh", "OW_zero", "R_four", "R_three", "R_zero", "S_seven", - "S_six", "S_six_2", "TH_three", "T_eight", "T_two", "V_five", - "V_seven", "W_one", "Z_zero", "AX_one", "SIL" - }; - - for (String unitName : unitNames) { - createTrivialHMM(unitName); - } - } - - - /** - * Returns the name of this AcousticModel, or null if it has no name. - * - * @return the name of this AcousticModel, or null if it has no name - */ - public String getName() { - return name; - } - - - /** - * Returns the properties of this acoustic model. - * - * @return the properties of this acoustic model - */ - public Properties getProperties() { - return new Properties(); - } - - - /** - * Given a unit, returns the HMM that best matches the given unit. If exactMatch is false and an exact match is not - * found, then different word positions are used. If any of the contexts are non-silence filler units. a silence - * filler unit is tried instead. - * - * @param unit the unit of interest - * @param position the position of the unit of interest - * @param exactMatch if true, only an exact match is acceptable. - * @return the HMM that best matches, or null if no match could be found. - */ - public HMM lookupNearestHMM(Unit unit, HMMPosition position, - boolean exactMatch) { - HMM hmm = null; - if (!exactMatch || position == HMMPosition.UNDEFINED) { - unit = unit.getBaseUnit(); - hmm = hmmMap.get(unit); - } - return hmm; - } - - - /** - * Returns an iterator that can be used to iterate through all the HMMs of the acoustic model - * - * @return an iterator that can be used to iterate through all HMMs in the model. The iterator returns objects of - * type HMM. - */ - public Iterator getHMMIterator() { - return hmmMap.values().iterator(); - } - - - /** - * Returns an iterator that can be used to iterate through all the CI units in the acoustic model - * - * @return an iterator that can be used to iterate through all CI units. The iterator returns objects of type - * Unit - */ - public Iterator getContextIndependentUnitIterator() { - return hmmMap.keySet().iterator(); - } - - - /** - * Returns the size of the left context for context dependent units - * - * @return the left context size - */ - public int getLeftContextSize() { - return leftContextSize; - } - - - /** - * Returns the size of the right context for context dependent units - * - * @return the left context size - */ - public int getRightContextSize() { - return rightContextSize; - } - - - /** - * Creates a trivial HMM - * - * @param unitName the name of the unit - */ - private void createTrivialHMM(String unitName) { - // FIXME - //Unit unit = Unit.getUnit(unitName); - //HMM hmm = new TrivialHMM(unit, HMMPosition.UNDEFINED); - //hmmMap.put(unit, hmm); - } - - - /* (non-Javadoc) - * @see edu.cmu.sphinx.linguist.acoustic.AcousticModel#allocate() - */ - public void allocate() throws IOException { - - } - - - /* (non-Javadoc) - * @see edu.cmu.sphinx.linguist.acoustic.AcousticModel#deallocate() - */ - public void deallocate() { - - } -} - - -/** Trivial HMM */ -class TrivialHMM implements HMM { - - private final static int NUM_STATES = 4; - final Unit unit; - final HMMPosition position; - final HMMState[] hmmStates; - private final Unit baseUnit; - - - /** - * Creates a trivial hmm - * - * @param unit the unit for the hmm - * @param position the position of the hmm - */ - TrivialHMM(Unit unit, HMMPosition position) { - this.unit = unit; - this.position = position; - hmmStates = new HMMState[NUM_STATES]; - // baseUnit = Unit.getUnit(unit.getName()); - baseUnit = unit.getBaseUnit(); - - for (int i = 0; i < hmmStates.length; i++) { - boolean finalState = i == hmmStates.length - 1; - hmmStates[i] = new TrivialHMMState(this, i, finalState); - } - } - - - /** - * Gets the unit associated with this HMM - * - * @return the unit associated with this HMM - */ - public Unit getUnit() { - return unit; - } - - - /** - * Gets the base unit associated with this HMM - * - * @return the unit associated with this HMM - */ - public Unit getBaseUnit() { - return baseUnit; - } - - - /** - * Retrieves the hmm state - * - * @param which the state of interest - */ - public HMMState getState(int which) { - return hmmStates[which]; - } - - - /** - * Returns the order of the HMM - * - * @return the order of the HMM - */ - public int getOrder() { - return hmmStates.length; - } - - - /** - * Retrieves the position of this HMM. - * - * @return the position for this HMM - */ - public HMMPosition getPosition() { - return position; - } - - - /** - * Gets the initial states (with probabilities) for this HMM - * - * @return the set of arcs that transition to the initial states for this HMM - */ - public HMMState getInitialState() { - return hmmStates[0]; - } -} - - -/** A trivial implementation of an HMMState */ -class TrivialHMMState implements HMMState { - - private static final HMMStateArc[] EMPTY_ARC = new HMMStateArc[0]; - private final HMM hmm; - private final int which; - private final boolean isFinal; - - - TrivialHMMState(HMM hmm, int which, boolean isFinal) { - this.hmm = hmm; - this.which = which; - this.isFinal = isFinal; - } - - - /** - * Gets the HMM associated with this state - * - * @return the HMM - */ - public HMM getHMM() { - return hmm; - } - - - /** - * Gets the state - * - * @return the state - */ - public int getState() { - return which; - } - - - /** - * Gets the score for this HMM state - * - * @param feature the feature to be scored - * @return the acoustic score for this state. - */ - public float getScore(Data feature) { - return 0.0f; - } - - public float[] calculateComponentScore(Data feature){ - return new float[((FloatData) feature).getValues().length]; - } - - - /** - * Determines if this HMMState is an emittting state - * - * @return true if the state is an emitting state - */ - public boolean isEmitting() { - return !isFinal; - } - - - /** - * Retrieves the state of successor states for this state - * - * @return the set of successor state arcs - */ - public HMMStateArc[] getSuccessors() { - if (isFinal) { - return EMPTY_ARC; - } else { - HMMStateArc[] arcs = new HMMStateArc[2]; - arcs[0] = new HMMStateArc(this, 0f); - arcs[1] = new HMMStateArc(hmm.getState(which + 1), 0f); - return arcs; - } - } - - - /** - * Determines if this state is an exit state of the HMM - * - * @return true if the state is an exit state - */ - public boolean isExitState() { - return isFinal; - } - - /** - * Returns the mixture components associated with this Gaussian - * - * @return the array of mixture components - */ - public MixtureComponent[] getMixtureComponents() { - return null; - } - - /** - * Gets the ID for this senone - * - * @return the senone id - */ - public long getMixtureId() { - return 0; - } - - - public float[] getLogMixtureWeights() { - return null; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/aflat/AFlatLinguist.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/aflat/AFlatLinguist.java deleted file mode 100755 index 40c15b99..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/aflat/AFlatLinguist.java +++ /dev/null @@ -1,1508 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist.aflat; - -import java.io.IOException; -import java.util.*; -import java.util.logging.Logger; - -import edu.cmu.sphinx.decoder.scorer.ScoreProvider; -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.linguist.*; -import edu.cmu.sphinx.linguist.acoustic.*; -import edu.cmu.sphinx.linguist.dictionary.Pronunciation; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.linguist.language.grammar.Grammar; -import edu.cmu.sphinx.linguist.language.grammar.GrammarArc; -import edu.cmu.sphinx.linguist.language.grammar.GrammarNode; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.Timer; -import edu.cmu.sphinx.util.TimerPool; -import edu.cmu.sphinx.util.props.*; - -/** - * A simple form of the linguist. It makes the following simplifying - * assumptions: 1) Zero or one word per grammar node 2) No fan-in allowed ever - * 3) No composites (yet) 4) Only Unit, HMMState, and pronunciation states (and - * the initial/final grammar state are in the graph (no word, alternative or - * grammar states attached). 5) Only valid transitions (matching contexts) are - * allowed 6) No tree organization of units 7) Branching grammar states are - * allowed - *

    - * This is a dynamic version of the flat linguist that is more efficient in - * terms of startup time and overall footprint - *

    - * Note that all probabilities are maintained in the log math domain - */ - -public class AFlatLinguist implements Linguist, Configurable { - - /** - * The property used to define the grammar to use when building the search - * graph - */ - @S4Component(type = Grammar.class) - public final static String GRAMMAR = "grammar"; - - /** - * The property used to define the unit manager to use when building the - * search graph - */ - @S4Component(type = UnitManager.class) - public final static String UNIT_MANAGER = "unitManager"; - - /** - * The property used to define the acoustic model to use when building the - * search graph - */ - @S4Component(type = AcousticModel.class) - public final static String ACOUSTIC_MODEL = "acousticModel"; - - /** - * The property that specifies whether to add a branch for detecting - * out-of-grammar utterances. - */ - @S4Boolean(defaultValue = false) - public final static String ADD_OUT_OF_GRAMMAR_BRANCH = "addOutOfGrammarBranch"; - - /** The property for the probability of entering the out-of-grammar branch. */ - @S4Double(defaultValue = 1.0) - public final static String OUT_OF_GRAMMAR_PROBABILITY = "outOfGrammarProbability"; - - /** - * The property for the probability of inserting a CI phone in the - * out-of-grammar ci phone loop - */ - @S4Double(defaultValue = 1.0) - public static final String PHONE_INSERTION_PROBABILITY = "phoneInsertionProbability"; - - /** - * The property for the acoustic model to use to build the phone loop that - * detects out of grammar utterances. - */ - @S4Component(type = AcousticModel.class) - public final static String PHONE_LOOP_ACOUSTIC_MODEL = "phoneLoopAcousticModel"; - - // ---------------------------------- - // Subcomponents that are configured - // by the property sheet - // ----------------------------------- - private Grammar grammar; - private AcousticModel acousticModel; - private AcousticModel phoneLoopAcousticModel; - private UnitManager unitManager; - // ------------------------------------ - // Data that is configured by the - // property sheet - // ------------------------------------ - private float logWordInsertionProbability; - private float logSilenceInsertionProbability; - private float logUnitInsertionProbability; - private float logFillerInsertionProbability; - private float languageWeight; - private float logOutOfGrammarBranchProbability; - private float logPhoneInsertionProbability; - private boolean addOutOfGrammarBranch; - - // ------------------------------------ - // Data used for building and maintaining - // the search graph - // ------------------------------------- - private SearchGraph searchGraph; - private Logger logger; - private HMMPool hmmPool; - SearchStateArc outOfGrammarGraph; - public Runtime runtime = Runtime.getRuntime(); - private long counterForMemoryLogging = 0; - - // this map is used to manage the set of follow on units for a - // particular grammar node. It is used to select the set of - // possible right contexts as we leave a node - - private Map nodeToNextUnitArrayMap; - - // this map is used to manage the set of possible entry units for - // a grammar node. It is used to filter paths so that we only - // branch to grammar nodes that match the current right context. - - private Map> nodeToUnitSetMap; - - // an empty arc (just waiting for Noah, I guess) - private final SearchStateArc[] EMPTY_ARCS = new SearchStateArc[0]; - - public AFlatLinguist(AcousticModel acousticModel, Grammar grammar, - UnitManager unitManager, - double wordInsertionProbability, - double silenceInsertionProbability, - double unitInsertionProbability, double fillerInsertionProbability, - float languageWeight, boolean addOutOfGrammarBranch, - double outOfGrammarBranchProbability, - double phoneInsertionProbability, - AcousticModel phoneLoopAcousticModel) { - - this.logger = Logger.getLogger(getClass().getName()); - this.acousticModel = acousticModel; - this.grammar = grammar; - this.unitManager = unitManager; - - LogMath logMath = LogMath.getLogMath(); - this.logWordInsertionProbability = logMath - .linearToLog(wordInsertionProbability); - this.logSilenceInsertionProbability = logMath - .linearToLog(silenceInsertionProbability); - this.logUnitInsertionProbability = logMath - .linearToLog(unitInsertionProbability); - this.logFillerInsertionProbability = logMath - .linearToLog(fillerInsertionProbability); - this.languageWeight = languageWeight; - this.addOutOfGrammarBranch = addOutOfGrammarBranch; - this.logOutOfGrammarBranchProbability = logMath - .linearToLog(outOfGrammarBranchProbability); - - this.logPhoneInsertionProbability = logMath - .linearToLog(logPhoneInsertionProbability); - if (addOutOfGrammarBranch) { - this.phoneLoopAcousticModel = phoneLoopAcousticModel; - } - } - - public AFlatLinguist() { - } - - /* - * (non-Javadoc) - * - * @see - * edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util - * .props.PropertySheet) - */ - public void newProperties(PropertySheet ps) throws PropertyException { - // hookup to all of the components - logger = ps.getLogger(); - acousticModel = (AcousticModel) ps.getComponent(ACOUSTIC_MODEL); - - grammar = (Grammar) ps.getComponent(GRAMMAR); - unitManager = (UnitManager) ps.getComponent(UNIT_MANAGER); - - // get the rest of the configuration data - LogMath logMath = LogMath.getLogMath(); - logWordInsertionProbability = logMath.linearToLog(ps - .getDouble(PROP_WORD_INSERTION_PROBABILITY)); - logSilenceInsertionProbability = logMath.linearToLog(ps - .getDouble(PROP_SILENCE_INSERTION_PROBABILITY)); - logUnitInsertionProbability = logMath.linearToLog(ps - .getDouble(PROP_UNIT_INSERTION_PROBABILITY)); - logFillerInsertionProbability = logMath.linearToLog(ps - .getDouble(PROP_FILLER_INSERTION_PROBABILITY)); - languageWeight = ps.getFloat(Linguist.PROP_LANGUAGE_WEIGHT); - addOutOfGrammarBranch = ps.getBoolean(ADD_OUT_OF_GRAMMAR_BRANCH); - logOutOfGrammarBranchProbability = logMath.linearToLog(ps - .getDouble(OUT_OF_GRAMMAR_PROBABILITY)); - - logPhoneInsertionProbability = logMath.linearToLog(ps - .getDouble(PHONE_INSERTION_PROBABILITY)); - if (addOutOfGrammarBranch) { - phoneLoopAcousticModel = (AcousticModel) ps - .getComponent(PHONE_LOOP_ACOUSTIC_MODEL); - } - } - - /** - * Returns the search graph - * - * @return the search graph - */ - public SearchGraph getSearchGraph() { - logger.info("Generated Search Graph"); - logger.info("Total Memory= " + runtime.totalMemory() / (1024 * 1024) - + " MB"); - logger.info("Free Memory = " + runtime.freeMemory() / (1024 * 1024) - + " MB"); - return searchGraph; - } - - /** - * Sets up the acoustic model. - * - * @param ps - * the PropertySheet from which to obtain the acoustic model - * @throws PropertyException something went wrong - */ - protected void setupAcousticModel(PropertySheet ps) - throws PropertyException { - acousticModel = (AcousticModel) ps.getComponent(ACOUSTIC_MODEL); - } - - public void allocate() throws IOException { - logger.info("Allocating DFLAT"); - allocateAcousticModel(); - grammar.allocate(); - hmmPool = new HMMPool(acousticModel, logger, unitManager); - nodeToNextUnitArrayMap = new HashMap(); - nodeToUnitSetMap = new HashMap>(); - Timer timer = TimerPool.getTimer(this, "compileGrammar"); - timer.start(); - compileGrammar(); - timer.stop(); - logger.info("Done allocating DFLAT"); - } - - /** - * Allocates the acoustic model. - * - * @throws java.io.IOException loading failed - */ - protected void allocateAcousticModel() throws IOException { - acousticModel.allocate(); - if (addOutOfGrammarBranch) { - phoneLoopAcousticModel.allocate(); - } - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.linguist.Linguist#deallocate() - */ - public void deallocate() { - if (acousticModel != null) { - acousticModel.deallocate(); - } - grammar.deallocate(); - } - - /** - * Returns the log silence insertion probability. - * - * @return the log silence insertion probability. - */ - public float getLogSilenceInsertionProbability() { - return logSilenceInsertionProbability; - } - - /** Compiles the grammar */ - private void compileGrammar() { - - logger.info("Compiling Grammar"); - // iterate through the grammar nodes - Set nodeSet = grammar.getGrammarNodes(); - - for (GrammarNode node : nodeSet) { - initUnitMaps(node); - } - logger.info("Free Memory before generating Search Graph= " - + runtime.freeMemory() / (1024 * 1024) + " MB"); - searchGraph = new DynamicFlatSearchGraph(); - } - - /** - * Initializes the unit maps for this linguist. There are two unit maps: (a) - * nodeToNextUnitArrayMap contains an array of unit ids for all possible - * units that immediately follow the given grammar node. This is used to - * determine the set of exit contexts for words within a grammar node. (b) - * nodeToUnitSetMap contains the set of possible entry units for a given - * grammar node. This is typically used to determine if a path with a given - * right context should branch into a particular grammar node - * - * @param node - * the units maps will be created for this node. - */ - private void initUnitMaps(GrammarNode node) { - - // collect the set of next units for this node - - if (nodeToNextUnitArrayMap.get(node) == null) { - Set vistedNodes = new HashSet(); - Set unitSet = new HashSet(); - - GrammarArc[] arcs = node.getSuccessors(); - for (GrammarArc arc : arcs) { - GrammarNode nextNode = arc.getGrammarNode(); - collectNextUnits(nextNode, vistedNodes, unitSet); - } - int[] nextUnits = new int[unitSet.size()]; - int index = 0; - for (Unit unit : unitSet) { - nextUnits[index++] = unit.getBaseID(); - } - nodeToNextUnitArrayMap.put(node, nextUnits); - } - - // collect the set of entry units for this node - - if (nodeToUnitSetMap.get(node) == null) { - Set vistedNodes = new HashSet(); - Set unitSet = new HashSet(); - collectNextUnits(node, vistedNodes, unitSet); - nodeToUnitSetMap.put(node, unitSet); - } - } - - /** - * For the given grammar node, collect the set of possible next units. - * - * @param thisNode - * the grammar node - * @param vistedNodes - * the set of visited grammar nodes, used to ensure that we don't - * attempt to expand a particular grammar node more than once - * (which could lead to a death spiral) - * @param unitSet - * the entry units are collected here. - */ - private void collectNextUnits(GrammarNode thisNode, - Set vistedNodes, Set unitSet) { - if (vistedNodes.contains(thisNode)) { - return; - } - - vistedNodes.add(thisNode); - if (thisNode.isFinalNode()) { - unitSet.add(UnitManager.SILENCE); - } else if (!thisNode.isEmpty()) { - Word word = thisNode.getWord(); - Pronunciation[] pronunciations = word.getPronunciations(); - for (Pronunciation pronunciation : pronunciations) { - unitSet.add(pronunciation.getUnits()[0]); - } - } else { - GrammarArc[] arcs = thisNode.getSuccessors(); - for (GrammarArc arc : arcs) { - GrammarNode nextNode = arc.getGrammarNode(); - collectNextUnits(nextNode, vistedNodes, unitSet); - } - } - } - - final Map successorCache = new HashMap(); - - /** The base search state for this dynamic flat linguist. */ - abstract class FlatSearchState implements SearchState, SearchStateArc { - - final static int ANY = 0; - - /** - * Gets the set of successors for this state - * - * @return the set of successors - */ - public abstract SearchStateArc[] getSuccessors(); - - /** - * Returns a unique string representation of the state. This string is - * suitable (and typically used) for a label for a GDL node - * - * @return the signature - */ - public abstract String getSignature(); - - /** - * Returns the order of this state type among all of the search states - * - * @return the order - */ - public abstract int getOrder(); - - /** - * Determines if this state is an emitting state - * - * @return true if this is an emitting state - */ - public boolean isEmitting() { - return false; - } - - /** - * Determines if this is a final state - * - * @return true if this is a final state - */ - public boolean isFinal() { - return false; - } - - /** - * Returns a lex state associated with the searc state (not applicable - * to this linguist) - * - * @return the lex state (null for this linguist) - */ - public Object getLexState() { - return null; - } - - /** - * Returns a well formatted string representation of this state - * - * @return the formatted string - */ - public String toPrettyString() { - return toString(); - } - - /** - * Returns a string representation of this object - * - * @return a string representation - */ - @Override - public String toString() { - return getSignature(); - } - - /** - * Returns the word history for this state (not applicable to this - * linguist) - * - * @return the word history (null for this linguist) - */ - public WordSequence getWordHistory() { - return null; - } - - /** - * Gets a successor to this search state - * - * @return the successor state - */ - public SearchState getState() { - return this; - } - - /** - * Gets the composite probability of entering this state - * - * @return the log probability - */ - public float getProbability() { - return getLanguageProbability() + getInsertionProbability(); - } - - /** - * Gets the language probability of entering this state - * - * @return the log probability - */ - public float getLanguageProbability() { - return LogMath.LOG_ONE; - } - - /** - * Gets the insertion probability of entering this state - * - * @return the log probability - */ - public float getInsertionProbability() { - return LogMath.LOG_ONE; - } - - /** - * Get the arcs from the cache if the exist - * - * @return the cached arcs or null - */ - SearchStateArc[] getCachedSuccessors() { - return successorCache.get(this); - } - - /** - * Places the set of successor arcs in the cache - * - * @param successors - * the set of arcs to be cached for this state - */ - void cacheSuccessors(SearchStateArc[] successors) { - successorCache.put(this, successors); - } - } - - /** - * Represents a grammar node in the search graph. A grammar state needs to - * keep track of the associated grammar node as well as the left context and - * next base unit. - */ - public class GrammarState extends FlatSearchState { - - private final GrammarNode node; - private final int lc; - private final int nextBaseID; - private final float languageProbability; - - /** - * Creates a grammar state for the given node with a silence Lc - * - * @param node - * the grammar node - */ - GrammarState(GrammarNode node) { - this(node, LogMath.LOG_ONE, UnitManager.SILENCE.getBaseID()); - } - - /** - * Creates a grammar state for the given node and left context. The path - * will connect to any possible next base - * - * @param node - * the grammar node - * @param languageProbability - * the probability of transistioning to this word - * @param lc - * the left context for this path - */ - GrammarState(GrammarNode node, float languageProbability, int lc) { - this(node, languageProbability, lc, ANY); - } - - /** - * Creates a grammar state for the given node and left context and next - * base ID. - * - * @param node - * the grammar node - * @param languageProbability - * the probability of transistioning to this word - * @param lc - * the left context for this path - * @param nextBaseID - * the next base ID - */ - GrammarState(GrammarNode node, float languageProbability, int lc, - int nextBaseID) { - this.lc = lc; - this.nextBaseID = nextBaseID; - this.node = node; - this.languageProbability = languageProbability; - } - - /** - * Gets the language probability of entering this state - * - * @return the log probability - */ - @Override - public float getLanguageProbability() { - return languageProbability * languageWeight; - } - - /** - * Generate a hashcode for an object. Equality for a grammar state - * includes the grammar node, the lc and the next base ID - * - * @return the hashcode - */ - @Override - public int hashCode() { - return node.hashCode() * 17 + lc * 7 + nextBaseID; - } - - /** - * Determines if the given object is equal to this object - * - * @param o - * the object to test - * @return true if the object is equal to this - */ - @Override - public boolean equals(Object o) { - if (o == this) { - return true; - } else if (o instanceof GrammarState) { - GrammarState other = (GrammarState) o; - return other.node == node && lc == other.lc - && nextBaseID == other.nextBaseID; - } else { - return false; - } - } - - /** - * Determines if this is a final state in the search graph - * - * @return true if this is a final state in the search graph - */ - @Override - public boolean isFinal() { - return node.isFinalNode(); - } - - /** - * Gets the set of successors for this state - * - * @return the set of successors - */ - @Override - public SearchStateArc[] getSuccessors() { - counterForMemoryLogging++; - if (counterForMemoryLogging % 500000 == 0) { - logger.info("Free Memory= " + runtime.freeMemory() - / (1024 * 1024) + " MB" + "\tMax Memory= " - + runtime.maxMemory() / (1024 * 1024) + "MB"); - } - SearchStateArc[] arcs = getCachedSuccessors(); - if (arcs == null) { - if (isFinal()) { - arcs = EMPTY_ARCS; - } else if (node.isEmpty()) { - arcs = getNextGrammarStates(lc, nextBaseID); - } else { - Word word = node.getWord(); - Pronunciation[] pronunciations = word.getPronunciations(); - pronunciations = filter(pronunciations, nextBaseID); - SearchStateArc[] nextArcs; - if(addOutOfGrammarBranch) - nextArcs= new SearchStateArc[pronunciations.length + 1]; - else - nextArcs = new SearchStateArc[pronunciations.length]; - - for (int i = 0; i < pronunciations.length; i++) { - nextArcs[i] = new PronunciationState(this, - pronunciations[i]); - } - SearchStateArc[] returnState = new SearchStateArc[1]; - returnState[0] = this; - if(addOutOfGrammarBranch){ - PhoneLoop pl = new PhoneLoop(acousticModel, - logOutOfGrammarBranchProbability, - logPhoneInsertionProbability, returnState); - nextArcs[pronunciations.length] = pl.getPhoneLoop(); - } - arcs = nextArcs; - } - cacheSuccessors(arcs); - } - return arcs; - } - - /** - * Gets the set of arcs to the next set of grammar states that match the - * given nextBaseID - * - * @param lc - * the current left context - * @param nextBaseID - * the desired next base ID - */ - SearchStateArc[] getNextGrammarStates(int lc, int nextBaseID) { - GrammarArc[] nextNodes = node.getSuccessors(); - nextNodes = filter(nextNodes, nextBaseID); - SearchStateArc[] nextArcs = new SearchStateArc[nextNodes.length]; - - for (int i = 0; i < nextNodes.length; i++) { - GrammarArc arc = nextNodes[i]; - nextArcs[i] = new GrammarState(arc.getGrammarNode(), arc - .getProbability(), lc, nextBaseID); - } - return nextArcs; - } - - /** - * Returns a unique string representation of the state. This string is - * suitable (and typically used) for a label for a GDL node - * - * @return the signature - */ - @Override - public String getSignature() { - return "GS " + node + "-lc-" + hmmPool.getUnit(lc) + "-rc-" - + hmmPool.getUnit(nextBaseID); - } - - /** - * Returns the order of this state type among all of the search states - * - * @return the order - */ - @Override - public int getOrder() { - return 1; - } - - /** - * Given a set of arcs and the ID of the desired next unit, return the - * set of arcs containing only those that transition to the next unit - * - * @param arcs - * the set of arcs to filter - * @param nextBase - * the ID of the desired next unit - */ - GrammarArc[] filter(GrammarArc[] arcs, int nextBase) { - if (nextBase != ANY) { - List list = new ArrayList(); - for (GrammarArc arc : arcs) { - GrammarNode node = arc.getGrammarNode(); - if (hasEntryContext(node, nextBase)) { - list.add(arc); - } - } - arcs = list.toArray(new GrammarArc[list.size()]); - } - return arcs; - } - - /** - * Determines if the given node starts with the specified unit - * - * @param node - * the grammar node - * @param unitID - * the id of the unit - */ - private boolean hasEntryContext(GrammarNode node, int unitID) { - Set unitSet = nodeToUnitSetMap.get(node); - return unitSet.contains(hmmPool.getUnit(unitID)); - } - - /** - * Retain only the pronunciations that start with the unit indicated by - * nextBase - * - * @param p - * the set of pronunciations to filter - * @param nextBase - * the ID of the desired initial unit - */ - Pronunciation[] filter(Pronunciation[] p, int nextBase) { - return p; - // if (nextBase == ANY) { - // return p; - // } else { - // int count = 0; - // for (int i = 0; i < p.length; i++) { - // Unit[] units = p[i].getUnits(); - // if (units[0].getBaseID() == nextBase) { - // count++; - // } - // } - // - // if (count == p.length) { - // return p; - // } else { - // Pronunciation[] filteredP = new Pronunciation[count]; - // int index = 0; - // for (int i = 0; i < p.length; i++) { - // Unit[] units = p[i].getUnits(); - // if (units[0].getBaseID() == nextBase) { - // filteredP[index++] = p[i]; - // } - // } - // return filteredP; - // } - // } - } - - /** - * Gets the ID of the left context unit for this path - * - * @return the left context ID - */ - int getLC() { - return lc; - } - - /** - * Gets the ID of the desired next unit - * - * @return the ID of the next unit - */ - int getNextBaseID() { - return nextBaseID; - } - - /** - * Returns the set of IDs for all possible next units for this grammar - * node - * - * @return the set of IDs of all possible next units - */ - int[] getNextUnits() { - return nodeToNextUnitArrayMap.get(node); - } - - /** - * Returns a string representation of this object - * - * @return a string representation - */ - @Override - public String toString() { - return node + "[" + hmmPool.getUnit(lc) + ',' - + hmmPool.getUnit(nextBaseID) + ']'; - } - - /** - * Returns the grammar node associated with this grammar state - * - * @return the grammar node - */ - GrammarNode getGrammarNode() { - return node; - } - - } - - class InitialState extends FlatSearchState { - - private final List nextArcs = new ArrayList(); - - /** - * Gets the set of successors for this state - * - * @return the set of successors - */ - @Override - public SearchStateArc[] getSuccessors() { - return nextArcs.toArray(new SearchStateArc[nextArcs.size()]); - } - - public void addArc(SearchStateArc arc) { - nextArcs.add(arc); - } - - /** - * Returns a unique string representation of the state. This string is - * suitable (and typically used) for a label for a GDL node - * - * @return the signature - */ - @Override - public String getSignature() { - return "initialState"; - } - - /** - * Returns the order of this state type among all of the search states - * - * @return the order - */ - @Override - public int getOrder() { - return 1; - } - - /** - * Returns a string representation of this object - * - * @return a string representation - */ - @Override - public String toString() { - return getSignature(); - } - } - - /** This class representations a word punctuation in the search graph */ - class PronunciationState extends FlatSearchState implements WordSearchState { - - private final GrammarState gs; - private final Pronunciation pronunciation; - - /** - * Creates a PronunciationState - * - * @param gs - * the associated grammar state - * @param p - * the pronunciation - */ - PronunciationState(GrammarState gs, Pronunciation p) { - this.gs = gs; - this.pronunciation = p; - } - - /** - * Gets the insertion probability of entering this state - * - * @return the log probability - */ - @Override - public float getInsertionProbability() { - if (pronunciation.getWord().isFiller()) { - return LogMath.LOG_ONE; - } else { - return logWordInsertionProbability; - } - } - - /** - * Generate a hashcode for an object - * - * @return the hashcode - */ - @Override - public int hashCode() { - return 13 * gs.hashCode() + pronunciation.hashCode(); - } - - /** - * Determines if the given object is equal to this object - * - * @param o - * the object to test - * @return true if the object is equal to this - */ - @Override - public boolean equals(Object o) { - if (o == this) { - return true; - } else if (o instanceof PronunciationState) { - PronunciationState other = (PronunciationState) o; - return other.gs.equals(gs) - && other.pronunciation.equals(pronunciation); - } else { - return false; - } - } - - /** - * Gets the successor states for this search graph - * - * @return the successor states - */ - @Override - public SearchStateArc[] getSuccessors() { - SearchStateArc[] arcs = getCachedSuccessors(); - if (arcs == null) { - arcs = getSuccessors(gs.getLC(), 0); - cacheSuccessors(arcs); - } - return arcs; - } - - /** - * Gets the successor states for the unit and the given position and - * left context - * - * @param lc - * the ID of the left context - * @param index - * the position of the unit within the pronunciation - * @return the set of sucessor arcs - */ - SearchStateArc[] getSuccessors(int lc, int index) { - SearchStateArc[] arcs; - if (index == pronunciation.getUnits().length - 1) { - if (isContextIndependentUnit(pronunciation.getUnits()[index])) { - arcs = new SearchStateArc[1]; - arcs[0] = new FullHMMSearchState(this, index, lc, ANY); - } else { - int[] nextUnits = gs.getNextUnits(); - arcs = new SearchStateArc[nextUnits.length]; - for (int i = 0; i < arcs.length; i++) { - arcs[i] = new FullHMMSearchState(this, index, lc, - nextUnits[i]); - } - } - } else { - arcs = new SearchStateArc[1]; - arcs[0] = new FullHMMSearchState(this, index, lc); - } - return arcs; - } - - /** - * Gets the pronunciation assocated with this state - * - * @return the pronunciation - */ - public Pronunciation getPronunciation() { - return pronunciation; - } - - /** - * Determines if the given unit is a CI unit - * - * @param unit - * the unit to test - * @return true if the unit is a context independent unit - */ - private boolean isContextIndependentUnit(Unit unit) { - return unit.isFiller(); - } - - /** - * Returns a unique string representation of the state. This string is - * suitable (and typically used) for a label for a GDL node - * - * @return the signature - */ - @Override - public String getSignature() { - return "PS " + gs.getSignature() + '-' + pronunciation; - } - - /** - * Returns a string representation of this object - * - * @return a string representation - */ - @Override - public String toString() { - return pronunciation.getWord().getSpelling(); - } - - /** - * Returns the order of this state type among all of the search states - * - * @return the order - */ - @Override - public int getOrder() { - return 2; - } - - /** - * Returns the grammar state associated with this state - * - * @return the grammar state - */ - GrammarState getGrammarState() { - return gs; - } - - /** - * Returns true if this WordSearchState indicates the start of a word. - * Returns false if this WordSearchState indicates the end of a word. - * - * @return true if this WordSearchState indicates the start of a word, - * false if this WordSearchState indicates the end of a word - */ - public boolean isWordStart() { - return true; - } - } - - /** Represents a unit (as an HMM) in the search graph */ - class FullHMMSearchState extends FlatSearchState implements UnitSearchState { - - private final PronunciationState pState; - private final int index; - private final int lc; - private final int rc; - private final HMM hmm; - private final boolean isLastUnitOfWord; - - /** - * Creates a FullHMMSearchState - * - * @param p - * the parent PronunciationState - * @param which - * the index of the unit within the pronunciation - * @param lc - * the ID of the left context - */ - FullHMMSearchState(PronunciationState p, int which, int lc) { - this(p, which, lc, p.getPronunciation().getUnits()[which + 1] - .getBaseID()); - } - - /** - * Creates a FullHMMSearchState - * - * @param p - * the parent PronunciationState - * @param which - * the index of the unit within the pronunciation - * @param lc - * the ID of the left context - * @param rc - * the ID of the right context - */ - FullHMMSearchState(PronunciationState p, int which, int lc, int rc) { - this.pState = p; - this.index = which; - this.lc = lc; - this.rc = rc; - int base = p.getPronunciation().getUnits()[which].getBaseID(); - int id = hmmPool.buildID(base, lc, rc); - hmm = hmmPool.getHMM(id, getPosition()); - isLastUnitOfWord = which == p.getPronunciation().getUnits().length - 1; - } - - /** - * Determines the insertion probability based upon the type of unit - * - * @return the insertion probability - */ - @Override - public float getInsertionProbability() { - Unit unit = hmm.getBaseUnit(); - - if (unit.isSilence()) { - return logSilenceInsertionProbability; - } else if (unit.isFiller()) { - return logFillerInsertionProbability; - } else { - return logUnitInsertionProbability; - } - } - - /** - * Returns a string representation of this object - * - * @return a string representation - */ - @Override - public String toString() { - return hmm.getUnit().toString(); - } - - /** - * Generate a hashcode for an object - * - * @return the hashcode - */ - @Override - public int hashCode() { - return pState.getGrammarState().getGrammarNode().hashCode() * 29 - + pState.getPronunciation().hashCode() * 19 + index * 7 - + 43 * lc + rc; - } - - /** - * Determines if the given object is equal to this object - * - * @param o - * the object to test - * @return true if the object is equal to this - */ - @Override - public boolean equals(Object o) { - if (o == this) { - return true; - } else if (o instanceof FullHMMSearchState) { - FullHMMSearchState other = (FullHMMSearchState) o; - // the definition for equal for a FullHMMState: - // Grammar Node equal - // Pronunciation equal - // index equal - // rc equal - - return pState.getGrammarState().getGrammarNode() == other.pState - .getGrammarState().getGrammarNode() - && pState.getPronunciation() == other.pState - .getPronunciation() - && index == other.index - && lc == other.lc && rc == other.rc; - } else { - return false; - } - } - - /** - * Returns the unit associated with this state - * - * @return the unit - */ - public Unit getUnit() { - return hmm.getBaseUnit(); - } - - /** - * Gets the set of successors for this state - * - * @return the set of successors - */ - @Override - public SearchStateArc[] getSuccessors() { - SearchStateArc[] arcs = getCachedSuccessors(); - if (arcs == null) { - arcs = new SearchStateArc[1]; - arcs[0] = new HMMStateSearchState(this, hmm.getInitialState()); - cacheSuccessors(arcs); - } - return arcs; - } - - /** - * Determines if this unit is the last unit of a word - * - * @return true if this unit is the last unit of a word - */ - boolean isLastUnitOfWord() { - return isLastUnitOfWord; - } - - /** - * Determines the position of the unit within the word - * - * @return the position of the unit within the word - */ - HMMPosition getPosition() { - int len = pState.getPronunciation().getUnits().length; - if (len == 1) { - return HMMPosition.SINGLE; - } else if (index == 0) { - return HMMPosition.BEGIN; - } else if (index == len - 1) { - return HMMPosition.END; - } else { - return HMMPosition.INTERNAL; - } - } - - /** - * Returns the HMM for this state - * - * @return the HMM - */ - HMM getHMM() { - return hmm; - } - - /** - * Returns the order of this state type among all of the search states - * - * @return the order - */ - @Override - public int getOrder() { - return 3; - } - - /** - * Returns a unique string representation of the state. This string is - * suitable (and typically used) for a label for a GDL node - * - * @return the signature - */ - @Override - public String getSignature() { - return "HSS " + pState.getGrammarState().getGrammarNode() - + pState.getPronunciation() + index + '-' + rc + '-' + lc; - } - - /** - * Returns the ID of the right context for this state - * - * @return the right context unit ID - */ - int getRC() { - return rc; - } - - /** - * Returns the next set of arcs after this state and all substates have - * been processed - * - * @return the next set of arcs - */ - SearchStateArc[] getNextArcs() { - SearchStateArc[] arcs; - // this is the last state of the hmm - // so check to see if we are at the end - // of a word, if not get the next full hmm in the word - // otherwise generate arcs to the next set of words - - // Pronunciation pronunciation = pState.getPronunciation(); - int nextLC = getHMM().getBaseUnit().getBaseID(); - - if (!isLastUnitOfWord()) { - arcs = pState.getSuccessors(nextLC, index + 1); - } else { - // we are at the end of the word, so we transit to the - // next grammar nodes - GrammarState gs = pState.getGrammarState(); - arcs = gs.getNextGrammarStates(nextLC, getRC()); - } - return arcs; - } - } - - /** Represents a single hmm state in the search graph */ - class HMMStateSearchState extends FlatSearchState implements - HMMSearchState, ScoreProvider { - - private final FullHMMSearchState fullHMMSearchState; - private final HMMState hmmState; - private final float probability; - - /** - * Creates an HMMStateSearchState - * - * @param hss - * the parent hmm state - * @param hmmState - * which hmm state - */ - HMMStateSearchState(FullHMMSearchState hss, HMMState hmmState) { - this(hss, hmmState, LogMath.LOG_ONE); - } - - /** - * Creates an HMMStateSearchState - * - * @param hss - * the parent hmm state - * @param hmmState - * which hmm state - * @param prob - * the transition probability - */ - HMMStateSearchState(FullHMMSearchState hss, HMMState hmmState, - float prob) { - this.probability = prob; - fullHMMSearchState = hss; - this.hmmState = hmmState; - } - - /** - * Returns the acoustic probability for this state - * - * @return the probability - */ - @Override - public float getInsertionProbability() { - return probability; - } - - /** - * Generate a hashcode for an object - * - * @return the hashcode - */ - @Override - public int hashCode() { - return 7 * fullHMMSearchState.hashCode() + hmmState.hashCode(); - } - - /** - * Determines if the given object is equal to this object - * - * @param o - * the object to test - * @return true if the object is equal to this - */ - @Override - public boolean equals(Object o) { - if (o == this) { - return true; - } else if (o instanceof HMMStateSearchState) { - HMMStateSearchState other = (HMMStateSearchState) o; - return other.fullHMMSearchState.equals(fullHMMSearchState) - && other.hmmState.equals(hmmState); - } else { - return false; - } - } - - /** - * Determines if this state is an emitting state - * - * @return true if this is an emitting state - */ - @Override - public boolean isEmitting() { - return hmmState.isEmitting(); - } - - /** - * Gets the set of successors for this state - * - * @return the set of successors - */ - @Override - public SearchStateArc[] getSuccessors() { - - SearchStateArc[] arcs = getCachedSuccessors(); - if (arcs == null) { - if (hmmState.isExitState()) { - arcs = fullHMMSearchState.getNextArcs(); - } else { - HMMStateArc[] next = hmmState.getSuccessors(); - arcs = new SearchStateArc[next.length]; - for (int i = 0; i < arcs.length; i++) { - arcs[i] = new HMMStateSearchState(fullHMMSearchState, - next[i].getHMMState(), next[i] - .getLogProbability()); - } - } - cacheSuccessors(arcs); - } - return arcs; - } - - /** - * Returns the order of this state type among all of the search states - * - * @return the order - */ - @Override - public int getOrder() { - return isEmitting() ? 4 : 0; - } - - /** - * Returns a unique string representation of the state. This string is - * suitable (and typically used) for a label for a GDL node - * - * @return the signature - */ - @Override - public String getSignature() { - return "HSSS " + fullHMMSearchState.getSignature() + '-' + hmmState; - } - - /** - * Returns the hmm state for this search state - * - * @return the hmm state - */ - public HMMState getHMMState() { - return hmmState; - } - - public float getScore(Data data) { - return hmmState.getScore(data); - } - - @Override - public float[] getComponentScore(Data data) { - return hmmState.calculateComponentScore(data); - } - } - - /** The search graph that is produced by the flat linguist. */ - class DynamicFlatSearchGraph implements SearchGraph { - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.linguist.SearchGraph#getInitialState() - */ - public SearchState getInitialState() { - InitialState initialState = new InitialState(); - initialState.addArc(new GrammarState(grammar.getInitialNode())); - return initialState; - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.linguist.SearchGraph#getNumStateOrder() - */ - public int getNumStateOrder() { - return 5; - } - - public boolean getWordTokenFirst() { - return true; - } - } - - public void startRecognition() { - } - - public void stopRecognition() { - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/aflat/PhoneLoop.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/aflat/PhoneLoop.java deleted file mode 100755 index 67760584..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/aflat/PhoneLoop.java +++ /dev/null @@ -1,627 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist.aflat; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import edu.cmu.sphinx.decoder.scorer.ScoreProvider; -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.linguist.*; -import edu.cmu.sphinx.linguist.acoustic.*; -import edu.cmu.sphinx.linguist.dictionary.Pronunciation; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.util.LogMath; - - -/** Builds a grammar sub-graph that matches all phones. This is suitable for use as an out-of-grammar detector */ -public class PhoneLoop { - - private final AcousticModel acousticModel; - private final float logOutOfGrammarBranchProbability; - private final float logPhoneInsertionProbability; - private final static SearchStateArc[] EMPTY_ARCS = new SearchStateArc[0]; - private final FirstBranchState fbs; - private final LastBranchState lbs; - private final UnknownWordState uws; - private final SearchStateArc[] lbsArcSet; - private final SearchStateArc[] toGrammarSearchState; - - - /** - * Creates an PhoneLoop - * - * @param model the acoustic model - * @param logOutOfGrammarBranchProbability probability of branching to this graph - * @param logPhoneInsertionProbability probability of inserting a phone - * @param toGrammarSearchState target search state - */ - public PhoneLoop(AcousticModel model, - float logOutOfGrammarBranchProbability, - float logPhoneInsertionProbability, SearchStateArc[] toGrammarSearchState) { - this.acousticModel = model; - this.logOutOfGrammarBranchProbability = logOutOfGrammarBranchProbability; - this.logPhoneInsertionProbability = logPhoneInsertionProbability; - this.toGrammarSearchState = toGrammarSearchState; - fbs = new FirstBranchState(); - lbs = new LastBranchState(); - uws = new UnknownWordState(); - lbsArcSet = new SearchStateArc[1]; - lbsArcSet[0] = lbs; - } - - - /** - * Returns an arc to this out-of-grammar graph - * - * @return an arc to the graph - */ - public SearchStateArc getPhoneLoop() { - return uws; - } - - - /** Represents the unknown word */ - class UnknownWordState extends OogSearchState implements WordSearchState { - - private final SearchStateArc[] successors; - - - /** Creates the unknown word state */ - UnknownWordState() { - successors = new SearchStateArc[1]; - successors[0] = fbs; - } - - - /** - * Returns the pronunciation for this word - * - * @return the pronunciation - */ - public Pronunciation getPronunciation() { - return Word.UNKNOWN.getPronunciations()[0]; - } - - - /** - * Gets the state order for this state - * - * @return the state order - */ - @Override - public int getOrder() { - return 1; - } - - - /** - * Returns the signature for this state - * - * @return the signature - */ - @Override - public String getSignature() { - return "oogUNK"; - } - - - /** - * Gets the successor states for this search graph - * - * @return the successor states - */ - @Override - public SearchStateArc[] getSuccessors() { - return successors; - } - - - /** - * Gets the language probability for transitioning to this state - * - * @return the language probability - */ - @Override - public float getLanguageProbability() { - return logOutOfGrammarBranchProbability; - } - - - /** - * Returns true if this UnknownWordState indicates the start of a word. Returns false if this UnknownWordState - * indicates the end of a word. - * - * @return true if this UnknownWordState indicates the start of a word, false if this UnknownWordState indicates - * the end of a word - */ - public boolean isWordStart() { - return true; - } - } - - /** Represents the first branch state in the grammar */ - class FirstBranchState extends OogSearchState { - - private final SearchStateArc[] successors; - - - /** Creates the first branch state */ - FirstBranchState() { - List successorList = new ArrayList(); - for (Iterator i = acousticModel.getContextIndependentUnitIterator(); i.hasNext();) { - Unit unit = i.next(); - if(!unit.isFiller()) { - OogHMM hmm = new OogHMM(unit); - successorList.add(hmm); - } - } - successors = successorList.toArray(new SearchStateArc[successorList.size()]); - } - - - /** - * Gets the state order for this state - * - * @return the state order - */ - @Override - public int getOrder() { - return 2; - } - - - /** - * Returns the signature for this state - * - * @return the signature - */ - @Override - public String getSignature() { - return "oogFBS"; - } - - - /** - * Gets the successor states for this search graph - * - * @return the successor states - */ - @Override - public SearchStateArc[] getSuccessors() { - return successors; - } - } - - /** Represents an HMM Unit in the search graph */ - class OogHMM extends OogSearchState implements UnitSearchState { - - private final HMM hmm; - private final SearchStateArc[] successors; - - - /** - * Creates an HMM unit state - * - * @param unit the unit represented by this state - */ - OogHMM(Unit unit) { - hmm = acousticModel.lookupNearestHMM(unit, HMMPosition.UNDEFINED, false); - successors = new SearchStateArc[1]; - successors[0] = new OogHMMState(hmm.getInitialState(), LogMath.LOG_ONE); - } - - - /** - * Gets the unit - * - * @return the unit - */ - public Unit getUnit() { - return hmm.getBaseUnit(); - } - - - /** - * Gets the state order for this state - * - * @return the state order - */ - @Override - public int getOrder() { - return 3; - } - - - /** - * Returns the signature for this state - * - * @return the signature - */ - @Override - public String getSignature() { - return "oogHMM-" + getUnit(); - } - - - /** - * Gets the successor states for this search graph - * - * @return the successor states - */ - @Override - public SearchStateArc[] getSuccessors() { - return successors; - } - - - /** - * Gets the insertion probability of entering this state - * - * @return the log probability - */ - @Override - public float getInsertionProbability() { - return logPhoneInsertionProbability; - } - } - - /** Represents a single hmm state in the search graph */ - class OogHMMState extends OogSearchState implements HMMSearchState,ScoreProvider { - - final HMMState hmmState; - final float logProbability; - - - /** - * Creates an OogHMMState - * - * @param hmmState the hmm state associated with this search state - * @param logProbability the probability of transitioning to this state - */ - OogHMMState(HMMState hmmState, float logProbability) { - this.hmmState = hmmState; - this.logProbability = logProbability; - } - - - /** - * Returns the signature for this state - * - * @return the signature - */ - @Override - public String getSignature() { - return "oog-" + hmmState; - } - - - /** - * Returns the hmm state - * - * @return the hmm state - */ - public HMMState getHMMState() { - return hmmState; - } - - - /** - * Determines if this is an emitting state - * - * @return true if this is an emitting state - */ - @Override - public boolean isEmitting() { - return hmmState.isEmitting(); - } - - - /** - * Generate a hashcode for an object - * - * @return the hashcode - */ - @Override - public int hashCode() { - return 191 + hmmState.hashCode(); - } - - - /** - * Determines if the given object is equal to this object - * - * @param o the object to test - * @return true if the object is equal to this - */ - @Override - public boolean equals(Object o) { - if (o == this) { - return true; - } else if (o instanceof OogHMMState) { - OogHMMState other = (OogHMMState) o; - return other.hmmState == hmmState; - } else { - return false; - } - } - - - /** - * Returns the order of this state type among all of the search states - * - * @return the order - */ - @Override - public int getOrder() { - return isEmitting() ? 4 : 0; - } - - - /** - * Gets the successor states for this search graph - * - * @return the successor states - */ - @Override - public SearchStateArc[] getSuccessors() { - if (hmmState.isExitState()) { - return lbsArcSet; - } else { - HMMStateArc[] arcs = hmmState.getSuccessors(); - SearchStateArc[] successors = new SearchStateArc[arcs.length]; - for (int i = 0; i < arcs.length; i++) { - successors[i] = new OogHMMState(arcs[i].getHMMState(), - arcs[i].getLogProbability()); - } - return successors; - } - } - - public float getScore(Data feature) { - return hmmState.getScore(feature); - } - - - @Override - public float[] getComponentScore(Data feature) { - return hmmState.calculateComponentScore(feature); - } - } - - /** Represents the last branch state in the search graph */ - class LastBranchState extends OogSearchState { - - private final SearchStateArc[] successors; - - - /** Creates the last branch state */ - LastBranchState() { - successors = new SearchStateArc[2]; - successors[0] = fbs; - successors[1] = toGrammarSearchState[0]; - } - - - /** - * Gets the state order for this state - * - * @return the state order - */ - @Override - public int getOrder() { - return 1; - } - - - /** - * Returns the signature for this state - * - * @return the signature - */ - @Override - public String getSignature() { - return "oogLBS"; - } - - - /** - * Gets the successor states for this search graph - * - * @return the successor states - */ - @Override - public SearchStateArc[] getSuccessors() { - return successors; - } - } - - /** Represents the final state in the search graph */ - class FinalState extends OogSearchState { - - /** - * Gets the state order for this state - * - * @return the state order - */ - @Override - public int getOrder() { - return 2; - } - - - /** - * Returns the signature for this state - * - * @return the signature - */ - @Override - public String getSignature() { - return "oogFinal"; - } - - - /** - * Determines if this is a final state - * - * @return true if this is a final state - */ - @Override - public boolean isFinal() { - return true; - } - - - /** - * Gets the successor states for this search graph - * - * @return the successor states - */ - @Override - public SearchStateArc[] getSuccessors() { - return EMPTY_ARCS; - } - } - - /** The base search state for this dynamic flat linguist. */ - abstract class OogSearchState implements SearchState, SearchStateArc { - - final static int ANY = 0; - - - /** - * Gets the set of successors for this state - * - * @return the set of successors - */ - public abstract SearchStateArc[] getSuccessors(); - - - /** - * Returns a unique string representation of the state. This string is suitable (and typically used) for a label - * for a GDL node - * - * @return the signature - */ - public abstract String getSignature(); - - - /** - * Returns the order of this state type among all of the search states - * - * @return the order - */ - public abstract int getOrder(); - - - /** - * Determines if this state is an emitting state - * - * @return true if this is an emitting state - */ - public boolean isEmitting() { - return false; - } - - - /** - * Determines if this is a final state - * - * @return true if this is a final state - */ - public boolean isFinal() { - return false; - } - - - /** - * Returns a lex state associated with the searc state (not applicable to this linguist) - * - * @return the lex state (null for this linguist) - */ - public Object getLexState() { - return null; - } - - - /** - * Returns a well formatted string representation of this state - * - * @return the formatted string - */ - public String toPrettyString() { - return toString(); - } - - - /** - * Returns a string representation of this object - * - * @return a string representation - */ - @Override - public String toString() { - return getSignature(); - } - - - /** - * Returns the word history for this state (not applicable to this linguist) - * - * @return the word history (null for this linguist) - */ - public WordSequence getWordHistory() { - return null; - } - - - /** - * Gets a successor to this search state - * - * @return the sucessor state - */ - public SearchState getState() { - return this; - } - - - /** - * Gets the composite probability of entering this state - * - * @return the log probability - */ - public float getProbability() { - return getLanguageProbability() + getInsertionProbability(); - } - - - /** - * Gets the language probability of entering this state - * - * @return the log probability - */ - public float getLanguageProbability() { - return LogMath.LOG_ONE; - } - - - /** - * Gets the insertion probability of entering this state - * - * @return the log probability - */ - public float getInsertionProbability() { - return LogMath.LOG_ONE; - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/allphone/AllphoneLinguist.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/allphone/AllphoneLinguist.java deleted file mode 100755 index 1efd7864..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/allphone/AllphoneLinguist.java +++ /dev/null @@ -1,175 +0,0 @@ -package edu.cmu.sphinx.linguist.allphone; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; - -import edu.cmu.sphinx.linguist.Linguist; -import edu.cmu.sphinx.linguist.SearchGraph; -import edu.cmu.sphinx.linguist.acoustic.AcousticModel; -import edu.cmu.sphinx.linguist.acoustic.HMM; -import edu.cmu.sphinx.linguist.acoustic.LeftRightContext; -import edu.cmu.sphinx.linguist.acoustic.Unit; -import edu.cmu.sphinx.linguist.acoustic.UnitManager; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.SenoneHMM; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.SenoneSequence; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Boolean; -import edu.cmu.sphinx.util.props.S4Component; -import edu.cmu.sphinx.util.props.S4Double; - -public class AllphoneLinguist implements Linguist { - - /** The property that defines the acoustic model to use when building the search graph */ - @S4Component(type = AcousticModel.class) - public final static String PROP_ACOUSTIC_MODEL = "acousticModel"; - - /** - * The property that controls phone insertion probability. - * Default value for context independent phoneme decoding is 0.05, - * while for context dependent - 0.01. - */ - @S4Double(defaultValue = 0.05) - public final static String PROP_PIP = "phoneInsertionProbability"; - - /** - * The property that controls whether to use context dependent phones. - * Changing it for true, don't forget to tune phone insertion probability. - */ - @S4Boolean(defaultValue = false) - public final static String PROP_CD = "useContextDependentPhones"; - - private AcousticModel acousticModel; - private ArrayList ciHMMs; - private ArrayList fillerHMMs; - private ArrayList leftContextSilHMMs; - private HashMap> senonesToUnits; - private HashMap>> cdHMMs; - private float pip; - private boolean useCD; - - public AllphoneLinguist() { - - } - - public void newProperties(PropertySheet ps) throws PropertyException { - acousticModel = (AcousticModel) ps.getComponent(PROP_ACOUSTIC_MODEL); - pip = LogMath.getLogMath().linearToLog(ps.getFloat(PROP_PIP)); - - useCD = ps.getBoolean(PROP_CD); - if (useCD) - createContextDependentSuccessors(); - else - createContextIndependentSuccessors(); - } - - public SearchGraph getSearchGraph() { - return new AllphoneSearchGraph(this); - } - - public void startRecognition() { - } - - public void stopRecognition() { - } - - public void allocate() throws IOException { - } - - public void deallocate() throws IOException { - } - - public AcousticModel getAcousticModel() { - return acousticModel; - } - - public float getPhoneInsertionProb() { - return pip; - } - - public boolean useContextDependentPhones() { - return useCD; - } - - public ArrayList getCISuccessors() { - return ciHMMs; - } - - public ArrayList getCDSuccessors(Unit lc, Unit base) { - if (lc.isFiller()) - return leftContextSilHMMs; - if (base == UnitManager.SILENCE) - return fillerHMMs; - return cdHMMs.get(lc).get(base); - } - - public ArrayList getUnits(SenoneSequence senoneSeq) { - return senonesToUnits.get(senoneSeq); - } - - private void createContextIndependentSuccessors() { - Iterator hmmIter = acousticModel.getHMMIterator(); - ciHMMs = new ArrayList(); - senonesToUnits = new HashMap>(); - while (hmmIter.hasNext()) { - HMM hmm = hmmIter.next(); - if (!hmm.getUnit().isContextDependent()) { - ArrayList sameSenonesUnits; - SenoneSequence senoneSeq = ((SenoneHMM)hmm).getSenoneSequence(); - if ((sameSenonesUnits = senonesToUnits.get(senoneSeq)) == null) { - sameSenonesUnits = new ArrayList(); - senonesToUnits.put(senoneSeq, sameSenonesUnits); - } - sameSenonesUnits.add(hmm.getUnit()); - ciHMMs.add(hmm); - } - } - } - - private void createContextDependentSuccessors() { - cdHMMs = new HashMap>>(); - senonesToUnits = new HashMap>(); - fillerHMMs = new ArrayList(); - leftContextSilHMMs = new ArrayList(); - Iterator hmmIter = acousticModel.getHMMIterator(); - while (hmmIter.hasNext()) { - HMM hmm = hmmIter.next(); - ArrayList sameSenonesUnits; - SenoneSequence senoneSeq = ((SenoneHMM)hmm).getSenoneSequence(); - if ((sameSenonesUnits = senonesToUnits.get(senoneSeq)) == null) { - sameSenonesUnits = new ArrayList(); - senonesToUnits.put(senoneSeq, sameSenonesUnits); - } - sameSenonesUnits.add(hmm.getUnit()); - if (hmm.getUnit().isFiller()) { - fillerHMMs.add(hmm); - continue; - } - if (hmm.getUnit().isContextDependent()) { - LeftRightContext context = (LeftRightContext)hmm.getUnit().getContext(); - Unit lc = context.getLeftContext()[0]; - if (lc == UnitManager.SILENCE) { - leftContextSilHMMs.add(hmm); - continue; - } - Unit base = hmm.getUnit().getBaseUnit(); - HashMap> lcSuccessors; - if ((lcSuccessors = cdHMMs.get(lc)) == null) { - lcSuccessors = new HashMap>(); - cdHMMs.put(lc, lcSuccessors); - } - ArrayList lcBaseSuccessors; - if ((lcBaseSuccessors = lcSuccessors.get(base)) == null) { - lcBaseSuccessors = new ArrayList(); - lcSuccessors.put(base, lcBaseSuccessors); - } - lcBaseSuccessors.add(hmm); - } - } - leftContextSilHMMs.addAll(fillerHMMs); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/allphone/AllphoneSearchGraph.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/allphone/AllphoneSearchGraph.java deleted file mode 100755 index 36cfa0df..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/allphone/AllphoneSearchGraph.java +++ /dev/null @@ -1,30 +0,0 @@ -package edu.cmu.sphinx.linguist.allphone; - -import edu.cmu.sphinx.linguist.SearchGraph; -import edu.cmu.sphinx.linguist.SearchState; -import edu.cmu.sphinx.linguist.acoustic.HMMPosition; -import edu.cmu.sphinx.linguist.acoustic.HMMState; -import edu.cmu.sphinx.linguist.acoustic.UnitManager; -import edu.cmu.sphinx.util.LogMath; - -public class AllphoneSearchGraph implements SearchGraph { - - private AllphoneLinguist linguist; - - public AllphoneSearchGraph(AllphoneLinguist linguist) { - this.linguist = linguist; - } - - public SearchState getInitialState() { - HMMState silHmmState = linguist.getAcousticModel().lookupNearestHMM(UnitManager.SILENCE, HMMPosition.UNDEFINED, true).getInitialState(); - return new PhoneHmmSearchState(silHmmState, linguist, LogMath.LOG_ONE, LogMath.LOG_ONE); - } - - public int getNumStateOrder() { - return 2; - } - - public boolean getWordTokenFirst() { - return false; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/allphone/PhoneHmmSearchState.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/allphone/PhoneHmmSearchState.java deleted file mode 100755 index d0109f1e..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/allphone/PhoneHmmSearchState.java +++ /dev/null @@ -1,122 +0,0 @@ -package edu.cmu.sphinx.linguist.allphone; - -import java.util.ArrayList; - -import edu.cmu.sphinx.decoder.scorer.ScoreProvider; -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.linguist.SearchState; -import edu.cmu.sphinx.linguist.SearchStateArc; -import edu.cmu.sphinx.linguist.WordSequence; -import edu.cmu.sphinx.linguist.acoustic.HMMState; -import edu.cmu.sphinx.linguist.acoustic.HMMStateArc; -import edu.cmu.sphinx.linguist.acoustic.Unit; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.SenoneHMM; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.SenoneSequence; - -public class PhoneHmmSearchState implements SearchState, SearchStateArc, ScoreProvider { - - private HMMState state; - private AllphoneLinguist linguist; - - private float insertionProb; - private float languageProb; - - public PhoneHmmSearchState(HMMState hmmState, AllphoneLinguist linguist, float insertionProb, float languageProb) { - this.state = hmmState; - this.linguist = linguist; - this.insertionProb = insertionProb; - this.languageProb = languageProb; - } - - public SearchState getState() { - return this; - } - - public int getBaseId() { - return ((SenoneHMM)state.getHMM()).getBaseUnit().getBaseID(); - } - - public float getProbability() { - return getLanguageProbability() + getInsertionProbability(); - } - - public float getLanguageProbability() { - return languageProb; - } - - public float getInsertionProbability() { - return insertionProb; - } - - /* If we are final, transfer to all possible phones, otherwise - * return all successors of this hmm state. - * */ - public SearchStateArc[] getSuccessors() { - if (state.isExitState()) { - ArrayList units = linguist.getUnits(((SenoneHMM)state.getHMM()).getSenoneSequence()); - SearchStateArc[] result = new SearchStateArc[units.size()]; - for (int i = 0; i < result.length; i++) - result[i] = new PhoneNonEmittingSearchState(units.get(i), linguist, insertionProb, languageProb); - return result; - } else { - HMMStateArc successors[] = state.getSuccessors(); - SearchStateArc[] results = new SearchStateArc[successors.length]; - for (int i = 0; i < successors.length; i++) { - results[i] = new PhoneHmmSearchState(successors[i].getHMMState(), linguist, insertionProb, languageProb); - } - return results; - } - } - - public boolean isEmitting() { - return state.isEmitting(); - } - - public boolean isFinal() { - return false; - } - - public String toPrettyString() { - return "HMM " + state.toString(); - } - - public String getSignature() { - return null; - } - - public WordSequence getWordHistory() { - return null; - } - - public Object getLexState() { - return null; - } - - public int getOrder() { - return 2; - } - - @Override - public float getScore(Data data) { - return state.getScore(data); - } - - @Override - public float[] getComponentScore(Data feature) { - return state.calculateComponentScore(feature); - } - - @Override - public boolean equals(Object obj) { - if (!(obj instanceof PhoneHmmSearchState)) - return false; - SenoneSequence otherSenoneSeq = ((SenoneHMM)((PhoneHmmSearchState)obj).state.getHMM()).getSenoneSequence(); - SenoneSequence thisSenoneSeq = ((SenoneHMM)state.getHMM()).getSenoneSequence(); - return thisSenoneSeq.equals(otherSenoneSeq); - } - - @Override - public int hashCode() { - return ((SenoneHMM)state.getHMM()).getSenoneSequence().hashCode() + state.getState() * 37; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/allphone/PhoneNonEmittingSearchState.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/allphone/PhoneNonEmittingSearchState.java deleted file mode 100755 index 62e94ee4..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/allphone/PhoneNonEmittingSearchState.java +++ /dev/null @@ -1,85 +0,0 @@ -package edu.cmu.sphinx.linguist.allphone; - -import edu.cmu.sphinx.linguist.SearchState; -import edu.cmu.sphinx.linguist.SearchStateArc; -import edu.cmu.sphinx.linguist.WordSequence; -import edu.cmu.sphinx.linguist.acoustic.Unit; - -public class PhoneNonEmittingSearchState implements SearchState, SearchStateArc { - - protected Unit unit; - protected AllphoneLinguist linguist; - private float insertionProb; - private float languageProb; - - public PhoneNonEmittingSearchState(Unit unit, AllphoneLinguist linguist, float insertionProb, float languageProb) { - this.unit = unit; - this.linguist = linguist; - this.insertionProb = insertionProb; - this.languageProb = languageProb; - } - - public SearchStateArc[] getSuccessors() { - SearchStateArc[] result = new SearchStateArc[1]; - result[0] = new PhoneWordSearchState(unit, linguist, insertionProb, languageProb); - return result; - } - - public boolean isEmitting() { - return false; - } - - public boolean isFinal() { - return false; - } - - public String toPrettyString() { - return "Unit " + unit.toString(); - } - - public String getSignature() { - return null; - } - - public WordSequence getWordHistory() { - return null; - } - - public int getOrder() { - return 0; - } - - public SearchState getState() { - return this; - } - - public float getProbability() { - return getLanguageProbability() + getInsertionProbability(); - } - - public float getLanguageProbability() { - return languageProb; - } - - public float getInsertionProbability() { - return insertionProb; - } - - public Object getLexState() { - return null; - } - - @Override - public boolean equals(Object obj) { - if (!(obj instanceof PhoneNonEmittingSearchState)) - return false; - boolean haveSameBaseId = ((PhoneNonEmittingSearchState)obj).unit.getBaseID() == unit.getBaseID(); - boolean haveSameContex = ((PhoneNonEmittingSearchState)obj).unit.getContext().equals(unit.getContext()); - return haveSameBaseId && haveSameContex; - } - - @Override - public int hashCode() { - return unit.getContext().hashCode() * 91 + unit.getBaseID(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/allphone/PhoneWordSearchState.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/allphone/PhoneWordSearchState.java deleted file mode 100755 index 8d5068b5..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/allphone/PhoneWordSearchState.java +++ /dev/null @@ -1,68 +0,0 @@ -package edu.cmu.sphinx.linguist.allphone; - -import java.util.ArrayList; - -import edu.cmu.sphinx.linguist.SearchStateArc; -import edu.cmu.sphinx.linguist.WordSearchState; -import edu.cmu.sphinx.linguist.acoustic.HMM; -import edu.cmu.sphinx.linguist.acoustic.LeftRightContext; -import edu.cmu.sphinx.linguist.acoustic.Unit; -import edu.cmu.sphinx.linguist.acoustic.UnitManager; -import edu.cmu.sphinx.linguist.dictionary.Pronunciation; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.util.LogMath; - -public class PhoneWordSearchState extends PhoneNonEmittingSearchState implements WordSearchState { - - public PhoneWordSearchState(Unit unit, AllphoneLinguist linguist, float insertionProb, float languageProb) { - super(unit, linguist, insertionProb, languageProb); - } - - public SearchStateArc[] getSuccessors() { - ArrayList result = new ArrayList(); - Unit rc = UnitManager.SILENCE; - Unit base = unit.getBaseUnit(); - if (unit.isContextDependent()) - rc = ((LeftRightContext)unit.getContext()).getRightContext()[0]; - ArrayList successors = linguist.useContextDependentPhones() ? linguist.getCDSuccessors(base, rc) : linguist.getCISuccessors(); - for (HMM successor : successors) - result.add(new PhoneHmmSearchState(successor.getInitialState(), linguist, linguist.getPhoneInsertionProb(), LogMath.LOG_ONE)); - return result.toArray(new SearchStateArc[result.size()]); - } - - public boolean isFinal() { - return true; - } - - @Override - public Pronunciation getPronunciation() { - Unit[] pronUnits = new Unit[1]; - pronUnits[0] = unit; - Pronunciation p = new Pronunciation(pronUnits, "", 1.0f); - p.setWord(new Word(unit.getName(), null, false)); - return p; - } - - @Override - public boolean isWordStart() { - return false; - } - - public int getOrder() { - return 1; - } - - @Override - public boolean equals(Object obj) { - if (!(obj instanceof PhoneWordSearchState)) - return false; - boolean haveSameBaseId = ((PhoneWordSearchState)obj).unit.getBaseID() == unit.getBaseID(); - boolean haveSameContex = ((PhoneWordSearchState)obj).unit.getContext().equals(unit.getContext()); - return haveSameBaseId && haveSameContex; - } - - @Override - public int hashCode() { - return unit.getContext().hashCode() * 91 + unit.getBaseID(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dflat/DynamicFlatLinguist.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dflat/DynamicFlatLinguist.java deleted file mode 100755 index ddf33578..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dflat/DynamicFlatLinguist.java +++ /dev/null @@ -1,1486 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist.dflat; - -import edu.cmu.sphinx.decoder.scorer.ScoreProvider; -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.linguist.*; -import edu.cmu.sphinx.linguist.acoustic.*; -import edu.cmu.sphinx.linguist.dictionary.Pronunciation; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.linguist.language.grammar.Grammar; -import edu.cmu.sphinx.linguist.language.grammar.GrammarArc; -import edu.cmu.sphinx.linguist.language.grammar.GrammarNode; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.Timer; -import edu.cmu.sphinx.util.TimerPool; -import edu.cmu.sphinx.util.props.*; - -import java.io.IOException; -import java.util.*; -import java.util.logging.Logger; - -/** - * A simple form of the linguist. It makes the following simplifying assumptions: 1) Zero or one word per grammar node - * 2) No fan-in allowed ever 3) No composites (yet) 4) Only Unit, HMMState, and pronunciation states (and the - * initial/final grammar state are in the graph (no word, alternative or grammar states attached). 5) Only valid - * transitions (matching contexts) are allowed 6) No tree organization of units 7) Branching grammar states are - * allowed - *

    - * This is a dynamic version of the flat linguist that is more efficient in terms of startup time and overall footprint - *

    - * Note that all probabilities are maintained in the log math domain - */ - -public class DynamicFlatLinguist implements Linguist, Configurable { - - /** The property used to define the grammar to use when building the search graph */ - @S4Component(type = Grammar.class) - public final static String GRAMMAR = "grammar"; - - /** The property used to define the unit manager to use when building the search graph */ - @S4Component(type = UnitManager.class) - public final static String UNIT_MANAGER = "unitManager"; - - /** The property used to define the acoustic model to use when building the search graph */ - @S4Component(type = AcousticModel.class) - public final static String ACOUSTIC_MODEL = "acousticModel"; - - /** The property that specifies whether to add a branch for detecting out-of-grammar utterances. */ - @S4Boolean(defaultValue = false) - public final static String ADD_OUT_OF_GRAMMAR_BRANCH = "addOutOfGrammarBranch"; - - /** The property for the probability of entering the out-of-grammar branch. */ - @S4Double(defaultValue = 1.0) - public final static String OUT_OF_GRAMMAR_PROBABILITY = "outOfGrammarProbability"; - - /** The property for the probability of inserting a CI phone in the out-of-grammar ci phone loop */ - @S4Double(defaultValue = 1.0) - public static final String PHONE_INSERTION_PROBABILITY = "phoneInsertionProbability"; - - /** The property for the acoustic model to use to build the phone loop that detects out of grammar utterances. */ - @S4Component(type = AcousticModel.class) - public final static String PHONE_LOOP_ACOUSTIC_MODEL = "phoneLoopAcousticModel"; - - // ---------------------------------- - // Subcomponents that are configured - // by the property sheet - // ----------------------------------- - private Grammar grammar; - private AcousticModel acousticModel; - private AcousticModel phoneLoopAcousticModel; - private LogMath logMath; - private UnitManager unitManager; - // ------------------------------------ - // Data that is configured by the - // property sheet - // ------------------------------------ - private float logWordInsertionProbability; - private float logSilenceInsertionProbability; - private float logUnitInsertionProbability; - private float logFillerInsertionProbability; - private float languageWeight; - private float logOutOfGrammarBranchProbability; - private float logPhoneInsertionProbability; - private boolean addOutOfGrammarBranch; - - // ------------------------------------ - // Data used for building and maintaining - // the search graph - // ------------------------------------- - private SearchGraph searchGraph; - private Logger logger; - private HMMPool hmmPool; - SearchStateArc outOfGrammarGraph; - private GrammarNode initialGrammarState; - - // this map is used to manage the set of follow on units for a - // particular grammar node. It is used to select the set of - // possible right contexts as we leave a node - - private Map nodeToNextUnitArrayMap; - - // this map is used to manage the set of possible entry units for - // a grammar node. It is used to filter paths so that we only - // branch to grammar nodes that match the current right context. - - private Map> nodeToUnitSetMap; - - // an empty arc (just waiting for Noah, I guess) - private final SearchStateArc[] EMPTY_ARCS = new SearchStateArc[0]; - - public DynamicFlatLinguist(AcousticModel acousticModel, Grammar grammar, UnitManager unitManager, - double wordInsertionProbability, double silenceInsertionProbability, double unitInsertionProbability, - double fillerInsertionProbability, float languageWeight, boolean addOutOfGrammarBranch, - double outOfGrammarBranchProbability, double phoneInsertionProbability, AcousticModel phoneLoopAcousticModel) { - - this.logger = Logger.getLogger(getClass().getName()); - this.acousticModel = acousticModel; - logMath = LogMath.getLogMath(); - this.grammar = grammar; - this.unitManager = unitManager; - - this.logWordInsertionProbability = logMath.linearToLog(wordInsertionProbability); - this.logSilenceInsertionProbability = logMath.linearToLog(silenceInsertionProbability); - this.logUnitInsertionProbability = logMath.linearToLog(unitInsertionProbability); - this.logFillerInsertionProbability = logMath.linearToLog(fillerInsertionProbability); - this.languageWeight = languageWeight; - this.addOutOfGrammarBranch = addOutOfGrammarBranch; - this.logOutOfGrammarBranchProbability = logMath.linearToLog(outOfGrammarBranchProbability); - - this.logPhoneInsertionProbability = logMath.linearToLog(logPhoneInsertionProbability); - if (addOutOfGrammarBranch) { - this.phoneLoopAcousticModel = phoneLoopAcousticModel; - } - } - - public DynamicFlatLinguist() { - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - public void newProperties(PropertySheet ps) throws PropertyException { - logger = ps.getLogger(); - logMath = LogMath.getLogMath(); - - acousticModel = (AcousticModel) ps.getComponent(ACOUSTIC_MODEL); - grammar = (Grammar) ps.getComponent(GRAMMAR); - unitManager = (UnitManager) ps.getComponent(UNIT_MANAGER); - - // get the rest of the configuration data - logWordInsertionProbability = logMath.linearToLog(ps.getDouble(PROP_WORD_INSERTION_PROBABILITY)); - logSilenceInsertionProbability = logMath.linearToLog(ps.getDouble(PROP_SILENCE_INSERTION_PROBABILITY)); - logUnitInsertionProbability = logMath.linearToLog(ps.getDouble(PROP_UNIT_INSERTION_PROBABILITY)); - logFillerInsertionProbability = logMath.linearToLog(ps.getDouble(PROP_FILLER_INSERTION_PROBABILITY)); - languageWeight = ps.getFloat(Linguist.PROP_LANGUAGE_WEIGHT); - addOutOfGrammarBranch = ps.getBoolean(ADD_OUT_OF_GRAMMAR_BRANCH); - logOutOfGrammarBranchProbability = logMath.linearToLog(ps.getDouble(OUT_OF_GRAMMAR_PROBABILITY)); - - logPhoneInsertionProbability = logMath.linearToLog(ps.getDouble(PHONE_INSERTION_PROBABILITY)); - if (addOutOfGrammarBranch) { - phoneLoopAcousticModel = (AcousticModel) ps.getComponent(PHONE_LOOP_ACOUSTIC_MODEL); - } - } - - - /** - * Returns the search graph - * - * @return the search graph - */ - public SearchGraph getSearchGraph() { - return searchGraph; - } - - public void allocate() throws IOException { - logger.info("Allocating DFLAT"); - allocateAcousticModel(); - grammar.allocate(); - hmmPool = new HMMPool(acousticModel, logger, unitManager); - nodeToNextUnitArrayMap = new HashMap(); - nodeToUnitSetMap = new HashMap>(); - Timer timer = TimerPool.getTimer(this, "compileGrammar"); - timer.start(); - compileGrammar(); - timer.stop(); - logger.info("Done allocating DFLAT"); - } - - - /** - * Allocates the acoustic model. - * @throws java.io.IOException if error happens - **/ - protected void allocateAcousticModel() throws IOException { - acousticModel.allocate(); - if (addOutOfGrammarBranch) { - phoneLoopAcousticModel.allocate(); - } - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.linguist.Linguist#deallocate() - */ - public void deallocate() { - if (acousticModel != null) { - acousticModel.deallocate(); - } - grammar.deallocate(); - } - - - /** Called before a recognition */ - public void startRecognition() { - if (grammarHasChanged()) { - compileGrammar(); - } - } - - - /** Called after a recognition */ - public void stopRecognition() { - } - - - /** - * Returns the log silence insertion probability. - * - * @return the log silence insertion probability. - */ - public float getLogSilenceInsertionProbability() { - return logSilenceInsertionProbability; - } - - /** - * Determines if the underlying grammar has changed since we last compiled the search graph - * - * @return true if the grammar has changed - */ - private boolean grammarHasChanged() { - return initialGrammarState == null || - initialGrammarState != grammar.getInitialNode(); - } - - private void compileGrammar() { - initialGrammarState = grammar.getInitialNode(); - - for (GrammarNode node : grammar.getGrammarNodes()) { - initUnitMaps(node); - } - - searchGraph = new DynamicFlatSearchGraph(); - } - - - /** - * Initializes the unit maps for this linguist. There are two unit maps: (a) nodeToNextUnitArrayMap contains an - * array of unit ids for all possible units that immediately follow the given grammar node. This is used to - * determine the set of exit contexts for words within a grammar node. (b) nodeToUnitSetMap contains the set of - * possible entry units for a given grammar node. This is typically used to determine if a path with a given right - * context should branch into a particular grammar node - * - * @param node the units maps will be created for this node. - */ - private void initUnitMaps(GrammarNode node) { - - // collect the set of next units for this node - - if (nodeToNextUnitArrayMap.get(node) == null) { - Set vistedNodes = new HashSet(); - Set unitSet = new HashSet(); - - GrammarArc[] arcs = node.getSuccessors(); - for (GrammarArc arc : arcs) { - GrammarNode nextNode = arc.getGrammarNode(); - collectNextUnits(nextNode, vistedNodes, unitSet); - } - int[] nextUnits = new int[unitSet.size()]; - int index = 0; - for (Unit unit : unitSet) { - nextUnits[index++] = unit.getBaseID(); - } - nodeToNextUnitArrayMap.put(node, nextUnits); - } - - // collect the set of entry units for this node - - if (nodeToUnitSetMap.get(node) == null) { - Set vistedNodes = new HashSet(); - Set unitSet = new HashSet(); - collectNextUnits(node, vistedNodes, unitSet); - nodeToUnitSetMap.put(node, unitSet); - } - } - - - /** - * For the given grammar node, collect the set of possible next units. - * - * @param thisNode the grammar node - * @param vistedNodes the set of visited grammar nodes, used to ensure that we don't attempt to expand a particular - * grammar node more than once (which could lead to a death spiral) - * @param unitSet the entry units are collected here. - */ - private void collectNextUnits(GrammarNode thisNode, - Set vistedNodes, Set unitSet) { - if (vistedNodes.contains(thisNode)) { - return; - } - - vistedNodes.add(thisNode); - if (thisNode.isFinalNode()) { - unitSet.add(UnitManager.SILENCE); - } else if (!thisNode.isEmpty()) { - Word word = thisNode.getWord(); - Pronunciation[] pronunciations = word.getPronunciations(); - for (Pronunciation pronunciation : pronunciations) { - unitSet.add(pronunciation.getUnits()[0]); - } - } else { - GrammarArc[] arcs = thisNode.getSuccessors(); - for (GrammarArc arc : arcs) { - GrammarNode nextNode = arc.getGrammarNode(); - collectNextUnits(nextNode, vistedNodes, unitSet); - } - } - } - - - final Map successorCache = new HashMap(); - - /** The base search state for this dynamic flat linguist. */ - abstract class FlatSearchState implements SearchState, SearchStateArc { - - final static int ANY = 0; - - - /** - * Gets the set of successors for this state - * - * @return the set of successors - */ - public abstract SearchStateArc[] getSuccessors(); - - - /** - * Returns a unique string representation of the state. This string is suitable (and typically used) for a label - * for a GDL node - * - * @return the signature - */ - public abstract String getSignature(); - - - /** - * Returns the order of this state type among all of the search states - * - * @return the order - */ - public abstract int getOrder(); - - - /** - * Determines if this state is an emitting state - * - * @return true if this is an emitting state - */ - public boolean isEmitting() { - return false; - } - - - /** - * Determines if this is a final state - * - * @return true if this is a final state - */ - public boolean isFinal() { - return false; - } - - - /** - * Returns a lex state associated with the searc state (not applicable to this linguist) - * - * @return the lex state (null for this linguist) - */ - public Object getLexState() { - return null; - } - - - /** - * Returns a well formatted string representation of this state - * - * @return the formatted string - */ - public String toPrettyString() { - return toString(); - } - - - /** - * Returns a string representation of this object - * - * @return a string representation - */ - @Override - public String toString() { - return getSignature(); - } - - - /** - * Returns the word history for this state (not applicable to this linguist) - * - * @return the word history (null for this linguist) - */ - public WordSequence getWordHistory() { - return null; - } - - - /** - * Gets a successor to this search state - * - * @return the successor state - */ - public SearchState getState() { - return this; - } - - - /** - * Gets the composite probability of entering this state - * - * @return the log probability - */ - public float getProbability() { - return getLanguageProbability() + getInsertionProbability(); - } - - - /** - * Gets the language probability of entering this state - * - * @return the log probability - */ - public float getLanguageProbability() { - return LogMath.LOG_ONE; - } - - - /** - * Gets the insertion probability of entering this state - * - * @return the log probability - */ - public float getInsertionProbability() { - return LogMath.LOG_ONE; - } - - - /** - * Get the arcs from the cache if the exist - * - * @return the cached arcs or null - */ - SearchStateArc[] getCachedSuccessors() { - return successorCache.get(this); - } - - - /** - * Places the set of successor arcs in the cache - * - * @param successors the set of arcs to be cached for this state - */ - void cacheSuccessors(SearchStateArc[] successors) { - successorCache.put(this, successors); - } - } - - /** - * Represents a grammar node in the search graph. A grammar state needs to keep track of the associated grammar node - * as well as the left context and next base unit. - */ - class GrammarState extends FlatSearchState { - - private final GrammarNode node; - private final int lc; - private final int nextBaseID; - private final float languageProbability; - - - /** - * Creates a grammar state for the given node with a silence Lc - * - * @param node the grammar node - */ - GrammarState(GrammarNode node) { - this(node, LogMath.LOG_ONE, UnitManager.SILENCE.getBaseID()); - } - - - /** - * Creates a grammar state for the given node and left context. The path will connect to any possible next base - * - * @param node the grammar node - * @param languageProbability the probability of transistioning to this word - * @param lc the left context for this path - */ - GrammarState(GrammarNode node, float languageProbability, int lc) { - this(node, languageProbability, lc, ANY); - } - - - /** - * Creates a grammar state for the given node and left context and next base ID. - * - * @param node the grammar node - * @param languageProbability the probability of transistioning to this word - * @param lc the left context for this path - * @param nextBaseID the next base ID - */ - GrammarState(GrammarNode node, float languageProbability, - int lc, int nextBaseID) { - this.lc = lc; - this.nextBaseID = nextBaseID; - this.node = node; - this.languageProbability = languageProbability; - } - - - /** - * Gets the language probability of entering this state - * - * @return the log probability - */ - @Override - public float getLanguageProbability() { - return languageProbability * languageWeight; - } - - - /** - * Generate a hashcode for an object. Equality for a grammar state includes the grammar node, the lc and the - * next base ID - * - * @return the hashcode - */ - @Override - public int hashCode() { - return node.hashCode() * 17 + lc * 7 + nextBaseID; - } - - - /** - * Determines if the given object is equal to this object - * - * @param o the object to test - * @return true if the object is equal to this - */ - @Override - public boolean equals(Object o) { - if (o == this) { - return true; - } else if (o instanceof GrammarState) { - GrammarState other = (GrammarState) o; - return other.node == node && lc == other.lc - && nextBaseID == other.nextBaseID; - } else { - return false; - } - } - - - /** - * Determines if this is a final state in the search graph - * - * @return true if this is a final state in the search graph - */ - @Override - public boolean isFinal() { - return node.isFinalNode(); - } - - - /** - * Gets the set of successors for this state - * - * @return the set of successors - */ - @Override - public SearchStateArc[] getSuccessors() { - - SearchStateArc[] arcs = getCachedSuccessors(); - - if (arcs != null) { - return arcs; - } - - if (isFinal()) { - arcs = EMPTY_ARCS; - } else if (node.isEmpty()) { - arcs = getNextGrammarStates(lc, nextBaseID); - } else { - Word word = node.getWord(); - Pronunciation[] pronunciations = word.getPronunciations(); - - // This can potentially speedup computation - // pronunciations = filter(pronunciations, nextBaseID); - - SearchStateArc[] nextArcs = new SearchStateArc[pronunciations.length]; - - for (int i = 0; i < pronunciations.length; i++) { - nextArcs[i] = new PronunciationState(this, - pronunciations[i]); - } - arcs = nextArcs; - } - - cacheSuccessors(arcs); - return arcs; - } - - - /** - * Gets the set of arcs to the next set of grammar states that match the given nextBaseID - * - * @param lc the current left context - * @param nextBaseID the desired next base ID - - */ - SearchStateArc[] getNextGrammarStates(int lc, int nextBaseID) { - GrammarArc[] nextNodes = node.getSuccessors(); - nextNodes = filter(nextNodes, nextBaseID); - SearchStateArc[] nextArcs = new SearchStateArc[nextNodes.length]; - - for (int i = 0; i < nextNodes.length; i++) { - GrammarArc arc = nextNodes[i]; - nextArcs[i] = new GrammarState(arc.getGrammarNode(), - arc.getProbability(), lc, nextBaseID); - } - return nextArcs; - } - - - /** - * Returns a unique string representation of the state. This string is suitable (and typically used) for a label - * for a GDL node - * - * @return the signature - */ - @Override - public String getSignature() { - return "GS " + node + "-lc-" + hmmPool.getUnit(lc) + "-rc-" + - hmmPool.getUnit(nextBaseID); - } - - - /** - * Returns the order of this state type among all of the search states - * - * @return the order - */ - @Override - public int getOrder() { - return 1; - } - - - /** - * Given a set of arcs and the ID of the desired next unit, return the set of arcs containing only those that - * transition to the next unit - * - * @param arcs the set of arcs to filter - * @param nextBase the ID of the desired next unit - - */ - GrammarArc[] filter(GrammarArc[] arcs, int nextBase) { - if (nextBase != ANY) { - List list = new ArrayList(); - for (GrammarArc arc : arcs) { - GrammarNode node = arc.getGrammarNode(); - if (hasEntryContext(node, nextBase)) { - list.add(arc); - } - } - arcs = list.toArray(new GrammarArc[list.size()]); - } - return arcs; - } - - - /** - * Determines if the given node starts with the specified unit - * - * @param node the grammar node - * @param unitID the id of the unit - - */ - private boolean hasEntryContext(GrammarNode node, int unitID) { - Set unitSet = nodeToUnitSetMap.get(node); - return unitSet.contains(hmmPool.getUnit(unitID)); - } - - /** - * Retain only the pronunciations that start with the unit indicated by - * nextBase. This method can be used instead of filter to reduce search - * space. It's not used by default but could potentially lead to a - * decoding speedup. - * - * @param p - * the set of pronunciations to filter - * @param nextBase - * the ID of the desired initial unit - */ - Pronunciation[] filter(Pronunciation[] pronunciations, int nextBase) { - - if (nextBase == ANY) { - return pronunciations; - } - - ArrayList filteredPronunciation = new ArrayList( - pronunciations.length); - for (Pronunciation pronunciation : pronunciations) { - if (pronunciation.getUnits()[0].getBaseID() == nextBase) { - filteredPronunciation.add(pronunciation); - } - } - return filteredPronunciation - .toArray(new Pronunciation[filteredPronunciation.size()]); - } - - /** - * Gets the ID of the left context unit for this path - * - * @return the left context ID - */ - int getLC() { - return lc; - } - - - /** - * Gets the ID of the desired next unit - * - * @return the ID of the next unit - */ - int getNextBaseID() { - return nextBaseID; - } - - - /** - * Returns the set of IDs for all possible next units for this grammar node - * - * @return the set of IDs of all possible next units - */ - int[] getNextUnits() { - return nodeToNextUnitArrayMap.get(node); - } - - - /** - * Returns a string representation of this object - * - * @return a string representation - */ - @Override - public String toString() { - return node + "[" + hmmPool.getUnit(lc) + ',' + hmmPool.getUnit(nextBaseID) + ']'; - } - - - /** - * Returns the grammar node associated with this grammar state - * - * @return the grammar node - */ - GrammarNode getGrammarNode() { - return node; - } - - } - - class InitialState extends FlatSearchState { - - private final List nextArcs = new ArrayList(); - - - /** - * Gets the set of successors for this state - * - * @return the set of successors - */ - @Override - public SearchStateArc[] getSuccessors() { - return nextArcs.toArray(new - SearchStateArc[nextArcs.size()]); - } - - - public void addArc(SearchStateArc arc) { - nextArcs.add(arc); - } - - - /** - * Returns a unique string representation of the state. This string is suitable (and typically used) for a label - * for a GDL node - * - * @return the signature - */ - @Override - public String getSignature() { - return "initialState"; - } - - - /** - * Returns the order of this state type among all of the search states - * - * @return the order - */ - @Override - public int getOrder() { - return 1; - } - - - /** - * Returns a string representation of this object - * - * @return a string representation - */ - @Override - public String toString() { - return getSignature(); - } - } - - /** This class representations a word punctuation in the search graph */ - class PronunciationState extends FlatSearchState implements - WordSearchState { - - private final GrammarState gs; - private final Pronunciation pronunciation; - - - /** - * Creates a PronunciationState - * - * @param gs the associated grammar state - * @param p the pronunciation - */ - PronunciationState(GrammarState gs, Pronunciation p) { - this.gs = gs; - this.pronunciation = p; - } - - - /** - * Gets the insertion probability of entering this state - * - * @return the log probability - */ - @Override - public float getInsertionProbability() { - if (pronunciation.getWord().isFiller()) { - return LogMath.LOG_ONE; - } else { - return logWordInsertionProbability; - } - } - - - /** - * Generate a hashcode for an object - * - * @return the hashcode - */ - @Override - public int hashCode() { - return 13 * gs.hashCode() + pronunciation.hashCode(); - } - - - /** - * Determines if the given object is equal to this object - * - * @param o the object to test - * @return true if the object is equal to this - */ - @Override - public boolean equals(Object o) { - if (o == this) { - return true; - } else if (o instanceof PronunciationState) { - PronunciationState other = (PronunciationState) o; - return other.gs.equals(gs) && - other.pronunciation.equals(pronunciation); - } else { - return false; - } - } - - - /** - * Gets the successor states for this search graph - * - * @return the successor states - */ - @Override - public SearchStateArc[] getSuccessors() { - SearchStateArc[] arcs = getCachedSuccessors(); - if (arcs == null) { - arcs = getSuccessors(gs.getLC(), 0); - cacheSuccessors(arcs); - } - return arcs; - } - - - /** - * Gets the successor states for the unit and the given position and left context - * - * @param lc the ID of the left context - * @param index the position of the unit within the pronunciation - * @return the set of sucessor arcs - */ - SearchStateArc[] getSuccessors(int lc, int index) { - SearchStateArc[] arcs; - if (index == pronunciation.getUnits().length - 1) { - if (isContextIndependentUnit( - pronunciation.getUnits()[index])) { - arcs = new SearchStateArc[1]; - arcs[0] = new FullHMMSearchState(this, index, lc, ANY); - } else { - int[] nextUnits = gs.getNextUnits(); - arcs = new SearchStateArc[nextUnits.length]; - for (int i = 0; i < arcs.length; i++) { - arcs[i] = new - FullHMMSearchState(this, index, lc, nextUnits[i]); - } - } - } else { - arcs = new SearchStateArc[1]; - arcs[0] = new FullHMMSearchState(this, index, lc); - } - return arcs; - } - - - /** - * Gets the pronunciation assocated with this state - * - * @return the pronunciation - */ - public Pronunciation getPronunciation() { - return pronunciation; - } - - - /** - * Determines if the given unit is a CI unit - * - * @param unit the unit to test - * @return true if the unit is a context independent unit - */ - private boolean isContextIndependentUnit(Unit unit) { - return unit.isFiller(); - } - - - /** - * Returns a unique string representation of the state. This string is suitable (and typically used) for a label - * for a GDL node - * - * @return the signature - */ - @Override - public String getSignature() { - return "PS " + gs.getSignature() + '-' + pronunciation; - } - - - /** - * Returns a string representation of this object - * - * @return a string representation - */ - @Override - public String toString() { - return pronunciation.getWord().getSpelling(); - } - - - /** - * Returns the order of this state type among all of the search states - * - * @return the order - */ - @Override - public int getOrder() { - return 2; - } - - - /** - * Returns the grammar state associated with this state - * - * @return the grammar state - */ - GrammarState getGrammarState() { - return gs; - } - - - /** - * Returns true if this WordSearchState indicates the start of a word. Returns false if this WordSearchState - * indicates the end of a word. - * - * @return true if this WordSearchState indicates the start of a word, false if this WordSearchState indicates - * the end of a word - */ - public boolean isWordStart() { - return true; - } - } - - - /** Represents a unit (as an HMM) in the search graph */ - class FullHMMSearchState extends FlatSearchState implements - UnitSearchState { - - private final PronunciationState pState; - private final int index; - private final int lc; - private final int rc; - private final HMM hmm; - private final boolean isLastUnitOfWord; - - - /** - * Creates a FullHMMSearchState - * - * @param p the parent PronunciationState - * @param which the index of the unit within the pronunciation - * @param lc the ID of the left context - */ - FullHMMSearchState(PronunciationState p, int which, int lc) { - this(p, which, lc, - p.getPronunciation().getUnits()[which + 1].getBaseID()); - } - - - /** - * Creates a FullHMMSearchState - * - * @param p the parent PronunciationState - * @param which the index of the unit within the pronunciation - * @param lc the ID of the left context - * @param rc the ID of the right context - */ - FullHMMSearchState(PronunciationState p, int which, int lc, int rc) { - this.pState = p; - this.index = which; - this.lc = lc; - this.rc = rc; - int base = - p.getPronunciation().getUnits()[which].getBaseID(); - int id = hmmPool.buildID(base, lc, rc); - hmm = hmmPool.getHMM(id, getPosition()); - isLastUnitOfWord = - which == p.getPronunciation().getUnits().length - 1; - } - - - /** - * Determines the insertion probability based upon the type of unit - * - * @return the insertion probability - */ - @Override - public float getInsertionProbability() { - Unit unit = hmm.getBaseUnit(); - - if (unit.isSilence()) { - return logSilenceInsertionProbability; - } else if (unit.isFiller()) { - return logFillerInsertionProbability; - } else { - return logUnitInsertionProbability; - } - } - - - /** - * Returns a string representation of this object - * - * @return a string representation - */ - @Override - public String toString() { - return hmm.getUnit().toString(); - } - - - /** - * Generate a hashcode for an object - * - * @return the hashcode - */ - @Override - public int hashCode() { - return pState.getGrammarState().getGrammarNode().hashCode() * 29 + - pState.getPronunciation().hashCode() * 19 + - index * 7 + 43 * lc + rc; - } - - - /** - * Determines if the given object is equal to this object - * - * @param o the object to test - * @return true if the object is equal to this - */ - @Override - public boolean equals(Object o) { - if (o == this) { - return true; - } else if (o instanceof FullHMMSearchState) { - FullHMMSearchState other = (FullHMMSearchState) o; - // the definition for equal for a FullHMMState: - // Grammar Node equal - // Pronunciation equal - // index equal - // rc equal - - return pState.getGrammarState().getGrammarNode() == - other.pState.getGrammarState().getGrammarNode() && - pState.getPronunciation() == other.pState.getPronunciation() && - index == other.index && lc == other.lc && rc == other.rc; - } else { - return false; - } - } - - - /** - * Returns the unit associated with this state - * - * @return the unit - */ - public Unit getUnit() { - return hmm.getBaseUnit(); - } - - - /** - * Gets the set of successors for this state - * - * @return the set of successors - */ - @Override - public SearchStateArc[] getSuccessors() { - SearchStateArc[] arcs = getCachedSuccessors(); - if (arcs == null) { - arcs = new SearchStateArc[1]; - arcs[0] = new HMMStateSearchState(this, hmm.getInitialState()); - cacheSuccessors(arcs); - } - return arcs; - } - - - /** - * Determines if this unit is the last unit of a word - * - * @return true if this unit is the last unit of a word - */ - boolean isLastUnitOfWord() { - return isLastUnitOfWord; - } - - - /** - * Determines the position of the unit within the word - * - * @return the position of the unit within the word - */ - HMMPosition getPosition() { - int len = pState.getPronunciation().getUnits().length; - if (len == 1) { - return HMMPosition.SINGLE; - } else if (index == 0) { - return HMMPosition.BEGIN; - } else if (index == len - 1) { - return HMMPosition.END; - } else { - return HMMPosition.INTERNAL; - } - } - - - /** - * Returns the HMM for this state - * - * @return the HMM - */ - HMM getHMM() { - return hmm; - } - - - /** - * Returns the order of this state type among all of the search states - * - * @return the order - */ - @Override - public int getOrder() { - return 3; - } - - /** - * Returns a unique string representation of the state. This string is suitable (and typically used) for a label - * for a GDL node - * - * @return the signature - */ - @Override - public String getSignature() { - return "HSS " + pState.getGrammarState().getGrammarNode() + - pState.getPronunciation() + index + '-' + rc + '-' + lc; - } - - /** - * Returns the ID of the right context for this state - * - * @return the right context unit ID - */ - int getRC() { - return rc; - } - - - /** - * Returns the next set of arcs after this state and all substates have been processed - * - * @return the next set of arcs - */ - SearchStateArc[] getNextArcs() { - SearchStateArc[] arcs; - // this is the last state of the hmm - // so check to see if we are at the end - // of a word, if not get the next full hmm in the word - // otherwise generate arcs to the next set of words - -// Pronunciation pronunciation = pState.getPronunciation(); - int nextLC = getHMM().getBaseUnit().getBaseID(); - - if (!isLastUnitOfWord()) { - arcs = pState.getSuccessors(nextLC, index + 1); - } else { - // we are at the end of the word, so we transit to the - // next grammar nodes - GrammarState gs = pState.getGrammarState(); - arcs = gs.getNextGrammarStates(nextLC, getRC()); - } - return arcs; - } - } - - /** Represents a single hmm state in the search graph */ - class HMMStateSearchState extends FlatSearchState implements - HMMSearchState, ScoreProvider { - - private final FullHMMSearchState fullHMMSearchState; - private final HMMState hmmState; - private final float probability; - - - /** - * Creates an HMMStateSearchState - * - * @param hss the parent hmm state - * @param hmmState which hmm state - */ - HMMStateSearchState(FullHMMSearchState hss, HMMState hmmState) { - this(hss, hmmState, LogMath.LOG_ONE); - } - - - /** - * Creates an HMMStateSearchState - * - * @param hss the parent hmm state - * @param hmmState which hmm state - * @param prob the transition probability - */ - HMMStateSearchState(FullHMMSearchState hss, HMMState hmmState, - float prob) { - this.probability = prob; - fullHMMSearchState = hss; - this.hmmState = hmmState; - } - - - /** - * Returns the acoustic probability for this state - * - * @return the probability - */ - @Override - public float getInsertionProbability() { - return probability; - } - - /** - * Generate a hashcode for an object - * - * @return the hashcode - */ - @Override - public int hashCode() { - return 7 * fullHMMSearchState.hashCode() + hmmState.hashCode(); - } - - - /** - * Determines if the given object is equal to this object - * - * @param o the object to test - * @return true if the object is equal to this - */ - @Override - public boolean equals(Object o) { - if (o == this) { - return true; - } else if (o instanceof HMMStateSearchState) { - HMMStateSearchState other = (HMMStateSearchState) o; - return other.fullHMMSearchState.equals(fullHMMSearchState) - && other.hmmState.equals(hmmState); - } else { - return false; - } - } - - - /** - * Determines if this state is an emitting state - * - * @return true if this is an emitting state - */ - @Override - public boolean isEmitting() { - return hmmState.isEmitting(); - } - - - /** - * Gets the set of successors for this state - * - * @return the set of successors - */ - @Override - public SearchStateArc[] getSuccessors() { - - SearchStateArc[] arcs = getCachedSuccessors(); - if (arcs == null) { - if (hmmState.isExitState()) { - arcs = fullHMMSearchState.getNextArcs(); - } else { - HMMStateArc[] next = hmmState.getSuccessors(); - arcs = new SearchStateArc[next.length]; - for (int i = 0; i < arcs.length; i++) { - arcs[i] = new - HMMStateSearchState(fullHMMSearchState, - next[i].getHMMState(), - next[i].getLogProbability()); - } - } - cacheSuccessors(arcs); - } - return arcs; - } - - - /** - * Returns the order of this state type among all of the search states - * - * @return the order - */ - @Override - public int getOrder() { - return isEmitting() ? 4 : 0; - } - - - /** - * Returns a unique string representation of the state. This string is suitable (and typically used) for a label - * for a GDL node - * - * @return the signature - */ - @Override - public String getSignature() { - return "HSSS " + fullHMMSearchState.getSignature() + '-' + hmmState; - } - - - /** - * Returns the hmm state for this search state - * - * @return the hmm state - */ - public HMMState getHMMState() { - return hmmState; - } - - - public float getScore(Data data) { - return hmmState.getScore(data); - } - - public float[] getComponentScore(Data data) { - return hmmState.calculateComponentScore(data); - } - } - - - /** The search graph that is produced by the flat linguist. */ - class DynamicFlatSearchGraph implements SearchGraph { - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.linguist.SearchGraph#getInitialState() - */ - public SearchState getInitialState() { - InitialState initialState = new InitialState(); - initialState.addArc(new GrammarState(grammar.getInitialNode())); - // add an out-of-grammar branch if configured to do so - if (addOutOfGrammarBranch) { - OutOfGrammarGraph oogg = new OutOfGrammarGraph - (phoneLoopAcousticModel, - logOutOfGrammarBranchProbability, - logPhoneInsertionProbability); - - initialState.addArc(oogg.getOutOfGrammarGraph()); - } - return initialState; - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.linguist.SearchGraph#getNumStateOrder() - */ - public int getNumStateOrder() { - return 5; - } - - public boolean getWordTokenFirst() { - return true; - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dflat/OutOfGrammarGraph.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dflat/OutOfGrammarGraph.java deleted file mode 100755 index 59d9afd7..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dflat/OutOfGrammarGraph.java +++ /dev/null @@ -1,626 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist.dflat; - -import edu.cmu.sphinx.decoder.scorer.ScoreProvider; -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.linguist.*; -import edu.cmu.sphinx.linguist.acoustic.*; -import edu.cmu.sphinx.linguist.dictionary.Pronunciation; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.util.LogMath; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - - -/** Builds a grammar sub-graph that matches all phones. This is suitable for use as an out-of-grammar detector */ -public class OutOfGrammarGraph { - - private final AcousticModel acousticModel; - private final float logOutOfGrammarBranchProbability; - private final float logPhoneInsertionProbability; - private final static SearchStateArc[] EMPTY_ARCS = new SearchStateArc[0]; - private final FirstBranchState fbs; - private final LastBranchState lbs; - private final UnknownWordState uws; - private final SearchStateArc[] lbsArcSet; - - - /** - * Creates an OutOfGrammarGraph - * - * @param model the acoustic model - * @param logOutOfGrammarBranchProbability probability of branching to this graph - * @param logPhoneInsertionProbability probability of inserting a phone - */ - public OutOfGrammarGraph(AcousticModel model, - float logOutOfGrammarBranchProbability, - float logPhoneInsertionProbability) { - this.acousticModel = model; - this.logOutOfGrammarBranchProbability = logOutOfGrammarBranchProbability; - this.logPhoneInsertionProbability = logPhoneInsertionProbability; - fbs = new FirstBranchState(); - lbs = new LastBranchState(); - uws = new UnknownWordState(); - lbsArcSet = new SearchStateArc[1]; - lbsArcSet[0] = lbs; - - } - - - /** - * Returns an arc to this out-of-grammar graph - * - * @return an arc to the graph - */ - public SearchStateArc getOutOfGrammarGraph() { - return uws; - } - - - /** Represents the unknown word */ - class UnknownWordState extends OogSearchState implements WordSearchState { - - private final SearchStateArc[] successors; - - - /** Creates the unknown word state */ - UnknownWordState() { - successors = new SearchStateArc[1]; - successors[0] = fbs; - } - - - /** - * Returns the pronunciation for this word - * - * @return the pronunciation - */ - public Pronunciation getPronunciation() { - return Word.UNKNOWN.getPronunciations()[0]; - } - - - /** - * Gets the state order for this state - * - * @return the state order - */ - @Override - public int getOrder() { - return 1; - } - - - /** - * Returns the signature for this state - * - * @return the signature - */ - @Override - public String getSignature() { - return "oogUNK"; - } - - - /** - * Gets the successor states for this search graph - * - * @return the successor states - */ - @Override - public SearchStateArc[] getSuccessors() { - return successors; - } - - - /** - * Gets the language probability for transitioning to this state - * - * @return the language probability - */ - @Override - public float getLanguageProbability() { - return logOutOfGrammarBranchProbability; - } - - - /** - * Returns true if this UnknownWordState indicates the start of a word. Returns false if this UnknownWordState - * indicates the end of a word. - * - * @return true if this UnknownWordState indicates the start of a word, false if this UnknownWordState indicates - * the end of a word - */ - public boolean isWordStart() { - return true; - } - } - - /** Represents the first branch state in the grammar */ - class FirstBranchState extends OogSearchState { - - private final SearchStateArc[] successors; - - - /** Creates the first branch state */ - FirstBranchState() { - List successorList = new ArrayList(); - for (Iterator i = acousticModel.getContextIndependentUnitIterator(); i.hasNext();) { - Unit unit = i.next(); - OogHMM hmm = new OogHMM(unit); - successorList.add(hmm); - } - successors = successorList.toArray(new SearchStateArc[successorList.size()]); - } - - - /** - * Gets the state order for this state - * - * @return the state order - */ - @Override - public int getOrder() { - return 2; - } - - - /** - * Returns the signature for this state - * - * @return the signature - */ - @Override - public String getSignature() { - return "oogFBS"; - } - - - /** - * Gets the successor states for this search graph - * - * @return the successor states - */ - @Override - public SearchStateArc[] getSuccessors() { - return successors; - } - } - - /** Represents an HMM Unit in the search graph */ - class OogHMM extends OogSearchState implements UnitSearchState { - - private final HMM hmm; - private final SearchStateArc[] successors; - - - /** - * Creates an HMM unit state - * - * @param unit the unit represented by this state - */ - OogHMM(Unit unit) { - hmm = acousticModel.lookupNearestHMM(unit, HMMPosition.UNDEFINED, false); - successors = new SearchStateArc[1]; - successors[0] = new OogHMMState(hmm.getInitialState(), - LogMath.LOG_ONE); - } - - - /** - * Gets the unit - * - * @return the unit - */ - public Unit getUnit() { - return hmm.getBaseUnit(); - } - - - /** - * Gets the state order for this state - * - * @return the state order - */ - @Override - public int getOrder() { - return 3; - } - - - /** - * Returns the signature for this state - * - * @return the signature - */ - @Override - public String getSignature() { - return "oogHMM-" + getUnit(); - } - - - /** - * Gets the successor states for this search graph - * - * @return the successor states - */ - @Override - public SearchStateArc[] getSuccessors() { - return successors; - } - - - /** - * Gets the insertion probability of entering this state - * - * @return the log probability - */ - @Override - public float getInsertionProbability() { - return logPhoneInsertionProbability; - } - } - - /** Represents a single hmm state in the search graph */ - class OogHMMState extends OogSearchState implements - HMMSearchState, ScoreProvider { - - final HMMState hmmState; - final float logProbability; - - - /** - * Creates an OogHMMState - * - * @param hmmState the hmm state associated with this search state - * @param logProbability the probability of transitioning to this state - */ - OogHMMState(HMMState hmmState, float logProbability) { - this.hmmState = hmmState; - this.logProbability = logProbability; - } - - - /** - * Returns the signature for this state - * - * @return the signature - */ - @Override - public String getSignature() { - return "oog-" + hmmState; - } - - - /** - * Returns the hmm state - * - * @return the hmm state - */ - public HMMState getHMMState() { - return hmmState; - } - - - /** - * Determines if this is an emitting state - * - * @return true if this is an emitting state - */ - @Override - public boolean isEmitting() { - return hmmState.isEmitting(); - } - - - /** - * Generate a hashcode for an object - * - * @return the hashcode - */ - @Override - public int hashCode() { - return 191 + hmmState.hashCode(); - } - - - /** - * Determines if the given object is equal to this object - * - * @param o the object to test - * @return true if the object is equal to this - */ - @Override - public boolean equals(Object o) { - if (o == this) { - return true; - } else if (o instanceof OogHMMState) { - OogHMMState other = (OogHMMState) o; - return other.hmmState == hmmState; - } else { - return false; - } - } - - - /** - * Returns the order of this state type among all of the search states - * - * @return the order - */ - @Override - public int getOrder() { - return isEmitting() ? 4 : 0; - } - - - /** - * Gets the successor states for this search graph - * - * @return the successor states - */ - @Override - public SearchStateArc[] getSuccessors() { - if (hmmState.isExitState()) { - return lbsArcSet; - } else { - HMMStateArc[] arcs = hmmState.getSuccessors(); - SearchStateArc[] successors = new SearchStateArc[arcs.length]; - for (int i = 0; i < arcs.length; i++) { - successors[i] = new OogHMMState(arcs[i].getHMMState(), - arcs[i].getLogProbability()); - } - return successors; - } - } - - - public float getScore(Data data) { - return hmmState.getScore(data); - } - - - @Override - public float[] getComponentScore(Data data) { - return hmmState.calculateComponentScore(data); - } - } - - /** Represents the last branch state in the search graph */ - class LastBranchState extends OogSearchState { - - private final SearchStateArc[] successors; - - - /** Creates the last branch state */ - LastBranchState() { - successors = new SearchStateArc[2]; - successors[0] = fbs; - successors[1] = new FinalState(); - } - - - /** - * Gets the state order for this state - * - * @return the state order - */ - @Override - public int getOrder() { - return 1; - } - - - /** - * Returns the signature for this state - * - * @return the signature - */ - @Override - public String getSignature() { - return "oogLBS"; - } - - - /** - * Gets the successor states for this search graph - * - * @return the successor states - */ - @Override - public SearchStateArc[] getSuccessors() { - return successors; - } - } - - /** Represents the final state in the search graph */ - class FinalState extends OogSearchState { - - /** - * Gets the state order for this state - * - * @return the state order - */ - @Override - public int getOrder() { - return 2; - } - - - /** - * Returns the signature for this state - * - * @return the signature - */ - @Override - public String getSignature() { - return "oogFinal"; - } - - - /** - * Determines if this is a final state - * - * @return true if this is a final state - */ - @Override - public boolean isFinal() { - return true; - } - - - /** - * Gets the successor states for this search graph - * - * @return the successor states - */ - @Override - public SearchStateArc[] getSuccessors() { - return EMPTY_ARCS; - } - } - - /** The base search state for this dynamic flat linguist. */ - abstract class OogSearchState implements SearchState, SearchStateArc { - - final static int ANY = 0; - - - /** - * Gets the set of successors for this state - * - * @return the set of successors - */ - public abstract SearchStateArc[] getSuccessors(); - - - /** - * Returns a unique string representation of the state. This string is suitable (and typically used) for a label - * for a GDL node - * - * @return the signature - */ - public abstract String getSignature(); - - - /** - * Returns the order of this state type among all of the search states - * - * @return the order - */ - public abstract int getOrder(); - - - /** - * Determines if this state is an emitting state - * - * @return true if this is an emitting state - */ - public boolean isEmitting() { - return false; - } - - - /** - * Determines if this is a final state - * - * @return true if this is a final state - */ - public boolean isFinal() { - return false; - } - - - /** - * Returns a lex state associated with the searc state (not applicable to this linguist) - * - * @return the lex state (null for this linguist) - */ - public Object getLexState() { - return null; - } - - - /** - * Returns a well formatted string representation of this state - * - * @return the formatted string - */ - public String toPrettyString() { - return toString(); - } - - - /** - * Returns a string representation of this object - * - * @return a string representation - */ - @Override - public String toString() { - return getSignature(); - } - - - /** - * Returns the word history for this state (not applicable to this linguist) - * - * @return the word history (null for this linguist) - */ - public WordSequence getWordHistory() { - return null; - } - - - /** - * Gets a successor to this search state - * - * @return the sucessor state - */ - public SearchState getState() { - return this; - } - - - /** - * Gets the composite probability of entering this state - * - * @return the log probability - */ - public float getProbability() { - return getLanguageProbability() + getInsertionProbability(); - } - - - /** - * Gets the language probability of entering this state - * - * @return the log probability - */ - public float getLanguageProbability() { - return LogMath.LOG_ONE; - } - - - /** - * Gets the insertion probability of entering this state - * - * @return the log probability - */ - public float getInsertionProbability() { - return LogMath.LOG_ONE; - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dictionary/Dictionary.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dictionary/Dictionary.java deleted file mode 100755 index 2d6f8a76..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dictionary/Dictionary.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist.dictionary; - -import edu.cmu.sphinx.linguist.acoustic.UnitManager; -import edu.cmu.sphinx.util.props.Configurable; -import edu.cmu.sphinx.util.props.S4Component; -import edu.cmu.sphinx.util.props.S4Integer; -import edu.cmu.sphinx.util.props.S4String; - -import java.io.IOException; - -/** - * Provides a generic interface to a dictionary. The dictionary is responsible for determining how a word is - * pronounced. - */ -public interface Dictionary extends Configurable { - - /** Spelling of the sentence start word. */ - public static final String SENTENCE_START_SPELLING = ""; - /** Spelling of the sentence end word. */ - public static final String SENTENCE_END_SPELLING = ""; - /** Spelling of the 'word' that marks a silence */ - public static final String SILENCE_SPELLING = ""; - - /** The property for the dictionary file path. */ - @S4String - public static final String PROP_DICTIONARY = "dictionaryPath"; - - /** The property for the g2p model file path. */ - @S4String(defaultValue = "") - public static final String PROP_G2P_MODEL_PATH = "g2pModelPath"; - - /** The property for the g2p model file path. */ - @S4Integer(defaultValue = 1) - public static final String PROP_G2P_MAX_PRONUNCIATIONS = "g2pMaxPron"; - - /** The property for the filler dictionary file path. */ - @S4String - public static final String PROP_FILLER_DICTIONARY = "fillerPath"; - /** - * The property that specifies the word to substitute when a lookup fails to find the word in the - * dictionary. If this is not set, no substitute is performed. - */ - @S4String(mandatory = false) - public static final String PROP_WORD_REPLACEMENT = "wordReplacement"; - - /** The property that defines the name of the unit manager that is used to convert strings to Unit objects */ - @S4Component(type = UnitManager.class, defaultClass = UnitManager.class) - public static final String PROP_UNIT_MANAGER = "unitManager"; - - /** - * The property for the custom dictionary file paths. This addenda property points to a possibly - * empty list of URLs to dictionary addenda. Each addendum should contain word pronunciations in the same Sphinx-3 - * dictionary format as the main dictionary. Words in the addendum are added after the words in the main dictionary - * and will override previously specified pronunciations. If you wish to extend the set of pronunciations for a - * particular word, add a new pronunciation by number. For example, in the following addendum, given that the - * aforementioned main dictionary is specified, the pronunciation for 'EIGHT' will be overridden by the addenda, - * while the pronunciation for 'SIX' and 'ZERO' will be augmented and a new pronunciation for 'ELEVEN' will be - * added. - *

    -     *          EIGHT   OW T
    -     *          SIX(2)  Z IH K S
    -     *          ZERO(3)  Z IY Rl AH
    -     *          ELEVEN   EH L EH V AH N
    -     * 
    - */ - @S4String(mandatory = false) - public static final String PROP_ADDENDA = "addenda"; - - /** - * Returns a Word object based on the spelling and its classification. The behavior of this method is also affected - * by the properties wordReplacement and g2pModel - * - * @param text the spelling of the word of interest. - * @return a Word object - * @see edu.cmu.sphinx.linguist.dictionary.Pronunciation - */ - public Word getWord(String text); - - - /** - * Returns the sentence start word. - * - * @return the sentence start word - */ - public Word getSentenceStartWord(); - - - /** - * Returns the sentence end word. - * - * @return the sentence end word - */ - public Word getSentenceEndWord(); - - - /** - * Returns the silence word. - * - * @return the silence word - */ - public Word getSilenceWord(); - - /** - * Gets the set of all filler words in the dictionary - * - * @return an array (possibly empty) of all filler words - */ - public Word[] getFillerWords(); - - - /** - * Allocates the dictionary - * - * @throws IOException if there is trouble loading the dictionary - */ - public void allocate() throws IOException; - - - /** Deallocates the dictionary */ - public void deallocate(); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dictionary/MappingDictionary.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dictionary/MappingDictionary.java deleted file mode 100755 index 123635d3..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dictionary/MappingDictionary.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright 1999-2009 Carnegie Mellon University. - * Copyright 2009 PC-NG Inc. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.dictionary; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.URL; -import java.util.HashMap; -import java.util.Map; -import java.util.StringTokenizer; -import java.util.List; - -import edu.cmu.sphinx.linguist.acoustic.Context; -import edu.cmu.sphinx.linguist.acoustic.Unit; -import edu.cmu.sphinx.linguist.acoustic.UnitManager; -import edu.cmu.sphinx.util.props.ConfigurationManagerUtils; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4String; - -/** - * Maps the phones from one phoneset to another to use dictionary from the one - * acoustic mode with another one. The mapping file is specified with a mapList - * property. The contents should look like - * - *
    - * AX AH
    - * IX IH
    - * 
    - */ -public class MappingDictionary extends TextDictionary implements Dictionary { - - @S4String(mandatory = true, defaultValue = "") - public static final String PROP_MAP_FILE = "mapFile"; - - private URL mappingFile; - private final Map mapping = new HashMap(); - - public MappingDictionary(URL mappingFile, URL wordDictionaryFile, URL fillerDictionaryFile, List addendaUrlList, - String wordReplacement, UnitManager unitManager) { - super(wordDictionaryFile, fillerDictionaryFile, addendaUrlList, wordReplacement, unitManager); - this.mappingFile = mappingFile; - } - - public MappingDictionary() { - - } - - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - - mappingFile = ConfigurationManagerUtils.getResource(PROP_MAP_FILE, ps); - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.linguist.dictionary.Dictionary#allocate() - */ - @Override - public void allocate() throws IOException { - super.allocate(); - if (!mappingFile.getFile().equals("")) - loadMapping(mappingFile.openStream()); - } - - /** - * Gets a context independent unit. There should only be one instance of any - * CI unit - * - * - * the name of the unit - * - * if true, the unit is a filler unit - * - * @return the unit - */ - @Override - protected Unit getCIUnit(String name, boolean isFiller) { - if (mapping.containsKey(name)) { - name = mapping.get(name); - } - return unitManager.getUnit(name, isFiller, Context.EMPTY_CONTEXT); - } - - protected void loadMapping(InputStream inputStream) throws IOException { - InputStreamReader isr = new InputStreamReader(inputStream); - BufferedReader br = new BufferedReader(isr); - String line; - while ((line = br.readLine()) != null) { - StringTokenizer st = new StringTokenizer(line); - if (st.countTokens() != 2) { - throw new IOException("Wrong file format"); - } - mapping.put(st.nextToken(), st.nextToken()); - } - br.close(); - isr.close(); - inputStream.close(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dictionary/Pronunciation.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dictionary/Pronunciation.java deleted file mode 100755 index 71a021ea..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dictionary/Pronunciation.java +++ /dev/null @@ -1,169 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.dictionary; - -import java.util.List; - -import edu.cmu.sphinx.linguist.acoustic.Unit; - - -/** Provides pronunciation information for a word. */ -public class Pronunciation { - - public static final Pronunciation UNKNOWN = new Pronunciation(Unit.EMPTY_ARRAY, null, 1.0f); - - private Word word; - private final Unit[] units; - private final String tag; - private final float probability; - - - /** - * Creates a pronunciation - * - * @param units represents the pronunciation - * @param tag a grammar specific tag - * @param probability the probability of this pronunciation occurring - */ - public Pronunciation(Unit[] units, - String tag, - float probability) { - this.units = units; - this.tag = tag; - this.probability = probability; - } - - /** - * Creates a pronunciation - * - * @param units represents the pronunciation - * @param tag a grammar specific tag - * @param probability the probability of this pronunciation occurring - */ - protected Pronunciation(List units, - String tag, - float probability) { - Unit[] unitsArray = units.toArray(new Unit[units.size()]); - this.units = unitsArray; - this.tag = tag; - this.probability = probability; - } - - /** - * Creates a pronunciation with defaults - * - * @param units represents the pronunciation - */ - protected Pronunciation(List units) { - this(units, null, 1.0f); - } - - - /** - * Sets the word this pronunciation represents. - * - * @param word the Word this Pronunciation represents - */ - public void setWord(Word word) { - if (this.word == null) { - this.word = word; - } else { - throw new Error("Word of Pronunciation cannot be set twice."); - } - } - - - /** - * Retrieves the word that this Pronunciation object represents. - * - * @return the word - */ - public Word getWord() { - return word; - } - - - /** - * Retrieves the units for this pronunciation - * - * @return the units for this pronunciation - */ - public Unit[] getUnits() { - return units; - } - - - /** - * Retrieves the tag associated with the pronunciation or null if there is no tag associated with this - * pronunciation. Pronunciations can optionally be tagged to allow applications to distinguish between different - * pronunciations. - * - * @return the tag or null if no tag is available. - */ - public String getTag() { - return tag; - } - - - /** - * Retrieves the probability for the pronunciation. A word may have multiple pronunciations that are not all equally - * probable. All probabilities for particular word sum to 1.0. - * - * @return the probability of this pronunciation as a value between 0 and 1.0. - *

    - * TODO: FIX Note that probabilities are currently maintained in the linear domain (unlike just about - * everything else) - */ - public float getProbability() { - return probability; - } - - - /** Dumps a pronunciation */ - public void dump() { - System.out.println(toString()); - } - - - /** - * Returns a string representation of this Pronunication. - * - * @return a string of this Pronunciation - */ - @Override - public String toString() { - StringBuilder result = new StringBuilder().append(word).append('('); - for (Unit unit : units) { - result.append(unit).append(' '); - } - result.append(')'); - return result.toString(); - } - - - /** - * Returns a detailed string representation of this Pronunciation. - * - * @return a string of this Pronunciation - */ - public String toDetailedString() { - StringBuilder result = new StringBuilder().append(word).append(' '); - for (Unit unit : units) { - result.append(unit).append(' '); - } - result.append("\n class: ").append(" tag: ").append(tag).append(" prob: ").append(probability); - - return result.toString(); - } -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dictionary/TextDictionary.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dictionary/TextDictionary.java deleted file mode 100755 index f71296a6..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dictionary/TextDictionary.java +++ /dev/null @@ -1,487 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.dictionary; - -import edu.cmu.sphinx.linguist.acoustic.Context; -import edu.cmu.sphinx.linguist.acoustic.Unit; -import edu.cmu.sphinx.linguist.acoustic.UnitManager; -import edu.cmu.sphinx.linguist.g2p.G2PConverter; -import edu.cmu.sphinx.linguist.g2p.Path; -import edu.cmu.sphinx.util.Timer; -import edu.cmu.sphinx.util.TimerPool; -import edu.cmu.sphinx.util.props.ConfigurationManagerUtils; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.*; -import java.util.logging.Logger; - -/** - * Creates a dictionary by quickly reading in an ASCII-based Sphinx-3 format - * dictionary. When loaded the dictionary just loads each line of the dictionary - * into the hash table, assuming that most words are not going to be used. Only - * when a word is actually used is its pronunciations massaged into an array of - * pronunciations. - *

    - * The format of the ASCII dictionary is the word, followed by spaces or tab, - * followed by the pronunciation(s). For example, a digits dictionary will look - * like: - *

    - *  ONE HH W AH N
    - *  ONE(2) W AH N
    - *  TWO T UW
    - *  THREE TH R IY
    - *  FOUR F AO R
    - *  FIVE F AY V
    - *  SIX S IH K S
    - *  SEVEN S EH V AH N
    - *  EIGHT EY T
    - *  NINE N AY N
    - *  ZERO Z IH R OW
    - *  ZERO(2) Z IY R OW
    - *  OH OW
    - * 
    - * In the above example, the words "one" and "zero" have two pronunciations - * each. - */ - -public class TextDictionary implements Dictionary { - - // ------------------------------- - // Configuration data - // -------------------------------- - protected Logger logger; - - protected URL wordDictionaryFile; - protected URL fillerDictionaryFile; - protected List addendaUrlList; - - // Replacement to use if word is missing - private String wordReplacement; - - // G2P model to use if word replacement is not specified and word is missing - protected URL g2pModelFile; - protected int g2pMaxPron = 0; - - protected UnitManager unitManager; - - // ------------------------------- - // working data - // ------------------------------- - protected Map dictionary; - protected Map wordDictionary; - protected G2PConverter g2pDecoder; - - protected final static String FILLER_TAG = "-F-"; - protected Set fillerWords; - protected boolean allocated; - - public TextDictionary(String wordDictionaryFile, String fillerDictionaryFile, List addendaUrlList, - boolean addSilEndingPronunciation, String wordReplacement, UnitManager unitManager) throws MalformedURLException, - ClassNotFoundException { - this(ConfigurationManagerUtils.resourceToURL(wordDictionaryFile), ConfigurationManagerUtils - .resourceToURL(fillerDictionaryFile), addendaUrlList, wordReplacement, unitManager); - } - - public TextDictionary(URL wordDictionaryFile, URL fillerDictionaryFile, List addendaUrlList, String wordReplacement, - UnitManager unitManager) { - this.logger = Logger.getLogger(getClass().getName()); - - this.wordDictionaryFile = wordDictionaryFile; - this.fillerDictionaryFile = fillerDictionaryFile; - this.addendaUrlList = addendaUrlList; - this.wordReplacement = wordReplacement; - this.unitManager = unitManager; - } - - public TextDictionary(URL wordDictionaryFile, URL fillerDictionaryFile, List addendaUrlList, - boolean addSilEndingPronunciation, String wordReplacement, UnitManager unitManager, URL g2pModelFile, int g2pMaxPron) { - this(wordDictionaryFile, fillerDictionaryFile, addendaUrlList, wordReplacement, unitManager); - this.g2pModelFile = g2pModelFile; - this.g2pMaxPron = g2pMaxPron; - } - - public TextDictionary() { - - } - - /* - * (non-Javadoc) - * - * @see - * edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util - * .props.PropertySheet) - */ - - public void newProperties(PropertySheet ps) throws PropertyException { - logger = ps.getLogger(); - - wordDictionaryFile = ConfigurationManagerUtils.getResource(PROP_DICTIONARY, ps); - fillerDictionaryFile = ConfigurationManagerUtils.getResource(PROP_FILLER_DICTIONARY, ps); - addendaUrlList = ps.getResourceList(PROP_ADDENDA); - wordReplacement = ps.getString(Dictionary.PROP_WORD_REPLACEMENT); - unitManager = (UnitManager) ps.getComponent(PROP_UNIT_MANAGER); - g2pModelFile = ConfigurationManagerUtils.getResource(PROP_G2P_MODEL_PATH, ps); - g2pMaxPron = ps.getInt(PROP_G2P_MAX_PRONUNCIATIONS); - } - - /** - * Get the word dictionary file - * - * @return the URL of the word dictionary file - */ - public URL getWordDictionaryFile() { - return wordDictionaryFile; - } - - /** - * Get the filler dictionary file - * - * @return the URL of the filler dictionary file - */ - public URL getFillerDictionaryFile() { - return fillerDictionaryFile; - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.linguist.dictionary.Dictionary#allocate() - */ - - public void allocate() throws IOException { - if (!allocated) { - dictionary = new HashMap(); - wordDictionary = new HashMap(); - - Timer loadTimer = TimerPool.getTimer(this, "Load Dictionary"); - fillerWords = new HashSet(); - - loadTimer.start(); - - logger.info("Loading dictionary from: " + wordDictionaryFile); - - loadDictionary(wordDictionaryFile.openStream(), false); - - loadCustomDictionaries(addendaUrlList); - - logger.info("Loading filler dictionary from: " + fillerDictionaryFile); - - loadDictionary(fillerDictionaryFile.openStream(), true); - - if (g2pModelFile != null && !g2pModelFile.getPath().equals("")) { - g2pDecoder = new G2PConverter(g2pModelFile); - } - loadTimer.stop(); - } - - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.linguist.dictionary.Dictionary#deallocate() - */ - - public void deallocate() { - if (allocated) { - dictionary = null; - g2pDecoder = null; - allocated = false; - } - } - - /** - * Loads the given simple dictionary from the given InputStream. The - * InputStream is assumed to contain ASCII data. - * - * @param inputStream - * the InputStream of the dictionary - * @param isFillerDict - * true if this is a filler dictionary, false otherwise - * @throws java.io.IOException - * if there is an error reading the dictionary - */ - protected void loadDictionary(InputStream inputStream, boolean isFillerDict) throws IOException { - InputStreamReader isr = new InputStreamReader(inputStream); - BufferedReader br = new BufferedReader(isr); - String line; - - while ((line = br.readLine()) != null) { - line = line.trim(); - if (line.isEmpty()) { - continue; - } - int spaceIndex = getSpaceIndex(line); - if (spaceIndex < 0) { - throw new Error("Error loading word: " + line); - } - String word = line.substring(0, spaceIndex); - - // Add numeric index if the word is repeating. - if (dictionary.containsKey(word)) { - int index = 2; - String wordWithIdx; - do { - wordWithIdx = String.format("%s(%d)", word, index++); - } while (dictionary.containsKey(wordWithIdx)); - word = wordWithIdx; - } - - if (isFillerDict) { - dictionary.put(word, (FILLER_TAG + line)); - fillerWords.add(word); - } else { - dictionary.put(word, line); - } - } - - br.close(); - isr.close(); - inputStream.close(); - } - - private int getSpaceIndex(String line) { - for (int i = 0; i < line.length(); i++) { - if (line.charAt(i) == ' ' || line.charAt(i) == '\t') - return i; - } - return -1; - } - - /** - * Gets a context independent unit. There should only be one instance of any - * CI unit - * - * @param name - * the name of the unit - * @param isFiller - * if true, the unit is a filler unit - * @return the unit - */ - protected Unit getCIUnit(String name, boolean isFiller) { - return unitManager.getUnit(name, isFiller, Context.EMPTY_CONTEXT); - } - - /** - * Returns the sentence start word. - * - * @return the sentence start word - */ - public Word getSentenceStartWord() { - return getWord(SENTENCE_START_SPELLING); - } - - /** - * Returns the sentence end word. - * - * @return the sentence end word - */ - public Word getSentenceEndWord() { - return getWord(SENTENCE_END_SPELLING); - } - - /** - * Returns the silence word. - * - * @return the silence word - */ - public Word getSilenceWord() { - return getWord(SILENCE_SPELLING); - } - - /** - * Returns a Word object based on the spelling and its classification. The - * behavior of this method is also affected by the properties - * wordReplacement and g2pModel - * - * @param text - * the spelling of the word of interest. - * @return a Word object - * @see edu.cmu.sphinx.linguist.dictionary.Word - */ - public Word getWord(String text) { - Word wordObject = wordDictionary.get(text); - - if (wordObject != null) { - return wordObject; - } - - String word = dictionary.get(text); - if (word == null) { // deal with 'not found' case - logger.info("The dictionary is missing a phonetic transcription for the word '" + text + "'"); - if (wordReplacement != null) { - wordObject = getWord(wordReplacement); - } else if (g2pModelFile != null && !g2pModelFile.getPath().equals("")) { - logger.info("Generating phonetic transcription(s) for the word '" + text + "' using g2p model"); - wordObject = extractPronunciation(text); - wordDictionary.put(text, wordObject); - } - } else { // first lookup for this string - wordObject = processEntry(text); - } - - return wordObject; - } - - private Word extractPronunciation(String text) { - Word wordObject; - ArrayList paths = g2pDecoder.phoneticize(text, g2pMaxPron); - List pronunciations = new LinkedList(); - for (Path p : paths) { - int unitCount = p.getPath().size(); - ArrayList units = new ArrayList(unitCount); - for (String token : p.getPath()) { - units.add(getCIUnit(token, false)); - } - if (units.size() == 0) { - units.add(UnitManager.SILENCE); - } - pronunciations.add(new Pronunciation(units)); - } - Pronunciation[] pronunciationsArray = pronunciations.toArray(new Pronunciation[pronunciations.size()]); - wordObject = createWord(text, pronunciationsArray, false); - for (Pronunciation pronunciation : pronunciationsArray) { - pronunciation.setWord(wordObject); - } - return wordObject; - } - - /** - * Create a Word object with the given spelling and pronunciations, and - * insert it into the dictionary. - * - * @param text - * the spelling of the word - * @param pronunciation - * the pronunciation of the word - * @param isFiller - * if true this is a filler word - * @return the word - */ - private Word createWord(String text, Pronunciation[] pronunciation, boolean isFiller) { - Word word = new Word(text, pronunciation, isFiller); - dictionary.put(text, word.toString()); - return word; - } - - /** - * Processes a dictionary entry. When loaded the dictionary just loads each - * line of the dictionary into the hash table, assuming that most words are - * not going to be used. Only when a word is actually used is its - * pronunciations massaged into an array of pronunciations. - */ - private Word processEntry(String word) { - List pronunciations = new LinkedList(); - String line; - int count = 0; - boolean isFiller = false; - - do { - count++; - String lookupWord = word; - if (count > 1) { - lookupWord = lookupWord + '(' + count + ')'; - } - line = dictionary.get(lookupWord); - if (line != null) { - StringTokenizer st = new StringTokenizer(line); - - String tag = st.nextToken(); - isFiller = tag.startsWith(FILLER_TAG); - int unitCount = st.countTokens(); - - ArrayList units = new ArrayList(unitCount); - for (int i = 0; i < unitCount; i++) { - String unitName = st.nextToken(); - units.add(getCIUnit(unitName, isFiller)); - } - pronunciations.add(new Pronunciation(units)); - } - } while (line != null); - - Pronunciation[] pronunciationsArray = pronunciations.toArray(new Pronunciation[pronunciations.size()]); - Word wordObject = createWord(word, pronunciationsArray, isFiller); - - for (Pronunciation pronunciation : pronunciationsArray) { - pronunciation.setWord(wordObject); - } - wordDictionary.put(word, wordObject); - - return wordObject; - } - - /** - * Returns a string representation of this TextDictionary in alphabetical - * order. - * - * @return a string representation of this dictionary - */ - @Override - public String toString() { - SortedMap sorted = new TreeMap(dictionary); - StringBuilder result = new StringBuilder(); - - for (Map.Entry entry : sorted.entrySet()) { - result.append(entry.getKey()); - result.append(" ").append(entry.getValue()).append('\n'); - } - - return result.toString(); - } - - /** - * Gets the set of all filler words in the dictionary - * - * @return an array (possibly empty) of all filler words - */ - public Word[] getFillerWords() { - Word[] fillerWordArray = new Word[fillerWords.size()]; - int index = 0; - for (String spelling : fillerWords) { - fillerWordArray[index++] = getWord(spelling); - } - return fillerWordArray; - } - - /** - * Dumps this FastDictionary to System.out. - */ - public void dump() { - System.out.print(toString()); - } - - /** - * Loads the dictionary with a list of URLs to custom dictionary resources - * - * @param addenda - * the list of custom dictionary URLs to be loaded - * @throws IOException - * if there is an error reading the resource URL - */ - private void loadCustomDictionaries(List addenda) throws IOException { - if (addenda != null) { - for (URL addendumUrl : addenda) { - logger.info("Loading addendum dictionary from: " + addendumUrl); - loadDictionary(addendumUrl.openStream(), false); - } - } - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dictionary/Word.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dictionary/Word.java deleted file mode 100755 index 791798a9..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/dictionary/Word.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.dictionary; - -/** Represents a word, its spelling and its pronunciation. */ -public class Word implements Comparable { - - /** The Word representing the unknown word. */ - public static final Word UNKNOWN; - - static { - Pronunciation[] pros = {Pronunciation.UNKNOWN}; - UNKNOWN = new Word("", pros, false); - Pronunciation.UNKNOWN.setWord(UNKNOWN); - } - - private final String spelling; // the spelling of the word - private final Pronunciation[] pronunciations; // pronunciations of this - // word - private final boolean isFiller; - - /** - * Creates a Word - * - * @param spelling the spelling of this word - * @param pronunciations the pronunciations of this word - * @param isFiller true if the word is a filler word - */ - public Word(String spelling, Pronunciation[] pronunciations, - boolean isFiller) { - this.spelling = spelling; - this.pronunciations = pronunciations; - this.isFiller = isFiller; - } - - /** - * Returns the spelling of the word. - * - * @return the spelling of the word - */ - public String getSpelling() { - return spelling; - } - - /** - * Determines if this is a filler word - * - * @return true if this word is a filler word, otherwise it - * returns false - */ - public boolean isFiller() { - return isFiller; - } - - /** - * Returns true if this word is an end of sentence word - * - * @return true if the word matches Dictionary.SENTENCE_END_SPELLING - */ - public boolean isSentenceEndWord() { - return Dictionary.SENTENCE_END_SPELLING.equals(this.spelling); - } - - /** - * Returns true if this word is a start of sentence word - * - * @return true if the word matches Dictionary.SENTENCE_START_SPELLING - */ - public boolean isSentenceStartWord() { - return Dictionary.SENTENCE_START_SPELLING.equals(this.spelling); - } - - /** - * Retrieves the pronunciations of this word - * - * @return the pronunciations of this word - */ - public Pronunciation[] getPronunciations() { - return pronunciations; - } - - /** - * Get the highest probability pronunciation for a word - * - * @return the highest probability pronunciation - */ - public Pronunciation getMostLikelyPronunciation() { - float bestScore = Float.NEGATIVE_INFINITY; - Pronunciation best = null; - for (Pronunciation pronunciation : pronunciations) { - if (pronunciation.getProbability() > bestScore) { - bestScore = pronunciation.getProbability(); - best = pronunciation; - } - } - return best; - } - - @Override - public int hashCode() { - return spelling.hashCode(); - } - - @Override - public boolean equals(Object obj) { - return obj instanceof Word && spelling.equals(((Word) obj).spelling); - - } - - /** - * Returns a string representation of this word, which is the spelling - * - * @return the spelling of this word - */ - @Override - public String toString() { - return spelling; - } - - public int compareTo(Word other) { - return getSpelling().compareTo(other.getSpelling()); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/AlternativeState.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/AlternativeState.java deleted file mode 100755 index 80b74c93..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/AlternativeState.java +++ /dev/null @@ -1,68 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.flat; - -import edu.cmu.sphinx.linguist.dictionary.Word; - -import java.io.Serializable; - -/** Represents a set of alternatives in an SentenceHMMS */ - -@SuppressWarnings("serial") -public class AlternativeState extends SentenceHMMState - implements Serializable { - - /** Creates a WordState - * @param parent parent item - * @param which state number - **/ - public AlternativeState(GrammarState parent, int which) { - super("A", parent, which); - } - - - /** - * Gets the word associated with this state - * - * @return the word - */ - public Word[] getAlternative() { - return ((GrammarState) getParent()) - .getGrammarNode().getWords(getWhich()); - } - - - /** - * Retrieves a short label describing the type of this state. Typically, subclasses of SentenceHMMState will - * implement this method and return a short (5 chars or less) label - * - * @return the short label. - */ - @Override - public String getTypeLabel() { - return "Alt"; - } - - - /** - * Returns the state order for this state type - * - * @return the state order - */ - @Override - public int getOrder() { - return 1; - } -} - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/BranchState.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/BranchState.java deleted file mode 100755 index 6b9a12ff..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/BranchState.java +++ /dev/null @@ -1,43 +0,0 @@ -package edu.cmu.sphinx.linguist.flat; - - -/** Represents a branching node in a grammar */ - -@SuppressWarnings("serial") -public class BranchState extends SentenceHMMState { - - /** - * Creates a branch state - * - * @param leftContext left context - * @param rightContext right context - * @param nodeID the grammar node id - */ - public BranchState(String leftContext, String rightContext, int nodeID) { - super("B[" + leftContext + "," + - rightContext + "]", null, nodeID); - } - - - /** - * Retrieves a short label describing the type of this state. Typically, subclasses of SentenceHMMState will - * implement this method and return a short (5 chars or less) label - * - * @return the short label. - */ - @Override - public String getTypeLabel() { - return "Brnch"; - } - - - /** - * Returns the state order for this state type - * - * @return the state order - */ - @Override - public int getOrder() { - return 2; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/CIPhoneLoop.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/CIPhoneLoop.java deleted file mode 100755 index 0b1440fa..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/CIPhoneLoop.java +++ /dev/null @@ -1,258 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.flat; - -import edu.cmu.sphinx.linguist.SearchGraph; -import edu.cmu.sphinx.linguist.SearchState; -import edu.cmu.sphinx.linguist.WordSearchState; -import edu.cmu.sphinx.linguist.acoustic.*; -import edu.cmu.sphinx.linguist.dictionary.Pronunciation; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.util.LogMath; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - -/** - * Constructs a loop of all the context-independent phones. This loop is used in the static flat linguist for detecting - * out-of-grammar utterances. A 'phoneInsertionProbability' will be added to the score each time a new phone is entered. - * To obtain the all-phone search graph loop, simply called the method {@link #getSearchGraph() getSearchGraph}. - *

    - * For futher details of this approach cf. 'Modeling Out-of-vocabulary Words for Robust Speech Recognition', Brazzi, - * 2000, Proc. ICSLP - */ -public class CIPhoneLoop { - - public final AcousticModel model; - private final float logPhoneInsertionProbability; - public final float logOne = LogMath.LOG_ONE; - - - /** - * Creates the CIPhoneLoop with the given acoustic model and phone insertion probability - * - * @param model the acoustic model - * @param logPhoneInsertionProbability the insertion probability - */ - public CIPhoneLoop(AcousticModel model, - float logPhoneInsertionProbability) { - this.model = model; - this.logPhoneInsertionProbability = - logPhoneInsertionProbability; - } - - - /** - * Creates a new loop of all the context-independent phones. - * - * @return the phone loop search graph - */ - public SearchGraph getSearchGraph() { - return new PhoneLoopSearchGraph(); - } - - - protected class PhoneLoopSearchGraph implements SearchGraph { - - protected final Map existingStates; - protected final SentenceHMMState firstState; - - - /** Constructs a phone loop search graph. */ - public PhoneLoopSearchGraph() { - existingStates = new HashMap(); - firstState = new UnknownWordState(); - SentenceHMMState branchState = new BranchOutState(firstState); - attachState(firstState, branchState, logOne, logOne); - - SentenceHMMState lastState = new LoopBackState(firstState); - lastState.setFinalState(true); - attachState(lastState, branchState, logOne, logOne); - - for (Iterator i = model.getContextIndependentUnitIterator(); i.hasNext();) { - UnitState unitState = new UnitState(i.next(), HMMPosition.UNDEFINED); - - // attach unit state to the branch out state - attachState(branchState, unitState, logOne, - logPhoneInsertionProbability); - - HMM hmm = model.lookupNearestHMM - (unitState.getUnit(), unitState.getPosition(), false); - HMMState initialState = hmm.getInitialState(); - HMMStateState hmmTree = new HMMStateState(unitState, initialState); - addStateToCache(hmmTree); - - // attach first HMM state to the unit state - attachState(unitState, hmmTree, logOne, logOne); - - // expand the HMM tree - HMMStateState finalState = expandHMMTree(unitState, hmmTree); - - // attach final state of HMM tree to the loopback state - attachState(finalState, lastState, logOne, logOne); - } - } - - - /** - * Retrieves initial search state - * - * @return the set of initial search state - */ - public SearchState getInitialState() { - return firstState; - } - - - /** - * Returns the number of different state types maintained in the search graph - * - * @return the number of different state types - */ - public int getNumStateOrder() { - return 5; - } - - public boolean getWordTokenFirst() { - return false; - } - - /** - * Checks to see if a state that matches the given state already exists - * - * @param state the state to check - * @return true if a state with an identical signature already exists. - */ - private SentenceHMMState getExistingState(SentenceHMMState state) { - return (SentenceHMMState) existingStates.get(state.getSignature()); - } - - - /** - * Adds the given state to the cache of states - * - * @param state the state to add - */ - protected void addStateToCache(SentenceHMMState state) { - existingStates.put(state.getSignature(), state); - } - - - /** - * Expands the given hmm state tree - * - * @param parent the parent of the tree - * @param tree the tree to expand - * @return the final state in the tree - */ - protected HMMStateState expandHMMTree(UnitState parent, - HMMStateState tree) { - HMMStateState retState = tree; - for (HMMStateArc arc : tree.getHMMState().getSuccessors()) { - HMMStateState newState; - if (arc.getHMMState().isEmitting()) { - newState = new HMMStateState - (parent, arc.getHMMState()); - } else { - newState = new NonEmittingHMMState - (parent, arc.getHMMState()); - } - SentenceHMMState existingState = getExistingState(newState); - float logProb = arc.getLogProbability(); - if (existingState != null) { - attachState(tree, existingState, logOne, logProb); - } else { - attachState(tree, newState, logOne, logProb); - addStateToCache(newState); - retState = expandHMMTree(parent, newState); - } - } - return retState; - } - - - protected void attachState(SentenceHMMState prevState, - SentenceHMMState nextState, - float logLanguageProbability, - float logInsertionProbability) { - SentenceHMMStateArc arc = new SentenceHMMStateArc - (nextState, - logLanguageProbability, - logInsertionProbability); - prevState.connect(arc); - } - } -} - -@SuppressWarnings("serial") -class UnknownWordState extends SentenceHMMState implements WordSearchState { - - public Pronunciation getPronunciation() { - return Word.UNKNOWN.getPronunciations()[0]; - } - - - @Override - public int getOrder() { - return 0; - } - - - @Override - public String getName() { - return "UnknownWordState"; - } - - - /** - * Returns true if this UnknownWordState indicates the start of a word. Returns false if this UnknownWordState - * indicates the end of a word. - * - * @return true if this UnknownWordState indicates the start of a word, false if this UnknownWordState indicates the - * end of a word - */ - @Override - public boolean isWordStart() { - return true; - } -} - -@SuppressWarnings("serial") -class LoopBackState extends SentenceHMMState { - - LoopBackState(SentenceHMMState parent) { - super("CIPhonesLoopBackState", parent, 0); - } - - - @Override - public int getOrder() { - return 1; - } -} - -@SuppressWarnings("serial") -class BranchOutState extends SentenceHMMState { - - BranchOutState(SentenceHMMState parent) { - super("BranchOutState", parent, 0); - } - - - @Override - public int getOrder() { - return 1; - } -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/ExtendedUnitState.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/ExtendedUnitState.java deleted file mode 100755 index 4f65e662..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/ExtendedUnitState.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.flat; - -import edu.cmu.sphinx.linguist.acoustic.Unit; - -/** - * A unit state that modifies how the unit state is cached. Caching keys are generated from the full name for the - * sentence hmm. The default behavior for the unit (and all sentence hmms) is to generate the full name by combining the - * name for this unit with the name of the parent. For the simple linguist, this is undesirable, because there are many - * different names for the parent pronunciations (differing contexts). We want to be able to combine units that have - * identical names and context and are in the same position in the same pronunciation. By defining getFullName to - * combine the name and the pronunciation index we allow units with identical contexts in the same position in a - * pronunciation to be combined. - */ -@SuppressWarnings("serial") -public class ExtendedUnitState extends UnitState { - - /** - * Creates a UnitState. Gets the left and right contexts from the unit itself. - * - * @param parent the parent state - * @param which the index of the given state - * @param unit the unit associated with this state - */ - public ExtendedUnitState(PronunciationState parent, int which, Unit unit) { - super(parent, which, unit); - } - - - /** - * Gets the fullName for this state - * - * @return the full name for this state - */ - @Override - public String getFullName() { - return getName() + " in P" + getParent().getWhich(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/FlatLinguist.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/FlatLinguist.java deleted file mode 100755 index 0b6cf1b8..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/FlatLinguist.java +++ /dev/null @@ -1,1638 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist.flat; - -import edu.cmu.sphinx.linguist.Linguist; -import edu.cmu.sphinx.linguist.SearchGraph; -import edu.cmu.sphinx.linguist.SearchState; -import edu.cmu.sphinx.linguist.SearchStateArc; -import edu.cmu.sphinx.linguist.acoustic.*; -import edu.cmu.sphinx.linguist.dictionary.Dictionary; -import edu.cmu.sphinx.linguist.dictionary.Pronunciation; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.linguist.language.grammar.Grammar; -import edu.cmu.sphinx.linguist.language.grammar.GrammarArc; -import edu.cmu.sphinx.linguist.language.grammar.GrammarNode; -import edu.cmu.sphinx.util.Cache; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.StatisticsVariable; -import edu.cmu.sphinx.util.TimerPool; -import edu.cmu.sphinx.util.props.*; - -import java.io.IOException; -import java.util.*; - -/** - * A simple form of the linguist. - *

    - * The flat linguist takes a Grammar graph (as returned by the underlying, configurable grammar), and generates a search - * graph for this grammar. - *

    - * It makes the following simplifying assumptions: - *

    • Zero or one word per grammar node
    • No fan-in allowed ever
    • No composites (yet)
    • Only Unit, - * HMMState, and pronunciation states (and the initial/final grammar state are in the graph (no word, alternative or - * grammar states attached).
    • Only valid transitions (matching contexts) are allowed
    • No tree organization of - * units
    • Branching grammar states are allowed
    - * Note that all probabilities are maintained in the log math domain - */ -public class FlatLinguist implements Linguist, Configurable { - - /** - * The property used to define the grammar to use when building the search graph - */ - @S4Component(type = Grammar.class) - public final static String PROP_GRAMMAR = "grammar"; - - /** - * The property used to define the unit manager to use when building the search graph - */ - @S4Component(type = UnitManager.class) - public final static String PROP_UNIT_MANAGER = "unitManager"; - - /** - * The property used to define the acoustic model to use when building the search graph - */ - @S4Component(type = AcousticModel.class) - public final static String PROP_ACOUSTIC_MODEL = "acousticModel"; - - /** - * The property used to determine whether or not the gstates are dumped. - */ - @S4Boolean(defaultValue = false) - public final static String PROP_DUMP_GSTATES = "dumpGstates"; - - /** - * The property that specifies whether to add a branch for detecting out-of-grammar utterances. - */ - @S4Boolean(defaultValue = false) - public final static String PROP_ADD_OUT_OF_GRAMMAR_BRANCH = "addOutOfGrammarBranch"; - - /** - * The property for the probability of entering the out-of-grammar branch. - */ - @S4Double(defaultValue = 1.0) - public final static String PROP_OUT_OF_GRAMMAR_PROBABILITY = "outOfGrammarProbability"; - - /** - * The property for the acoustic model used for the CI phone loop. - */ - @S4Component(type = AcousticModel.class) - public static final String PROP_PHONE_LOOP_ACOUSTIC_MODEL = "phoneLoopAcousticModel"; - - /** - * The property for the probability of inserting a CI phone in the out-of-grammar ci phone loop - */ - @S4Double(defaultValue = 1.0) - public static final String PROP_PHONE_INSERTION_PROBABILITY = "phoneInsertionProbability"; - - /** - * Property to control whether compilation progress is displayed on standard output. - * If this property is true, a 'dot' is displayed for every 1000 search states added - * to the search space - */ - @S4Boolean(defaultValue = false) - public final static String PROP_SHOW_COMPILATION_PROGRESS = "showCompilationProgress"; - - /** - * Property that controls whether word probabilities are spread across all pronunciations. - */ - @S4Boolean(defaultValue = false) - public final static String PROP_SPREAD_WORD_PROBABILITIES_ACROSS_PRONUNCIATIONS = - "spreadWordProbabilitiesAcrossPronunciations"; - - protected final static float logOne = LogMath.LOG_ONE; - - // note: some fields are protected to allow to override FlatLinguist.compileGrammar() - - // ---------------------------------- - // Subcomponents that are configured - // by the property sheet - // ----------------------------------- - protected Grammar grammar; - private AcousticModel acousticModel; - private UnitManager unitManager; - protected LogMath logMath; - - // ------------------------------------ - // Fields that define the OOV-behavior - // ------------------------------------ - protected AcousticModel phoneLoopAcousticModel; - protected boolean addOutOfGrammarBranch; - protected float logOutOfGrammarBranchProbability; - protected float logPhoneInsertionProbability; - - // ------------------------------------ - // Data that is configured by the - // property sheet - // ------------------------------------ - private float logWordInsertionProbability; - private float logSilenceInsertionProbability; - private float logFillerInsertionProbability; - private float logUnitInsertionProbability; - private boolean showCompilationProgress = true; - private boolean spreadWordProbabilitiesAcrossPronunciations; - private boolean dumpGStates; - private float languageWeight; - - // ----------------------------------- - // Data for monitoring performance - // ------------------------------------ - protected StatisticsVariable totalStates; - protected StatisticsVariable totalArcs; - protected StatisticsVariable actualArcs; - private transient int totalStateCounter; - private final static boolean tracing = false; - - // ------------------------------------ - // Data used for building and maintaining - // the search graph - // ------------------------------------- - private transient Collection stateSet; - private String name; - protected Map nodeStateMap; - protected Cache arcPool; - protected GrammarNode initialGrammarState; - - protected SearchGraph searchGraph; - - - /** - * Returns the search graph - * - * @return the search graph - */ - public SearchGraph getSearchGraph() { - return searchGraph; - } - - public FlatLinguist(AcousticModel acousticModel, Grammar grammar, UnitManager unitManager, - double wordInsertionProbability, double silenceInsertionProbability, double fillerInsertionProbability, - double unitInsertionProbability, float languageWeight, boolean dumpGStates, boolean showCompilationProgress, - boolean spreadWordProbabilitiesAcrossPronunciations, boolean addOutOfGrammarBranch, - double outOfGrammarBranchProbability, double phoneInsertionProbability, AcousticModel phoneLoopAcousticModel ) { - - this.acousticModel = acousticModel; - this.logMath = LogMath.getLogMath(); - this.grammar = grammar; - this.unitManager = unitManager; - - this.logWordInsertionProbability = logMath.linearToLog(wordInsertionProbability); - this.logSilenceInsertionProbability = logMath.linearToLog(silenceInsertionProbability); - this.logFillerInsertionProbability = logMath.linearToLog(fillerInsertionProbability); - this.logUnitInsertionProbability = logMath.linearToLog(unitInsertionProbability); - this.languageWeight = languageWeight; - - this.dumpGStates = dumpGStates; - this.showCompilationProgress = showCompilationProgress; - this.spreadWordProbabilitiesAcrossPronunciations = spreadWordProbabilitiesAcrossPronunciations; - - this.addOutOfGrammarBranch = addOutOfGrammarBranch; - - if (addOutOfGrammarBranch) { - this.logOutOfGrammarBranchProbability = logMath.linearToLog(outOfGrammarBranchProbability); - this.logPhoneInsertionProbability = logMath.linearToLog(phoneInsertionProbability); - this.phoneLoopAcousticModel = phoneLoopAcousticModel; - } - - this.name = null; - } - - public FlatLinguist() { - - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - public void newProperties(PropertySheet ps) throws PropertyException { - logMath = LogMath.getLogMath(); - - acousticModel = (AcousticModel) ps.getComponent(PROP_ACOUSTIC_MODEL); - grammar = (Grammar) ps.getComponent(PROP_GRAMMAR); - unitManager = (UnitManager) ps.getComponent(PROP_UNIT_MANAGER); - - // get the rest of the configuration data - logWordInsertionProbability = logMath.linearToLog(ps.getDouble(PROP_WORD_INSERTION_PROBABILITY)); - logSilenceInsertionProbability = logMath.linearToLog(ps.getDouble(PROP_SILENCE_INSERTION_PROBABILITY)); - logFillerInsertionProbability = logMath.linearToLog(ps.getDouble(PROP_FILLER_INSERTION_PROBABILITY)); - logUnitInsertionProbability = logMath.linearToLog(ps.getDouble(PROP_UNIT_INSERTION_PROBABILITY)); - languageWeight = ps.getFloat(Linguist.PROP_LANGUAGE_WEIGHT); - dumpGStates = ps.getBoolean(PROP_DUMP_GSTATES); - showCompilationProgress = ps.getBoolean(PROP_SHOW_COMPILATION_PROGRESS); - spreadWordProbabilitiesAcrossPronunciations = ps.getBoolean(PROP_SPREAD_WORD_PROBABILITIES_ACROSS_PRONUNCIATIONS); - - addOutOfGrammarBranch = ps.getBoolean(PROP_ADD_OUT_OF_GRAMMAR_BRANCH); - - if (addOutOfGrammarBranch) { - logOutOfGrammarBranchProbability = logMath.linearToLog(ps.getDouble(PROP_OUT_OF_GRAMMAR_PROBABILITY)); - logPhoneInsertionProbability = logMath.linearToLog(ps.getDouble(PROP_PHONE_INSERTION_PROBABILITY)); - phoneLoopAcousticModel = (AcousticModel)ps.getComponent(PROP_PHONE_LOOP_ACOUSTIC_MODEL); - } - - name = ps.getInstanceName(); - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#getName() - */ - public String getName() { - return name; - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.linguist.Linguist#allocate() - */ - public void allocate() throws IOException { - allocateAcousticModel(); - grammar.allocate(); - totalStates = StatisticsVariable.getStatisticsVariable(getName(), "totalStates"); - totalArcs = StatisticsVariable.getStatisticsVariable(getName(), "totalArcs"); - actualArcs = StatisticsVariable.getStatisticsVariable(getName(), "actualArcs"); - stateSet = compileGrammar(); - totalStates.value = stateSet.size(); - } - - - /** - * Allocates the acoustic model. - * @throws java.io.IOException if error occured - */ - protected void allocateAcousticModel() throws IOException { - acousticModel.allocate(); - if (addOutOfGrammarBranch) { - phoneLoopAcousticModel.allocate(); - } - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.linguist.Linguist#deallocate() - */ - public void deallocate() { - if (acousticModel != null) { - acousticModel.deallocate(); - } - grammar.deallocate(); - } - - - /** - * Called before a recognition - */ - public void startRecognition() { - if (grammarHasChanged()) { - stateSet = compileGrammar(); - totalStates.value = stateSet.size(); - } - } - - - /** - * Called after a recognition - */ - public void stopRecognition() { - } - - /** - * Returns the log silence insertion probability. - * - * @return the log silence insertion probability. - */ - public float getLogSilenceInsertionProbability() { - return logSilenceInsertionProbability; - } - - /** - * Compiles the grammar into a sentence HMM. A GrammarJob is created for the - * initial grammar node and added to the GrammarJob queue. While there are - * jobs left on the grammar job queue, a job is removed from the queue and - * the associated grammar node is expanded and attached to the tails. - * GrammarJobs for the successors are added to the grammar job queue. - * @return collection of states - */ - protected Collection compileGrammar() { - initialGrammarState = grammar.getInitialNode(); - - nodeStateMap = new HashMap(); - arcPool = new Cache(); - - List gstateList = new ArrayList(); - TimerPool.getTimer(this, "Compile").start(); - - // get the nodes from the grammar and create states - // for them. Add the non-empty gstates to the gstate list. - TimerPool.getTimer(this, "Create States").start(); - for (GrammarNode grammarNode : grammar.getGrammarNodes()) { - GState gstate = createGState(grammarNode); - gstateList.add(gstate); - } - TimerPool.getTimer(this, "Create States").stop(); - addStartingPath(); - - // ensures an initial path to the start state - // Prep all the gstates, by gathering all of the contexts up - // this allows each gstate to know about its surrounding - // contexts - TimerPool.getTimer(this, "Collect Contexts").start(); - for (GState gstate : gstateList) - gstate.collectContexts(); - TimerPool.getTimer(this, "Collect Contexts").stop(); - - // now all gstates know all about their contexts, we can - // expand them fully - TimerPool.getTimer(this, "Expand States").start(); - for (GState gstate : gstateList) - gstate.expand(); - TimerPool.getTimer(this, "Expand States").stop(); - - // now that all states are expanded fully, we can connect all - // the states up - TimerPool.getTimer(this, "Connect Nodes").start(); - for (GState gstate : gstateList) - gstate.connect(); - TimerPool.getTimer(this, "Connect Nodes").stop(); - - SentenceHMMState initialState = findStartingState(); - - // add an out-of-grammar branch if configured to do so - if (addOutOfGrammarBranch) { - CIPhoneLoop phoneLoop = new CIPhoneLoop(phoneLoopAcousticModel, logPhoneInsertionProbability); - SentenceHMMState firstBranchState = (SentenceHMMState) - phoneLoop.getSearchGraph().getInitialState(); - initialState.connect(getArc(firstBranchState, logOne, logOutOfGrammarBranchProbability)); - } - - searchGraph = new FlatSearchGraph(initialState); - TimerPool.getTimer(this, "Compile").stop(); - // Now that we are all done, dump out some interesting - // information about the process - if (dumpGStates) { - for (GrammarNode grammarNode : grammar.getGrammarNodes()) { - GState gstate = getGState(grammarNode); - gstate.dumpInfo(); - } - } - nodeStateMap = null; - arcPool = null; - return SentenceHMMState.collectStates(initialState); - } - - - /** - * Returns a new GState for the given GrammarNode. - * @param grammarNode grammar node - * @return a new GState for the given GrammarNode - */ - protected GState createGState(GrammarNode grammarNode) { - return new GState(grammarNode); - } - - - /** - * Ensures that there is a starting path by adding an empty left context to the starting gstate - */ - protected void addStartingPath() { - // TODO: Currently the FlatLinguist requires that the initial - // grammar node returned by the Grammar contains a "sil" word - addStartingPath(grammar.getInitialNode()); - } - - /** - * Start the search at the indicated node - * @param initialNode initial node - */ - protected void addStartingPath(GrammarNode initialNode) { - // guarantees a starting path into the initial node by - // adding an empty left context to the starting gstate - GrammarNode node = initialNode; - GState gstate = getGState(node); - gstate.addLeftContext(UnitContext.SILENCE); - } - - - /** - * Determines if the underlying grammar has changed since we last compiled the search graph - * - * @return true if the grammar has changed - */ - protected boolean grammarHasChanged() { - return initialGrammarState == null || - initialGrammarState != grammar.getInitialNode(); - } - - - /** - * Finds the starting state - * - * @return the starting state - */ - protected SentenceHMMState findStartingState() { - GrammarNode node = grammar.getInitialNode(); - GState gstate = getGState(node); - return gstate.getEntryPoint(); - } - - - /** - * Gets a SentenceHMMStateArc. The arc is drawn from a pool of arcs. - * - * @param nextState the next state - * @param logLanguageProbability the log language probability - * @param logInsertionProbability the log insertion probability - * @return sentence arc - */ - protected SentenceHMMStateArc getArc(SentenceHMMState nextState, - float logLanguageProbability, - float logInsertionProbability) { - SentenceHMMStateArc arc = new SentenceHMMStateArc(nextState, - logLanguageProbability * languageWeight, - logInsertionProbability); - SentenceHMMStateArc pooledArc = arcPool.cache(arc); - actualArcs.value = arcPool.getMisses(); - totalArcs.value = arcPool.getHits() + arcPool.getMisses(); - return pooledArc == null ? arc : pooledArc; - } - - - /** - * Given a grammar node, retrieve the grammar state - * - * @param node the grammar node - * @return the grammar state associated with the node - */ - protected GState getGState(GrammarNode node) { - return nodeStateMap.get(node); - } - - - /** - * The search graph that is produced by the flat linguist. - */ - protected class FlatSearchGraph implements SearchGraph { - - /** - * An array of classes that represents the order in which the states will be returned. - */ - private final SearchState initialState; - - - /** - * Constructs a flast search graph with the given initial state - * - * @param initialState the initial state - */ - public FlatSearchGraph(SearchState initialState) { - this.initialState = initialState; - } - - public boolean getWordTokenFirst() { - return true; - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.linguist.SearchGraph#getInitialState() - */ - public SearchState getInitialState() { - return initialState; - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.linguist.SearchGraph#getNumStateOrder() - */ - public int getNumStateOrder() { - return 7; - } - } - - /** - * This is a nested class that is used to manage the construction of the states in a grammar node. There is one - * GState created for each grammar node. The GState is used to collect the entry and exit points for the grammar - * node and for connecting up the grammar nodes to each other. - */ - protected class GState { - - private final Map> entryPoints = new HashMap>(); - private final Map> exitPoints = new HashMap>(); - private final Map existingStates = new HashMap(); - - private final GrammarNode node; - - private final Set rightContexts = new HashSet(); - private final Set leftContexts = new HashSet(); - private Set startingContexts; - - private int exitConnections; -// private GrammarArc[] successors = null; - - - /** - * Creates a GState for a grammar node - * - * @param node the grammar node - */ - protected GState(GrammarNode node) { - this.node = node; - nodeStateMap.put(node, this); - } - - - /** - * Retrieves the set of starting contexts for this node. The starting contexts are the set of Unit[] with a size - * equal to the maximum right context size. - * - * @return the set of starting contexts across nodes. - */ - private Set getStartingContexts() { - if (startingContexts == null) { - startingContexts = new HashSet(); - // if this is an empty node, the starting context is - // the set of starting contexts for all successor - // nodes, otherwise, it is built up from each - // pronunciation of this word - if (node.isEmpty()) { - GrammarArc[] arcs = getSuccessors(); - for (GrammarArc arc : arcs) { - GState gstate = getGState(arc.getGrammarNode()); - startingContexts.addAll(gstate.getStartingContexts()); - } - } else { -// int maxSize = getRightContextSize(); - Word word = node.getWord(); - Pronunciation[] prons = word.getPronunciations(); - for (Pronunciation pron : prons) { - UnitContext startingContext = getStartingContext(pron); - startingContexts.add(startingContext); - } - } - } - return startingContexts; - } - - - /** - * Retrieves the starting UnitContext for the given pronunciation - * - * @param pronunciation the pronunciation - * @return a UnitContext representing the starting context of the pronunciation - */ - private UnitContext getStartingContext(Pronunciation pronunciation) { - int maxSize = getRightContextSize(); - Unit[] units = pronunciation.getUnits(); - Unit[] context = units.length > maxSize ? Arrays.copyOf(units, maxSize) : units; - return UnitContext.get(context); - } - - - /** - * Retrieves the set of trailing contexts for this node. the trailing contexts are the set of Unit[] with a size - * equal to the maximum left context size that align with the end of the node - - */ - Collection getEndingContexts() { - Collection endingContexts = new ArrayList(); - if (!node.isEmpty()) { - int maxSize = getLeftContextSize(); - Word word = node.getWord(); - Pronunciation[] prons = word.getPronunciations(); - for (Pronunciation pron : prons) { - Unit[] units = pron.getUnits(); - int size = units.length; - Unit[] context = size > maxSize ? Arrays.copyOfRange(units, size - maxSize, size) : units; - endingContexts.add(UnitContext.get(context)); - } - } - return endingContexts; - } - - - /** - * Visit all of the successor states, and gather their starting contexts into this gstates right context - */ - private void pullRightContexts() { - GrammarArc[] arcs = getSuccessors(); - for (GrammarArc arc : arcs) { - GState gstate = getGState(arc.getGrammarNode()); - rightContexts.addAll(gstate.getStartingContexts()); - } - } - - - /** - * Returns the set of succesor arcs for this grammar node. If a successor grammar node has no words we'll - * substitute the successors for that node (avoiding loops of course) - * - * @return an array of successors for this GState - */ - private GrammarArc[] getSuccessors() { - return node.getSuccessors(); - } - - - /** - * Visit all of the successor states, and push our ending context into the successors left context - */ - void pushLeftContexts() { - Collection endingContext = getEndingContexts(); - Set visitedSet = new HashSet(); - pushLeftContexts(visitedSet, endingContext); - } - - - /** - * Pushes the given left context into the successor states. If a successor state is empty, continue to push into - * this empty states successors - * - - * @param leftContext the context to push - */ - void pushLeftContexts(Set visitedSet, Collection leftContext) { - if (visitedSet.contains(getNode())) { - return; - } else { - visitedSet.add(getNode()); - } - for (GrammarArc arc : getSuccessors()) { - GState gstate = getGState(arc.getGrammarNode()); - gstate.addLeftContext(leftContext); - // if our successor state is empty, also push our - // ending context into the empty nodes successors - if (gstate.getNode().isEmpty()) { - gstate.pushLeftContexts(visitedSet, leftContext); - } - } - } - - - /** - * Add the given left contexts to the set of left contexts for this state - * - * @param context the set of contexts to add - */ - private void addLeftContext(Collection context) { - leftContexts.addAll(context); - } - - - /** - * Adds the given context to the set of left contexts for this state - * - * @param context the context to add - */ - private void addLeftContext(UnitContext context) { - leftContexts.add(context); - } - - - /** - * Returns the entry points for a given context pair - - - */ - private List getEntryPoints(ContextPair contextPair) { - return entryPoints.get(contextPair); - } - - - /** - * Gets the context-free entry point to this state - * - * @return the entry point to the state - */ - // TODO: ideally we'll look for entry points with no left - // context, but those don't exist yet so we just take - // the first entry point with an SILENCE left context - // note that this assumes that the first node in a grammar has a - // word and that word is a SIL. Not always a valid assumption. - public SentenceHMMState getEntryPoint() { - ContextPair cp = ContextPair.get(UnitContext.SILENCE, UnitContext.SILENCE); - List list = getEntryPoints(cp); - return list == null || list.isEmpty() ? null : (SentenceHMMState)list.get(0); - } - - - /** - * Collects the right contexts for this node and pushes this nodes ending context into the next next set of - * nodes. - */ - public void collectContexts() { - pullRightContexts(); - pushLeftContexts(); - } - - - /** - * Expands each GState into the sentence HMM States - */ - public void expand() { - // for each left context/starting context pair create a list - // of starting states. - for (UnitContext leftContext : leftContexts) { - for (UnitContext startingContext : getStartingContexts()) { - ContextPair contextPair = ContextPair.get(leftContext, startingContext); - entryPoints.put(contextPair, new ArrayList()); - } - } - // if this is a final node don't expand it, just create a - // state and add it to all entry points - if (node.isFinalNode()) { - GrammarState gs = new GrammarState(node); - for (List epList : entryPoints.values()) { - epList.add(gs); - } - } else if (!node.isEmpty()) { - // its a full fledged node with a word - // so expand it. Nodes without words don't need - // to be expanded. - for (UnitContext leftContext : leftContexts) { - expandWord(leftContext); - } - } else { - //if the node is empty, populate the set of entry and exit - //points with a branch state. The branch state - // branches to the successor entry points for this - // state - // the exit point should consist of the set of - // incoming left contexts and outgoing right contexts - // the 'entryPoint' table already consists of such - // pairs so we can use that - for (Map.Entry> entry : entryPoints.entrySet()) { - ContextPair cp = entry.getKey(); - List epList = entry.getValue(); - SentenceHMMState bs = new BranchState(cp.getLeftContext().toString(), - cp.getRightContext().toString(), node.getID()); - epList.add(bs); - addExitPoint(cp, bs); - } - } - addEmptyEntryPoints(); - } - - - /** - * Adds the set of empty entry points. The list of entry points are tagged with a context pair. The context pair - * represent the left context for the state and the starting context for the state, this allows states to be - * hooked up properly. However, we may be transitioning from states that have no right hand context (CI units - * such as SIL fall into this category). In this case we'd normally have no place to transition to since we add - * entry points for each starting context. To make sure that there are entry points for empty contexts if - * necessary, we go through the list of entry points and find all left contexts that have a right hand context - * size of zero. These entry points will need an entry point with an empty starting context. These entries are - * synthesized and added to the the list of entry points. - */ - private void addEmptyEntryPoints() { - Map> emptyEntryPoints = new HashMap>(); - for (Map.Entry> entry : entryPoints.entrySet()) { - ContextPair cp = entry.getKey(); - if (needsEmptyVersion(cp)) { - ContextPair emptyContextPair = ContextPair.get(cp.getLeftContext(), UnitContext.EMPTY); - List epList = emptyEntryPoints.get(emptyContextPair); - if (epList == null) { - epList = new ArrayList(); - emptyEntryPoints.put(emptyContextPair, epList); - } - epList.addAll(entry.getValue()); - } - } - entryPoints.putAll(emptyEntryPoints); - } - - - /** - * Determines if the context pair needs an empty version. A context pair needs an empty version if the left - * context has a max size of zero. - * - * @param cp the contex pair to check - * @return true if the pair needs an empt version - */ - private boolean needsEmptyVersion(ContextPair cp) { - UnitContext left = cp.getLeftContext(); - Unit[] units = left.getUnits(); - return units.length > 0 && (getRightContextSize(units[0]) < getRightContextSize()); - - } - - - /** - * Returns the grammar node of the gstate - * - * @return the grammar node - */ - private GrammarNode getNode() { - return node; - } - - - /** - * Expand the the word given the left context - * - * @param leftContext the left context - */ - private void expandWord(UnitContext leftContext) { - Word word = node.getWord(); - T(" Expanding word " + word + " for lc " + leftContext); - Pronunciation[] pronunciations = word.getPronunciations(); - for (int i = 0; i < pronunciations.length; i++) { - expandPronunciation(leftContext, pronunciations[i], i); - } - } - - - /** - * Expand the pronunciation given the left context - * - * @param leftContext the left context - * @param pronunciation the pronunciation to expand - * @param which unique ID for this pronunciation - */ - // Each GState maintains a list of entry points. This list of - // entry points is used when connecting up the end states of - // one GState to the beginning states in another GState. The - // entry points are tagged by a ContextPair which represents - // the left context upon entering the state (the left context - // of the initial units of the state), and the right context - // of the previous states (corresponding to the starting - // contexts for this state). - // - // When expanding a pronunciation, the following steps are - // taken: - // 1) Get the starting context for the pronunciation. - // This is the set of units that correspond to the start - // of the pronunciation. - // - // 2) Create a new PronunciationState for the - // pronunciation. - // - // 3) Add the PronunciationState to the entry point table - // (a hash table keyed by the ContextPair(LeftContext, - // StartingContext). - // - // 4) Generate the set of context dependent units, using - // the left and right context of the GState as necessary. - // Note that there will be fan out at the end of the - // pronunciation to allow for units with all of the - // various right contexts. The point where the fan-out - // occurs is the (length of the pronunciation - the max - // right context size). - // - // 5) Attach each cd unit to the tree - // - // 6) Expand each cd unit into the set of HMM states - // - // 7) Attach the optional and looping back silence cd - // unit - // - // 8) Collect the leaf states of the tree and add them to - // the exitStates list. - private void expandPronunciation(UnitContext leftContext, - Pronunciation pronunciation, int which) { - UnitContext startingContext = getStartingContext(pronunciation); - // Add the pronunciation state to the entry point list - // (based upon its left and right context) - String pname = "P(" + pronunciation.getWord() + '[' + leftContext - + ',' + startingContext + "])-G" + getNode().getID(); - PronunciationState ps = new PronunciationState(pname, pronunciation, which); - T(" Expanding " + ps.getPronunciation() + " for lc " + leftContext); - ContextPair cp = ContextPair.get(leftContext, startingContext); - List epList = entryPoints.get(cp); - if (epList == null) { - throw new Error("No EP list for context pair " + cp); - } else { - epList.add(ps); - } - Unit[] units = pronunciation.getUnits(); - int fanOutPoint = units.length - getRightContextSize(); - if (fanOutPoint < 0) { - fanOutPoint = 0; - } - SentenceHMMState tail = ps; - for (int i = 0; tail != null && i < fanOutPoint; i++) { - tail = attachUnit(ps, tail, units, i, leftContext, UnitContext.EMPTY); - } - SentenceHMMState branchTail = tail; - for (UnitContext finalRightContext : rightContexts) { - tail = branchTail; - for (int i = fanOutPoint; tail != null && i < units.length; i++) { - tail = attachUnit(ps, tail, units, i, leftContext, finalRightContext); - } - } - } - - - /** - * Attaches the given unit to the given tail, expanding the unit if necessary. If an identical unit is already - * attached, then this path is folded into the existing path. - * - * @param parent the parent state - * @param tail the place to attach the unit to - * @param units the set of units - * @param which the index into the set of units - * @param leftContext the left context for the unit - * @param rightContext the right context for the unit - * @return the tail of the added unit (or null if the path was folded onto an already expanded path. - */ - private SentenceHMMState attachUnit(PronunciationState parent, - SentenceHMMState tail, Unit[] units, int which, - UnitContext leftContext, UnitContext rightContext) { - Unit[] lc = getLC(leftContext, units, which); - Unit[] rc = getRC(units, which, rightContext); - UnitContext actualRightContext = UnitContext.get(rc); - LeftRightContext context = LeftRightContext.get(lc, rc); - Unit cdUnit = unitManager.getUnit(units[which].getName(), units[which] .isFiller(), context); - UnitState unitState = new ExtendedUnitState(parent, which, cdUnit); - float logInsertionProbability; - if (unitState.getUnit().isSilence()) { - logInsertionProbability = logSilenceInsertionProbability; - } else if (unitState.getUnit().isFiller()) { - logInsertionProbability = logFillerInsertionProbability; - } else if (unitState.getWhich() == 0) { - logInsertionProbability = logWordInsertionProbability; - } else { - logInsertionProbability = logUnitInsertionProbability; - } - // check to see if this state already exists, if so - // branch to it and we are done, otherwise, branch to - // the new state and expand it. - SentenceHMMState existingState = getExistingState(unitState); - if (existingState != null) { - attachState(tail, existingState, logOne, logInsertionProbability); - // T(" Folding " + existingState); - return null; - } else { - attachState(tail, unitState, logOne, logInsertionProbability); - addStateToCache(unitState); - // T(" Attaching " + unitState); - tail = expandUnit(unitState); - // if we are attaching the last state of a word, then - // we add it to the exitPoints table. the exit points - // table is indexed by a ContextPair, consisting of - // the exiting left context and the right context. - if (unitState.isLast()) { - UnitContext nextLeftContext = generateNextLeftContext(leftContext, units[which]); - ContextPair cp = ContextPair.get(nextLeftContext, actualRightContext); - // T(" Adding to exitPoints " + cp); - addExitPoint(cp, tail); - } - return tail; - } - } - - - /** - * Adds an exit point to this gstate - * - * @param cp the context tag for the state - * @param state the state associated with the tag - */ - private void addExitPoint(ContextPair cp, SentenceHMMState state) { - List list = exitPoints.get(cp); - if (list == null) { - list = new ArrayList(); - exitPoints.put(cp, list); - } - list.add(state); - } - - /** - * Get the left context for a unit based upon the left context size, the entry left context and the current - * unit. - * - * @param left the entry left context - * @param units the set of units - * @param index the index of the current unit - - */ - private Unit[] getLC(UnitContext left, Unit[] units, int index) { - Unit[] leftUnits = left.getUnits(); - int curSize = leftUnits.length + index; - int actSize = Math.min(curSize, getLeftContextSize(units[index])); - int leftIndex = index - actSize; - - Unit[] lc = new Unit[actSize]; - for (int i = 0; i < lc.length; i++) { - int lcIndex = leftIndex + i; - if (lcIndex < 0) { - lc[i] = leftUnits[leftUnits.length + lcIndex]; - } else { - lc[i] = units[lcIndex]; - } - } - return lc; - } - - /** - * Get the right context for a unit based upon the right context size, the exit right context and the current - * unit. - * - * @param units the set of units - * @param index the index of the current unit - * @param right the exiting right context - - */ - private Unit[] getRC(Unit[] units, int index, UnitContext right) { - Unit[] rightUnits = right.getUnits(); - int leftIndex = index + 1; - int curSize = units.length - leftIndex + rightUnits.length; - int actSize = Math.min(curSize, getRightContextSize(units[index])); - - Unit[] rc = new Unit[actSize]; - for (int i = 0; i < rc.length; i++) { - int rcIndex = leftIndex + i; - if (rcIndex < units.length) { - rc[i] = units[rcIndex]; - } else { - rc[i] = rightUnits[rcIndex - units.length]; - } - } - return rc; - } - - /** - * Gets the maximum context size for the given unit - * - * @param unit the unit of interest - * @return the maximum left context size for the unit - */ - private int getLeftContextSize(Unit unit) { - return unit.isFiller() ? 0 : getLeftContextSize(); - } - - - /** - * Gets the maximum context size for the given unit - * - * @param unit the unit of interest - * @return the maximum right context size for the unit - */ - private int getRightContextSize(Unit unit) { - return unit.isFiller() ? 0 : getRightContextSize(); - } - - - /** - * Returns the size of the left context. - * - * @return the size of the left context - */ - protected int getLeftContextSize() { - return acousticModel.getLeftContextSize(); - } - - - /** - * Returns the size of the right context. - * - * @return the size of the right context - */ - protected int getRightContextSize() { - return acousticModel.getRightContextSize(); - } - - - /** - * Generates the next left context based upon a previous context and a unit - * - * @param prevLeftContext the previous left context - * @param unit the current unit - */ - UnitContext generateNextLeftContext(UnitContext prevLeftContext, Unit unit) { - Unit[] prevUnits = prevLeftContext.getUnits(); - int actSize = Math.min(prevUnits.length, getLeftContextSize()); - if (actSize == 0) - return UnitContext.EMPTY; - Unit[] leftUnits = Arrays.copyOfRange(prevUnits, 1, actSize + 1); - leftUnits[actSize - 1] = unit; - return UnitContext.get(leftUnits); - } - - - /** - * Expands the unit into a set of HMMStates. If the unit is a silence unit add an optional loopback to the - * tail. - * - * @param unit the unit to expand - * @return the head of the hmm tree - */ - protected SentenceHMMState expandUnit(UnitState unit) { - SentenceHMMState tail = getHMMStates(unit); - // if the unit is a silence unit add a loop back from the - // tail silence unit - if (unit.getUnit().isSilence()) { - // add the loopback, but don't expand it // anymore - attachState(tail, unit, logOne, logSilenceInsertionProbability); - } - return tail; - } - - - /** - * Given a unit state, return the set of sentence hmm states associated with the unit - * - * @param unitState the unit state of intereset - * @return the hmm tree for the unit - */ - private HMMStateState getHMMStates(UnitState unitState) { - HMMStateState hmmTree; - HMMStateState finalState; - Unit unit = unitState.getUnit(); - HMMPosition position = unitState.getPosition(); - HMM hmm = acousticModel.lookupNearestHMM(unit, position, false); - HMMState initialState = hmm.getInitialState(); - hmmTree = new HMMStateState(unitState, initialState); - attachState(unitState, hmmTree, logOne, logOne); - addStateToCache(hmmTree); - finalState = expandHMMTree(unitState, hmmTree); - return finalState; - } - - - /** - * Expands the given hmm state tree - * - * @param parent the parent of the tree - * @param tree the tree to expand - * @return the final state in the tree - */ - private HMMStateState expandHMMTree(UnitState parent, HMMStateState tree) { - HMMStateState retState = tree; - for (HMMStateArc arc : tree.getHMMState().getSuccessors()) { - HMMStateState newState; - if (arc.getHMMState().isEmitting()) { - newState = new HMMStateState(parent, arc.getHMMState()); - } else { - newState = new NonEmittingHMMState(parent, arc.getHMMState()); - } - SentenceHMMState existingState = getExistingState(newState); - float logProb = arc.getLogProbability(); - if (existingState != null) { - attachState(tree, existingState, logOne, logProb); - } else { - attachState(tree, newState, logOne, logProb); - addStateToCache(newState); - retState = expandHMMTree(parent, newState); - } - } - return retState; - } - - - /** - * Connect up all of the GStates. Each state now has a table of exit points. These exit points represent tail - * states for the node. Each of these tail states is tagged with a ContextPair, that indicates what the left - * context is (the exiting context) and the right context (the entering context) for the transition. To connect - * up a state, the connect does the following: 1) Iterate through all of the grammar successors for this state - * 2) Get the 'entry points' for the successor that match the exit points. 3) Hook them up. - *

    - * Note that for a task with 1000 words this will involve checking on the order of 35,000,000 connections and - * making about 2,000,000 connections - */ - public void connect() { - // T("Connecting " + node.getWord()); - for (GrammarArc arc : getSuccessors()) { - GState gstate = getGState(arc.getGrammarNode()); - if (!gstate.getNode().isEmpty() - && gstate.getNode().getWord().getSpelling().equals( - Dictionary.SENTENCE_START_SPELLING)) { - continue; - } - float probability = arc.getProbability(); - // adjust the language probability by the number of - // pronunciations. If there are 3 ways to say the - // word, then each pronunciation gets 1/3 of the total - // probability. - if (spreadWordProbabilitiesAcrossPronunciations && !gstate.getNode().isEmpty()) { - int numPronunciations = gstate.getNode().getWord().getPronunciations().length; - probability -= logMath.linearToLog(numPronunciations); - } - float fprob = probability; - for (Map.Entry> entry : exitPoints.entrySet()) { - List destEntryPoints = gstate.getEntryPoints(entry.getKey()); - if (destEntryPoints != null) { - List srcExitPoints = entry.getValue(); - connect(srcExitPoints, destEntryPoints, fprob); - } - } - } - } - - - /** - * connect all the states in the source list to the states in the destination list - * - * @param sourceList the set of source states - * @param destList the set of destination states. - - */ - private void connect(List sourceList, List destList, float logLangProb) { - for (SearchState source : sourceList) { - SentenceHMMState sourceState = (SentenceHMMState) source; - for (SearchState dest : destList) { - SentenceHMMState destState = (SentenceHMMState) dest; - sourceState.connect(getArc(destState, logLangProb, logOne)); - exitConnections++; - } - } - } - - - /** - * Attaches one SentenceHMMState as a child to another, the transition has the given probability - * - * @param prevState the parent state - * @param nextState the child state - * @param logLanguageProbablity the language probability of transition in the LogMath log domain - * @param logInsertionProbablity insertion probability of transition in the LogMath log domain - */ - protected void attachState(SentenceHMMState prevState, - SentenceHMMState nextState, - float logLanguageProbablity, - float logInsertionProbablity) { - prevState.connect(getArc(nextState, - logLanguageProbablity, logInsertionProbablity)); - if (showCompilationProgress && totalStateCounter++ % 1000 == 0) { - System.out.print("."); - } - } - - - /** - * Returns all of the states maintained by this gstate - * - * @return the set of all states - */ - public Collection getStates() { - // since pstates are not placed in the cache we have to - // gather those states. All other states are found in the - // existingStates cache. - List allStates = new ArrayList(existingStates.values()); - for (List list : entryPoints.values()) { - allStates.addAll(list); - } - return allStates; - } - - - /** - * Checks to see if a state that matches the given state already exists - * - * @param state the state to check - * @return true if a state with an identical signature already exists. - */ - private SentenceHMMState getExistingState(SentenceHMMState state) { - return existingStates.get(state.getSignature()); - } - - - /** - * Adds the given state to the cache of states - * - * @param state the state to add - */ - private void addStateToCache(SentenceHMMState state) { - existingStates.put(state.getSignature(), state); - } - - - /** - * Prints info about this GState - */ - void dumpInfo() { - System.out.println(" ==== " + this + " ========"); - System.out.print("Node: " + node); - if (node.isEmpty()) { - System.out.print(" (Empty)"); - } else { - System.out.print(" " + node.getWord()); - } - System.out.print(" ep: " + entryPoints.size()); - System.out.print(" exit: " + exitPoints.size()); - System.out.print(" cons: " + exitConnections); - System.out.print(" tot: " + getStates().size()); - System.out.print(" sc: " + getStartingContexts().size()); - System.out.print(" rc: " + leftContexts.size()); - System.out.println(" lc: " + rightContexts.size()); - dumpDetails(); - } - - - /** - * Dumps the details for a gstate - */ - void dumpDetails() { - dumpCollection(" entryPoints", entryPoints.keySet()); - dumpCollection(" entryPoints states", entryPoints.values()); - dumpCollection(" exitPoints", exitPoints.keySet()); - dumpCollection(" exitPoints states", exitPoints.values()); - dumpNextNodes(); - dumpExitPoints(exitPoints.values()); - dumpCollection(" startingContexts", getStartingContexts()); - dumpCollection(" branchingInFrom", leftContexts); - dumpCollection(" branchingOutTo", rightContexts); - dumpCollection(" existingStates", existingStates.keySet()); - } - - - /** - * Dumps out the names of the next set of grammar nodes - */ - private void dumpNextNodes() { - System.out.println(" Next Grammar Nodes: "); - for (GrammarArc arc : node.getSuccessors()) { - System.out.println(" " + arc.getGrammarNode()); - } - } - - - /** - * Dumps the exit points and their destination states - * - * @param eps the collection of exit points - */ - private void dumpExitPoints(Collection> eps) { - for (List epList : eps) { - for (SearchState state : epList) { - System.out.println(" Arcs from: " + state); - for (SearchStateArc arc : state.getSuccessors()) { - System.out.println(" " + arc.getState()); - } - } - } - } - - - /** - * Dumps the given collection - * - * @param name the name of the collection - * @param collection the collection to dump - */ - private void dumpCollection(String name, Collection collection) { - System.out.println(" " + name); - for (Object obj : collection) { - System.out.println(" " + obj); - } - } - - /** - * Returns the string representation of the object - * - * @return the string representation of the object - */ - @Override - public String toString() { - if (node.isEmpty()) { - return "GState " + node + "(empty)"; - } else { - return "GState " + node + " word " + node.getWord(); - } - } - } - - - /** - * Quick and dirty tracing. Traces the string if 'tracing' is true - * - * @param s the string to trace. - */ - private void T(String s) { - if (tracing) { - System.out.println(s); - } - } -} - -/** - * A class that represents a set of units used as a context - */ -class UnitContext { - - private static final Cache unitContextCache = new Cache(); - private final Unit[] context; - private int hashCode = 12; - public final static UnitContext EMPTY = new UnitContext(Unit.EMPTY_ARRAY); - public final static UnitContext SILENCE = new UnitContext(new Unit[] { UnitManager.SILENCE }); - - static { - unitContextCache.cache(EMPTY); - unitContextCache.cache(SILENCE); - } - - - /** - * Creates a UnitContext for the given context. This constructor is not directly accessible, use the factory method - * instead. - * - * @param context the context to wrap with this UnitContext - */ - private UnitContext(Unit[] context) { - this.context = context; - hashCode = 12; - for (int i = 0; i < context.length; i++) { - hashCode += context[i].getName().hashCode() * ((i + 1) * 34); - } - } - - - /** - * Gets the unit context for the given units. There is a single unit context for each unit combination. - * - * @param units the units of interest - * @return the unit context. - */ - static UnitContext get(Unit[] units) { - UnitContext newUC = new UnitContext(units); - UnitContext cachedUC = unitContextCache.cache(newUC); - return cachedUC == null ? newUC : cachedUC; - } - - - /** - * Retrieves the units for this context - * - * @return the units associated with this context - */ - public Unit[] getUnits() { - return context; - } - - - /** - * Determines if the given object is equal to this UnitContext - * - * @param o the object to compare to - * @return true if the objects are equal - */ - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } else if (o instanceof UnitContext) { - UnitContext other = (UnitContext) o; - if (this.context.length != other.context.length) { - return false; - } else { - for (int i = 0; i < this.context.length; i++) { - if (this.context[i] != other.context[i]) { - return false; - } - } - return true; - } - } else { - return false; - } - } - - - /** - * Returns a hashcode for this object - * - * @return the hashCode - */ - @Override - public int hashCode() { - return hashCode; - } - - - /** - * Dumps information about the total number of UnitContext objects - */ - public static void dumpInfo() { - System.out.println("Total number of UnitContexts : " - + unitContextCache.getMisses() + " folded: " + unitContextCache.getHits()); - } - - - /** - * Returns a string representation of this object - * - * @return a string representation - */ - @Override - public String toString() { - return LeftRightContext.getContextName(context); - } -} - -/** - * A context pair hold a left and starting context. It is used as a hash into the set of starting points for a - * particular gstate - */ -class ContextPair { - - static final Cache contextPairCache = new Cache(); - private final UnitContext left; - private final UnitContext right; - private final int hashCode; - - - /** - * Creates a UnitContext for the given context. This constructor is not directly accessible, use the factory method - * instead. - * - * @param left the left context - * @param right the right context - */ - private ContextPair(UnitContext left, UnitContext right) { - this.left = left; - this.right = right; - hashCode = 99 + left.hashCode() * 113 + right.hashCode(); - } - - - /** - * Gets the ContextPair for the given set of contexts. This is a factory method. If the ContextPair already exists, - * return that one, otherwise, create it and store it so it can be reused. - * - * @param left the left context - * @param right the right context - * @return the unit context. - */ - static ContextPair get(UnitContext left, UnitContext right) { - ContextPair newCP = new ContextPair(left, right); - ContextPair cachedCP = contextPairCache.cache(newCP); - return cachedCP == null ? newCP : cachedCP; - } - - - /** - * Determines if the given object is equal to this UnitContext - * - * @param o the object to compare to - * @return true if the objects are equal return; - */ - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } else if (o instanceof ContextPair) { - ContextPair other = (ContextPair) o; - return this.left.equals(other.left) && this.right.equals(other.right); - } else { - return false; - } - } - - - /** - * Returns a hashcode for this object - * - * @return the hashCode - */ - @Override - public int hashCode() { - return hashCode; - } - - - /** - * Returns a string representation of the object - */ - @Override - public String toString() { - return "CP left: " + left + " right: " + right; - } - - - /** - * Gets the left unit context - * - * @return the left unit context - */ - public UnitContext getLeftContext() { - return left; - } - - - /** - * Gets the right unit context - * - * @return the right unit context - */ - public UnitContext getRightContext() { - return right; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/GrammarPoint.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/GrammarPoint.java deleted file mode 100755 index 4bc414dc..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/GrammarPoint.java +++ /dev/null @@ -1,329 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.flat; - -import edu.cmu.sphinx.linguist.acoustic.Unit; -import edu.cmu.sphinx.linguist.acoustic.UnitManager; -import edu.cmu.sphinx.linguist.dictionary.Pronunciation; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.linguist.language.grammar.GrammarArc; -import edu.cmu.sphinx.linguist.language.grammar.GrammarNode; - -import java.util.ArrayList; -import java.util.List; - -/** - * Manages a particular point in a grammar. The GrammarPoint is used to manage the look-ahead for generating - * right-contexts. Since we haven't built the HMM tree yet, looking ahead can be difficult. The GrammarPoint class - * points to a particular unit within a pronunciation/word/grammar. From a particular grammar point, it is possible to - * get the set of next grammar points. - */ - -public class GrammarPoint { - - private GrammarNode node; // the grammar node - private int alternativeIndex; // which alternative in the grammar - private int wordIndex; // which word in the alternative - private int pronunciationIndex; // which pronunciation in the word - private int unitIndex; // which unit in the pronunciation - private static boolean bounded; - - - /** - * Creates a grammar point that points to the given unit of the given pronunciation state. - * - * @param state the pronunciation of interest - */ - public GrammarPoint(SentenceHMMState state) { - while (state != null) { - if (state instanceof UnitState) { - unitIndex = state.getWhich(); - } else if (state instanceof PronunciationState) { - pronunciationIndex = state.getWhich(); - } else if (state instanceof WordState) { - wordIndex = state.getWhich(); - } else if (state instanceof AlternativeState) { - alternativeIndex = state.getWhich(); - } else if (state instanceof GrammarState) { - node = ((GrammarState) state).getGrammarNode(); - } - state = state.getParent(); - } - assert node != null; - } - - - /** - * Creates a grammar node that points to the first unit of the first pronunciation of the first word of the given - * grammar node - * - * @param node the grammar node of interest - */ - public GrammarPoint(GrammarNode node) { - this(node, -1, 0, 0, 0); - } - - - /** - * Creates a GrammarPoint that corresponds to the given unit of the given pronunciation - * - * @param state the pronunciation state - * @param which the index of the unit - */ - public GrammarPoint(PronunciationState state, int which) { - this(state); - unitIndex = which; - } - - - /** - * Creates a GrammarPoint that points to a fully specified unit - * - * @param node the grammar node - * @param alternativeIndex the index of alternative - * @param wordIndex the index of the word in the node - * @param pronunciationIndex the index of the pronunciation in the word. - * @param unitIndex the index of the unit in the pronunciation - */ - public GrammarPoint(GrammarNode node, int alternativeIndex, - int wordIndex, int pronunciationIndex, int unitIndex) { - assert node != null; - this.node = node; - this.alternativeIndex = alternativeIndex; - this.wordIndex = wordIndex; - this.pronunciationIndex = pronunciationIndex; - this.unitIndex = unitIndex; - } - - - /** - * Gets the unit associated with this point in the grammar - * - * @return the unit, or null if there is no unit associated with this point in the grammar - */ - private Unit getUnit() { - Unit unit = null; - Word[][] alternatives = node.getAlternatives(); - if (alternativeIndex != -1 && alternativeIndex < alternatives.length) { - Word[] words = alternatives[alternativeIndex]; - if (wordIndex < words.length) { - Pronunciation[] pronunciations = - words[wordIndex].getPronunciations(); - if (pronunciationIndex < pronunciations.length) { - Unit[] units = - pronunciations[pronunciationIndex].getUnits(); - if (unitIndex < units.length) { - unit = units[unitIndex]; - } - } - } - } - return unit; - } - - - /** - * Gets the unit associated with this point in the grammar. If there is no unit, return filler - * - * @return the unit for this grammar node or a filler unit - */ - private Unit getUnitOrFill() { - Unit unit = getUnit(); - if (unit == null) { - unit = UnitManager.SILENCE; - } - return unit; - } - - - /** - * Gets all of the right contexts for this grammar point. The contexts returned are guaranteed to be 'size' units - * in length, The number of contexts returned depends upon the perplexity of the grammar downstream from this - * GrammarPoint - * - * @param size the size of each context returned - * @param startWithCurrent include the current state in the context - * @param maxContexts the maxium number of right contexts to return - * @return a list of containing Unit[] contexts. - */ - public List getRightContexts(int size, boolean startWithCurrent, - int maxContexts) { - List contexts = new ArrayList(); - List nextPoints = getNextGrammarPoints(startWithCurrent); - - if (nextPoints.isEmpty()) { - Unit[] units = Unit.getEmptyContext(size); - addContext(contexts, units); - } else { - for (GrammarPoint gp : nextPoints) { - if (size == 1) { - Unit[] units = new Unit[size]; - units[0] = gp.getUnitOrFill(); - addContext(contexts, units); - } else { - List rc = gp.getRightContexts(size - 1, false, - maxContexts - contexts.size()); - for (Unit[] rcUnits : rc) { - Unit[] units = Unit.getEmptyContext(rcUnits.length + 1); - units[0] = gp.getUnitOrFill(); - System.arraycopy(rcUnits, 0, units, 1, rcUnits.length); - addContext(contexts, units); - } - } - if (contexts.size() >= maxContexts) { - break; - } - } - } - return contexts; - } - - - /** - * Add a context to a list of contexts after ensuring that no identical contexts exist on the list. When a right - * context is collected it may contain duplicates in certain cases (when this unit is the last unit in a grammar - * node, and there is a branch to multiple words in subsequent nodes, for instance) - * - * @param contexts the list of contexts to add the new units to - * @param units the units to add to the context - */ - private void addContext(List contexts, Unit[] units) { - for (Unit[] onList : contexts) { - if (Unit.isContextMatch(onList, units)) { - return; // found on list so bailout - } - } - contexts.add(units); - } - - - /** - * Returns a list of next GrammarPoints for this GrammarPoint. If there are no more downstream grammar points with - * words, an empty list is returned. - * - * @param startWithCurrent include the current state in the context - * @return the (possibly empty) list of next GrammarPoint objects - */ - private List getNextGrammarPoints(boolean startWithCurrent) { - List nextPoints = new ArrayList(); - int unitsLength = 0; - - // if this GrammarPoint is associated with a grammar node - // and the grannar node has alternatives, add points for each - // alternative - if (alternativeIndex == -1 && node.getAlternatives().length > 0) { - for (int i = 0; i < node.getAlternatives().length; i++) { - GrammarPoint gp = new GrammarPoint(node, i, 0, 0, 0); - nextPoints.add(gp); - } - } - - // If we don't have any alternatives, (i.e. this grammar node - // has no words at all associated with it, then just go and - // find the set of next grammar nodes with words, collect - // them up, expand them and return that set. - - else if (node.getAlternatives().length == 0) { - addNextGrammarPointsWithWords(node, nextPoints); - } else { - - // At this point we are at a node with a set of alternatives - - GrammarPoint next; - - if (startWithCurrent) { - next = this; - } else { - next = new GrammarPoint(node, alternativeIndex, wordIndex, - pronunciationIndex, unitIndex + 1); - } - Pronunciation[] pronunciations = node. - getAlternatives()[alternativeIndex][wordIndex]. - getPronunciations(); - - unitsLength = pronunciations[pronunciationIndex].getUnits().length; - - if (next.unitIndex < unitsLength) { - nextPoints.add(next); - } else { - next.unitIndex = 0; - Word[] alternative = - next.node.getAlternatives()[alternativeIndex]; - if (++next.wordIndex < alternative.length) { - Word word = alternative[next.wordIndex]; - for (int i = 0; i < word.getPronunciations().length; - i++) { - GrammarPoint newGP = new GrammarPoint(next.node, - next.alternativeIndex, next.wordIndex, i, 0); - nextPoints.add(newGP); - } - } else if (!bounded) { - addNextGrammarPointsWithWords(next.node, nextPoints); - } - } - } - return nextPoints; - } - - - /** - * Given a GrammarNode return a list of successors GrammarNodes that contain words - * - * @param node successors are gathered from this node - * @return list the list of grammar nodes - */ - private static List getNextGrammarNodesWithWords(GrammarNode node) { - List list = new ArrayList(); - - for (GrammarArc arc : node.getSuccessors()) { - GrammarNode gnode = arc.getGrammarNode(); - if (gnode.getAlternatives().length == 0) { - if (gnode.isFinalNode()) { - list.add(gnode); - } else { - list.addAll(getNextGrammarNodesWithWords(gnode)); - } - } else { - list.add(gnode); - } - } - return list; - } - - - /** - * Adds the next set of grammar points that contain words to the given list - * - * @param node the grammar node - * @param nextPoints where the grammar points should be added - */ - private static void addNextGrammarPointsWithWords(GrammarNode - node, List nextPoints) { - for (GrammarNode nextNode : getNextGrammarNodesWithWords(node)) { - for (int j = 0; j < nextNode.getAlternatives().length; j++) { - GrammarPoint gp = new GrammarPoint(nextNode, j, 0, 0, 0); - nextPoints.add(gp); - } - } - } - - - /** - * Sets the state of the bounded configuration flag - * - * @param state if true searches for context will not cross grammar nodes. - */ - static void setBounded(boolean state) { - bounded = state; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/GrammarState.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/GrammarState.java deleted file mode 100755 index 6d6275b7..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/GrammarState.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.flat; - - -import edu.cmu.sphinx.linguist.language.grammar.GrammarNode; - -/** Represents a non-emitting sentence hmm state */ -@SuppressWarnings("serial") -public class GrammarState extends SentenceHMMState { - - private final GrammarNode grammarNode; - - - /** - * Creates a GrammarState - * - * @param node the GrammarNode associated with this state - */ - public GrammarState(GrammarNode node) { - super("G", null, node.getID()); - this.grammarNode = node; - setFinalState(grammarNode.isFinalNode()); - } - - - /** - * Gets the grammar node associated with this state - * - * @return the grammar node - */ - public GrammarNode getGrammarNode() { - return grammarNode; - } - - - /** - * Retrieves a short label describing the type of this state. Typically, subclasses of SentenceHMMState will - * implement this method and return a short (5 chars or less) label - * - * @return the short label. - */ - @Override - public String getTypeLabel() { - return "Gram"; - } - - - /** - * Returns the state order for this state type - * - * @return the state order - */ - @Override - public int getOrder() { - return 3; - } -} - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/HMMStateState.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/HMMStateState.java deleted file mode 100755 index 606a526a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/HMMStateState.java +++ /dev/null @@ -1,105 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.flat; - -import edu.cmu.sphinx.decoder.scorer.ScoreProvider; -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.linguist.HMMSearchState; -import edu.cmu.sphinx.linguist.acoustic.HMMState; - -import java.io.Serializable; - -/** Represents a hmmState in an SentenceHMMS */ - -@SuppressWarnings("serial") -public class HMMStateState extends SentenceHMMState - implements Serializable, HMMSearchState, ScoreProvider { - - private HMMState hmmState; - private boolean isEmitting; - - - /** - * Creates a HMMStateState - * - * @param parent the parent of this state - * @param hmmState the hmmState associated with this state - */ - public HMMStateState(SentenceHMMState parent, HMMState hmmState) { - super("S", parent, hmmState.getState()); - this.hmmState = hmmState; - this.isEmitting = hmmState.isEmitting(); - } - - - /** - * Gets the hmmState associated with this state - * - * @return the hmmState - */ - public HMMState getHMMState() { - return hmmState; - } - - - /** - * Determines if this state is an emitting state - * - * @return true if the state is an emitting state - */ - @Override - public boolean isEmitting() { - return isEmitting; - } - - - /** - * Retrieves a short label describing the type of this state. Typically, subclasses of SentenceHMMState will - * implement this method and return a short (5 chars or less) label - * - * @return the short label. - */ - @Override - public String getTypeLabel() { - return "HMM"; - } - - - /** - * Calculate the acoustic score for this state - * - * @return the acoustic score for this state - */ - public float getScore(Data feature) { - return hmmState.getScore(feature); - } - - - /** - * Returns the state order for this state type - * - * @return the state order - */ - @Override - public int getOrder() { - return isEmitting ? 6 : 0; - } - - - @Override - public float[] getComponentScore(Data feature) { - return hmmState.calculateComponentScore(feature); - } -} - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/NonEmittingHMMState.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/NonEmittingHMMState.java deleted file mode 100755 index 24716db7..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/NonEmittingHMMState.java +++ /dev/null @@ -1,33 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.flat; - -import edu.cmu.sphinx.linguist.acoustic.HMMState; - - -/** Represents a hmmState in an SentenceHMMS */ -@SuppressWarnings("serial") -public class NonEmittingHMMState extends HMMStateState { - - /** - * Creates a NonEmittingHMMState - * - * @param parent the parent of this state - * @param hmmState the hmmState associated with this state - */ - public NonEmittingHMMState(SentenceHMMState parent, HMMState hmmState) { - super(parent, hmmState); - } -} - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/PronunciationState.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/PronunciationState.java deleted file mode 100755 index e00b4c87..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/PronunciationState.java +++ /dev/null @@ -1,97 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.flat; - -import edu.cmu.sphinx.linguist.WordSearchState; -import edu.cmu.sphinx.linguist.dictionary.Pronunciation; - - -/** Represents a pronunciation in an SentenceHMMS */ -@SuppressWarnings("serial") -public class PronunciationState extends SentenceHMMState implements WordSearchState { - - private final Pronunciation pronunciation; - - /** - * Creates a PronunciationState - * - * @param parent the parent word of the current pronunciation - * @param which the pronunciation of interest - */ - public PronunciationState(WordState parent, int which) { - super("P", parent, which); - - pronunciation = parent.getWord().getPronunciations()[which]; - } - - - /** - * Creates a PronunciationState - * - * @param name the name of the pronunciation associated with this state - * @param p the pronunciation - * @param which the index for the pronunciation - */ - public PronunciationState(String name, Pronunciation p, int which) { - super(name, null, which); - pronunciation = p; - } - - - /** - * Gets the pronunciation associated with this state - * - * @return the pronunciation - */ - public Pronunciation getPronunciation() { - return pronunciation; - } - - - /** - * Retrieves a short label describing the type of this state. Typically, subclasses of SentenceHMMState will - * implement this method and return a short (5 chars or less) label - * - * @return the short label. - */ - @Override - public String getTypeLabel() { - return "Pron"; - } - - - /** - * Returns the state order for this state type - * - * @return the state order - */ - @Override - public int getOrder() { - return 4; - } - - - /** - * Returns true if this PronunciationState indicates the start of a word. Returns false if this PronunciationState - * indicates the end of a word. - * - * @return true if this PronunciationState indicates the start of a word, false if this PronunciationState indicates - * the end of a word - */ - @Override - public boolean isWordStart() { - return true; - } -} - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/SentenceHMMState.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/SentenceHMMState.java deleted file mode 100755 index 0e5c12c1..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/SentenceHMMState.java +++ /dev/null @@ -1,645 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.flat; - - -import edu.cmu.sphinx.linguist.SearchState; -import edu.cmu.sphinx.linguist.SearchStateArc; -import edu.cmu.sphinx.linguist.WordSequence; -import edu.cmu.sphinx.linguist.dictionary.Word; - -import java.io.Serializable; -import java.util.*; - - -/** Represents a single state in an SentenceHMM */ -@SuppressWarnings("serial") -public abstract class SentenceHMMState implements Serializable, SearchState { - - private final static int MASK_IS_FINAL = 0x1; - private final static int MASK_COLOR_RED = 0x2; - private final static int MASK_PROCESSED = 0x4; - private final static int MASK_FAN_IN = 0x8; - private final static int MASK_IS_WORD_START = 0x10; - private final static int MASK_IS_SHARED_STATE = 0x20; - private final static int MASK_WHICH = 0xffff; - private final static int SHIFT_WHICH = 0x8; - - /** A Color is used to tag SentenceHMM nodes */ - public static enum Color { RED, GREEN } - - private static int globalStateNumber = -1000; - - private int stateNumber; - - // a number of separate variables are maintained in 'fields' - // inorder to reduce the size of the SentenceHMM - - private int fields; - private String name; - - private final Map arcs; - private SentenceHMMState parent; - private String cachedName; - private String fullName; - private SentenceHMMStateArc[] successorArray; - - - /** - * Creates a SentenceHMMState - * - * @param name the name of the current SentenceHMMState - * @param parent the parent of the current instance - * @param which the index of the current instance - */ - protected SentenceHMMState(String name, SentenceHMMState parent, int which) { - this(); - this.name = name + which; - this.parent = parent; - setWhich(which); - setProcessed(false); - setColor(Color.RED); - } - - - /** Empty contructor */ - protected SentenceHMMState() { - stateNumber = globalStateNumber--; - this.arcs = new LinkedHashMap(); - } - - - /** - * Determines if this state marks the beginning of a word - * - * @return true if the state marks the beginning of a word - */ - public boolean isWordStart() { - return (fields & MASK_IS_WORD_START) == MASK_IS_WORD_START; - } - - - /** - * Sets the 'wordStart' flag - * - * @param wordStart true if this state marks the beginning of a word. - */ - public void setWordStart(boolean wordStart) { - if (wordStart) { - this.fields |= MASK_IS_WORD_START; - } else { - this.fields &= ~MASK_IS_WORD_START; - } - } - - - /** - * Determines if this state is a shard state - * - * @return true if the state marks the beginning of a word - */ - public boolean isSharedState() { - return (fields & MASK_IS_SHARED_STATE) == MASK_IS_SHARED_STATE; - } - - - /** - * Sets the shared state flag - * - * @param shared true if this state is shared - */ - public void setSharedState(boolean shared) { - if (shared) { - this.fields |= MASK_IS_SHARED_STATE; - } else { - this.fields &= ~MASK_IS_SHARED_STATE; - } - } - - - /** - * Returns the word associated with the particular unit - * - * @return the word associated with this state, or null if there is no word associated with this state. - */ - public Word getAssociatedWord() { - Word word = null; - SentenceHMMState state = this; - - while (state != null && !(state instanceof WordState)) { - state = state.getParent(); - } - - if (state != null) { - WordState wordState = (WordState) state; - word = wordState.getWord(); - } - return word; - } - - - /** - * Retrieves a short label describing the type of this state. Typically, subclasses of SentenceHMMState will - * implement this method and return a short (5 chars or less) label - * - * @return the short label. - */ - public String getTypeLabel() { - return "state"; - } - - - /** - * Determines if this state is a fan-in state. The search may need to adjust the pruning for states that fan in - * since they are shared by multiple paths - * - * @return true if the state is a fan in state - */ - public boolean isFanIn() { - return (fields & MASK_FAN_IN) == MASK_FAN_IN; - } - - - /** - * Sets the fan in state - * - * @param fanIn if true its a fan in state - */ - public void setFanIn(boolean fanIn) { - if (fanIn) { - this.fields |= MASK_FAN_IN; - } else { - this.fields &= ~MASK_FAN_IN; - } - } - - - /** - * Sets the processed flag for this state - * - * @param processed the new setting for the processed flag - */ - public void setProcessed(boolean processed) { - if (processed) { - this.fields |= MASK_PROCESSED; - } else { - this.fields &= ~MASK_PROCESSED; - } - } - - - /** - * Determines if this state has been 'processed'. The meaning of 'processed' is not defined here, but is up to the - * higher levels - * - * @return true if the state has been processed. - */ - public boolean isProcessed() { - return (fields & MASK_PROCESSED) == MASK_PROCESSED; - } - - - /** Reset process flags for this state and all successor states */ - public void resetAllProcessed() { - visitStates(new SentenceHMMStateVisitor() { - public boolean visit(SentenceHMMState state) { - state.setProcessed(false); - return false; - } - }, this, false); - } - - - /** - * Gets the word history for this state. - * - * @return the word history. - */ - //TODO Not implemented - public WordSequence getWordHistory() { - return WordSequence.EMPTY; - } - - - /** - * Gets the number of successors - * - * @return the number of successors - */ - public int getNumSuccessors() { - return arcs.size(); - } - - - /** - * Gets a successor to this search state - * - * @return the set of successors - */ - public SearchStateArc[] getSuccessors() { - if (successorArray == null) { - successorArray = arcs.values().toArray(new SentenceHMMStateArc[arcs.size()]); - } - return successorArray; - } - - - /** - * Returns the lextree state - * - * @return the lex tree state - */ - public SentenceHMMState getLexState() { - return this; - } - - - /** - * remove the given arc from the set of succors - * - * @param arc the arc to remove - */ - void deleteSuccessor(SentenceHMMStateArc arc) { - arcs.remove(arc); - } - - - /** - * Connects the arc to this sentence hmm. If the node at the end of the arc is already pointing to some other node - * as its predecessor, don't change that relationship, since its probably a result of the nodes being reused' - * - * @param arc the path to the next state - */ - public void connect(SentenceHMMStateArc arc) { - if (successorArray != null) { - successorArray = null; - } - rawConnect(arc); - } - - - /** - * Connects the arc to this sentence hmm, but don't affect the predecessor relation ship - * - * @param arc the arc to the next state - */ - private void rawConnect(SentenceHMMStateArc arc) { - SentenceHMMState state = (SentenceHMMState) arc.getState(); - - // attach the state-number because the state-signature is not necessarily unique - arcs.put(state.getValueSignature() + state.getStateNumber(), arc); - } - - - /** - * Determines if this state is an emitting state - * - * @return true if the state is an emitting state - */ - public boolean isEmitting() { - return false; - } - - - /** - * Determines if this is a final state - * - * @return true if this is a final state - */ - public boolean isFinal() { - return (fields & MASK_IS_FINAL) == MASK_IS_FINAL; - } - - - /** - * Sets this is to be final state - * - * @param state true if this is a final state - */ - public void setFinalState(boolean state) { - if (state) { - this.fields |= MASK_IS_FINAL; - } else { - this.fields &= ~MASK_IS_FINAL; - } - } - - - /** - * Determines if this state is a unit state - * - * @return true if the state is a unit state. - */ - public boolean isUnit() { - return false; - } - - - /** Dumps this SentenceHMMState and all its successors. Just for debugging. */ - public void dumpAll() { - visitStates(new SentenceHMMStateVisitor() { - public boolean visit(SentenceHMMState state) { - state.dump(); - return false; - } - }, this, true); - } - - - /** - * Returns any annotation for this state - * - * @return the annotation - */ - protected String getAnnotation() { - return ""; - } - - - /** Dumps this state */ - private void dump() { - System.out.println(" ----- " + getTitle() + " ---- "); - for (int i = 0; i < getSuccessors().length; i++) { - SentenceHMMStateArc arc = (SentenceHMMStateArc) getSuccessors()[i]; - System.out.println(" -> " + - arc.getState().toPrettyString()); - } - } - - - /** Validates this SentenceHMMState and all successors */ - public void validateAll() { - // TODO fix me - } - - - /** - * Gets the name for this state - * - * @return the name - */ - public String getName() { - return name; - } - - - /** - * Returns a pretty name for this HMM - * - * @return a pretty name - */ - public String getPrettyName() { - return getName(); - } - - - /** Returns the string representation of this object */ - @Override - public String toString() { - if (cachedName == null) { - StringBuilder sb = new StringBuilder(); - if (isEmitting()) { - sb.append('*'); - } - sb.append(getName()); - - // String base = (isEmitting() ? "*" : "") + getName() - // + getWhich() + (isFinal() ? "!" : ""); - - if (parent != null) { - sb.append('_'); - sb.append(parent); - } - - if (isFinal()) { - sb.append('!'); - } - cachedName = sb.toString(); - } - return cachedName; - } - - - /* - * Returns a pretty version of the string representation - * for this object - * - * @return a pretty string - */ - public String toPrettyString() { - return toString(); - } - - - /** - * Gets the fullName for this state - * - * @return the full name for this state - */ - public String getFullName() { - if (fullName == null) { - if (parent == null) { - fullName = getName(); - } else { - fullName = getName() + '.' + parent.getFullName(); - } - } - - return fullName; - } - - - /** - * Gets the signature for this state - * - * @return the signature - */ - public String getSignature() { - return getFullName(); - } - - - /** - * gets the title (fullname + stateNumber) for this state - * - * @return the title - */ - public String getTitle() { - return getFullName() + ':' + stateNumber; - // return getSignature() + ":" + stateNumber; - } - - - /** - * Retrieves the index for this state words - * - * @return the index - */ - public int getWhich() { - return (fields >> SHIFT_WHICH) & MASK_WHICH; - } - - - /** - * Sets the index for this state - * - * @param which the index for this state - */ - public void setWhich(int which) { - assert which >= 0 && which <= MASK_WHICH; - fields |= (which & MASK_WHICH) << SHIFT_WHICH; - } - - - /** - * Retrieves the parent sate - * - * @return the parent state (or null if this state does not have a parent state). - */ - public SentenceHMMState getParent() { - return parent; - } - - - /** - * Searches the set of arcs for an arc that points to a state with an identical value - * - * @param state the state to search for - * @return the arc or null if none could be found. - */ - public SentenceHMMStateArc findArc(SentenceHMMState state) { - return arcs.get(state.getValueSignature()); - } - - - /** - * Returns the value signature of this unit - * - * @return the value signature - */ - public String getValueSignature() { - return getFullName(); - } - - - /** - * Visit all of the states starting at start with the given vistor - * - * @param visitor the state visitor - * @param start the place to start the search - * @param sorted if true, states are sorted before visited - * @return true if the visiting was terminated before all nodes were visited - */ - public static boolean visitStates(SentenceHMMStateVisitor visitor, - SentenceHMMState start, boolean sorted) { - Set states = collectStates(start); - - if (sorted) { - // sort the states by stateNumber - - TreeSet sortedStates = new TreeSet(new Comparator() { - - public int compare(SentenceHMMState o1, SentenceHMMState o2) { - SentenceHMMState so1 = o1; - SentenceHMMState so2 = o2; - return so1.stateNumber - so2.stateNumber; - } - }); - - sortedStates.addAll(states); - states = sortedStates; - } - - for (SentenceHMMState state : states) { - if (visitor.visit(state)) { - return true; - } - } - return false; - } - - - /** - * Sets the color for this node - * - * @param color the color of this node - */ - public void setColor(Color color) { - if (color == Color.RED) { - this.fields |= MASK_COLOR_RED; - } else { - this.fields &= ~MASK_COLOR_RED; - } - } - - - /** - * Gets the color for this node - * - * @return the color of this node - */ - public Color getColor() { - if ((fields & MASK_COLOR_RED) == MASK_COLOR_RED) { - return Color.RED; - } else { - return Color.GREEN; - } - } - - - /** - * Gets the state number for this state - * - * @return the state number - */ - private int getStateNumber() { - return stateNumber; - } - - - /** - * Collect all states starting from the given start state - * - * @param start the state to start the search from - * @return the set of collected state - */ - public static Set collectStates(SentenceHMMState start) { - Set visitedStates = new HashSet(); - List queue = new LinkedList(); - - queue.add(start); - - while (!queue.isEmpty()) { - SentenceHMMState state = queue.remove(0); - - visitedStates.add(state); - SearchStateArc[] successors = state.getSuccessors(); - for (SearchStateArc arc : successors) { - SentenceHMMState nextState = (SentenceHMMState)arc.getState(); - if (!visitedStates.contains(nextState) && !queue.contains(nextState)) { - queue.add(nextState); - } - } - } - return visitedStates; - } - - - /** - * Returns the order of this particular state - * - * @return the state order for this state - */ - abstract public int getOrder(); -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/SentenceHMMStateArc.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/SentenceHMMStateArc.java deleted file mode 100755 index dd0c34dd..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/SentenceHMMStateArc.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.flat; - -import edu.cmu.sphinx.linguist.SearchState; -import edu.cmu.sphinx.linguist.SearchStateArc; - -/** - * Represents a transition in a sentence HMM. Each transition is described by the next state and the associated acoustic - * and language probability for the transition. - *

    - * All probabilities are in the LogMath log domain - */ -public class SentenceHMMStateArc implements SearchStateArc { - - private final SentenceHMMState nextState; - private final float logLanguageProbability; - private final float logInsertionProbability; - private final int hashCode; - - - /** - * Creates a SentenceHMMStateArc - * - * @param nextState the next state - * @param logLanguageProbability the log language probability - * @param logInsertionProbability the log insertion probability - */ - public SentenceHMMStateArc(SentenceHMMState nextState, - float logLanguageProbability, - float logInsertionProbability) { - this.nextState = nextState; - this.logLanguageProbability = logLanguageProbability; - this.logInsertionProbability = logInsertionProbability; - - hashCode = 111 + nextState.hashCode() + - 17 * Float.floatToIntBits(logLanguageProbability) + - 23 * Float.floatToIntBits(logInsertionProbability); - - } - - - /** - * Determines if the given object is equal to this object - * - * @param o the object to compare to - * @return true if the objects are equal - */ - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } else if (o instanceof SentenceHMMStateArc) { - SentenceHMMStateArc other = (SentenceHMMStateArc) o; - return nextState == other.nextState && - logLanguageProbability == other.logLanguageProbability && - logInsertionProbability == other.logInsertionProbability; - - } else { - return false; - } - } - - - /** - * Returns a hashCode for this object - * - * @return the hashCode - */ - @Override - public int hashCode() { - return hashCode; - } - - - /** - * Retrieves the next state - * - * @return the next state - */ - public SearchState getState() { - return nextState; - } - - - /** - * For backwards compatibility - *

    - * Returns the next state as a SentenceHMSMtate - * - * @return the next state - */ - public SentenceHMMState getNextState() { - return (SentenceHMMState) getState(); - } - - - /** - * Retrieves the language transition probability for this transition - * - * @return the language transition probability in the logmath log domain - */ - public float getLanguageProbability() { - return logLanguageProbability; - } - - - /** - * Retrieves the insertion probability for this transition - * - * @return the insertion probability in the logmath log domain - */ - public float getInsertionProbability() { - return logInsertionProbability; - } - - - /** - * Gets the composite probability of entering this state - * - * @return the log probability - */ - public float getProbability() { - return logLanguageProbability + - logInsertionProbability; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/SentenceHMMStateVisitor.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/SentenceHMMStateVisitor.java deleted file mode 100755 index 5ddd9e05..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/SentenceHMMStateVisitor.java +++ /dev/null @@ -1,27 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.flat; - - -/** a visitor interface */ -interface SentenceHMMStateVisitor { - - /** - * Method called when a state is visited by the vistor - * - * @param state the state that is being visited - * @return true if the visiting should be terminated - */ - public boolean visit(SentenceHMMState state); -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/UnitState.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/UnitState.java deleted file mode 100755 index ab5fface..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/UnitState.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.flat; - -import edu.cmu.sphinx.linguist.UnitSearchState; -import edu.cmu.sphinx.linguist.acoustic.HMMPosition; -import edu.cmu.sphinx.linguist.acoustic.Unit; -import edu.cmu.sphinx.linguist.acoustic.UnitManager; - -/** Represents a unit in an SentenceHMMS */ -@SuppressWarnings("serial") -public class UnitState extends SentenceHMMState implements UnitSearchState { - - private final Unit unit; - private HMMPosition position = HMMPosition.INTERNAL; - - - /** - * Creates a UnitState. Gets the left and right contexts from the unit itself. - * - * @param parent the parent state - * @param which the index of the given state - * @param unit the unit associated with this state - */ - public UnitState(PronunciationState parent, int which, Unit unit) { - super("U", parent, which); - this.unit = unit; - Unit[] units = parent.getPronunciation().getUnits(); - int length = units.length; - - // If the last phone is SIL, then we should be using - // a word-ending phone for the last phone. Decrementing - // length will make the phone before SIL the last phone. - - if (units[length - 1] == UnitManager.SILENCE && length > 1) { - length--; - } - - if (length == 1) { - position = HMMPosition.SINGLE; - } else if (which == 0) { - position = HMMPosition.BEGIN; - } else if (which == length - 1) { - position = HMMPosition.END; - } - } - - - /** - * Creates a UnitState with the given unit and HMM position. - * - * @param unit the unit associated with this state - * @param position the HMM position of this unit - */ - public UnitState(Unit unit, HMMPosition position) { - this.unit = unit; - this.position = position; - } - - - /** - * Gets the unit associated with this state - * - * @return the unit - */ - public Unit getUnit() { - return unit; - } - - - /** - * Returns true if this unit is the last unit of the pronunciation - * - * @return true if the unit is the last unit - */ - public boolean isLast() { - return position == HMMPosition.SINGLE || position == HMMPosition.END; - } - - - /** - * Gets the name for this state - * - * @return the name for this state - */ - @Override - public String getName() { - return super.getName() + '<' + unit + '>'; - } - - - /** - * Returns the value signature of this unit - * - * @return the value signature - */ - @Override - public String getValueSignature() { - return unit.toString(); - } - - - /** - * Gets the pretty name for this unit sate - * - * @return the pretty name - */ - @Override - public String getPrettyName() { - return unit.toString(); - } - - - /** - * Retrieves a short label describing the type of this state. Typically, subclasses of SentenceHMMState will - * implement this method and return a short (5 chars or less) label - * - * @return the short label. - */ - @Override - public String getTypeLabel() { - return "Unit"; - } - - - /** - * Gets the position for this unit - * - * @return the position for this unit - */ - public HMMPosition getPosition() { - return position; - } - - - @Override - public boolean isUnit() { - return true; - } - - - /** - * Returns the state order for this state type - * - * @return the state order - */ - @Override - public int getOrder() { - return 5; - } -} - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/WordState.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/WordState.java deleted file mode 100755 index 70b31e62..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/flat/WordState.java +++ /dev/null @@ -1,76 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.flat; - -import edu.cmu.sphinx.linguist.dictionary.Word; - -/** Represents a word in an SentenceHMMS */ - -@SuppressWarnings("serial") -public class WordState extends SentenceHMMState { - - /** Creates a WordState - * @param parent a parent state - * @param which which state to pick - */ - public WordState(AlternativeState parent, int which) { - super("W", parent, which); - } - - - /** - * Gets the word associated with this state - * - * @return the word - */ - public Word getWord() { - return ((AlternativeState) getParent()).getAlternative()[getWhich()]; - } - - - /** - * Returns a pretty name for this state - * - * @return a pretty name for this state - */ - @Override - public String getPrettyName() { - return getName() + '(' + getWord().getSpelling() + ')'; - } - - - /** - * Retrieves a short label describing the type of this state. Typically, subclasses of SentenceHMMState will - * implement this method and return a short (5 chars or less) label - * - * @return the short label. - */ - @Override - public String getTypeLabel() { - return "Word"; - } - - - /** - * Returns the state order for this state type - * - * @return the state order - */ - @Override - public int getOrder() { - return 1; - } - -} - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/g2p/G2PConverter.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/g2p/G2PConverter.java deleted file mode 100755 index 560bc640..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/g2p/G2PConverter.java +++ /dev/null @@ -1,352 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.g2p; - -import java.io.IOException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.Queue; -import java.util.regex.Pattern; - -import edu.cmu.sphinx.fst.Arc; -import edu.cmu.sphinx.fst.Fst; -import edu.cmu.sphinx.fst.ImmutableFst; -import edu.cmu.sphinx.fst.State; -import edu.cmu.sphinx.fst.operations.ArcSort; -import edu.cmu.sphinx.fst.operations.Compose; -import edu.cmu.sphinx.fst.operations.ILabelCompare; -import edu.cmu.sphinx.fst.operations.NShortestPaths; -import edu.cmu.sphinx.fst.operations.OLabelCompare; -import edu.cmu.sphinx.fst.operations.Project; -import edu.cmu.sphinx.fst.operations.ProjectType; -import edu.cmu.sphinx.fst.operations.RmEpsilon; -import edu.cmu.sphinx.fst.semiring.Semiring; -import edu.cmu.sphinx.fst.semiring.TropicalSemiring; -import edu.cmu.sphinx.fst.utils.Utils; - -/** - * The grapheme-to-phoneme (g2p) decoder - * - * @author John Salatas - */ -public class G2PConverter { - - // epsilon symbol - String eps = ""; - - // end sequence symbol - String se = ""; - - // begin sequence symbol - String sb = ""; - - // skip symbol - String skip = "_"; - - // separator symbol - String tie = "|"; - - // set containing sequences to ignore - HashSet skipSeqs = new HashSet(); - - // clusters - ArrayList[] clusters = null; - - // the g2p model - ImmutableFst g2pmodel; - - // fst containing the epsilon filter for the compose operation - Fst epsilonFilter; - - /** - * Create a decoder by loading the serialized model from a specified URL - * - * @param g2pModelUrl - * the URL of the serialized model - * @throws IOException when model is not loaded - */ - public G2PConverter(URL g2pModelUrl) throws IOException { - try { - g2pmodel = ImmutableFst.loadModel(g2pModelUrl.openStream()); - } catch (ClassNotFoundException e) { - throw new IOException("Failed to load the model from " + g2pModelUrl, e); - } - init(); - } - - /** - * Create a decoder by loading the serialized model from a specified - * filename - * - * @param g2pmodel_file - * the filename of the serialized model - */ - public G2PConverter(String g2pmodel_file) { - g2pmodel = ImmutableFst.loadModel(g2pmodel_file); - init(); - } - - /** - * Initialize the decoder - */ - private void init() { - skipSeqs.add(eps); - skipSeqs.add(sb); - skipSeqs.add(se); - skipSeqs.add(skip); - skipSeqs.add("-"); - // keep an augmented copy (for compose) - Compose.augment(0, g2pmodel, g2pmodel.getSemiring()); - ArcSort.apply(g2pmodel, new ILabelCompare()); - - String[] isyms = g2pmodel.getIsyms(); - - loadClusters(isyms); - - // get epsilon filter for composition - epsilonFilter = Compose.getFilter(g2pmodel.getIsyms(), - g2pmodel.getSemiring()); - ArcSort.apply(epsilonFilter, new ILabelCompare()); - } - - /** - * Phoneticize a word - * - * @param entry - * the word to phoneticize transformed to an ArrayList of Strings - * (each element hold a single character) - * @param nbest - * the number of distinct pronunciations to return - * @return the pronunciation(s) of the input word - */ - public ArrayList phoneticize(ArrayList entry, int nbest) { - Fst efst = entryToFSA(entry); - Semiring s = efst.getSemiring(); - Compose.augment(1, efst, s); - ArcSort.apply(efst, new OLabelCompare()); - Fst result = Compose.compose(efst, epsilonFilter, s, true); - ArcSort.apply(result, new OLabelCompare()); - result = Compose.compose(result, g2pmodel, s, true); - Project.apply(result, ProjectType.OUTPUT); - if (nbest == 1) { - result = NShortestPaths.get(result, 1, false); - } else { - // Requesting 10 times more best paths than what was asking - // as there might be several paths resolving to same pronunciation - // due to epsilon transitions. - // I really hate cosmological constants :) - result = NShortestPaths.get(result, nbest * 10, false); - } - // result = NShortestPaths.get(result, nbest, false); - result = RmEpsilon.get(result); - ArrayList paths = findAllPaths(result, nbest, skipSeqs, - tie); - - return paths; - } - - /** - * Phoneticize a word - * - * @param word - * the word to phoneticize - * @param nbest - * the number of distinct pronunciations to return - * @return the pronunciation(s) of the input word - */ - public ArrayList phoneticize(String word, int nbest) { - ArrayList entry = new ArrayList(word.length()); - for (int i = 0; i < word.length(); i++) { - String ch = word.substring(i, i + 1); - if (Utils.getIndex(g2pmodel.getIsyms(), ch) >= 0) { - entry.add(ch); - } - } - return phoneticize(entry, nbest); - } - - /** - * Transforms an input spelling/pronunciation into an equivalent FSA, adding - * extra arcs as needed to accommodate clusters. - * - * @param entry - * the input vector - * @return the created fst - */ - private Fst entryToFSA(ArrayList entry) { - TropicalSemiring ts = new TropicalSemiring(); - Fst efst = new Fst(ts); - - State s = new State(ts.zero()); - efst.addState(s); - efst.setStart(s); - - // Build the basic FSA - for (int i = 0; i < entry.size() + 1; i++) { - s = new State(ts.zero()); - efst.addState(s); - if (i >= 1) { - int symIndex = Utils.getIndex(g2pmodel.getIsyms(), - entry.get(i - 1)); - efst.getState(i).addArc(new Arc(symIndex, symIndex, 0.f, s)); - } else if (i == 0) { - int symIndex = Utils.getIndex(g2pmodel.getIsyms(), sb); - efst.getStart().addArc(new Arc(symIndex, symIndex, 0.f, s)); - } - - if (i == entry.size()) { - State s1 = new State(ts.zero()); - efst.addState(s1); - int symIndex = Utils.getIndex(g2pmodel.getIsyms(), se); - s.addArc(new Arc(symIndex, symIndex, 0.f, s1)); - s1.setFinalWeight(0.f); - } - } - - // Add any cluster arcs - for (int value = 0; value < clusters.length; value++) { - ArrayList cluster = clusters[value]; - if (cluster != null) { - int start = 0; - int k = 0; - while (k != -1) { - k = Utils.search(entry, cluster, start); - if (k != -1) { - State from = efst.getState(start + k + 1); - from.addArc(new Arc(value, value, 0.f, efst - .getState(start + k + cluster.size() + 1))); - start = start + k + cluster.size(); - } - } - } - } - - efst.setIsyms(g2pmodel.getIsyms()); - efst.setOsyms(g2pmodel.getIsyms()); - - return efst; - } - - /** - * Finds nbest paths in an Fst returned by NShortestPaths operation - * - * @param fst - * the input fst - * @param nbest - * the number of paths to return - * @param skipSeqs - * the sequences to ignore - * @param tie - * the separator symbol - * @return the paths - */ - @SuppressWarnings("unchecked") - private ArrayList findAllPaths(Fst fst, int nbest, - HashSet skipSeqs, String tie) { - Semiring semiring = fst.getSemiring(); - - // ArrayList finalPaths = new ArrayList(); - HashMap finalPaths = new HashMap(); - HashMap paths = new HashMap(); - Queue queue = new LinkedList(); - Path p = new Path(fst.getSemiring()); - p.setCost(semiring.one()); - paths.put(fst.getStart(), p); - - queue.add(fst.getStart()); - - String[] osyms = fst.getOsyms(); - while (!queue.isEmpty()) { - State s = queue.remove(); - Path currentPath = paths.get(s); - - if (s.getFinalWeight() != semiring.zero()) { - String pathString = currentPath.getPath().toString(); - if (finalPaths.containsKey(pathString)) { - // path already exist. update its cost - Path old = finalPaths.get(pathString); - if (old.getCost() > currentPath.getCost()) { - finalPaths.put(pathString, currentPath); - } - } else { - finalPaths.put(pathString, currentPath); - } - } - - int numArcs = s.getNumArcs(); - for (int j = 0; j < numArcs; j++) { - Arc a = s.getArc(j); - p = new Path(fst.getSemiring()); - Path cur = paths.get(s); - p.setCost(cur.getCost()); - p.setPath((ArrayList) cur.getPath().clone()); - - String sym = osyms[a.getOlabel()]; - - String[] symsArray = sym.split("\\" + tie); - - for (int i = 0; i < symsArray.length; i++) { - String phone = symsArray[i]; - if (!skipSeqs.contains(phone)) { - p.getPath().add(phone); - } - } - p.setCost(semiring.times(p.getCost(), a.getWeight())); - State nextState = a.getNextState(); - paths.put(nextState, p); - if (!queue.contains(nextState)) { - queue.add(nextState); - } - } - } - - ArrayList res = new ArrayList(); - for (Path path : finalPaths.values()) { - res.add(path); - } - - Collections.sort(res, new PathComparator()); - int numPaths = res.size(); - for (int i = nbest; i < numPaths; i++) { - res.remove(res.size() - 1); - } - - return res; - } - - /** - * Initialize clusters - */ - @SuppressWarnings("unchecked") - private void loadClusters(String[] syms) { - clusters = new ArrayList[syms.length]; - for (int i = 0; i < syms.length; i++) { - clusters[i] = null; - } - for (int i = 2; i < syms.length; i++) { - String sym = syms[i]; - if (sym.contains(tie)) { - String split[] = sym.split(Pattern.quote(tie)); - ArrayList cluster = new ArrayList( - Arrays.asList(split)); - clusters[i] = cluster; - } - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/g2p/Path.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/g2p/Path.java deleted file mode 100755 index 468915cd..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/g2p/Path.java +++ /dev/null @@ -1,99 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.g2p; - -import java.util.ArrayList; - -import edu.cmu.sphinx.fst.semiring.Semiring; - -/** - * @author John Salatas - */ -public class Path { - // the path - private ArrayList path; - - // the path's cost - private float cost; - - // the paths' semiring - private Semiring semiring; - - /** - * Create a Path instance with specified path and semiring elements - * @param path word list to create path from - * @param semiring the semiring to use - */ - public Path(ArrayList path, Semiring semiring) { - this.path = path; - this.semiring = semiring; - cost = this.semiring.zero(); - } - - /** - * Create a Path instance with specified semiring element - * @param semiring semiring to use - */ - public Path(Semiring semiring) { - this(new ArrayList(), semiring); - } - - /** - * Get the path - * @return word path - */ - public ArrayList getPath() { - return path; - } - - /** - * Get the paths' cost - * @return path cost - */ - public float getCost() { - return cost; - } - - /** - * Set the paths' cost - * @param cost to set - */ - public void setCost(float cost) { - this.cost = cost; - } - - /** - * Set the path - * @param path set from list of word - */ - public void setPath(ArrayList path) { - this.path = path; - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append(cost + "\t"); - for (String s : path) { - sb.append(s); - sb.append(' '); - } - return sb.toString().trim(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/g2p/PathComparator.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/g2p/PathComparator.java deleted file mode 100755 index 46f1b9e0..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/g2p/PathComparator.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.g2p; - -import java.util.Comparator; - -/** - * Comparator for {@link edu.cmu.sphinx.linguist.g2p.Path} object based on its cost - * @author John Salatas - */ -public class PathComparator implements Comparator { - - /* - * (non-Javadoc) - * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) - */ - public int compare(Path o1, Path o2) { - if (o1.getCost() < o2.getCost()) - return -1; - else if (o1.getCost() > o2.getCost()) - return 1; - - return 0; - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/classes/ClassBasedLanguageModel.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/classes/ClassBasedLanguageModel.java deleted file mode 100755 index 5295bba2..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/classes/ClassBasedLanguageModel.java +++ /dev/null @@ -1,171 +0,0 @@ -/** - * Created on Jan 19, 2005 - */ -package edu.cmu.sphinx.linguist.language.classes; - -import java.io.IOException; -import java.util.HashSet; -import java.util.Set; - -import edu.cmu.sphinx.linguist.WordSequence; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.linguist.language.ngram.LanguageModel; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Component; - - -/** - * An LM that computes a probability of a word sequence by converting words to - * classes and asking the class-based probability from a delegate LM. - * - * @author Tanel Alumae - */ -public class ClassBasedLanguageModel implements LanguageModel { - - /** - * The property that defines the classLanguageModel component. - */ - @S4Component(type = LanguageModel.class) - public final static String PROP_CLASS_LANGUAGE_MODEL = - "classLanguageModel"; - - /** - * The property that defines the classMap component. - */ - @S4Component(type = ClassMap.class) - public final static String PROP_CLASS_MAP = "classMap"; - - // ---------------------------- - // Configuration data - // ---------------------------- - private LanguageModel classLM; - private Set vocabulary; - - private boolean allocated = false; - - private ClassMap classMap; - - public ClassBasedLanguageModel(ClassMap classMap, LanguageModel classLM) { - this.classMap = classMap; - this.classLM = classLM; - } - - public ClassBasedLanguageModel() { - - } - - /* - * (non-Javadoc) - * @see - * edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx. - * util.props.PropertySheet) - */ - public void newProperties(PropertySheet ps) throws PropertyException { - if (allocated) { - throw new PropertyException( - ClassBasedLanguageModel.class.getName(), - null, - "Can't change properties after allocation"); - } - classMap = (ClassMap) ps.getComponent(PROP_CLASS_MAP); - classLM = (LanguageModel) ps.getComponent(PROP_CLASS_LANGUAGE_MODEL); - } - - /* - * (non-Javadoc) - * @see edu.cmu.sphinx.linguist.language.ngram.LanguageModel#allocate() - */ - public void allocate() throws IOException { - if (!allocated) { - allocated = true; - classMap.allocate(); - classLM.allocate(); - makeVocabulary(); - } - } - - /* - * (non-Javadoc) - * @see edu.cmu.sphinx.linguist.language.ngram.LanguageModel#deallocate() - */ - public void deallocate() throws IOException { - allocated = false; - classLM.deallocate(); - classMap.deallocate(); - vocabulary = null; - } - - /** - * Actual implementation of the class-based LM: P=P(W|C1)*P(C1|C2,C3..) - * @see - * edu.cmu.sphinx.linguist.language.ngram.LanguageModel#getProbability( - * edu.cmu.sphinx.linguist.WordSequence) - */ - public float getProbability(WordSequence wordSequence) { - Word[] classes = new Word[wordSequence.size()]; - float wordToClassProb = 0; - for (int i = 0; i < classes.length; i++) { - Word sourceWord = wordSequence.getWord(i); - ClassProbability classProbability = - classMap.getClassProbability(sourceWord.getSpelling()); - classes[i] = - (classProbability == null ? sourceWord : classMap - .getClassAsWord(classProbability.getClassName())); - if (i == classes.length - 1) { - if (classProbability != null) { - // the first word of the word sequence is a class - wordToClassProb = classProbability.getLogProbability(); - } - } - } - float classBasedProbability = - classLM.getProbability(new WordSequence(classes)); - return classBasedProbability + wordToClassProb; - } - - /** - * Gets the smear term for the given wordSequence - * - * @param wordSequence the word sequence - * @return the smear term associated with this word sequence - */ - public float getSmear(WordSequence wordSequence) { - return 0.0f; // TODO not implemented - } - - /* - * (non-Javadoc) - * @see - * edu.cmu.sphinx.linguist.language.ngram.LanguageModel#getVocabulary() - */ - public Set getVocabulary() { - return vocabulary; - } - - /** - * Returns the maximum depth of the language model - * - * @return the maximum depth of the language mdoel - */ - public int getMaxDepth() { - return classLM.getMaxDepth(); - } - - /** - * Converts a vocabulary of the class LM to a word vocabulary. - */ - private void makeVocabulary() { - vocabulary = new HashSet(); - for (String name : classLM.getVocabulary()) { - Set wordsInClass = classMap.getWordsInClass(name); - if (wordsInClass == null) { - // 'name' not a class - vocabulary.add(name); - } else { - vocabulary.addAll(wordsInClass); - } - } - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/classes/ClassMap.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/classes/ClassMap.java deleted file mode 100755 index 6eb3757e..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/classes/ClassMap.java +++ /dev/null @@ -1,173 +0,0 @@ -package edu.cmu.sphinx.linguist.language.classes; - -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.props.*; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.URL; -import java.util.*; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * A component that knows how to map words to classes and vice versa. - * - * @author Tanel Alumae - */ -public class ClassMap implements Configurable { - @S4String - public final static String PROP_CLASS_DEFS_LOCATION = "classDefsLocation"; - - private Logger logger; - private boolean allocated; - private URL classDefsLocation; - private LogMath logMath; - - /** - * Maps class name to class as a Word - */ - private Map classVocabulary = new HashMap(); - - /** - * Maps a word to it's class and the probability of the word being in this class - */ - private Map wordToClassProbabilities = new HashMap(); - - /** - * Maps a class to a set of words that belong to this class - */ - private final HashMap> classToWord = new HashMap>(); - - public ClassMap(URL classDefsLocation) { - this.logger = Logger.getLogger(getClass().getName()); - this.classDefsLocation = classDefsLocation; - logMath = LogMath.getLogMath(); - } - - public ClassMap() { - - } - - /* (non-Javadoc) - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - public void newProperties(PropertySheet ps) throws PropertyException { - logger = ps.getLogger(); - - if (allocated) - throw new RuntimeException("Can't change properties after allocation"); - - classDefsLocation = ConfigurationManagerUtils.getResource(PROP_CLASS_DEFS_LOCATION, ps); - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.linguist.language.ngram.LanguageModel#allocate() - */ - public void allocate() throws IOException { - if (!allocated) { - allocated = true; - loadClassDefs(); - } - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.linguist.language.ngram.LanguageModel#deallocate() - */ - public void deallocate() { - allocated = false; - wordToClassProbabilities = null; - classVocabulary = null; - } - - public ClassProbability getClassProbability(String word) { - return wordToClassProbabilities.get(word); - } - - public Word getClassAsWord(String text) { - return classVocabulary.get(text); - } - - public Set getWordsInClass(String className) { - return classToWord.get(className); - } - - - /** - * Loads class definitions. - * Class definitions should be in SRILM format: - *

    -     * CLASS1 probability1 WORD1
    -     * CLASS2 probability2 WORD2
    -     * ...
    -     * 
    - * Probabilities should be given in linear domain. - * - * @throws java.io.IOException If an IO error occurs during loading Class definition resource. - */ - private void loadClassDefs() throws IOException { - BufferedReader reader = new BufferedReader - (new InputStreamReader(classDefsLocation.openStream())); - String line; - while ((line = reader.readLine()) != null) { - StringTokenizer st = new StringTokenizer(line, " \t\n\r\f="); - if (st.countTokens() != 3) { - throw new IOException("corrupt word to class def: " + line + "; " - + st.countTokens()); - } - String className = st.nextToken(); - float linearProb = Float.parseFloat(st.nextToken()); - String word = st.nextToken(); - if (logger.isLoggable(Level.FINE)) { - logger.fine(word + " --> " + className + " " + linearProb); - } - wordToClassProbabilities.put(word, - new ClassProbability(className, logMath.linearToLog(linearProb))); - classVocabulary.put(className, new Word(className, null, false)); - addWordInClass(className, word); - } - reader.close(); - checkClasses(); - logger.info("Loaded word to class mappings for " + wordToClassProbabilities.size() + " words"); - } - - /** - * Checks that word probabilities in each class sum to 1. - */ - private void checkClasses() { - Map sums = new HashMap(); - for (ClassProbability cp : wordToClassProbabilities.values()) { - Float sum = sums.get(cp.getClassName()); - if (sum == null) { - sums.put(cp.getClassName(), 0f); - } else { - sums.put(cp.getClassName(), (float) logMath.logToLinear(cp.getLogProbability()) + sum); - } - } - - for (Map.Entry entry : sums.entrySet()) { - if (Math.abs(1.0 - entry.getValue()) > 0.001) { - logger.warning("Word probabilities for class " + entry.getKey() + " sum to " + entry.getValue()); - } - } - } - - /** - * @param className Name of the class - * @param word Word String - */ - private void addWordInClass(String className, String word) { - Set words = classToWord.get(className); - if (words == null) { - words = new HashSet(); - classToWord.put(className, words); - } - words.add(word); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/classes/ClassPresentingDictionary.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/classes/ClassPresentingDictionary.java deleted file mode 100755 index f13ad3bd..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/classes/ClassPresentingDictionary.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Created on Jan 19, 2005 - */ -package edu.cmu.sphinx.linguist.language.classes; - -import edu.cmu.sphinx.linguist.dictionary.Dictionary; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Component; - -import java.io.IOException; - -/** - * The only purpose of this class is to present all classes - * as words in the getWord() method. This dictionary must be injected to - * a class LM as a dictionary, otherwise classes will be treated as OOVs. - * - * @author Tanel Alumae - */ -public class ClassPresentingDictionary implements Dictionary { - - @S4Component(type = ClassMap.class) - public final static String PROP_CLASS_MAP = "classMap"; - - @S4Component(type = Dictionary.class) - public final static String PROP_WORD_DICTIONARY = "wordDictionary"; - - private boolean allocated = false; - private Dictionary wordDictionary; - private ClassMap classMap; - - public ClassPresentingDictionary(ClassMap classMap, Dictionary wordDictionary) { - this.classMap = classMap; - this.wordDictionary = wordDictionary; - } - - public ClassPresentingDictionary() { - - } - - public void newProperties(PropertySheet ps) throws PropertyException { - classMap = (ClassMap) ps.getComponent(PROP_CLASS_MAP); - wordDictionary = (Dictionary) ps.getComponent(PROP_WORD_DICTIONARY); - - } - - public void allocate() throws IOException { - if (!allocated) { - allocated = true; - wordDictionary.allocate(); - classMap.allocate(); - } - } - - - public void deallocate() { - allocated = false; - wordDictionary = null; - } - - /** - * This method disguises all classes as words. - */ - public Word getWord(String text) { - Word word = classMap.getClassAsWord(text); - return (word != null) ? word : wordDictionary.getWord(text); - } - - /* (non-Javadoc) - * @see edu.cmu.sphinx.linguist.dictionary.Dictionary#getSentenceStartWord() - */ - public Word getSentenceStartWord() { - return wordDictionary.getSentenceStartWord(); - } - - /* (non-Javadoc) - * @see edu.cmu.sphinx.linguist.dictionary.Dictionary#getSentenceEndWord() - */ - public Word getSentenceEndWord() { - return wordDictionary.getSentenceEndWord(); - } - - /* (non-Javadoc) - * @see edu.cmu.sphinx.linguist.dictionary.Dictionary#getSilenceWord() - */ - public Word getSilenceWord() { - return wordDictionary.getSilenceWord(); - } - - /* (non-Javadoc) - * @see edu.cmu.sphinx.linguist.dictionary.Dictionary#getFillerWords() - */ - public Word[] getFillerWords() { - return wordDictionary.getFillerWords(); - } - - @Override - public String toString() { - return "Word dictionary:\n" + wordDictionary.toString() - + "Classes:\n" + classMap.toString(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/classes/ClassProbability.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/classes/ClassProbability.java deleted file mode 100755 index 8c6a7b89..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/classes/ClassProbability.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Created on Mar 4, 2005 - */ -package edu.cmu.sphinx.linguist.language.classes; - -/** - * Represents a probability of a word belonging to class. - * - * @author Tanel Alumae - */ -class ClassProbability { - - private final String className; - private final float logProbability; - - /** - * @param className Name of the class - * @param logProbability Log probability - */ - public ClassProbability(String className, float logProbability) { - this.className = className; - this.logProbability = logProbability; - } - - public String getClassName() { - return className; - } - - public float getLogProbability() { - return logProbability; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/AlignerGrammar.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/AlignerGrammar.java deleted file mode 100755 index 800ef607..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/AlignerGrammar.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist.language.grammar; - -import static java.util.Arrays.asList; - -import java.util.ArrayList; -import java.util.List; - -import edu.cmu.sphinx.linguist.dictionary.Dictionary; -import edu.cmu.sphinx.util.LogMath; - -public class AlignerGrammar extends Grammar { - - protected GrammarNode finalNode; - private final List tokens = new ArrayList(); - - public AlignerGrammar(final boolean showGrammar, final boolean optimizeGrammar, final boolean addSilenceWords, - final boolean addFillerWords, final Dictionary dictionary) { - super(showGrammar, optimizeGrammar, addSilenceWords, addFillerWords, dictionary); - } - - public AlignerGrammar() { - } - - /* - * Reads Text and converts it into a list of tokens - */ - public void setText(String text) { - setWords(asList(text.split(" "))); - } - - public void setWords(Iterable words) { - tokens.clear(); - for (String word : words) { - if (!word.isEmpty()) { - tokens.add(word); - } - } - createGrammar(); - postProcessGrammar(); - } - - @Override - protected GrammarNode createGrammar() { - - logger.info("Making Grammar"); - - initialNode = createGrammarNode(Dictionary.SILENCE_SPELLING); - finalNode = createGrammarNode(true); - - GrammarNode prevNode = initialNode; - for (final String word : tokens) { - final GrammarNode wordNode = createGrammarNode(word); - final GrammarNode alternativeNode = createGrammarNode(false); - final GrammarNode exitNode = createGrammarNode(false); - prevNode.add(wordNode, LogMath.LOG_ONE); - prevNode.add(alternativeNode, LogMath.LOG_ONE); - wordNode.add(exitNode, LogMath.LOG_ONE); - alternativeNode.add(exitNode, LogMath.LOG_ONE); - prevNode = exitNode; - } - prevNode.add(finalNode, LogMath.LOG_ONE); - - logger.info("Done making Grammar"); - return initialNode; - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/BatchForcedAlignerGrammar.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/BatchForcedAlignerGrammar.java deleted file mode 100755 index 15350e3b..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/BatchForcedAlignerGrammar.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist.language.grammar; - -import edu.cmu.sphinx.linguist.dictionary.Dictionary; -import edu.cmu.sphinx.util.props.*; - -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; -import java.io.LineNumberReader; -import java.util.HashMap; -import java.util.Map; - -/** - * @author Peter Wolf - */ -public class BatchForcedAlignerGrammar extends ForcedAlignerGrammar implements GrammarInterface { - - /** Property that defines the reference file containing the transcripts used to create the froced align grammar */ - @S4String(defaultValue = "") - public final static String PROP_REF_FILE = "refFile"; - - protected String refFile; - protected final Map grammars = new HashMap(); - protected String currentUttName = ""; - - public BatchForcedAlignerGrammar(String refFile, boolean showGrammar, boolean optimizeGrammar, boolean addSilenceWords, - boolean addFillerWords, Dictionary dictionary) { - super(showGrammar, optimizeGrammar, addSilenceWords, addFillerWords, dictionary); - this.refFile = refFile; - } - - public BatchForcedAlignerGrammar () { - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - - refFile = ps.getString(PROP_REF_FILE); - } - - - @Override - protected GrammarNode createGrammar() { - // TODO: FlatLinguist requires the initial grammar node - // to contain a single silence. We'll do that for now, - // but once the FlatLinguist is fixed, this should be - // returned to its former method of creating an empty - // initial grammar node - // initialNode = createGrammarNode(initialID, false); - - initialNode = null; - finalNode = createGrammarNode(true); - try { - LineNumberReader in = new LineNumberReader(new FileReader(refFile)); - String line; - while (true) { - line = in.readLine(); - - if (line == null || line.isEmpty()) - break; - - int uttNameStart = line.indexOf('(') + 1; - int uttNameEnd = line.indexOf(')'); - - if (uttNameStart < 0 || uttNameStart > uttNameEnd) - continue; - - String uttName = line.substring(uttNameStart, uttNameEnd); - String transcript = line.substring(0, uttNameStart - 1).trim(); - - if (transcript.isEmpty()) - continue; - - initialNode = createGrammarNode(Dictionary.SILENCE_SPELLING); - createForcedAlignerGrammar(initialNode, finalNode, transcript); - grammars.put(uttName, initialNode); - currentUttName = uttName; - } - in.close(); - } catch (FileNotFoundException e) { - throw new Error(e); - } catch (IOException e) { - throw new Error(e); - } - return initialNode; - } - - - @Override - public GrammarNode getInitialNode() { - return initialNode; - } - - - public void setUtterance(String utteranceName) { - initialNode = grammars.get(utteranceName); - assert initialNode != null; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/FSTGrammar.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/FSTGrammar.java deleted file mode 100755 index 881e1d22..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/FSTGrammar.java +++ /dev/null @@ -1,443 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist.language.grammar; - -import edu.cmu.sphinx.linguist.dictionary.Dictionary; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.util.ExtendedStreamTokenizer; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.props.*; - -import java.io.IOException; -import java.util.*; - -/** - * Loads a grammar from a file representing a finite-state transducer (FST) in the 'ARPA' grammar format. The ARPA FST - * format is like so (the explanation of the format is below):
    - *
    - *  I 2
    - *  F 0 2.30259
    - *  T 0 1 <unknown> <unknown> 2.30259
    - *  T 0 4 wood wood 1.60951
    - *  T 0 5 cindy cindy 1.60951
    - *  T 0 6 pittsburgh pittsburgh 1.60951
    - *  T 0 7 jean jean 1.60951
    - *  F 1 2.89031
    - *  T 1 0 , , 0.587725
    - *  T 1 4 wood wood 0.58785
    - *  F 2 3.00808
    - *  T 2 0 , , 0.705491
    - *  T 2 1 <unknown> <unknown> 0.58785
    - *  F 3 2.30259
    - *  T 3 0
    - *  F 4 2.89031
    - *  T 4 0 , , 0.587725
    - *  T 4 6 pittsburgh pittsburgh 0.58785
    - *  F 5 2.89031
    - *  T 5 0 , , 0.587725
    - *  T 5 7 jean jean 0.58785
    - *  F 6 2.89031
    - *  T 6 0 , , 0.587725
    - *  T 6 5 cindy cindy 0.58785
    - *  F 7 1.28093
    - *  T 7 0 , , 0.454282
    - *  T 7 4 wood wood 1.28093
    - *   
    - * Key: - *
    - *  I - initial node, so "I 2" means node 2 is the initial node
    - *  F - final node, e.g., "F 0 2.30259" means that node 0 is a final node,
    - *  and the probability of finishing at node 0 is 2.30259 (in -ln)
    - *  T - transition, "T 0 4 wood wood 1.60951" means "transitioning from
    - *  node 0 to node 4, the output is wood and the machine is now
    - *  in the node wood, and the probability associated with the
    - *  transition is 1.60951 (in -ln)". "T 6 0 , , 0.587725" is
    - *  a backoff transition, and the output is null (epsilon in
    - *  the picture), and the machine is now in the null node.
    - *  
    - * Probabilities read in from the FST file are in negative natural log format and are converted to the internal logMath - * log base. - *

    - * As the FST file is read in, a Grammar object that is structurally equivalent to the FST is created. The steps of - * converting the FST file to a Grammar object are: - *

      - *
    1. Create all the Grammar nodes
      Go through the entire FST file and for each word transition, take the - * destination node ID and create a grammar node using that ID. These nodes are kept in a hashmap to make sure they - * are created once for each ID. Therefore, we get one word per grammar node.
    2. - *
    3. Create an end node for each Grammar node
      This is end node is used for backoff transitions into the - * Grammar node, so that it will not go through the word itself, but instead go directly to the end of the word. - * Moreover, we also add an optional silence node between the grammar node and its end node. The result of this - * step on each grammar node (show in Figure 1 below as the circle with "word") is as follows. The end node is the empty - * circle at the far right:
      Fst end node
      Figure 1: Addition of end node and the - * optional silence.
    4. - *
    5. Create the transitions
      Read through the entire FST file, and for each line indicating a transition, - * connect up the corresponding Grammar nodes. Backoff transitions and null transitions (i.e., the ones that do not - * output a word) will be linked to the end node of a grammar node.
    6. - *
    - */ - -public class FSTGrammar extends Grammar { - - /** The property for the location of the FST n-gram file. */ - @S4String(defaultValue = "default.arpa_gram") - public final static String PROP_PATH = "path"; - - // TODO: If this property turns out to be worthwhile, turn this - // into a full fledged property - private boolean addInitialSilenceNode; - - // TODO: If this property turns out to be worthwhile, turn this - // into a full fledged property - - // ------------------------------ - // Configuration data - // ------------------------------- - - private boolean addOptionalSilence; - private final boolean ignoreUnknownTransitions = true; - private String path; - private LogMath logMath; - - private final Map nodes = new HashMap(); - private final Set expandedNodes = new HashSet(); - - - /** - * Create class from reference text (not implemented). - * - * @param bogusText dummy variable - */ - @Override - protected GrammarNode createGrammar(String bogusText) - throws NoSuchMethodException { - throw new NoSuchMethodException("Does not create " - + "grammar with reference text"); - } - - - public FSTGrammar(String path, boolean showGrammar, boolean optimizeGrammar, boolean addSilenceWords, boolean addFillerWords, Dictionary dictionary) { - super(showGrammar,optimizeGrammar,addSilenceWords,addFillerWords,dictionary); - this.path = path; - logMath = LogMath.getLogMath(); - } - - public FSTGrammar() { - - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - - path = ps.getString(PROP_PATH); - } - - - /** - * Creates the grammar. - * - * @return the initial node for the grammar. - */ - @Override - protected GrammarNode createGrammar() throws IOException { - - GrammarNode initialNode = null; - GrammarNode finalNode = null; - - // first pass create the FST nodes - int maxNodeId = createNodes(path); - - // create the final node: - finalNode = createGrammarNode(++maxNodeId, Dictionary.SILENCE_SPELLING); - finalNode.setFinalNode(true); - - // replace each word node with a pair of nodes, which - // consists of the word node and a new dummy end node, which is - // for adding null or backoff transitions - maxNodeId = expandWordNodes(maxNodeId); - - ExtendedStreamTokenizer tok = new ExtendedStreamTokenizer(path, true); - - // Second pass, add all of the arcs - - while (!tok.isEOF()) { - String token; - tok.skipwhite(); - token = tok.getString(); - - // System.out.println(token); - - if (token == null) { - break; - - } else if (token.equals("I")) { - assert initialNode == null; - int initialID = tok.getInt("initial ID"); - String nodeName = "G" + initialID; - - // TODO: FlatLinguist requires the initial grammar node - // to contain a single silence. We'll do that for now, - // but once the FlatLinguist is fixed, this should be - // returned to its former method of creating an empty - // initial grammar node - // initialNode = createGrammarNode(initialID, false); - - initialNode = createGrammarNode(initialID, - Dictionary.SILENCE_SPELLING); - nodes.put(nodeName, initialNode); - - // optionally add a silence node - if (addInitialSilenceNode) { - GrammarNode silenceNode = - createGrammarNode(++maxNodeId, - Dictionary.SILENCE_SPELLING); - initialNode.add(silenceNode, LogMath.LOG_ONE); - silenceNode.add(initialNode, LogMath.LOG_ONE); - } - - } else if (token.equals("T")) { - int thisID = tok.getInt("this id"); - int nextID = tok.getInt("next id"); - - GrammarNode thisNode = get(thisID); - GrammarNode nextNode = get(nextID); - - // if the source node is an FSTGrammarNode, we want - // to join the endNode to the destination node - - if (hasEndNode(thisNode)) { - thisNode = getEndNode(thisNode); - } - - float lnProb = 0f; // negative natural log - String output = tok.getString(); - - if (output == null || output.equals(",")) { - - // these are epsilon (meaning backoff) transitions - - if (output != null && output.equals(",")) { - tok.getString(); // skip the word - lnProb = tok.getFloat("probability"); - } - - // if the destination node has been expanded - // we actually want to add the backoff transition - // to the endNode - - if (hasEndNode(nextNode)) { - nextNode = getEndNode(nextNode); - } - - } else { - String word = tok.getString(); // skip words - lnProb = tok.getFloat("probability"); - - if (ignoreUnknownTransitions && word.equals("")) { - continue; - } - /* - * System.out.println(nextNode + ": " + output); - */ - assert hasWord(nextNode); - } - - thisNode.add(nextNode, convertProbability(lnProb)); - - } else if (token.equals("F")) { - int thisID = tok.getInt("this id"); - float lnProb = tok.getFloat("probability"); - - GrammarNode thisNode = get(thisID); - GrammarNode nextNode = finalNode; - - if (hasEndNode(thisNode)) { - thisNode = getEndNode(thisNode); - } - - thisNode.add(nextNode, convertProbability(lnProb)); - } - } - tok.close(); - - assert initialNode != null; - - return initialNode; - } - - - /** - * Reads the FST file in the given path, and creates the nodes in the FST file. - * - * @param path the path of the FST file to read - * @return the highest ID of all nodes - * @throws java.io.IOException - */ - private int createNodes(String path) throws IOException { - ExtendedStreamTokenizer tok = new ExtendedStreamTokenizer(path, true); - int maxNodeId = 0; - while (!tok.isEOF()) { - tok.skipwhite(); - String token = tok.getString(); - if (token == null) { - break; - } else if (token.equals("T")) { - tok.getInt("src id"); // toss source node - int id = tok.getInt("dest id"); // dest node numb - if (id > maxNodeId) { - maxNodeId = id; - } - String word1 = tok.getString(); // get word - if (word1 == null) { - continue; - } - String word2 = tok.getString(); // get word - tok.getString(); // toss probability - String nodeName = "G" + id; - GrammarNode node = nodes.get(nodeName); - if (node == null) { - if (word2.equals(",")) { - node = createGrammarNode(id, false); - } else { - node = createGrammarNode(id, word2); - } - nodes.put(nodeName, node); - } else { - if (!word2.equals(",")) { - /* - * if (!word2.equals(getWord(node))) { - * System.out.println(node + ": " + word2 + ' ' + getWord(node)); } - */ - assert (word2.equals(getWord(node))); - } - } - } - } - tok.close(); - return maxNodeId; - } - - - /** - * Expand each of the word nodes into a pair of nodes, as well as adding an optional silence node between the - * grammar node and its end node. - * - * @param maxNodeID the node ID to start with for the new nodes - * @return the last (or maximum) node ID - */ - private int expandWordNodes(int maxNodeID) { - Collection allNodes = nodes.values(); - String[][] silence = {{Dictionary.SILENCE_SPELLING}}; - for (GrammarNode node :allNodes) { - // if it has at least one word, then expand the node - if (node.getNumAlternatives() > 0) { - GrammarNode endNode = createGrammarNode(++maxNodeID, false); - node.add(endNode, LogMath.LOG_ONE); - // add an optional silence - if (addOptionalSilence) { - GrammarNode silenceNode = createGrammarNode(++maxNodeID, - silence); - node.add(silenceNode, LogMath.LOG_ONE); - silenceNode.add(endNode, LogMath.LOG_ONE); - } - expandedNodes.add(node); - } - } - return maxNodeID; - } - - - /** - * Converts the probability from -ln to logmath - * - * @param lnProb the probability to convert. Probabilities in the arpa format in negative natural log format. We - * convert them to logmath. - * @return the converted probability in logMath log base - */ - private float convertProbability(float lnProb) { - return logMath.lnToLog(-lnProb); - } - - - /** - * Given an id returns the associated grammar node - * - * @param id the id of interest - * @return the grammar node or null if none could be found with the proper id - */ - private GrammarNode get(int id) { - String name = "G" + id; - GrammarNode grammarNode = nodes.get(name); - if (grammarNode == null) { - grammarNode = createGrammarNode(id, false); - nodes.put(name, grammarNode); - } - return grammarNode; - } - - - /** - * Determines if the node has a word - * - * @param node the grammar node of interest - * @return true if the node has a word - */ - private boolean hasWord(GrammarNode node) { - return (node.getNumAlternatives() > 0); - } - - - /** - * Gets the word from the given grammar ndoe - * - * @param node the node of interest - * @return the word (or null if the node has no word) - */ - private String getWord(GrammarNode node) { - String word = null; - if (node.getNumAlternatives() > 0) { - Word[][] alternatives = node.getAlternatives(); - word = alternatives[0][0].getSpelling(); - } - return word; - } - - - /** - * Determines if the given node has an end node associated with it. - * - * @param node the node of interest - * @return true if the given node has an end node. - */ - private boolean hasEndNode(GrammarNode node) { - return (expandedNodes.contains(node)); - } - - - /** - * Retrieves the end node associated with the given node - * - * @param node the node of interest - * @return the ending node or null if no end node is available - */ - private GrammarNode getEndNode(GrammarNode node) { - GrammarArc[] arcs = node.getSuccessors(); - assert arcs != null && arcs.length > 0; - return arcs[0].getGrammarNode(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/ForcedAlignerGrammar.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/ForcedAlignerGrammar.java deleted file mode 100755 index 0a4c0bff..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/ForcedAlignerGrammar.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.language.grammar; - -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.linguist.dictionary.Dictionary; - -import java.util.StringTokenizer; - -/** - * Creates a grammar from a reference sentence. It is a constrained grammar that represents the sentence only. - *

    - * Note that all grammar probabilities are maintained in the LogMath log base - */ - -public class ForcedAlignerGrammar extends Grammar { - - protected GrammarNode finalNode; - - public ForcedAlignerGrammar(boolean showGrammar, boolean optimizeGrammar, boolean addSilenceWords, boolean addFillerWords, Dictionary dictionary) { - super(showGrammar,optimizeGrammar,addSilenceWords,addFillerWords,dictionary); - } - - public ForcedAlignerGrammar() { - - } - - - /** Create class from reference text (not implemented). */ - @Override - protected GrammarNode createGrammar() { - throw new Error("Not implemented"); - } - - - /** Creates the grammar */ - @Override - protected GrammarNode createGrammar(String referenceText) - throws NoSuchMethodException { - - initialNode = createGrammarNode(false); - finalNode = createGrammarNode(true); - createForcedAlignerGrammar(initialNode, finalNode, referenceText); - - return initialNode; - } - - - /** - * Create a branch of the grammar that corresponds to a transcript. For each word create a node, and link the nodes - * with arcs. The branch is connected to the initial node iNode, and the final node fNode. - * - * @param iNode initial node - * @param fNode final node - * @param transcript transcript - * @return the first node of this branch - */ - protected GrammarNode createForcedAlignerGrammar(GrammarNode iNode, GrammarNode fNode, String transcript) { - final float logArcProbability = LogMath.LOG_ONE; - - StringTokenizer tok = new StringTokenizer(transcript); - - GrammarNode firstNode = null; - GrammarNode lastNode = null; - - while (tok.hasMoreTokens()) { - - String token; - token = tok.nextToken(); - - GrammarNode prevNode = lastNode; - lastNode = createGrammarNode(token); - if (firstNode == null) firstNode = lastNode; - - if (prevNode != null) { - prevNode.add(lastNode, logArcProbability); - } - } - - iNode.add(firstNode, logArcProbability); - lastNode.add(fNode, logArcProbability); - - return firstNode; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/Grammar.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/Grammar.java deleted file mode 100755 index f1ac694b..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/Grammar.java +++ /dev/null @@ -1,547 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist.language.grammar; - -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.*; -import java.util.logging.Level; -import java.util.logging.Logger; - -import edu.cmu.sphinx.linguist.dictionary.Dictionary; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.util.Timer; -import edu.cmu.sphinx.util.TimerPool; -import edu.cmu.sphinx.util.props.*; - -/** - * Classes that implement this interface create grammars. A grammar is represented internally as a graph of {@link - * GrammarNode GrammarNodes} linked together by {@link GrammarArc GrammarArcs}. Calling {@link #getInitialNode() - * getInitialNode} will return the first node of the grammar graph. To traverse the grammar graph, one should call - * GrammarNode.getSuccessors, which will return an array of GrammarArcs, from which you can reach the neighboring - * GrammarNodes. - *

    - * Note that all grammar probabilities are maintained in LogMath log domain. - */ - -public abstract class Grammar implements Configurable, GrammarInterface { - - /** Property to control the the dumping of the grammar */ - @S4Boolean(defaultValue = false) - public final static String PROP_SHOW_GRAMMAR = "showGrammar"; - /** The default value for PROP_SHOW_GRAMMAR. */ - - @S4Boolean(defaultValue = true) - public final static String PROP_OPTIMIZE_GRAMMAR = "optimizeGrammar"; - - /** Property to control whether silence words are inserted into the graph */ - @S4Boolean(defaultValue = false) - public final static String PROP_ADD_SIL_WORDS = "addSilenceWords"; - - /** Property to control whether filler words are inserted into the graph */ - @S4Boolean(defaultValue = false) - public final static String PROP_ADD_FILLER_WORDS = "addFillerWords"; - - /** Property that defines the dictionary to use for this grammar */ - @S4Component(type = Dictionary.class) - public final static String PROP_DICTIONARY = "dictionary"; - - // ---------------------------- - // Configuration data - // ----------------------------- - protected Logger logger; - - private boolean optimizeGrammar = true; - private boolean addSilenceWords; - private boolean addFillerWords; - protected Dictionary dictionary; - protected GrammarNode initialNode; - private Set grammarNodes; - - private final static Word[][] EMPTY_ALTERNATIVE = new Word[0][0]; - private final Random randomizer = new Random(56); // use fixed initial to make get deterministic random value for testing - private int maxIdentity; - private boolean idCheck; - - public Grammar(boolean showGrammar,boolean optimizeGrammar,boolean addSilenceWords, boolean addFillerWords, Dictionary dictionary ) { - this.logger = Logger.getLogger(getClass().getName()); - this.optimizeGrammar = optimizeGrammar; - this.addSilenceWords = addSilenceWords; - this.addFillerWords = addFillerWords; - this.dictionary = dictionary; - } - - public Grammar() { - - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - public void newProperties(PropertySheet ps) throws PropertyException { - logger = ps.getLogger(); - optimizeGrammar = ps.getBoolean(PROP_OPTIMIZE_GRAMMAR); - - addSilenceWords = ps.getBoolean(PROP_ADD_SIL_WORDS); - addFillerWords = ps.getBoolean(PROP_ADD_FILLER_WORDS); - - dictionary = (Dictionary) ps.getComponent(PROP_DICTIONARY); - } - - - /** Create the grammar - * @throws java.io.IOException if IO went wrong - **/ - public void allocate() throws IOException { - dictionary.allocate(); - newGrammar(); - Timer timer = TimerPool.getTimer(this, "grammarLoad"); - timer.start(); - initialNode = createGrammar(); - timer.stop(); - } - - - /** Deallocate resources allocated to this grammar */ - public void deallocate() { - initialNode = null; - grammarNodes = null; - dictionary.deallocate(); - } - - - /** - * Returns the initial node for the grammar - * - * @return the initial grammar node - */ - public GrammarNode getInitialNode() { - return initialNode; - } - - - /** - * Perform the standard set of grammar post processing. This can include - * inserting silence nodes and optimizing out empty nodes - */ - protected void postProcessGrammar() { - if (addFillerWords) { - addFillerWords(); - } else if (addSilenceWords) { - addSilenceWords(); - } - - if (optimizeGrammar) { - optimizeGrammar(); - } - dumpStatistics(); - } - - - /** Dumps statistics for this grammar */ - public void dumpStatistics() { - if (logger.isLoggable(Level.INFO)) { - int successorCount = 0; - logger.info("Num nodes : " + getNumNodes()); - for (GrammarNode grammarNode : grammarNodes) - successorCount += grammarNode.getSuccessors().length; - - logger.info("Num arcs : " + successorCount); - logger.info("Avg arcs : " - + ((float) successorCount / getNumNodes())); - } - } - - - /** - * Dump a set of random sentences that fit this grammar - * - * @param path the name of the file to dump the sentences to - * @param count dumps no more than this. May dump less than this depending upon the number of uniqe sentences in the - * grammar. - */ - public void dumpRandomSentences(String path, int count) { - try { - Set set = new HashSet(); - PrintWriter out = new PrintWriter(new FileOutputStream(path)); - for (int i = 0; i < count; i++) { - String s = getRandomSentence(); - if (!set.contains(s)) { - set.add(s); - out.println(s); - } - } - out.close(); - } catch (IOException ioe) { - logger.severe("Can't write random sentences to " + path + ' ' + ioe); - } - } - - - /** - * Dump a set of random sentences that fit this grammar - * - * @param count dumps no more than this. May dump less than this depending upon the number of uniqe sentences in the - * grammar. - */ - public void dumpRandomSentences(int count) { - Set set = new HashSet(); - for (int i = 0; i < count; i++) { - String s = getRandomSentence(); - if (!set.contains(s)) { - set.add(s); - } - } - List sampleList = new ArrayList(set); - Collections.sort(sampleList); - - for (String sentence : sampleList) { - System.out.println(sentence); - } - } - - - /** - * Returns a random sentence that fits this grammar - * - * @return a random sentence that fits this grammar - */ - public String getRandomSentence() { - StringBuilder sb = new StringBuilder(); - GrammarNode node = getInitialNode(); - while (!node.isFinalNode()) { - if (!node.isEmpty()) { - Word word = node.getWord(); - if (!word.isFiller()) - sb.append(word.getSpelling()).append(' '); - } - node = selectRandomSuccessor(node); - } - return sb.toString().trim(); - } - - - /** - * Given a node, select a random successor from the set of possible successor nodes - * - * @param node the node - * @return a random successor node. - */ - private GrammarNode selectRandomSuccessor(GrammarNode node) { - GrammarArc[] arcs = node.getSuccessors(); - - // select a transition arc with respect to the arc-probabilities (which are log and we don't have a logMath here - // which makes the implementation a little bit messy - if (arcs.length > 1) { - double[] linWeights = new double[arcs.length]; - double linWeightsSum = 0; - - final double EPS = 1E-10; - - for (int i = 0; i < linWeights.length; i++) { - linWeights[i] = (arcs[0].getProbability() + EPS) / (arcs[i].getProbability() + EPS); - linWeightsSum += linWeights[i]; - } - - for (int i = 0; i < linWeights.length; i++) { - linWeights[i] /= linWeightsSum; - } - - - double selIndex = randomizer.nextDouble(); - int index = 0; - for (int i = 0; selIndex > EPS; i++) { - index = i; - selIndex -= linWeights[i]; - } - - return arcs[index].getGrammarNode(); - - } else { - return arcs[0].getGrammarNode(); - } - } - - - /** Dumps the grammar - * @param name name of the file to dump to - **/ - public void dumpGrammar(String name) { - getInitialNode().dumpDot(name); - } - - /** - * returns the number of nodes in this grammar - * - * @return the number of nodes - */ - public int getNumNodes() { - return grammarNodes.size(); - } - - - /** - * returns the set of of nodes in this grammar - * - * @return the set of nodes - */ - public Set getGrammarNodes() { - return grammarNodes; - } - - - /** Prepare to create a new grammar */ - protected void newGrammar() { - maxIdentity = 0; - grammarNodes = new HashSet(); - initialNode = null; - } - - - /** - * Creates a grammar. Subclasses of grammar should implement this method. - * - * @return the initial node for the grammar - * @throws java.io.IOException if the grammar could not be loaded - */ - protected abstract GrammarNode createGrammar() throws IOException; - - - /** - * Create class from reference text (not implemented). - * - * @param bogusText dummy variable - * @return created grammar node - * @throws NoSuchMethodException if called with reference sentence - */ - protected GrammarNode createGrammar(String bogusText) - throws NoSuchMethodException { - throw new NoSuchMethodException("Does not create " - + "grammar with reference text"); - } - - - /** - * Gets the dictionary for this grammar - * - * @return the dictionary - */ - public Dictionary getDictionary() { - return dictionary; - } - - - /** - * Returns a new GrammarNode with the given set of alternatives. - * - * @param identity the id for this node - * @param alts the set of alternative word lists for this GrammarNode - * @return created grammar node - */ - protected GrammarNode createGrammarNode(int identity, String[][] alts) { - GrammarNode node; - Word[][] alternatives = new Word[alts.length][]; - for (int i = 0; i < alternatives.length; i++) { - alternatives[i] = new Word[alts[i].length]; - for (int j = 0; j < alts[i].length; j++) { - Word word = getDictionary().getWord(alts[i][j]); - // Pronunciation[] pronunciation = - // word.getPronunciations(null); - if (word == null) { - alternatives = EMPTY_ALTERNATIVE; - break; - } else { - alternatives[i][j] = word; - } - } - } - node = new GrammarNode(identity, alternatives); - add(node); - - return node; - } - - - /** - * Returns a new GrammarNode with the given single word. If the word is not in the dictionary, an empty node is - * created. The grammar id is automatically assigned - * - * @param word the word for this grammar node - * @return created grammar node - */ - - protected GrammarNode createGrammarNode(String word) { - GrammarNode node = createGrammarNode(maxIdentity + 1, word); - return node; - } - - - /** - * Creates an empty grammar node in this grammar. The gramar ID is automatically assigned. - * - * @param isFinal if true, this is a final node - * @return the grammar node - */ - protected GrammarNode createGrammarNode(boolean isFinal) { - return createGrammarNode(maxIdentity + 1, isFinal); - } - - - /** - * Returns a new GrammarNode with the given single word. If the word is not in the dictionary, an empty node is - * created - * - * @param identity the id for this node - * @param word the word for this grammar node - * @return created grammar node - */ - protected GrammarNode createGrammarNode(int identity, String word) { - GrammarNode node; - Word[][] alternatives = EMPTY_ALTERNATIVE; - Word wordObject = getDictionary().getWord(word); - // Pronunciation[] pronunciation = wordObject.getPronunciations(null); - if (wordObject != null) { - alternatives = new Word[1][]; - alternatives[0] = new Word[1]; - alternatives[0][0] = wordObject; - node = new GrammarNode(identity, alternatives); - add(node); - } else { - node = createGrammarNode(identity, false); - logger.warning("Can't find pronunciation for " + word); - } - return node; - } - - - /** - * Creates a grammar node in this grammar with the given identity - * - * @param identity the identity of the node - * @param isFinal if true, this is a final node - * @return the grammar node - */ - protected GrammarNode createGrammarNode(int identity, boolean isFinal) { - GrammarNode node; - node = new GrammarNode(identity, isFinal); - add(node); - return node; - } - - - /** - * Adds the given grammar node to the set of nodes for this grammar - * - * @param node the grammar node - * @throws Error - */ - private void add(GrammarNode node) throws Error { - if (node.getID() > maxIdentity) { - maxIdentity = node.getID(); - } - - // check to see if there is already a node with the given ID. - if (idCheck) { - for (GrammarNode grammarNode : grammarNodes) { - if (grammarNode.getID() == node.getID()) { - - throw new Error("DUP ID " + grammarNode + " and " + node); - } - } - } - - grammarNodes.add(node); - - } - - - /** - * Eliminate unnecessary nodes from the grammar. This method goes through the grammar and looks for branches to - * nodes that have no words and have only a single exit and bypasses these nodes. - */ - private void optimizeGrammar() { - Set nodes = getGrammarNodes(); - for (GrammarNode node : nodes) - node.optimize(); - } - - - /** Adds an optional silence word after every non-filler word in the grammar */ - private void addSilenceWords() { - HashSet nodes = new HashSet(getGrammarNodes()); - for (GrammarNode g : nodes) { - if (!g.isEmpty() && !g.getWord().isFiller()) { - GrammarNode silNode = createGrammarNode(maxIdentity + 1, - dictionary.getSilenceWord().getSpelling()); - - GrammarNode branchNode = g.splitNode(maxIdentity + 1); - add(branchNode); - - g.add(silNode, 0.00f); - silNode.add(branchNode, 0.0f); - silNode.add(silNode, 0.0f); - } - } - } - - - /** Adds an optional filler word loop after every non-filler word in the grammar */ - private void addFillerWords() { - Set nodes = new HashSet(getGrammarNodes()); - - Word[] fillers = getInterWordFillers(); - - if (fillers.length == 0) { - return; - } - - for (GrammarNode wordNode : nodes) { - if (!wordNode.isEmpty() && !wordNode.getWord().isFiller()) { - GrammarNode wordExitNode = wordNode.splitNode(maxIdentity + 1); - add(wordExitNode); - GrammarNode fillerStart = createGrammarNode(false); - GrammarNode fillerEnd = createGrammarNode(false); - fillerEnd.add(fillerStart, 0.0f); - fillerEnd.add(wordExitNode, 0.0f); - wordNode.add(fillerStart, 0.0f); - - for (Word filler : fillers) { - GrammarNode fnode = createGrammarNode(maxIdentity + 1, filler.getSpelling()); - fillerStart.add(fnode, 0.0f); - fnode.add(fillerEnd, 0.0f); - } - } - } - } - - - /** - * Gets the set of fillers after filtering out fillers that don't go between words. - * - * @return the set of inter-word fillers - */ - private Word[] getInterWordFillers() { - List fillerList = new ArrayList(); - Word[] fillers = dictionary.getFillerWords(); - - for (Word fillerWord : fillers) { - if (fillerWord != dictionary.getSentenceStartWord() - && fillerWord != dictionary.getSentenceEndWord()) { - fillerList.add(fillerWord); - } - } - return fillerList.toArray(new Word[fillerList.size()]); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/GrammarArc.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/GrammarArc.java deleted file mode 100755 index a4298ee1..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/GrammarArc.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.language.grammar; - - -/** - * Represents a single transition out of a grammar node. The grammar represented is a stochastic grammar, each - * transition has a probability associated with it. The probabilities are relative and are not necessarily constrained - * to total 1.0. - *

    - * Note that all probabilities are maintained in the LogMath log base - */ -public class GrammarArc { - - private GrammarNode grammarNode; - private float logProbability; - - /** - * Create a grammar arc - * - * @param grammarNode the node that this arc points to - * @param logProbability the log probability of following this arc - */ - public GrammarArc(GrammarNode grammarNode, float logProbability) { - assert grammarNode != null; - this.grammarNode = grammarNode; - this.logProbability = logProbability; - } - - - /** - * Retrieves the destination node for this transition - * - * @return the destination node - */ - public GrammarNode getGrammarNode() { - return grammarNode; - } - - - /** - * Retrieves the probability for this transition - * - * @return the log probability for this transition - */ - public float getProbability() { - return logProbability; - } -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/GrammarInterface.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/GrammarInterface.java deleted file mode 100755 index 5d7928e6..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/GrammarInterface.java +++ /dev/null @@ -1,23 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.language.grammar; - -import java.util.Set; - -public interface GrammarInterface { - - GrammarNode getInitialNode(); - - - Set getGrammarNodes(); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/GrammarNode.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/GrammarNode.java deleted file mode 100755 index 398f1608..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/GrammarNode.java +++ /dev/null @@ -1,439 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.language.grammar; - - -import edu.cmu.sphinx.linguist.dictionary.Word; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.*; - - -/** - * Represents a grammar node in a grammar. A {@link Grammar grammar} is represented as a graph of grammar nodes and - * {@link GrammarArc arcs}. A grammar node usually represents a word or words, but it can also be a transition point or - * simply silence. - *

    - * Note that all probabilities are maintained in the LogMath log base - */ - -public class GrammarNode { - - private final int identity; // the node id - private boolean isFinal; // is this the final node? - - private Word[][] alternatives; // ordered words at this node - private List arcList = new ArrayList(); // arcs to successors - - - /** - * Creates a GrammarNode with the given ID, Words. A GrammarNode with words is, by default, neither a silence nor a - * final node. - * - * @param id the identity of this GrammarNode - * @param alternatives the set of Words in this GrammarNode. This is a two dimensional array, the first index - * corresponds to the set of alternative choices, the second index corresponds to a particular - * word for the alternative - */ - public GrammarNode(int id, Word[][] alternatives) { - this(id, false); - this.alternatives = alternatives; - } - - - /** - * Creates a GrammarNode with the given ID and silence or final attributes. A silence or final node does not have - * any words by default. - * - * @param id the identity of this GrammarNode - * @param isFinal if true this is a final node - */ - protected GrammarNode(int id, boolean isFinal) { - this.identity = id; - this.isFinal = isFinal; - this.alternatives = new Word[0][0]; - } - - - /** - * Returns the ID of this GrammarNode. - * - * @return the ID of this GrammarNode - */ - public int getID() { - return identity; - } - - - /** - * Retrieves the words associated with this grammar node - * - * @return the words associated with this grammar node - */ - public Word[][] getAlternatives() { - return alternatives; - } - - - /** Optimize this grammar node. */ - void optimize() { - for (int i = 0; i < arcList.size(); i++) { - GrammarArc arc = arcList.get(i); - arcList.set(i, optimizeArc(arc)); - } - - // now remove all self-looping empty arcs - - if (this.isEmpty()) { - for (ListIterator i = arcList.listIterator(); i.hasNext();) { - GrammarArc arc = i.next(); - if (this == arc.getGrammarNode()) { - i.remove(); - } - } - } - } - - - /** - * Optimize the given arc. If an arc branches to an empty node that has only one exit, the node can be bypassed by - * making a new arc that skips the nodes. This can happen multiple times. - * - * @param arc the arc to optimize - * @return the optimized arc - */ - GrammarArc optimizeArc(GrammarArc arc) { - GrammarNode nextNode = arc.getGrammarNode(); - while (nextNode.isEmpty() && nextNode.arcList.size() == 1) { - GrammarArc nextArc = nextNode.arcList.get(0); - arc = new GrammarArc(nextArc.getGrammarNode(), - arc.getProbability() + nextArc.getProbability()); - nextNode = arc.getGrammarNode(); - } - return arc; - } - - - /** - * Retrieves the words associated with a specific alternative - * - * @param alternative the index of the alternative - * @return the words associated with this grammar node - */ - public Word[] getWords(int alternative) { - return alternatives[alternative]; - } - - - /** - * Retrieve the single word associated with this grammar - * - * @return the word associated with this grammar node - */ - public Word getWord() { - return alternatives[0][0]; - } - - - /** - * Gets the number of alternatives - * - * @return the number of alternatives - */ - public int getNumAlternatives() { - return alternatives.length; - } - - - /** - * Determines if this grammar node is empty (that is, has no words). - * - * @return true if the node is empty, otherwise false. - */ - public boolean isEmpty() { - return getNumAlternatives() == 0; - } - - - /** - * Retrieves the set of transitions out of this node - * - * @return the transitions to the successors for this node. - */ - public GrammarArc[] getSuccessors() { - return arcList.toArray(new GrammarArc[arcList.size()]); - } - - - /** - * Determines if this grammar node is a final node in the grammar - * - * @return true if the node is a final node in the grammar - */ - public boolean isFinalNode() { - return isFinal; - } - - - /** - * Sets the 'final' state of the grammar node. A 'final' state grammar marks the end of a grammar - * - * @param isFinal if true the grammar node is a final node. - */ - - public void setFinalNode(boolean isFinal) { - this.isFinal = isFinal; - } - - - /** - * Adds an arc to the given node - * - * @param node the node that this new arc goes to - * @param logProbability the log probability of the transition occuring - */ - public void add(GrammarNode node, float logProbability) { - // if we are an empty node, a loopback makes no sense. - // this construct can be generated when dealing with recursive - // grammars, so we check for them and toss them out. - // - if (isEmpty() && this == node) { - return; - } - arcList.add(new GrammarArc(node, logProbability)); - } - - - /** Returns the string representation of this object */ - @Override - public String toString() { - return "G" + getID(); - } - - - /** - * Dumps this GrammarNode as a String. - * - * @param level the indent level - * @param visitedNodes the set of visited nodes - * @param logProb the probability of the transition (in logMath log domain) - */ - private String traverse(int level, Set visitedNodes, float logProb) { - StringBuilder dump = new StringBuilder(); - - for (int i = 0; i < level; i++) { - dump.append(" "); - } - - dump.append("N(").append(getID()).append("):"); - dump.append("p:").append(logProb); - - if (isFinalNode()) { - dump.append(" !"); - } - - Word[][] alternatives = getAlternatives(); - for (int i = 0; i < alternatives.length; i++) { - for (int j = 0; j < alternatives[i].length; j++) { - dump.append(' ').append(alternatives[i][j].getSpelling()); - } - if (i < alternatives.length - 1) { - dump.append('|'); - } - } - - System.out.println(dump); - - // Visit the children nodes if this node has never been visited. - - if (!isFinalNode() && !(visitedNodes.contains(this))) { - - visitedNodes.add(this); - GrammarArc[] arcs = getSuccessors(); - - for (GrammarArc arc : arcs) { - GrammarNode child = arc.getGrammarNode(); - child.traverse(level + 1, visitedNodes, arc.getProbability()); - } - } else if (isFinalNode()) { - - // this node has no children, so just add it to the visitedNodes - visitedNodes.add(this); - } - - return dump.toString(); - } - - - /** - * Traverse the grammar and dump out the nodes and arcs in GDL - * - * @param out print the gdl to this file - * @param visitedNodes the set of visited nodes - * @throws IOException if an error occurs while writing the file - */ - private void traverseGDL(PrintWriter out, Set visitedNodes) - throws IOException { - - // Visit the children nodes if this node has never been visited. - - if (!(visitedNodes.contains(this))) { - visitedNodes.add(this); - out.println(" node: { title: " + getGDLID(this) + - " label: " + getGDLLabel(this) + - " shape: " + getGDLShape(this) + - " color: " + getGDLColor(this) + '}'); - GrammarArc[] arcs = getSuccessors(); - for (GrammarArc arc : arcs) { - GrammarNode child = arc.getGrammarNode(); - float prob = arc.getProbability(); - out.println(" edge: { source: " - + getGDLID(this) + - " target: " + getGDLID(child) + - " label: \"" + prob + "\"}"); - child.traverseGDL(out, visitedNodes); - } - } - } - - - /** - * Gvien a node, return a GDL ID for the node - * - * @param node the node - * @return the GDL id - */ - String getGDLID(GrammarNode node) { - return "\"" + node.getID() + '\"'; - } - - - /** - * Given a node, returns a GDL Label for the node - * - * @param node the node - * @return a gdl label for the node - */ - String getGDLLabel(GrammarNode node) { - String label = node.isEmpty() ? "" : node.getWord().getSpelling(); - return '\"' + label + '\"'; - } - - - /** - * Given a node, returns a GDL shape for the node - * - * @param node the node - * @return a gdl shape for the node - */ - String getGDLShape(GrammarNode node) { - return node.isEmpty() ? "circle" : "box"; - } - - - /** - * Gets the color for the grammar node - * - * @param node the node of interest - * @return the gdl label for the color - */ - String getGDLColor(GrammarNode node) { - String color = "grey"; - if (node.isFinalNode()) { - color = "red"; - } else if (!node.isEmpty()) { - color = "green"; - } - return color; - } - - - /** - * Dumps the grammar in GDL form - * - * @param path the path to write the gdl file to - */ - public void dumpGDL(String path) { - try { - PrintWriter out = new PrintWriter(new FileOutputStream(path)); - out.println("graph: {"); - out.println(" orientation: left_to_right"); - out.println(" layout_algorithm: dfs"); - traverseGDL(out, new HashSet()); - out.println("}"); - out.close(); - } catch (FileNotFoundException fnfe) { - System.out.println("Can't write to " + path + ' ' + fnfe); - } catch (IOException ioe) { - System.out.println("Trouble writing to " + path + ' ' + ioe); - } - } - - - /** Dumps the grammar */ - public void dump() { - System.out.println(traverse(0, new HashSet(), 1.0f)); - } - - - /** - * Splits this node into a pair of nodes. The first node in the pair retains the word info, and a single branch to - * the new second node. The second node retains all of the original successor branches. - * - * @param id the id of the new node - * @return the newly created second node. - */ - GrammarNode splitNode(int id) { - GrammarNode branchNode = new GrammarNode(id, false); - branchNode.arcList = arcList; - arcList = new ArrayList(); - add(branchNode, 0.0f); - return branchNode; - } - - - public void dumpDot(String path) { - try { - PrintWriter out = new PrintWriter(new FileOutputStream(path)); - out.println("digraph \"" + path + "\" {"); - out.println("rankdir = LR\n"); - traverseDot(out, new HashSet()); - out.println("}"); - out.close(); - } catch (FileNotFoundException fnfe) { - System.out.println("Can't write to " + path + ' ' + fnfe); - } - } - - - private void traverseDot(PrintWriter out, Set visitedNodes) { - if (!(visitedNodes.contains(this))) { - visitedNodes.add(this); - out.println("\tnode" + this.getID() - + " [ label=" + getGDLLabel(this) - + ", color=" + getGDLColor(this) - + ", shape=" + getGDLShape(this) - + " ]\n"); - GrammarArc[] arcs = getSuccessors(); - for (GrammarArc arc : arcs) { - GrammarNode child = arc.getGrammarNode(); - float prob = arc.getProbability(); - out.write("\tnode" + this.getID() + " -> node" + child.getID() - + " [ label=" + prob + " ]\n"); - child.traverseDot(out, visitedNodes); - } - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/LMGrammar.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/LMGrammar.java deleted file mode 100755 index 21407fe4..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/LMGrammar.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist.language.grammar; - -import edu.cmu.sphinx.linguist.WordSequence; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.linguist.dictionary.Dictionary; -import edu.cmu.sphinx.linguist.language.ngram.LanguageModel; -import edu.cmu.sphinx.util.TimerPool; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Component; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - -/** - * Defines a simple grammar based upon a language model. It generates one {@link GrammarNode grammar node}per word. This - * grammar can deal with unigram and bigram grammars of up to 1000 or so words. Note that all probabilities are in the - * log math domain. - */ -public class LMGrammar extends Grammar { - - /** The property for the language model to be used by this grammar */ - @S4Component(type = LanguageModel.class) - public final static String PROP_LANGUAGE_MODEL = "languageModel"; - // ------------------------ - // Configuration data - // ------------------------ - private LanguageModel languageModel; - - public LMGrammar(LanguageModel languageModel, boolean showGrammar, boolean optimizeGrammar, boolean addSilenceWords, boolean addFillerWords, Dictionary dictionary) { - super(showGrammar,optimizeGrammar,addSilenceWords,addFillerWords,dictionary); - this.languageModel = languageModel; - } - - public LMGrammar() { - - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - languageModel = (LanguageModel) ps.getComponent(PROP_LANGUAGE_MODEL); - } - - - /** - * Creates the grammar from the language model. This Grammar contains one word per grammar node. Each word (and - * grammar node) is connected to all other words with the given probability - * - * @return the initial grammar node - */ - @Override - protected GrammarNode createGrammar() throws IOException { - languageModel.allocate(); - TimerPool.getTimer(this,"LMGrammar.create").start(); - GrammarNode firstNode = null; - if (languageModel.getMaxDepth() > 2) { - System.out.println("Warning: LMGrammar limited to bigrams"); - } - List nodes = new ArrayList(); - Set words = languageModel.getVocabulary(); - // create all of the word nodes - for (String word : words) { - GrammarNode node = createGrammarNode(word); - if (node != null && !node.isEmpty()) { - if (node.getWord().equals( - getDictionary().getSentenceStartWord())) { - firstNode = node; - } else if (node.getWord().equals( - getDictionary().getSentenceEndWord())) { - node.setFinalNode(true); - } - nodes.add(node); - } - } - if (firstNode == null) { - throw new Error("No sentence start found in language model"); - } - for (GrammarNode prevNode : nodes) { - // don't add any branches out of the final node - if (prevNode.isFinalNode()) { - continue; - } - for (GrammarNode nextNode : nodes) { - String prevWord = prevNode.getWord().getSpelling(); - String nextWord = nextNode.getWord().getSpelling(); - Word[] wordArray = {getDictionary().getWord(prevWord), - getDictionary().getWord(nextWord)}; - float logProbability = languageModel - .getProbability((new WordSequence(wordArray))); - prevNode.add(nextNode, logProbability); - } - } - TimerPool.getTimer(this,"LMGrammar.create").stop(); - languageModel.deallocate(); - return firstNode; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/LatticeGrammar.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/LatticeGrammar.java deleted file mode 100755 index c14e9fdd..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/LatticeGrammar.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright 2010 PC-NG Inc. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist.language.grammar; - -import edu.cmu.sphinx.linguist.dictionary.Dictionary; -import edu.cmu.sphinx.result.Lattice; -import edu.cmu.sphinx.result.Node; -import edu.cmu.sphinx.result.Edge; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; - -import java.io.IOException; -import java.util.HashMap; - -/** - * A grammar build from a lattice. Can be used for a second and subsequent - * passes of multi-pass recognition. - */ -public class LatticeGrammar extends Grammar { - - public Lattice lattice; - - public LatticeGrammar(Lattice lattice, boolean showGrammar, boolean optimizeGrammar, boolean addSilenceWords, boolean addFillerWords, Dictionary dictionary) { - super(showGrammar,optimizeGrammar,addSilenceWords,addFillerWords,dictionary); - this.lattice = lattice; - } - - public LatticeGrammar() { - - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - } - - - /** - * Creates the grammar from the language model. This Grammar contains one word per grammar node. Each word (and - * grammar node) is connected to all other words with the given probability - * - * @return the initial grammar node - */ - @Override - protected GrammarNode createGrammar() throws IOException { - if (lattice == null) { - return createGrammarNode(""); - } - - GrammarNode firstNode = null; - HashMap nodeMap = new HashMap(); - for (Node n : lattice.getNodes()) { - String word = n.getWord().toString(); - GrammarNode node = createGrammarNode(word); - if (n.equals(lattice.getInitialNode())) - firstNode = node; - if (n.equals(lattice.getTerminalNode())) - node.setFinalNode(true); - nodeMap.put(n, node); - } - if (firstNode == null) { - throw new Error("No lattice start found"); - } - - for (Edge e : lattice.getEdges()) { - float logProbability = (float)e.getLMScore(); - GrammarNode prevNode = nodeMap.get(e.getFromNode()); - GrammarNode toNode = nodeMap.get(e.getToNode()); - prevNode.add(toNode, logProbability); - } - - return firstNode; - - } - - public void setLattice (Lattice lattice) throws IOException { - this.lattice = lattice; - allocate(); - //dumpGrammar("Grammar"); - //dumpRandomSentences("test.sentences", 10); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/SimpleWordListGrammar.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/SimpleWordListGrammar.java deleted file mode 100755 index 7e9e2039..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/grammar/SimpleWordListGrammar.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist.language.grammar; - -import edu.cmu.sphinx.util.ExtendedStreamTokenizer; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.props.*; - -import java.io.IOException; -import java.util.*; - -/** - * Defines a grammar based upon a list of words in a file. The format of the file is just one word per line. For - * example, for an isolated digits grammar the file will simply look like: - *

    - * zero
    - * one
    - * two
    - * three
    - * four
    - * five
    - * six
    - * seven
    - * eight
    - * nine
    - * 
    - * The path to the file is defined by the {@link #PROP_PATH PROP_PATH} property. If the {@link #PROP_LOOP PROP_LOOP} - * property is true, the grammar created will be a looping grammar. Using the above digits grammar example, setting - * PROP_LOOP to true will make it a connected-digits grammar. - *

    - * All probabilities are maintained in LogMath log base. - */ -public class SimpleWordListGrammar extends Grammar implements Configurable { - - /** The property that defines the location of the word list grammar */ - @S4String(defaultValue = "spelling.gram") - public final static String PROP_PATH = "path"; - - /** The property that if true, indicates that this is a looping grammar */ - @S4Boolean(defaultValue = true) - public final static String PROP_LOOP = "isLooping"; - - // --------------------- - // Configurable data - // --------------------- - private String path; - private boolean isLooping; - private LogMath logMath; - - public SimpleWordListGrammar(String path, boolean isLooping, boolean showGrammar, boolean optimizeGrammar, boolean addSilenceWords, boolean addFillerWords, edu.cmu.sphinx.linguist.dictionary.Dictionary dictionary) { - super(showGrammar,optimizeGrammar,addSilenceWords,addFillerWords,dictionary); - this.path = path; - this.isLooping = isLooping; - logMath = LogMath.getLogMath(); - } - - public SimpleWordListGrammar() { - - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - - path = ps.getString(PROP_PATH); - isLooping = ps.getBoolean(PROP_LOOP); - } - - - /** - * Create class from reference text (not implemented). - * - * @param bogusText dummy variable - */ - @Override - protected GrammarNode createGrammar(String bogusText) - throws NoSuchMethodException { - throw new NoSuchMethodException("Does not create " - + "grammar with reference text"); - } - - - /** Creates the grammar. */ - @Override - protected GrammarNode createGrammar() throws IOException { - ExtendedStreamTokenizer tok = new ExtendedStreamTokenizer(path, true); - GrammarNode initialNode = createGrammarNode(""); - GrammarNode branchNode = createGrammarNode(false); - GrammarNode finalNode = createGrammarNode(""); - finalNode.setFinalNode(true); - List wordGrammarNodes = new LinkedList(); - while (!tok.isEOF()) { - String word; - while ((word = tok.getString()) != null) { - GrammarNode wordNode = createGrammarNode(word); - wordGrammarNodes.add(wordNode); - } - } - // now connect all the GrammarNodes together - initialNode.add(branchNode, LogMath.LOG_ONE); - float branchScore = logMath.linearToLog( - 1.0 / wordGrammarNodes.size()); - for (GrammarNode wordNode : wordGrammarNodes) { - branchNode.add(wordNode, branchScore); - wordNode.add(finalNode, LogMath.LOG_ONE); - if (isLooping) { - wordNode.add(branchNode, LogMath.LOG_ONE); - } - } - - return initialNode; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/DynamicTrigramModel.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/DynamicTrigramModel.java deleted file mode 100755 index 1a0a39c8..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/DynamicTrigramModel.java +++ /dev/null @@ -1,207 +0,0 @@ -package edu.cmu.sphinx.linguist.language.ngram; - -import java.io.IOException; -import java.util.*; - -import edu.cmu.sphinx.linguist.WordSequence; -import edu.cmu.sphinx.linguist.dictionary.Dictionary; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; - -/** - * 3-gram language model that can change its content at runtime. - * - * @author Alexander Solovets - * - */ -public class DynamicTrigramModel implements LanguageModel { - - private Dictionary dictionary; - private final Set vocabulary; - private int maxDepth; - private float unigramWeight; - - private List sentences; - private Map logProbs; - private Map logBackoffs; - - public DynamicTrigramModel() { - vocabulary = new HashSet(); - logProbs = new HashMap(); - logBackoffs = new HashMap(); - } - - public DynamicTrigramModel(Dictionary dictionary) { - this(); - this.dictionary = dictionary; - } - - public void newProperties(PropertySheet ps) throws PropertyException { - dictionary = (Dictionary) ps.getComponent(PROP_DICTIONARY); - maxDepth = ps.getInt(PROP_MAX_DEPTH); - unigramWeight = ps.getFloat(PROP_UNIGRAM_WEIGHT); - } - - public void allocate() throws IOException { - vocabulary.clear(); - logProbs.clear(); - logBackoffs.clear(); - HashMap unigrams = new HashMap(); - HashMap bigrams = new HashMap(); - HashMap trigrams = new HashMap(); - int wordCount = 0; - - for (String sentence : sentences) { - String[] textWords = sentence.split("\\s+"); - List words = new ArrayList(); - words.add(dictionary.getSentenceStartWord()); - for (String wordString : textWords) { - if (wordString.length() == 0) { - continue; - } - vocabulary.add(wordString); - Word word = dictionary.getWord(wordString); - if (word == null) { - words.add(Word.UNKNOWN); - } else { - words.add(word); - } - } - words.add(dictionary.getSentenceEndWord()); - - if (words.size() > 0) { - addSequence(unigrams, new WordSequence(words.get(0))); - wordCount++; - } - - if (words.size() > 1) { - wordCount++; - addSequence(unigrams, new WordSequence(words.get(1))); - addSequence(bigrams, new WordSequence(words.get(0), words.get(1))); - } - - for (int i = 2; i < words.size(); ++i) { - wordCount++; - addSequence(unigrams, new WordSequence(words.get(i))); - addSequence(bigrams, new WordSequence(words.get(i - 1), words.get(i))); - addSequence(trigrams, new WordSequence(words.get(i - 2), words.get(i - 1), words.get(i))); - } - } - - float discount = .5f; - float deflate = 1 - discount; - Map uniprobs = new HashMap(); - for (Map.Entry e : unigrams.entrySet()) { - uniprobs.put(e.getKey(), (float) e.getValue() * deflate / wordCount); - } - - LogMath lmath = LogMath.getLogMath(); - float logUnigramWeight = lmath.linearToLog(unigramWeight); - float invLogUnigramWeight = lmath.linearToLog(1 - unigramWeight); - float logUniformProb = -lmath.linearToLog(uniprobs.size()); - - Set sorted1grams = new TreeSet(unigrams.keySet()); - Iterator iter = new TreeSet(bigrams.keySet()).iterator(); - WordSequence ws = iter.hasNext() ? iter.next() : null; - for (WordSequence unigram : sorted1grams) { - float p = lmath.linearToLog(uniprobs.get(unigram)); - p += logUnigramWeight; - p = lmath.addAsLinear(p, logUniformProb + invLogUnigramWeight); - logProbs.put(unigram, p); - - float sum = 0.f; - while (ws != null) { - int cmp = ws.getOldest().compareTo(unigram); - if (cmp > 0) { - break; - } - if (cmp == 0) { - sum += uniprobs.get(ws.getNewest()); - } - ws = iter.hasNext() ? iter.next() : null; - } - - logBackoffs.put(unigram, lmath.linearToLog(discount / (1 - sum))); - } - - Map biprobs = new HashMap(); - for (Map.Entry entry : bigrams.entrySet()) { - int unigramCount = unigrams.get(entry.getKey().getOldest()); - biprobs.put(entry.getKey(), entry.getValue() * deflate / unigramCount); - } - - Set sorted2grams = new TreeSet(bigrams.keySet()); - iter = new TreeSet(trigrams.keySet()).iterator(); - ws = iter.hasNext() ? iter.next() : null; - for (WordSequence biword : sorted2grams) { - logProbs.put(biword, lmath.linearToLog(biprobs.get(biword))); - - float sum = 0.f; - while (ws != null) { - int cmp = ws.getOldest().compareTo(biword); - if (cmp > 0) { - break; - } - if (cmp == 0) { - sum += biprobs.get(ws.getNewest()); - } - ws = iter.hasNext() ? iter.next() : null; - } - logBackoffs.put(biword, lmath.linearToLog(discount / (1 - sum))); - } - - for (Map.Entry e : trigrams.entrySet()) { - float p = e.getValue() * deflate; - p /= bigrams.get(e.getKey().getOldest()); - logProbs.put(e.getKey(), lmath.linearToLog(p)); - } - } - - private void addSequence(HashMap grams, WordSequence wordSequence) { - Integer count = grams.get(wordSequence); - if (count != null) { - grams.put(wordSequence, count + 1); - } else { - grams.put(wordSequence, 1); - } - } - - public void deallocate() throws IOException { - } - - public float getProbability(WordSequence wordSequence) { - float prob; - if (logProbs.containsKey(wordSequence)) { - prob = logProbs.get(wordSequence); - } else if (wordSequence.size() > 1) { - Float backoff = logBackoffs.get(wordSequence.getOldest()); - if (backoff == null) { - prob = LogMath.LOG_ONE + getProbability(wordSequence.getNewest()); - } else { - prob = backoff + getProbability(wordSequence.getNewest()); - } - } else { - prob = LogMath.LOG_ZERO; - } - return prob; - } - - public float getSmear(WordSequence wordSequence) { - // TODO: implement - return 0; - } - - public Set getVocabulary() { - return vocabulary; - } - - public int getMaxDepth() { - return maxDepth; - } - - public void setText(List sentences) { - this.sentences = sentences; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/InterpolatedLanguageModel.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/InterpolatedLanguageModel.java deleted file mode 100755 index bf358fa7..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/InterpolatedLanguageModel.java +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Created on Jan 21, 2005 - */ -package edu.cmu.sphinx.linguist.language.ngram; - -import java.io.IOException; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import edu.cmu.sphinx.linguist.WordSequence; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.props.*; - - -/** - * Simple interpolated LM implementation. - * - * @author Tanel Alumae - */ -public class InterpolatedLanguageModel implements LanguageModel { - - /** - * The property that defines the language models to be interpolated. - */ - @S4ComponentList(type = LanguageModel.class) - public final static String PROP_LANGUAGE_MODELS = "languageModels"; - - /** - * The property that defines the language models weights - */ - @S4StringList - public final static String PROP_LANGUAGE_MODEL_WEIGHTS = - "languageModelWeights"; - - private LogMath logMath; - private boolean allocated = false; - - private List languageModels; - private float weights[]; - private int numberOfLanguageModels; - private Set vocabulary; - - private static final double EPSILON = 0.001; - - public InterpolatedLanguageModel(List languageModels, float [] floats ) { - logMath = LogMath.getLogMath(); - this.languageModels = languageModels; - this.numberOfLanguageModels = languageModels.size(); - - this.weights = new float[floats.length]; - float weightSum = 0; - for (int i = 0; i < floats.length; i++) { - weightSum += floats[i]; - this.weights[i] = logMath.linearToLog(floats[i]); - } - if (weightSum < 1.0 - EPSILON || weightSum > 1.0 + EPSILON) { - throw new PropertyException( - InterpolatedLanguageModel.class.getName(), - PROP_LANGUAGE_MODEL_WEIGHTS, - "Weights do not sum to 1.0"); - } - } - - public InterpolatedLanguageModel() { - - } - - public void newProperties(PropertySheet ps) throws PropertyException { - if (allocated) { - throw new RuntimeException("Can't change properties after allocation"); - } - languageModels = - ps.getComponentList(PROP_LANGUAGE_MODELS, LanguageModel.class); - numberOfLanguageModels = languageModels.size(); - - // read weights as a String List. - List items = ps.getStringList(PROP_LANGUAGE_MODEL_WEIGHTS); - if (items.size() != numberOfLanguageModels) { - throw new RuntimeException("Number of weights not equal to number of language models"); - } - - // convert Strings to floats and assign weights. - float[] floats = new float[items.size()]; - weights = new float[floats.length]; - float weightSum = 0; - for (int i = 0; i < items.size(); i++) { - try { - floats[i] = Float.parseFloat(items.get(i)); - weightSum += floats[i]; - weights[i] = logMath.linearToLog(floats[i]); - } catch (NumberFormatException e) { - throw new PropertyException( - InterpolatedLanguageModel.class.getName(), - PROP_LANGUAGE_MODEL_WEIGHTS, - "Float value expected from the property list. But found:" + - items.get(i)); - } - } - if (weightSum < 1.0 - EPSILON || weightSum > 1.0 + EPSILON) { - throw new PropertyException( - InterpolatedLanguageModel.class.getName(), - PROP_LANGUAGE_MODEL_WEIGHTS, - "Weights do not sum to 1.0"); - } - } - - public void allocate() throws IOException { - if (!allocated) { - allocated = true; - vocabulary = new HashSet(); - for (LanguageModel model : languageModels) { - model.allocate(); - vocabulary.addAll(model.getVocabulary()); - } - } - } - - public void deallocate() throws IOException { - allocated = false; - for (LanguageModel model : languageModels) { - model.deallocate(); - } - } - - /** - * Calculates probability p = w[1]*p[1] + w[2]*p[2] + ... (in log domain) - * - * @see edu.cmu.sphinx.linguist.language.ngram.LanguageModel#getProbability(edu.cmu.sphinx.linguist.WordSequence) - */ - public float getProbability(WordSequence wordSequence) { - float prob = 0; - for (int i = 0; i < numberOfLanguageModels; i++) { - float p = - weights[i] + - (languageModels.get(i)).getProbability(wordSequence); - if (i == 0) { - prob = p; - } else { - prob = logMath.addAsLinear(prob, p); - } - } - return prob; - - } - - /* - * (non-Javadoc) - * @see - * edu.cmu.sphinx.linguist.language.ngram.LanguageModel#getSmear(edu.cmu - * .sphinx.linguist.WordSequence) - */ - public float getSmear(WordSequence wordSequence) { - return 1.0f; // TODO not implemented - } - - /* - * (non-Javadoc) - * @see - * edu.cmu.sphinx.linguist.language.ngram.LanguageModel#getVocabulary() - */ - public Set getVocabulary() { - return vocabulary; - } - - /* - * (non-Javadoc) - * @see edu.cmu.sphinx.linguist.language.ngram.LanguageModel#getMaxDepth() - */ - public int getMaxDepth() { - int maxDepth = 0; - for (LanguageModel languageModel : languageModels) { - int d = languageModel.getMaxDepth(); - if (d > maxDepth) { - maxDepth = d; - } - } - return maxDepth; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/KeywordOptimizerModel.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/KeywordOptimizerModel.java deleted file mode 100755 index 4f8357fd..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/KeywordOptimizerModel.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright 2009 PC-NG Inc. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist.language.ngram; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Set; - -import edu.cmu.sphinx.linguist.WordSequence; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Component; - - -/* - * A model that optimizes the search by giving a preference to the list of - * keywords. - */ -public class KeywordOptimizerModel implements LanguageModel { - - /** The property that defines the parent language model. */ - @S4Component(type = LanguageModel.class) - public final static String PROP_PARENT = "parent"; - - public HashMap keywordProbs; - - // ---------------------------- - // Configuration data - // ---------------------------- - private LanguageModel parent; - - public KeywordOptimizerModel(LanguageModel parent) { - this.parent = parent; - } - - public KeywordOptimizerModel() { - - } - - /* - * (non-Javadoc) - * @see - * edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx. - * util.props.PropertySheet) - */ - public void newProperties(PropertySheet ps) throws PropertyException { - parent = (LanguageModel) ps.getComponent(PROP_PARENT); - } - - /* - * (non-Javadoc) - * @see edu.cmu.sphinx.linguist.language.ngram.LanguageModel#allocate() - */ - public void allocate() throws IOException { - parent.allocate(); - } - - /* - * (non-Javadoc) - * @see edu.cmu.sphinx.linguist.language.ngram.LanguageModel#deallocate() - */ - public void deallocate() throws IOException { - parent.deallocate(); - } - - /** - * Gets the ngram probability of the word sequence represented by the word - * list - * - * @param wordSequence the word sequence - * @return the probability of the word sequence. Probability is in logMath - * log base - */ - public float getProbability(WordSequence wordSequence) { - float prob = parent.getProbability(wordSequence); - - if (keywordProbs == null) - return prob; - - for (Word word : wordSequence.getWords()) { - String ws = word.toString(); - if (keywordProbs.containsKey(ws)) { - prob *= keywordProbs.get(ws); - } - } - - return prob; - } - - /** - * Gets the smear term for the given wordSequence - * - * @param wordSequence the word sequence - * @return the smear term associated with this word sequence - */ - public float getSmear(WordSequence wordSequence) { - return parent.getSmear(wordSequence); - } - - /** - * Returns the maximum depth of the language model - * - * @return the maximum depth of the language model - */ - public int getMaxDepth() { - return parent.getMaxDepth(); - } - - /** - * Returns the set of words in the language model. The set is unmodifiable. - * - * @return the unmodifiable set of words - */ - public Set getVocabulary() { - return parent.getVocabulary(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/LanguageModel.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/LanguageModel.java deleted file mode 100755 index 05668ca7..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/LanguageModel.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist.language.ngram; - -import java.io.IOException; -import java.util.Set; - -import edu.cmu.sphinx.linguist.WordSequence; -import edu.cmu.sphinx.linguist.dictionary.Dictionary; -import edu.cmu.sphinx.linguist.lextree.LexTreeLinguist; -import edu.cmu.sphinx.util.props.*; - - -/** - * Represents the generic interface to an N-Gram language model. - *

    - * Note that all probabilities are in LogMath log base, except as otherwise - * noted. - */ - -public interface LanguageModel extends Configurable { - - /** The property specifying the location of the language model. */ - @S4String(defaultValue = ".") - public final static String PROP_LOCATION = "location"; - - /** The property specifying the unigram weight */ - @S4Double(defaultValue = 1.0) - public final static String PROP_UNIGRAM_WEIGHT = "unigramWeight"; - /** - * The property specifying the maximum depth reported by the language model - * (from a getMaxDepth()) call. If this property is set to (-1) (the - * default) the language model reports the implicit depth of the model. - * This property allows a deeper language model to be used. For instance, a - * trigram language model could be used as a bigram model by setting this - * property to 2. Note if this property is set to a value greater than the - * implicit depth, the implicit depth is used. Legal values for this - * property are 1..N and -1. - */ - @S4Integer(defaultValue = -1) - public final static String PROP_MAX_DEPTH = "maxDepth"; - - /** The property specifying the dictionary to use */ - @S4Component(type = Dictionary.class) - public final static String PROP_DICTIONARY = "dictionary"; - - /** - * Create the language model - * - * @throws java.io.IOException if error occurrs - */ - public void allocate() throws IOException; - - /** - * Deallocate resources allocated to this language model - * - * @throws IOException if error occurrs - */ - public void deallocate() throws IOException; - - /** - * Gets the n-gram probability of the word sequence represented by the word - * list - * - * @param wordSequence the wordSequence - * @return the probability of the word sequence in log base - */ - public float getProbability(WordSequence wordSequence); - - /** - * Gets the smear term for the given wordSequence. Used in - * {@link LexTreeLinguist}. See - * {@link LexTreeLinguist#PROP_WANT_UNIGRAM_SMEAR} for details. - * - * @param wordSequence the word sequence - * @return the smear term associated with this word sequence - */ - public float getSmear(WordSequence wordSequence); - - /** - * Returns the set of words in the language model. The set is unmodifiable. - * - * @return the unmodifiable set of words - */ - public Set getVocabulary(); - - /** - * Returns the maximum depth of the language model - * - * @return the maximum depth of the language model - */ - public int getMaxDepth(); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/NetworkLanguageModel.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/NetworkLanguageModel.java deleted file mode 100755 index 2b4f8362..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/NetworkLanguageModel.java +++ /dev/null @@ -1,170 +0,0 @@ -package edu.cmu.sphinx.linguist.language.ngram; - -import java.io.*; -import java.net.Socket; -import java.net.URL; -import java.util.HashSet; -import java.util.Set; - -import edu.cmu.sphinx.linguist.WordSequence; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.linguist.util.LRUCache; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.props.*; - - -/* - * The client of the SRILM language model server. It needs to read the - * vocabulary from a vocabulary file though. - */ -public class NetworkLanguageModel implements LanguageModel { - - /** The property specifying the host of the language model server. */ - @S4String(defaultValue = "localhost") - public final static String PROP_HOST = "host"; - - /** The property specifying the port of the language model server. */ - @S4Integer(defaultValue = 2525) - public final static String PROP_PORT = "port"; - - LogMath logMath; - - private String host; - private int port; - private URL location; - int maxDepth; - - Socket socket; - private BufferedReader inReader; - private PrintWriter outWriter; - LRUCache cache; - - private boolean allocated; - - /** - * Creates network language model client - * - * @param host server host - * @param port server port - * @param location URL of the file with vocabulary (only needed for 1-stage - * model) - * @param maxDepth depth of the model - */ - public NetworkLanguageModel(String host, int port, URL location, - int maxDepth) { - this.host = host; - this.port = port; - this.maxDepth = maxDepth; - this.location = location; - logMath = LogMath.getLogMath(); - } - - public NetworkLanguageModel() { - } - - /* - * (non-Javadoc) - * @see - * edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util - * .props.PropertySheet) - */ - public void newProperties(PropertySheet ps) throws PropertyException { - - if (allocated) { - throw new RuntimeException("Can't change properties after allocation"); - } - host = ps.getString(PROP_HOST); - port = ps.getInt(PROP_PORT); - location = ConfigurationManagerUtils.getResource(PROP_LOCATION, ps); - - maxDepth = ps.getInt(PROP_MAX_DEPTH); - if (maxDepth == -1) - maxDepth = 3; - } - - public void allocate() throws IOException { - allocated = true; - - socket = new Socket(host, port); - inReader = - new BufferedReader(new InputStreamReader(socket.getInputStream())); - outWriter = new PrintWriter(socket.getOutputStream(), true); - String greeting = inReader.readLine(); - if (!greeting.equals("probserver ready")) { - throw new IOException("Incorrect input"); - } - cache = new LRUCache(1000); - } - - public void deallocate() { - allocated = false; - try { - socket.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public int getMaxDepth() { - return maxDepth; - } - - public float getProbability(WordSequence wordSequence) { - - Float probability = cache.get(wordSequence); - - if (probability != null) { - return probability.floatValue(); - } - - StringBuilder builder = new StringBuilder(); - if (wordSequence.size() == 0) - return 0.0f; - for (Word w : wordSequence.getWords()) { - builder.append(w.toString()); - builder.append(' '); - } - outWriter.println(builder.toString()); - String result = "0"; - try { - result = inReader.readLine(); - if (result.charAt(0) == 0) - result = result.substring(1); - } catch (IOException e) { - e.printStackTrace(); - } - - if (!result.equals("-inf")) - probability = logMath.log10ToLog(Float.parseFloat(result)); - else - probability = LogMath.LOG_ZERO; - - cache.put(wordSequence, probability); - return probability.floatValue(); - } - - public float getSmear(WordSequence wordSequence) { - return 0.0f; - } - - public Set getVocabulary() { - Set result = new HashSet(); - try { - BufferedReader reader = - new BufferedReader(new InputStreamReader(location.openStream())); - String line; - while (true) { - line = reader.readLine(); - if (line == null) - break; - if (line.length() == 0) - continue; - result.add(line.trim()); - } - reader.close(); - } catch (IOException e) { - e.printStackTrace(); - } - return result; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/SimpleNGramModel.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/SimpleNGramModel.java deleted file mode 100755 index b0c35f5c..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/SimpleNGramModel.java +++ /dev/null @@ -1,466 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist.language.ngram; - -import static java.lang.Math.max; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.*; - -import edu.cmu.sphinx.linguist.WordSequence; -import edu.cmu.sphinx.linguist.dictionary.Dictionary; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.props.ConfigurationManagerUtils; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; - - -/** - * An ASCII ARPA language model loader. This loader makes no attempt to - * optimize storage, so it can only load very small language models - *

    - * Note that all probabilities in the grammar are stored in LogMath log base - * format. Language Probabilities in the language model file are stored in log - * 10 base. - */ - -public class SimpleNGramModel implements LanguageModel { - - // ---------------------------- - // Configuration data - // ---------------------------- - private String name; - private LogMath logMath; - private URL urlLocation; - private float unigramWeight; - private Dictionary dictionary; - private int desiredMaxDepth; - private int maxNGram; - private Map map; - private Set vocabulary; - protected int lineNumber; - protected BufferedReader reader; - protected String fileName; - private boolean allocated; - private LinkedList tokens; - - public SimpleNGramModel(String location, Dictionary dictionary, - float unigramWeight, int desiredMaxDepth) - throws MalformedURLException, ClassNotFoundException - { - this(ConfigurationManagerUtils.resourceToURL(location), dictionary, - unigramWeight, desiredMaxDepth); - } - - public SimpleNGramModel(URL urlLocation, Dictionary dictionary, - float unigramWeight, int desiredMaxDepth) - { - this.urlLocation = urlLocation; - this.unigramWeight = unigramWeight; - this.logMath = LogMath.getLogMath(); - this.desiredMaxDepth = desiredMaxDepth; - this.dictionary = dictionary; - this.map = new HashMap(); - this.vocabulary = new HashSet(); - this.tokens = new LinkedList(); - } - - public SimpleNGramModel() { - - } - - /* - * (non-Javadoc) - * @see - * edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx. - * util.props.PropertySheet) - */ - public void newProperties(PropertySheet ps) throws PropertyException { - logMath = LogMath.getLogMath(); - - if (allocated) { - throw new RuntimeException("Can't change properties after allocation"); - } - - urlLocation = ConfigurationManagerUtils.getResource(PROP_LOCATION, ps); - unigramWeight = ps.getFloat(PROP_UNIGRAM_WEIGHT); - desiredMaxDepth = ps.getInt(PROP_MAX_DEPTH); - dictionary = (Dictionary) ps.getComponent(PROP_DICTIONARY); - map = new HashMap(); - vocabulary = new HashSet(); - tokens = new LinkedList(); - } - - /* - * (non-Javadoc) - * @see edu.cmu.sphinx.linguist.language.ngram.LanguageModel#allocate() - */ - public void allocate() throws IOException { - allocated = true; - load(urlLocation, unigramWeight, dictionary); - if (desiredMaxDepth > 0) { - if (desiredMaxDepth < maxNGram) { - maxNGram = desiredMaxDepth; - } - } - } - - /* - * (non-Javadoc) - * @see edu.cmu.sphinx.linguist.language.ngram.LanguageModel#deallocate() - */ - public void deallocate() { - allocated = false; - } - - /* - * (non-Javadoc) - * @see edu.cmu.sphinx.util.props.Configurable#getName() - */ - public String getName() { - return name; - } - - /** - * Gets the ngram probability of the word sequence represented by the word - * list - * - * @param wordSequence the word sequence - * @return the probability of the word sequence. Probability is in logMath - * log base - */ - public float getProbability(WordSequence wordSequence) { - float logProbability = 0.0f; - Probability prob = getProb(wordSequence); - if (prob == null) { - if (wordSequence.size() > 1) { - logProbability = getBackoff(wordSequence.getOldest()) - + getProbability(wordSequence.getNewest()); - } else { // if the single word is not in the model at all - // then its zero likelihood that we'll use it - logProbability = LogMath.LOG_ZERO; - } - } else { - logProbability = prob.logProbability; - } - // System.out.println("Search: " + wordSequence + " : " - // + logProbability + " " - // + logMath.logToLinear(logProbability)); - return logProbability; - } - - /** - * Gets the smear term for the given wordSequence - * - * @param wordSequence the word sequence - * @return the smear term associated with this word sequence - */ - public float getSmear(WordSequence wordSequence) { - return 0.0f; // TODO not implemented - } - - /** - * Returns the backoff probability for the give sequence of words - * - * @param wordSequence the sequence of words - * @return the backoff probability in LogMath log base - */ - public float getBackoff(WordSequence wordSequence) { - float logBackoff = 0.0f; // log of 1.0 - Probability prob = getProb(wordSequence); - if (prob != null) { - logBackoff = prob.logBackoff; - } - return logBackoff; - } - - /** - * Returns the maximum depth of the language model - * - * @return the maximum depth of the language model - */ - public int getMaxDepth() { - return maxNGram; - } - - /** - * Returns the set of words in the language model. The set is unmodifiable. - * - * @return the unmodifiable set of words - */ - public Set getVocabulary() { - return Collections.unmodifiableSet(vocabulary); - } - - /** - * Gets the probability entry for the given word sequence or null if there - * is no entry - * - * @param wordSequence a word sequence - * @return the probability entry for the wordlist or null - */ - private Probability getProb(WordSequence wordSequence) { - return map.get(wordSequence); - } - - /** - * Converts a wordList to a string - * - * @param wordList the wordList - * @return the string - */ - @SuppressWarnings("unused") - private String listToString(List wordList) { - StringBuilder sb = new StringBuilder(); - for (Word word : wordList) - sb.append(word).append(' '); - return sb.toString(); - } - - /** Dumps the language model */ - public void dump() { - for (Map.Entry entry : map.entrySet()) - System.out.println(entry.getKey() + " " + entry.getValue()); - } - - /** - * Retrieves a string representation of the wordlist, suitable for map - * access - * - * @param wordList the list of words - * @return a string representation of the word list - */ - @SuppressWarnings("unused") - private String getRepresentation(List wordList) { - if (wordList.isEmpty()) - return ""; - StringBuilder sb = new StringBuilder(); - for (String word : wordList) - sb.append(word).append('+'); - sb.setLength(sb.length() - 1); - return sb.toString(); - } - - /** - * Loads the language model from the given location. - * - * @param location the URL location of the model - * @param unigramWeight the unigram weight - * @throws IOException if an error occurs while loading - */ - private void load(URL location, float unigramWeight, - Dictionary dictionary) throws IOException { - String line; - float logUnigramWeight = logMath.linearToLog(unigramWeight); - float inverseLogUnigramWeight = logMath - .linearToLog(1.0 - unigramWeight); - - open(location); - // look for beginning of data - readUntil("\\data\\"); - // look for ngram statements - List ngramList = new ArrayList(); - while ((line = readLine()) != null) { - if (line.startsWith("ngram")) { - StringTokenizer st = new StringTokenizer(line, " \t\n\r\f="); - if (st.countTokens() != 3) { - corrupt("corrupt ngram field " + line + ' ' - + st.countTokens()); - } - st.nextToken(); - int index = Integer.parseInt(st.nextToken()); - int count = Integer.parseInt(st.nextToken()); - ngramList.add(index - 1, count); - maxNGram = max(index, maxNGram); - } else if (line.equals("\\1-grams:")) { - break; - } - } - int numUnigrams = ngramList.get(0) - 1; - // -log(x) = log(1/x) - float logUniformProbability = -logMath.linearToLog(numUnigrams); - for (int index = 0; index < ngramList.size(); index++) { - int ngram = index + 1; - int ngramCount = ngramList.get(index); - for (int i = 0; i < ngramCount; i++) { - StringTokenizer tok = new StringTokenizer(readLine()); - int tokenCount = tok.countTokens(); - if (tokenCount != ngram + 1 && tokenCount != ngram + 2) { - corrupt("Bad format"); - } - float log10Prob = Float.parseFloat(tok.nextToken()); - float log10Backoff = 0.0f; - // construct the WordSequence for this N-Gram - List wordList = new ArrayList(maxNGram); - for (int j = 0; j < ngram; j++) { - String word = tok.nextToken(); - vocabulary.add(word); - Word wordObject = dictionary.getWord(word); - if (wordObject == null) { - wordObject = Word.UNKNOWN; - } - wordList.add(wordObject); - } - WordSequence wordSequence = new WordSequence(wordList); - if (tok.hasMoreTokens()) { - log10Backoff = Float.parseFloat(tok.nextToken()); - } - float logProb = logMath.log10ToLog(log10Prob); - float logBackoff = logMath.log10ToLog(log10Backoff); - // Apply unigram weights if this is a unigram probability - if (ngram == 1) { - float p1 = logProb + logUnigramWeight; - float p2 = logUniformProbability + inverseLogUnigramWeight; - logProb = logMath.addAsLinear(p1, p2); - // System.out - // .println("p1 " + p1 + " p2 " + p2 + " luw " - // + logUnigramWeight + " iluw " - // + inverseLogUnigramWeight + " lup " - // + logUniformProbability + " logprog " - // + logProb); - } - put(wordSequence, logProb, logBackoff); - } - if (index < ngramList.size() - 1) { - String next = "\\" + (ngram + 1) + "-grams:"; - readUntil(next); - } - } - readUntil("\\end\\"); - close(); - } - - /** - * Puts the probability into the map - * - * @param wordSequence the tag for the prob. - * @param logProb the probability in log math base - * @param logBackoff the backoff probability in log math base - */ - private void put(WordSequence wordSequence, float logProb, float logBackoff) { - // System.out.println("Putting " + wordSequence + " p " + logProb - // + " b " + logBackoff); - map.put(wordSequence, new Probability(logProb, logBackoff)); - tokens.add(wordSequence); - } - - /** - * Returns a list of all the word sequences in the language model This - * method is used to create Finite State Transducers of the language model. - * - * @return List containing all the word sequences - */ - public LinkedList getNGrams() { - return tokens; - } - - /** - * Reads the next line from the LM file. Keeps track of line number. - * - * @throws IOException if an error occurs while reading the input or an EOF - * is encountered. - */ - private String readLine() throws IOException { - String line; - lineNumber++; - line = reader.readLine(); - if (line == null) { - corrupt("Premature EOF"); - } - return line.trim(); - } - - /** - * Opens the language model at the given location - * - * @param location the path to the language model - * @throws IOException if an error occurs while opening the file - */ - private void open(URL location) throws - IOException { - lineNumber = 0; - fileName = location.toString(); - reader = new BufferedReader - (new InputStreamReader(location.openStream())); - } - - /** - * Reads from the input stream until the input matches the given string - * - * @param match the string to match on - * @throws IOException if an error occurs while reading the input or an EOF - * is encountered before finding the match - */ - private void readUntil(String match) throws IOException { - try { - while (!readLine().equals(match)) { - } - } catch (IOException ioe) { - corrupt("Premature EOF while waiting for " + match); - } - } - - /** - * Closes the language model file - * - * @throws IOException if an error occurs - */ - private void close() throws IOException { - reader.close(); - reader = null; - } - - /** - * Generates a 'corrupt' IO exception - * - * @throws IOException with the given string - */ - private void corrupt(String why) throws IOException { - throw new IOException("Corrupt Language Model " + fileName - + " at line " + lineNumber + ':' + why); - } -} - - -/** Represents a probability and a backoff probability */ - -class Probability { - - final float logProbability; - final float logBackoff; - - /** - * Constructs a probability - * - * @param logProbability the probability - * @param logBackoff the backoff probability - */ - Probability(float logProbability, float logBackoff) { - this.logProbability = logProbability; - this.logBackoff = logBackoff; - } - - /** - * Returns a string representation of this object - * - * @return the string form of this object - */ - @Override - public String toString() { - return "Prob: " + logProbability + ' ' + logBackoff; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/BinaryLoader.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/BinaryLoader.java deleted file mode 100755 index aa6f9cd4..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/BinaryLoader.java +++ /dev/null @@ -1,841 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * Portions Copyright 2010 LIUM, University of Le Mans, France - -> Anthony Rousseau, Teva Merlin, Yannick Esteve - - - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.language.ngram.large; - -import edu.cmu.sphinx.linguist.dictionary.Dictionary; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.Utilities; - -import java.io.*; -import java.util.regex.Pattern; -import java.util.regex.Matcher; - -/** - * Reads a binary NGram language model file ("DMP file") generated by the SphinxBase sphinx_lm_convert. - *

    - * Note that all probabilities in the grammar are stored in LogMath log base format. Language - * Probabilities in the language model file are stored in log 10 base. They are converted to - * the LogMath base. - */ - -public class BinaryLoader { - - private static final String DARPA_TG_HEADER = "Darpa Trigram LM"; - private static final String DARPA_QG_HEADER = "Darpa Quadrigram LM"; - - // For convenience, NG Header is regular expression, so there is 2 extra characters in it. - // Therefore, header.length() must be adjusted by -1 (and not +1), - // and we use Pattern.matches() for equality in header names. - private static final String DARPA_NG_HEADER = "Darpa \\d-gram LM"; - - private static final int LOG2_NGRAM_SEGMENT_SIZE = 9; - - private static final float MIN_PROBABILITY = -99.0f; - private static final int MAX_PROB_TABLE_SIZE = java.lang.Integer.MAX_VALUE; - - private LogMath logMath; - - private int maxNGram; - - private float unigramWeight; - private float languageWeight; - - private double wip; - - private boolean bigEndian = true; - private boolean applyLanguageWeightAndWip; - - private long bytesRead; - - private UnigramProbability[] unigrams; - private String[] words; - - private long[] NGramOffset; - private int[] numberNGrams; - private int logNGramSegmentSize; - - private int startWordID; - private int endWordID; - - private int[][] NGramSegmentTable; - private float[][] NGramProbTable; - private float[][] NGramBackoffTable; - - private RandomAccessFile file; - - // Bytes multiplier for LM (2 = 16 bits, 4 = 32 bits) - private int bytesPerField; - - /** - * Initializes the binary loader - * - * @param location location of the model - * @param format file format - * @param applyLanguageWeightAndWip if true apply language weight and word insertion penalty - * @param languageWeight language weight - * @param wip word insertion probability - * @param unigramWeight unigram weight - * @throws IOException if an I/O error occurs - */ - public BinaryLoader(File location, String format, - boolean applyLanguageWeightAndWip, - float languageWeight, double wip, float unigramWeight) - throws IOException { - this(format, applyLanguageWeightAndWip, languageWeight, wip, unigramWeight); - loadModelLayout(new FileInputStream (location)); - file = new RandomAccessFile(location, "r"); - } - - - /** - * Initializes the binary loader - * - * @param format file format - * @param applyLanguageWeightAndWip if true apply language weight and word insertion penalty - * @param languageWeight language weight - * @param wip word insertion probability - * @param unigramWeight unigram weight - */ - public BinaryLoader(String format, boolean applyLanguageWeightAndWip, float - languageWeight, double wip, - float unigramWeight) { - startWordID = -1; - endWordID = -1; - this.applyLanguageWeightAndWip = applyLanguageWeightAndWip; - logMath = LogMath.getLogMath(); - this.languageWeight = languageWeight; - this.wip = wip; - this.unigramWeight = unigramWeight; - } - - public void deallocate() throws IOException { - if (null != file) - file.close(); - } - - /** - * Returns the number of unigrams - * - * @return the number of unigrams - */ - public int getNumberUnigrams() { - return getNumberNGrams(1); - } - - - /** - * Returns the number of bigrams - * - * @return the number of bigrams - */ - public int getNumberBigrams() { - return getNumberNGrams(2); - } - - - /** - * Returns the number of trigrams - * - * @return the number of trigrams - */ - public int getNumberTrigrams() { - return getNumberNGrams(3); - } - - - /** - * Returns the number of NGrams at - * a specified N order. - * - * @param n the desired order - * @return the number of NGrams - */ - public int getNumberNGrams(int n) { - // Be sure that we don't overcome the model - assert (n <= maxNGram) & (n > 0); - return numberNGrams[n - 1]; - } - - - /** - * Returns all the unigrams - * - * @return all the unigrams - */ - public UnigramProbability[] getUnigrams() { - return unigrams; - } - - - /** - * Returns all the bigram probabilities. - * - * @return all the bigram probabilities - */ - public float[] getBigramProbabilities() { - return getNGramProbabilities(2); - } - - - /** - * Returns all the trigram probabilities. - * - * @return all the trigram probabilities - */ - public float[] getTrigramProbabilities() { - return getNGramProbabilities(3); - } - - - /** - * Returns all the trigram backoff weights - * - * @return all the trigram backoff weights - */ - public float[] getTrigramBackoffWeights() { - return getNGramBackoffWeights(3); - } - - - /** - * Returns the trigram segment table. - * - * @return the trigram segment table - */ - public int[] getTrigramSegments() { - return getNGramSegments(3); - } - - - /** - * Returns the log of the bigram segment size - * - * @return the log of the bigram segment size - */ - public int getLogBigramSegmentSize() { - return logNGramSegmentSize; - } - - - /** - * Returns all the NGram probabilities at - * a specified N order. - * - * @param n the desired order - * @return all the NGram probabilities - */ - public float[] getNGramProbabilities(int n) { - // Be sure that we don't overcome the model - assert (n <= maxNGram) && (n > 1); - return NGramProbTable[n - 1]; - } - - - /** - * Returns all the NGram backoff weights at - * a specified N order. - * - * @param n the desired order - * @return all the NGram backoff weights - */ - public float[] getNGramBackoffWeights(int n) { - // Be sure that we don't overcome the model - assert (n <= maxNGram) & (n > 2); - return NGramBackoffTable[n - 1]; - } - - - /** - * Returns the NGram segment table at - * a specified order. - * - * @param n the desired order - * @return the NGram segment table - */ - public int[] getNGramSegments(int n) { - // Be sure that we don't overcome the model - assert (n <= maxNGram) & (n > 2); - return NGramSegmentTable[n - 1]; - } - - - /** - * Returns the log of the NGram segment size - * - * @return the log of the NGram segment size - */ - public int getLogNGramSegmentSize() { - return logNGramSegmentSize; - } - - - /** - * Returns all the words. - * - * @return all the words - */ - public String[] getWords() { - return words; - } - - - /** - * Returns the location (or offset) into the file where bigrams start. - * - * @return the location of the bigrams - */ - public long getBigramOffset() { - return getNGramOffset(2); - } - - - /** - * Returns the location (or offset) into the file where trigrams start. - * - * @return the location of the trigrams - */ - public long getTrigramOffset() { - return getNGramOffset(3); - } - - - /** - * Returns the location (or offset) into the file where NGrams start - * at a specified N order. - * - * @param n the desired order - * @return the location of the bigrams - */ - public long getNGramOffset(int n) { - // Be sure that we don't overcome the model - assert (n <= maxNGram) & (n > 1); - return NGramOffset[n - 1]; - } - - - /** - * Returns the maximum depth of the language model - * - * @return the maximum depth of the language model - */ - public int getMaxDepth() { - return maxNGram; - } - - - /** - * Returns true if the loaded file is in big-endian. - * - * @return true if the loaded file is big-endian - */ - public boolean getBigEndian() { - return bigEndian; - } - - - /** - * Returns the multiplier for the size of a NGram - * (1 for 16 bits, 2 for 32 bits). - * - * @return the multiplier for the size of a NGram - */ - public int getBytesPerField() { - return bytesPerField; - } - - - /** - * Loads the contents of the memory-mapped file starting at the given position and for the given size, into a byte - * buffer. This method is implemented because MappedByteBuffer.load() does not work properly. - * - * @param position the starting position in the file - * @param size the number of bytes to load - * @return the loaded ByteBuffer - * @throws java.io.IOException if IO went wrong - */ - public byte[] loadBuffer(long position, int size) throws IOException { - // assert ((position + size) <= fileChannel.size()); - file.seek(position); - byte[] bytes = new byte[size]; - if (file.read(bytes) != size) { - throw new IOException("Incorrect number of bytes read. Size = " + size + ". Position =" + position + "."); - } - return bytes; - } - - - /** - * Loads the language model from the given file. - * - * @param inputStream stream to read the language model data - * @throws java.io.IOException if IO went wrong - */ - protected void loadModelLayout(InputStream inputStream) throws IOException { - - DataInputStream stream = new DataInputStream - (new BufferedInputStream(inputStream)); - - // read standard header string-size; set bigEndian flag - readHeader(stream); - - // +1 is the sentinel unigram at the end - unigrams = readUnigrams(stream, numberNGrams[0] + 1, bigEndian); - - skipNGrams(stream); - - // Read the NGram prob & bow tables - for (int i = 1; i < maxNGram; i++) { - if (numberNGrams[i] > 0) { - if (i == 1) { - NGramProbTable[i] = readFloatTable(stream, bigEndian); - } - else { - NGramBackoffTable[i] = readFloatTable(stream, bigEndian); - NGramProbTable[i] = readFloatTable(stream, bigEndian); - - int nMinus1gramSegmentSize = 1 << logNGramSegmentSize; - int NGramSegTableSize = ((numberNGrams[i - 1] + 1) / nMinus1gramSegmentSize) + 1; - - NGramSegmentTable[i] = readIntTable(stream, bigEndian, NGramSegTableSize); - } - } - } - - // read word string names - int wordsStringLength = readInt(stream, bigEndian); - if (wordsStringLength <= 0) { - throw new Error("Bad word string size: " + wordsStringLength); - } - - // read the string of all words - this.words = readWords(stream, wordsStringLength, numberNGrams[0]); - - // A voir - if (startWordID > -1) { - UnigramProbability unigram = unigrams[startWordID]; - unigram.setLogProbability(MIN_PROBABILITY); - } - if (endWordID > -1) { - UnigramProbability unigram = unigrams[endWordID]; - unigram.setLogBackoff(MIN_PROBABILITY); - } - - applyUnigramWeight(); - - if (applyLanguageWeightAndWip) { - for (int i = 0; i <= maxNGram; i++) { - applyLanguageWeight(NGramProbTable[i], languageWeight); - applyWip(NGramProbTable[i], wip); - - if (i > 1) { - applyLanguageWeight(NGramBackoffTable[i], languageWeight); - } - } - } - - stream.close(); - } - - - /** - * Reads the LM file header - * - * @param stream the data stream of the LM file - * @throws java.io.IOException - */ - private void readHeader(DataInputStream stream) throws IOException { - int headerLength = readInt(stream, bigEndian); - - if ((headerLength != DARPA_TG_HEADER.length() + 1) && (headerLength != DARPA_QG_HEADER.length() + 1) && (headerLength != DARPA_NG_HEADER.length() - 1)) { // not big-endian - headerLength = Utilities.swapInteger(headerLength); - if (headerLength == (DARPA_TG_HEADER.length() + 1) || headerLength == (DARPA_QG_HEADER.length() + 1) || headerLength == (DARPA_NG_HEADER.length() - 1)) { - bigEndian = false; - // System.out.println("Little-endian"); - } else { - throw new Error("Bad binary LM file magic number: " - + headerLength + ", not an LM dumpfile?"); - } - } else { - // System.out.println("Big-endian"); - } - - // read and verify standard header string - String header = readString(stream, headerLength - 1); - stream.readByte(); // read the '\0' - bytesRead++; - - if (!header.equals(DARPA_TG_HEADER) & !header.equals(DARPA_QG_HEADER) & !Pattern.matches(DARPA_NG_HEADER, header)) { - throw new Error("Bad binary LM file header: " + header); - } - else { - if (header.equals(DARPA_TG_HEADER)) - maxNGram = 3; - else if (header.equals(DARPA_QG_HEADER)) - maxNGram = 4; - else { - Pattern p = Pattern.compile("\\d"); - Matcher m = p.matcher(header); - maxNGram = Integer.parseInt(m.group()); - } - } - - // read LM filename string size and string - int fileNameLength = readInt(stream, bigEndian); - skipStreamBytes(stream, fileNameLength); - - numberNGrams = new int[maxNGram]; - NGramOffset = new long[maxNGram]; - NGramProbTable = new float[maxNGram][]; - NGramBackoffTable = new float[maxNGram][]; - NGramSegmentTable = new int[maxNGram][]; - - numberNGrams[0] = 0; - logNGramSegmentSize = LOG2_NGRAM_SEGMENT_SIZE; - - // read version number, if present. it must be <= 0. - - int version = readInt(stream, bigEndian); - // System.out.println("Version: " + version); - - bytesPerField = 2; - - if (version <= 0) { // yes, its the version number - readInt(stream, bigEndian); // read and skip timestamp - - // Means we are going 32 bits. - if (version <= -3) - bytesPerField = 4; - - // read and skip format description - int formatLength; - for (; ;) { - if ((formatLength = readInt(stream, bigEndian)) == 0) { - break; - } - bytesRead += stream.skipBytes(formatLength); - } - - // read log NGram segment size if present - // only for 16 bits version 2 LM - if (version == -2) { - logNGramSegmentSize = readInt(stream, bigEndian); - if (logNGramSegmentSize < 1 || logNGramSegmentSize > 15) { - throw new Error("log2(bg_seg_sz) outside range 1..15"); - } - } - - numberNGrams[0] = readInt(stream, bigEndian); - } else { - numberNGrams[0] = version; - } - - if (numberNGrams[0] <= 0) { - throw new Error("Bad number of unigrams: " + numberNGrams[0] - + ", must be > 0."); - } - - for (int i = 1; i < maxNGram; i++) { - if ((numberNGrams[i] = readInt(stream, bigEndian)) < 0) { - throw new Error("Bad number of " + String.valueOf(i) + "-grams: " + numberNGrams[i]); - } - } - } - - - /** - * Skips the NGrams of the LM. - * - * @param stream - * the source of data - * @throws java.io.IOException - */ - private void skipNGrams(DataInputStream stream) throws IOException { - long bytesToSkip; - - NGramOffset[1] = bytesRead; - bytesToSkip = (numberNGrams[1] + 1) * LargeNGramModel.BYTES_PER_NGRAM * getBytesPerField(); - skipStreamBytes(stream, bytesToSkip); - - for (int i = 2; i < maxNGram; i++) { - if (numberNGrams[i] > 0 && i < maxNGram - 1) { - NGramOffset[i] = bytesRead; - bytesToSkip = (long) (numberNGrams[i] + 1) * (long) LargeNGramModel.BYTES_PER_NGRAM * getBytesPerField(); - skipStreamBytes(stream, bytesToSkip); - } else if (numberNGrams[i] > 0 && i == maxNGram - 1) { - NGramOffset[i] = bytesRead; - bytesToSkip = (long) (numberNGrams[i]) * (long) LargeNGramModel.BYTES_PER_NMAXGRAM * getBytesPerField(); - skipStreamBytes(stream, bytesToSkip); - } - } - } - - /** - * Reliable skip - * - * @param stream stream - * @param bytes number of bytes - */ - private void skipStreamBytes(DataInputStream stream, long bytes) throws IOException { - while (bytes > 0) { - long skipped = stream.skip(bytes); - bytesRead += skipped; - bytes -= skipped; - } - } - - - /** Apply the unigram weight to the set of unigrams */ - private void applyUnigramWeight() { - float logUnigramWeight = logMath.linearToLog(unigramWeight); - float logNotUnigramWeight = logMath.linearToLog(1.0f - unigramWeight); - float logUniform = logMath.linearToLog(1.0f / (numberNGrams[0])); - - float logWip = logMath.linearToLog(wip); - - float p2 = logUniform + logNotUnigramWeight; - - for (int i = 0; i < numberNGrams[0]; i++) { - UnigramProbability unigram = unigrams[i]; - - float p1 = unigram.getLogProbability(); - - if (i != startWordID) { - p1 += logUnigramWeight; - p1 = logMath.addAsLinear(p1, p2); - } - - if (applyLanguageWeightAndWip) { - p1 = p1 * languageWeight + logWip; - unigram.setLogBackoff(unigram.getLogBackoff() * languageWeight); - } - - unigram.setLogProbability(p1); - } - } - - - /** Apply the language weight to the given array of probabilities. - */ - private void applyLanguageWeight(float[] logProbabilities, - float languageWeight) { - for (int i = 0; i < logProbabilities.length; i++) { - logProbabilities[i] = logProbabilities[i] * languageWeight; - } - } - - - /** Apply the WIP to the given array of probabilities. - */ - private void applyWip(float[] logProbabilities, double wip) { - float logWip = logMath.linearToLog(wip); - for (int i = 0; i < logProbabilities.length; i++) { - logProbabilities[i] = logProbabilities[i] + logWip; - } - } - - - /** - * Reads the probability table from the given DataInputStream. - * - * @param stream the DataInputStream from which to read the table - * @param bigEndian true if the given stream is bigEndian, false otherwise - * @throws java.io.IOException - */ - private float[] readFloatTable(DataInputStream stream, boolean bigEndian) - throws IOException { - - int numProbs = readInt(stream, bigEndian); - if (numProbs <= 0 || numProbs > MAX_PROB_TABLE_SIZE) { - throw new Error("Bad probabilities table size: " + numProbs); - } - - float[] probTable = new float[numProbs]; - - for (int i = 0; i < numProbs; i++) { - //probTable[i] = readFloat(stream, bigEndian); - probTable[i] = logMath.log10ToLog(readFloat(stream, bigEndian)); - } - - return probTable; - } - - - /** - * Reads a table of integers from the given DataInputStream. - * - * @param stream the DataInputStream from which to read the table - * @param bigEndian true if the given stream is bigEndian, false otherwise - * @param tableSize the size of the NGram segment table - * @return the NGram segment table, which is an array of integers - * @throws java.io.IOException - */ - private int[] readIntTable(DataInputStream stream, boolean bigEndian, - int tableSize) throws IOException { - int numSegments = readInt(stream, bigEndian); - if (numSegments != tableSize) { - throw new Error("Bad NGram seg table size: " + numSegments); - } - int[] segmentTable = new int[numSegments]; - for (int i = 0; i < numSegments; i++) { - segmentTable[i] = readInt(stream, bigEndian); - } - return segmentTable; - } - - - /** - * Read in the unigrams in the given DataInputStream. - * - * @param stream the DataInputStream to read from - * @param numberUnigrams the number of unigrams to read - * @param bigEndian true if the DataInputStream is big-endian, false otherwise - * @return an array of UnigramProbability index by the unigram ID - * @throws java.io.IOException - */ - private UnigramProbability[] readUnigrams(DataInputStream stream, - int numberUnigrams, boolean bigEndian) throws IOException { - - UnigramProbability[] unigrams = new UnigramProbability[numberUnigrams]; - - for (int i = 0; i < numberUnigrams; i++) { - - // read unigram ID, unigram probability, unigram backoff weight - int unigramID = readInt(stream, bigEndian); - - /* Some tools to convert to DMP doesn't store ID's in unigrams */ - if (unigramID < 1) - unigramID = i; - - // if we're not reading the sentinel unigram at the end, - // make sure that the unigram IDs are consecutive - if (i != (numberUnigrams - 1)) { - assert (unigramID == i); - } - - float unigramProbability = readFloat(stream, bigEndian); - float unigramBackoff = readFloat(stream, bigEndian); - int firstBigramEntry = readInt(stream, bigEndian); - - float logProbability = logMath.log10ToLog(unigramProbability); - float logBackoff = logMath.log10ToLog(unigramBackoff); - - unigrams[i] = new UnigramProbability(unigramID, logProbability, - logBackoff, firstBigramEntry); - } - - return unigrams; - } - - - /** - * Reads an integer from the given DataInputStream. - * - * @param stream the DataInputStream to read from - * @param bigEndian true if the DataInputStream is in bigEndian, false otherwise - * @return the integer read - * @throws java.io.IOException - */ - private int readInt(DataInputStream stream, boolean bigEndian) - throws IOException { - bytesRead += 4; - if (bigEndian) { - return stream.readInt(); - } else { - return Utilities.readLittleEndianInt(stream); - } - } - - - /** - * Reads a float from the given DataInputStream. - * - * @param stream the DataInputStream to read from - * @param bigEndian true if the DataInputStream is in bigEndian, false otherwise - * @return the float read - * @throws java.io.IOException - */ - private float readFloat(DataInputStream stream, boolean bigEndian) - throws IOException { - bytesRead += 4; - if (bigEndian) { - return stream.readFloat(); - } else { - return Utilities.readLittleEndianFloat(stream); - } - } - - - - /** - * Reads a string of the given length from the given DataInputStream. It is assumed that the DataInputStream - * contains 8-bit chars. - * - * @param stream the DataInputStream to read from - * @param length the number of characters in the returned string - * @return a string of the given length from the given DataInputStream - * @throws java.io.IOException - */ - private String readString(DataInputStream stream, int length) - throws IOException { - StringBuilder builder = new StringBuilder(); - byte[] bytes = new byte[length]; - bytesRead += stream.read(bytes); - - for (int i = 0; i < length; i++) { - builder.append((char) bytes[i]); - } - return builder.toString(); - } - - - /** - * Reads a series of consecutive Strings from the given stream. - * - * @param stream the DataInputStream to read from - * @param length the total length in bytes of all the Strings - * @param numberUnigrams the number of String to read - * @return an array of the Strings read - * @throws java.io.IOException - */ - private String[] readWords(DataInputStream stream, int length, - int numberUnigrams) throws IOException { - String[] words = new String[numberUnigrams]; - byte[] bytes = new byte[length]; - bytesRead += stream.read(bytes); - - int s = 0; - int wordStart = 0; - for (int i = 0; i < length; i++) { - char c = (char) (bytes[i] & 0xFF); - bytesRead++; - if (c == '\0') { - // if its the end of a string, add it to the 'words' array - words[s] = new String(bytes, wordStart, i - wordStart); - wordStart = i + 1; - if (words[s].equals(Dictionary.SENTENCE_START_SPELLING)) { - startWordID = s; - } else if (words[s].equals(Dictionary.SENTENCE_END_SPELLING)) { - endWordID = s; - } - s++; - } - } - assert (s == numberUnigrams); - return words; - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/BinaryStreamLoader.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/BinaryStreamLoader.java deleted file mode 100755 index e287f390..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/BinaryStreamLoader.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2010 PC-NG Inc. - * - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.language.ngram.large; - -import java.io.BufferedInputStream; -import java.io.ByteArrayOutputStream; -import java.io.DataInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; - -/** - * Language model that reads whole model into memory. Useful - * for loading language models from resources or external locations. - * - * @author Nikolay Shmyrev - */ -public class BinaryStreamLoader extends BinaryLoader { - - byte[] modelData; - - public BinaryStreamLoader(URL location, String format, boolean - applyLanguageWeightAndWip, - float languageWeight, double wip, - float unigramWeight) - throws IOException - { - super(format, applyLanguageWeightAndWip, languageWeight, wip, - unigramWeight); - - InputStream stream = location.openStream(); - loadModelLayout(stream); - - stream = location.openStream(); - loadModelData(stream); - } - - - /** - * Reads whole data into memory - * - * @param stream the stream to load model from - * @throws IOException - */ - private void loadModelData(InputStream stream) throws IOException { - DataInputStream dataStream = new DataInputStream (new BufferedInputStream (stream)); - ByteArrayOutputStream bytes = new ByteArrayOutputStream(); - byte[] buffer = new byte[4096]; - while (true) { - if (dataStream.read(buffer) < 0) - break; - bytes.write(buffer); - } - modelData = bytes.toByteArray(); - } - - @Override - public byte[] loadBuffer(long position, int size) throws IOException { - byte[] result = new byte[size]; - System.arraycopy(modelData, (int)position, result, 0, size); - return result; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/KeywordOptimizerLargeNGramModel.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/KeywordOptimizerLargeNGramModel.java deleted file mode 100755 index 5a058e02..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/KeywordOptimizerLargeNGramModel.java +++ /dev/null @@ -1,64 +0,0 @@ -package edu.cmu.sphinx.linguist.language.ngram.large; - -import edu.cmu.sphinx.linguist.language.ngram.large.LargeNGramModel; -import edu.cmu.sphinx.linguist.WordSequence; -import edu.cmu.sphinx.linguist.dictionary.Word; - -import java.util.*; - -/** - * Use a largeNGramModel that also can be adjusted depending on context. - * A model that optimizes the search by giving a preference to - * the list of keywords. - *

    - * Example of use in calling program using config file: - *
    - * - * KeywordOptimizerLargeNGramModel model = - * (KeywordOptimizerLargeNGramModel) cm.lookup("trigramModel"); - * model.keywordProbs = this.hashProbs; - *

    - * Create hashProbs by loading keywords and changes to probabilities, - * string, float pairs. Keywords may be all lower case.
    - * - * hashProbs.put("keyword", 0.5f); - * @author daktari3 - * @version 2010-12-16 - * @see LargeNGramModel - * @see edu.cmu.sphinx.linguist.language.ngram.KeywordOptimizerModel - * - */ - -public class KeywordOptimizerLargeNGramModel extends LargeNGramModel { - - /** - * hash map of probability adjustments settable by - * user program. - * - */ - public HashMap keywordProbs; - - /** - * Gets the ngram probability of the word sequence represented by the word list - * - * @param wordSequence the word sequence - * @return the probability of the word sequence. Probability is in logMath log base - */ - @Override - public float getProbability(WordSequence wordSequence) { - float prob = super.getProbability(wordSequence); - - if (keywordProbs == null) - return prob; - - for (Word word : wordSequence.getWords()) { - String ws = word.toString(); - if (keywordProbs.containsKey(ws)) { - prob *= keywordProbs.get(ws); - } - } - - return prob; - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/LargeNGramModel.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/LargeNGramModel.java deleted file mode 100755 index 3832c000..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/LargeNGramModel.java +++ /dev/null @@ -1,1100 +0,0 @@ -/* - * Copyright 2010 LIUM, based on Carnegie Mellon University previous work. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * Portions Copyright 2010 LIUM, University of Le Mans, France - -> Yannick Esteve, Anthony Rousseau - - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.language.ngram.large; - -import java.io.*; -import java.net.URL; -import java.util.*; -import java.util.logging.Level; -import java.util.logging.Logger; - -import edu.cmu.sphinx.linguist.WordSequence; -import edu.cmu.sphinx.linguist.dictionary.Dictionary; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.linguist.language.ngram.LanguageModel; -import edu.cmu.sphinx.linguist.util.LRUCache; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.TimerPool; -import edu.cmu.sphinx.util.props.*; - -/** - * Language model that uses a binary NGram language model file ("DMP file") - * generated by the SphinxBase sphinx_lm_convert. - */ - -public class LargeNGramModel implements LanguageModel { - - /** - * The property for the name of the file that logs all the queried N-grams. - * If this property is set to null, it means that the queried N-grams are - * not logged. - */ - @S4String(mandatory = false) - public static final String PROP_QUERY_LOG_FILE = "queryLogFile"; - - /** The property that defines that maximum number of ngrams to be cached */ - @S4Integer(defaultValue = 100000) - public static final String PROP_NGRAM_CACHE_SIZE = "ngramCacheSize"; - - /** - * The property that controls whether the ngram caches are cleared after - * every utterance - */ - @S4Boolean(defaultValue = false) - public static final String PROP_CLEAR_CACHES_AFTER_UTTERANCE = "clearCachesAfterUtterance"; - - /** The property that defines the language weight for the search */ - @S4Double(defaultValue = 1.0f) - public final static String PROP_LANGUAGE_WEIGHT = "languageWeight"; - - /** - * The property that controls whether or not the language model will apply - * the language weight and word insertion probability - */ - @S4Boolean(defaultValue = false) - public final static String PROP_APPLY_LANGUAGE_WEIGHT_AND_WIP = "applyLanguageWeightAndWip"; - - /** Word insertion probability property */ - @S4Double(defaultValue = 1.0f) - public final static String PROP_WORD_INSERTION_PROBABILITY = "wordInsertionProbability"; - - /** If true, use full bigram information to determine smear */ - @S4Boolean(defaultValue = false) - public final static String PROP_FULL_SMEAR = "fullSmear"; - - /** - * The number of bytes per N-gram in the LM file generated by the - * CMU-Cambridge Statistical Language Modeling Toolkit. - */ - public static final int BYTES_PER_NGRAM = 4; - public static final int BYTES_PER_NMAXGRAM = 2; - - private final static int SMEAR_MAGIC = 0xC0CAC01A; // things go better - - // ------------------------------ - // Configuration data - // ------------------------------ - URL location; - protected Logger logger; - protected LogMath logMath; - protected int maxDepth; - - protected int ngramCacheSize; - protected boolean clearCacheAfterUtterance; - - protected boolean fullSmear; - - protected Dictionary dictionary; - protected String format; - protected boolean applyLanguageWeightAndWip; - protected float languageWeight; - protected float unigramWeight; - protected double wip; - - // ------------------------------- - // Statistics - // ------------------------------- - private int ngramMisses; - private int ngramHits; - private int smearTermCount; - protected String ngramLogFile; - - // ------------------------------- - // subcomponents - // -------------------------------- - private BinaryLoader loader; - private PrintWriter logFile; - - // ------------------------------- - // Working data - // -------------------------------- - private Map unigramIDMap; - private Map[] loadedNGramBuffers; - private LRUCache ngramProbCache; - private Map bigramSmearMap; - - private NGramBuffer[] loadedBigramBuffers; - private UnigramProbability[] unigrams; - private int[][] ngramSegmentTable; - private float[][] ngramProbTable; - private float[][] ngramBackoffTable; - private float[] unigramSmearTerm; - - public LargeNGramModel(String format, URL location, String ngramLogFile, - int maxNGramCacheSize, boolean clearCacheAfterUtterance, - int maxDepth, Dictionary dictionary, - boolean applyLanguageWeightAndWip, float languageWeight, - double wip, float unigramWeight, boolean fullSmear) { - logger = Logger.getLogger(getClass().getName()); - this.format = format; - this.location = location; - this.ngramLogFile = ngramLogFile; - this.ngramCacheSize = maxNGramCacheSize; - this.clearCacheAfterUtterance = clearCacheAfterUtterance; - this.maxDepth = maxDepth; - logMath = LogMath.getLogMath(); - this.dictionary = dictionary; - this.applyLanguageWeightAndWip = applyLanguageWeightAndWip; - this.languageWeight = languageWeight; - this.wip = wip; - this.unigramWeight = unigramWeight; - this.fullSmear = fullSmear; - } - - public LargeNGramModel() { - - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx. - * util.props.PropertySheet) - */ - public void newProperties(PropertySheet ps) throws PropertyException { - logger = ps.getLogger(); - location = ConfigurationManagerUtils.getResource(PROP_LOCATION, ps); - ngramLogFile = ps.getString(PROP_QUERY_LOG_FILE); - ngramCacheSize = ps.getInt(PROP_NGRAM_CACHE_SIZE); - clearCacheAfterUtterance = ps - .getBoolean(PROP_CLEAR_CACHES_AFTER_UTTERANCE); - maxDepth = ps.getInt(LanguageModel.PROP_MAX_DEPTH); - dictionary = (Dictionary) ps.getComponent(PROP_DICTIONARY); - applyLanguageWeightAndWip = ps - .getBoolean(PROP_APPLY_LANGUAGE_WEIGHT_AND_WIP); - languageWeight = ps.getFloat(PROP_LANGUAGE_WEIGHT); - wip = ps.getDouble(PROP_WORD_INSERTION_PROBABILITY); - unigramWeight = ps.getFloat(PROP_UNIGRAM_WEIGHT); - fullSmear = ps.getBoolean(PROP_FULL_SMEAR); - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.linguist.language.ngram.LanguageModel#allocate() - */ - @SuppressWarnings("unchecked") - public void allocate() throws IOException { - TimerPool.getTimer(this, "Load LM").start(); - - logger.info("Loading n-gram language model from: " + location); - - // create the log file if specified - if (ngramLogFile != null) - logFile = new PrintWriter(new FileOutputStream(ngramLogFile)); - - if (location.getProtocol() == null - || location.getProtocol().equals("file")) { - try { - loader = new BinaryLoader(new File(location.toURI()), format, - applyLanguageWeightAndWip, languageWeight, wip, - unigramWeight); - } catch (Exception e) { - loader = new BinaryLoader(new File(location.getPath()), format, - applyLanguageWeightAndWip, languageWeight, wip, - unigramWeight); - } - } else { - loader = new BinaryStreamLoader(location, format, - applyLanguageWeightAndWip, languageWeight, wip, - unigramWeight); - } - - unigramIDMap = new HashMap(); - unigrams = loader.getUnigrams(); - loadedNGramBuffers = new Map[loader.getMaxDepth()]; - ngramProbTable = new float[loader.getMaxDepth()][]; - ngramBackoffTable = new float[loader.getMaxDepth()][]; - ngramSegmentTable = new int[loader.getMaxDepth()][]; - - for (int i = 1; i <= loader.getMaxDepth(); i++) { - loadedNGramBuffers[i - 1] = new HashMap(); - - if (i >= 2) - ngramProbTable[i - 1] = loader.getNGramProbabilities(i); - - if (i > 2) { - ngramBackoffTable[i - 1] = loader.getNGramBackoffWeights(i); - ngramSegmentTable[i - 1] = loader.getNGramSegments(i); - } - } - - ngramProbCache = new LRUCache(ngramCacheSize); - if (dictionary != null) - buildUnigramIDMap(dictionary); - else - buildUnigramIDMap(); - loadedBigramBuffers = new NGramBuffer[unigrams.length]; - - if (maxDepth <= 0 || maxDepth > loader.getMaxDepth()) - maxDepth = loader.getMaxDepth(); - - for (int i = 1; i <= loader.getMaxDepth(); i++) - logger.info(Integer.toString(i) + "-grams: " - + loader.getNumberNGrams(i)); - - if (fullSmear) { - System.out.println("Full Smear"); - try { - System.out.println("... Reading ..."); - readSmearInfo("smear.dat"); - System.out.println("... Done "); - } catch (IOException e) { - System.out.println("... " + e); - System.out.println("... Calculating"); - buildSmearInfo(); - System.out.println("... Writing"); - // writeSmearInfo("smear.dat"); - System.out.println("... Done"); - } - } - - TimerPool.getTimer(this, "Load LM").stop(); - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.linguist.language.ngram.LanguageModel#deallocate() - */ - public void deallocate() throws IOException { - loader.deallocate(); - } - - /** - * Builds the map from unigram to unigramID. Also finds the startWordID and - * endWordID. - * - * @param dictionary - * */ - private void buildUnigramIDMap(Dictionary dictionary) { - int missingWords = 0; - String[] words = loader.getWords(); - for (int i = 0; i < words.length; i++) { - Word word = dictionary.getWord(words[i]); - - if (word == null) { - logger.warning("The dictionary is missing a phonetic transcription for the word '" - + words[i] + "'"); - missingWords++; - } - - unigramIDMap.put(word, unigrams[i]); - - if (logger.isLoggable(Level.FINE)) - logger.fine("Word: " + word); - } - - if (missingWords > 0) - logger.warning("Dictionary is missing " + missingWords - + " words that are contained in the language model."); - } - - private void buildUnigramIDMap() { - String[] words = loader.getWords(); - for (int i = 0; i < words.length; i++) { - Word word = new Word(words[i], null, false); - - unigramIDMap.put(word, unigrams[i]); - } - } - - /** Called after a recognition */ - public void stop() { - clearCache(); - - if (logFile != null) { - logFile.println(""); - logFile.flush(); - } - } - - /** Clears the various N-gram caches. */ - private void clearCache() { - for (int i = 0; i < loadedBigramBuffers.length; i++) { - NGramBuffer buffer = loadedBigramBuffers[i]; - - if (buffer != null) { - if (!buffer.getUsed()) - loadedBigramBuffers[i] = null; // free the BigramBuffer - else - buffer.setUsed(false); - } - } - - loadedBigramBuffers = new NGramBuffer[unigrams.length]; - for (int i = 2; i <= loader.getMaxDepth(); i++) { - loadedNGramBuffers[i - 1] = new HashMap(); - } - logger.info("LM Cache Size: " + ngramProbCache.size() + " Hits: " - + ngramHits + " Misses: " + ngramMisses); - if (clearCacheAfterUtterance) { - ngramProbCache = new LRUCache(ngramCacheSize); - } - } - - /** - * Gets the ngram probability of the word sequence represented by the word - * list - * - * @param wordSequence - * the word sequence - * @return the probability of the word sequence. Probability is in logMath - * log base - */ - public float getProbability(WordSequence wordSequence) { - int numberWords = wordSequence.size(); - Float probability; - - if (numberWords > maxDepth) { - throw new Error("Unsupported NGram: " + wordSequence.size()); - } - - if (numberWords == maxDepth) { - probability = ngramProbCache.get(wordSequence); - - if (probability != null) { - ngramHits++; - return probability; - } - ngramMisses++; - } - - probability = getNGramProbability(wordSequence); - - if (numberWords == maxDepth) - ngramProbCache.put(wordSequence, probability); - - if (logFile != null && probability != null) - logFile.println(wordSequence.toString().replace("][", " ") + " : " - + Float.toString(probability)); - - return probability; - } - - private Float getNGramProbability(WordSequence wordSequence) { - int numberWords = wordSequence.size(); - Word firstWord = wordSequence.getWord(0); - - if (loader.getNumberNGrams(numberWords) == 0 || !hasUnigram(firstWord)) - return getNGramProbability(wordSequence.getNewest()); - - if (numberWords < 2) { - return getUnigramProbability(wordSequence); - } - - NGramProbability nGProbability = findNGram(wordSequence); - - if (nGProbability != null) { - return ngramProbTable[numberWords - 1][nGProbability - .getProbabilityID()]; - } - - if (numberWords == 2) { - UnigramProbability unigramProb = getUnigram(firstWord); - UnigramProbability unigramProb1 = getUnigram(wordSequence - .getWord(1)); - return unigramProb.getLogBackoff() - + unigramProb1.getLogProbability(); - } - - NGramProbability nMinus1Gram = findNGram(wordSequence.getOldest()); - - if (nMinus1Gram != null) { - return ngramBackoffTable[numberWords - 1][nMinus1Gram - .getBackoffID()] + getProbability(wordSequence.getNewest()); - } - - return getProbability(wordSequence.getNewest()); - } - - /** - * Finds or loads the NGram probability of the given NGram. - * - * @param wordSequence - * the NGram to load - * @return a NGramProbability of the given NGram - */ - private NGramProbability findNGram(WordSequence wordSequence) { - int numberWords = wordSequence.size(); - NGramProbability nGram = null; - - WordSequence oldest = wordSequence.getOldest(); - NGramBuffer nGramBuffer = loadedNGramBuffers[numberWords - 1] - .get(oldest); - if (nGramBuffer == null) { - nGramBuffer = getNGramBuffer(oldest); - if (nGramBuffer != null) - loadedNGramBuffers[numberWords - 1].put(oldest, nGramBuffer); - } - - if (nGramBuffer != null) { - int nthWordID = getWordID(wordSequence.getWord(numberWords - 1)); - nGram = nGramBuffer.findNGram(nthWordID); - } - - return nGram; - } - - /** - * Tells if the model is 16 or 32 bits. - * - * @return true if 32 bits, false otherwise - */ - private boolean is32bits() { - if (loader.getBytesPerField() == 4) - return true; - return false; - } - - /** - * Loads into a buffer all the NGram followers of the given N-1Gram. - * - * @param ws - * the N-1Gram to find followers - * - * @return a NGramBuffer of all the NGram followers of the given sequence - */ - private NGramBuffer loadNGramBuffer(WordSequence ws) { - int firstWordID = getWordID(ws.getWord(0)); - int firstCurrentNGramEntry = 0; - int numberNGrams = 0; - int size = 0; - long position = 0; - int orderBuffer = ws.size() + 1; - NGramBuffer currentBuffer = null; - NGramBuffer nMinus1Buffer = null; - - firstCurrentNGramEntry = unigrams[firstWordID].getFirstBigramEntry(); - numberNGrams = getNumberBigramFollowers(firstWordID) + 1; - - if (numberNGrams == 1) // 1 means that there is no bigram starting with - // firstWordID - return null; - - if (orderBuffer == 2) { - size = numberNGrams - * ((loader.getMaxDepth() == orderBuffer) ? BYTES_PER_NMAXGRAM - : BYTES_PER_NGRAM) * loader.getBytesPerField(); - position = (loader.getNGramOffset(orderBuffer) + (firstCurrentNGramEntry - * ((loader.getMaxDepth() == orderBuffer) ? BYTES_PER_NMAXGRAM - : BYTES_PER_NGRAM) * loader.getBytesPerField())); - } else { // only for ws.size() >= 2 - int lastWordId = getWordID(ws.getWord(ws.size() - 1)); - nMinus1Buffer = getNGramBuffer(ws.getOldest()); - int index = nMinus1Buffer.findNGramIndex(lastWordId); - - if (index == -1) - return null; - - int firstNMinus1GramEntry = nMinus1Buffer.getFirstNGramEntry(); - firstCurrentNGramEntry = getFirstNGramEntry( - nMinus1Buffer.getNGramProbability(index), - firstNMinus1GramEntry, orderBuffer); - int firstNextNGramEntry = getFirstNGramEntry( - nMinus1Buffer.getNGramProbability(index + 1), - firstNMinus1GramEntry, orderBuffer); - numberNGrams = firstNextNGramEntry - firstCurrentNGramEntry; - - if (numberNGrams == 0) - return null; - - if (loader.getMaxDepth() != orderBuffer) - numberNGrams++; - - size = numberNGrams - * ((loader.getMaxDepth() == orderBuffer) ? BYTES_PER_NMAXGRAM - : BYTES_PER_NGRAM) * loader.getBytesPerField(); - position = loader.getNGramOffset(orderBuffer) - + (long) firstCurrentNGramEntry - * (long) ((loader.getMaxDepth() == orderBuffer) ? BYTES_PER_NMAXGRAM - : BYTES_PER_NGRAM) * loader.getBytesPerField(); - } - - try { - byte[] buffer = loader.loadBuffer(position, size); - - if (loader.getMaxDepth() == orderBuffer) { - currentBuffer = new NMaxGramBuffer(buffer, numberNGrams, - loader.getBigEndian(), is32bits(), orderBuffer, - firstCurrentNGramEntry); - } else { - currentBuffer = new NGramBuffer(buffer, numberNGrams, - loader.getBigEndian(), is32bits(), orderBuffer, - firstCurrentNGramEntry); - } - } catch (IOException ioe) { - ioe.printStackTrace(); - throw new Error("Error loading " + orderBuffer + "-Grams."); - } - - return currentBuffer; - } - - /** - * Returns the NGrams of the given word sequence - * - * @param wordSequence - * the word sequence from which to get the buffer - * @return the NGramBuffer of the word sequence - */ - private NGramBuffer getNGramBuffer(WordSequence wordSequence) { - NGramBuffer nGramBuffer = null; - int order = wordSequence.size(); - - if (order > 1) - nGramBuffer = loadedNGramBuffers[order - 1].get(wordSequence); // better - // when - // using - // containsKey - - if (nGramBuffer == null) { - nGramBuffer = loadNGramBuffer(wordSequence); - - if (nGramBuffer != null) - loadedNGramBuffers[order - 1].put(wordSequence, nGramBuffer); // optimizable - // by - // adding - // an - // 'empty' - // nGramBuffer - } - - return nGramBuffer; - } - - /** - * Returns the index of the first NGram entry of the given N-1Gram - * - * @param nMinus1Gram - * the N-1Gram which first NGram entry we're looking for - * @param firstNMinus1GramEntry - * the index of the first N-1Gram entry of the N-1Gram in - * question - * @param n - * the order of the NGram - * @return the index of the first NGram entry of the given N-1Gram - */ - private int getFirstNGramEntry(NGramProbability nMinus1Gram, - int firstNMinus1GramEntry, int n) { - int firstNGramEntry = ngramSegmentTable[n - 1][(firstNMinus1GramEntry + nMinus1Gram - .getWhichFollower()) >> loader.getLogNGramSegmentSize()] - + nMinus1Gram.getFirstNPlus1GramEntry(); - - return firstNGramEntry; - } - - /** - * Returns the unigram probability of the given unigram. - * - * @param wordSequence - * the unigram word sequence - * @return the unigram probability - */ - private float getUnigramProbability(WordSequence wordSequence) { - Word unigram = wordSequence.getWord(0); - UnigramProbability unigramProb = getUnigram(unigram); - - if (unigramProb == null) - throw new Error("Unigram not in LM: " + unigram); - - return unigramProb.getLogProbability(); - } - - /** - * Returns its UnigramProbability if this language model has the given - * unigram. - * - * @param unigram - * the unigram to find - * @return the UnigramProbability, or null if this language model does not - * have the unigram - */ - private UnigramProbability getUnigram(Word unigram) { - return unigramIDMap.get(unigram); - } - - /** - * Returns true if this language model has the given unigram. - * - * @param unigram - * the unigram to find - * @return true if this LM has this unigram, false otherwise - */ - private boolean hasUnigram(Word unigram) { - return (unigramIDMap.get(unigram) != null); - } - - /** - * Returns the ID of the given word. - * - * @param word - * the word to find the ID - * @return the ID of the word - */ - public final int getWordID(Word word) { - UnigramProbability probability = getUnigram(word); - - if (probability == null) - throw new IllegalArgumentException("No word ID: " + word); - else - return probability.getWordID(); - } - - /** - * Returns true if the language model contains the given word - * - * @param w word - * @return if word is in the language model - */ - public boolean hasWord(Word w) { - return (unigramIDMap.get(new Word(w.toString(), null, false)) != null); - } - - /** - * Gets the smear term for the given wordSequence - * - * @param wordSequence - * the word sequence - * @return the smear term associated with this word sequence - */ - public float getSmearOld(WordSequence wordSequence) { - float smearTerm = 0.0f; - - if (fullSmear) { - int length = wordSequence.size(); - - if (length > 0) { - int wordID = getWordID(wordSequence.getWord(length - 1)); - smearTerm = unigramSmearTerm[wordID]; - } - } - - if (fullSmear && logger.isLoggable(Level.FINE)) - logger.fine("SmearTerm: " + smearTerm); - - return smearTerm; - } - - int smearCount; - int smearBigramHit; - - public float getSmear(WordSequence wordSequence) { - float smearTerm = 0.0f; - - if (fullSmear) { - smearCount++; - int length = wordSequence.size(); - - if (length == 1) { - int wordID = getWordID(wordSequence.getWord(0)); - smearTerm = unigramSmearTerm[wordID]; - } else if (length >= 2) { - int size = wordSequence.size(); - int wordID1 = getWordID(wordSequence.getWord(size - 2)); - int wordID2 = getWordID(wordSequence.getWord(size - 1)); - Float st = getSmearTerm(wordID1, wordID2); - - if (st == null) - smearTerm = unigramSmearTerm[wordID2]; - else { - smearTerm = st; - smearBigramHit++; - } - } - - if (smearCount % 100000 == 0) - System.out.println("Smear hit: " + smearBigramHit + " tot: " - + smearCount); - } - - if (fullSmear && logger.isLoggable(Level.FINE)) - logger.fine("SmearTerm: " + smearTerm); - - return smearTerm; - } - - /** - * Returns the number of bigram followers of a word. - * - * @param wordID - * the ID of the word - * @return the number of bigram followers - */ - private int getNumberBigramFollowers(int wordID) { - if (wordID == unigrams.length - 1) - return 0; - else - return unigrams[wordID + 1].getFirstBigramEntry() - - unigrams[wordID].getFirstBigramEntry(); - } - - /** - * Returns the maximum depth of the language model - * - * @return the maximum depth of the language model - */ - public int getMaxDepth() { - return maxDepth; - } - - /** - * Returns the set of words in the language model. The set is unmodifiable. - * - * @return the unmodifiable set of words - */ - public Set getVocabulary() { - Set vocabulary = new HashSet(Arrays.asList(loader - .getWords())); - return Collections.unmodifiableSet(vocabulary); - } - - /** - * Returns the number of times when a NGram is queried, but there is no such - * NGram in the LM (in which case it uses the backoff probabilities). - * - * @return the number of NGram misses - */ - public int getNGramMisses() { - return ngramMisses; - } - - /** - * Returns the number of NGram hits. - * - * @return the number of NGram hits - */ - public int getNGramHits() { - return ngramHits; - } - - /** - * Returns the bigrams of the given word - * - * @param firstWordID - * the ID of the word - * - * @return the bigrams of the word - */ - private NGramBuffer getBigramBuffer(int firstWordID) { - Word[] wd = new Word[1]; - wd[0] = dictionary.getWord(loader.getWords()[firstWordID]); - WordSequence ws = new WordSequence(wd); - - return loadNGramBuffer(ws); - } - - /** - * Loads into a buffer all the trigram followers of the given bigram. - * - * @param firstWordID - * the ID of the first word - * @param secondWordID - * the ID of the second word - * - * @return a TrigramBuffer of all the trigram followers of the given two - * words - */ - private NGramBuffer loadTrigramBuffer(int firstWordID, int secondWordID) { - Word[] wd = new Word[2]; - wd[0] = dictionary.getWord(loader.getWords()[firstWordID]); - wd[1] = dictionary.getWord(loader.getWords()[secondWordID]); - WordSequence ws = new WordSequence(wd); - - return loadNGramBuffer(ws); - } - - private void buildSmearInfo() throws IOException { - double S0 = 0; - double R0 = 0; - - bigramSmearMap = new HashMap(); - - double[] ugNumerator = new double[unigrams.length]; - double[] ugDenominator = new double[unigrams.length]; - double[] ugAvgLogProb = new double[unigrams.length]; - - unigramSmearTerm = new float[unigrams.length]; - - for (UnigramProbability unigram : unigrams) { - float logp = unigram.getLogProbability(); - double p = logMath.logToLinear(logp); - S0 += p * logp; - R0 += p * logp * logp; - } - - System.out.println("R0 S0 " + R0 + ' ' + S0); - - for (int i = 0; i < loadedBigramBuffers.length; i++) { - NGramBuffer bigram = getBigramBuffer(i); - - if (bigram == null) { - unigramSmearTerm[i] = LogMath.LOG_ONE; - continue; - } - - ugNumerator[i] = 0.0; - ugDenominator[i] = 0.0; - ugAvgLogProb[i] = 0.0; - - float logugbackoff = unigrams[i].getLogBackoff(); - double ugbackoff = logMath.logToLinear(logugbackoff); - - for (int j = 0; j < bigram.getNumberNGrams(); j++) { - int wordID = bigram.getWordID(j); - NGramProbability bgProb = bigram.getNGramProbability(j); - - float logugprob = unigrams[wordID].getLogProbability(); - float logbgprob = ngramProbTable[1][bgProb.getProbabilityID()]; - - double ugprob = logMath.logToLinear(logugprob); - double bgprob = logMath.logToLinear(logbgprob); - - double backoffbgprob = ugbackoff * ugprob; - double logbackoffbgprob = logMath.linearToLog(backoffbgprob); - - ugNumerator[i] += (bgprob * logbgprob - backoffbgprob - * logbackoffbgprob) - * logugprob; - - ugDenominator[i] += (bgprob - backoffbgprob) * logugprob; - // dumpProbs(ugNumerator, ugDenominator, i, j, logugprob, - // logbgprob, ugprob, bgprob, backoffbgprob, - // logbackoffbgprob); - } - - ugNumerator[i] += ugbackoff * (logugbackoff * S0 + R0); - ugAvgLogProb[i] = ugDenominator[i] + ugbackoff * S0; - ugDenominator[i] += ugbackoff * R0; - - // System.out.println("n/d " + ugNumerator[i] + " " + - // ugDenominator[i]); - - unigramSmearTerm[i] = (float) (ugNumerator[i] / ugDenominator[i]); - // / unigramSmearTerm[i] = - // logMath.linearToLog(ugNumerator[i] / ugDenominator[i]); - // System.out.println("ugs " + unigramSmearTerm[i]); - } - - for (int i = 0; i < loadedBigramBuffers.length; i++) { - System.out.println("Processed " + i + " of " - + loadedBigramBuffers.length); - NGramBuffer bigram = getBigramBuffer(i); - - if (bigram == null) - continue; - - for (int j = 0; j < bigram.getNumberNGrams(); j++) { - float smearTerm; - NGramProbability bgProb = bigram.getNGramProbability(j); - float logbgbackoff = ngramBackoffTable[2][bgProb.getBackoffID()]; - double bgbackoff = logMath.logToLinear(logbgbackoff); - int k = bigram.getWordID(j); - NGramBuffer trigram = loadTrigramBuffer(i, k); - - if (trigram == null) - smearTerm = unigramSmearTerm[k]; - else { - double bg_numerator = 0; - double bg_denominator = 0; - for (int l = 0; l < trigram.getNumberNGrams(); l++) { - int m = trigram.getWordID(l); - float logtgprob = ngramProbTable[2][trigram - .getProbabilityID(l)]; - double tgprob = logMath.logToLinear(logtgprob); - float logbgprob = getBigramProb(k, m); - double bgprob = logMath.logToLinear(logbgprob); - float logugprob = unigrams[m].getLogProbability(); - double backofftgprob = bgbackoff * bgprob; - double logbackofftgprob = logMath - .linearToLog(backofftgprob); - - bg_numerator += (tgprob * logtgprob - backofftgprob - * logbackofftgprob) - * logugprob; - - bg_denominator += (tgprob - backofftgprob) * logugprob - * logugprob; - } - - bg_numerator += bgbackoff - * (logbgbackoff * ugAvgLogProb[k] - ugNumerator[k]); - bg_denominator += bgbackoff * ugDenominator[k]; - // bigram.ugsmear = bg_numerator / bg_denominator; - smearTerm = (float) (bg_numerator / bg_denominator); - smearTermCount++; - } - - putSmearTerm(i, k, smearTerm); - } - } - - System.out.println("Smear count is " + smearTermCount); - } - - @SuppressWarnings("unused") - private void dumpProbs(double[] ugNumerator, double[] ugDenominator, int i, - int j, float logugprob, float logbgprob, double ugprob, - double bgprob, double backoffbgprob, double logbackoffbgprob) { - - System.out - .println("ubo " + ugprob + ' ' + bgprob + ' ' + backoffbgprob); - System.out.println("logubo " + logugprob + ' ' + logbgprob + ' ' - + logbackoffbgprob); - System.out.println("n/d " + j + ' ' + ugNumerator[i] + ' ' - + ugDenominator[i]); - - System.out.print(ugprob + " " + bgprob + ' ' + backoffbgprob); - System.out.print(" " + logugprob + ' ' + logbgprob + ' ' - + logbackoffbgprob); - System.out.println(" " + ugNumerator[i] + ' ' + ugDenominator[i]); - } - - /** - * Writes the smear info to the given file - * - * @param filename - * the file to write the smear info to - * @throws IOException - * if an error occurs on write - */ - @SuppressWarnings("unused") - private void writeSmearInfo(String filename) throws IOException { - DataOutputStream out = new DataOutputStream(new FileOutputStream( - filename)); - out.writeInt(SMEAR_MAGIC); - System.out.println("writing " + unigrams.length); - out.writeInt(unigrams.length); - - for (int i = 0; i < unigrams.length; i++) - out.writeFloat(unigramSmearTerm[i]); - - for (int i = 0; i < unigrams.length; i++) { - System.out.println("Writing " + i + " of " + unigrams.length); - NGramBuffer bigram = getBigramBuffer(i); - - if (bigram == null) { - out.writeInt(0); - continue; - } - - out.writeInt(bigram.getNumberNGrams()); - - for (int j = 0; j < bigram.getNumberNGrams(); j++) { - int k = bigram.getWordID(j); - Float smearTerm = getSmearTerm(i, k); - out.writeInt(k); - out.writeFloat(smearTerm.floatValue()); - } - } - - out.close(); - } - - /** - * Reads the smear info from the given file - * - * @param filename - * where to read the smear info from - * @throws IOException - * if an inconsistent file is found or on any general I/O error - */ - private void readSmearInfo(String filename) throws IOException { - DataInputStream in = new DataInputStream(new FileInputStream(filename)); - - if (in.readInt() != SMEAR_MAGIC) { - in.close(); - throw new IOException("Bad smear format for " + filename); - } - - if (in.readInt() != unigrams.length) { - in.close(); - throw new IOException("Bad unigram length in " + filename); - } - - bigramSmearMap = new HashMap(); - unigramSmearTerm = new float[unigrams.length]; - System.out.println("Reading " + unigrams.length); - - for (int i = 0; i < unigrams.length; i++) - unigramSmearTerm[i] = in.readFloat(); - - for (int i = 0; i < unigrams.length; i++) { - System.out.println("Processed " + i + " of " - + loadedBigramBuffers.length); - int numBigrams = in.readInt(); - NGramBuffer bigram = getBigramBuffer(i); - - if (bigram.getNumberNGrams() != numBigrams) { - in.close(); - throw new IOException("Bad ngrams for unigram " + i + " Found " - + numBigrams + " expected " + bigram.getNumberNGrams()); - } - - for (int j = 0; j < numBigrams; j++) { - int k = bigram.getWordID(j); - putSmearTerm(i, k, in.readFloat()); - } - } - - in.close(); - } - - /** - * Puts the smear term for the two words - * - * @param word1 - * the first word - * @param word2 - * the second word - * @param smearTerm - * the smear term - */ - private void putSmearTerm(int word1, int word2, float smearTerm) { - long bigramID = (((long) word1) << 32) | word2; - bigramSmearMap.put(bigramID, smearTerm); - } - - /** - * Retrieves the smear term for the two words - * - * @param word1 - * the first word - * @param word2 - * the second word - * @return the smear term - */ - private Float getSmearTerm(int word1, int word2) { - long bigramID = (((long) word1) << 32) | word2; - return bigramSmearMap.get(bigramID); - } - - /** - * Retrieves the bigram probability for the two given words - * - * @param word1 - * the first word of the bigram - * @param word2 - * the second word of the bigram - * @return the log probability - */ - private float getBigramProb(int word1, int word2) { - NGramBuffer bigram = getBigramBuffer(word1); - NGramProbability bigramProbability = bigram.findNGram(word2); - return ngramProbTable[1][bigramProbability.getProbabilityID()]; - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/LargeTrigramModel.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/LargeTrigramModel.java deleted file mode 100755 index dd700c8e..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/LargeTrigramModel.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright 2010 LIUM, based on Carnegie Mellon University previous work. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * Portions Copyright 2010 LIUM, University of Le Mans, France - -> Yannick Esteve, Anthony Rousseau - - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist.language.ngram.large; - -import java.net.URL; - -import edu.cmu.sphinx.linguist.dictionary.Dictionary; -import edu.cmu.sphinx.linguist.language.ngram.LanguageModel; -import edu.cmu.sphinx.util.props.*; - -/** - * A wrapper for LargeNGramModel base on the old LargeTrigramModel class. - * - * @author Anthony Rousseau, LIUM - */ -public class LargeTrigramModel extends LargeNGramModel { - - /** The property that defines that maximum number of trigrams to be cached */ - @S4Integer(defaultValue = 100000) - public static final String PROP_TRIGRAM_CACHE_SIZE = "trigramCacheSize"; - - /** - * @param format format of the model - * @param urlLocation Location of the model - * @param ngramLogFile log file to use - * @param maxTrigramCacheSize max cache size - * @param maxBigramCacheSize max cache size - * @param clearCacheAfterUtterance clear cache after each utterance - * @param maxDepth ngram order - * @param dictionary dictionary - * @param applyLanguageWeightAndWip apply lw during load - * @param languageWeight lw - * @param wip word insertion probability - * @param unigramWeight unigram weight - * @param fullSmear build full smear - */ - public LargeTrigramModel(String format, URL urlLocation, - String ngramLogFile, int maxTrigramCacheSize, - int maxBigramCacheSize, boolean clearCacheAfterUtterance, - int maxDepth, Dictionary dictionary, - boolean applyLanguageWeightAndWip, float languageWeight, - double wip, float unigramWeight, boolean fullSmear) { - // Inline conditional statement to prevent maxDepth being > to 3 - // We are in a Trigram wrapper, after all - super(format, urlLocation, ngramLogFile, maxTrigramCacheSize, - clearCacheAfterUtterance, (maxDepth > 3 ? 3 - : maxDepth), dictionary, - applyLanguageWeightAndWip, languageWeight, wip, unigramWeight, - fullSmear); - } - - /** - * - */ - public LargeTrigramModel() { - } - - /* - * (non-Javadoc) - * - * @see - * edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util - * .props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - logger = ps.getLogger(); - location = ConfigurationManagerUtils.getResource(PROP_LOCATION, ps); - ngramLogFile = ps.getString(PROP_QUERY_LOG_FILE); - clearCacheAfterUtterance = ps - .getBoolean(PROP_CLEAR_CACHES_AFTER_UTTERANCE); - maxDepth = ps.getInt(LanguageModel.PROP_MAX_DEPTH); - ngramCacheSize = ps.getInt(PROP_TRIGRAM_CACHE_SIZE); - dictionary = (Dictionary) ps.getComponent(PROP_DICTIONARY); - applyLanguageWeightAndWip = ps - .getBoolean(PROP_APPLY_LANGUAGE_WEIGHT_AND_WIP); - languageWeight = ps.getFloat(PROP_LANGUAGE_WEIGHT); - wip = ps.getDouble(PROP_WORD_INSERTION_PROBABILITY); - unigramWeight = ps.getFloat(PROP_UNIGRAM_WEIGHT); - fullSmear = ps.getBoolean(PROP_FULL_SMEAR); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/NGramBuffer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/NGramBuffer.java deleted file mode 100755 index bad04f64..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/NGramBuffer.java +++ /dev/null @@ -1,333 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * Portions Copyright 2010 LIUM, University of Le Mans, France - -> Yannick Esteve, Anthony Rousseau - - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.language.ngram.large; - - -/** - * Implements a buffer that contains NGrams. It assumes that the first two bytes of each n-gram entry is the ID of the - * n-gram. - */ - -class NGramBuffer { - - private final byte[] buffer; - private final int numberNGrams; - private int position; - private final boolean bigEndian; - private final boolean is32bits; - private final int n; - private boolean used; - private int firstNGramEntry; - - /** - * Constructs a NGramBuffer object with the given byte[]. - * - * @param buffer the byte[] with NGrams - * @param numberNGrams the number of N-gram - * @param bigEndian the buffer's endianness - * @param is32bits whether the buffer is 16 or 32 bits - * @param n the buffer's order - * @param firstNGramEntry the first NGram Entry - */ - public NGramBuffer(byte[] buffer, int numberNGrams, boolean bigEndian, boolean is32bits, int n, int firstNGramEntry) { - this.buffer = buffer; - this.numberNGrams = numberNGrams; - this.bigEndian = bigEndian; - this.is32bits = is32bits; - this.position = 0; - this.n = n; - this.firstNGramEntry = firstNGramEntry; - } - - - /** - * Returns the byte[] of n-grams. - * - * @return the byte[] of n-grams - */ - public byte[] getBuffer() { - return buffer; - } - - /** - * Returns the firstNGramEntry - * @return the firstNGramEntry of the buffer - */ - - public int getFirstNGramEntry() { - return firstNGramEntry; - } - - - /** - * Returns the size of the buffer in bytes. - * - * @return the size of the buffer in bytes - */ - public int getSize() { - return buffer.length; - } - - - /** - * Returns the number of n-grams in this buffer. - * - * @return the number of n-grams in this buffer - */ - public int getNumberNGrams() { - return numberNGrams; - } - - - /** - * Returns the position of the buffer. - * - * @return the position of the buffer - */ - protected int getPosition() { - return position; - } - - - protected int getN() { - return n; - } - - - /** - * Sets the position of the buffer. - * - * @param position new buffer position - */ - protected void setPosition(int position) { - this.position = position; - } - - - /** - * Returns the word ID of the nth follower, assuming that the ID is the first two bytes of the NGram entry. - * - * @param nthFollower starts from 0 to (numberFollowers - 1). - * @return the word ID - */ - public final int getWordID(int nthFollower) { - int nthPosition = nthFollower * (buffer.length / numberNGrams); - setPosition(nthPosition); - return readBytesAsInt(); - } - - - /** - * Returns true if the NGramBuffer is big-endian. - * - * @return true if the NGramBuffer is big-endian, false if little-endian - */ - public final boolean isBigEndian() { - return bigEndian; - } - - - /** - * Returns true if the NGramBuffer is 32 bits. - * - * @return true if the NGramBuffer is 32 bits, false if 16 bits - */ - public final boolean is32bits() { - return is32bits; - } - - /** - * Reads the next two bytes from the buffer's current position as an integer. - * - * @return the next two bytes as an integer - */ - public final int readBytesAsInt() { - if (is32bits) { - if (bigEndian) { - int value = (0x000000ff & buffer[position++]); - value <<= 8; - value |= (0x000000ff & buffer[position++]); - value <<= 8; - value |= (0x000000ff & buffer[position++]); - value <<= 8; - value |= (0x000000ff & buffer[position++]); - return value; - } else { - int value = (0x000000ff & buffer[position+3]); - value <<= 8; - value |= (0x000000ff & buffer[position+2]); - value <<= 8; - value |= (0x000000ff & buffer[position+1]); - value <<= 8; - value |= (0x000000ff & buffer[position]); - position += 4; - return value; - } - } - else { - if (bigEndian) { - int value = (0x000000ff & buffer[position++]); - value <<= 8; - value |= (0x000000ff & buffer[position++]); - return value; - } else { - int value = (0x000000ff & buffer[position + 1]); - value <<= 8; - value |= (0x000000ff & buffer[position]); - position += 2; - return value; - } - } - } - - - /** - * Returns true if this buffer was used in the last utterance. - * - * @return true if this buffer was used in the last utterance - */ - public boolean getUsed() { - return used; - } - - - /** - * Sets whether this buffer was used in the last utterance - * - * @param used true if this buffer was used in the last utterance, false otherwise - */ - public void setUsed(boolean used) { - this.used = used; - } - - - /** - * Finds the NGram probability ID for the given nth word in a NGram. - * - * @param nthWordID the ID of the nth word - * @return the NGram Probability ID of the given nth word - */ - public int findProbabilityID(int nthWordID) { - int mid, start = 0, end = getNumberNGrams(); - - int nGram = -1; - - while ((end - start) > 0) { - mid = (start + end) / 2; - int midWordID = getWordID(mid); - if (midWordID < nthWordID) { - start = mid + 1; - } else if (midWordID > nthWordID) { - end = mid; - } else { - nGram = getProbabilityID(mid); - break; - } - } - return nGram; - } - - - /** - * Returns the NGramProbability of the nth follower. - * - * @param nthFollower which follower - * @return the NGramProbability of the nth follower - */ - public int getProbabilityID(int nthFollower) { - int nthPosition = 0; - - nthPosition = nthFollower * LargeNGramModel.BYTES_PER_NGRAM * ((is32bits) ? 4 : 2); - setPosition(nthPosition + ((is32bits) ? 4 : 2)); // to skip the word ID - - return readBytesAsInt(); - } - - - /** - * Finds the NGram probabilities for the given nth word in a NGram. - * - * @param nthWordID the ID of the nth word - * @return the NGramProbability of the given nth word - */ - public NGramProbability findNGram(int nthWordID) { - - int mid, start = 0, end = getNumberNGrams() - 1; - NGramProbability ngram = null; - - while ((end - start) > 0) { - mid = (start + end) / 2; - int midWordID = getWordID(mid); - if (midWordID < nthWordID) { - start = mid + 1; - } else if (midWordID > nthWordID) { - end = mid; - } else { - ngram = getNGramProbability(mid); - break; - } - } - - return ngram; - } - - /** - * Finds the NGram index for the given nth word in a NGram - * - * @param nthWordID the ID of the nth word - * @return the NGramIndex of the given nth word - */ - public int findNGramIndex(int nthWordID) { - - int mid = -1, start = 0, end = getNumberNGrams() - 1; - - while ((end - start) > 0) { - mid = (start + end) / 2; - int midWordID = getWordID(mid); - if (midWordID < nthWordID) { - start = mid + 1; - } else if (midWordID > nthWordID) { - end = mid; - } else { - break; - } - } - - return mid; - } - - - /** - * Returns the NGramProbability of the nth follower. - * - * @param nthFollower which follower - * @return the NGramProbability of the nth follower - */ - public NGramProbability getNGramProbability(int nthFollower) { - int nthPosition = 0, wordID = 0, probID = 0, backoffID = 0, firstNGram = 0; - - nthPosition = nthFollower * LargeNGramModel.BYTES_PER_NGRAM * ((is32bits) ? 4 : 2); - - setPosition(nthPosition); - - wordID = readBytesAsInt(); - probID = readBytesAsInt(); - backoffID = readBytesAsInt(); - firstNGram = readBytesAsInt(); - - return (new NGramProbability(nthFollower, wordID, probID, backoffID, firstNGram)); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/NGramProbability.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/NGramProbability.java deleted file mode 100755 index 0c5342c4..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/NGramProbability.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - - * Portions Copyright 2010 LIUM, University of Le Mans, France - -> Yannick Esteve, Anthony Rousseau - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.language.ngram.large; - -/** Represents a word ID (Nth word of a N-gram), and a N-gram probability ID. */ -class NGramProbability { - - private final int which; - private final int wordID; - private final int probabilityID; - private final int backoffID; - private final int firstNPlus1GramEntry; - - /** - * Constructs a NGramProbability - * - * @param which - * which follower of the first word is this NGram - * @param wordID - * the ID of the Nth word in a NGram - * @param probabilityID - * the index into the probability array - * @param backoffID - * the index into the backoff probability array - * @param firstNPlus1GramEntry - * the first N+1Gram entry - */ - public NGramProbability(int which, int wordID, int probabilityID, - int backoffID, int firstNPlus1GramEntry) { - this.which = which; - this.wordID = wordID; - this.probabilityID = probabilityID; - this.backoffID = backoffID; - this.firstNPlus1GramEntry = firstNPlus1GramEntry; - } - - /** - * Returns which follower of the first word is this NGram - * - * @return which follower of the first word is this NGram - */ - public int getWhichFollower() { - return which; - } - - /** - * Returns the Nth word ID of this NGram - * - * @return the Nth word ID - */ - public int getWordID() { - return wordID; - } - - /** - * Returns the NGram probability ID. - * - * @return the NGram probability ID - */ - public int getProbabilityID() { - return probabilityID; - } - - /** - * Returns the backoff weight ID. - * - * @return the backoff weight ID - */ - public int getBackoffID() { - return backoffID; - } - - /** - * Returns the index of the first N+1Gram entry. - * - * @return the index of the first N+1Gram entry - */ - public int getFirstNPlus1GramEntry() { - return firstNPlus1GramEntry; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/NMaxGramBuffer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/NMaxGramBuffer.java deleted file mode 100755 index c2dd136d..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/NMaxGramBuffer.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * Portions Copyright 2010 LIUM, University of Le Mans, France - -> Yannick Esteve, Anthony Rousseau - - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.language.ngram.large; - - -/** - * Implements a buffer that contains NGrams of model's MAX order. - * It assumes that the first two bytes of each n-gram entry is the - * ID of the n-gram. - */ - -class NMaxGramBuffer extends NGramBuffer { - - /** - * Constructs a NMaxGramBuffer object with the given byte[]. - * - * @param buffer the byte[] with NGrams - * @param numberNGrams the number of N-gram - * @param bigEndian the buffer's endianness - * @param is32bits whether the buffer is 16 or 32 bits - * @param n the buffer's order - * @param firstCurrentNGramEntry the first Current NGram Entry - */ - public NMaxGramBuffer(byte[] buffer, int numberNGrams, boolean bigEndian, boolean is32bits, int n, int firstCurrentNGramEntry) { - super(buffer, numberNGrams, bigEndian, is32bits, n, firstCurrentNGramEntry); - } - - - /** - * Returns the NGramProbability of the nth follower. - * - * @param nthFollower which follower - * @return the NGramProbability of the nth follower - */ - @Override - public int getProbabilityID(int nthFollower) { - int nthPosition = 0; - - nthPosition = nthFollower * LargeNGramModel.BYTES_PER_NMAXGRAM * ((is32bits()) ? 4 : 2); - setPosition(nthPosition + ((is32bits()) ? 4 : 2)); // to skip the word ID - - return readBytesAsInt(); - } - - - /** - * Finds the NGram probabilities for the given nth word in a NGram. - * - * @param nthWordID the ID of the nth word - * @return the NGramProbability of the given nth word - */ - @Override - public NGramProbability findNGram(int nthWordID) { - - int mid, start = 0, end = getNumberNGrams(); - NGramProbability ngram = null; - - while ((end - start) > 0) { - mid = (start + end) / 2; - int midWordID = getWordID(mid); - if (midWordID < nthWordID) { - start = mid + 1; - } else if (midWordID > nthWordID) { - end = mid; - } else { - ngram = getNGramProbability(mid); - break; - } - } - - return ngram; - } - - - /** - * Returns the NGramProbability of the nth follower. - * - * @param nthFollower which follower - * @return the NGramProbability of the nth follower - */ - @Override - public NGramProbability getNGramProbability(int nthFollower) { - int nthPosition = 0, wordID = 0, probID = 0, backoffID = 0, firstNGram = 0; - - nthPosition = nthFollower * LargeNGramModel.BYTES_PER_NMAXGRAM * ((is32bits()) ? 4 : 2); - - setPosition(nthPosition); - - wordID = readBytesAsInt(); - probID = readBytesAsInt(); - - return (new NGramProbability(nthFollower, wordID, probID, backoffID, firstNGram)); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/UnigramProbability.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/UnigramProbability.java deleted file mode 100755 index a2742c93..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/language/ngram/large/UnigramProbability.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * Portions Copyright 2010 LIUM, University of Le Mans, France - -> Yannick Esteve, Anthony Rousseau - - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.language.ngram.large; - - -/** Represents a probability, a backoff probability, and the location of the first bigram entry. */ -class UnigramProbability { - - private final int wordID; - private float logProbability; - private float logBackoff; - private final int firstBigramEntry; - - - /** - * Constructs a UnigramProbability - * - * @param wordID the id of the word - * @param logProbability the probability - * @param logBackoff the backoff probability - * @param firstBigramEntry the first bigram entry - */ - public UnigramProbability(int wordID, float logProbability, - float logBackoff, int firstBigramEntry) { - this.wordID = wordID; - this.logProbability = logProbability; - this.logBackoff = logBackoff; - this.firstBigramEntry = firstBigramEntry; - } - - - /** - * Returns a string representation of this object - * - * @return the string form of this object - */ - @Override - public String toString() { - return "Prob: " + logProbability + ' ' + logBackoff; - } - - - /** - * Returns the word ID of this unigram - * - * @return the word ID of this unigram - */ - public int getWordID() { - return wordID; - } - - - /** - * Returns the log probability of this unigram. - * - * @return the log probability of this unigram - */ - public float getLogProbability() { - return logProbability; - } - - - /** - * Returns the log backoff weight of this unigram - * - * @return the log backoff weight of this unigram - */ - public float getLogBackoff() { - return logBackoff; - } - - - /** - * Returns the index of the first bigram entry of this unigram. - * - * @return the index of the first bigram entry of this unigram - */ - public int getFirstBigramEntry() { - return firstBigramEntry; - } - - - /** - * Sets the log probability of this unigram - * - * @param logProbability the new log probability of this unigram - */ - public void setLogProbability(float logProbability) { - this.logProbability = logProbability; - } - - - /** - * Sets the log backoff weight. - * - * @param logBackoff the new log backoff weight - */ - public void setLogBackoff(float logBackoff) { - this.logBackoff = logBackoff; - } -} - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/lextree/HMMTree.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/lextree/HMMTree.java deleted file mode 100755 index 4edf7498..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/lextree/HMMTree.java +++ /dev/null @@ -1,1250 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.lextree; - -import edu.cmu.sphinx.linguist.WordSequence; -import edu.cmu.sphinx.linguist.acoustic.HMM; -import edu.cmu.sphinx.linguist.acoustic.HMMPool; -import edu.cmu.sphinx.linguist.acoustic.HMMPosition; -import edu.cmu.sphinx.linguist.acoustic.Unit; -import edu.cmu.sphinx.linguist.dictionary.Dictionary; -import edu.cmu.sphinx.linguist.dictionary.Pronunciation; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.linguist.language.ngram.LanguageModel; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.Utilities; - -import java.util.*; -import java.util.logging.Logger; - - -/** Represents a node in the HMM Tree */ - -// For large vocabularies we may create millions of these objects, -// therefore they are extremely space sensitive. So we want to make -// these objects as small as possible. The requirements for these -// objects when building the tree of nodes are very different from once -// we have built it. When building, we need to easily add successor -// nodes and quickly identify duplicate children nodes. After the tree -// is built we just need to quickly identify successors. We want the -// flexibility of a map to manage successors at startup, but we don't -// want the space penalty (at least 5 32 bit fields per map), instead -// we'd like an array. To support this dual mode, we manage the -// successors in an Object which can either be a Map or a List -// depending upon whether the node has been frozen or not. - -class Node { - - private static int nodeCount; - private static int successorCount; - - /** - * This can be either Map during tree construction or Array after - * tree freeze. Conversion to array helps to save memory. - */ - private Object successors; - private float logUnigramProbability; - - - /** - * Creates a node - * - * @param probability the unigram probability for the node - */ - Node(float probability) { - logUnigramProbability = probability; - nodeCount++; -// if ((nodeCount % 10000) == 0) { -// System.out.println("NC " + nodeCount); -// } - } - - - /** - * Returns the unigram probability - * - * @return the unigram probability - */ - public float getUnigramProbability() { - return logUnigramProbability; - } - - - /** - * Sets the unigram probability - * - * @param probability the unigram probability - */ - public void setUnigramProbability(float probability) { - logUnigramProbability = probability; - } - - - /** - * Given an object get the set of successors for this object - * - * @param key the object key - * @return the node containing the successors - */ - private Node getSuccessor(Object key) { - Map successors = getSuccessorMap(); - return successors.get(key); - } - - - /** - * Add the child to the set of successors - * - * @param key the object key - * @param child the child to add - */ - void putSuccessor(Object key, Node child) { - Map successors = getSuccessorMap(); - successors.put(key, child); - } - - - /** - * Gets the successor map for this node - * - * @return the successor map - */ - @SuppressWarnings({"unchecked"}) - public Map getSuccessorMap() { - if (successors == null) { - successors = new HashMap(4); - } - - assert successors instanceof Map; - return (Map) successors; - } - - - /** Freeze the node. Convert the successor map into an array list */ - void freeze() { - if (successors instanceof Map) { - Map map = getSuccessorMap(); - successors = map.values().toArray(new Node[map.size()]); - for (Node node : map.values()) { - node.freeze(); - } - successorCount += map.size(); - } - } - - - static void dumpNodeInfo() { - System.out.println("Nodes: " + nodeCount + " successors " + - successorCount + " avg " + (successorCount / nodeCount)); - } - - - /** - * Adds a child node holding an hmm to the successor. If a node similar to the child has already been added, we use - * the previously added node, otherwise we add this. Also, we record the base unit of the child in the set of right - * context - * - * @param hmm the hmm to add - * @return the node that holds the hmm (new or old) - */ - Node addSuccessor(HMM hmm, float probability) { - Node child = null; - Node matchingChild = getSuccessor(hmm); - if (matchingChild == null) { - child = new HMMNode(hmm, probability); - putSuccessor(hmm, child); - } else { - if (matchingChild.getUnigramProbability() < probability) { - matchingChild.setUnigramProbability(probability); - } - child = matchingChild; - } - return child; - } - - - /** - * Adds a child node holding a pronunciation to the successor. If a node similar to the child has already been - * added, we use the previously added node, otherwise we add this. Also, we record the base unit of the child in the - * set of right context - * - * @param pronunciation the pronunciation to add - * @param wordNodeMap - * @return the node that holds the pronunciation (new or old) - */ - WordNode addSuccessor(Pronunciation pronunciation, float probability, Map wordNodeMap) { - WordNode child = null; - WordNode matchingChild = (WordNode) getSuccessor(pronunciation); - if (matchingChild == null) { - child = wordNodeMap.get(pronunciation); - if (child == null) { - child = new WordNode(pronunciation, probability); - wordNodeMap.put(pronunciation, child); - } - putSuccessor(pronunciation, child); - } else { - if (matchingChild.getUnigramProbability() < probability) { - matchingChild.setUnigramProbability(probability); - } - child = matchingChild; - } - return child; - } - - - void addSuccessor(WordNode wordNode) { - putSuccessor(wordNode, wordNode); - } - - - /** - * Adds an EndNode to the set of successors for this node If a node similar to the child has already been added, we - * use the previously added node, otherwise we add this. - * - * @param child the endNode to add - * @param probability probability for this transition - * @return the node that holds the endNode (new or old) - */ - EndNode addSuccessor(EndNode child, float probability) { - Unit baseUnit = child.getBaseUnit(); - EndNode matchingChild = (EndNode) getSuccessor(baseUnit); - if (matchingChild == null) { - putSuccessor(baseUnit, child); - } else { - if (matchingChild.getUnigramProbability() < probability) { - matchingChild.setUnigramProbability(probability); - } - child = matchingChild; - } - return child; - } - - - /** - * Adds a child node to the successor. If a node similar to the child has already been added, we use the previously - * added node, otherwise we add this. Also, we record the base unit of the child in the set of right context - * - * @param child the child to add - * @return the node (may be different than child if there was already a node attached holding the hmm held by - * child) - */ - UnitNode addSuccessor(UnitNode child) { - UnitNode matchingChild = (UnitNode) getSuccessor(child.getKey()); - if (matchingChild == null) { - putSuccessor(child.getKey(), child); - } else { - child = matchingChild; - } - - return child; - } - - - /** - * Returns the successors for this node - * - * @return the set of successor nodes - */ - Node[] getSuccessors() { - if (successors instanceof Map) { - freeze(); - } - return (Node[])successors; - } - - - /** - * Returns the string representation for this object - * - * @return the string representation of the object - */ - @Override - public String toString() { - return "Node "; - } -} - - -/** A node representing a word in the HMM tree */ -class WordNode extends Node { - - private final Pronunciation pronunciation; - private final boolean isFinal; - - /** - * Creates a word node - * - * @param pronunciation the pronunciation to wrap in this node - * @param probability the word unigram probability - */ - WordNode(Pronunciation pronunciation, float probability) { - super(probability); - this.pronunciation = pronunciation; - this.isFinal = pronunciation.getWord().isSentenceEndWord(); - } - - - /** - * Gets the word associated with this node - * - * @return the word - */ - Word getWord() { - return pronunciation.getWord(); - } - - - /** - * Gets the pronunciation associated with this node - * - * @return the pronunciation - */ - Pronunciation getPronunciation() { - return pronunciation; - } - - - /** - * Gets the last unit for this word - * - * @return the last unit - */ - Unit getLastUnit() { - Unit[] units = pronunciation.getUnits(); - return units[units.length - 1]; - } - - - /** - * Returns the successors for this node - * - * @return the set of successor nodes - */ - @Override - Node[] getSuccessors() { - throw new Error("Not supported"); - } - - - /** - * Returns a string representation for this object - * - * @return a string representation - */ - @Override - public String toString() { - return "WordNode " + pronunciation + " p " + - getUnigramProbability(); - } - - - public boolean isFinal() { - return isFinal; - } -} - - -/** - * A class that represents the initial word in the search space. It is treated specially because we need to keep track - * of the context as well. The context is embodied in the parent node - */ -class InitialWordNode extends WordNode { - - final HMMNode parent; - - - /** - * Creates an InitialWordNode - * - * @param pronunciation the pronunciation - * @param parent the parent node - */ - InitialWordNode(Pronunciation pronunciation, HMMNode parent) { - super(pronunciation, LogMath.LOG_ONE); - this.parent = parent; - } - - - /** - * Gets the parent for this word node - * - * @return the parent - */ - HMMNode getParent() { - return parent; - } - -} - - -abstract class UnitNode extends Node { - - public final static int SIMPLE_UNIT = 1; - public final static int WORD_BEGINNING_UNIT = 2; - public final static int SILENCE_UNIT = 3; - public final static int FILLER_UNIT = 4; - - private int type; - - - /** - * Creates the UnitNode - * - * @param probablilty the probability for the node - */ - UnitNode(float probablilty) { - super(probablilty); - } - - - /** - * Returns the base unit for this hmm node - * - * @return the base unit - */ - abstract Unit getBaseUnit(); - - - abstract Object getKey(); - - - abstract HMMPosition getPosition(); - - - /** - * Gets the unit type (one of SIMPLE_UNIT, WORD_BEGINNING_UNIT, SIMPLE_UNIT or FILLER_UNIT - * - * @return the unit type - */ - int getType() { - return type; - } - - - /** - * Sets the unit type - * - * @param type the unit type - */ - void setType(int type) { - this.type = type; - } - -} - -/** A node that represents an HMM in the hmm tree */ - -class HMMNode extends UnitNode { - - private final HMM hmm; - - // There can potentially be a large number of nodes (millions), - // therefore it is important to conserve space as much as - // possible. While building the HMMNodes, we keep right contexts - // in a set to allow easy pruning of duplicates. Once the tree is - // entirely built, we no longer need to manage the right contexts - // as a set, a simple array will do. The freeze method converts - // the set to the array of units. This rcSet object holds the set - // during construction and the array after the freeze. - - private Object rcSet; - - - /** - * Creates the node, wrapping the given hmm - * - * @param hmm the hmm to hold - */ - HMMNode(HMM hmm, float probablilty) { - super(probablilty); - this.hmm = hmm; - - Unit base = getBaseUnit(); - - int type = SIMPLE_UNIT; - if (base.isSilence()) { - type = SILENCE_UNIT; - } else if (base.isFiller()) { - type = FILLER_UNIT; - } else if (hmm.getPosition().isWordBeginning()) { - type = WORD_BEGINNING_UNIT; - } - setType(type); - } - - - /** - * Returns the base unit for this hmm node - * - * @return the base unit - */ - @Override - Unit getBaseUnit() { - // return hmm.getUnit().getBaseUnit(); - return hmm.getBaseUnit(); - } - - - /** - * Returns the hmm for this node - * - * @return the hmm - */ - HMM getHMM() { - return hmm; - } - - - @Override - HMMPosition getPosition() { - return hmm.getPosition(); - } - - - @Override - HMM getKey() { - return getHMM(); - } - - - /** - * Returns a string representation for this object - * - * @return a string representation - */ - @Override - public String toString() { - return "HMMNode " + hmm + " p " + getUnigramProbability(); - } - - - /** - * Adds a right context to the set of possible right contexts for this node. This is typically only needed for hmms - * at the ends of words. - * - * @param rc the right context. - */ - void addRC(Unit rc) { - getRCSet().add(rc); - } - - - /** Freeze this node. Convert the set into an array to reduce memory overhead */ - @Override - @SuppressWarnings({"unchecked"}) - void freeze() { - super.freeze(); - if (rcSet instanceof Set) { - Set set = (Set) rcSet; - rcSet = set.toArray(new Unit[set.size()]); - } - } - - - /** - * Gets the rc as a set. If we've already been frozen it is an error - * - * @return the set of right contexts - */ - @SuppressWarnings({"unchecked"}) - private Set getRCSet() { - if (rcSet == null) { - rcSet = new HashSet(); - } - - assert rcSet instanceof HashSet; - return (Set) rcSet; - } - - - /** - * returns the set of right contexts for this node - * - * @return the set of right contexts - */ - Unit[] getRC() { - if (rcSet instanceof HashSet) { - freeze(); - } - return (Unit[]) rcSet; - } -} - - -class EndNode extends UnitNode { - - final Unit baseUnit; - final Unit leftContext; - final Integer key; - - - /** - * Creates the node, wrapping the given hmm - * - * @param baseUnit the base unit for this node - * @param lc the left context - * @param probablilty the probability for the transition to this node - */ - EndNode(Unit baseUnit, Unit lc, float probablilty) { - super(probablilty); - this.baseUnit = baseUnit; - this.leftContext = lc; - key = baseUnit.getBaseID() * 121 + leftContext.getBaseID(); - } - - - /** - * Returns the base unit for this hmm node - * - * @return the base unit - */ - @Override - Unit getBaseUnit() { - return baseUnit; - } - - - /** - * Returns the base unit for this hmm node - * - * @return the base unit - */ - Unit getLeftContext() { - return leftContext; - } - - - @Override - Integer getKey() { - return key; - } - - - @Override - HMMPosition getPosition() { - return HMMPosition.END; - } - - - /** - * Returns a string representation for this object - * - * @return a string representation - */ - @Override - public String toString() { - return "EndNode base:" + baseUnit + " lc " + leftContext + ' ' + key; - } - - - /** Freeze this node. Convert the set into an array to reduce memory overhead */ - @Override - void freeze() { - super.freeze(); - } -} - - - -/** - * Represents the vocabulary as a lex tree with nodes in the tree representing either words (WordNode) or units - * (HMMNode). HMMNodes may be shared. - */ -class HMMTree { - - private final HMMPool hmmPool; - private InitialWordNode initialNode; - private Dictionary dictionary; - - private LanguageModel lm; - private final boolean addFillerWords; - private final boolean addSilenceWord = true; - private final Set entryPoints = new HashSet(); - private Set exitPoints = new HashSet(); - private Set allWords; - private EntryPointTable entryPointTable; - private boolean debug; - private final float languageWeight; - - private final Map endNodeMap; - private final Map wordNodeMap; - - private WordNode sentenceEndWordNode; - private Logger logger; - - - /** - * Creates the HMMTree - * - * @param pool the pool of HMMs and units - * @param dictionary the dictionary containing the pronunciations - * @param lm the source of the set of words to add to the lex tree - * @param addFillerWords if false add filler words - * @param languageWeight the languageWeight - */ - HMMTree(HMMPool pool, Dictionary dictionary, LanguageModel lm, - boolean addFillerWords, float languageWeight) { - this.hmmPool = pool; - this.dictionary = dictionary; - this.lm = lm; - this.endNodeMap = new HashMap(); - this.wordNodeMap = new HashMap(); - this.addFillerWords = addFillerWords; - this.languageWeight = languageWeight; - - logger = Logger.getLogger(HMMTree.class.getSimpleName()); - compile(); - } - - - /** - * Given a base unit and a left context, return the set of entry points into the lex tree - * - * @param lc the left context - * @param base the center unit - * @return the set of entry points - */ - public Node[] getEntryPoint(Unit lc, Unit base) { - EntryPoint ep = entryPointTable.getEntryPoint(base); - return ep.getEntryPointsFromLeftContext(lc).getSuccessors(); - } - - - /** - * Gets the set of hmm nodes associated with the given end node - * - * @param endNode the end node - * @return an array of associated hmm nodes - */ - public HMMNode[] getHMMNodes(EndNode endNode) { - HMMNode[] results = endNodeMap.get(endNode.getKey()); - if (results == null) { - // System.out.println("Filling cache for " + endNode.getKey() - // + " size " + endNodeMap.size()); - Map resultMap = new HashMap(); - Unit baseUnit = endNode.getBaseUnit(); - Unit lc = endNode.getLeftContext(); - for (Unit rc : entryPoints) { - HMM hmm = hmmPool.getHMM(baseUnit, lc, rc, HMMPosition.END); - HMMNode hmmNode = resultMap.get(hmm); - if (hmmNode == null) { - hmmNode = new HMMNode(hmm, LogMath.LOG_ONE); - resultMap.put(hmm, hmmNode); - } - hmmNode.addRC(rc); - for (Node node : endNode.getSuccessors()) { - WordNode wordNode = (WordNode)node; - hmmNode.addSuccessor(wordNode); - } - } - - // cache it - results = resultMap.values().toArray(new HMMNode[resultMap.size()]); - endNodeMap.put(endNode.getKey(), results); - } - - // System.out.println("GHN: " + endNode + " " + results.length); - return results; - } - - - /** - * Returns the word node associated with the sentence end word - * - * @return the sentence end word node - */ - public WordNode getSentenceEndWordNode() { - assert sentenceEndWordNode != null; - return sentenceEndWordNode; - } - - -// private Object getKey(EndNode endNode) { -// Unit base = endNode.getBaseUnit(); -// Unit lc = endNode.getLeftContext(); -// return null; -// } - - - /** Compiles the vocabulary into an HMM Tree */ - private void compile() { - collectEntryAndExitUnits(); - entryPointTable = new EntryPointTable(entryPoints); - addWords(); - entryPointTable.createEntryPointMaps(); - freeze(); - } - - - /** Dumps the tree */ - void dumpTree() { - System.out.println("Dumping Tree ..."); - Map dupNode = new HashMap(); - dumpTree(0, getInitialNode(), dupNode); - System.out.println("... done Dumping Tree"); - } - - - /** - * Dumps the tree - * - * @param level the level of the dump - * @param node the root of the tree to dump - * @param dupNode map of visited nodes - */ - private void dumpTree(int level, Node node, Map dupNode) { - if (dupNode.get(node) == null) { - dupNode.put(node, node); - System.out.println(Utilities.pad(level) + node); - if (!(node instanceof WordNode)) { - for (Node nextNode : node.getSuccessors()) { - dumpTree(level + 1, nextNode, dupNode); - } - } - } - } - - - /** Collects all of the entry and exit points for the vocabulary. */ - private void collectEntryAndExitUnits() { - Collection words = getAllWords(); - for (Word word : words) { - for (int j = 0; j < word.getPronunciations().length; j++) { - Pronunciation p = word.getPronunciations()[j]; - Unit first = p.getUnits()[0]; - Unit last = p.getUnits()[p.getUnits().length - 1]; - entryPoints.add(first); - exitPoints.add(last); - } - } - - if (debug) { - System.out.println("Entry Points: " + entryPoints.size()); - System.out.println("Exit Points: " + exitPoints.size()); - } - } - - - /** - * Called after the lex tree is built. Frees all temporary structures. After this is called, no more words can be - * added to the lex tree. - */ - private void freeze() { - entryPointTable.freeze(); - dictionary = null; - lm = null; - exitPoints = null; - allWords = null; - wordNodeMap.clear(); - endNodeMap.clear(); - } - - - /** Adds the given collection of words to the lex tree */ - private void addWords() { - Set words = getAllWords(); - for (Word word : words) { - addWord(word); - } - } - - - /** - * Adds a single word to the lex tree - * - * @param word the word to add - */ - private void addWord(Word word) { - float prob = getWordUnigramProbability(word); - Pronunciation[] pronunciations = word.getPronunciations(); - for (Pronunciation pronunciation : pronunciations) { - addPronunciation(pronunciation, prob); - } - } - - - /** - * Adds the given pronunciation to the lex tree - * - * @param pronunciation the pronunciation - * @param probability the unigram probability - */ - private void addPronunciation(Pronunciation pronunciation, - float probability) { - Unit baseUnit; - Unit lc; - Unit rc; - Node curNode; - WordNode wordNode; - - Unit[] units = pronunciation.getUnits(); - baseUnit = units[0]; - EntryPoint ep = entryPointTable.getEntryPoint(baseUnit); - - ep.addProbability(probability); - - if (units.length > 1) { - curNode = ep.getNode(); - lc = baseUnit; - for (int i = 1; i < units.length - 1; i++) { - baseUnit = units[i]; - rc = units[i + 1]; - HMM hmm = hmmPool.getHMM(baseUnit, lc, rc, HMMPosition.INTERNAL); - if (hmm == null) { - logger.severe("Missing HMM for unit " + baseUnit.getName() + " with lc=" + lc.getName() + " rc=" + rc.getName()); - } else { - curNode = curNode.addSuccessor(hmm, probability); - } - lc = baseUnit; // next lc is this baseUnit - } - - // now add the last unit as an end unit - baseUnit = units[units.length - 1]; - EndNode endNode = new EndNode(baseUnit, lc, probability); - curNode = curNode.addSuccessor(endNode, probability); - wordNode = curNode.addSuccessor(pronunciation, probability, wordNodeMap); - if (wordNode.getWord().isSentenceEndWord()) { - sentenceEndWordNode = wordNode; - } - } else { - ep.addSingleUnitWord(pronunciation); - } - } - - - /** - * Gets the unigram probability for the given word - * - * @param word the word - * @return the unigram probability for the word. - */ - private float getWordUnigramProbability(Word word) { - float prob = LogMath.LOG_ONE; - if (!word.isFiller()) { - Word[] wordArray = new Word[1]; - wordArray[0] = word; - prob = lm.getProbability((new WordSequence(wordArray))); - // System.out.println("gwup: " + word + " " + prob); - prob *= languageWeight; - } - return prob; - } - - - /** - * Returns the entire set of words, including filler words - * - * @return the set of all words (as Word objects) - */ - private Set getAllWords() { - if (allWords == null) { - allWords = new HashSet(); - for (String spelling : lm.getVocabulary()) { - Word word = dictionary.getWord(spelling); - if (word != null) { - allWords.add(word); - } - } - - if (addFillerWords) { - allWords.addAll(Arrays.asList(dictionary.getFillerWords())); - } else if (addSilenceWord) { - allWords.add(dictionary.getSilenceWord()); - } - } - return allWords; - } - - - /** - * Returns the initial node for this lex tree - * - * @return the initial lex node - */ - InitialWordNode getInitialNode() { - return initialNode; - } - - - /** The EntryPoint table is used to manage the set of entry points into the lex tree. */ - class EntryPointTable { - - private final Map entryPoints; - - - /** - * Create the entry point table give the set of all possible entry point units - * - * @param entryPointCollection the set of possible entry points - */ - EntryPointTable(Collection entryPointCollection) { - entryPoints = new HashMap(); - for (Unit unit : entryPointCollection) { - entryPoints.put(unit, new EntryPoint(unit)); - } - } - - - /** - * Given a CI unit, return the EntryPoint object that manages the entry point for the unit - * - * @param baseUnit the unit of interest (A ci unit) - * @return the object that manages the entry point for the unit - */ - EntryPoint getEntryPoint(Unit baseUnit) { - return entryPoints.get(baseUnit); - } - - - /** Creates the entry point maps for all entry points. */ - void createEntryPointMaps() { - for (EntryPoint ep : entryPoints.values()) { - ep.createEntryPointMap(); - } - } - - - /** Freezes the entry point table */ - void freeze() { - for (EntryPoint ep : entryPoints.values()) { - ep.freeze(); - } - } - - - /** Dumps the entry point table */ - void dump() { - for (EntryPoint ep : entryPoints.values()) { - ep.dump(); - } - } - } - - - /** Manages a single entry point. */ - class EntryPoint { - - final Unit baseUnit; - final Node baseNode; // second units and beyond start here - final Map unitToEntryPointMap; - List singleUnitWords; - int nodeCount; - Set rcSet; - float totalProbability; - - - /** - * Creates an entry point for the given unit - * - * @param baseUnit the EntryPoint is created for this unit - */ - EntryPoint(Unit baseUnit) { - this.baseUnit = baseUnit; - this.baseNode = new Node(LogMath.LOG_ZERO); - this.unitToEntryPointMap = new HashMap(); - this.singleUnitWords = new ArrayList(); - this.totalProbability = LogMath.LOG_ZERO; - } - - - /** - * Given a left context get a node that represents a single set of entry points into this unit - * - * @param leftContext the left context of interest - * @return the node representing the entry point - */ - Node getEntryPointsFromLeftContext(Unit leftContext) { - return unitToEntryPointMap.get(leftContext); - } - - - /** - * Accumulates the probability for this entry point - * - * @param probability a new probability - */ - void addProbability(float probability) { - if (probability > totalProbability) { - totalProbability = probability; - } - } - - - /** - * Returns the probability for all words reachable from this node - * - * @return the log probability - */ - float getProbability() { - return totalProbability; - } - - - /** Once we have built the full entry point we can eliminate some fields */ - void freeze() { - for (Node node : unitToEntryPointMap.values()) { - node.freeze(); - } - singleUnitWords = null; - rcSet = null; - } - - - /** - * Gets the base node for this entry point - * - * @return the base node - */ - Node getNode() { - return baseNode; - } - - - /** - * Adds a one-unit word to this entry point. Such single unit words need to be dealt with specially. - * - * @param p the pronunciation of the single unit word - */ - void addSingleUnitWord(Pronunciation p) { - singleUnitWords.add(p); - } - - - /** - * Gets the set of possible right contexts that we can transition to from this entry point - * - * @return the set of possible transition points. - */ - private Collection getEntryPointRC() { - if (rcSet == null) { - rcSet = new HashSet(); - for (Node node : baseNode.getSuccessorMap().values()) { - UnitNode unitNode = (UnitNode) node; - rcSet.add(unitNode.getBaseUnit()); - } - } - return rcSet; - } - - - /** - * A version of createEntryPointMap that compresses common hmms across all entry points. - */ - void createEntryPointMap() { - HashMap map = new HashMap(); - HashMap singleUnitMap = new HashMap(); - - for (Unit lc : exitPoints) { - Node epNode = new Node(LogMath.LOG_ZERO); - for (Unit rc : getEntryPointRC()) { - HMM hmm = hmmPool.getHMM(baseUnit, lc, rc, HMMPosition.BEGIN); - Node addedNode; - - if ((addedNode = map.get(hmm)) == null) { - addedNode = epNode.addSuccessor(hmm, getProbability()); - map.put(hmm, addedNode); - } else { - epNode.putSuccessor(hmm, addedNode); - } - - nodeCount++; - connectEntryPointNode(addedNode, rc); - } - connectSingleUnitWords(lc, epNode, singleUnitMap); - unitToEntryPointMap.put(lc, epNode); - } - } - - - /** - * Connects the single unit words associated with this entry point. The singleUnitWords list contains all - * single unit pronunciations that have as their sole unit, the unit associated with this entry point. Entry - * points for these words are added to the epNode for all possible left (exit) and right (entry) contexts. - * - * @param lc the left context - * @param epNode the entry point node - */ - private void connectSingleUnitWords(Unit lc, Node epNode, HashMap map) { - if (!singleUnitWords.isEmpty()) { - - for (Unit rc : entryPoints) { - HMM hmm = hmmPool.getHMM(baseUnit, lc, rc, HMMPosition.SINGLE); - - HMMNode tailNode; - if (( tailNode = map.get(hmm)) == null) { - tailNode = (HMMNode) - epNode.addSuccessor(hmm, getProbability()); - map.put(hmm, tailNode); - } else { - epNode.putSuccessor(hmm, tailNode); - } - WordNode wordNode; - tailNode.addRC(rc); - nodeCount++; - - for (Pronunciation p : singleUnitWords) { - if (p.getWord() == dictionary.getSentenceStartWord()) { - initialNode = new InitialWordNode(p, tailNode); - } else { - float prob = getWordUnigramProbability(p.getWord()); - wordNode = tailNode.addSuccessor(p, prob, wordNodeMap); - if (p.getWord() == - dictionary.getSentenceEndWord()) { - sentenceEndWordNode = wordNode; - } - } - nodeCount++; - } - } - } - } - - - /** - * Connect the entry points that match the given rc to the given epNode - * - * @param epNode add matching successors here - * @param rc the next unit - */ - private void connectEntryPointNode(Node epNode, Unit rc) { - for (Node node : baseNode.getSuccessors()) { - UnitNode successor = (UnitNode) node; - if (successor.getBaseUnit() == rc) { - epNode.addSuccessor(successor); - } - } - } - - - /** Dumps the entry point */ - void dump() { - System.out.println("EntryPoint " + baseUnit + " RC Followers: " - + getEntryPointRC().size()); - int count = 0; - Collection rcs = getEntryPointRC(); - System.out.print(" "); - for (Unit rc : rcs) { - System.out.print(Utilities.pad(rc.getName(), 4)); - if (count++ >= 12) { - count = 0; - System.out.println(); - System.out.print(" "); - } - } - System.out.println(); - } - } - - -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/lextree/LexTreeLinguist.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/lextree/LexTreeLinguist.java deleted file mode 100755 index 2c8b76a3..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/lextree/LexTreeLinguist.java +++ /dev/null @@ -1,1605 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.linguist.lextree; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.logging.Logger; - -import edu.cmu.sphinx.decoder.scorer.ScoreProvider; -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.linguist.HMMSearchState; -import edu.cmu.sphinx.linguist.Linguist; -import edu.cmu.sphinx.linguist.SearchGraph; -import edu.cmu.sphinx.linguist.SearchState; -import edu.cmu.sphinx.linguist.SearchStateArc; -import edu.cmu.sphinx.linguist.UnitSearchState; -import edu.cmu.sphinx.linguist.WordSearchState; -import edu.cmu.sphinx.linguist.WordSequence; -import edu.cmu.sphinx.linguist.acoustic.AcousticModel; -import edu.cmu.sphinx.linguist.acoustic.HMM; -import edu.cmu.sphinx.linguist.acoustic.HMMPool; -import edu.cmu.sphinx.linguist.acoustic.HMMState; -import edu.cmu.sphinx.linguist.acoustic.HMMStateArc; -import edu.cmu.sphinx.linguist.acoustic.Unit; -import edu.cmu.sphinx.linguist.acoustic.UnitManager; -import edu.cmu.sphinx.linguist.dictionary.Dictionary; -import edu.cmu.sphinx.linguist.dictionary.Pronunciation; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.linguist.language.grammar.Grammar; -import edu.cmu.sphinx.linguist.language.ngram.LanguageModel; -import edu.cmu.sphinx.linguist.language.ngram.large.LargeNGramModel; -import edu.cmu.sphinx.linguist.util.LRUCache; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.TimerPool; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Boolean; -import edu.cmu.sphinx.util.props.S4Component; -import edu.cmu.sphinx.util.props.S4Double; -import edu.cmu.sphinx.util.props.S4Integer; - -/** - * A linguist that can represent large vocabularies efficiently. This class implements the Linguist interface. The main - * role of any linguist is to represent the search space for the decoder. The initial state in the search space can be - * retrieved by a SearchManager via a call to getInitialSearchState. This method returns a SearchState. - * Successor states can be retrieved via calls to SearchState.getSuccessors().. There are a number of - * search state sub-interfaces that are used to indicate different types of states in the search space: - *

    • WordSearchState - represents a word in the search space.
    • UnitSearchState - represents a - * unit in the search space
    • HMMSearchState represents an HMM state in the search space
    - * A linguist has a great deal of latitude about the order in which it returns states. For instance a 'flat' linguist - * may return a WordState at the beginning of a word, while a 'tree' linguist may return WordStates at the ending of a - * word. Likewise, a linguist may omit certain state types completely (such as a unit state). Some Search Managers may - * want to know a priori the order in which states will be generated by the linguist. The method - * getSearchStateOrder can be used to retrieve the order of state returned by the linguist. - *

    - * Depending on the vocabulary size and topology, the search space represented by the linguist may include a very large - * number of states. Some linguists will generate the search states dynamically, that is, the object representing a - * particular state in the search space is not created until it is needed by the SearchManager. SearchManagers often - * need to be able to determine if a particular state has been entered before by comparing states. Because SearchStates - * may be generated dynamically, the SearchState.equals() call (as opposed to the reference equals '==' - * method) should be used to determine if states are equal. The states returned by the linguist will generally provide - * very efficient implementations of equals and hashCode. This will allow a SearchManager to - * maintain collections of states in HashMaps efficiently. - *

    - * LexTeeLinguist Characteristics - *

    - * Some characteristics of this linguist:

    • Dynamic - the linguist generates search states on the fly, - * greatly reducing the required memory footprint
    • tree topology this linguist represents the search space as - * an inverted tree. Units near the roots of word are shared among many different words. These reduces the amount of - * states that need to be considered during the search.
    • HMM sharing - because of state tying in the acoustic - * models, it is often the case that triphone units that differ in the right context actually are represented by the - * same HMM. This linguist recognizes this case and will use a single state to represent the HMM instead of two states. - * This can greatly reduce the number of states generated by the linguist.
    • Small-footprint - this linguist - * uses a few other techniques to reduce the overall footprint of the search space. One technique that is particularly - * helpful is to share the end word units (where the largest fanout of states occurs) across all of the words. For a 60K - * word vocabulary, these can result in a reduction in tree nodes of about 2 million to around 3,000.
    • Quick - * loading - this linguist can compile the search space very quickly. A 60K word vocabulary can be made ready in - * less than 10 seconds.
    - *

    - * This linguist is not a general purpose linguist. It does impose some constraints: - *

    • unit size - this linguist will units that are no larger than triphones.
    • n-gram grammars - - * this linguist will generate the search space directly from the N-Gram language model. The vocabulary supported is the - * intersection of the words found in the language model and the words that exist in the Dictionary. It is assumed that - * all sequences of words in the vocabulary are valid. This linguist doesn't support arbitrary grammars.
    - *

    - * Design Notes The following are some notes describing the design of this linguist. They may be helpful to - * those who want to understand how this linguist works but are not necessary if you are only interested in using this - * linguist. - *

    - * Search Space Representation It has been shown that representing the search space as a tree can greatly reduce - * the number of active states in a search since the units at the beginnings of words can be shared across multiple - * words. For example, with a large vocabulary (60K words), at the end of a word, with a flat representation, we have to - * provide transitions to the initial state of each possible word. That is 60K transitions. In a tree based system we - * need to only provide transitions to each initial phone (within its context). That is about 1600 transitions. This is - * a substantial reduction. Conceptually, this tree consists of a node for each possible initial unit. Each node can - * have an arbitrary number of children which can be either unit nodes or word nodes. - *

    - * This linguist uses the HMMTree class to build and represent the tree. The HMMTree is given the dictionary and - * language model and builds the lextree. Instead of representing the nodes in the tree as phonemes and words as is - * typically done, the HMMTree represents the tree as HMMs and words. The HMM is essentially a unit within its context. - * This is typically a triphone (although for some units (such as SIL) it is a simple phone. Representing the nodes as - * HMM instead of nodes yields a much larger tree, but also has some advantages: - *

    • Because of state-tying in the acoustic models, many distinct triphones actually share an HMM. Representing - * the nodes as HMMs allows these shared HMMs to be represented in the tree only once instead of many times if we - * representing states as phones or triphones. This leads to a reduction in the actual number of states that are - * considered during a search. Experiments have shown that this can reduce the required beam by a factor of 2 or 3. - *
    • By representing the nodes as HMM, we avoid having to lookup the HMM for a particular triphone during the search. - * This is a modest savings.
    - * There are some disadvantages in representing the tree with HMMs: - *
    • size since HMMs represent units in their context, we have many more copies of each node. For - * instance, instead of having a single unit representing the initial 'd' in the word 'dog' we would have about 40 HMMs, - * one for each possible left context.
    • speed building the much larger HMM tree can take much more time, - * since many more nodes are needed to represent the tree.
    • complexity representing the tree with HMMs is - * more complex. There are multiple entry points for each word/unit that have to be dealt with.
    - * Luckily the size and speed issues can be mitigated (by adding a bit more complexity of course). The bulk of the nodes - * in the HMM tree are the word ending nodes. There is a word ending node for each possible right context. To reduce - * space, all of the word ending nodes are replaced by a single EndNode. During the search, the actual HMM nodes for a - * particular EndNode are generated on request. These sets of HMM nodes can be shared among different word endings, and - * therefore are cached. The effect of using this EndNode optimization is to reduce the space required by the tree by - * about 300mb and the time required to generate the tree from about 60 seconds to about 6 seconds. - * - *

    - * Word Histories - *

    - * We use explicit backoff for word histories. That technique is proven to be useful and save number of - * states. The reasoning is the following. With a vocabulary of size N, you have N^2 unique bigram - * histories. So the token stack will have N^2*K unique tokens, where K is the number of states per token. - * For a 100k vocab, 3 states per HMM, that will be 3*10^10 tokens (max). Of course, a large majority - * of them will be pruned, but really, its still way too much. If you stick with the actual K-gram - * used (i.e. accounting explicitly for backoff), then this reduces tremendously. - * Most bigrams dont have corresponding trigrams. Not all 10^10 bigrams have trigrams. We only - * need to store as many explicit tokens as the number of bigrams that have trigrams. - */ -public class LexTreeLinguist implements Linguist { - - /** The property that defines the grammar to use when building the search graph */ - @S4Component(type = Grammar.class) - public final static String PROP_GRAMMAR = "grammar"; - - /** The property that defines the acoustic model to use when building the search graph */ - @S4Component(type = AcousticModel.class) - public final static String PROP_ACOUSTIC_MODEL = "acousticModel"; - - /** The property that defines the unit manager to use when building the search graph */ - @S4Component(type = UnitManager.class, defaultClass = UnitManager.class) - public final static String PROP_UNIT_MANAGER = "unitManager"; - - /** - * The property that determines whether or not full word histories are used to - * determine when two states are equal. - */ - @S4Boolean(defaultValue = true) - public final static String PROP_FULL_WORD_HISTORIES = "fullWordHistories"; - - /** The property for the language model to be used by this grammar */ - @S4Component(type = LanguageModel.class) - public final static String PROP_LANGUAGE_MODEL = "languageModel"; - - /** The property that defines the dictionary to use for this grammar */ - @S4Component(type = Dictionary.class) - public final static String PROP_DICTIONARY = "dictionary"; - - /** The property that defines the size of the arc cache (zero to disable the cache). */ - @S4Integer(defaultValue = 0) - public final static String PROP_CACHE_SIZE = "cacheSize"; - - /** The property that controls whether filler words are automatically added to the vocabulary */ - @S4Boolean(defaultValue = false) - public final static String PROP_ADD_FILLER_WORDS = "addFillerWords"; - - /** - * The property to control whether or not the linguist will generate unit states. When this property is false the - * linguist may omit UnitSearchState states. For some search algorithms this will allow for a faster search with - * more compact results. - */ - @S4Boolean(defaultValue = false) - public final static String PROP_GENERATE_UNIT_STATES = "generateUnitStates"; - - /** - * The property that determines whether or not unigram probabilities are - * smeared through the lextree. During the expansion of the tree the - * language probability could be only calculated when we reach word end node. - * Until that point we need to keep path alive and give it some language - * probability. See - * - * Alleva, F., Huang, X. and Hwang, M.-Y., "Improvements on the pronunciation - * prefix tree search organization", Proceedings of ICASSP, pp. 133-136, - * Atlanta, GA, 1996. - * - * for the description of this technique. - */ - @S4Boolean(defaultValue = true) - public final static String PROP_WANT_UNIGRAM_SMEAR = "wantUnigramSmear"; - - - /** The property that determines the weight of the smear. See {@link LexTreeLinguist#PROP_WANT_UNIGRAM_SMEAR} */ - @S4Double(defaultValue = 1.0) - public final static String PROP_UNIGRAM_SMEAR_WEIGHT = "unigramSmearWeight"; - - - // just for detailed debugging - private final static SearchStateArc[] EMPTY_ARC = new SearchStateArc[0]; - - // ---------------------------------- - // Subcomponents that are configured - // by the property sheet - // ----------------------------------- - private LanguageModel languageModel; - private AcousticModel acousticModel; - private LogMath logMath; - private Dictionary dictionary; - private UnitManager unitManager; - - // ------------------------------------ - // Data that is configured by the - // property sheet - // ------------------------------------ - private Logger logger; - protected boolean addFillerWords; - private boolean generateUnitStates; - private boolean wantUnigramSmear = true; - private float unigramSmearWeight = 1.0f; - private boolean cacheEnabled; - private int maxArcCacheSize; - - protected float languageWeight; - private float logWordInsertionProbability; - private float logUnitInsertionProbability; - private float logFillerInsertionProbability; - private float logSilenceInsertionProbability; - private float logOne; - - // ------------------------------------ - // Data used for building and maintaining - // the search graph - // ------------------------------------- - private Word sentenceEndWord; - private Word[] sentenceStartWordArray; - private SearchGraph searchGraph; - private HMMPool hmmPool; - private LRUCache arcCache; - private int maxDepth; - - protected HMMTree hmmTree; - - private int cacheTrys; - private int cacheHits; - - public LexTreeLinguist(AcousticModel acousticModel, UnitManager unitManager, - LanguageModel languageModel, Dictionary dictionary, boolean fullWordHistories, boolean wantUnigramSmear, - double wordInsertionProbability, double silenceInsertionProbability, double fillerInsertionProbability, - double unitInsertionProbability, float languageWeight, boolean addFillerWords, boolean generateUnitStates, - float unigramSmearWeight, int maxArcCacheSize) { - - logger = Logger.getLogger(getClass().getName()); - - this.acousticModel = acousticModel; - this.logMath = LogMath.getLogMath(); - this.unitManager = unitManager; - this.languageModel = languageModel; - this.dictionary = dictionary; - - this.wantUnigramSmear = wantUnigramSmear; - this.logWordInsertionProbability = logMath.linearToLog(wordInsertionProbability); - this.logSilenceInsertionProbability = logMath.linearToLog(silenceInsertionProbability); - this.logFillerInsertionProbability = logMath.linearToLog(fillerInsertionProbability); - this.logUnitInsertionProbability = logMath.linearToLog(unitInsertionProbability); - this.languageWeight = languageWeight; - this.addFillerWords = addFillerWords; - this.generateUnitStates = generateUnitStates; - this.unigramSmearWeight = unigramSmearWeight; - this.maxArcCacheSize = maxArcCacheSize; - - cacheEnabled = maxArcCacheSize > 0; - if( cacheEnabled ) { - arcCache = new LRUCache(maxArcCacheSize); - } - } - - public LexTreeLinguist() { - - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - public void newProperties(PropertySheet ps) throws PropertyException { - logger = ps.getLogger(); - logMath = LogMath.getLogMath(); - - acousticModel = (AcousticModel) ps.getComponent(PROP_ACOUSTIC_MODEL); - unitManager = (UnitManager) ps.getComponent(PROP_UNIT_MANAGER); - languageModel = (LanguageModel) ps.getComponent(PROP_LANGUAGE_MODEL); - dictionary = (Dictionary) ps.getComponent(PROP_DICTIONARY); - - wantUnigramSmear = ps.getBoolean(PROP_WANT_UNIGRAM_SMEAR); - logWordInsertionProbability = logMath.linearToLog(ps.getDouble(PROP_WORD_INSERTION_PROBABILITY)); - logSilenceInsertionProbability = logMath.linearToLog(ps.getDouble(PROP_SILENCE_INSERTION_PROBABILITY)); - logFillerInsertionProbability = logMath.linearToLog(ps.getDouble(PROP_FILLER_INSERTION_PROBABILITY)); - logUnitInsertionProbability = logMath.linearToLog(ps.getDouble(PROP_UNIT_INSERTION_PROBABILITY)); - languageWeight = ps.getFloat(PROP_LANGUAGE_WEIGHT); - addFillerWords = (ps.getBoolean(PROP_ADD_FILLER_WORDS)); - generateUnitStates = (ps.getBoolean(PROP_GENERATE_UNIT_STATES)); - unigramSmearWeight = ps.getFloat(PROP_UNIGRAM_SMEAR_WEIGHT); - maxArcCacheSize = ps.getInt(PROP_CACHE_SIZE); - - cacheEnabled = maxArcCacheSize > 0; - if(cacheEnabled) { - arcCache = new LRUCache(maxArcCacheSize); - } - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.linguist.Linguist#allocate() - */ - public void allocate() throws IOException { - dictionary.allocate(); - acousticModel.allocate(); - languageModel.allocate(); - compileGrammar(); - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.linguist.Linguist#deallocate() - */ - public void deallocate() throws IOException { - if (acousticModel != null) - acousticModel.deallocate(); - if (dictionary != null) - dictionary.deallocate(); - if (languageModel != null) - languageModel.deallocate(); - hmmTree = null; - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.linguist.Linguist#getSearchGraph() - */ - public SearchGraph getSearchGraph() { - return searchGraph; - } - - - /** Called before a recognition */ - public void startRecognition() { - } - - - /** Called after a recognition */ - public void stopRecognition() { - // FIXME: remove - if (languageModel instanceof LargeNGramModel) - ((LargeNGramModel) languageModel).stop(); - } - - - /** - * Retrieves the language model for this linguist - * - * @return the language model (or null if there is none) - */ - public LanguageModel getLanguageModel() { - return languageModel; - } - - - public Dictionary getDictionary() { - return dictionary; - } - - - /** - * retrieves the initial language state - * - * @return the initial language state - */ - private SearchState getInitialSearchState() { - InitialWordNode node = hmmTree.getInitialNode(); - - if (node == null) - throw new RuntimeException("Language model has no entry for initial word "); - - return new LexTreeWordState(node, node.getParent(), (new WordSequence(sentenceStartWordArray)).trim( - maxDepth - 1), 0f, logOne, logOne); - } - - - /** Compiles the n-gram into a lex tree that is used during the search */ - private void compileGrammar() { - TimerPool.getTimer(this, "Compile").start(); - - sentenceEndWord = dictionary.getSentenceEndWord(); - sentenceStartWordArray = new Word[1]; - sentenceStartWordArray[0] = dictionary.getSentenceStartWord(); - maxDepth = languageModel.getMaxDepth(); - - generateHmmTree(); - - TimerPool.getTimer(this,"Compile").stop(); - // Now that we are all done, dump out some interesting - // information about the process - - searchGraph = new LexTreeSearchGraph(getInitialSearchState()); - } - - - protected void generateHmmTree() { - hmmPool = new HMMPool(acousticModel, logger, unitManager); - hmmTree = new HMMTree(hmmPool, dictionary, languageModel, - addFillerWords, languageWeight); - - hmmPool.dumpInfo(); - } - - - class LexTreeSearchGraph implements SearchGraph { - - /** An array of classes that represents the order in which the states will be returned. */ - - private SearchState initialState; - - - /** - * Constructs a search graph with the given initial state - * - * @param initialState the initial state - */ - LexTreeSearchGraph(SearchState initialState) { - this.initialState = initialState; - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.linguist.SearchGraph#getInitialState() - */ - public SearchState getInitialState() { - return initialState; - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.linguist.SearchGraph#getSearchStateOrder() - */ - public int getNumStateOrder() { - return 6; - } - - public boolean getWordTokenFirst() { - return false; - } - } - - /** - * The LexTreeLinguist returns language states to the search manager. This class forms the base implementation for - * all language states returned. This LexTreeState keeps track of the probability of entering this state (a - * language+insertion probability) as well as the unit history. The unit history consists of the LexTree nodes that - * correspond to the left, center and right contexts. - *

    - * This is an abstract class, subclasses must implement the getSuccessorss method. - */ - abstract class LexTreeState implements SearchState, SearchStateArc { - - private final Node node; - private final WordSequence wordSequence; - final float currentSmearTerm; - final float currentSmearProb; - - - /** - * Creates a LexTreeState. - * - * @param node the node associated with this state - * @param wordSequence the history of words up until this point - - - */ - LexTreeState(Node node, WordSequence wordSequence, float smearTerm, - float smearProb) { - this.node = node; - this.wordSequence = wordSequence; - currentSmearTerm = smearTerm; - currentSmearProb = smearProb; - } - - - /** - * Gets the unique signature for this state. The signature building code is slow and should only be used for - * non-time-critical tasks such as plotting states. - * - * @return the signature - */ - public String getSignature() { - return "lts-" + node.hashCode() + "-ws-" + wordSequence; - } - - - public float getSmearTerm() { - return currentSmearTerm; - } - - - public float getSmearProb() { - return currentSmearProb; - } - - - /** - * Generate a hashcode for an object - * - * @return the hashcode - */ - @Override - public int hashCode() { - int hashCode = wordSequence.hashCode() * 37; - hashCode += node.hashCode(); - return hashCode; - } - - - /** - * Determines if the given object is equal to this object - * - * @param o the object to test - * @return true if the object is equal to this - */ - @Override - public boolean equals(Object o) { - if (o == this) { - return true; - } else if (o instanceof LexTreeState) { - LexTreeState other = (LexTreeState) o; - if (node != other.node) - return false; - return wordSequence.equals(other.wordSequence); - } else { - return false; - } - } - - - /** - * Gets a successor to this search state - * - * @return the successor state - */ - public SearchState getState() { - return this; - } - - - /** - * Gets the composite probability of entering this state - * - * @return the log probability - */ - public float getProbability() { - return getLanguageProbability() + getInsertionProbability(); - } - - - /** - * Gets the language probability of entering this state - * - * @return the log probability - */ - public float getLanguageProbability() { - return logOne; - } - - - /** - * Gets the insertion probability of entering this state - * - * @return the log probability - */ - public float getInsertionProbability() { - return logOne; - } - - - /** - * Determines if this is an emitting state - * - * @return true if this is an emitting state. - */ - public boolean isEmitting() { - return false; - } - - - /** - * Determines if this is a final state - * - * @return true if this is an final state. - */ - public boolean isFinal() { - return false; - } - - - /** - * Gets the hmm tree node representing the unit - * - * @return the unit lex node - */ - protected Node getNode() { - return node; - } - - - /** - * Returns the word sequence for this state - * - * @return the word sequence - */ - public WordSequence getWordHistory() { - return wordSequence; - } - - - public Node getLexState() { - return node; - } - - - /** - * Returns the list of successors to this state - * - * @return a list of SearchState objects - */ - public SearchStateArc[] getSuccessors() { - SearchStateArc[] arcs = getCachedArcs(); - if (arcs == null) { - arcs = getSuccessors(node); - putCachedArcs(arcs); - } - return arcs; - } - - - /** - * Returns the list of successors to this state - * - * @param theNode node to get successors - * @return a list of SearchState objects - */ - protected SearchStateArc[] getSuccessors(Node theNode) { - Node[] nodes = theNode.getSuccessors(); - SearchStateArc[] arcs = new SearchStateArc[nodes.length]; - // System.out.println("Arc: "+ this); - int i = 0; - for (Node nextNode : nodes) { - // System.out.println(" " + nextNode); - if (nextNode instanceof WordNode) { - arcs[i] = createWordStateArc((WordNode) nextNode, - (HMMNode) getNode(), this); - } else if (nextNode instanceof EndNode) { - arcs[i] = createEndUnitArc((EndNode) nextNode, this); - } else { - arcs[i] = createUnitStateArc((HMMNode) nextNode, this); - } - i++; - } - return arcs; - } - - - /** - * Creates a word search state for the given word node - * @param wordNode the wordNode - * @param lastUnit last unit of the word - * @param previous previous state - * @return the search state for the wordNode - */ - protected SearchStateArc createWordStateArc(WordNode wordNode, - HMMNode lastUnit, LexTreeState previous) { - // System.out.println("CWSA " + wordNode + " fup " + fixupProb); - float languageProbability = logOne; - Word nextWord = wordNode.getWord(); - float smearTerm = previous.getSmearTerm(); - - if (nextWord.isFiller() && nextWord != sentenceEndWord) { - return new LexTreeWordState(wordNode, lastUnit, - wordSequence, - smearTerm, logOne, languageProbability); - } - - WordSequence nextWordSequence = wordSequence.addWord(nextWord, maxDepth); - float probability = languageModel.getProbability(nextWordSequence) * languageWeight; - smearTerm = getSmearTermFromLanguageModel(nextWordSequence); - // System.out.println("LP " + nextWordSequence + " " + - // logProbability); - // subtract off the previously applied smear probability - languageProbability = probability - previous.getSmearProb(); - - if (nextWord == sentenceEndWord) { - return new LexTreeEndWordState(wordNode, lastUnit, - nextWordSequence.trim(maxDepth - 1), - smearTerm, logOne, languageProbability); - } - - return new LexTreeWordState(wordNode, lastUnit, - nextWordSequence.trim(maxDepth - 1), - smearTerm, logOne, languageProbability); - } - - - /** - * Creates a unit search state for the given unit node - * - * @param hmmNode the unit node - - * @return the search state - */ - SearchStateArc createUnitStateArc(HMMNode hmmNode, LexTreeState previous) { - SearchStateArc arc; - // System.out.println("CUSA " + hmmNode); - float insertionProbability = calculateInsertionProbability(hmmNode); - float smearProbability = getUnigramSmear(hmmNode) - + previous.getSmearTerm(); - float languageProbability = smearProbability - previous.getSmearProb(); - - // if we want a unit state create it, otherwise - // get the first hmm state of the unit - - if (generateUnitStates) { - arc = new LexTreeUnitState(hmmNode, getWordHistory(), previous - .getSmearTerm(), smearProbability, languageProbability, - insertionProbability); - } else { - HMM hmm = hmmNode.getHMM(); - arc = new LexTreeHMMState(hmmNode, getWordHistory(), previous - .getSmearTerm(), smearProbability, hmm.getInitialState(), - languageProbability, insertionProbability, null); - } - return arc; - } - - - /** - * Creates a unit search state for the given unit node - * - * @param endNode the unit node - * @param previous the previous state - * @return the search state - */ - SearchStateArc createEndUnitArc(EndNode endNode, LexTreeState previous) { - float smearProbability = getUnigramSmear(endNode) - + previous.getSmearTerm(); - float languageProbability = smearProbability - previous.getSmearProb(); - float insertionProbability = calculateInsertionProbability(endNode); - return new LexTreeEndUnitState(endNode, getWordHistory(), previous - .getSmearTerm(), smearProbability, languageProbability, - insertionProbability); - } - - - /** - * Returns the string representation of this object - * - * @return the string representation - */ - @Override - public String toString() { - return "lt-" + node + ' ' + getProbability() + '{' + wordSequence - + '}'; - } - - - /** - * Returns a pretty version of the string representation for this object - * - * @return a pretty string - */ - public String toPrettyString() { - return toString(); - } - - - /** - * Gets the successor arcs for this state from the cache - * - * @return the next set of arcs for this state, or null if none can be found or if caching is disabled. - */ - SearchStateArc[] getCachedArcs() { - if (cacheEnabled) { - SearchStateArc[] arcs = arcCache.get(this); - if (arcs != null) { - cacheHits++; - } - if (++cacheTrys % 1000000 == 0) { - System.out.println("Hits: " + cacheHits - + " of " + cacheTrys + ' ' + - ((float) cacheHits) / cacheTrys * 100f); - } - return arcs; - } else { - return null; - } - } - - - /** - * Puts the set of arcs into the cache - * - * @param arcs the arcs to cache. - */ - void putCachedArcs(SearchStateArc[] arcs) { - if (cacheEnabled) { - arcCache.put(this, arcs); - } - } - - - abstract public int getOrder(); - } - - /** Represents a unit in the search space */ - public class LexTreeEndUnitState extends LexTreeState - implements UnitSearchState { - - float logLanguageProbability; - float logInsertionProbability; - - - /** - * Constructs a LexTreeUnitState - * - - * @param wordSequence the history of words - - - - - */ - LexTreeEndUnitState(EndNode endNode, WordSequence wordSequence, - float smearTerm, float smearProb, float languageProbability, - float insertionProbability) { - super(endNode, wordSequence, smearTerm, smearProb); - logLanguageProbability = languageProbability; - logInsertionProbability = insertionProbability; - // System.out.println("LTEUS " + logLanguageProbability + " " + - // logInsertionProbability); - } - - - /** - * Returns the base unit associated with this state - * - * @return the base unit - */ - public Unit getUnit() { - return getEndNode().getBaseUnit(); - } - - - /** - * Generate a hashcode for an object - * - * @return the hashcode - */ - @Override - public int hashCode() { - return super.hashCode() * 17 + 423; - } - - - /** - * Gets the acoustic probability of entering this state - * - * @return the log probability - */ - @Override - public float getInsertionProbability() { - return logInsertionProbability; - } - - - /** - * Gets the language probability of entering this state - * - * @return the log probability - */ - @Override - public float getLanguageProbability() { - return logLanguageProbability; - } - - - /** - * Determines if the given object is equal to this object - * - * @param o the object to test - * @return true if the object is equal to this - */ - @Override - public boolean equals(Object o) { - return o == this || o instanceof LexTreeEndUnitState && super.equals(o); - } - - - /** - * Returns the unit node for this state - * - * @return the unit node - */ - private EndNode getEndNode() { - return (EndNode) getNode(); - } - - - /** - * Returns the list of successors to this state - * - * @return a list of SearchState objects - */ - @Override - public SearchStateArc[] getSuccessors() { - SearchStateArc[] arcs = getCachedArcs(); - if (arcs == null) { - HMMNode[] nodes = getHMMNodes(getEndNode()); - arcs = new SearchStateArc[nodes.length]; - - if (generateUnitStates) { - for (int i = 0; i < nodes.length; i++) { - arcs[i] = new LexTreeUnitState(nodes[i], - getWordHistory(), getSmearTerm(), - getSmearProb(), logOne, logOne, - this.getNode()); - } - } else { - for (int i = 0; i < nodes.length; i++) { - HMM hmm = nodes[i].getHMM(); - arcs[i] = new LexTreeHMMState(nodes[i], - getWordHistory(), getSmearTerm(), - getSmearProb(), hmm.getInitialState(), - logOne, logOne, this.getNode()); - } - } - putCachedArcs(arcs); - } - return arcs; - } - - - @Override - public String toString() { - return super.toString() + " EndUnit"; - } - - - @Override - public int getOrder() { - return 3; - } - } - - /** Represents a unit in the search space */ - public class LexTreeUnitState extends LexTreeState - implements UnitSearchState { - - private float logInsertionProbability; - private float logLanguageProbability; - private Node parentNode; - private int hashCode = -1; - - - /** - * Constructs a LexTreeUnitState - * - * @param wordSequence the history of words - */ - LexTreeUnitState(HMMNode hmmNode, WordSequence wordSequence, - float smearTerm, float smearProb, float languageProbability, - float insertionProbability) { - this(hmmNode, wordSequence, smearTerm, smearProb, - languageProbability, insertionProbability, null); - } - - - /** - * Constructs a LexTreeUnitState - * - * @param wordSequence the history of words - */ - LexTreeUnitState(HMMNode hmmNode, WordSequence wordSequence, - float smearTerm, float smearProb, float languageProbability, - float insertionProbability, Node parentNode) { - super(hmmNode, wordSequence, smearTerm, smearProb); - this.logInsertionProbability = insertionProbability; - this.logLanguageProbability = languageProbability; - this.parentNode = parentNode; - } - - - /** - * Returns the base unit associated with this state - * - * @return the base unit - */ - public Unit getUnit() { - return getHMMNode().getBaseUnit(); - } - - - /** - * Generate a hashcode for an object - * - * @return the hashcode - */ - @Override - public int hashCode() { - if (hashCode == -1) { - hashCode = super.hashCode() * 17 + 421; - if (parentNode != null) { - hashCode *= 432; - hashCode += parentNode.hashCode(); - } - } - return hashCode; - } - - - /** - * Determines if the given object is equal to this object - * - * @param o the object to test - * @return true if the object is equal to this - */ - @Override - public boolean equals(Object o) { - if (o == this) { - return true; - } else if (o instanceof LexTreeUnitState) { - LexTreeUnitState other = (LexTreeUnitState) o; - return parentNode == other.parentNode && super.equals(o); - } else { - return false; - } - } - - - /** - * Returns the unit node for this state - * - * @return the unit node - */ - private HMMNode getHMMNode() { - return (HMMNode) getNode(); - } - - - /** - * Returns the list of successors to this state - * - * @return a list of SearchState objects - */ - @Override - public SearchStateArc[] getSuccessors() { - SearchStateArc[] arcs = new SearchStateArc[1]; - HMM hmm = getHMMNode().getHMM(); - arcs[0] = new LexTreeHMMState(getHMMNode(), getWordHistory(), - getSmearTerm(), getSmearProb(), hmm.getInitialState(), - logOne, logOne, parentNode); - return arcs; - } - - - @Override - public String toString() { - return super.toString() + " unit"; - } - - - /** - * Gets the acoustic probability of entering this state - * - * @return the log probability - */ - @Override - public float getInsertionProbability() { - return logInsertionProbability; - } - - - /** - * Gets the language probability of entering this state - * - * @return the log probability - */ - @Override - public float getLanguageProbability() { - return logLanguageProbability; - } - - - @Override - public int getOrder() { - return 4; - } - } - - /** Represents a HMM state in the search space */ - public class LexTreeHMMState extends LexTreeState implements HMMSearchState, ScoreProvider { - - private final HMMState hmmState; - private float logLanguageProbability; - private float logInsertionProbability; - private final Node parentNode; - int hashCode = -1; - - - /** - * Constructs a LexTreeHMMState - * - * @param hmmNode the HMM state associated with this unit - * @param wordSequence the word history - * @param languageProbability the probability of the transition - * @param insertionProbability the probability of the transition - */ - LexTreeHMMState(HMMNode hmmNode, WordSequence wordSequence, - float smearTerm, float smearProb, HMMState hmmState, - float languageProbability, float insertionProbability, - Node parentNode) { - super(hmmNode, wordSequence, smearTerm, smearProb); - this.hmmState = hmmState; - this.parentNode = parentNode; - this.logLanguageProbability = languageProbability; - this.logInsertionProbability = insertionProbability; - } - - - /** - * Gets the ID for this state - * - * @return the ID - */ - @Override - public String getSignature() { - return super.getSignature() + "-HMM-" + hmmState.getState(); - } - - - /** - * returns the HMM state associated with this state - * - * @return the HMM state - */ - public HMMState getHMMState() { - return hmmState; - } - - - /** - * Generate a hashcode for an object - * - * @return the hashcode - */ - @Override - public int hashCode() { - if (hashCode == -1) { - hashCode = super.hashCode() * 29 + (hmmState.getState() + 1); - if (parentNode != null) { - hashCode *= 377; - hashCode += parentNode.hashCode(); - } - } - return hashCode; - } - - - /** - * Determines if the given object is equal to this object - * - * @param o the object to test - * @return true if the object is equal to this - */ - @Override - public boolean equals(Object o) { - if (o == this) { - return true; - } else if (o instanceof LexTreeHMMState) { - LexTreeHMMState other = (LexTreeHMMState) o; - return hmmState == other.hmmState - && parentNode == other.parentNode && super.equals(o); - } else { - return false; - } - } - - - /** - * Gets the language probability of entering this state - * - * @return the log probability - */ - @Override - public float getLanguageProbability() { - return logLanguageProbability; - } - - - /** - * Gets the language probability of entering this state - * - * @return the log probability - */ - @Override - public float getInsertionProbability() { - return logInsertionProbability; - } - - - /** - * Retrieves the set of successors for this state - * - * @return the list of successor states - */ - @Override - public SearchStateArc[] getSuccessors() { - SearchStateArc[] nextStates = getCachedArcs(); - if (nextStates == null) { - - // if this is an exit state, we are transitioning to a - // new unit or to a word end. - - if (hmmState.isExitState()) { - if (parentNode == null) { - nextStates = super.getSuccessors(); - } else { - nextStates = super.getSuccessors(parentNode); - } - } else { - // The current hmm state is not an exit state, so we - // just go through the next set of successors - - HMMStateArc[] arcs = hmmState.getSuccessors(); - nextStates = new SearchStateArc[arcs.length]; - for (int i = 0; i < arcs.length; i++) { - HMMStateArc arc = arcs[i]; - if (arc.getHMMState().isEmitting()) { - // if its a self loop and the prob. matches - // reuse the state - if (arc.getHMMState() == hmmState - && logInsertionProbability == arc - .getLogProbability()) { - nextStates[i] = this; - } else { - nextStates[i] = new LexTreeHMMState( - (HMMNode) getNode(), getWordHistory(), - getSmearTerm(), getSmearProb(), - arc.getHMMState(), logOne, - arc.getLogProbability(), parentNode); - } - } else { - nextStates[i] = new LexTreeNonEmittingHMMState( - (HMMNode) getNode(), getWordHistory(), - getSmearTerm(), getSmearProb(), - arc.getHMMState(), - arc.getLogProbability(), parentNode); - } - } - } - putCachedArcs(nextStates); - } - return nextStates; - } - - - /** Determines if this is an emitting state */ - @Override - public boolean isEmitting() { - return hmmState.isEmitting(); - } - - - @Override - public String toString() { - return super.toString() + " hmm:" + hmmState; - } - - - @Override - public int getOrder() { - return 5; - } - - - public float getScore(Data data) { - return hmmState.getScore(data); - } - - @Override - public float[] getComponentScore(Data feature) { - return hmmState.calculateComponentScore(feature); - } - -} - - /** Represents a non emitting hmm state */ - public class LexTreeNonEmittingHMMState extends LexTreeHMMState { - - /** - * Constructs a NonEmittingLexTreeHMMState - * - - - * @param hmmState the hmm state associated with this unit - - * @param wordSequence the word history - * @param probability the probability of the transition occurring - - */ - LexTreeNonEmittingHMMState(HMMNode hmmNode, WordSequence wordSequence, - float smearTerm, float smearProb, HMMState hmmState, - float probability, Node parentNode) { - super(hmmNode, wordSequence, smearTerm, smearProb, hmmState, - logOne, probability, parentNode); - } - - - @Override - public int getOrder() { - return 0; - } - } - - /** Represents a word state in the search space */ - public class LexTreeWordState extends LexTreeState - implements - WordSearchState { - - private HMMNode lastNode; - private float logLanguageProbability; - - - /** - * Constructs a LexTreeWordState - * - * @param wordNode the word node - * @param wordSequence the sequence of words triphone context - * @param languageProbability the probability of this word - */ - LexTreeWordState(WordNode wordNode, HMMNode lastNode, - WordSequence wordSequence, float smearTerm, float smearProb, - float languageProbability) { - - super(wordNode, wordSequence, smearTerm, smearProb); - // System.out.println("LTWS " + wordSequence); - this.lastNode = lastNode; - this.logLanguageProbability = languageProbability; - } - - - /** - * Gets the word pronunciation for this state - * - * @return the pronunciation for this word - */ - public Pronunciation getPronunciation() { - return ((WordNode) getNode()).getPronunciation(); - } - - - /** - * Determines if this is a final state - * - * @return true if this is an final state. - */ - @Override - public boolean isFinal() { - return ((WordNode) getNode()).isFinal(); - } - - - /** - * Generate a hashcode for an object - * - * @return the hashcode - */ - @Override - public int hashCode() { - return super.hashCode() * 41 + lastNode.hashCode(); - } - - - /** - * Gets the unique signature for this state. The signature building code is slow and should only be used for - * non-time-critical tasks such as plotting states. - * - * @return the signature - */ - @Override - public String getSignature() { - return super.getSignature() + "-ln-" + lastNode.hashCode(); - } - - - /** - * Determines if the given object is equal to this object - * - * @param o the object to test - * @return true if the object is equal to this - */ - @Override - public boolean equals(Object o) { - if (o == this) { - return true; - } else if (o instanceof LexTreeWordState) { - LexTreeWordState other = (LexTreeWordState) o; - return lastNode == other.lastNode && super.equals(o); - } else { - return false; - } - } - - - /** - * Gets the language probability of entering this state - * - * @return the log probability - */ - @Override - public float getLanguageProbability() { - return logLanguageProbability; - } - - - /** - * Returns the list of successors to this state - * - * @return a list of SearchState objects - */ - @Override - public SearchStateArc[] getSuccessors() { - SearchStateArc[] arcs = getCachedArcs(); - if (arcs == null) { - arcs = EMPTY_ARC; - WordNode wordNode = (WordNode) getNode(); - - if (wordNode.getWord() != sentenceEndWord) { - int index = 0; - List list = new ArrayList(); - Unit[] rc = lastNode.getRC(); - Unit left = wordNode.getLastUnit(); - - for (Unit unit : rc) { - Node[] epList = hmmTree.getEntryPoint(left, unit); - for (Node n : epList) { - list.add(n); - } - } - - // add a link to every possible entry point as well - // as link to the node - arcs = new SearchStateArc[list.size() + 1]; - for (Node node : list) { - arcs[index++] = createUnitStateArc((HMMNode)node, this); - } - - // now add the link to the end of sentence arc: - - arcs[index++] = createWordStateArc(hmmTree.getSentenceEndWordNode(), lastNode, this); - } - putCachedArcs(arcs); - } - return arcs; - } - - - @Override - public int getOrder() { - return 1; - } - - - /** - * Returns true if this LexTreeWordState indicates the start of a word. Returns false if this LexTreeWordState - * indicates the end of a word. - * - * @return true if this LexTreeWordState indicates the start of a word, false if this LexTreeWordState indicates - * the end of a word - */ - public boolean isWordStart() { - return false; - } - } - - /** Represents the final end of utterance word */ - public class LexTreeEndWordState extends LexTreeWordState - implements - WordSearchState { - - /** - * Constructs a LexTreeWordState - * - * @param wordNode the word node - * @param lastNode the previous word node - * @param wordSequence the sequence of words triphone context - - - * @param logProbability the probability of this word occurring - */ - LexTreeEndWordState(WordNode wordNode, HMMNode lastNode, - WordSequence wordSequence, float smearTerm, float smearProb, - float logProbability) { - super(wordNode, lastNode, wordSequence, smearTerm, smearProb, - logProbability); - } - - - @Override - public int getOrder() { - return 2; - } - - } - - - /** - * Determines the insertion probability for the given unit lex node - * - * @param unitNode the unit lex node - * @return the insertion probability - */ - private float calculateInsertionProbability(UnitNode unitNode) { - int type = unitNode.getType(); - - if (type == UnitNode.SIMPLE_UNIT) { - return logUnitInsertionProbability; - } else if (type == UnitNode.WORD_BEGINNING_UNIT) { - return logUnitInsertionProbability + logWordInsertionProbability; - } else if (type == UnitNode.SILENCE_UNIT) { - return logSilenceInsertionProbability; - } else { // must be filler - return logFillerInsertionProbability; - } - } - - - /** - * Retrieves the unigram smear from the given node - * - * @return the unigram smear - */ - private float getUnigramSmear(Node node) { - float prob; - if (wantUnigramSmear) { - prob = node.getUnigramProbability() * unigramSmearWeight; - } else { - prob = logOne; - } - return prob; - } - - - /** - * Returns the smear term for the given word sequence - * - * @param ws the word sequence - * @return the smear term for the word sequence - */ - private float getSmearTermFromLanguageModel(WordSequence ws) { - return languageModel.getSmear(ws); - } - - - /** - * Gets the set of HMM nodes associated with the given end node - * - * @param endNode the end node - * @return an array of associated HMM nodes - */ - private HMMNode[] getHMMNodes(EndNode endNode) { - return hmmTree.getHMMNodes(endNode); - } - -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/util/GDLDumper.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/util/GDLDumper.java deleted file mode 100755 index c547c221..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/util/GDLDumper.java +++ /dev/null @@ -1,313 +0,0 @@ -/* - * Copyright 1999-2003 Carnegie Mellon University. - * Portions Copyright 2003 Sun Microsystems, Inc. - * Portions Copyright 2003 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist.util; - -import edu.cmu.sphinx.linguist.*; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.Utilities; -import edu.cmu.sphinx.util.props.*; - -import java.io.PrintStream; -import java.util.*; - -/** A linguist processor that dumps out the sentence hmm in GDL format. */ - -public class GDLDumper extends LinguistDumper { - - /** The property specifying whether to skip HMMs during dumping. */ - @S4Boolean(defaultValue = true) - public static final String PROP_SKIP_HMMS = "skipHMMs"; - - /** The property to specify whether to use vertical graph layout. */ - @S4Boolean(defaultValue = false) - public static final String PROP_VERTICAL_LAYOUT = "verticalLayout"; - - /** The property to specify whether to dump arc labels. */ - @S4Boolean(defaultValue = true) - public static final String PROP_DUMP_ARC_LABELS = "dumpArcLabels"; - - // ------------------------------- - // Configuration data - // -------------------------------- - private boolean skipHMMs; - private boolean verticalLayout; - private boolean dumpArcLabels; - private LogMath logMath; - - public GDLDumper( String filename, Linguist linguist, - boolean verticalLayout, boolean skipHMMs, boolean dumpArcLabels) - { - super( filename, linguist ); - - this.verticalLayout = verticalLayout; - this.skipHMMs = skipHMMs; - this.dumpArcLabels = dumpArcLabels; - setDepthFirst(false); // breadth first traversal - logMath = LogMath.getLogMath(); - } - - public GDLDumper() { - - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - verticalLayout = ps.getBoolean( - PROP_VERTICAL_LAYOUT); - skipHMMs = ps.getBoolean(PROP_SKIP_HMMS); - dumpArcLabels = ps.getBoolean( - PROP_DUMP_ARC_LABELS); - setDepthFirst(false); // breadth first traversal - } - - - /** - * Retreives the default name for the destination dump. This method is typically overridden by derived classes - * - * @return the default name for the file. - */ - protected String getDefaultName() { - return "linguistDump.gdl"; - } - - - /** - * Called at the start of the dump - * - * @param out the output stream. - */ - @Override - protected void startDump(PrintStream out) { - out.println("graph: {"); - out.println(" layout_algorithm: minbackward"); - if (verticalLayout) { - out.println(" orientation: top_to_bottom"); - out.println(" manhatten_edges: no"); - out.println(" splines: yes"); - } else { - out.println(" orientation: left_to_right"); - out.println(" manhatten_edges: yes"); - out.println(" splines: no"); - } - } - - - /** - * Called at the end of the dump - * - * @param out the output stream. - */ - @Override - protected void endDump(PrintStream out) { - out.println("}"); - } - - - /** - * Called to dump out a node in the search space - * - * @param out the output stream. - * @param state the state to dump - * @param level the level of the state - */ - @Override - protected void startDumpNode(PrintStream out, SearchState state, int level) { - - if (skipHMMs && (state instanceof HMMSearchState)) { - } else { - String color = getColor(state); - String shape = "box"; - - out.println(" node: {" + "title: " + qs(getUniqueName(state)) - + " label: " + qs(state.toPrettyString()) + " color: " - + color + " shape: " + shape + " vertical_order: " + level - + '}'); - } - } - - - /** - * Gets the color for a particular state - * - * @param state the state - * @return its color - */ - private String getColor(SearchState state) { - String color = "lightred"; - if (state.isFinal()) { - color = "magenta"; - } else if (state instanceof UnitSearchState) { - color = "green"; - } else if (state instanceof WordSearchState) { - color = "lightblue"; - } else if (state instanceof HMMSearchState) { - color = "orange"; - } - return color; - } - - - /** - * Called to dump out a node in the search space - * - * @param out the output stream. - * @param state the state to dump - * @param level the level of the state - */ - @Override - protected void endDumpNode(PrintStream out, SearchState state, int level) { - } - - - /** - * Dumps an arc - * - * @param out the output stream. - * @param from arc leaves this state - * @param arc the arc to dump - * @param level the level of the state - */ - @Override - protected void dumpArc(PrintStream out, SearchState from, - SearchStateArc arc, int level) { - List arcList = new ArrayList(); - - if (skipHMMs) { - if (from instanceof HMMSearchState) { - return; - } else if (arc.getState() instanceof HMMSearchState) { - findNextNonHMMArc(arc, arcList); - } else { - arcList.add(arc); - } - } else { - arcList.add(arc); - } - for (SearchStateArc nextArc : arcList) { - String label = ""; - String color = getArcColor(nextArc); - if (dumpArcLabels) { - double language = logMath.logToLinear(nextArc - .getLanguageProbability()); - double insert = logMath.logToLinear(nextArc - .getInsertionProbability()); - label = " label: " - + qs('(' - + formatEdgeLabel(language) + ',' - + formatEdgeLabel(insert) + ')'); - } - out.println(" edge: { sourcename: " + qs(getUniqueName(from)) - + " targetname: " + qs(getUniqueName(nextArc.getState())) - + label + " color: " + color + '}'); - } - } - - - /** - * Given an arc to an HMMSearchState, find a downstream arc to the first non-HMM state - * - * @param arc the arc to start the search at - * @param results the resulting arcs are placed on this list - */ - private void findNextNonHMMArc(SearchStateArc arc, List results) { - Set visited = new HashSet(); - List queue = new ArrayList(); - queue.add(arc); - while (!queue.isEmpty()) { - SearchStateArc nextArc = queue.remove(0); - if (!visited.contains(nextArc)) { - visited.add(nextArc); - if (!(nextArc.getState() instanceof HMMSearchState)) { - results.add(nextArc); - } else { - queue.addAll(Arrays.asList(nextArc.getState().getSuccessors())); - } - } - } - } - - - /** - * Formats the given floating point number for edge labels. - * - * @param value the floating point value to format - */ - private String formatEdgeLabel(double value) { - if (value == 1.0) { - return "1"; - } else if (value == 0.0) { - return "0"; - } else { - int maxStringLength = 5; - String stringValue = String.valueOf(value); - if (stringValue.length() > maxStringLength) { - stringValue = Utilities.doubleToScientificString(value, 3); - } - return stringValue; - } - } - - - /** - * Returns a color based upon the type of arc - * - * @param arc the arc - * @return the color of the arc based on weather it is a language arc (green), acoustic arc (red), insertion - * arc(blue), flat arc (black) or a combo (purple). - */ - private String getArcColor(SearchStateArc arc) { - String color = null; - if (arc.getLanguageProbability() != 0.0) { - color = "green"; - } - if (arc.getInsertionProbability() != 0.0) { - if (color == null) { - color = "blue"; - } else { - color = "purple"; - } - } - if (color == null) { - color = "black"; - } - return color; - } - - - /** - * Returns a quoted string version of its argument. This method mainly is used to hide the ugliness caused by trying - * to escape a quote character in certain syntax highlighting editors such as vim. - * - * @param s the string to quote. - * @return the quoted string - */ - private String qs(String s) { - return '\"' + s + '\"'; - } - - - /** - * returns a guaranteed unique name for the state - * - * @param state the state of interest - * @return the name - */ - private String getUniqueName(SearchState state) { - return state.getSignature(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/util/LRUCache.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/util/LRUCache.java deleted file mode 100755 index f643960c..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/util/LRUCache.java +++ /dev/null @@ -1,33 +0,0 @@ -package edu.cmu.sphinx.linguist.util; - -import java.util.LinkedHashMap; -import java.util.Map; - -/** An LRU cache */ -@SuppressWarnings("serial") -public class LRUCache extends LinkedHashMap { - - final int maxSize; - - - /** - * Creates an LRU cache with the given maximum size - * - * @param maxSize the maximum size of the cache - */ - public LRUCache(int maxSize) { - this.maxSize = maxSize; - } - - - /** - * Determines if the eldest entry in the map should be removed. - * - * @param eldest the eldest entry - * @return true if the eldest entry should be removed - */ - @Override - protected boolean removeEldestEntry(Map.Entry eldest) { - return size() > maxSize; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/util/LinguistDumper.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/util/LinguistDumper.java deleted file mode 100755 index 4c2171f8..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/util/LinguistDumper.java +++ /dev/null @@ -1,296 +0,0 @@ -/* - * Copyright 1999-2003 Carnegie Mellon University. - * Portions Copyright 2003 Sun Microsystems, Inc. - * Portions Copyright 2003 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist.util; - -import edu.cmu.sphinx.linguist.*; -import edu.cmu.sphinx.util.Cache; -import edu.cmu.sphinx.util.props.*; - -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.PrintStream; -import java.util.*; - -/** - * A linguist processor that dumps out the search space in a simple format. This processor is designed so that it can be - * easily extended by replacing the dumpNode and the dumpEdge methods. - */ -public class LinguistDumper extends LinguistProcessor { - - /** The property for the destination of the LinguistDumper */ - @S4String(defaultValue = "linguistDump.txt") - public final static String PROP_FILENAME = "filename"; - - // ------------------------------ - // Configuration data - // ------------------------------- - private boolean depthFirst = true; - private String filename; - - public LinguistDumper( String filename, Linguist linguist ) { - super( linguist ); - this.filename = filename; - } - - public LinguistDumper() { - - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - filename = ps.getString(PROP_FILENAME); - } - - - /** Dumps the search space hmm in GDL format */ - @Override - public void run() { - try { - FileOutputStream fos = new FileOutputStream(filename); - PrintStream out = new PrintStream(fos); - SearchState firstState = - getLinguist().getSearchGraph().getInitialState(); - dumpSearchGraph(out, firstState); - out.close(); - } catch (FileNotFoundException fnfe) { - System.out.println("Can't dump to file " + filename + ' ' + fnfe); - } - } - - - /** - * Sets whether the traversal is depth first or breadth first - * - * @param depthFirst if true traversal is depth first, otherwise the traversal is breadth first - */ - protected void setDepthFirst(boolean depthFirst) { - this.depthFirst = depthFirst; - } - - /** - * Called at the start of the dump - * - * @param out the output stream. - */ - protected void startDump(PrintStream out) { - } - - - /** - * Called at the end of the dump - * - * @param out the output stream. - */ - protected void endDump(PrintStream out) { - } - - - /** - * Called to dump out a node in the search space - * - * @param out the output stream. - * @param state the state to dump - * @param level the level of the state - */ - protected void startDumpNode(PrintStream out, SearchState state, int level) { - } - - - /** - * Called to dump out a node in the search space - * - * @param out the output stream. - * @param state the state to dump - * @param level the level of the state - */ - protected void endDumpNode(PrintStream out, SearchState state, int level) { - } - - - /** - * Dumps an arc - * - * @param out the output stream. - * @param from arc leaves this state - * @param arc the arc to dump - * @param level the level of the state - */ - protected void dumpArc(PrintStream out, SearchState from, - SearchStateArc arc, int level) { - } - - - /** - * Dumps the search graph - * - * @param out place to dump the output - * @param startingState the initial state of the search space - */ - private void dumpSearchGraph(PrintStream out, SearchState startingState) { - List queue = new LinkedList(); - Set visitedStates = new HashSet(); - startDump(out); - queue.add(new StateLevel(startingState, 0)); - while (!queue.isEmpty()) { - StateLevel stateLevel = queue.remove(0); - int level = stateLevel.getLevel(); - SearchState state = stateLevel.getState(); - // equalCheck(state); - if (!visitedStates.contains(state.getSignature())) { - visitedStates.add(state.getSignature()); - startDumpNode(out, state, level); - SearchStateArc[] arcs = state.getSuccessors(); - for (int i = arcs.length - 1; i >= 0; i--) { - SearchState nextState = arcs[i].getState(); - dumpArc(out, state, arcs[i], level); - if (depthFirst) { - // if depth first, its a stack - queue.add(0, new StateLevel(nextState, level + 1)); - } else { - queue.add(new StateLevel(nextState, level + 1)); - } - } - endDumpNode(out, state, level); - } - } - endDump(out); - } - - - final Cache eqStates = new Cache(); - final Map eqSigs = new HashMap(); - - - /** - * This is a bit of test/debugging code that ensures that the states that have equal signatures are also considered - * to be object.equals and vice versa.. This method will dump out any states where this contract is not true - * - * @param state the state to check - */ - @SuppressWarnings("unused") - private void equalCheck(SearchState state) { - SearchState eqState = eqStates.cache(state); - SearchState eqSig = eqSigs.get(state.getSignature()); - if (eqState == null ^ eqSig == null) { - System.out.println("Missing one: "); - System.out.println(" state val: " + state); - System.out.println(" state sig: " + state.getSignature()); - System.out.println(" eqState val: " + eqState); - System.out.println(" eqSig val: " + eqSig); - if (eqState != null) { - System.out.println(" eqState sig: " + eqState.getSignature()); - } - if (eqSig != null) { - System.out.println(" eqSig sig: " + eqSig.getSignature()); - } - } - if (eqState == null) { - eqState = state; - } - if (eqSig == null) { - eqSigs.put(state.getSignature(), state); - eqSig = state; - } - if (!eqState.getSignature().equals(state.getSignature())) { - System.out.println("Sigs mismatch for: "); - System.out.println(" state sig: " + state.getSignature()); - System.out.println(" eqSig sig: " + eqSig.getSignature()); - System.out.println(" state val: " + state); - System.out.println(" eqSig val: " + eqSig); - } - if (!eqState.equals(state)) { - System.out.println("obj mismatch for: "); - System.out.println(" state sig: " + state.getSignature()); - System.out.println(" eqSig sig: " + eqSig.getSignature()); - System.out.println(" state val: " + state); - System.out.println(" eqSig val: " + eqSig); - } - } -} - -/** A class for bundling together a SearchState and its level. */ - -class StateLevel { - - private final int level; - private final SearchState state; - - - /** - * Constructs a StateLevel from its primitive components. - * - * @param state the state to be bundled in the StateLevel - * @param level the level of the state - */ - StateLevel(SearchState state, int level) { - this.state = state; - this.level = level; - } - - - /** - * Returns the state - * - * @return the state - */ - SearchState getState() { - return state; - } - - - /** - * Returns the level - * - * @return the level. - */ - int getLevel() { - return level; - } - - - /** - * Returns a string representation of the object - * - * @return a string representation - */ - @Override - public String toString() { - return String.valueOf(level) + ' ' + state.getSignature() + " 1 " - + getTypeLabel(state); - } - - - /** - * Retrieves a type label for a state - * - * @param state the state of interest - * @return a label for the type of state (one of Unit, Word, HMM or other - */ - public String getTypeLabel(SearchState state) { - if (state instanceof UnitSearchState) { - return "Unit"; - } - if (state instanceof WordSearchState) { - return "Word"; - } - if (state instanceof HMMSearchState) { - return "HMM"; - } - return "other"; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/util/LinguistStats.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/util/LinguistStats.java deleted file mode 100755 index 839bd20d..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/util/LinguistStats.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright 1999-2003 Carnegie Mellon University. - * Portions Copyright 2003 Sun Microsystems, Inc. - * Portions Copyright 2003 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist.util; - -import edu.cmu.sphinx.linguist.*; - -import java.util.*; - -/** A linguist processor that dumps out statistics about the search space */ -public class LinguistStats extends LinguistProcessor { - - private final Map, Integer> stateCountByType = new HashMap, Integer>(); - - public LinguistStats( Linguist linguist ) { - super(linguist); - } - - public LinguistStats() { - - } - - /** Dumps the statistics of the linguist */ - @Override - public void run() { - Linguist linguist = getLinguist(); - List queue = new LinkedList(); - Set visitedStates = new HashSet(); - int stateCount = 0; - queue.add(linguist.getSearchGraph().getInitialState()); - while (!queue.isEmpty()) { - SearchState state = queue.remove(0); - if (!visitedStates.contains(state)) { - stateCount++; - incrementStateTypeCount(state); - visitedStates.add(state); - SearchStateArc[] arcs = state.getSuccessors(); - for (int i = arcs.length - 1; i >= 0; i--) { - SearchState nextState = arcs[i].getState(); - queue.add(nextState); - } - // Dump out the unique word states for debugging - // if (state instanceof WordSearchState) { - // System.out.println("WS: " + state); - // } - // if (false && state instanceof HMMSearchState) { - // System.out.println("HS: " + state); - // } - } - } - System.out.println("# ----------- linguist stats ------------ "); - System.out.println("# Total states: " + stateCount); - dumpStateTypeCounts(); - } - - - /** - * Keeps track of state counts by class - * - * @param state the state to track - */ - private void incrementStateTypeCount(SearchState state) { - Integer count = stateCountByType.get(state.getClass()); - if (count == null) { - count = 0; - } - count = count + 1; - stateCountByType.put(state.getClass(), count); - } - - - /** Dumps all of the class counts */ - private void dumpStateTypeCounts() { - for (Map.Entry, Integer> entry : stateCountByType.entrySet()) - System.out.println("# " + entry.getKey() + ": " + entry.getValue()); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/util/LinguistTimer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/util/LinguistTimer.java deleted file mode 100755 index 122e6c6f..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/linguist/util/LinguistTimer.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.linguist.util; - -import edu.cmu.sphinx.linguist.Linguist; -import edu.cmu.sphinx.linguist.SearchState; -import edu.cmu.sphinx.linguist.SearchStateArc; -import edu.cmu.sphinx.util.Timer; -import edu.cmu.sphinx.util.TimerPool; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Random; - -/** Gets successors from a linguist and times them */ -public class LinguistTimer { - - private final Linguist linguist; - private final boolean details; - int totalStates; - int totalEmittingStates; - int totalNonEmittingStates; - int totalFinalStates; - int maxSuccessors; - - - /** - * Creates a LinguistTimer - * - * @param linguist the linguist to time - * @param details if true print out details - */ - public LinguistTimer(Linguist linguist, boolean details) { - this.linguist = linguist; - this.details = details; - } - /** - * tests the linguist - */ - /** - * Times the lingust - * - * @param numRuns the number of simulated runs - * @param numFrames the number of simulated frames - * @param maxBeam the size of the beam - */ - public void timeLinguist(int numRuns, int numFrames, int maxBeam) { - // this test invokes the linguist using access patterns that - // are similar to a real search. It allows for timing and - // profiling of the linguist, independent of the search - // or scoring - Random random = new Random(1000); - Timer frameTimer = TimerPool.getTimer(this, "frameTimer"); - Timer totalTimer = TimerPool.getTimer(this, "totalTimer"); - // Note: this comparator imposes orderings that are - // inconsistent with equals. - System.out.println("TestLinguist: runs " + numRuns + " frames " - + numFrames + " beam " + maxBeam); - totalTimer.start(); - for (int runs = 0; runs < numRuns; runs++) { - int level = 0; - List activeList = new ArrayList(); - activeList.add(linguist.getSearchGraph().getInitialState()); - linguist.startRecognition(); - for (int i = 0; i < numFrames; i++) { - List oldList = activeList; - activeList = new ArrayList(maxBeam * 10); - frameTimer.start(); - for (SearchState nextStates : oldList) { - expandState(level, activeList, nextStates); - } - frameTimer.stop(); - Collections.shuffle(activeList, random); - if (activeList.size() > maxBeam) { - activeList = activeList.subList(0, maxBeam); - } - } - linguist.stopRecognition(); - } - totalTimer.stop(); - System.out.println(" MaxSuccessors : " + maxSuccessors); - System.out.println(" TotalStates : " + totalStates); - System.out.println(" TotalEmitting : " + totalEmittingStates); - System.out.println(" NonEmitting : " + totalNonEmittingStates); - System.out.println(" Final States : " + totalFinalStates); - } - - - /** - * expand the give search state - * - * @param level the nesting level - * @param activeList where next states are placed - * @param state the search state to expand - */ - private void expandState(int level, List activeList, SearchState state) { - SearchStateArc[] newStates = state.getSuccessors(); - totalStates++; - // System.out.println(Utilities.pad(level * 2) + state); - if (newStates.length > maxSuccessors) { - maxSuccessors = newStates.length; - } - for (SearchStateArc newState : newStates) { - SearchState ns = newState.getState(); - if (ns.isEmitting()) { - totalEmittingStates++; - activeList.add(ns); - } else if (!ns.isFinal()) { - totalNonEmittingStates++; - activeList.add(ns); - if (details && ns.isFinal()) { - System.out.println("result " + ns.toPrettyString()); - } - expandState(level + 1, activeList, ns); - } else { - totalFinalStates++; - } - totalStates++; - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/recognizer/Recognizer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/recognizer/Recognizer.java deleted file mode 100755 index d5163a10..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/recognizer/Recognizer.java +++ /dev/null @@ -1,253 +0,0 @@ -/* - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.recognizer; - -import edu.cmu.sphinx.decoder.Decoder; -import edu.cmu.sphinx.decoder.ResultProducer; -import edu.cmu.sphinx.decoder.ResultListener; -import edu.cmu.sphinx.instrumentation.Monitor; -import edu.cmu.sphinx.instrumentation.Resetable; -import edu.cmu.sphinx.result.Result; -import edu.cmu.sphinx.util.props.*; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -/** - * The Sphinx-4 recognizer. This is the main entry point for Sphinx-4. Typical usage of a recognizer is like so: - * - * public void recognizeDigits() { - * URL digitsConfig = new URL("file:./digits.xml"); - * ConfigurationManager cm = new ConfigurationManager(digitsConfig); - * Recognizer sphinxDigitsRecognizer - * = (Recognizer) cm.lookup("digitsRecognizer"); - * boolean done = false; - * Result result; - * - * sphinxDigitsRecognizer.allocate(); - * - * // echo spoken digits, quit when 'nine' is spoken - * - * while (!done) { - * result = sphinxDigitsRecognizer.recognize(); - * System.out.println("Result: " + result); - * done = result.toString().equals("nine"); - * } - * sphinxDigitsRecognizer.deallocate(); - * } - * - * Note that some Recognizer methods may throw an IllegalStateException if the recognizer is not in the proper state - */ -public class Recognizer implements Configurable, ResultProducer { - - /** The property for the decoder to be used by this recognizer. */ - @S4Component(type = Decoder.class) - public final static String PROP_DECODER = "decoder"; - - /** The property for the set of monitors for this recognizer */ - @S4ComponentList(type = Monitor.class) - public final static String PROP_MONITORS = "monitors"; - - /** Defines the possible states of the recognizer. */ - public static enum State { DEALLOCATED, ALLOCATING, ALLOCATED, READY, RECOGNIZING, DEALLOCATING, ERROR } - - private String name; - private Decoder decoder; - private State currentState = State.DEALLOCATED; - - private final List stateListeners = Collections.synchronizedList(new ArrayList()); - private List monitors; - - - public Recognizer(Decoder decoder, List monitors) { - this.decoder = decoder; - this.monitors = monitors; - name = null; - } - - public Recognizer() { - } - - /* (non-Javadoc) - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - public void newProperties(PropertySheet ps) throws PropertyException { - decoder = (Decoder) ps.getComponent(PROP_DECODER); - monitors = ps.getComponentList(PROP_MONITORS, Monitor.class); - - name = ps.getInstanceName(); - } - - - /** - * Performs recognition for the given number of input frames, or until a 'final' result is generated. This method - * should only be called when the recognizer is in the allocated state. - * - * @param referenceText what was actually spoken - * @return a recognition result - * @throws IllegalStateException if the recognizer is not in the ALLOCATED state - */ - public Result recognize(String referenceText) throws IllegalStateException { - Result result = null; - checkState(State.READY); - try { - setState(State.RECOGNIZING); - result = decoder.decode(referenceText); - } finally { - setState(State.READY); - } - return result; - } - - - /** - * Performs recognition for the given number of input frames, or until a 'final' result is generated. This method - * should only be called when the recognizer is in the allocated state. - * - * @return a recognition result - * @throws IllegalStateException if the recognizer is not in the ALLOCATED state - */ - public Result recognize() throws IllegalStateException { - return recognize(null); - } - - - /** - * Checks to ensure that the recognizer is in the given state. - * - * @param desiredState the state that the recognizer should be in - * @throws IllegalStateException if the recognizer is not in the desired state. - */ - private void checkState(State desiredState) { - if (currentState != desiredState) { - throw new IllegalStateException("Expected state " + desiredState - + " actual state " + currentState); - } - } - - - /** - * sets the current state - * - * @param newState the new state - */ - private void setState(State newState) { - currentState = newState; - synchronized (stateListeners) { - for (StateListener sl : stateListeners) { - sl.statusChanged(currentState); - } - } - } - - - /** - * Allocate the resources needed for the recognizer. Note this method make take some time to complete. This method - * should only be called when the recognizer is in the deallocated state. - * - * @throws IllegalStateException if the recognizer is not in the DEALLOCATED state - */ - public void allocate() throws IllegalStateException { - checkState(State.DEALLOCATED); - setState(State.ALLOCATING); - decoder.allocate(); - setState(State.ALLOCATED); - setState(State.READY); - } - - - /** - * Deallocates the recognizer. This method should only be called if the recognizer is in the allocated - * state. - * - * @throws IllegalStateException if the recognizer is not in the ALLOCATED state - */ - public void deallocate() throws IllegalStateException { - checkState(State.READY); - setState(State.DEALLOCATING); - decoder.deallocate(); - setState(State.DEALLOCATED); - } - - - /** - * Retrieves the recognizer state. This method can be called in any state. - * - * @return the recognizer state - */ - public State getState() { - return currentState; - } - - - /** Resets the monitors monitoring this recognizer */ - public void resetMonitors() { - for (Monitor listener : monitors) { - if (listener instanceof Resetable) - ((Resetable)listener).reset(); - } - } - - - /** - * Adds a result listener to this recognizer. A result listener is called whenever a new result is generated by the - * recognizer. This method can be called in any state. - * - * @param resultListener the listener to add - */ - public void addResultListener(ResultListener resultListener) { - decoder.addResultListener(resultListener); - } - - - /** - * Adds a status listener to this recognizer. The status listener is called whenever the status of the recognizer - * changes. This method can be called in any state. - * - * @param stateListener the listener to add - */ - public void addStateListener(StateListener stateListener) { - stateListeners.add(stateListener); - } - - - /** - * Removes a previously added result listener. This method can be called in any state. - * - * @param resultListener the listener to remove - */ - public void removeResultListener(ResultListener resultListener) { - decoder.removeResultListener(resultListener); - } - - - /** - * Removes a previously added state listener. This method can be called in any state. - * - * @param stateListener the state listener to remove - */ - public void removeStateListener(StateListener stateListener) { - stateListeners.remove(stateListener); - } - - - /* (non-Javadoc) - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return "Recognizer: " + name + " State: " + currentState; - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/recognizer/StateListener.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/recognizer/StateListener.java deleted file mode 100755 index c6e1a07e..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/recognizer/StateListener.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.recognizer; - -import edu.cmu.sphinx.util.props.Configurable; - -import java.util.EventListener; - -/** The listener interface for receiving recognizer status events */ -public interface StateListener extends EventListener, Configurable { - - /** - * Called when the status has changed. - * - * @param status the new status - */ - public void statusChanged(Recognizer.State status); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/BoundedPriorityQueue.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/BoundedPriorityQueue.java deleted file mode 100755 index c23ac6e5..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/BoundedPriorityQueue.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 1999-2013 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.result; - -import java.util.Iterator; -import java.util.TreeSet; - -// TODO: replace with MinMaxPriorityQueue -public class BoundedPriorityQueue implements Iterable { - - TreeSet items; - int maxSize; - - public BoundedPriorityQueue(int maxSize) { - items = new TreeSet(); - this.maxSize = maxSize; - } - - public void add(T item) { - items.add(item); - if (items.size() > maxSize) - items.pollFirst(); - } - - public int size() { - return items.size(); - } - - public T poll() { - return items.pollLast(); - } - - public Iterator iterator() { - return items.iterator(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/Edge.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/Edge.java deleted file mode 100755 index ff96af39..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/Edge.java +++ /dev/null @@ -1,196 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ -package edu.cmu.sphinx.result; - -import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.StringTokenizer; - -/** Edges are part of Lattices. They connect Nodes, and contain the score associated with that sequence. */ -public class Edge { - - protected double acousticScore; - protected double lmScore; - protected final Node fromNode; - protected final Node toNode; - - - /** - * Create an Edge from fromNode to toNode with acoustic and Language Model scores. - * - * @param fromNode from node - * @param toNode to node - * @param acousticScore acoustic score - * @param lmScore langauge model score - */ - protected Edge(Node fromNode, Node toNode, - double acousticScore, double lmScore) { - this.acousticScore = acousticScore; - this.lmScore = lmScore; - this.fromNode = fromNode; - this.toNode = toNode; - } - - - @Override - public String toString() { - return "Edge(" + fromNode + "-->" + toNode + '[' + acousticScore - + ',' + lmScore + "])"; - } - - - /** - * Internal routine used when creating a Lattice from a .LAT file - * - * @param lattice - * @param tokens - */ - static void load(Lattice lattice, StringTokenizer tokens) { - - String from = tokens.nextToken(); - String to = tokens.nextToken(); - double aScore = Double.parseDouble(tokens.nextToken()); - double lmScore = Double.parseDouble(tokens.nextToken()); - - Node fromNode = lattice.getNode(from); - if (fromNode == null) { - throw new Error("Edge fromNode \"" + from + "\" does not exist"); - } - - Node toNode = lattice.getNode(to); - if (toNode == null) { - throw new Error("Edge toNode \"" + to + "\" does not exist"); - } - - lattice.addEdge(fromNode, toNode, aScore, lmScore); - } - - - /** - * Internal routine used when dumping a Lattice as a .LAT file - * - * @param f - * @throws IOException - */ - void dump(PrintWriter f) throws IOException { - f.println("edge: " + fromNode.getId() + ' ' + toNode.getId() + ' ' - + acousticScore + ' ' + lmScore); - } - - - /** - * Internal routine used when dumping a Lattice as an AiSee file - * - * @param f - * @throws IOException - */ - void dumpAISee(FileWriter f) throws IOException { - f.write("edge: { sourcename: \"" + fromNode.getId() - + "\" targetname: \"" + toNode.getId() - + "\" label: \"" + acousticScore + ',' + lmScore + "\" }\n"); - } - - /** - * Internal routine used when dumping a Lattice as an Graphviz file - * - * @param f file writer - * @throws IOException if error occured - */ - public void dumpDot(FileWriter f) throws IOException { - String label = "" + acousticScore + "," + lmScore; - f.write("\tnode" + fromNode.getId() + " -> node" + toNode.getId() - + " [ label=\"" + label + "\" ]\n"); - } - - /** - * Get the acoustic score associated with an Edge. This is the acoustic - * score of the word that this edge is transitioning to, that is, the word - * represented by the node returned by the getToNode() method. - * - * @return the acoustic score of the word this edge is transitioning to - */ - public double getAcousticScore() { - return acousticScore; - } - - - /** - * Get the language model score associated with an Edge - * - * @return the score - */ - public double getLMScore() { - return lmScore; - } - - - /** - * Get the "from" Node associated with an Edge - * - * @return the Node - */ - public Node getFromNode() { - return fromNode; - } - - - /** - * Get the "to" Node associated with an Edge - * - * @return the Node - */ - public Node getToNode() { - return toNode; - } - - - /** - * Sets the acoustic score - * - * @param v the acoustic score. - */ - public void setAcousticScore(double v) { - acousticScore = v; - } - - - /** - * Sets the language model score - * - * @param v the lm score. - */ - public void setLMScore(double v) { - lmScore = v; - } - - - /** - * Returns true if the given edge is equivalent to this edge. Two edges are equivalent only if they have their - * 'fromNode' and 'toNode' are equivalent, and that their acoustic and language scores are the same. - * - * @param other the Edge to compare this Edge against - * @return true if the Edges are equivalent; false otherwise - */ - public boolean isEquivalent(Edge other) { - /* - * TODO: Figure out why there would be minute differences - * in the acousticScore. Therefore, the equality of the acoustic - * score is judge based on whether the difference is bigger than 1. - */ - double diff = Math.abs(acousticScore) * 0.00001; - return ((Math.abs(acousticScore - other.getAcousticScore()) <= diff && - lmScore == other.getLMScore()) && - (fromNode.isEquivalent(other.getFromNode()) && - toNode.isEquivalent(other.getToNode()))); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/FrameStatistics.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/FrameStatistics.java deleted file mode 100755 index 58248a6b..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/FrameStatistics.java +++ /dev/null @@ -1,65 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.result; - -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.linguist.acoustic.Unit; - -/** - * Contains statistics about a frame. - *

    - * Note that all scores are maintained in LogMath log base - */ -public abstract class FrameStatistics { - - /** - * Gets the frame number - * - * @return the frame number - */ - public abstract int getFrameNumber(); - - - /** - * Gets the feature associated with this frame - * - * @return the feature associated with the frame or null if the feature is not available - */ - public abstract Data getData(); - - - /** - * Gets the best score for this frame - * - * @return the best score for this frame in the LogMath log domain - */ - public abstract float getBestScore(); - - - /** - * Gets the unit that had the best score for this frame - * - * @return the unit with the best score - */ - public abstract Unit getBestUnit(); - - - /** - * Gets the best scoring hmm state for this frame - * - * @return the best scoring state - */ - public abstract int getBestState(); -} - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/GDLLatticeFactory.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/GDLLatticeFactory.java deleted file mode 100755 index 3b78a46d..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/GDLLatticeFactory.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.result; - -import edu.cmu.sphinx.linguist.dictionary.Dictionary; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; - - -/** - * Creates a Lattice from a GDL (AISee) Lattice file. One can obtain such a GDL file from a lattice by calling the - * Lattice.dumpAISee method. - */ -public class GDLLatticeFactory { - - private GDLLatticeFactory() { - } - - - /** - * Create a Lattice from a GDL (AISee) Lattice file. - * - * @param gdlFile the lattice file - * @param dictionary the dictionary to use to look up words - * @return Lattice created from file - * @throws IOException if something went wrong - */ - public static Lattice getLattice(String gdlFile, Dictionary dictionary) - throws IOException { - Lattice lattice = new Lattice(); - - BufferedReader reader = new BufferedReader(new FileReader(gdlFile)); - String line = null; - - while ((line = reader.readLine()) != null) { - if (line.startsWith("node")) { - createNode(line, lattice, dictionary); - } else if (line.startsWith("edge")) { - createEdge(line, lattice); - } - } - reader.close(); - return lattice; - } - - - private static void createNode(String line, Lattice lattice, - Dictionary dictionary) { - String[] text = line.split("\\s"); - String id = text[3].substring(1, text[3].length() - 1); - String contents = text[5].substring(1); - String posterior = text[6].substring(2, text[6].length() - 2); - - String word = contents.substring(0, contents.indexOf('[')); - contents = contents.substring(contents.indexOf('[') + 1); - - String start = contents.substring(0, contents.indexOf(',')); - String end = contents.substring(contents.indexOf(',') + 1); - - Node node = lattice.addNode(id, dictionary.getWord(word), - Integer.parseInt(start), - Integer.parseInt(end)); - node.setPosterior(Double.parseDouble(posterior)); - - if (word.equals("")) { - lattice.setInitialNode(node); - } else if (word.equals("")) { - lattice.setTerminalNode(node); - } - } - - - private static void createEdge(String line, Lattice lattice) { - String[] text = line.split("\\s"); - String src = text[3].substring(1, text[3].length() - 1); - String dest = text[5].substring(1, text[5].length() - 1); - String contents = text[7].substring(1, text[7].length() - 1); - String[] scores = contents.split(","); - - lattice.addEdge(lattice.getNode(src), lattice.getNode(dest), - Double.parseDouble(scores[0]), - Double.parseDouble(scores[1])); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/Lattice.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/Lattice.java deleted file mode 100755 index bf34b462..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/Lattice.java +++ /dev/null @@ -1,1158 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.result; - -import java.io.FileInputStream; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.LineNumberReader; -import java.io.PrintWriter; -import java.io.Writer; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.ListIterator; -import java.util.Map; -import java.util.Set; -import java.util.StringTokenizer; - -import edu.cmu.sphinx.decoder.search.AlternateHypothesisManager; -import edu.cmu.sphinx.decoder.search.Token; -import edu.cmu.sphinx.linguist.dictionary.Pronunciation; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.TimeFrame; - -/** - *

    - * Provides recognition lattice results. Lattices are created from - * {@link edu.cmu.sphinx.result.Result Results} which can be partial or final. - *

    - *

    - * Lattices describe all theories considered by the Recognizer that have not - * been pruned out. Lattices are a directed graph containing - * {@link edu.cmu.sphinx.result.Node Nodes} and - * {@link edu.cmu.sphinx.result.Edge Edges}. A Node that corresponds to a theory - * that a word was spoken over a particular period of time. An Edge that - * corresponds to the score of one word following another. The usual result - * transcript is the sequence of Nodes though the Lattice with the best scoring - * path. Lattices are a useful tool for analyzing "alternate results". - *

    - *

    - * A Lattice can be created from a Result that has a full token tree (with its - * corresponding AlternativeHypothesisManager). Currently, only the - * {@link edu.cmu.sphinx.decoder.search.WordPruningBreadthFirstSearchManager} - * has an AlternativeHypothesisManager. Furthermore, the lattice construction - * code currently only works for linguists where the - * {@link edu.cmu.sphinx.linguist.WordSearchState} returns false on the - * isWordStart method, i.e., where the word states appear at the - * end of the word in the linguist. Therefore, lattices should only be - * created from Result from the - * {@link edu.cmu.sphinx.linguist.lextree.LexTreeLinguist} and the - * {@link edu.cmu.sphinx.decoder.search.WordPruningBreadthFirstSearchManager}. - * - *

    - *

    - * Lattices can also be created from a collapsed - * {@link edu.cmu.sphinx.decoder.search.Token} tree and its - * AlternativeHypothesisManager. This is what 'collapsed' means. Normally, - * between two word tokens is a series of tokens for other types of states, such - * as unit or HMM states. Using 'W' for word tokens, 'U' for unit tokens, 'H' - * for HMM tokens, a token chain can look like: - *

    - * - *
    - * W - U - H - H - H - H - U - H - H - H - H - W
    - * 
    - *

    - * Usually, HMM tokens contains acoustic scores, and word tokens contains - * language scores. If we want to know the total acoustic and language scores - * between any two words, it is unnecessary to keep around the unit and HMM - * tokens. Therefore, all their acoustic and language scores are 'collapsed' - * into one token, so that it will look like: - *

    - * - *
    - * W - P - W
    - * 
    - *

    - * where 'P' is a token that represents the path between the two words, and P - * contains the acoustic and language scores between the two words. It is this - * type of collapsed token tree that the Lattice class is expecting. Normally, - * the task of collapsing the token tree is done by the - * {@link edu.cmu.sphinx.decoder.search.WordPruningBreadthFirstSearchManager}. A - * collapsed token tree can look like: - *

    - * - *
    - *                             "cat" - P - </s>
    - *                            /
    - *                           P
    - *                          /
    - * <s> - P - "a" - P - "big"
    - *                          \
    - *                           P
    - *                            \
    - *                             "dog" - P - </s>
    - * 
    - *

    - * When a Lattice is constructed from a Result, the above collapsed token tree - * together with the alternate hypothesis of "all" instead of "a", will be - * converted into a Lattice that looks like the following: - * - *

    - *       "a"           "cat"
    - *     /     \        /     \
    - * <s>          "big"         - </s>
    - *     \     /        \     /
    - *      "all"          "dog"
    - * 
    - *

    - * Initially, a lattice can have redundant nodes, i.e., nodes referring to the - * same word and that originate from the same parent node. These nodes can be - * collapsed using the {@link LatticeOptimizer}. - *

    - */ -public class Lattice { - - protected Node initialNode; - protected Node terminalNode; - protected Set edges; - protected Map nodes; - protected double logBase; - protected LogMath logMath; - private boolean wordTokenFirst; - private Set visitedWordTokens; - private AlternateHypothesisManager loserManager; - - /** Create an empty Lattice. */ - public Lattice() { - edges = new HashSet(); - nodes = new HashMap(); - logMath = LogMath.getLogMath(); - } - - /** - * Create a Lattice from a Result. - *

    - * The Lattice is created from the Token tree referenced by the Result. The - * Lattice is then optimized to all collapse equivalent paths. - * - * @param result - * the result to convert into a lattice - */ - public Lattice(Result result) { - this(); - visitedWordTokens = new HashSet(); - wordTokenFirst = result.getWordTokenFirst(); - loserManager = result.getAlternateHypothesisManager(); - if (loserManager != null) { - loserManager.purge(); - } - Token token = result.getBestFinalToken(); - assert token != null && token.getWord().isSentenceEndWord(); - if (terminalNode == null) { - terminalNode = new Node(getNodeID(result.getBestToken()), token.getWord(), -1, -1); - initialNode = terminalNode; - addNode(terminalNode); - } - collapseWordToken(token); - } - - private TimeFrame getTimeFrameWordTokenFirst(Token token) { - // TODO: Not implemented yet - return new TimeFrame(0, 0); - } - - private TimeFrame getTimeFrameWordTokenLast(Token token) { - TimeFrame capTimeFrame = new TimeFrame(0, 0); - - Word word = null; - long lastStartTime = -1; - long lastEndTime = -1; - Token dataToken = token; - while (dataToken != null) { - if (dataToken.isWord()) { - if (word != null && lastStartTime >= 0) { - return new TimeFrame(lastStartTime, - lastEndTime); - } - word = dataToken.getWord(); - lastEndTime = dataToken.getCollectTime(); - } - lastStartTime = dataToken.getCollectTime(); - dataToken = dataToken.getPredecessor(); - } - if (lastEndTime >= 0 && lastStartTime >= 0) - return new TimeFrame(lastStartTime, lastEndTime); - - return capTimeFrame; - } - - private TimeFrame getTimeFrame(Token token) { - if (wordTokenFirst) - return getTimeFrameWordTokenFirst(token); - else - return getTimeFrameWordTokenLast(token); - } - - /** - * Returns the node corresponding to the given word token. - * - * @param token - * the token which we want a node of - * @return the node of the given token - */ - private Node getNode(Token token) { - if (token.getWord().isSentenceEndWord()) { - return terminalNode; - } - Node node = nodes.get(getNodeID(token)); - if (node == null) { - TimeFrame timeFrame = getTimeFrame(token); - node = new Node(getNodeID(token), token.getWord(), timeFrame.getStart(), timeFrame.getEnd()); - addNode(node); - } - return node; - } - - /** - * Collapse the given word-ending token. This means collapsing all the unit - * and HMM tokens that correspond to the word represented by this token into - * an edge of the lattice. - * - * @param token - * the word-ending token to collapse - */ - private void collapseWordToken(Token token) { - assert token != null; - if (visitedWordTokens.contains(token)) { - return; - } - visitedWordTokens.add(token); - - collapseWordPath(getNode(token), token.getPredecessor(), token.getAcousticScore() + token.getInsertionScore(), - token.getLanguageScore()); - - if (loserManager != null && loserManager.hasAlternatePredecessors(token)) { - for (Token loser : loserManager.getAlternatePredecessors(token)) { - collapseWordPath(getNode(token), loser, token.getAcousticScore(), token.getLanguageScore()); - } - } - } - - /** - * @param parentWordNode - * the 'toNode' of the returned edge - * @param token - * the predecessor token of the token represented by the - * parentWordNode - * @param acousticScore - * the acoustic score until and including the parent of token - * @param languageScore - * the language score until and including the parent of token - */ - private void collapseWordPath(Node parentWordNode, Token token, float acousticScore, float languageScore) { - - if (token == null) - return; - - if (token.isWord()) { - /* - * If this is a word, create a Node for it, and then create an edge - * from the Node to the parentWordNode - */ - Node fromNode = getNode(token); - addEdge(fromNode, parentWordNode, acousticScore, languageScore); - if (token.getPredecessor() != null) { - /* Collapse the token sequence ending in this token. */ - collapseWordToken(token); - } else { - /* we've reached the sentence start token */ - assert token.getWord().isSentenceStartWord(); - initialNode = fromNode; - } - return; - } - - /* - * If a non-word token, just add the acoustic and language scores to the - * current totals, and then move on to the predecessor token. Fast - * forward through the not so interesting states to save stack space. - */ - while (true) { - acousticScore += token.getAcousticScore() + token.getInsertionScore(); - languageScore += token.getLanguageScore(); - Token preToken = token.getPredecessor(); - - if (preToken == null) - return; - - if (preToken.isWord() || (loserManager != null && loserManager.hasAlternatePredecessors(token))) - break; - token = preToken; - } - - collapseWordPath(parentWordNode, token.getPredecessor(), acousticScore, languageScore); - - /* Traverse the path(s) for the loser token(s). */ - if (loserManager != null && loserManager.hasAlternatePredecessors(token)) { - for (Token loser : loserManager.getAlternatePredecessors(token)) { - collapseWordPath(parentWordNode, loser, acousticScore, languageScore); - } - } - } - - /** - * Returns an ID for the Node associated with the given token. - * - * @param token - * the token associated with the Node - * @return an ID for the Node - */ - private String getNodeID(Token token) { - return Integer.toString(token.hashCode()); - } - - /** - * Create a Lattice from a LAT file. LAT files are created by the method - * Lattice.dump() - * - * @param fileName filename to load from - */ - public Lattice(String fileName) { - this(); - try { - System.err.println("Loading from " + fileName); - - // load the nodes - LineNumberReader in = new LineNumberReader(new FileReader(fileName)); - String line; - while ((line = in.readLine()) != null) { - StringTokenizer tokens = new StringTokenizer(line); - if (tokens.hasMoreTokens()) { - String type = tokens.nextToken(); - - if (type.equals("edge:")) { - Edge.load(this, tokens); - } else if (type.equals("node:")) { - Node.load(this, tokens); - } else if (type.equals("initialNode:")) { - setInitialNode(getNode(tokens.nextToken())); - } else if (type.equals("terminalNode:")) { - setTerminalNode(getNode(tokens.nextToken())); - } else if (type.equals("logBase:")) { - logBase = Double.parseDouble(tokens.nextToken()); - } else { - in.close(); - throw new Error("SYNTAX ERROR: " + fileName + '[' + in.getLineNumber() + "] " + line); - } - } - } - in.close(); - } catch (Exception e) { - throw new Error(e.toString()); - } - } - - public static Lattice readSlf(InputStream stream) throws NumberFormatException, IOException { - Lattice lattice = new Lattice(); - LineNumberReader in = new LineNumberReader(new InputStreamReader(stream)); - String line; - boolean readingNodes = false; - boolean readingEdges = false; - int startIdx = 0; - int endIdx = 1; - double lmscale = 9.5; - while ((line = in.readLine()) != null) { - if (line.contains("Node definitions")) { - readingEdges = false; - readingNodes = true; - continue; - } - if (line.contains("Link definitions")) { - readingEdges = true; - readingNodes = false; - continue; - } - if (line.startsWith("#")) - // skip commented line - continue; - if (readingNodes) { - // reading node info, format: - // I=id t=start_time_sec W=word_transcription - String[] parts = line.split("\\s+"); - if (parts.length != 3 || !parts[0].startsWith("I=") || !parts[1].startsWith("t=") || !parts[2].startsWith("W=")) { - in.close(); - throw new IOException("Unknown node definition: " + line); - } - int idx = Integer.parseInt(parts[0].substring(2)); - // convert to milliseconds inplace - long beginTime = (long) (Double.parseDouble(parts[1].substring(2)) * 1000); - String wordStr = parts[2].substring(2); - boolean isFiller = false; - if (idx == startIdx || wordStr.equals("!ENTER")) { - wordStr = ""; - isFiller = true; - } - if (idx == endIdx || wordStr.equals("!EXIT")) { - wordStr = ""; - isFiller = true; - } - if (wordStr.equals("!NULL")) { - wordStr = ""; - isFiller = true; - } - if (wordStr.startsWith("[")) - isFiller = true; - Word word = new Word(wordStr, new Pronunciation[0], isFiller); - Node node = lattice.addNode(Integer.toString(idx), word, beginTime, -1); - if (wordStr.equals("")) - lattice.setInitialNode(node); - if (wordStr.equals("")) - lattice.setTerminalNode(node); - } else if (readingEdges) { - // reading edge info, format: - // J=id S=from_node E=to_node a=acoustic_score l=language_score - String[] parts = line.split("\\s+"); - if (parts.length != 5 || !parts[1].startsWith("S=") || !parts[2].startsWith("E=") || !parts[3].startsWith("a=") - || !parts[4].startsWith("l=")) { - in.close(); - throw new IOException("Unknown edge definition: " + line); - } - String fromId = parts[1].substring(2); - String toId = parts[2].substring(2); - double ascore = Double.parseDouble(parts[3].substring(2)); - double lscore = Double.parseDouble(parts[4].substring(2)) * lmscale; - lattice.addEdge(lattice.nodes.get(fromId), lattice.nodes.get(toId), ascore, lscore); - } else { - // reading header here if needed - if (line.startsWith("start=")) - startIdx = Integer.parseInt(line.replace("start=", "")); - if (line.startsWith("end=")) - endIdx = Integer.parseInt(line.replace("end=", "")); - if (line.startsWith("lmscale=")) - lmscale = Double.parseDouble(line.replace("lmscale=", "")); - } - } - for (Node node : lattice.nodes.values()) - // calculate end time of nodes depending successors begin time - for (Edge edge : node.getLeavingEdges()) - if ((node.getEndTime() < 0 || node.getEndTime() > edge.getToNode().getBeginTime())) - node.setEndTime(Math.max(edge.getToNode().getBeginTime(), node.getBeginTime())); - return lattice; - } - - public static Lattice readSlf(String fileName) throws IOException { - FileInputStream stream = new FileInputStream(fileName); - Lattice result = readSlf(stream); - stream.close(); - return result; - } - - /** - * Add an edge from fromNode to toNode. This method creates the Edge object - * and does all the connecting - * - * @param fromNode from node - * @param toNode to node - * @param acousticScore acoustic score - * @param lmScore langauge model score - * @return the new Edge - */ - public Edge addEdge(Node fromNode, Node toNode, double acousticScore, double lmScore) { - Edge e = new Edge(fromNode, toNode, acousticScore, lmScore); - fromNode.addLeavingEdge(e); - toNode.addEnteringEdge(e); - edges.add(e); - return e; - } - - /** - * Add a Node with a given ID that represents the theory that a given word - * was spoken over a given period of time. This method is used when loading - * Lattices from .LAT files. - * - * @param id id of the node - * @param word word word - * @param beginTime begin time - * @param endTime end time - * @return the new Node - */ - protected Node addNode(String id, Word word, long beginTime, long endTime) { - Node n = new Node(id, word, beginTime, endTime); - addNode(n); - return n; - } - - /** - * Add a Node with a given ID that represents the theory that a given word - * was spoken over a given period of time. This method is used when loading - * Lattices from .LAT files. - * - * @param id id - * @param word word - * @param beginTime begin time - * @param endTime end time - * @return the new Node - */ - public Node addNode(String id, String word, long beginTime, long endTime) { - Word w = new Word(word, new Pronunciation[0], false); - return addNode(id, w, beginTime, endTime); - } - - /** - * Test to see if the Lattice contains an Edge - * - * @param edge edge to check - * @return true if yes - */ - boolean hasEdge(Edge edge) { - return edges.contains(edge); - } - - /** - * Test to see if the Lattice contains a Node - * - * @param node node to check - * @return true if yes - */ - boolean hasNode(Node node) { - return hasNode(node.getId()); - } - - /** - * Test to see if the Lattice already contains a Node corresponding to a - * given Token. - * - * @param ID - * the ID of the Node to find - * @return true if yes - */ - protected boolean hasNode(String ID) { - return nodes.containsKey(ID); - } - - /** - * Add a Node to the set of all Nodes - * - * @param n node to remove - */ - protected void addNode(Node n) { - assert !hasNode(n.getId()); - nodes.put(n.getId(), n); - } - - /** - * Remove a Node from the set of all Nodes - * - * @param n node to remove - */ - protected void removeNode(Node n) { - assert hasNode(n.getId()); - nodes.remove(n.getId()); - } - - /** - * Get the Node associated with an ID - * - * @param id id to look for - * @return the Node - */ - protected Node getNode(String id) { - return (nodes.get(id)); - } - - /** - * Get a copy of the Collection of all Nodes. Used by LatticeOptimizer to - * avoid Concurrent modification of the nodes list. - * - * @return a copy of the collection of Nodes - */ - protected Collection getCopyOfNodes() { - return new ArrayList(nodes.values()); - } - - /** - * Get the Collection of all Nodes. - * - * @return the collection of all Nodes - */ - public Collection getNodes() { - return nodes.values(); - } - - /** - * Remove an Edge from the set of all Edges. - * - * @param e edge to remove - */ - protected void removeEdge(Edge e) { - edges.remove(e); - } - - /** - * Get the set of all Edges. - * - * @return the set of all edges - */ - public Collection getEdges() { - return edges; - } - - /** - * Dump the Lattice in the form understood by AiSee (a graph visualization - * tool). See http://www.AbsInt.com - * - * @param fileName file to store to - * @param title title in the file - */ - public void dumpAISee(String fileName, String title) { - try { - System.err.println("Dumping " + title + " to " + fileName); - FileWriter f = new FileWriter(fileName); - f.write("graph: {\n"); - f.write("title: \"" + title + "\"\n"); - f.write("display_edge_labels: yes\n"); - /* - * f.write( "colorentry 32: 25 225 0\n"); f.write( - * "colorentry 33: 50 200 0\n"); f.write( - * "colorentry 34: 75 175 0\n"); f.write( - * "colorentry 35: 100 150 0\n"); f.write( - * "colorentry 36: 125 125 0\n"); f.write( - * "colorentry 37: 150 100 0\n"); f.write( - * "colorentry 38: 175 75 0\n"); f.write( - * "colorentry 39: 200 50 0\n"); f.write( - * "colorentry 40: 225 25 0\n"); f.write( - * "colorentry 41: 250 0 0\n"); f.write( "color: black\n"); f.write( - * "orientation: left_to_right\n"); f.write( "xspace: 10\n"); - * f.write( "yspace: 10\n"); - */ - - for (Node node : nodes.values()) { - node.dumpAISee(f); - } - for (Edge edge : edges) { - edge.dumpAISee(f); - } - f.write("}\n"); - f.close(); - } catch (IOException e) { - throw new Error(e.toString()); - } - } - - /** - * Dump the Lattice in the form understood by Graphviz. See - * http://graphviz.org - * - * @param fileName filename to store - * @param title title in graph - */ - public void dumpDot(String fileName, String title) { - try { - System.err.println("Dumping " + title + " to " + fileName); - FileWriter f = new FileWriter(fileName); - f.write("digraph \"" + title + "\" {\n"); - f.write("rankdir = LR\n"); - - for (Node node : nodes.values()) { - node.dumpDot(f); - } - for (Edge edge : edges) { - edge.dumpDot(f); - } - f.write("}\n"); - f.close(); - } catch (IOException e) { - throw new Error(e.toString()); - } - } - - public void dumpSlf(Writer w) throws IOException { - w.write("VERSION=1.1\n"); - w.write("UTTERANCE=test\n"); - w.write("base=1.0001\n"); - w.write("lmscale=9.5\n"); - w.write("start=0\n"); - w.write("end=1\n"); - w.write("#\n# Size line.\n#\n"); - w.write("NODES=" + nodes.size() + " LINKS=" + this.edges.size() + "\n"); - - // we cannot use the id from sphinx as node id. The id from sphinx may - // be arbitrarily big. - // Certain tools, such as lattice-tool from srilm, may elect to use an - // array to hold the nodes, - // which might cause out of memory problem due to huge array. - HashMap nodeIdMap = new HashMap(); - - nodeIdMap.put(initialNode.getId(), 0); - nodeIdMap.put(terminalNode.getId(), 1); - - int count = 2; - w.write("#\n# Node definitions.\n#\n"); - for (Node node : nodes.values()) { - if (nodeIdMap.containsKey(node.getId())) { - w.write("I=" + nodeIdMap.get(node.getId())); - } else { - nodeIdMap.put(node.getId(), count); - w.write("I=" + count); - count++; - } - w.write(" t=" + (node.getBeginTime() * 1.0 / 1000)); - String spelling = node.getWord().getSpelling(); - if (spelling.startsWith("<")) - spelling = "!NULL"; - w.write(" W=" + spelling); - w.write("\n"); - } - w.write("#\n# Link definitions.\n#\n"); - count = 0; - for (Edge edge : edges) { - w.write("J=" + count); - w.write(" S=" + nodeIdMap.get(edge.getFromNode().getId())); - w.write(" E=" + nodeIdMap.get(edge.getToNode().getId())); - w.write(" a=" + edge.getAcousticScore()); - w.write(" l=" + edge.getLMScore() / 9.5); - w.write("\n"); - count++; - } - w.flush(); - } - - /** - * Dump the Lattice as a .LAT file - * - * @param out writer for the lattice - * @throws IOException if error occurred - */ - protected void dump(PrintWriter out) throws IOException { - // System.err.println( "Dumping to " + out ); - for (Node node : nodes.values()) { - node.dump(out); - } - for (Edge edge : edges) { - edge.dump(out); - } - out.println("initialNode: " + initialNode.getId()); - out.println("terminalNode: " + terminalNode.getId()); - out.println("logBase: " + logMath.getLogBase()); - out.flush(); - } - - /** - * Dump the Lattice as a .LAT file. Used to save Lattices as ASCII files for - * testing and experimentation. - * - * @param file file to store - */ - public void dump(String file) { - try { - dump(new PrintWriter(new FileWriter(file))); - } catch (IOException e) { - throw new Error(e.toString()); - } - } - - /** - * Remove a Node and all Edges connected to it. Also remove those Edges from - * all connected Nodes. - * - * @param n node to remove - */ - protected void removeNodeAndEdges(Node n) { - - // System.err.println("Removing node " + n + " and associated edges"); - for (Edge e : n.getLeavingEdges()) { - e.getToNode().removeEnteringEdge(e); - // System.err.println( "\tRemoving " + e ); - edges.remove(e); - } - for (Edge e : n.getEnteringEdges()) { - e.getFromNode().removeLeavingEdge(e); - // System.err.println( "\tRemoving " + e ); - edges.remove(e); - } - // System.err.println( "\tRemoving " + n ); - nodes.remove(n.getId()); - - assert checkConsistency(); - } - - /** - * Remove a Node and cross connect all Nodes with Edges to it. - *

    - * For example given - *

    - * Nodes A, B, X, M, N Edges A-->X, B-->X, X-->M, X-->N - *

    - * Removing and cross connecting X would result in - *

    - * Nodes A, B, M, N Edges A-->M, A-->N, B-->M, B-->N - * - * @param n node to remove - */ - protected void removeNodeAndCrossConnectEdges(Node n) { - System.err.println("Removing node " + n + " and cross connecting edges"); - for (Edge ei : n.getEnteringEdges()) { - for (Edge ej : n.getLeavingEdges()) { - addEdge(ei.getFromNode(), ej.getToNode(), ei.getAcousticScore(), ei.getLMScore()); - } - } - removeNodeAndEdges(n); - - assert checkConsistency(); - } - - /** - * Get the initialNode for this Lattice. This corresponds usually to the <s> - * symbol - * - * @return the initial Node - */ - public Node getInitialNode() { - return initialNode; - } - - /** - * Set the initialNode for this Lattice. This corresponds usually to the <s> - * symbol - * - * @param initialNode node to set as initial - */ - public void setInitialNode(Node initialNode) { - this.initialNode = initialNode; - } - - /** - * Get the terminalNode for this Lattice. This corresponds usually to the - * </s> symbol - * - * @return the terminal node - */ - public Node getTerminalNode() { - return terminalNode; - } - - /** - * Set the terminalNode for this Lattice. This corresponds usually to the - * </s> symbol - * - * @param terminalNode not to set as terminal - */ - public void setTerminalNode(Node terminalNode) { - this.terminalNode = terminalNode; - } - - /** Dump all paths through this Lattice. Used for debugging. */ - public void dumpAllPaths() { - for (String path : allPaths()) { - System.out.println(path); - } - } - - /** - * Generate a List of all paths through this Lattice. - * - * @return a lists of lists of Nodes - */ - public List allPaths() { - return allPathsFrom("", initialNode); - } - - /** - * Internal routine used to generate all paths starting at a given node. - * - * @param path word path - * @param n node to start - * @return a list of lists of Nodes - */ - protected List allPathsFrom(String path, Node n) { - String p = path + ' ' + n.getWord(); - List l = new LinkedList(); - if (n == terminalNode) { - l.add(p); - } else { - for (Edge e : n.getLeavingEdges()) { - l.addAll(allPathsFrom(p, e.getToNode())); - } - } - return l; - } - - boolean checkConsistency() { - for (Node n : nodes.values()) { - for (Edge e : n.getEnteringEdges()) { - if (!hasEdge(e)) { - throw new Error("Lattice has NODE with missing FROM edge: " + n + ',' + e); - } - } - for (Edge e : n.getLeavingEdges()) { - if (!hasEdge(e)) { - throw new Error("Lattice has NODE with missing TO edge: " + n + ',' + e); - } - } - } - for (Edge e : edges) { - if (!hasNode(e.getFromNode())) { - throw new Error("Lattice has EDGE with missing FROM node: " + e); - } - if (!hasNode(e.getToNode())) { - throw new Error("Lattice has EDGE with missing TO node: " + e); - } - if (!e.getToNode().hasEdgeFromNode(e.getFromNode())) { - throw new Error("Lattice has EDGE with TO node with no corresponding FROM edge: " + e); - } - if (!e.getFromNode().hasEdgeToNode(e.getToNode())) { - throw new Error("Lattice has EDGE with FROM node with no corresponding TO edge: " + e); - } - } - return true; - } - - protected void sortHelper(Node n, List sorted, Set visited) { - if (visited.contains(n)) { - return; - } - visited.add(n); - if (n == null) { - throw new Error("Node is null"); - } - for (Edge e : n.getLeavingEdges()) { - sortHelper(e.getToNode(), sorted, visited); - } - sorted.add(n); - } - - /** - * Topologically sort the nodes in this lattice. - * - * @return Topologically sorted list of nodes in this lattice. - */ - public List sortNodes() { - List sorted = new ArrayList(nodes.size()); - sortHelper(initialNode, sorted, new HashSet()); - Collections.reverse(sorted); - return sorted; - } - - /** - * Compute the utterance-level posterior for every node in the lattice, i.e. - * the probability that this node occurs on any path through the lattice. - * Uses a forward-backward algorithm specific to the nature of non-looping - * left-to-right lattice structures. - *

    - * Node posteriors can be retrieved by calling getPosterior() on Node - * objects. - * - * @param languageModelWeightAdjustment - * the weight multiplier that will be applied to language score - * already scaled by language weight - */ - public void computeNodePosteriors(float languageModelWeightAdjustment) { - computeNodePosteriors(languageModelWeightAdjustment, false); - } - - /** - * Compute the utterance-level posterior for every node in the lattice, i.e. - * the probability that this node occurs on any path through the lattice. - * Uses a forward-backward algorithm specific to the nature of non-looping - * left-to-right lattice structures. - *

    - * Node posteriors can be retrieved by calling getPosterior() on Node - * objects. - * - * @param languageModelWeightAdjustment - * the weight multiplier that will be applied to language score - * already scaled by language weight - * @param useAcousticScoresOnly - * use only the acoustic scores to compute the posteriors, ignore - * the language weight and scores - */ - public void computeNodePosteriors(float languageModelWeightAdjustment, boolean useAcousticScoresOnly) { - if (initialNode == null) - return; - // forward - initialNode.setForwardScore(LogMath.LOG_ONE); - initialNode.setViterbiScore(LogMath.LOG_ONE); - List sortedNodes = sortNodes(); - assert sortedNodes.get(0) == initialNode; - for (Node currentNode : sortedNodes) { - for (Edge edge : currentNode.getLeavingEdges()) { - double forwardProb = edge.getFromNode().getForwardScore(); - double edgeScore = computeEdgeScore(edge, languageModelWeightAdjustment, useAcousticScoresOnly); - forwardProb += edgeScore; - edge.getToNode().setForwardScore( - logMath.addAsLinear((float) forwardProb, (float) edge.getToNode().getForwardScore())); - double vs = edge.getFromNode().getViterbiScore() + edgeScore; - if (edge.getToNode().getBestPredecessor() == null || vs > edge.getToNode().getViterbiScore()) { - edge.getToNode().setBestPredecessor(currentNode); - edge.getToNode().setViterbiScore(vs); - } - } - } - - // backward - terminalNode.setBackwardScore(LogMath.LOG_ONE); - assert sortedNodes.get(sortedNodes.size() - 1) == terminalNode; - ListIterator n = sortedNodes.listIterator(sortedNodes.size() - 1); - while (n.hasPrevious()) { - Node currentNode = n.previous(); - Collection currentEdges = currentNode.getLeavingEdges(); - for (Edge edge : currentEdges) { - double backwardProb = edge.getToNode().getBackwardScore(); - backwardProb += computeEdgeScore(edge, languageModelWeightAdjustment, useAcousticScoresOnly); - edge.getFromNode().setBackwardScore( - logMath.addAsLinear((float) backwardProb, (float) edge.getFromNode().getBackwardScore())); - } - } - - // inner - double normalizationFactor = terminalNode.getForwardScore(); - for (Node node : nodes.values()) { - node.setPosterior((node.getForwardScore() + node.getBackwardScore()) - normalizationFactor); - } - } - - /** - * Retrieves the MAP path from this lattice. Only works once - * computeNodePosteriors has been called. - * - * @return a list of nodes representing the MAP path. - */ - public List getViterbiPath() { - LinkedList path = new LinkedList(); - Node n = terminalNode; - while (n != initialNode) { - path.addFirst(n); - n = n.getBestPredecessor(); - } - path.addFirst(initialNode); - return path; - } - - /** - * Retrieves the list of WordResult from this lattice. Only works once - * computeNodePosteriors has been called. - * - * @return list of WordResult - */ - public List getWordResultPath() { - List path = getViterbiPath(); - LinkedList wordResults = new LinkedList(); - for (Node node : path) { - if (node.getWord().isSentenceStartWord() || node.getWord().isSentenceEndWord()) - continue; - wordResults.add(new WordResult(node)); - } - return wordResults; - } - - /** - * Computes the score of an edge. It multiplies on adjustment since language - * model score is already scaled by language model weight in linguist. - * - * @param edge - * the edge which score we want to compute - * @param languageModelWeightAdjustment - * the weight multiplier that will be applied to language score - * already scaled by language weight - * @return the score of an edge - */ - private double computeEdgeScore(Edge edge, float languageModelWeightAdjustment, boolean useAcousticScoresOnly) { - if (useAcousticScoresOnly) { - return edge.getAcousticScore(); - } else { - return edge.getAcousticScore() + edge.getLMScore() * languageModelWeightAdjustment; - } - } - - /** - * Returns true if the given Lattice is equivalent to this Lattice. Two - * lattices are equivalent if all their nodes and edges are equivalent. - * - * @param other - * the Lattice to compare this Lattice against - * @return true if the Lattices are equivalent; false otherwise - */ - public boolean isEquivalent(Lattice other) { - return checkNodesEquivalent(initialNode, other.getInitialNode()); - } - - /** - * Returns true if the two lattices starting at the given two nodes are - * equivalent. It recursively checks all the child nodes until these two - * nodes until there are no more child nodes. - * - * @param n1 - * starting node of the first lattice - * @param n2 - * starting node of the second lattice - * @return true if the two lattices are equivalent - */ - private boolean checkNodesEquivalent(Node n1, Node n2) { - assert n1 != null && n2 != null; - - boolean equivalent = n1.isEquivalent(n2); - if (equivalent) { - Collection leavingEdges = n1.getCopyOfLeavingEdges(); - Collection leavingEdges2 = n2.getCopyOfLeavingEdges(); - - System.out.println("# edges: " + leavingEdges.size() + ' ' + leavingEdges2.size()); - - for (Edge edge : leavingEdges) { - /* find an equivalent edge from n2 for this edge */ - Edge e2 = n2.findEquivalentLeavingEdge(edge); - - if (e2 == null) { - System.out.println("Equivalent edge not found, lattices not equivalent."); - return false; - } else { - if (!leavingEdges2.remove(e2)) { - /* - * if it cannot be removed, then the leaving edges are - * not the same - */ - System.out.println("Equivalent edge already matched, lattices not equivalent."); - return false; - } else { - /* recursively check the two child nodes */ - equivalent &= checkNodesEquivalent(edge.getToNode(), e2.getToNode()); - if (!equivalent) { - return false; - } - } - } - } - if (!leavingEdges2.isEmpty()) { - System.out.println("One lattice has too many edges."); - return false; - } - } - return equivalent; - } - - boolean isFillerNode(Node node) { - Word word = node.getWord(); - if (word.isSentenceStartWord() || word.isSentenceEndWord()) - return false; - return word.isFiller(); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/LatticeOptimizer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/LatticeOptimizer.java deleted file mode 100755 index 8cafbf4b..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/LatticeOptimizer.java +++ /dev/null @@ -1,425 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.result; - -import java.util.List; -import java.util.ArrayList; - -/** - * Class used to collapse all equivalent paths in a Lattice. Results in a Lattices that is deterministic (no Node has - * Edges to two or more equivalent Nodes), and minimal (no Node has Edge from two or more equivalent Nodes). - */ - -public class LatticeOptimizer { - - protected final Lattice lattice; - - - /** - * Create a new Lattice optimizer - * - * @param lattice lattice to optimize - */ - public LatticeOptimizer(Lattice lattice) { - this.lattice = lattice; - } - - - /** - * Code for optimizing Lattices. An optimal lattice has all the same paths as the original, but with fewer nodes - * and edges - *

    - * Note that these methods are all in Lattice so that it is easy to change the definition of "equivalent" nodes and - * edges. For example, an equivalent node might have the same word, but start or end at a different time. - *

    - * To experiment with other definitions of equivalent, just create a superclass of Lattice. - */ - public void optimize() { - optimizeForward(); - optimizeBackward(); - } - - - /** - * Make the Lattice deterministic, so that no node has multiple outgoing edges to equivalent nodes. - *

    - * Given two edges from the same node to two equivalent nodes, replace with one edge to one node with outgoing edges - * that are a union of the outgoing edges of the old two nodes. - *

    - * A --> B --> C \--> B' --> Y - *

    - * where B and B' are equivalent. - *

    - * is replaced with - *

    - * A --> B" --> C \--> Y - *

    - * where B" is the merge of B and B' - *

    - * Note that equivalent nodes must have the same incomming edges. For example - *

    - * A --> B \ \ X --> B' - *

    - * B and B' would not be equivalent because the incomming edges are different - */ - protected void optimizeForward() { - //System.err.println("*** Optimizing forward ***"); - - boolean moreChanges = true; - while (moreChanges) { - moreChanges = false; - // search for a node that can be optimized - // note that we use getCopyOfNodes to avoid concurrent changes to nodes - for (Node n : lattice.getCopyOfNodes()) { - // we are iterating down a list of node before optimization - // previous iterations may have removed nodes from the list - // therefore we have to check that the node stiff exists - if (lattice.hasNode(n)) { - moreChanges |= optimizeNodeForward(n); - } - } - } - } - - - /** - * Look for 2 "to" edges to equivalent nodes. Replace the edges with one edge to one node that is a merge of the - * equivalent nodes - *

    - * nodes are equivalent if they have equivalent from edges, and the same label - *

    - * merged nodes have a union of "from" and "to" edges - * - * @param n node - * @return true if Node n required an optimize forward - */ - protected boolean optimizeNodeForward(Node n) { - assert lattice.hasNode(n); - - List leavingEdges = new ArrayList(n.getLeavingEdges()); - for (int j = 0; j < leavingEdges.size(); j++) { - Edge e = leavingEdges.get(j); - for (int k = j + 1; k < leavingEdges.size(); k++) { - Edge e2 = leavingEdges.get(k); - - /* - * If these are not the same edge, and they point to - * equivalent nodes, we have a hit, return true - */ - assert e != e2; - if (equivalentNodesForward(e.getToNode(), e2.getToNode())) { - mergeNodesAndEdgesForward(e, e2); - return true; - } - } - } - /* - * return false if we did not get a hit - */ - return false; - } - - - /** - * nodes are equivalent forward if they have "from" edges from the same nodes, and have equivalent labels (Token, - * start/end times) - * - * @param n1 first node - * @param n2 second node - * @return true if n1 and n2 are "equivalent forwards" - */ - protected boolean equivalentNodesForward(Node n1, Node n2) { - - assert lattice.hasNode(n1); - assert lattice.hasNode(n2); - - // do the labels match? - if (!equivalentNodeLabels(n1, n2)) return false; - - // if they have different number of "from" edges they are not equivalent - // or if there is a "from" edge with no match then the nodes are not - // equivalent - return n1.hasEquivalentEnteringEdges(n2); - } - - - /** - * given edges e1 and e2 from node n to nodes n1 and n2 - *

    - * merge e1 and e2, that is, merge the scores of e1 and e2 create n' that is a merge of n1 and n2 add n' add edge e' - * from n to n' - *

    - * remove n1 and n2 and all associated edges - * - * @param e1 first edge - * @param e2 second edge - */ - protected void mergeNodesAndEdgesForward(Edge e1, Edge e2) { - assert lattice.hasNode(e1.getFromNode()); - assert lattice.hasEdge(e1); - assert lattice.hasEdge(e2); - assert e1.getFromNode() == e2.getFromNode(); - - Node n1 = e1.getToNode(); - Node n2 = e2.getToNode(); - - assert n1.hasEquivalentEnteringEdges(n2); - assert n1.getWord().equals(n2.getWord()); - - for (Edge edge : n2.getEnteringEdges()) { - Edge anotherEdge = n1.getEdgeFromNode(edge.getFromNode()); - assert anotherEdge != null; - anotherEdge.setAcousticScore - (mergeAcousticScores(edge.getAcousticScore(), - anotherEdge.getAcousticScore())); - anotherEdge.setLMScore(mergeLanguageScores(edge.getLMScore(), - anotherEdge.getLMScore())); - } - - // add n2's edges to n1 - for (Edge edge : n2.getLeavingEdges()) { - Edge anotherEdge = n1.getEdgeToNode(edge.getToNode()); - if (anotherEdge == null) { - lattice.addEdge(n1, edge.getToNode(), - edge.getAcousticScore(), edge.getLMScore()); - } else { - // if we got here then n1 and n2 had edges to the same node - // choose the edge with best score - anotherEdge.setAcousticScore - (mergeAcousticScores(edge.getAcousticScore(), - anotherEdge.getAcousticScore())); - anotherEdge.setLMScore(mergeLanguageScores(edge.getLMScore(), - anotherEdge.getLMScore())); - } - } - - // remove n2 and all associated edges - lattice.removeNodeAndEdges(n2); - } - - - /** - * Minimize the Lattice deterministic, so that no node has multiple incoming edges from equivalent nodes. - *

    - * Given two edges from equivalent nodes to a single nodes, replace with one edge from one node with incoming edges - * that are a union of the incoming edges of the old two nodes. - *

    - * A --> B --> C X --> B' --/ - *

    - * where B and B' are equivalent. - *

    - * is replaced with - *

    - * A --> B" --> C X --/ - *

    - * where B" is the merge of B and B' - *

    - * Note that equivalent nodes must have the same outgoing edges. For example - *

    - * A --> X \ \ \ A' --> B - *

    - * A and A' would not be equivalent because the outgoing edges are different - */ - protected void optimizeBackward() { - //System.err.println("*** Optimizing backward ***"); - - boolean moreChanges = true; - while (moreChanges) { - moreChanges = false; - // search for a node that can be optimized - // note that we use getCopyOfNodes to avoid concurrent changes to nodes - for (Node n : lattice.getCopyOfNodes()) { - // we are iterating down a list of node before optimization - // previous iterations may have removed nodes from the list - // therefore we have to check that the node stiff exists - if (lattice.hasNode(n)) { - moreChanges |= optimizeNodeBackward(n); - } - } - } - } - - - /** - * Look for 2 entering edges from equivalent nodes. Replace the edges with one edge to one new node that is a merge - * of the equivalent nodes Nodes are equivalent if they have equivalent to edges, and the same label. Merged nodes - * have a union of entering and leaving edges - * - * @param n node - * @return true if Node n required optimizing backwards - */ - protected boolean optimizeNodeBackward(Node n) { - List enteringEdges = new ArrayList(n.getEnteringEdges()); - for (int j = 0; j < enteringEdges.size(); j++) { - Edge e = enteringEdges.get(j); - for (int k = j + 1; k < n.getEnteringEdges().size(); k++) { - Edge e2 = enteringEdges.get(k); - - /* - * If these are not the same edge, and they point to - * equivalent nodes, we have a hit, return true - */ - assert e != e2; - if (equivalentNodesBackward(e.getFromNode(), - e2.getFromNode())) { - mergeNodesAndEdgesBackward(e, e2); - return true; - } - } - } - /* - * return false if we did not get a hit - */ - return false; - } - - - /** - * nodes are equivalent backward if they have "to" edges to the same nodes, and have equivalent labels (Token, - * start/end times) - * - * @param n1 first node - * @param n2 second node - * @return true if n1 and n2 are "equivalent backwards" - */ - protected boolean equivalentNodesBackward(Node n1, Node n2) { - - assert lattice.hasNode(n1); - assert lattice.hasNode(n2); - - // do the labels match? - if (!equivalentNodeLabels(n1, n2)) return false; - - // if they have different number of "to" edges they are not equivalent - // or if there is a "to" edge with no match then the nodes are not equiv - return n1.hasEquivalentLeavingEdges(n2); - } - - - /** - * Is the contents of these Node equivalent? - * - * @param n1 first node - * @param n2 second node - * @return true if n1 and n2 have "equivalent labels" - */ - protected boolean equivalentNodeLabels(Node n1, Node n2) { - return (n1.getWord().equals(n2.getWord()) && - (n1.getBeginTime() == n2.getBeginTime() && - n1.getEndTime() == n2.getEndTime())); - } - - - /** - * given edges e1 and e2 to node n from nodes n1 and n2 - *

    - * merge e1 and e2, that is, merge the scores of e1 and e2 create n' that is a merge of n1 and n2 add n' add edge e' - * from n' to n - *

    - * remove n1 and n2 and all associated edges - * - * @param e1 first edge - * @param e2 second edge - */ - protected void mergeNodesAndEdgesBackward(Edge e1, Edge e2) { - assert lattice.hasNode(e1.getToNode()); - assert lattice.hasEdge(e1); - assert lattice.hasEdge(e2); - assert e1.getToNode() == e2.getToNode(); - - Node n1 = e1.getFromNode(); - Node n2 = e2.getFromNode(); - - assert n1.hasEquivalentLeavingEdges(n2); - assert n1.getWord().equals(n2.getWord()); - - for (Edge edge : n2.getLeavingEdges()) { - Edge anotherEdge = n1.getEdgeToNode(edge.getToNode()); - assert anotherEdge != null; - anotherEdge.setAcousticScore - (mergeAcousticScores(edge.getAcousticScore(), - anotherEdge.getAcousticScore())); - anotherEdge.setLMScore(mergeLanguageScores(edge.getLMScore(), - anotherEdge.getLMScore())); - } - - // add n2's "from" edges to n1 - for (Edge edge : n2.getEnteringEdges()) { - Edge anotherEdge = n1.getEdgeFromNode(edge.getFromNode()); - if (anotherEdge == null) { - lattice.addEdge(edge.getFromNode(), n1, - edge.getAcousticScore(), edge.getLMScore()); - } else { - // if we got here then n1 and n2 had edges from the same node - // choose the edge with best score - anotherEdge.setAcousticScore - (mergeAcousticScores(edge.getAcousticScore(), - anotherEdge.getAcousticScore())); - anotherEdge.setLMScore(mergeLanguageScores(edge.getLMScore(), - anotherEdge.getLMScore())); - } - } - - // remove n2 and all associated edges - lattice.removeNodeAndEdges(n2); - } - - - /** Remove all Nodes that have no Edges to them (but not <s>) */ - protected void removeHangingNodes() { - for (Node n : lattice.getCopyOfNodes()) { - if (lattice.hasNode(n)) { - if (n == lattice.getInitialNode()) { - - } else if (n == lattice.getTerminalNode()) { - - } else { - if (n.getLeavingEdges().isEmpty() - || n.getEnteringEdges().isEmpty()) { - lattice.removeNodeAndEdges(n); - removeHangingNodes(); - return; - } - } - } - } - } - - - /** - * Provides a single method to merge acoustic scores, so that changes to how acoustic score are merged can be made - * at one point only. - * - * @param score1 the first acoustic score - * @param score2 the second acoustic score - * @return the merged acoustic score - */ - private double mergeAcousticScores(double score1, double score2) { - // return lattice.getLogMath().addAsLinear(score1, score2); - return Math.max(score1, score2); - } - - - /** - * Provides a single method to merge language scores, so that changes to how language score are merged can be made - * at one point only. - * - * @param score1 the first language score - * @param score2 the second language score - * @return the merged language score - */ - private double mergeLanguageScores(double score1, double score2) { - // return lattice.getLogMath().addAsLinear(score1, score2); - return Math.max(score1, score2); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/LatticeRescorer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/LatticeRescorer.java deleted file mode 100755 index 772a0146..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/LatticeRescorer.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.result; - -import java.util.LinkedList; -import java.util.List; - -import edu.cmu.sphinx.linguist.WordSequence; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.linguist.language.ngram.LanguageModel; -import edu.cmu.sphinx.util.LogMath; - -/** - * Class to rescore the lattice with the new Language model. - */ - -public class LatticeRescorer { - - protected final Lattice lattice; - protected final LanguageModel model; - private int depth; - private float languageWeigth = 8.0f; - - /** - * Create a new Lattice optimizer - * - * @param lattice lattice to rescore - * @param model language model to rescore - */ - public LatticeRescorer(Lattice lattice, LanguageModel model) { - this.lattice = lattice; - this.model = model; - depth = model.getMaxDepth(); - } - - - private void rescoreEdges() { - for (Edge edge : lattice.edges) { - - float maxProb = LogMath.LOG_ZERO; - if (lattice.isFillerNode(edge.getToNode())) { - edge.setLMScore(maxProb); - continue; - } - - List paths = allPathsTo("", edge, depth); - for (String path : paths) { - List wordList = new LinkedList(); - for (String pathWord : path.split(" ")) { - wordList.add(new Word(pathWord, null, false)); - } - wordList.add(edge.getToNode().getWord()); - - WordSequence seq = new WordSequence(wordList); - float prob = model.getProbability(seq) * languageWeigth; - if (maxProb < prob) - maxProb = prob; - } - edge.setLMScore(maxProb); - } - } - - protected List allPathsTo(String path, Edge edge, int currentDepth) { - List l = new LinkedList(); - String p = path; - boolean isFiller = lattice.isFillerNode(edge.getFromNode()); - if (!isFiller) - p = edge.getFromNode().getWord().toString() + ' ' + p; - - if (currentDepth == 2 - || edge.getFromNode().equals(lattice.getInitialNode())) { - l.add(p); - } else { - int decrement = isFiller ? 0 : 1; - for (Edge e : edge.getFromNode().getEnteringEdges()) { - l.addAll(allPathsTo(p, e, currentDepth - decrement)); - } - } - return l; - } - - public void rescore() { - rescoreEdges(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/Nbest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/Nbest.java deleted file mode 100755 index b04bafe8..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/Nbest.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright 1999-2013 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.result; - -import java.util.Collection; -import java.util.HashSet; - -/** - * NBest list with A* - */ - -public class Nbest { - - protected Lattice lattice; - - public Nbest(Lattice lattice) { - this.lattice = lattice; - } - - class NBestPath implements Comparable { - String path; - Node node; - double score; - double forwardScore; - - public NBestPath(String path, Node node, double score, - double forwardScore) { - super(); - this.path = path; - this.node = node; - this.score = score; - this.forwardScore = forwardScore; - } - - public int compareTo(NBestPath o) { - return Double.compare(score, o.score); - } - - @Override - public String toString() { - return path + " [" + score + ',' + forwardScore + ']'; - } - } - - public Collection getNbest(int n) { - HashSet result = new HashSet(); - BoundedPriorityQueue queue = - new BoundedPriorityQueue(n); - - queue.add(new NBestPath("", lattice.getInitialNode(), 0, 0)); - - while (result.size() < n && queue.size() > 0) { - NBestPath path = queue.poll(); - if (path.node.equals(lattice.terminalNode)) { - result.add(path.path); - continue; - } - - for (Edge e : path.node.getLeavingEdges()) { - Node newNode = e.getToNode(); - - double newForwardScore = path.forwardScore - + e.getAcousticScore() + e.getLMScore(); - - double newScore = newForwardScore + newNode.getBackwardScore(); - - String newPathString = getNewPathString(path, newNode); - - NBestPath newPath = new NBestPath(newPathString, newNode, newScore, newForwardScore); - - queue.add(newPath); - } - // printQueue(queue); - } - - return result; - } - - private String getNewPathString(NBestPath path, Node newNode) { - String newPathString; - if (newNode.getWord().isSentenceEndWord()) - newPathString = path.path + " "; - else if (newNode.getWord().isFiller()) - newPathString = path.path; - else - newPathString = path.path + " " + newNode.getWord(); - return newPathString; - } - - @SuppressWarnings("unused") - private void printQueue(BoundedPriorityQueue queue) { - System.out.println(); - for (NBestPath p : queue) { - System.out.println(p); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/Node.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/Node.java deleted file mode 100755 index 4604abc4..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/Node.java +++ /dev/null @@ -1,680 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.result; - -import edu.cmu.sphinx.linguist.dictionary.Pronunciation; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.TimeFrame; - -import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.*; - -/** - *

    - * A node is part of Lattices, representing the theory that a word was spoken over a given period of time. A node also - * has a set of entering and leaving {@link edu.cmu.sphinx.result.Edge edges}, connecting it to other nodes. One can get - * and set the beginning and end frames of the word via the getBeginTime and getEndTime methods. When setting these - * times, the beginning time must be earlier or equal to the end time, otherwise an error will be thrown.

    - *

    - * The posterior probability of any word in a word lattice is the probability that the node representing that word - * occurs on any path through the lattice. It is usually computed as the ratio of the total likelihood scores of all - * paths through the lattice that pass through the node, to the total likelihood score of all paths through the lattice. - * Path scores are usually computed using the acoustic likelihoods of the nodes, although language scores can also be - * incorporated. The posterior probabilities of an entire lattice is usually computed efficiently using the - * Forward-Backward Algorithm. Refer to the {@link edu.cmu.sphinx.result.Lattice#computeNodePosteriors - * computeNodePosteriors} method in the Lattice class for details.

    - */ -public class Node { - - // used to generate unique IDs for new Nodes. - private static int nodeCount; - - private String id; - private Word word; - private long beginTime = -1; - private long endTime = -1; - private List enteringEdges; - private List leavingEdges; - private double forwardScore; - private double backwardScore; - private double posterior; - private Node bestPredecessor; - private double viterbiScore; - private Set descendants; - - - { - enteringEdges = new ArrayList(); - leavingEdges = new ArrayList(); - nodeCount++; - } - - - /** - * Create a new Node - * - * @param word the word of this node - * @param beginTime the start time of the word - * @param endTime the end time of the word - */ - protected Node(Word word, long beginTime, long endTime) { - this(getNextNodeId(), word, beginTime, endTime); - } - - - /** - * Create a new Node with given ID. Used when creating a Lattice from a .LAT file - * - * @param id id of the node - * @param word word - * @param beginTime begin time - * @param endTime end time - */ - protected Node(String id, Word word, long beginTime, long endTime) { - this.id = id; - this.word = word; - this.beginTime = beginTime; - this.endTime = endTime; - - assert beginTime <= endTime || endTime < 0; - - this.forwardScore = LogMath.LOG_ZERO; - this.backwardScore = LogMath.LOG_ZERO; - this.posterior = LogMath.LOG_ZERO; - } - - - /** - * Get a unique ID for a new Node. Used when creating a Lattice from a .LAT file - * - * @return the unique ID for a new node - */ - protected static String getNextNodeId() { - return Integer.toString(nodeCount); - } - - - /** - * Test if a node has an Edge to a Node - * - * @param n node to check - * @return unique Node ID - */ - protected boolean hasEdgeToNode(Node n) { - return getEdgeToNode(n) != null; - } - - - /** - * given a node find the edge to that node - * - * @param n the node of interest - * @return the edge to that node or null if no edge could be found. - */ - public Edge getEdgeToNode(Node n) { - for (Edge e : leavingEdges) { - if (e.getToNode() == n) { - return e; - } - } - return null; - } - - - /** - * Test is a Node has an Edge from a Node - * - * @param n node to check - * @return true if this node has an Edge from n - */ - protected boolean hasEdgeFromNode(Node n) { - return getEdgeFromNode(n) != null; - } - - - /** - * given a node find the edge from that node - * - * @param n the node of interest - * @return the edge from that node or null if no edge could be found. - */ - public Edge getEdgeFromNode(Node n) { - for (Edge e : enteringEdges) { - if (e.getFromNode() == n) { - return e; - } - } - return null; - } - - - /** - * Test if a Node has all Edges from the same Nodes and another Node. - * - * @param n node to check - * @return true if this Node has Edges from the same Nodes as n - */ - protected boolean hasEquivalentEnteringEdges(Node n) { - if (enteringEdges.size() != n.getEnteringEdges().size()) { - return false; - } - for (Edge e : enteringEdges) { - Node fromNode = e.getFromNode(); - if (!n.hasEdgeFromNode(fromNode)) { - return false; - } - } - return true; - } - - - /** - * Test if a Node has all Edges to the same Nodes and another Node. - * - * @param n the node of interest - * @return true if this Node has all Edges to the sames Nodes as n - */ - public boolean hasEquivalentLeavingEdges(Node n) { - if (leavingEdges.size() != n.getLeavingEdges().size()) { - return false; - } - for (Edge e : leavingEdges) { - Node toNode = e.getToNode(); - if (!n.hasEdgeToNode(toNode)) { - return false; - } - } - return true; - } - - - /** - * Get the Edges to this Node - * - * @return Edges to this Node - */ - public Collection getEnteringEdges() { - return enteringEdges; - } - - - /** - * Get the Edges from this Node - * - * @return Edges from this Node - */ - public Collection getLeavingEdges() { - return leavingEdges; - } - - /** - * Returns a copy of the Edges to this Node, so that the underlying data structure will not be modified. - * - * @return a copy of the edges to this node - */ - public Collection getCopyOfEnteringEdges() { - return new ArrayList(enteringEdges); - } - - /** - * Returns a copy of the Edges from this Node, so that the underlying data structure will not be modified. - * - * @return a copy of the edges from this node - */ - public Collection getCopyOfLeavingEdges() { - return new ArrayList(leavingEdges); - } - - /** - * Add an Edge from this Node - * - * @param e edge to add - */ - protected void addEnteringEdge(Edge e) { - enteringEdges.add(e); - } - - - /** - * Add an Edge to this Node - * - * @param e edge to add - */ - protected void addLeavingEdge(Edge e) { - leavingEdges.add(e); - } - - - /** - * Remove an Edge from this Node - * - * @param e edge to remove - */ - protected void removeEnteringEdge(Edge e) { - enteringEdges.remove(e); - } - - - /** - * Remove an Edge to this Node - * - * @param e the edge to remove - */ - public void removeLeavingEdge(Edge e) { - leavingEdges.remove(e); - } - - - /** - * Get the ID associated with this Node - * - * @return the ID - */ - public String getId() { - return id; - } - - - /** - * Get the word associated with this Node - * - * @return the word - */ - public Word getWord() { - return word; - } - - - /** - * Get the frame number when the word began - * - * @return the begin frame number, or -1 if the frame number is unknown - */ - public long getBeginTime() { - if (beginTime == -1) { - calculateBeginTime(); - } - return beginTime; - } - - - /** - * Sets the frame number when the word began. The begin time must be not be later than the time returned by the - * getEndTime() method, otherwise an error will be thrown. - * - * @param beginTime the frame number when the word began - */ - public void setBeginTime(long beginTime) { - assert beginTime <= endTime; - this.beginTime = beginTime; - } - - - /** - * Get the frame number when the word ends - * - * @return the end time, or -1 if the frame number if is unknown - */ - public long getEndTime() { - return endTime; - } - - - /** - * Sets the frame number when the words ended. The end time must not be earlier than the time returned by the - * getEndTime() method, otherwise an error will be thrown. - * - * @param endTime the frame number when the word ended - */ - public void setEndTime(long endTime) { - assert beginTime <= endTime; - this.endTime = endTime; - } - - - /** - * Returns TimeFrame of the Node - * - * @return TimeFrame - */ - public TimeFrame getTimeFrame() { - return new TimeFrame(getBeginTime(), getEndTime()); - } - - - /** - * Returns a description of this Node that contains the word, the start time, and the end time. - * - * @return a description of this Node - */ - @Override - public String toString() { - return ("Node(" + word.getSpelling() + ',' + getBeginTime() + '|' + - getEndTime() + ')'); - } - - - /** - * Internal routine when dumping Lattices as AiSee files - * - * @param f - * @throws IOException - */ - void dumpAISee(FileWriter f) throws IOException { - String posterior = String.valueOf(getPosterior()); - if (getPosterior() == LogMath.LOG_ZERO) { - posterior = "log zero"; - } - f.write("node: { title: \"" + id + "\" label: \"" - + getWord() + '[' + getBeginTime() + ',' + getEndTime() + - " p:" + posterior + "]\" }\n"); - } - - /** - * Internal routine when dumping Lattices as Graphviz files - * - * @param f file writer to store - * @throws IOException if error occurred - */ - public void dumpDot(FileWriter f) throws IOException { - String posterior = String.valueOf(getPosterior()); - if (getPosterior() == LogMath.LOG_ZERO) { - posterior = "log zero"; - } - String label = getWord().toString() + '[' + getBeginTime() + ',' + getEndTime() + " p:" + posterior + ']'; - f.write("\tnode" + id + " [ label=\"" + label + "\" ]\n"); - } - - /** - * Internal routine used when dumping Lattices as .LAT files - * - * @param f print writer to store - * @throws IOException if error occurred - */ - void dump(PrintWriter f) throws IOException { - f.println("node: " + id + ' ' + word.getSpelling() + - //" a:" + getForwardProb() + " b:" + getBackwardProb() - //" p:" + getPosterior()); - ' ' + getBeginTime() + ' ' + getEndTime()); - } - - - /** - * Internal routine used when loading Lattices from .LAT files - * - * @param lattice - * @param tokens - */ - static void load(Lattice lattice, StringTokenizer tokens) { - - String id = tokens.nextToken(); - String label = tokens.nextToken(); - long beginTime = Long.parseLong(tokens.nextToken()); - long endTime = Long.parseLong(tokens.nextToken()); - - Word word = new Word(label, new Pronunciation[0], label.startsWith("<") || label.startsWith("[")); - lattice.addNode(id, word, beginTime, endTime); - } - - - /** - * Returns the backward score, which is calculated during the computation of the posterior score for this node. - * - * @return Returns the backwardScore. - */ - public double getBackwardScore() { - return backwardScore; - } - - - /** - * Sets the backward score for this node. - * - * @param backwardScore The backwardScore to set. - */ - public void setBackwardScore(double backwardScore) { - this.backwardScore = backwardScore; - } - - - /** - * Returns the forward score, which is calculated during the computation of the posterior score for this node. - * - * @return Returns the forwardScore. - */ - public double getForwardScore() { - return forwardScore; - } - - - /** - * Sets the backward score for this node. - * - * @param forwardScore The forwardScore to set. - */ - public void setForwardScore(double forwardScore) { - this.forwardScore = forwardScore; - } - - - /** - * Returns the posterior probability of this node. Refer to the javadocs for this class for a description of - * posterior probabilities. - * - * @return Returns the posterior probability of this node. - */ - public double getPosterior() { - return posterior; - } - - - /** - * Sets the posterior probability of this node. Refer to the javadocs for this class for a description of posterior - * probabilities. - * - * @param posterior The node posterior probability to set. - */ - public void setPosterior(double posterior) { - this.posterior = posterior; - } - - - /** @see java.lang.Object#hashCode() */ - @Override - public int hashCode() { - return id.hashCode(); - } - - - /** - * Assumes ids are unique node identifiers - * - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - return obj instanceof Node && id.equals(((Node) obj).getId()); - } - - - /** - * Calculates the begin time of this node, in the event that the begin time was not specified. The begin time is the - * latest of the end times of its predecessor nodes. - */ - private void calculateBeginTime() { - beginTime = 0; - for (Edge edge : enteringEdges) { - if (edge.getFromNode().getEndTime() > beginTime) { - beginTime = edge.getFromNode().getEndTime(); - } - } - } - - - /** - * Get the nodes at the other ends of outgoing edges of this node. - * - * @return a list of child nodes - */ - public List getChildNodes() { - LinkedList childNodes = new LinkedList(); - for (Edge edge : leavingEdges) { - childNodes.add(edge.getToNode()); - } - return childNodes; - } - - - protected void cacheDescendants() { - descendants = new HashSet(); - cacheDescendantsHelper(this); - } - - - protected void cacheDescendantsHelper(Node n) { - for (Node child : n.getChildNodes()) { - if (descendants.contains(child)) { - continue; - } - descendants.add(child); - cacheDescendantsHelper(child); - } - } - - - protected boolean isAncestorHelper(List children, Node node, Set seenNodes) { - for (Node n : children) { - if (seenNodes.contains(n)) { - continue; - } - seenNodes.add(n); - if (n.equals(node)) { - return true; - } - if (isAncestorHelper(n.getChildNodes(), node, seenNodes)) { - return true; - } - } - return false; - } - - - /** - * Check whether this node is an ancestor of another node. - * - * @param node the Node to check - * @return whether this node is an ancestor of the passed in node. - */ - public boolean isAncestorOf(Node node) { - if (descendants != null) { - return descendants.contains(node); - } - if (this.equals(node)) { - return true; // node is its own ancestor - } - Set seenNodes = new HashSet(); - seenNodes.add(this); - return isAncestorHelper(this.getChildNodes(), node, seenNodes); - } - - - /** - * Check whether this node has an ancestral relationship with another node (i.e. either this node is an ancestor of - * the other node, or vice versa) - * - * @param node the Node to check for a relationship - * @return whether a relationship exists - */ - public boolean hasAncestralRelationship(Node node) { - return this.isAncestorOf(node) || node.isAncestorOf(this); - } - - - /** - * Returns true if the given node is equivalent to this node. Two nodes are equivalent only if they have the same - * word, the same number of entering and leaving edges, and that their begin and end times are the same. - * - * @param other the Node we're comparing to - * @return true if the Node is equivalent; false otherwise - */ - public boolean isEquivalent(Node other) { - return - ((word.getSpelling().equals(other.getWord().getSpelling()) && - (getEnteringEdges().size() == other.getEnteringEdges().size() && - getLeavingEdges().size() == other.getLeavingEdges().size())) && - (getBeginTime() == other.getBeginTime() && - endTime == other.getEndTime())); - } - - - /** - * Returns a leaving edge that is equivalent to the given edge. Two edges are eqivalent if Edge.isEquivalent() - * returns true. - * - * @param edge the Edge to compare the leaving edges of this node against - * @return an equivalent edge, if any; or null if no equivalent edge - */ - public Edge findEquivalentLeavingEdge(Edge edge) { - for (Edge e : leavingEdges) { - if (e.isEquivalent(edge)) { - return e; - } - } - return null; - } - - - /** - * Returns the best predecessor for this node. - * - * @return Returns the bestPredecessor. - */ - public Node getBestPredecessor() { - return bestPredecessor; - } - - - /** - * Sets the best predecessor of this node. - * - * @param bestPredecessor The bestPredecessor to set. - */ - public void setBestPredecessor(Node bestPredecessor) { - this.bestPredecessor = bestPredecessor; - } - - - /** - * Returns the Viterbi score for this node. The Viterbi score is usually computed during the speech recognition - * process. - * - * @return Returns the viterbiScore. - */ - public double getViterbiScore() { - return viterbiScore; - } - - - /** - * Sets the Viterbi score for this node. The Viterbi score is usually computed during the speech recognition - * process. - * - * @param viterbiScore The viterbiScore to set. - */ - public void setViterbiScore(double viterbiScore) { - this.viterbiScore = viterbiScore; - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/Path.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/Path.java deleted file mode 100755 index 31fd4365..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/Path.java +++ /dev/null @@ -1,66 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.result; - - -/** - * Represents a path of words through the recognition result lattice. - *

    - * All scores are maintained in the logMath log domain - */ -public interface Path { - - /** - * Gets the total score for this path. Scores are in the LogMath log domain - * - * @return the score for the path in the LogMath log domaain. - */ - public double getScore(); - - - /** - * Returns a log confidence score for this path. Use the getLogMath().logToLinear() method to convert the log - * confidence score to linear. The linear value should be between 0.0 and 1.0 (inclusive). - * - * @return a log confidence score which linear value is between 0.0 and 1.0 (inclusive) - */ - public double getConfidence(); - - /** - * Gets the ordered set of words for this path - * - * @return an array containing zero or more words - */ - public WordResult[] getWords(); - - - /** - * Gets the transcription of the path. - * - * @return the transcription of the path. - */ - public String getTranscription(); - - /** - * Gets the transcription of the path skipping the filler words - * - * @return the transcription of the path without fillers. - */ - public String getTranscriptionNoFiller(); - - /** Returns a string representation of this object */ - public String toString(); - - -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/Result.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/Result.java deleted file mode 100755 index c85baece..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/Result.java +++ /dev/null @@ -1,553 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.result; - -import static java.util.Collections.emptyList; -import static java.util.Collections.reverse; - -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; - -import edu.cmu.sphinx.decoder.search.ActiveList; -import edu.cmu.sphinx.decoder.search.AlternateHypothesisManager; -import edu.cmu.sphinx.decoder.search.Token; -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.TimeFrame; - -/** - * Provides recognition results. Results can be partial or final. A result - * should not be modified before it is a final result. Note that a result may - * not contain all possible information. - *

    - * The following methods are not yet defined but should be: - * - *

    - * public Result getDAG(int compressionLevel);
    - * 
    - */ -public class Result { - - private final ActiveList activeList; - private final List resultList; - private AlternateHypothesisManager alternateHypothesisManager; - private boolean isFinal; - private boolean wordTokenFirst; - private final long currentCollectTime; - private String reference; - private final LogMath logMath; - private final boolean toCreateLattice; - - /** - * Creates a result - * - * @param alternateHypothesisManager hypothesis manager - * @param activeList - * the active list associated with this result - * @param resultList - * the result list associated with this result - * @param collectTime - * token time in a stream. - * @param isFinal - * if true, the result is a final result - * @param wordTokenFirst if word token goes first. - * @param toCreateLattice create lattice or not. - */ - public Result(AlternateHypothesisManager alternateHypothesisManager, ActiveList activeList, List resultList, - long collectTime, boolean isFinal, boolean wordTokenFirst, boolean toCreateLattice) { - this(activeList, resultList, collectTime, isFinal, wordTokenFirst, toCreateLattice); - this.alternateHypothesisManager = alternateHypothesisManager; - } - - /** - * Creates a result - * - * @param activeList - * the active list associated with this result - * @param resultList - * the result list associated with this result - * @param collectTime - * token collect time in a stream. - * @param isFinal - * if true, the result is a final result. This means that the - * last frame in the speech segment has been decoded. - * @param wordTokenFirst if word token goes first. - * @param toCreateLattice create lattice or not. - */ - public Result(ActiveList activeList, List resultList, long collectTime, boolean isFinal, boolean wordTokenFirst, boolean toCreateLattice) { - this.activeList = activeList; - this.resultList = resultList; - this.currentCollectTime = collectTime; - this.isFinal = isFinal; - this.toCreateLattice = toCreateLattice; - this.wordTokenFirst = wordTokenFirst; - logMath = LogMath.getLogMath(); - } - - /** - * Determines if the result is a final result. A final result is guaranteed - * to no longer be modified by the SearchManager that generated it. - * Non-final results can be modifed by a - * SearchManager.recognize calls. - * - * @return true if the result is a final result - */ - public boolean isFinal() { - return isFinal; - } - - /** - * Checks if it justified to build lattice for this result - * - * @return true if lattice created from this result can provide confidence - * scores and n-best list - */ - public boolean toCreateLattice() { - return toCreateLattice; - } - - /** - * Returns the log math used for this Result. - * - * @return the log math used - */ - public LogMath getLogMath() { - return logMath; - } - - /** - * Returns a list of active tokens for this result. The list contains zero - * or active Token objects that represents the leaf nodes of - * all active branches in the result (sometimes referred to as the - * 'lattice'). - *

    - * The lattice is live and may be modified by a SearchManager during a - * recognition. Once the Result is final, the lattice is fixed and will no - * longer be modified by the SearchManager. Applications can modify the - * lattice (to prepare for a re-recognition, for example) only after - * isFinal returns true - * - * @return a list containing the active tokens for this result - * @see Token - */ - public ActiveList getActiveTokens() { - return activeList; - } - - /** - * Returns a list of result tokens for this result. The list contains zero - * or more result Token objects that represents the leaf nodes - * of all final branches in the result (sometimes referred to as the - * 'lattice'). - *

    - * The lattice is live and may be modified by a SearchManager during a - * recognition. Once the Result is final, the lattice is fixed and will no - * longer be modified by the SearchManager. Applications can modify the - * lattice (to prepare for a re-recognition, for example) only after - * isFinal returns true - * - * @return a list containing the final result tokens for this result - * @see Token - */ - public List getResultTokens() { - return resultList; - } - - /** - * Returns the AlternateHypothesisManager Used to construct a Lattice - * - * @return the AlternateHypothesisManager - */ - public AlternateHypothesisManager getAlternateHypothesisManager() { - return alternateHypothesisManager; - } - - /** - * Returns the current frame number - * - * @return the frame number - */ - public long getCollectTime() { - return currentCollectTime; - } - - /** - * Returns the best scoring final token in the result. A final token is a - * token that has reached a final state in the current frame. - * - * @return the best scoring final token or null - */ - public Token getBestFinalToken() { - Token bestToken = null; - for (Token token : resultList) { - if (bestToken == null || token.getScore() > bestToken.getScore()) { - bestToken = token; - } - } - return bestToken; - } - - /** - * Returns the best scoring token in the result. First, the best final token - * is retrieved. A final token is one that has reached the final state in - * the search space. If no final tokens can be found, then the best, - * non-final token is returned. - * - * @return the best scoring token or null - */ - public Token getBestToken() { - Token bestToken = getBestFinalToken(); - - if (bestToken == null) { - bestToken = getBestActiveToken(); - } - - return bestToken; - } - - /** - * Returns the best scoring token in the active set - * - * @return the best scoring token or null - */ - public Token getBestActiveToken() { - Token bestToken = null; - if (activeList != null) { - for (Token token : activeList) { - if (bestToken == null || token.getScore() > bestToken.getScore()) { - bestToken = token; - } - } - } - return bestToken; - } - - /** - * Searches through the n-best list to find the the branch that matches the - * given string - * - * @param text - * the string to search for - * @return the token at the head of the branch or null - */ - public Token findToken(String text) { - text = text.trim(); - for (Token token : resultList) { - if (text.equals(token.getWordPathNoFiller())) { - return token; - } - } - return null; - } - - /** - * Searches through the n-best list to find the the branch that matches the - * beginning of the given string - * - * @param text - * the string to search for - * @return the list token at the head of the branch - */ - public List findPartialMatchingTokens(String text) { - List list = new ArrayList(); - text = text.trim(); - for (Token token : activeList) { - if (text.startsWith(token.getWordPathNoFiller())) { - list.add(token); - } - } - return list; - } - - /** - * Returns the best scoring token that matches the beginning of the given - * text. - * - * @param text - * the text to match - * @return best token - */ - public Token getBestActiveParitalMatchingToken(String text) { - List matchingList = findPartialMatchingTokens(text); - Token bestToken = null; - for (Token token : matchingList) { - if (bestToken == null || token.getScore() > bestToken.getScore()) { - bestToken = token; - } - } - return bestToken; - } - - /** - * Returns detailed frame statistics for this result - * - * @return frame statistics for this result as an array, with one element - * per frame or null if no frame statistics are - * available. - */ - public FrameStatistics[] getFrameStatistics() { - return null; // [[[ TBD: write me ]]] - } - - /** - * Gets the starting frame number for the result. Note that this method is - * currently not implemented, and always returns zero. - * - * @return the starting frame number for the result - */ - public int getStartFrame() { - return 0; - } - - /** - * Gets the ending frame number for the result. Note that this method is - * currently not implemented, and always returns zero. - * - * @return the ending frame number for the result - */ - public int getEndFrame() { - return 0; // [[[ TBD: write me ]]] - } - - /** - * Gets the feature frames associated with this result - * - * @return the set of feature frames associated with this result, or null if - * the frames are not available. - */ - public List getDataFrames() { - // find the best token, and then trace back for all the features - Token token = getBestToken(); - - if (token == null) - return null; - - List featureList = new LinkedList(); - - do { - Data feature = token.getData(); - if (feature != null) - featureList.add(0, feature); - - token = token.getPredecessor(); - } while (token != null); - - return featureList; - } - - /** - * Returns the string of the best result, removing any filler words. This - * method first attempts to return the best final result, that is, the - * result that has reached the final state of the search space. If there are - * no best final results, then the best non-final result, that is, the one - * that did not reach the final state, is returned. - * - * @return the string of the best result, removing any filler words - */ - public String getBestResultNoFiller() { - Token token = getBestToken(); - if (token == null) { - return ""; - } else { - return token.getWordPathNoFiller(); - } - } - - /** - * Returns the string of the best final result, removing any filler words. A - * final result is a path that has reached the final state. A Result object - * can also contain paths that did not reach the final state, and those - * paths are not returned by this method. - * - * @return the string of the best result, removing any filler words, or null - * if there are no best results - */ - public String getBestFinalResultNoFiller() { - Token token = getBestFinalToken(); - if (token == null) { - return ""; - } else { - return token.getWordPathNoFiller(); - } - } - - /** - * The method is used when the application wants the phonemes on the best - * final path. Note that words may have more than one pronunciation, so this - * is not equivalent to the word path e.g. one[HH,W,AH,N] to[T,UW] - * three[TH,R,IY] - * - * @return the String of words and associated phonemes on the best path - */ - public String getBestPronunciationResult() { - Token token = getBestFinalToken(); - if (token == null) { - return ""; - } else { - return token.getWordPath(false, true); - } - } - - /** - * Returns the string of words (with timestamp) for this token. - * - * @param withFillers - * true if we want filler words included, false otherwise - * @return the string of words - */ - public List getTimedBestResult(boolean withFillers) { - Token token = getBestToken(); - if (token == null) { - return emptyList(); - } else { - if (wordTokenFirst) { - return getTimedWordPath(token, withFillers); - } else { - return getTimedWordTokenLastPath(token, withFillers); - } - } - } - - /** - * Returns the string of words (with timestamp) for this token. This method - * assumes that the word tokens come before other types of token. - * - * @param withFillers - * true if we want filler words, false otherwise - * @return list of word with timestamps - */ - private List getTimedWordPath(Token token, boolean withFillers) { - long prevWordEnd = -1; - List result = new ArrayList(); - - while (token != null) { - - if (prevWordEnd < 0) - prevWordEnd = token.getCollectTime(); - - if (token.isWord()) { - Word word = token.getWord(); - if (withFillers || !word.isFiller()) { - TimeFrame timeFrame = new TimeFrame(token.getCollectTime(), prevWordEnd); - result.add(new WordResult(word, timeFrame, token.getScore(), 1.)); - } - prevWordEnd = token.getCollectTime(); - } - token = token.getPredecessor(); - } - - reverse(result); - return result; - } - - /** - * Returns the string of words for this token, each with the starting sample - * number as the timestamp. This method assumes that the word tokens come - * after the unit and HMM tokens. - * - * @return the string of words, each with the starting sample number - */ - private List getTimedWordTokenLastPath(Token token, boolean withFillers) { - long lastWordEnd = -1; - long lastWordStart = -1; - Word word = null; - - List result = new ArrayList(); - while (token != null) { - if (token.isWord()) { - if (word != null && lastWordEnd >= 0) { - if (withFillers || !word.isFiller()) { - TimeFrame timeFrame = new TimeFrame(lastWordStart, lastWordEnd); - result.add(new WordResult(word, timeFrame, token.getScore(), 1.)); - } - } - lastWordEnd = token.getCollectTime(); - word = token.getWord(); - } - lastWordStart = token.getCollectTime(); - token = token.getPredecessor(); - } - - reverse(result); - return result; - } - - /** Returns a string representation of this object */ - @Override - public String toString() { - Token token = getBestToken(); - if (token == null) { - return ""; - } else { - return token.getWordPath(); - } - } - - /** - * Sets the results as a final result - * - * @param finalResult - * if true, the result should be made final - */ - void setFinal(boolean finalResult) { - this.isFinal = finalResult; - } - - /** - * Determines if the Result is valid. This is used for testing and debugging - * - * @return true if the result is properly formed. - */ - public boolean validate() { - boolean valid = true; - for (Token token : activeList) { - if (!token.validate()) { - valid = false; - token.dumpTokenPath(); - } - } - return valid; - } - - /** - * Sets the reference text - * - * @param ref - * the reference text - */ - public void setReferenceText(String ref) { - reference = ref; - } - - /** - * Retrieves the reference text. The reference text is a transcript of the - * text that was spoken. - * - * @return the reference text or null if no reference text exists. - */ - public String getReferenceText() { - return reference; - } - - /** - * Getter for wordTokenFirst flag - * - * @return true if word tokens goes first, before data tokens - */ - public boolean getWordTokenFirst() { - return wordTokenFirst; - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/TokenGraphDumper.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/TokenGraphDumper.java deleted file mode 100755 index 857b04d6..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/TokenGraphDumper.java +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.result; - -import edu.cmu.sphinx.decoder.search.AlternateHypothesisManager; -import edu.cmu.sphinx.decoder.search.Token; -import edu.cmu.sphinx.linguist.HMMSearchState; -import edu.cmu.sphinx.linguist.SearchState; -import edu.cmu.sphinx.linguist.UnitSearchState; -import edu.cmu.sphinx.linguist.WordSearchState; - -import java.io.FileWriter; -import java.io.IOException; -import java.util.*; - -/** - * Dumps out the GDL graph of all the result token chains in a Result, as well as all the alternate hypotheses along - * those chains. - */ -public class TokenGraphDumper { - - private final AlternateHypothesisManager loserManager; - private final Result result; - private final Map tokenIDMap; - private final Set dumpedTokens; - private int ID; - - - /** - * Constructs a TokenGraphDumper from the given result. - * - * @param result The result which search space we want to dump. - */ - public TokenGraphDumper(Result result) { - this.result = result; - this.loserManager = result.getAlternateHypothesisManager(); - tokenIDMap = new HashMap(); - dumpedTokens = new HashSet(); - } - - - /** - * Dumps the GDL output of the search space to the given file. - * - * @param title the title of the GDL graph - * @param fileName filename to store - */ - public void dumpGDL(String title, String fileName) { - try { - System.err.println("Dumping " + title + " to " + fileName); - FileWriter f = new FileWriter(fileName); - f.write(dumpGDL(title)); - f.close(); - } catch (IOException ioe) { - ioe.printStackTrace(); - } - } - - - /** - * Dumps the GDL output. - * - * @param title the title of the GDL graph - * @return the GDL output string - */ - public String dumpGDL(String title) { - StringBuilder gdl = new StringBuilder("graph: {\n"); - gdl.append("title: \"").append(title).append("\"\n"); - gdl.append("display_edge_labels: yes\n"); - - for (Token token : result.getResultTokens()) { - gdl.append(dumpTokenGDL(token)); - } - - gdl.append("}\n"); - return gdl.toString(); - } - - - /** - * Dumps the GDL output for a token, and any of its predecessors or alternate hypotheses. - * - * @param token the token to dump - * @return the GDL output string - */ - private String dumpTokenGDL(Token token) { - - if (dumpedTokens.contains(token)) { - return ""; - } else { - String label = ("[" + token.getAcousticScore() + token.getInsertionScore() + ',' + - token.getLanguageScore() + ']'); - if (token.isWord()) { - label = token.getWord().getSpelling() + label; - } - - String color = null; - - if (token.getSearchState() != null) { - color = getColor(token.getSearchState()); - } - - StringBuilder gdl = new StringBuilder().append("node: { title: \"").append(getTokenID(token)) - .append("\" label: \"").append(label).append("\" color: "); - if (color != null) { - gdl.append(color).append(" }"); - } else { - gdl.append(" }"); - } - gdl.append('\n'); - - dumpedTokens.add(token); - - if (token.getPredecessor() != null) { - gdl.append("edge: { sourcename: \"").append(getTokenID(token)) - .append("\" targetname: \"").append(getTokenID(token.getPredecessor())) - .append("\" }").append('\n').append(dumpTokenGDL(token.getPredecessor())); - } - - if (loserManager != null) { - List list = loserManager.getAlternatePredecessors(token); - if (list != null) { - for (Token loser : list) { - gdl.append("edge: { sourcename: \"").append(getTokenID(token)) - .append("\" targetname: \"").append(getTokenID(loser)) - .append("\" }").append('\n').append(dumpTokenGDL(loser)); - } - } - } - return gdl.toString(); - } - } - - - /** - * Gets the color for a particular state - * - * @param state the state - * @return its color - */ - private String getColor(SearchState state) { - String color = "lightred"; - if (state.isFinal()) { - color = "magenta"; - } else if (state instanceof UnitSearchState) { - color = "green"; - } else if (state instanceof WordSearchState) { - color = "lightblue"; - } else if (state instanceof HMMSearchState) { - color = "orange"; - } - return color; - } - - - /** - * Returns the next available token ID. - * - * @param token the token for which we want an ID - * @return the next available token ID - */ - private Integer getTokenID(Token token) { - Integer id = tokenIDMap.get(token); - if (id == null) { - id = ID++; - tokenIDMap.put(token, id); - } - return id; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/WordResult.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/WordResult.java deleted file mode 100755 index 9098636d..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/result/WordResult.java +++ /dev/null @@ -1,121 +0,0 @@ -/* -* Copyright 1999-2015 Carnegie Mellon University. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -*/ - -package edu.cmu.sphinx.result; - -import java.util.Locale; - -import edu.cmu.sphinx.linguist.dictionary.Pronunciation; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.TimeFrame; - -/** - * Represents a word in a recognition result. - * - * This is designed specifically for obtaining confidence scores. - * All scores are maintained in LogMath log base. - */ -public class WordResult { - - private final Word word; - private final TimeFrame timeFrame; - private final double score; - private final double confidence; - - /** - * Construct a word result with full information. - * - * @param w the word object to store - * @param timeFrame time frame - * @param score acoustic score of the word - * @param posterior of the word - */ - public WordResult(Word w, TimeFrame timeFrame, double score, double posterior) - { - this.word = w; - this.timeFrame = timeFrame; - this.score = score; - this.confidence = posterior; - } - - /** - * Construct a WordResult using a Node object and a confidence (posterior). - * - * This does not use the posterior stored in the Node object, just its - * word, start and end. - * - * @param node the node to extract information from - */ - public WordResult(Node node) { - this(node.getWord(), - new TimeFrame(node.getBeginTime(), node.getEndTime()), - node.getViterbiScore(), node.getPosterior()); - } - - /** - * @return total score for this WirdResult in log domain - */ - public double getScore() { - return score; - } - - /** - * Returns a log confidence score for this WordResult. - * - * Use the getLogMath().logToLinear() method to convert the log confidence - * score to linear. The linear value should be between 0.0 and 1.0 - * (inclusive) for this word. - * - * @return a log confidence score which linear value is in [0, 1] - */ - public double getConfidence() { - // TODO: can confidence really be greater than 1? - return Math.min(confidence, LogMath.LOG_ONE); - } - - /** - * Gets the pronunciation for this word. - * - * @return the pronunciation for the word - */ - public Pronunciation getPronunciation() { - return word.getMostLikelyPronunciation(); - } - - /** - * Gets the word object associated with the given result. - * - * @return the word object - */ - public Word getWord() { - return word; - } - - /** - * @return time frame for the word - */ - public TimeFrame getTimeFrame() { - return timeFrame; - } - - /** - * Does this word result represent a filler token? - * - * @return true if this is a filler - */ - public boolean isFiller() { - return word.isFiller() || word.toString().equals(""); - } - - @Override - public String toString() { - return String.format(Locale.US, "{%s, %.3f, [%s]}", word, LogMath.getLogMath().logToLinear((float)getConfidence()), timeFrame); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/speakerid/Segment.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/speakerid/Segment.java deleted file mode 100755 index ee41d88d..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/speakerid/Segment.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.speakerid; - -public class Segment implements Comparable { - public final static int FEATURES_SIZE = 13; - - public final static int FRAME_LENGTH = 10; - - private int startTime, length; - - public Segment(Segment ref) { - this.startTime = ref.startTime; - this.length = ref.length; - } - - public Segment(int startTime, int length) { - this.startTime = startTime; - this.length = length; - } - - public Segment(int startTime, int length, float[] features) { - this.startTime = startTime; - this.length = length; - } - - public Segment() { - this.startTime = this.length = 0; - } - - public void setStartTime(int startTime) { - this.startTime = startTime; - } - - public void setLength(int length) { - this.length = length; - } - - public int getStartTime() { - return this.startTime; - } - - public int getLength() { - return this.length; - } - - public int equals(Segment ref) { - return (this.startTime == ref.startTime) ? 1 : 0; - } - - @Override - public String toString() { - return this.startTime + " " + this.length + "\n"; - } - - public int compareTo(Segment ref) { - return (this.startTime - ref.startTime); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/speakerid/SpeakerCluster.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/speakerid/SpeakerCluster.java deleted file mode 100755 index 9db3c8fa..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/speakerid/SpeakerCluster.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.speakerid; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.TreeSet; - -import org.apache.commons.math3.linear.Array2DRowRealMatrix; - -public class SpeakerCluster { - private TreeSet segmentSet; - private double bicValue; - - public double getBicValue() { - return bicValue; - } - - public void setBicValue(double bicValue) { - this.bicValue = bicValue; - } - - protected Array2DRowRealMatrix featureMatrix; - - public Array2DRowRealMatrix getFeatureMatrix() { - return featureMatrix; - } - - public SpeakerCluster() { - this.segmentSet = new TreeSet(); - } - - public SpeakerCluster(Segment s, Array2DRowRealMatrix featureMatrix, double bicValue) { - this.segmentSet = new TreeSet(); - this.featureMatrix = new Array2DRowRealMatrix(featureMatrix.getData()); - this.bicValue = bicValue; - addSegment(s); - } - - public SpeakerCluster(SpeakerCluster c) { - this.segmentSet = new TreeSet(); - this.featureMatrix = new Array2DRowRealMatrix(c.getFeatureMatrix().getData()); - Iterator it = c.segmentSet.iterator(); - while (it.hasNext()) - this.addSegment(it.next()); - } - - public TreeSet getSegments() { - return this.segmentSet; - } - - public ArrayList getArrayOfSegments() { - Iterator it = segmentSet.iterator(); - ArrayList ret = new ArrayList(); - while (it.hasNext()) - ret.add(it.next()); - return ret; - } - - public Boolean addSegment(Segment s) { - return this.segmentSet.add(s); - } - - public Boolean removeSegment(Segment s) { - return this.segmentSet.remove(s); - } - - /** - * Returns a 2 * n length array where n is the numbers of intervals assigned - * to the speaker modeled by this cluster every pair of elements with - * indexes (2 * i, 2 * i + 1) represents the start time and the length for - * each interval - * - * We may need a delay parameter to this function because the segments may - * not be exactly consecutive - * - * @return a list of segments for speaker - */ - public ArrayList getSpeakerIntervals() { - Iterator it = segmentSet.iterator(); - Segment curent = new Segment(0, 0), previous = it.next(); - int start = previous.getStartTime(); - int length = previous.getLength(); - int idx = 0; - ArrayList ret = new ArrayList(); - ret.add(previous); - while (it.hasNext()) { - curent = it.next(); - start = ret.get(idx).getStartTime(); - length = ret.get(idx).getLength(); - if ((start + length) == curent.getStartTime()) { - ret.set(idx, new Segment(start, length + curent.getLength())); - } else { - idx++; - ret.add(curent); - } - previous = curent; - } - return ret; - } - - public void mergeWith(SpeakerCluster target) throws NullPointerException { - if (target == null) - throw new NullPointerException(); - Iterator it = target.segmentSet.iterator(); - while (it.hasNext()) { - if (!this.addSegment(it.next())) - System.out.println("Something doesn't work in mergeWith method, Cluster class"); - } - int rowDim = featureMatrix.getRowDimension() + target.getFeatureMatrix().getRowDimension(); - int colDim = featureMatrix.getColumnDimension(); - Array2DRowRealMatrix combinedFeatures = new Array2DRowRealMatrix(rowDim, colDim); - combinedFeatures.setSubMatrix(featureMatrix.getData(), 0, 0); - combinedFeatures - .setSubMatrix(target.getFeatureMatrix().getData(), featureMatrix.getRowDimension(), 0); - bicValue = SpeakerIdentification.getBICValue(combinedFeatures); - featureMatrix = new Array2DRowRealMatrix(combinedFeatures.getData()); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/speakerid/SpeakerIdentification.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/speakerid/SpeakerIdentification.java deleted file mode 100755 index 6653b076..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/speakerid/SpeakerIdentification.java +++ /dev/null @@ -1,324 +0,0 @@ -/* - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.speakerid; - -import java.io.InputStream; -import java.net.URL; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.LinkedList; - -import org.apache.commons.math3.linear.Array2DRowRealMatrix; -import org.apache.commons.math3.linear.EigenDecomposition; -import org.apache.commons.math3.stat.correlation.Covariance; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.frontend.util.StreamDataSource; -import edu.cmu.sphinx.util.props.ConfigurationManager; - -/** - * Provides method for detecting the number of speakers from a given input file - * - */ -public class SpeakerIdentification { - - public final String FRONTEND_NAME = "plpFrontEnd"; - - private FrontEnd frontEnd; - private StreamDataSource audioSource; - private ConfigurationManager cm; - - public SpeakerIdentification() { - URL url = getClass().getResource("frontend.config.xml"); - cm = new ConfigurationManager(url); - audioSource = cm.lookup("streamDataSource"); - frontEnd = cm.lookup(FRONTEND_NAME); - } - - /** - * @return The list of feature vectors from the fileStream used by - * audioSource - */ - private ArrayList getFeatures() { - ArrayList ret = new ArrayList(); - try { - int featureLength = -1; - Data feature = frontEnd.getData(); - while (!(feature instanceof DataEndSignal)) { - if (feature instanceof DoubleData) { - double[] featureData = ((DoubleData) feature).getValues(); - if (featureLength < 0) { - featureLength = featureData.length; - } - float[] convertedData = new float[featureData.length]; - for (int i = 0; i < featureData.length; i++) { - convertedData[i] = (float) featureData[i]; - } - ret.add(convertedData); - } else if (feature instanceof FloatData) { - float[] featureData = ((FloatData) feature).getValues(); - if (featureLength < 0) { - featureLength = featureData.length; - - } - ret.add(featureData); - } - feature = frontEnd.getData(); - } - } catch (Exception e) { - e.printStackTrace(); - } - return ret; - } - - /** - * - * @param bicValue - * The bicValue of the model represented by only one Gaussian. - * This parameter it's useful when this function is called - * repeatedly for different frame values and the same features - * parameter - * @param frame - * the frame which is tested for being a change point - * @param features - * the feature vectors matrix - * @return the likelihood ratio - */ - double getLikelihoodRatio(double bicValue, int frame, Array2DRowRealMatrix features) { - double bicValue1, bicValue2; - int d = Segment.FEATURES_SIZE; - double penalty = 0.5 * (d + 0.5 * d * (d + 1)) * Math.log(features.getRowDimension()) * 2; - int nrows = features.getRowDimension(), ncols = features.getColumnDimension(); - Array2DRowRealMatrix sub1, sub2; - sub1 = (Array2DRowRealMatrix) features.getSubMatrix(0, frame - 1, 0, ncols - 1); - sub2 = (Array2DRowRealMatrix) features.getSubMatrix(frame, nrows - 1, 0, ncols - 1); - bicValue1 = getBICValue(sub1); - bicValue2 = getBICValue(sub2); - return (bicValue - bicValue1 - bicValue2 - penalty); - } - - /** - * @param start - * The starting frame - * @param length - * The length of the interval, as numbers of frames - * @param features - * The matrix build with feature vectors as rows - * @return Returns the changing point in the input represented by features - * - */ - - private int getPoint(int start, int length, int step, Array2DRowRealMatrix features) { - double max = Double.NEGATIVE_INFINITY; - int ncols = features.getColumnDimension(), point = 0; - Array2DRowRealMatrix sub = (Array2DRowRealMatrix) features.getSubMatrix(start, start + length - 1, 0, - ncols - 1); - double bicValue = getBICValue(sub); - for (int i = Segment.FEATURES_SIZE + 1; i < length - Segment.FEATURES_SIZE; i += step) { - double aux = getLikelihoodRatio(bicValue, i, sub); - if (aux > max) { - max = aux; - point = i; - } - } - if (max < 0) - point = Integer.MIN_VALUE; - return point + start; - } - - /** - * - * @param features - * Matrix with feature vectors as rows - * @return A list with all changing points detected in the file - */ - private LinkedList getAllChangingPoints(Array2DRowRealMatrix features) { - LinkedList ret = new LinkedList(); - ret.add(0); - int framesCount = features.getRowDimension(), step = 500; - int start = 0, end = step, cp; - while (end < framesCount) { - cp = getPoint(start, end - start + 1, step / 10, features); - if (cp > 0) { - start = cp; - end = start + step; - ret.add(cp); - } else - end += step; - } - ret.add(framesCount); - return ret; - } - - /** - * @param mat - * A matrix with feature vectors as rows. - * @return Returns the BICValue of the Gaussian model that approximates the - * the feature vectors data samples - */ - public static double getBICValue(Array2DRowRealMatrix mat) { - double ret = 0; - EigenDecomposition ed = new EigenDecomposition(new Covariance(mat).getCovarianceMatrix()); - double[] re = ed.getRealEigenvalues(); - for (int i = 0; i < re.length; i++) - ret += Math.log(re[i]); - return ret * (mat.getRowDimension() / 2); - } - - /** - * @param stream stream to process - * @return A cluster for each speaker found in the input file - */ - public ArrayList cluster(InputStream stream) { - audioSource.setInputStream(stream); - ArrayList features = getFeatures(); - return cluster(features); - } - - /** - * @param features The feature vectors to be used for clustering - * @return A cluster for each speaker detected based on the feature vectors provided - */ - public ArrayList cluster(ArrayList features) { - ArrayList ret = new ArrayList(); - Array2DRowRealMatrix featuresMatrix = ArrayToRealMatrix(features, features.size()); - LinkedList l = getAllChangingPoints(featuresMatrix); - Iterator it = l.iterator(); - int curent, previous = it.next(); - while (it.hasNext()) { - curent = it.next(); - Segment s = new Segment(previous * Segment.FRAME_LENGTH, (curent - previous) - * (Segment.FRAME_LENGTH)); - Array2DRowRealMatrix featuresSubset = (Array2DRowRealMatrix) featuresMatrix.getSubMatrix( - previous, curent - 1, 0, 12); - ret.add(new SpeakerCluster(s, featuresSubset, getBICValue(featuresSubset))); - previous = curent; - } - int clusterCount = ret.size(); - - Array2DRowRealMatrix distance; - distance = new Array2DRowRealMatrix(clusterCount, clusterCount); - distance = updateDistances(ret); - while (true) { - double distmin = 0; - int imin = -1, jmin = -1; - - for (int i = 0; i < clusterCount; i++) - for (int j = 0; j < clusterCount; j++) - if (i != j) - distmin += distance.getEntry(i, j); - distmin /= (clusterCount * (clusterCount - 1) * 4); - - for (int i = 0; i < clusterCount; i++) { - for (int j = 0; j < clusterCount; j++) { - if (distance.getEntry(i, j) < distmin && i != j) { - distmin = distance.getEntry(i, j); - imin = i; - jmin = j; - } - } - } - if (imin == -1) { - break; - } - ret.get(imin).mergeWith(ret.get(jmin)); - updateDistances(ret, imin, jmin, distance); - ret.remove(jmin); - clusterCount--; - } - return ret; - } - - /** - * @param Clustering - * The array of clusters - * @param posi - * The index of the merged cluster - * @param posj - * The index of the cluster that will be eliminated from the - * clustering - * @param distance - * The distance matrix that will be updated - */ - void updateDistances(ArrayList clustering, int posi, int posj, - Array2DRowRealMatrix distance) { - int clusterCount = clustering.size(); - for (int i = 0; i < clusterCount; i++) { - distance.setEntry(i, posi, computeDistance(clustering.get(i), clustering.get(posi))); - distance.setEntry(posi, i, distance.getEntry(i, posi)); - } - for (int i = posj; i < clusterCount - 1; i++) - for (int j = 0; j < clusterCount; j++) - distance.setEntry(i, j, distance.getEntry(i + 1, j)); - - for (int i = 0; i < clusterCount; i++) - for (int j = posj; j < clusterCount - 1; j++) - distance.setEntry(i, j, distance.getEntry(i, j + 1)); - } - - /** - * @param Clustering - * The array of clusters - */ - Array2DRowRealMatrix updateDistances(ArrayList clustering) { - int clusterCount = clustering.size(); - Array2DRowRealMatrix distance = new Array2DRowRealMatrix(clusterCount, clusterCount); - for (int i = 0; i < clusterCount; i++) { - for (int j = 0; j <= i; j++) { - distance.setEntry(i, j, computeDistance(clustering.get(i), clustering.get(j))); - distance.setEntry(j, i, distance.getEntry(i, j)); - } - } - return distance; - } - - double computeDistance(SpeakerCluster c1, SpeakerCluster c2) { - int rowDim = c1.getFeatureMatrix().getRowDimension() + c2.getFeatureMatrix().getRowDimension(); - int colDim = c1.getFeatureMatrix().getColumnDimension(); - Array2DRowRealMatrix combinedFeatures = new Array2DRowRealMatrix(rowDim, colDim); - combinedFeatures.setSubMatrix(c1.getFeatureMatrix().getData(), 0, 0); - combinedFeatures.setSubMatrix(c2.getFeatureMatrix().getData(), c1.getFeatureMatrix() - .getRowDimension(), 0); - double bicValue = getBICValue(combinedFeatures); - double d = Segment.FEATURES_SIZE; - double penalty = 0.5 * (d + 0.5 * d * (d + 1)) * Math.log(combinedFeatures.getRowDimension()) * 2; - return bicValue - c1.getBicValue() - c2.getBicValue() - penalty; - } - - /** - * @param lst - * An ArrayList with all the values being vectors of the same - * dimension - * @return The RealMatrix with the vectors from the ArrayList on columns - */ - Array2DRowRealMatrix ArrayToRealMatrix(ArrayList lst, int size) { - int length = lst.get(1).length; - Array2DRowRealMatrix ret = new Array2DRowRealMatrix(size, length); - int i = 0; - for (i = 0; i < size; i++) { - double[] converted = new double[length]; - for (int j = 0; j < length; j++) - converted[j] = ((lst.get(i))[j]); - ret.setRow(i, converted); - } - return ret; - } - - void printMatrix(Array2DRowRealMatrix a) { - for (int i = 0; i < a.getRowDimension(); i++) { - for (int j = 0; j < a.getColumnDimension(); j++) - System.out.print(a.getEntry(i, j) + " "); - System.out.println(); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/speakerid/Tester.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/speakerid/Tester.java deleted file mode 100755 index 46b583f6..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/speakerid/Tester.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.speakerid; - -import java.io.*; -import java.util.ArrayList; -import java.util.Random; - -public class Tester { - - /** - * Generates artificial input with distinct speakers based - * - * @param vectorSize - * The dimension of a feature vector - * @param vectorsCount - * The number of features vectors per speakers - * @param speakersCount - * The number of speakers - * @return List of features that satisfies the given requirements - */ - public static ArrayList generateDistinctSpeakers(int vectorSize, int vectorsCount, - int speakersCount) { - Random rd = new Random(); - ArrayList ret = new ArrayList(); - float[] dummy = new float[vectorSize]; - for (int i = 0; i < speakersCount; i++) { - for (int j = 0; j < vectorSize; j++) - dummy[j] = (float) (i + 1) / 10 + (float) rd.nextInt(5000) / 50000; - dummy[0] = 3 + (float) (i + 1) / 10; - for (int j = 0; j < vectorsCount; j++) { - float[] copy = new float[vectorSize]; - for (int k = 0; k < vectorSize; k++) - copy[k] = dummy[k] + (float) rd.nextInt(5000) / 50000; - ret.add(copy); - } - } - return ret; - } - - /** - * Returns string version of the given time in miliseconds - * - * @param seconds seconds to convert - * @return time in mm:ss format - */ - public static String time(int seconds) { - return (seconds / 60000) + ":" + (Math.round((double) (seconds % 60000) / 1000)); - } - - /** - * @param speakers - * An array of clusters for which it is needed to be printed the - * speakers intervals - */ - public static void printIntervals(ArrayList speakers) { - System.out.println("Detected " + speakers.size() + " Speakers :"); - int idx = 0; - for (SpeakerCluster spk : speakers) { - System.out.print("Speaker " + (++idx) + ": "); - ArrayList segments = spk.getSpeakerIntervals(); - for (Segment seg : segments) - System.out.print("[" + time(seg.getStartTime()) + " " + time(seg.getLength()) + "]"); - System.out.println(); - } - } - - /** - * - * @param speakers - * An array of clusters for which it is needed to be printed the - * speakers intervals - * @param fileName the file to print to - * @throws IOException if error occurred - */ - public static void printSpeakerIntervals(ArrayList speakers, String fileName) - throws IOException { - String ofName = fileName.substring(0, fileName.indexOf('.')) + ".seg"; - FileWriter fr = new FileWriter(ofName); - int idx = 0; - for (SpeakerCluster spk : speakers) { - idx ++; - ArrayList segments = spk.getSpeakerIntervals(); - for (Segment seg : segments) - fr.write(fileName + " " + 1 + " " + seg.getStartTime() / 10 + " " + seg.getLength() / 10 - + "U U U Speaker" + idx + "\n"); - } - fr.close(); - } - - /** - * Test method for SpeakerIdentification, based on artificial input with - * non-repeated speakers - * - * @param vectorSize - * number of features (Segment.FEATURES_SIZE) - * @param vectorsCount - * number of frames for each speaker - * @param speakersCount - * number of speakers - */ - public static void testDistinctSpeakerIdentification(int vectorSize, int vectorsCount, int speakersCount) { - ArrayList ret = generateDistinctSpeakers(vectorSize, vectorsCount, speakersCount); - printIntervals(new SpeakerIdentification().cluster(ret)); - } - - /** - * Test method for SpeakerIdentification, based on artificial input with - * repeated speakers - * - * @param vectorSize - * number of features (Segment.FEATURES_SIZE) - * @param vectorsCount - * number of frames for each speaker - * @param speakersCount - * number of speakers - * @param repeatFactor - * number of times the input should be repeated - */ - public static void testRepeatedSpeakerIdentification(int vectorSize, int vectorsCount, int speakersCount, - int repeatFactor) { - ArrayList lst = new ArrayList(); - ArrayList aux = generateDistinctSpeakers(vectorSize, vectorsCount, speakersCount); - for (int i = 0; i < repeatFactor; i++) - lst.addAll(aux); - printIntervals(new SpeakerIdentification().cluster(lst)); - } - - /** - * Tests SpeakerIdentification on input file given as parameter. - * - * @param inputFile - * the input file that needs to be diarized - * @throws IOException if IO went wrong - */ - public static void testSpeakerIdentification(String inputFile) throws IOException { - InputStream stream = new FileInputStream(inputFile); - ArrayList speakers = new SpeakerIdentification().cluster(stream); - printIntervals(speakers); - printSpeakerIntervals(speakers, inputFile); - } - - public static void main(String[] args) throws IOException { - String inputFile = null; - for (int i = 0; i < args.length; i++) - if (args[i].equals("-i")) - inputFile = args[++i]; - testSpeakerIdentification(inputFile); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/aligner/Aligner.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/aligner/Aligner.java deleted file mode 100755 index 11dd910e..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/aligner/Aligner.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright 1999-2013 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ - -package edu.cmu.sphinx.tools.aligner; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import javax.sound.sampled.AudioFileFormat; -import javax.sound.sampled.AudioFormat; -import javax.sound.sampled.AudioInputStream; -import javax.sound.sampled.AudioSystem; -import javax.sound.sampled.UnsupportedAudioFileException; - -import edu.cmu.sphinx.api.SpeechAligner; -import edu.cmu.sphinx.util.TimeFrame; -import edu.cmu.sphinx.result.WordResult; - -/** - * This is a simple tool to align audio to text and dump a database - * for the training/evaluation. - * - * You need to provide a model, dictionary, audio and the text to align. - */ -public class Aligner { - - private static int MIN_FILLER_LENGTH = 200; - - /** - * @param args acoustic model, dictionary, audio file, text - * @throws Exception if error occurs - */ - public static void main(String args[]) throws Exception { - File file = new File(args[2]); - SpeechAligner aligner = new SpeechAligner(args[0], args[1], null); - splitStream(file, aligner.align(file.toURI().toURL(), args[3])); - } - - private static void splitStream(File inFile, List results) - throws UnsupportedAudioFileException, IOException - { - System.err.println(results.size()); - - List> utts = new ArrayList>(); - List currentUtt = null; - int fillerLength = 0; - - for (WordResult result : results) { - if (result.isFiller()) { - fillerLength += result.getTimeFrame().length(); - if (fillerLength > MIN_FILLER_LENGTH) { - if (currentUtt != null) - utts.add(currentUtt); - - currentUtt = null; - } - } else { - fillerLength = 0; - if (currentUtt == null) - currentUtt = new ArrayList(); - - currentUtt.add(result); - } - } - - if (null != currentUtt) - utts.add(currentUtt); - - int count = 0; - for (List utt : utts) { - long startFrame = Long.MAX_VALUE; - long endFrame = Long.MIN_VALUE; - - for (WordResult result : utt) { - TimeFrame frame = result.getTimeFrame(); - startFrame = Math.min(startFrame, frame.getStart()); - endFrame = Math.max(endFrame, frame.getEnd()); - System.out.print(result.getPronunciation().getWord()); - System.out.print(' '); - } - - String[] basename = inFile.getName().split("\\.wav$"); - String uttId = String.format("%03d0", count); - String outPath = String.format("%s-%s.wav", basename[0], uttId); - System.out.println("(" + uttId + ")"); - count++; - - dumpStreamChunk(inFile, outPath, startFrame - MIN_FILLER_LENGTH, - endFrame - startFrame + MIN_FILLER_LENGTH); - } - } - - private static void dumpStreamChunk(File file, String dstPath, - long offset, long length) - throws UnsupportedAudioFileException, IOException - { - AudioFileFormat fileFormat = AudioSystem.getAudioFileFormat(file); - AudioInputStream inputStream = AudioSystem.getAudioInputStream(file); - AudioFormat audioFormat = fileFormat.getFormat(); - int bitrate = Math.round(audioFormat.getFrameSize() * - audioFormat.getFrameRate() / 1000); - - inputStream.skip(offset * bitrate); - AudioInputStream chunkStream = - new AudioInputStream(inputStream, audioFormat, length * bitrate); - AudioSystem.write(chunkStream, fileFormat.getType(), new File(dstPath)); - inputStream.close(); - chunkStream.close(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/AudioData.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/AudioData.java deleted file mode 100755 index b8ff687f..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/AudioData.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2002-2004 Sun Microsystems, Inc. - * Portions Copyright 2002-2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.tools.audio; - -import javax.sound.sampled.AudioFormat; -import javax.sound.sampled.AudioInputStream; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -/** Represents a 16bit, SIGNED_PCM, little endian audio clip with a sample rate specified by AudioFormat. */ -public class AudioData { - - protected AudioFormat format; - protected short[] shorts; - protected final List listeners = new ArrayList(); - protected int selectionStart = -1; - protected int selectionEnd = -1; - - /** No-arg constructor. Creates an empty clip at 8kHz sample rate. */ - public AudioData() { - this.format = new AudioFormat(8000f, - 16, // sample size in bits - 1, // mono - true, // signed - false); // little endian - shorts = new short[0]; - } - - - /** - * Creates a new AudioData with the given data and sample rate. Expects the data to be 16bit, little endian, - * SIGNED_PCM. - * - * @param data the audio samples; one sample per element in the array - * @param sampleRate the sample rate in Hz - */ - public AudioData(short[] data, float sampleRate) { - this.shorts = data; - this.format = new AudioFormat(sampleRate, - 16, // sample size in bits - 1, // mono - true, // signed - false); // little endian - } - - - /** - * Creates a new AudioData from the given AudioInputStream, converting the data to 16bit, little endian, SIGNED_PCM if - * needed. - * - * @param ais the AudioInputStream - * @throws IOException if problems happen when reading from ais - */ - public AudioData(AudioInputStream ais) throws IOException { - this.shorts = Utils.toSignedPCM(ais); - this.format = new AudioFormat(ais.getFormat().getSampleRate(), - 16, // sample size in bits - 1, // mono - true, // signed - false); // little endian - } - - - /** - * Gets the SIGNED_PCM 16 bit little endian audio data. NOTE: this the actual array held by this object, so only use - * it as a reference (i.e., don't modify the contents). - * - * @return the SIGNED_PCM 16 bit little endian samples - */ - public short[] getAudioData() { - return shorts; - } - - - /** - * Sets the audio data and notifies all ChangeListeners. - * - * @param data the new SIGNED_PCM 16 bit little endian samples - */ - public void setAudioData(short[] data) { - this.shorts = data; - fireStateChanged(); - } - - - /** - * Gets the audio format. - * - * @return the AudioFormat for the data managed by this object - */ - public AudioFormat getAudioFormat() { - return format; - } - - - /** - * Add a ChangeListener. - * - * @param listener the listener to add - */ - public void addChangeListener(ChangeListener listener) { - listeners.add(listener); - } - - - /** - * Remove a ChangeListener. - * - * @param listener the listener to remove - */ - public void removeChangeListener(ChangeListener listener) { - listeners.remove(listener); - } - - - /** Notify all ChangeListeners of a change. */ - protected void fireStateChanged() { - ChangeEvent event = new ChangeEvent(this); - for (ChangeListener listener : listeners) - listener.stateChanged(event); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/AudioDataInputStream.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/AudioDataInputStream.java deleted file mode 100755 index 0db855bc..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/AudioDataInputStream.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2002-2004 Sun Microsystems, Inc. - * Portions Copyright 2002-2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.tools.audio; - -import javax.sound.sampled.AudioFormat; -import java.io.IOException; -import java.io.InputStream; - -/** Converts an AudioData into an InputStream. */ -public class AudioDataInputStream extends InputStream { - - AudioFormat format; - int currentIndex; - int markIndex; - final short[] shorts; - final byte[] bytes; - - - /** - * Creates a new AudioDataInputStream for the given AudioData. - * - * @param audio the AudioData to turn into an AudioDataInputStream - */ - public AudioDataInputStream(AudioData audio) { - shorts = audio.getAudioData(); - bytes = new byte[2 * shorts.length]; - - byte[] sample = new byte[2]; - for (int i = 0; i < shorts.length; i++) { - Utils.toBytes(shorts[i], sample, true); - bytes[i * 2 + 1] = sample[0]; - bytes[i * 2] = sample[1]; - } - } - - - // inherited from InputStream - // - @Override - public int read() throws IOException { - if (currentIndex >= bytes.length) { - return -1; - } else { - return bytes[currentIndex++]; - } - } - - - // inherited from InputStream - // - @Override - public int read(byte[] buf) throws IOException { - int count = 0; - for (int i = 0; i < buf.length; i++) { - if (currentIndex >= bytes.length) { - break; - } else { - buf[i] = bytes[currentIndex++]; - count++; - } - } - return (count == 0) ? -1 : count; - } - - - // inherited from InputStream - // - @Override - public int read(byte[] buf, int off, int len) throws IOException { - int count = 0; - for (int i = 0; (i < len) && ((i + off) < buf.length); i++) { - if (currentIndex >= bytes.length) { - break; - } else { - buf[i + off] = bytes[currentIndex++]; - count++; - } - } - return (count == 0) ? -1 : count; - } - - - // inherited from InputStream - // - public long skip(int n) throws IOException { - int actual = n; - if ((currentIndex + n) > bytes.length) { - actual = bytes.length - currentIndex; - } - currentIndex += actual; - return actual; - } - - - // inherited from InputStream - // - @Override - public int available() throws IOException { - return bytes.length - currentIndex; - } - - - // inherited from InputStream - // - @Override - public void close() throws IOException { - super.close(); - } - - - // inherited from InputStream - // - @Override - public void mark(int readLimit) { - markIndex = currentIndex; - } - - - // inherited from AudioInputStream - // - @Override - public boolean markSupported() { - return true; - } - - - // inherited from AudioInputStream - // - @Override - public void reset() throws IOException { - currentIndex = markIndex; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/AudioPanel.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/AudioPanel.java deleted file mode 100755 index ac3db8a8..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/AudioPanel.java +++ /dev/null @@ -1,349 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2002-2004 Sun Microsystems, Inc. - * Portions Copyright 2002-2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.tools.audio; - -import javax.swing.*; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import java.awt.*; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.awt.event.MouseMotionListener; -import java.util.Arrays; - -/** Provides an interface to view and play back various forms of an audio signal. */ -@SuppressWarnings("serial") -public class AudioPanel extends JPanel - implements MouseMotionListener, MouseListener { - - private final AudioData audio; - private float[] labelTimes; - private String[] labels; - private float xScale; - private final float yScale; - private final float originalXScale; - private int xDragStart; - private int xDragEnd; - protected int selectionStart = -1; - protected int selectionEnd = -1; - - - /** - * Creates a new AudioPanel. The scale factors represent how much to scale the audio. A scaleX factor of 1.0f - * means one pixel per sample, and a scaleY factor of 1.0f means one pixel per resolution of the sample (e.g., a - * scale of 1.0f would take 2**16 pixels). - * - * @param audioData the AudioData to draw - * @param scaleX how much to scale the width of the audio - * @param scaleY how much to scale the height - */ - public AudioPanel(AudioData audioData, - float scaleX, - float scaleY) { - this.audio = audioData; - labelTimes = new float[0]; - labels = new String[0]; - this.xScale = scaleX; - this.yScale = scaleY; - this.originalXScale = this.xScale; - - int width = (int) (audio.getAudioData().length * xScale); - int height = (int) ((1 << 16) * yScale); - - setPreferredSize(new Dimension(width, height)); - setBackground(Color.white); - - audio.addChangeListener(new ChangeListener() { - public void stateChanged(ChangeEvent event) { - int width = (int) (audio.getAudioData().length * xScale); - int height = (int) ((1 << 16) * yScale); - - labelTimes = new float[0]; - labels = new String[0]; - - setSelectionStart(-1); - setSelectionEnd(-1); - - setPreferredSize(new Dimension(width, height)); - Dimension sz = getSize(); - - revalidate(); - repaint(0, 0, 0, sz.width, sz.height); - } - }); - - addMouseMotionListener(this); - addMouseListener(this); - setFocusable(true); - requestFocus(); - } - - - /** Sets the labels to be used when drawing this panel. - * @param labelTimes label times - * @param labels labels - */ - public void setLabels(float[] labelTimes, String[] labels) { - this.labelTimes = labelTimes; - this.labels = labels; - repaint(); - } - - - /** Sets the zoom, adjusting the scroll bar in the process. - * @param zoom float zoom - */ - protected void zoomSet(float zoom) { - xScale = originalXScale * zoom; - int width = (int) (audio.getAudioData().length * xScale); - int height = (int) ((1 << 16) * yScale); - - setPreferredSize(new Dimension(width, height)); - revalidate(); - repaint(); - } - - - /** - * Repaints the component with the given Graphics. - * - * @param g the Graphics to use to repaint the component. - */ - @Override - public void paintComponent(Graphics g) { - int pos, index; - int length; - - super.paintComponent(g); - - Dimension sz = getSize(); - int gZero = sz.height / 2; - short[] audioData = audio.getAudioData(); - - /** - * Only draw what is in the viewport. - */ - JViewport viewport = getViewport(); - if (viewport != null) { - Rectangle r = viewport.getViewRect(); - pos = (int) r.getX(); - length = (int) r.getWidth(); - } else { - pos = 0; - length = (int) (audioData.length * xScale); - } - - /** - * Fill in the whole image with white. - */ - g.setColor(Color.WHITE); - g.fillRect(pos, 0, length, sz.height - 1); - - /** - * Now fill in the audio selection area as gray. - */ - index = Math.max(0, getSelectionStart()); - int start = (int) (index * xScale); - index = getSelectionEnd(); - if (index == -1) { - index = audioData.length - 1; - } - int end = (int) (index * xScale); - g.setColor(Color.LIGHT_GRAY); - g.fillRect(start, 0, - end - start, sz.height - 1); - - /* Now scale the audio data and draw it. - */ - int[] x = new int[length]; - int[] y = new int[length]; - for (int i = 0; i < length; i++) { - x[i] = pos; - index = (int) (pos / xScale); - if (index < audioData.length) { - y[i] = gZero - (int) (audioData[index] * yScale); - } else { - break; - } - pos++; - } - g.setColor(Color.RED); - g.drawPolyline(x, y, length); - - /** - * Now draw the labels. - */ - for (int i = 0; i < labelTimes.length; i++) { - pos = (int) (xScale - * labelTimes[i] - * audio.getAudioFormat().getSampleRate()); - g.drawLine(pos, 0, pos, sz.height - 1); - g.drawString(labels[i], pos + 5, sz.height - 5); - } - } - - - /** Finds the JViewport enclosing this component. */ - private JViewport getViewport() { - Container p = getParent(); - if (p instanceof JViewport) { - Container gp = p.getParent(); - if (gp instanceof JScrollPane) { - JScrollPane scroller = (JScrollPane) gp; - JViewport viewport = scroller.getViewport(); - if (viewport == null || viewport.getView() != this) { - return null; - } else { - return viewport; - } - } - } - return null; - } - - - /** - * Returns the index of the sample representing the start of the selection. -1 means the very beginning. - * - * @return the start of the selection - * @see #crop - * @see #getSelectionEnd - */ - public int getSelectionStart() { - return selectionStart; - } - - - /** - * Sets the index of the sample of representing the start of the selection. -1 means the very beginning. - * - * @param newStart the new selection start - * @see #crop - * @see #setSelectionEnd - */ - public void setSelectionStart(int newStart) { - selectionStart = newStart; - if (selectionEnd != -1) { - if (selectionEnd < selectionStart) { - selectionEnd = selectionStart; - } - } - } - - - /** - * Returns the index of the sample representing the end of the selection. -1 means the very end. - * - * @return the end of the selection - * @see #crop - * @see #getSelectionStart - */ - public int getSelectionEnd() { - return selectionEnd; - } - - - /** - * Sets the index of the sample of representing the end of the selection. -1 means the very end. - * - * @param newEnd the new selection end - * @see #crop - * @see #setSelectionStart - */ - public void setSelectionEnd(int newEnd) { - selectionEnd = newEnd; - if (selectionEnd != -1) { - if (selectionStart > selectionEnd) { - selectionStart = selectionEnd; - } - } - } - - - /** - * Crops the audio data between the start and end selections. All audio data outside the region will be permanently - * lost. The selection will be reset to the very beginning and very end of the cropped clip. - * - * @see #getSelectionStart - * @see #getSelectionEnd - */ - public void crop() { - short[] shorts = audio.getAudioData(); - int start = Math.max(0, getSelectionStart()); - int end = getSelectionEnd(); - if (end == -1) { - end = shorts.length; - } - audio.setAudioData(Arrays.copyOfRange(shorts, start, end)); - - setSelectionStart(-1); - setSelectionEnd(-1); - } - - - /** Clears the current selection. */ - public void selectAll() { - setSelectionStart(-1); - setSelectionEnd(-1); - repaint(); - } - - - /** - * When the mouse is pressed, we update the selection in the audio. - * - * @param evt the mouse pressed event - */ - public void mousePressed(MouseEvent evt) { - xDragStart = Math.max(0, evt.getX()); - setSelectionStart((int) (xDragStart / xScale)); - setSelectionEnd((int) (xDragStart / xScale)); - repaint(); - } - - - /** - * When the mouse is dragged, we update the selection in the audio. - * - * @param evt the mouse dragged event - */ - public void mouseDragged(MouseEvent evt) { - xDragEnd = evt.getX(); - if (xDragEnd < (int) (getSelectionStart() * xScale)) { - setSelectionStart((int) (xDragEnd / xScale)); - } else { - setSelectionEnd((int) (xDragEnd / xScale)); - } - repaint(); - } - - - public void mouseReleased(MouseEvent evt) { - } - - - public void mouseMoved(MouseEvent evt) { - } - - - public void mouseEntered(MouseEvent evt) { - } - - - public void mouseExited(MouseEvent evt) { - } - - - public void mouseClicked(MouseEvent evt) { - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/AudioPlayer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/AudioPlayer.java deleted file mode 100755 index 0f6891cf..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/AudioPlayer.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2002-2004 Sun Microsystems, Inc. - * Portions Copyright 2002-2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.tools.audio; - -import javax.sound.sampled.AudioFormat; -import javax.sound.sampled.AudioSystem; -import javax.sound.sampled.DataLine; -import javax.sound.sampled.SourceDataLine; - -/** Plays an AudioData in a separate thread. */ -public class AudioPlayer extends Thread { - - private final AudioData audio; - private SourceDataLine line; - private int selectionStart; - private int selectionEnd; - - - /* Creates a new AudioPlayer for the given AudioData. */ - public AudioPlayer(AudioData audio) { - this.audio = audio; - selectionStart = 0; - selectionEnd = audio.getAudioData().length; - } - - - /* Notifies the AudioPlayer thread to play the audio. */ - public void play(int selectionStart, int selectionEnd) { - synchronized (audio) { - this.selectionStart = selectionStart; - this.selectionEnd = selectionEnd; - audio.notify(); - } - } - - - /* Plays the AudioData in a separate thread. */ - @Override - public void run() { - while (true) { - try { - synchronized (audio) { - audio.wait(); - AudioFormat format = audio.getAudioFormat(); - short[] data = audio.getAudioData(); - int start = Math.max(0, selectionStart); - int end = selectionEnd; - if (end == -1) { - end = data.length; - } - - DataLine.Info info = - new DataLine.Info(SourceDataLine.class, - format); - line = (SourceDataLine) AudioSystem.getLine(info); - line.open(format); - line.start(); - - byte[] frame = new byte[2]; - for (int i = start; - i < end && i < data.length; i++) { - Utils.toBytes(data[i], frame, false); - line.write(frame, 0, frame.length); - } - - line.drain(); - line.close(); - line = null; - } - } catch (Exception e) { - e.printStackTrace(); - break; - } - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/AudioTool.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/AudioTool.java deleted file mode 100755 index 900cff1b..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/AudioTool.java +++ /dev/null @@ -1,594 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2002-2004 Sun Microsystems, Inc. - * Portions Copyright 2002-2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.tools.audio; - -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.frontend.DoubleData; -import edu.cmu.sphinx.frontend.FrontEnd; -import edu.cmu.sphinx.frontend.util.Microphone; -import edu.cmu.sphinx.frontend.util.StreamDataSource; -import edu.cmu.sphinx.frontend.window.RaisedCosineWindower; -import edu.cmu.sphinx.util.props.ConfigurationManager; -import edu.cmu.sphinx.util.props.PropertySheet; - -import javax.sound.sampled.*; -import javax.swing.*; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.io.*; -import java.net.URL; -import java.util.Arrays; -import java.util.StringTokenizer; -import java.util.prefs.Preferences; - - -/** - * Records and displays the waveform and spectrogram of an audio signal. See How - * to Run AudioTool for information on how to run AudioTool. - */ -public class AudioTool { - - static final String CONTEXT = "AudioTool"; - static final String PREFS_CONTEXT = "/edu/cmu/sphinx/tools/audio/" - + CONTEXT; - static final String FILENAME_PREFERENCE = "filename"; - - // ------------------------------- - // Component names - // ----------------------------------- - // These names should match the corresponding names in the - // spectrogram.config.xml - - static final String MICROPHONE = "microphone"; - static final String FRONT_END = "frontEnd"; - static final String CESPTRUM_FRONT_END = "cepstrumFrontEnd"; - static final String DATA_SOURCE = "streamDataSource"; - static final String CEPSTRUM_DATA_SOURCE = "cstreamDataSource"; - static final String WINDOWER = "windower"; - - static AudioData audio; - static JFrame jframe; - static AudioPanel audioPanel; - static SpectrogramPanel spectrogramPanel; - static CepstrumPanel cepstrumPanel; - static JFileChooser fileChooser; - static String filename; - static File file; - static AudioPlayer player; - static Microphone recorder; - static boolean recording; - static Preferences prefs; - static float zoom = 1.0f; - - private static JMenuItem saveMenuItem; - - private static JButton playButton; - private static JButton recordButton; - private static JButton zoomInButton; - private static JButton zoomOutButton; - private static JButton zoomResetButton; - - private static ActionListener recordListener; - - - /* Dumps the information about a line. */ - private static void dumpLineInfo(String indent, - Line.Info[] lineInfo) { - int numDumped = 0; - - if (lineInfo != null) { - for (Line.Info info : lineInfo) { - if (info instanceof DataLine.Info) { - AudioFormat[] formats = - ((DataLine.Info)info).getFormats(); - for (AudioFormat format : formats) { - System.out.println(indent + format); - } - numDumped++; - } else if (info instanceof Port.Info) { - System.out.println(indent + info); - numDumped++; - } - } - } - - if (numDumped == 0) { - System.out.println(indent + "none"); - } - } - - - /* Lists all the available audio devices. */ - private static void dumpMixers() { - Mixer.Info[] mixerInfo = AudioSystem.getMixerInfo(); - - for (int i = 0; i < mixerInfo.length; i++) { - Mixer mixer = AudioSystem.getMixer(mixerInfo[i]); - System.out.println("Mixer[" + i + "]: \"" - + mixerInfo[i].getName() + '\"'); - System.out.println(" Description: " - + mixerInfo[i].getDescription()); - - System.out.println(" SourceLineInfo (e.g., speakers):"); - dumpLineInfo(" ", mixer.getSourceLineInfo()); - - System.out.println(" TargetLineInfo (e.g., microphones):"); - dumpLineInfo(" ", mixer.getTargetLineInfo()); - } - } - - - /* Gets a filename. */ - static public void getFilename(String title, int type) { - int returnVal; - - fileChooser.setDialogTitle(title); - fileChooser.setCurrentDirectory(file); - fileChooser.setDialogType(type); - - if (type == JFileChooser.OPEN_DIALOG) { - returnVal = fileChooser.showOpenDialog(jframe); - } else { - returnVal = fileChooser.showSaveDialog(jframe); - } - if (returnVal == JFileChooser.APPROVE_OPTION) { - file = fileChooser.getSelectedFile(); - filename = file.getAbsolutePath(); - prefs.put(FILENAME_PREFERENCE, filename); - } - } - - - static public void populateAudio(String filename) { - try { - AudioData newAudio = Utils.readAudioFile(filename); - if (newAudio == null) { - newAudio = Utils.readRawFile(filename); - } - zoomReset(); - audio.setAudioData(newAudio.getAudioData()); - /* - * Play only if user requests. Auto play is annoying if - * the audio is too long - * - * player.play(audioPanel.getSelectionStart(), - * audioPanel.getSelectionEnd()); - */ - } catch (IOException e) { - /* just ignore bad files. */ - } - } - - - static public void getAudioFromFile(String filename) throws IOException { - /* Supports alignment data. The format of the alignment file - * is as follows: - * - * input filename String - * number of (time tag) lines int - * time tag float String - * time tag float String - * time tag float String - * ... - * - * Times are in seconds. - */ - if (filename.endsWith(".align")) { - BufferedReader reader = new BufferedReader( - new InputStreamReader(new FileInputStream(filename))); - - populateAudio(reader.readLine()); - - int numPoints = Integer.parseInt(reader.readLine()); - float[] times = new float[numPoints]; - String[] labels = new String[numPoints]; - for (int i = 0; i < numPoints; i++) { - StringTokenizer tokenizer = new StringTokenizer( - reader.readLine()); - while (tokenizer.hasMoreTokens()) { - times[i] = Float.parseFloat(tokenizer.nextToken()); - labels[i] = tokenizer.nextToken(); - } - } - audioPanel.setLabels(times, labels); - - reader.close(); - } else { - populateAudio(filename); - } - } - - - /* Gets the audio that's in the recorder. This should only be called after recorder.stopRecording is called. */ - static private short[] getRecordedAudio(Microphone recorder) { - short[] shorts = new short[0]; - int sampleRate = 8000; - - /* [[[WDW - TODO: this is not the most efficient way - * to do this, but it at least works for now.]]] - */ - while (recorder.hasMoreData()) { - try { - Data data = recorder.getData(); - if (data instanceof DoubleData) { - sampleRate = - ((DoubleData) data).getSampleRate(); - double[] values = - ((DoubleData) data).getValues(); - short[] newShorts = Arrays.copyOf(shorts, shorts.length + values.length); - for (int i = 0; i < values.length; i++) { - newShorts[shorts.length + i] = (short)values[i]; - } - shorts = newShorts; - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - if (sampleRate > 8000) { - System.out.println("Downsampling from " + - sampleRate + " to 8000."); - shorts = Downsampler.downsample( - shorts, - sampleRate / 1000, - 16); - } - - return shorts; - } - - - /* Zoom the panels according to the zoom scale. */ - private static void zoomPanels() { - if (audioPanel != null) { - audioPanel.zoomSet(zoom); - } - if (spectrogramPanel != null) { - spectrogramPanel.zoomSet(zoom); - } - if (cepstrumPanel != null) { - cepstrumPanel.zoomSet(zoom); - } - } - - - private static void zoomIn() { - zoom *= 2.0f; - zoomPanels(); - } - - - private static void zoomOut() { - zoom /= 2.0f; - zoomPanels(); - } - - - private static void zoomReset() { - zoom = 1.0f; - zoomPanels(); - } - - - private static void createMenuBar(JFrame jframe) { - JMenuBar menuBar = new JMenuBar(); - jframe.setJMenuBar(menuBar); - - JMenu menu = new JMenu("File"); - menuBar.add(menu); - - JMenuItem menuItem = new JMenuItem("Open..."); - menuItem.setAccelerator(KeyStroke.getKeyStroke("control O")); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - getFilename("Open...", JFileChooser.OPEN_DIALOG); - if (filename == null || filename.isEmpty()) { - return; - } - try { - getAudioFromFile(filename); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - menu.add(menuItem); - - saveMenuItem = new JMenuItem("Save"); - saveMenuItem.setAccelerator(KeyStroke.getKeyStroke("control S")); - saveMenuItem.setEnabled(false); - saveMenuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - if (filename != null && !filename.isEmpty()) { - try { - Utils.writeRawFile(audio, filename); - saveMenuItem.setEnabled(false); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - }); - menu.add(saveMenuItem); - - menuItem = new JMenuItem("Save As..."); - menuItem.setAccelerator(KeyStroke.getKeyStroke("control V")); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - getFilename("Save As...", JFileChooser.SAVE_DIALOG); - if (filename == null || filename.isEmpty()) { - return; - } - try { - Utils.writeRawFile(audio, filename); - saveMenuItem.setEnabled(false); - } catch (IOException e) { - e.printStackTrace(); - } - } - }); - menu.add(menuItem); - - menuItem = new JMenuItem("Quit"); - menuItem.setAccelerator(KeyStroke.getKeyStroke("control Q")); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - System.exit(0); - } - }); - menu.add(menuItem); - - - menu = new JMenu("Edit"); - menuBar.add(menu); - - menuItem = new JMenuItem("Select All"); - menuItem.setAccelerator(KeyStroke.getKeyStroke("control A")); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - audioPanel.selectAll(); - } - }); - menu.add(menuItem); - - menuItem = new JMenuItem("Crop"); - menuItem.setAccelerator(KeyStroke.getKeyStroke("control X")); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - audioPanel.crop(); - } - }); - menu.add(menuItem); - - - menu = new JMenu("View"); - menuBar.add(menu); - - menuItem = new JMenuItem("Zoom In"); - menuItem.setAccelerator(KeyStroke.getKeyStroke('>')); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - zoomIn(); - } - }); - menu.add(menuItem); - - menuItem = new JMenuItem("Zoom Out"); - menuItem.setAccelerator(KeyStroke.getKeyStroke('<')); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - zoomOut(); - } - }); - menu.add(menuItem); - - menuItem = new JMenuItem("Original Size"); - menuItem.setAccelerator(KeyStroke.getKeyStroke('!')); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - zoomReset(); - } - }); - menu.add(menuItem); - - - menu = new JMenu("Audio"); - menuBar.add(menu); - - menuItem = new JMenuItem("Play"); - menuItem.setAccelerator(KeyStroke.getKeyStroke("control P")); - menuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - player.play(audioPanel.getSelectionStart(), - audioPanel.getSelectionEnd()); - } - }); - menu.add(menuItem); - - recordListener = new ActionListener() { - public void actionPerformed(ActionEvent evt) { - if (!recording) { - recording = true; - recorder.startRecording(); - recordButton.setText("Stop"); - saveMenuItem.setEnabled(true); - } else { - recording = false; - recorder.stopRecording(); - audio.setAudioData(getRecordedAudio(recorder)); - recordButton.setText("Record"); - player.play(audioPanel.getSelectionStart(), - audioPanel.getSelectionEnd()); - } - } - }; - - - menuItem = new JMenuItem("Record Start/Stop"); - menuItem.setAccelerator(KeyStroke.getKeyStroke("control R")); - menuItem.addActionListener(recordListener); - menu.add(menuItem); - } - - - /** - * Create the Panel where all the buttons are. - * @return created panel - */ - private static JPanel createButtonPanel() { - JPanel buttonPanel = new JPanel(); - FlowLayout layout = new FlowLayout(); - layout.setAlignment(FlowLayout.LEFT); - buttonPanel.setLayout(layout); - - playButton = new JButton("Play"); - playButton.setEnabled(true); - playButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - player.play(audioPanel.getSelectionStart(), - audioPanel.getSelectionEnd()); - } - }); - - recordButton = new JButton("Record"); - recordButton.setEnabled(true); - recordButton.addActionListener(recordListener); - - zoomInButton = new JButton("Zoom In"); - zoomInButton.setEnabled(true); - zoomInButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - zoomIn(); - } - }); - - zoomOutButton = new JButton("Zoom Out"); - zoomOutButton.setEnabled(true); - zoomOutButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - zoomOut(); - } - }); - - zoomResetButton = new JButton("Reset Size"); - zoomResetButton.setEnabled(true); - zoomResetButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - zoomReset(); - } - }); - - JButton exitButton = new JButton("Exit"); - exitButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - System.exit(0); - } - }); - - buttonPanel.add(recordButton); - buttonPanel.add(playButton); - buttonPanel.add(zoomInButton); - buttonPanel.add(zoomOutButton); - buttonPanel.add(zoomResetButton); - buttonPanel.add(exitButton); - - return buttonPanel; - } - - static public void main(String[] args) { - FrontEnd frontEnd; - FrontEnd cepstrumFrontEnd; - StreamDataSource dataSource; - StreamDataSource cepstrumDataSource; - - prefs = Preferences.userRoot().node(PREFS_CONTEXT); - filename = prefs.get(FILENAME_PREFERENCE, "untitled.raw"); - file = new File(filename); - - if ((args.length == 1) && (args[0].equals("-dumpMixers"))) { - dumpMixers(); - System.exit(0); - } - - try { - URL url; - if (args.length > 0) { - filename = args[0]; - } - if (args.length == 2) { - url = new File(args[1]).toURI().toURL(); - } else { - url = AudioTool.class.getResource("spectrogram.config.xml"); - } - ConfigurationManager cm = new ConfigurationManager(url); - - recorder = (Microphone) cm.lookup(MICROPHONE); - recorder.initialize(); - audio = new AudioData(); - - frontEnd = (FrontEnd) cm.lookup(FRONT_END); - dataSource = (StreamDataSource) cm.lookup(DATA_SOURCE); - cepstrumFrontEnd = (FrontEnd) cm.lookup(CESPTRUM_FRONT_END); - cepstrumDataSource = (StreamDataSource) cm.lookup(CEPSTRUM_DATA_SOURCE); - - - PropertySheet ps = cm.getPropertySheet(WINDOWER); - float windowShiftInMs = ps.getFloat(RaisedCosineWindower.PROP_WINDOW_SHIFT_MS); - - final JFrame jframe = new JFrame("AudioTool"); - fileChooser = new JFileChooser(); - createMenuBar(jframe); - - /* Scale the width according to the size of the - * spectrogram. - */ - float windowShiftInSamples = windowShiftInMs - * audio.getAudioFormat().getSampleRate() / 1000.0f; - audioPanel = new AudioPanel(audio, - 1.0f / windowShiftInSamples, - 0.004f); - spectrogramPanel = new SpectrogramPanel(frontEnd, dataSource, audio); - cepstrumPanel = new CepstrumPanel(cepstrumFrontEnd, cepstrumDataSource, audio); - - JPanel panel = new JPanel(); - panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS)); - panel.add(audioPanel); - audioPanel.setAlignmentX(0.0f); - panel.add(spectrogramPanel); - spectrogramPanel.setAlignmentX(0.0f); - panel.add(cepstrumPanel); - cepstrumPanel.setAlignmentX(0.0f); - - JScrollPane scroller = new JScrollPane(panel); - - JPanel outerPanel = new JPanel(new BorderLayout()); - outerPanel.add(createButtonPanel(), BorderLayout.NORTH); - outerPanel.add(scroller); - - player = new AudioPlayer(audio); - player.start(); - - getAudioFromFile(filename); - - jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - jframe.setContentPane(outerPanel); - jframe.pack(); - jframe.setSize(640, 400); - jframe.setVisible(true); - } catch (Exception e) { - e.printStackTrace(); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/CepstrumPanel.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/CepstrumPanel.java deleted file mode 100755 index 4f48ecab..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/CepstrumPanel.java +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2002-2004 Sun Microsystems, Inc. - * Portions Copyright 2002-2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.tools.audio; - -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.frontend.DataEndSignal; -import edu.cmu.sphinx.frontend.DoubleData; -import edu.cmu.sphinx.frontend.FloatData; -import edu.cmu.sphinx.frontend.FrontEnd; -import edu.cmu.sphinx.frontend.util.StreamDataSource; - -import javax.swing.*; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import java.awt.*; -import java.awt.image.BufferedImage; -import java.awt.image.FilteredImageSource; -import java.awt.image.ImageFilter; -import java.awt.image.ReplicateScaleFilter; -import java.util.ArrayList; -import java.util.Arrays; - -/** Converts a set of log magnitude Spectrum data into a graphical representation. */ -@SuppressWarnings("serial") -public class CepstrumPanel extends JPanel { - - /** Where the spectrogram will live. */ - protected BufferedImage spectrogram; - - /** A scaled version of the spectrogram image. */ - protected Image scaledSpectrogram; - - /** The zooming factor. */ - protected float zoom = 1.0f; - - /** Offset factor - what will be subtracted from the image to adjust for noise level. */ - protected double offsetFactor; - - /** The audio data. */ - protected AudioData audio; - - - /** The frontEnd (the source of features */ - protected FrontEnd frontEnd; - - /** The source of audio (the first stage of the frontend) */ - protected StreamDataSource dataSource; - - - /** Creates a new JPanel with a double buffer and a flow layout. */ - public CepstrumPanel() { - } - - - /** - * Creates a new SpectrogramPanel for the given AudioData. - * - * @param frontEnd the front end to use - * @param dataSource the source of audio - * @param audioData the AudioData - */ - public CepstrumPanel(FrontEnd frontEnd, - StreamDataSource dataSource, AudioData audioData) { - audio = audioData; - this.frontEnd = frontEnd; - this.dataSource = dataSource; - audio.addChangeListener(new ChangeListener() { - public void stateChanged(ChangeEvent event) { - computeCepstrum(); - } - }); - } - - static final int HSCALE = 10; - - /** Actually creates the Spectrogram image. */ - protected void computeCepstrum() { - try { - AudioDataInputStream is = new AudioDataInputStream(audio); - dataSource.setInputStream(is); - - /* Run through all the spectra one at a time and convert - * them to an log intensity value. - */ - ArrayList intensitiesList = new ArrayList(); - float maxIntensity[] = new float[100]; - Arrays.fill(maxIntensity, Float.MIN_VALUE); - Data spectrum = frontEnd.getData(); - - while (!(spectrum instanceof DataEndSignal)) { - if (spectrum instanceof FloatData) { - float[] spectrumData = ((FloatData) spectrum).getValues(); - float[] intensities = new float[spectrumData.length]; - for (int i = 0; i < intensities.length; i++) { - intensities[i] = spectrumData[i]; - if (Math.abs(intensities[i]) > maxIntensity[i]) { - maxIntensity[i] = Math.abs(intensities[i]); - } - } - intensitiesList.add(intensities); - } - if (spectrum instanceof DoubleData) { - double[] spectrumData = ((DoubleData) spectrum).getValues(); - float[] intensities = new float[spectrumData.length]; - for (int i = 0; i < intensities.length; i++) { - intensities[i] = (float)spectrumData[i]; - if (Math.abs(intensities[i]) > maxIntensity[i]) { - maxIntensity[i] = Math.abs(intensities[i]); - } - } - intensitiesList.add(intensities); - } - spectrum = frontEnd.getData(); - } - is.close(); - - int width = intensitiesList.size(); - int ncep = intensitiesList.get(0).length; - int height = ncep * HSCALE; - Dimension d = new Dimension(width, height); - - setMinimumSize(d); - setMaximumSize(d); - setPreferredSize(d); - - /* Create the image for displaying the data. - */ - spectrogram = new BufferedImage(width, - height, - BufferedImage.TYPE_INT_RGB); - - for (int i = 0; i < width; i++) { - float[] intensities = intensitiesList.get(i); - for (int j = ncep - 1; j >= 0; j--) { - - /* Adjust the grey value to make a value of 0 to mean - * white and a value of 0xff to mean black. - */ - int grey = 0x7f - (int) (intensities[j] / maxIntensity[j] * 0x7f); - - /* Turn the grey into a pixel value. - */ - int pixel = ((grey << 16) & 0xff0000) - | ((grey << 8) & 0xff00) - | (grey & 0xff); - - for (int k = 0; k < HSCALE; k++) - spectrogram.setRGB(i, height - 1 - j * HSCALE - k, pixel); - } - } - ImageFilter scaleFilter = - new ReplicateScaleFilter((int) (zoom * width), height); - scaledSpectrogram = - createImage(new FilteredImageSource(spectrogram.getSource(), - scaleFilter)); - Dimension sz = getSize(); - repaint(0, 0, 0, sz.width - 1, sz.height - 1); - } catch (Exception e) { - e.printStackTrace(); - } - } - - - /** - * Updates the offset factor used to calculate the greyscale values from the intensities. This also calculates and - * populates all the greyscale values in the image. - * - * @param offsetFactor the offset factor used to calculate the greyscale values from the intensities; this is used - * to adjust the level of background noise that shows up in the image - */ - public void setOffsetFactor(double offsetFactor) { - this.offsetFactor = offsetFactor; - computeCepstrum(); - } - - - /** Zoom the image, preparing for new display. - * @param zoom to set - **/ - protected void zoomSet(float zoom) { - this.zoom = zoom; - if (spectrogram != null) { - int width = spectrogram.getWidth(); - int height = spectrogram.getHeight(); - - ImageFilter scaleFilter = - new ReplicateScaleFilter((int) (zoom * width), height); - scaledSpectrogram = - createImage(new FilteredImageSource(spectrogram.getSource(), - scaleFilter)); - Dimension d = new Dimension((int) (width * zoom), height); - setMinimumSize(d); - setMaximumSize(d); - setPreferredSize(d); - repaint(); - } - } - - - /** - * Paint the component. This will be called by AWT/Swing. - * - * @param g The Graphics to draw on. - */ - @Override - public void paint(Graphics g) { - /** - * Fill in the whole image with white. - */ - Dimension sz = getSize(); - - g.setColor(Color.WHITE); - g.fillRect(0, 0, sz.width - 1, sz.height - 1); - - if (spectrogram != null) { - - g.drawImage(scaledSpectrogram, 0, 0, null); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/Downsampler.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/Downsampler.java deleted file mode 100755 index 89cecede..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/Downsampler.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2002-2004 Sun Microsystems, Inc. - * Portions Copyright 2002-2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.tools.audio; - -import java.util.Arrays; - -/** Downsamples an audio clip. */ -public class Downsampler { - - /** - * Downsamples the given audio clip from the given input sample rate to the given output sample rate. - * - * @param inSamples the clip to down sample - one sample per element - * @param srIn the sample rate of the given clip - * @param srOut the sample to downsample to - * @return an array of downsampled samples - */ - public static short[] downsample(short[] inSamples, - int srIn, - int srOut) { - - /* [[[WDW - this was very back of the napkin for me. The main - * idea was to break a series of input samples into chunks - * and have each sample in the chunk contribute to the average - * value. It's brute force, but I didn't have time to think - * of anything less or more grand.]]] - */ - short[] temp = new short[inSamples.length]; - int inSampleIndex = -1; - int outSampleIndex = 0; - int k = srOut; - boolean done = false; - while (!done) { - int sum = 0; - for (int i = 0; i < srIn; i++) { - if (k == srOut) { - inSampleIndex++; - if (inSampleIndex >= inSamples.length) { - done = true; - break; - } - k = 0; - } - sum += inSamples[inSampleIndex]; - k++; - } - temp[outSampleIndex++] = (short) (sum / srIn); - } - return Arrays.copyOf(temp, outSampleIndex); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/FilenameDialog.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/FilenameDialog.java deleted file mode 100755 index da0f4284..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/FilenameDialog.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2002-2004 Sun Microsystems, Inc. - * Portions Copyright 2002-2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.tools.audio; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; - -/** Creates a dialog that prompts for a filename. */ -@SuppressWarnings("serial") -public class FilenameDialog extends JDialog { - - String action; - JTextField filename; - - - /** - * Class constructor. - * - * @param parent the parent of this dialog - * @param modal if true, this dialog box is modal - * @param title the title for the login box - */ - public FilenameDialog(Frame parent, - boolean modal, - String title) { - super(parent, modal); - setTitle(title); - addWindowListener(new WindowAdapter() { - @Override - public void windowClosing(WindowEvent event) { - setVisible(false); - } - }); - createFilenamePanel(); - pack(); - } - - - /** Creates the filename panel. */ - void createFilenamePanel() { - Container contentPane = getContentPane(); - GridBagLayout gridBag = new GridBagLayout(); - GridBagConstraints constraints; - Insets insets; - - contentPane.setLayout(gridBag); - filename = new JTextField(12); - JLabel filenameLabel = new JLabel("Filename:"); - filenameLabel.setLabelFor(filename); - - insets = new Insets(12, 12, 0, 0); // top, left, bottom, right - constraints = new GridBagConstraints( - 0, 0, 1, 1, // x, y, width, height - 0.0, 0.0, // weightx, weighty - GridBagConstraints.WEST, // anchor - GridBagConstraints.NONE, // fill - insets, // insets - 0, 0); // ipadx, ipady - gridBag.setConstraints(filenameLabel, constraints); - contentPane.add(filenameLabel); - - insets = new Insets(12, 7, 0, 12); // top, left, bottom, right - constraints = new GridBagConstraints( - 1, 0, 1, 1, // x, y, width, height - 1.0, 1.0, // weightx, weighty - GridBagConstraints.WEST, // anchor - GridBagConstraints.HORIZONTAL, // fill - insets, // insets - 0, 0); // ipadx, ipady - gridBag.setConstraints(filename, constraints); - contentPane.add(filename); - - /* BUTTON PANEL - */ - JButton okButton = new JButton("Save"); - okButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent event) { - setVisible(false); - } - }); - - insets = new Insets(0, 12, 12, 12); // top, left, bottom, right - constraints = new GridBagConstraints( - 0, 2, 2, 1, // x, y, width, height - 1.0, 1.0, // weightx, weighty - GridBagConstraints.EAST, // anchor - GridBagConstraints.NONE, // fill - insets, // insets - 0, 0); // ipadx, ipady - gridBag.setConstraints(okButton, constraints); - contentPane.add(okButton); - - getRootPane().setDefaultButton(okButton); - } - - - /** - * Gets the user ID. - * - * @return the user ID - */ - public String getFilename() { - return filename.getText(); - } - - - public static void main(String args[]) { - JFrame frame = new JFrame(); - frame.setTitle("Debug"); - frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - frame.pack(); - frame.setVisible(false); - - FilenameDialog dialog = new FilenameDialog(frame, true, "Save as..."); - - System.out.println("Showing dialog..."); - dialog.setVisible(true); - - String filename = dialog.getFilename(); - System.out.println("Filename: " + filename - + " (length = " + filename.length() + ')'); - System.exit(0); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/RawReader.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/RawReader.java deleted file mode 100755 index 501e1981..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/RawReader.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2002-2004 Sun Microsystems, Inc. - * Portions Copyright 2002-2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.tools.audio; - -import javax.sound.sampled.AudioFormat; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; - -/** - * Reads a raw audio file (i.e., a file that is just plain raw samples and nothing else) and converts it to signed - * data. - */ -public class RawReader { - - /** - * Reads raw bytes from the given audioStream and returns samples based on the audioFormat. - * - * @param audioStream the stream containing the raw bytes - * @param audioFormat a hint of what to expect from the stream - * @return samples, one sample per array element - * @throws IOException if IO went wrong - */ - public static short[] readAudioData(InputStream audioStream, - AudioFormat audioFormat) - throws IOException { - - /* Initialize ourselves based on the input data format. - */ - int bytesPerSample; - boolean signedData = true; - boolean bigEndian; - AudioFormat.Encoding encoding = audioFormat.getEncoding(); - bytesPerSample = audioFormat.getSampleSizeInBits() / 8; - if (encoding == AudioFormat.Encoding.PCM_SIGNED) { - signedData = true; - } else if (encoding == AudioFormat.Encoding.PCM_UNSIGNED) { - signedData = false; - } else { - System.err.println("Unsupported audio encoding: " + encoding); - System.exit(-1); - } - bigEndian = audioFormat.isBigEndian(); - - /* Now read in the data, saving the samples in an array list. - * Along the way, convert each sample to little endian signed - * data. - */ - byte[] buffer = new byte[bytesPerSample]; - ArrayList samples = new ArrayList(); - int read = 0; - int totalRead = 0; - boolean done = false; - while (!done) { - totalRead = read = audioStream.read(buffer, 0, bytesPerSample); - while (totalRead < bytesPerSample) { - if (read == -1) { - done = true; - break; - } else { - read = audioStream.read(buffer, - totalRead, - bytesPerSample - totalRead); - totalRead += read; - } - } - if (!done) { - int val = 0; - if (bigEndian) { - val = buffer[0]; - if (!signedData) { - val &= 0xff; - } - for (int i = 1; i < bytesPerSample; i++) { - int temp = buffer[i] & 0xff; - val = (val << 8) + temp; - } - } else { - val = buffer[bytesPerSample - 1]; - if (!signedData) { - val &= 0xff; - } - for (int i = bytesPerSample - 2; i >= 0; i--) { - int temp = buffer[i] & 0xff; - val = (val << 8) + temp; - } - } - - /* We'll always give signed data. So, if the input - * is unsigned, convert it to signed. - */ - if (!signedData) { - val = val - (1 << ((bytesPerSample * 8) - 1)); - } - samples.add((short) val); - } - } - - /* Convert the array list to an array of shorts and return. - */ - short[] audioData = new short[samples.size()]; - for (int i = 0; i < audioData.length; i++) { - audioData[i] = samples.get(i); - } - return audioData; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/RawRecorder.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/RawRecorder.java deleted file mode 100755 index 541cef51..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/RawRecorder.java +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2002-2004 Sun Microsystems, Inc. - * Portions Copyright 2002-2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.tools.audio; - -import javax.sound.sampled.*; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; - -/** Grabs audio from the microphone and returns an array of samples. */ -public class RawRecorder { - - final Object lock = new Object(); - RecordThread recorder; - AudioFormat inFormat; - final AudioFormat outFormat; - TargetDataLine microphone; - boolean downsample; - - - /** - * Create a new RawRecorder. - * - * @param audioFormat the desired output - * @throws LineUnavailableException if the audioFormat is not supported - */ - public RawRecorder(AudioFormat audioFormat) - throws LineUnavailableException { - - inFormat = audioFormat; - outFormat = audioFormat; - - /* Some machines, such as my Mac OS X PowerBook, don't support - * a wide range of input formats. So...we may need to read - * data in using a different format and then resample to the - * desired format. Here, I'm just going to go for 44.1kHz - * 16-bit signed little endian data if the given audio format - * is not supported. - */ - DataLine.Info info = new DataLine.Info(TargetDataLine.class, - inFormat); - - if (!AudioSystem.isLineSupported(info)) { - downsample = true; - inFormat = new AudioFormat(44100.0f, // sample rate - 16, // sample size - 1, // channels (1 == mono) - true, // signed - false); // little endian - info = new DataLine.Info(TargetDataLine.class, - inFormat); - if (!AudioSystem.isLineSupported(info)) { - throw new LineUnavailableException( - "Unsupported format: " + audioFormat); - } - } - - microphone = (TargetDataLine) AudioSystem.getLine(info); - microphone.open(audioFormat, microphone.getBufferSize()); - } - - - /** - * Start recording. The stop method will give us the clip. - * - * @see #stop - */ - public void start() { - synchronized (lock) { - if (recorder != null) { - recorder.stopRecording(); - } - recorder = new RecordThread(); - recorder.start(); - } - } - - - /** - * Stop recording and give us the clip. - * - * @return the clip that was recorded since the last time start was called - * @see #start - */ - public short[] stop() { - synchronized (lock) { - if (recorder == null) { - return new short[0]; - } - ByteArrayOutputStream out = recorder.stopRecording(); - microphone.close(); - recorder = null; - byte audioBytes[] = out.toByteArray(); - ByteArrayInputStream in = new ByteArrayInputStream(audioBytes); - try { - short[] samples = RawReader.readAudioData(in, inFormat); - if (downsample) { - samples = Downsampler.downsample( - samples, - (int) (inFormat.getSampleRate() / 1000.0f), - (int) (outFormat.getSampleRate() / 1000.0f)); - } - return samples; - } catch (IOException e) { - e.printStackTrace(); - return new short[0]; - } - } - } - - - class RecordThread extends Thread { - - boolean done; - final Object lock = new Object(); - ByteArrayOutputStream out; - - - public ByteArrayOutputStream stopRecording() { - try { - synchronized (lock) { - done = true; - lock.wait(); - } - } catch (InterruptedException e) { - } - return out; - } - - - @Override - public void run() { - byte[] data = new byte[microphone.getBufferSize()]; - out = new ByteArrayOutputStream(); - - try { - microphone.flush(); - microphone.start(); - while (!done) { - int numBytesRead = microphone.read(data, 0, data.length); - if (numBytesRead != -1) { - out.write(data, 0, numBytesRead); - } else { - break; - } - } - microphone.stop(); - out.flush(); - } catch (IOException e) { - e.printStackTrace(); - } - synchronized (lock) { - lock.notify(); - } - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/RawWriter.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/RawWriter.java deleted file mode 100755 index 65701218..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/RawWriter.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2002-2004 Sun Microsystems, Inc. - * Portions Copyright 2002-2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.tools.audio; - -import javax.sound.sampled.AudioFormat; -import java.io.IOException; -import java.io.OutputStream; - - -/** Writes raw audio to a file, handling sample size, endian format, and signed/unsigned data. */ -public class RawWriter { - - private final OutputStream outputStream; - private final int bytesPerSample; - private boolean signedData; - - - public RawWriter(OutputStream outputStream, - AudioFormat audioFormat) { - AudioFormat.Encoding encoding = audioFormat.getEncoding(); - this.outputStream = outputStream; - this.bytesPerSample = audioFormat.getSampleSizeInBits() / 8; - if (encoding == AudioFormat.Encoding.PCM_SIGNED) { - this.signedData = true; - } else if (encoding == AudioFormat.Encoding.PCM_UNSIGNED) { - this.signedData = false; - } else { - System.err.println("Unsupported audio encoding: " + encoding); - System.exit(-1); - } - } - - - /** - * Writes the sample to the output stream. - * - * @param sample sampel value - * @throws java.io.IOException if IO went wrong - */ - public void writeSample(int sample) throws IOException { - /* First byte contains the byte that carries the sign. - */ - if (signedData) { - outputStream.write(sample >> ((bytesPerSample - 1) * 8)); - } else { - outputStream.write((sample >> ((bytesPerSample - 1) * 8)) & 0xff); - } - - /* Now just output the rest of the data in little endian form. - */ - for (int i = bytesPerSample - 2; i >= 0; i--) { - outputStream.write((sample >> (i * 8)) & 0xff); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/Sinusoid.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/Sinusoid.java deleted file mode 100755 index 3891ab24..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/Sinusoid.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2002-2004 Sun Microsystems, Inc. - * Portions Copyright 2002-2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.tools.audio; - - -/** A 16bit, linear SIGNED_PCM, little endian, sinusoid with a sample rate of 8kHz. */ -public class Sinusoid extends AudioData { - - /** - * Creates a 16bit, linear SIGNED_PCM, little endian, sinusoid with a sample rate of 8kHz. - * - * @param frequency cycles per second - * @param phase phase offset in radians - * @param amplitude amplitude - * @param duration duration in seconds - */ - public Sinusoid(double frequency, - double phase, - double amplitude, - double duration) { - this.shorts = new short[(int) (8000 * duration)]; - double radiansPerSample = (frequency * 2.0 * Math.PI) / 8000.0; - for (int i = 0; i < shorts.length; i++) { - shorts[i] = (short) ( - amplitude * Math.cos((radiansPerSample * i) + phase)); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/SpectrogramPanel.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/SpectrogramPanel.java deleted file mode 100755 index 6f0248d3..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/SpectrogramPanel.java +++ /dev/null @@ -1,227 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2002-2004 Sun Microsystems, Inc. - * Portions Copyright 2002-2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.tools.audio; - -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.frontend.DataEndSignal; -import edu.cmu.sphinx.frontend.DoubleData; -import edu.cmu.sphinx.frontend.FrontEnd; -import edu.cmu.sphinx.frontend.util.StreamDataSource; - -import javax.swing.*; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import java.awt.*; -import java.awt.image.BufferedImage; -import java.awt.image.FilteredImageSource; -import java.awt.image.ImageFilter; -import java.awt.image.ReplicateScaleFilter; -import java.util.ArrayList; - -/** Converts a set of log magnitude Spectrum data into a graphical representation. */ -@SuppressWarnings("serial") -public class SpectrogramPanel extends JPanel { - - /** Where the spectrogram will live. */ - protected BufferedImage spectrogram; - - /** A scaled version of the spectrogram image. */ - protected Image scaledSpectrogram; - - /** The zooming factor. */ - protected float zoom = 1.0f; - - /** Offset factor - what will be subtracted from the image to adjust for noise level. */ - protected double offsetFactor; - - /** The audio data. */ - protected AudioData audio; - - - /** The frontEnd (the source of features */ - protected FrontEnd frontEnd; - - /** The source of audio (the first stage of the frontend) */ - protected StreamDataSource dataSource; - - - /** Creates a new JPanel with a double buffer and a flow layout. */ - public SpectrogramPanel() { - } - - - /** - * Creates a new SpectrogramPanel for the given AudioData. - * - * @param frontEnd the front end to use - * @param dataSource the source of audio - * @param audioData the AudioData - */ - public SpectrogramPanel(FrontEnd frontEnd, - StreamDataSource dataSource, AudioData audioData) { - audio = audioData; - this.frontEnd = frontEnd; - this.dataSource = dataSource; - audio.addChangeListener(new ChangeListener() { - public void stateChanged(ChangeEvent event) { - computeSpectrogram(); - } - }); - } - - - /** Actually creates the Spectrogram image. */ - protected void computeSpectrogram() { - try { - AudioDataInputStream is = new AudioDataInputStream(audio); - dataSource.setInputStream(is); - - /* Run through all the spectra one at a time and convert - * them to an log intensity value. - */ - ArrayList intensitiesList = new ArrayList(); - double maxIntensity = Double.MIN_VALUE; - Data spectrum = frontEnd.getData(); - - while (!(spectrum instanceof DataEndSignal)) { - if (spectrum instanceof DoubleData) { - double[] spectrumData = ((DoubleData) spectrum).getValues(); - double[] intensities = new double[spectrumData.length]; - for (int i = 0; i < intensities.length; i++) { - /* - * A very small intensity is, for all intents - * and purposes, the same as 0. - */ - intensities[i] = Math.max(Math.log(spectrumData[i]), - 0.0); - if (intensities[i] > maxIntensity) { - maxIntensity = intensities[i]; - } - } - intensitiesList.add(intensities); - } - spectrum = frontEnd.getData(); - } - is.close(); - - int width = intensitiesList.size(); - int height = (intensitiesList.get(0)).length; - int maxYIndex = height - 1; - Dimension d = new Dimension(width, height); - - setMinimumSize(d); - setMaximumSize(d); - setPreferredSize(d); - - /* Create the image for displaying the data. - */ - spectrogram = new BufferedImage(width, - height, - BufferedImage.TYPE_INT_RGB); - - /* Set scaleFactor so that the maximum value, after removing - * the offset, will be 0xff. - */ - double scaleFactor = ((0xff + offsetFactor) / maxIntensity); - - for (int i = 0; i < width; i++) { - double[] intensities = intensitiesList.get(i); - for (int j = maxYIndex; j >= 0; j--) { - - /* Adjust the grey value to make a value of 0 to mean - * white and a value of 0xff to mean black. - */ - int grey = (int) (intensities[j] * scaleFactor - - offsetFactor); - grey = Math.max(grey, 0); - grey = 0xff - grey; - - /* Turn the grey into a pixel value. - */ - int pixel = ((grey << 16) & 0xff0000) - | ((grey << 8) & 0xff00) - | (grey & 0xff); - - spectrogram.setRGB(i, maxYIndex - j, pixel); - } - } - ImageFilter scaleFilter = - new ReplicateScaleFilter((int) (zoom * width), height); - scaledSpectrogram = - createImage(new FilteredImageSource(spectrogram.getSource(), - scaleFilter)); - Dimension sz = getSize(); - repaint(0, 0, 0, sz.width - 1, sz.height - 1); - } catch (Exception e) { - e.printStackTrace(); - } - } - - - /** - * Updates the offset factor used to calculate the greyscale values from the intensities. This also calculates and - * populates all the greyscale values in the image. - * - * @param offsetFactor the offset factor used to calculate the greyscale values from the intensities; this is used - * to adjust the level of background noise that shows up in the image - */ - public void setOffsetFactor(double offsetFactor) { - this.offsetFactor = offsetFactor; - computeSpectrogram(); - } - - - /** Zoom the image, preparing for new display. - * @param zoom a zoom to set - **/ - protected void zoomSet(float zoom) { - this.zoom = zoom; - if (spectrogram != null) { - int width = spectrogram.getWidth(); - int height = spectrogram.getHeight(); - - ImageFilter scaleFilter = - new ReplicateScaleFilter((int) (zoom * width), height); - scaledSpectrogram = - createImage(new FilteredImageSource(spectrogram.getSource(), - scaleFilter)); - Dimension d = new Dimension((int) (width * zoom), height); - setMinimumSize(d); - setMaximumSize(d); - setPreferredSize(d); - repaint(); - } - } - - - /** - * Paint the component. This will be called by AWT/Swing. - * - * @param g The Graphics to draw on. - */ - @Override - public void paint(Graphics g) { - /** - * Fill in the whole image with white. - */ - Dimension sz = getSize(); - - g.setColor(Color.WHITE); - g.fillRect(0, 0, sz.width - 1, sz.height - 1); - - if (spectrogram != null) { - - g.drawImage(scaledSpectrogram, 0, 0, null); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/Utils.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/Utils.java deleted file mode 100755 index 10548c7b..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/audio/Utils.java +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2002-2004 Sun Microsystems, Inc. - * Portions Copyright 2002-2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.tools.audio; - -import javax.sound.sampled.AudioFormat; -import javax.sound.sampled.AudioFormat.Encoding; -import javax.sound.sampled.AudioInputStream; -import javax.sound.sampled.AudioSystem; -import javax.sound.sampled.UnsupportedAudioFileException; -import java.io.BufferedInputStream; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; - -public class Utils { - - /** Index = ulaw value, entry = signed 16 bit value. */ - static final private short[] ulawTable = { - 32760, 31608, 30584, 29560, 28536, 27512, 26488, 25464, 24440, - 23416, 22392, 21368, 20344, 19320, 18296, 17272, 16248, 15736, - 15224, 14712, 14200, 13688, 13176, 12664, 12152, 11640, 11128, - 10616, 10104, 9592, 9080, 8568, 8056, 7800, 7544, 7288, 7032, - 6776, 6520, 6264, 6008, 5752, 5496, 5240, 4984, 4728, 4472, - 4216, 3960, 3832, 3704, 3576, 3448, 3320, 3192, 3064, 2936, - 2808, 2680, 2552, 2424, 2296, 2168, 2040, 1912, 1848, 1784, - 1720, 1656, 1592, 1528, 1464, 1400, 1336, 1272, 1208, 1144, - 1080, 1016, 952, 888, 856, 824, 792, 760, 728, 696, 664, 632, - 600, 568, 536, 504, 472, 440, 408, 376, 360, 344, 328, 312, - 296, 280, 264, 248, 232, 216, 200, 184, 168, 152, 136, 120, - 112, 104, 96, 88, 80, 72, 64, 56, 48, 40, 32, 24, 16, 8, 0, - -32760, -31608, -30584, -29560, -28536, -27512, -26488, -25464, - -24440, -23416, -22392, -21368, -20344, -19320, -18296, -17272, - -16248, -15736, -15224, -14712, -14200, -13688, -13176, -12664, - -12152, -11640, -11128, -10616, -10104, -9592, -9080, -8568, - -8056, -7800, -7544, -7288, -7032, -6776, -6520, -6264, -6008, - -5752, -5496, -5240, -4984, -4728, -4472, -4216, -3960, -3832, - -3704, -3576, -3448, -3320, -3192, -3064, -2936, -2808, -2680, - -2552, -2424, -2296, -2168, -2040, -1912, -1848, -1784, -1720, - -1656, -1592, -1528, -1464, -1400, -1336, -1272, -1208, -1144, - -1080, -1016, -952, -888, -856, -824, -792, -760, -728, -696, - -664, -632, -600, -568, -536, -504, -472, -440, -408, -376, - -360, -344, -328, -312, -296, -280, -264, -248, -232, -216, - -200, -184, -168, -152, -136, -120, -112, -104, -96, -88, -80, - -72, -64, -56, -48, -40, -32, -24, -16, -8, 0}; - - - /** Uninstantiable class. */ - private Utils() { - } - - - /** Converts a byte array to a signed short value. - * @param bytes array to convert - * @param bigEndian is big endian - * @return converted value - */ - static public short toShort(byte[] bytes, boolean bigEndian) { - if (bytes.length == 1) { - return bytes[0]; - } else if (bigEndian) { - return (short) ((bytes[0] << 8) | (0xff & bytes[1])); - } else { - return (short) ((bytes[1] << 8) | (0xff & bytes[0])); - } - } - - - /** Converts a byte array into an unsigned short. - * @param bytes array to convert - * @param bigEndian is big endian - * @return converted value - */ - static public int toUnsignedShort(byte[] bytes, boolean bigEndian) { - if (bytes.length == 1) { - return 0xff & bytes[0]; - } else if (bigEndian) { - return ((bytes[0] & 0xff) << 8) | (0xff & bytes[1]); - } else { - return ((bytes[1] & 0xff) << 8) | (0xff & bytes[0]); - } - } - - - /** Converts a short into a byte array. - * @param sVal source value - * @param bytes array to convert - * @param bigEndian is big endian - */ - public static void toBytes(short sVal, byte[] bytes, boolean bigEndian) { - if (bigEndian) { - bytes[0] = (byte) (sVal >> 8); - bytes[1] = (byte) (sVal & 0xff); - } else { - bytes[0] = (byte) (sVal & 0xff); - bytes[1] = (byte) (sVal >> 8); - } - } - - - /** - * Convert the bytes starting at the given offset to a signed short based upon the AudioFormat. If the frame size - * is 1, then the value is doubled to make it match a frame size of 2. - * - * @param format the audio format - * @param byteArray the byte array - * @return a short - */ - public static short bytesToShort(AudioFormat format, - byte[] byteArray) { - short result = 0; - Encoding encoding = format.getEncoding(); - int frameSize = format.getFrameSize(); - - if (encoding == Encoding.PCM_SIGNED) { - result = toShort(byteArray, format.isBigEndian()); - if (frameSize == 1) { - result = (short) (result << 8); - } - } else if (encoding == Encoding.PCM_UNSIGNED) { - int tmp = toUnsignedShort(byteArray, format.isBigEndian()); - if (frameSize == 1) { - tmp = tmp << 8; - } - result = (short) (tmp - (2 << 14)); - } else if (encoding == Encoding.ULAW) { - result = ulawTable[byteArray[0] + 128]; - } else { - System.out.println("Unknown encoding: " + encoding); - } - return result; - } - - - /** - * Turns the AudioInputStream into a 16bit, SIGNED_PCM, little endian audio stream that preserves the original sample - * rate of the AudioInputStream. NOTE: this assumes the frame size can be only 1 or 2 bytes. The AudioInputStream - * is left in a state of having all of its data being read. - * @param ais stream to convert - * @return result array - * @throws IOException if error occurred - */ - static public short[] toSignedPCM(AudioInputStream ais) - throws IOException { - AudioFormat aisFormat = ais.getFormat(); - - short[] shorts = new short[ais.available() / aisFormat.getFrameSize()]; - byte[] frame = new byte[aisFormat.getFrameSize()]; - - int pos = 0; - while (ais.read(frame) != -1) { - shorts[pos++] = bytesToShort(aisFormat, frame); - } - - return shorts; - } - - - /** - * Attempts to read an audio file using the Java Sound APIs. If this file isn't a typical audio file, then this - * returns a null. Otherwise, it converts the data into a 8kHz 16-bit signed PCM little endian clip. - * - * @param filename the file containing audio data - * @return the audio data or null if the audio cannot be parsed - * @throws IOException if error occured - */ - static public AudioData readAudioFile(String filename) throws IOException { - try { - BufferedInputStream stream = new BufferedInputStream( - new FileInputStream(filename)); - AudioInputStream ais = AudioSystem.getAudioInputStream(stream); - AudioData audioData = new AudioData(ais); - stream.close(); - return audioData; - } catch (UnsupportedAudioFileException e) { - return null; - } - } - - - /** - * Reads the given stream in as 8kHz 16-bit signed PCM little endian audio data and returns an audio clip. - * - * @param filename the file containing audio data - * @return the audio data or null if the audio cannot be parsed - * @throws IOException if exception occurred - */ - static public AudioData readRawFile(String filename) - throws IOException { - FileInputStream stream = new FileInputStream(filename); - AudioFormat format = new AudioFormat(8000.0f, // sample rate - 16, // sample size - 1, // channels (1 == mono) - true, // signed - false); // little endian - short[] audioData = RawReader.readAudioData(stream, format); - stream.close(); - return new AudioData(audioData, 8000.0f); - } - - - /** Writes the given 8kHz 16-bit signed PCM audio clip to the given file as raw little endian data. - * @param audio data - * @param filename filename to write to - * @throws IOException if IO went wrong - */ - static public void writeRawFile(AudioData audio, String filename) - throws IOException { - - FileOutputStream outputStream = new FileOutputStream(filename); - AudioFormat format = new AudioFormat( - 8000.0f, // sample rate - 16, // sample size - 1, // channels (1 == mono) - true, // signed - false); // little endian - RawWriter writer = new RawWriter(outputStream, format); - short[] samples = audio.getAudioData(); - for (short sample : samples) { - writer.writeSample(sample); - } - outputStream.flush(); - outputStream.close(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/bandwidth/BandDetector.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/bandwidth/BandDetector.java deleted file mode 100755 index 347a1393..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/bandwidth/BandDetector.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright 1999-2013 Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ - -package edu.cmu.sphinx.tools.bandwidth; - -import java.io.File; -import java.io.FileNotFoundException; -import java.util.ArrayList; -import java.util.Scanner; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.frontend.frequencywarp.MelFrequencyFilterBank; -import edu.cmu.sphinx.frontend.transform.DiscreteFourierTransform; -import edu.cmu.sphinx.frontend.util.AudioFileDataSource; -import edu.cmu.sphinx.frontend.window.RaisedCosineWindower; - -/** - * A simple energy-based detector for upsampled audio. Could be used to detect - * bandwidth issues leading to the accuracy issues. - * - * The detector simply looks for energies in different mel bands and using the - * threshold it decides if we have cut of the frequencies signal. On every frame - * we find the maximum energy band, then we just control that energy doesn't - * fall too fast in upper bands. - * - * A paper on the subject is "DETECTING BANDLIMITED AUDIO IN BROADCAST TELEVISION SHOWS" - * by by Mark C. Fuhs, Qin Jin and Tanja Schultz where spline approximation is proposed - * for detection. However, the paper seems to contain a fundamental flaw. The - * decision is made on average spectrum, not per-frame. This probably leads - * to omission of the events in high frequency which might signal about wide band. - */ -public class BandDetector { - - static final int bands = 40; - - // From 4750 to 6800 Hz - static final int highRangeStart = 35; - static final int highRangeEnd = 39; - - // From 2156 to 3687 Hz - static final int lowRangeStart = 23; - static final int lowRangeEnd = 29; - - // Thresholds, selected during the experiments, about -30dB - static final double noSignalLevel = 0.02; - static final double signalLevel = 0.5; - - // Don't care if intensity is very low - static final double lowIntensity = 1e+5; - - private FrontEnd frontend; - private AudioFileDataSource source; - - public BandDetector() { - - // standard frontend - source = new AudioFileDataSource(320, null); - RaisedCosineWindower windower = new RaisedCosineWindower(0.97f, - 25.625f, 10.0f); - DiscreteFourierTransform fft = new DiscreteFourierTransform(512, false); - MelFrequencyFilterBank filterbank = new MelFrequencyFilterBank(130.0, - 6800.0, bands); - - ArrayList list = new ArrayList(); - list.add(source); - list.add(windower); - list.add(fft); - list.add(filterbank); - - frontend = new FrontEnd(list); - } - - public static void main(String args[]) throws FileNotFoundException { - - if (args.length < 1) { - System.out - .println("Usage: Detector or Detector "); - return; - } - - if (args[0].endsWith(".wav")) { - BandDetector detector = new BandDetector(); - System.out.println("Bandwidth for " + args[0] + " is " - + detector.bandwidth(args[0])); - } else { - BandDetector detector = new BandDetector(); - Scanner s = new Scanner(new File(args[0])); - while (s.hasNextLine()) { - String line = s.nextLine().trim(); - if (detector.bandwidth(line)) - System.out.println("Bandwidth for " + line + " is low"); - } - s.close(); - } - return; - } - - public boolean bandwidth(String file) { - - source.setAudioFile(new File(file), ""); - - Data data; - double energy[] = new double[bands]; - - while ((data = frontend.getData()) != null) { - if (data instanceof DoubleData) { - - double maxIntensity = lowIntensity; - double[] frame = ((DoubleData) data).getValues(); - - for (int i = 0; i < bands; i++) - maxIntensity = Math.max(maxIntensity, frame[i]); - - if (maxIntensity <= lowIntensity) { - continue; - } - - for (int i = 0; i < bands; i++) { - energy[i] = Math.max(frame[i] / maxIntensity, energy[i]); - } - } - } - - double maxLow = max(energy, lowRangeStart, lowRangeEnd); - double maxHi = max(energy, highRangeStart, highRangeEnd); - - // System.out.format("%f %f\n", maxHi, maxLow); - // for (int i = 0; i < bands; i++) - // System.out.format("%.4f ", energy[i]); - // System.out.println(); - - if (maxHi < noSignalLevel && maxLow > signalLevel) - return true; - - return false; - } - - private double max(double[] energy, int start, int end) { - double max = 0; - for (int i = start; i <= end; i++) - max = Math.max(max, energy[i]); - return max; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/batch/BatchDecoderRecognizer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/batch/BatchDecoderRecognizer.java deleted file mode 100755 index f96b1bc7..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/batch/BatchDecoderRecognizer.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.tools.batch; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.Scanner; - -import edu.cmu.sphinx.frontend.util.StreamDataSource; -import edu.cmu.sphinx.recognizer.Recognizer; -import edu.cmu.sphinx.result.Result; -import edu.cmu.sphinx.util.props.ConfigurationManager; - -/** - * Batch decoder recognizer which can be used inside Sphinxtrain - * to build lattices and generate decoding results. - */ -public class BatchDecoderRecognizer { - - int ctlOffset = -1; - int ctlCount = 1000000; - String config; - String hmm; - String ctl; - String hyp; - String featDir; - - ConfigurationManager manager; - StreamDataSource source; - Recognizer recognizer; - PrintWriter writer; - - void parseArgs(String[] argv) { - for (int i = 0; i < argv.length; i++) { - if (argv[i].equals("-ctl")) { - ctl = argv[++i]; - } - if (argv[i].equals("-config")) { - config = argv[++i]; - } - if (argv[i].equals("-hmm")) { - hmm = argv[++i]; - } - if (argv[i].equals("-ctloffset")) { - ctlOffset = Integer.parseInt(argv[++i]); - } - if (argv[i].equals("-ctlcount")) { - ctlCount = Integer.parseInt(argv[++i]); - } - if (argv[i].equals("-hyp")) { - hyp = argv[++i]; - } - if (argv[i].equals("-feat")) { - featDir = argv[++i]; - } - } - } - - void recognize() throws IOException { - - init(); - writer = new PrintWriter (new File(hyp), "UTF-8"); - Scanner scanner = new Scanner(new File(ctl)); - - for (int i = 0; i < ctlOffset; i++) { - if (scanner.hasNext()) - scanner.next(); - } - - for (int i = 0; i < ctlCount; i++) { - if (scanner.hasNext()) { - String utteranceId = scanner.next(); - String inputFile = featDir + "/" + utteranceId + ".wav"; - processFile(utteranceId, inputFile); - } - } - writer.close(); - scanner.close(); - recognizer.deallocate(); - } - - private void processFile(String utteranceId, String inputFile) throws IOException { - FileInputStream stream = new FileInputStream(inputFile); - source.setInputStream(stream); - Result result = recognizer.recognize(); - writer.println (result.getBestFinalResultNoFiller() + " (" + utteranceId + ")"); - } - - public static void main(String[] argv) throws IOException { - BatchDecoderRecognizer batchRecognizer = new BatchDecoderRecognizer(); - batchRecognizer.parseArgs(argv); - batchRecognizer.recognize(); - } - - private void init() throws IOException { - manager = new ConfigurationManager(config); - recognizer = (Recognizer)manager.lookup("recognizer"); - source = (StreamDataSource)manager.lookup("streamDataSource"); - - recognizer.allocate(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/batch/BatchForcedAlignerRecognizer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/batch/BatchForcedAlignerRecognizer.java deleted file mode 100755 index 316a12aa..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/batch/BatchForcedAlignerRecognizer.java +++ /dev/null @@ -1,117 +0,0 @@ -package edu.cmu.sphinx.tools.batch; - -import edu.cmu.sphinx.decoder.search.Token; -import edu.cmu.sphinx.frontend.DataProcessor; -import edu.cmu.sphinx.linguist.language.grammar.BatchForcedAlignerGrammar; -import edu.cmu.sphinx.linguist.language.grammar.ForcedAlignerGrammar; -import edu.cmu.sphinx.recognizer.Recognizer; -import edu.cmu.sphinx.result.Result; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; - -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.List; - -/** - * Copyright 1999-2002 Carnegie Mellon University. Portions Copyright 2002 Sun Microsystems, Inc. Portions Copyright - * 2002 Mitsubishi Electric Research Laboratories. All Rights Reserved. Use is subject to license terms. - *

    - * See the file "license.terms" for information on usage and redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - *

    - * User: Peter Wolf Date: Jan 9, 2006 Time: 5:35:54 PM - *

    - * Utility for generating word segmentation by forced alignment - *

    - * Given a CTL file that specifies a series of audio and coresponding correct transcripts, this utility creates a - * trivial grammar from the transcript, and runs the recognizer on the utterance. The output is words with beginning - * and end times. - *

    - * See BatchNISTRecognizer for more information about the format of CTL and audio files. - */ - -public class BatchForcedAlignerRecognizer extends BatchNISTRecognizer { - - String segFile; - ForcedAlignerGrammar forcedAlignerGrammar; - public BatchForcedAlignerGrammar bfaGrammar; - - - @Override - protected void setInputStream(CTLUtterance utt) throws IOException { - super.setInputStream(utt); - bfaGrammar.setUtterance(utt.getName()); - } - - - @Override - protected void handleResult(DataOutputStream out, CTLUtterance utt, Result result) throws IOException { - System.out.println(utt + " --> " + result); - Token token = result.getBestToken(); - dumpTokenTimes(token); - } - - - void dumpTokenTimes(Token token) { - if (token != null) { - dumpTokenTimes(token.getPredecessor()); - System.out.println(token.getWord() + " " + token.getCollectTime()); - } - } - - - public BatchForcedAlignerRecognizer( - BatchForcedAlignerGrammar bfaGrammar, - Recognizer recognizer, - List inputDataProcessors, - String ctlFile, - String dataDir, - String refFile, - String ctmFile, - int bitsPerSample, - int samplesPerSecond, - int framesPerSecond, - int channelCount - ) { - super(recognizer, - inputDataProcessors, - ctlFile, - dataDir, - refFile, - ctmFile, - bitsPerSample, - samplesPerSecond, - framesPerSecond, - channelCount); - - this.bfaGrammar = bfaGrammar; - } - - public BatchForcedAlignerRecognizer() { - - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - - bfaGrammar = (BatchForcedAlignerGrammar) ps.getComponent("forcedAlignerGrammar"); - } - - - public static void main(String[] argv) { - - if (argv.length != 1) { - System.out.println("Usage: BatchForcedAlignerRecognizer propertiesFile"); - System.exit(1); - } - - BatchNISTRecognizer.main(argv); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/batch/BatchModeRecognizer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/batch/BatchModeRecognizer.java deleted file mode 100755 index 811d14f8..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/batch/BatchModeRecognizer.java +++ /dev/null @@ -1,675 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.tools.batch; - -import edu.cmu.sphinx.frontend.BaseDataProcessor; -import edu.cmu.sphinx.frontend.DataProcessor; -import edu.cmu.sphinx.frontend.util.StreamCepstrumSource; -import edu.cmu.sphinx.frontend.util.StreamDataSource; -import edu.cmu.sphinx.frontend.util.StreamHTKCepstrum; -import edu.cmu.sphinx.recognizer.Recognizer; -import edu.cmu.sphinx.recognizer.Recognizer.State; -import edu.cmu.sphinx.result.Result; -import edu.cmu.sphinx.util.*; -import edu.cmu.sphinx.util.props.*; - -import javax.sound.sampled.AudioSystem; -import javax.sound.sampled.UnsupportedAudioFileException; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.util.List; -import java.util.logging.Logger; - -/** - * Decodes a batch file containing a list of files to decode. The files can be - * either audio files or cepstral files, but defaults to audio files. The audio - * data should be 16-bit, 16kHz, PCM-linear data. Since this classes makes use - * of Java Sound, it supports all the audio file formats that are supported by - * Java Sound. If the audio file does not correspond to a format supported by - * Java Sound, it is treated as a raw audio file (i.e., one without a header). - * Audio file formats differ in the endian order of the audio data. Therefore, - * it is important to specify it correctly in the configuration of the StreamDataSource. Note - * that in the ideal situation, the audio format of the data should be passed - * into the StreamDataSource, so that no extra configuration is needed. This - * will be fixed in future releases. - *

    - * To run this BatchModeRecognizer: - * - *

    - * java BatchModeRecognizer <xmlConfigFile> <batchFile>
    - * 
    - * - * where xmlConfigFile is an XML-based configuration file and - * batchFile is a file listing all the files to decode and - * transcript of those files. For information about the configuration file, - * refer to the document Sphinx-4 - * Configuration Management. For information about the batch file, refer to - * the batch file - * description. - *

    - * This class will send recognition results to the logger if the log level is - * set to INFO. - */ -public class BatchModeRecognizer implements Configurable { - - /** - * The property or how many files to skip for every decode. - */ - @S4Integer(defaultValue = 0) - public final static String PROP_SKIP = "skip"; - - /** - * The property for how many utterances to process - */ - @S4Integer(defaultValue = 1000000) - public final static String PROP_COUNT = "count"; - - /** - * The property that specified which batch job is to be run. - */ - @S4Integer(defaultValue = 0) - public final static String PROP_WHICH_BATCH = "whichBatch"; - - /** - * The property for the total number of batch jobs the decoding run is being divided into. - *

    - * The BatchDecoder supports running a subset of a batch. This allows a test to be distributed among several - * machines. - */ - @S4Integer(defaultValue = 1) - public final static String PROP_TOTAL_BATCHES = "totalBatches"; - - /** - * The property that defines whether or not the decoder should use the pooled batch manager - */ - @S4Boolean(defaultValue = false) - public final static String PROP_USE_POOLED_BATCH_MANAGER = "usePooledBatchManager"; - - /** - * The property that specifies the recognizer to use - */ - @S4Component(type = Recognizer.class) - public final static String PROP_RECOGNIZER = "recognizer"; - - /** - * The property that specifies the input source - */ - @S4ComponentList(type = BaseDataProcessor.class) - public final static String PROP_INPUT_DATA_PROCESSORS = "inputDataProcessors"; - - - // ------------------------------- - // Configuration data - // -------------------------------- - protected String name; - protected List inputDataProcessors; - protected int skip; - protected int utteranceId; - protected int whichBatch; - protected int totalBatches; - protected boolean usePooledBatchManager; - protected BatchManager batchManager; - protected Recognizer recognizer; - protected Logger logger; - - protected BatchItem curBatchItem; - protected ConfigurationManager cm; - - public BatchModeRecognizer( - Recognizer recognizer, - List inputDataProcessors, - int skip, - int utteranceId, - int whichBatch, - int totalBatches, - boolean usePooledBatchManager - ) { - logger = Logger.getLogger(getClass().getName()); - cm = null; - - this.skip = skip; - this.utteranceId = utteranceId; - this.whichBatch = whichBatch; - this.totalBatches = totalBatches; - this.usePooledBatchManager = usePooledBatchManager; - - this.recognizer = recognizer; - this.inputDataProcessors = inputDataProcessors; - } - - public BatchModeRecognizer() { - - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - public void newProperties(PropertySheet ps) throws PropertyException { - logger = ps.getLogger(); - cm = ConfigurationManagerUtils.getPropertyManager(ps); - - skip = ps.getInt(PROP_SKIP); - utteranceId = ps.getInt(PROP_COUNT); - if (utteranceId <= 0) { - utteranceId = Integer.MAX_VALUE; - } - - whichBatch = ps.getInt(PROP_WHICH_BATCH); - totalBatches = ps.getInt(PROP_TOTAL_BATCHES); - usePooledBatchManager = ps.getBoolean(PROP_USE_POOLED_BATCH_MANAGER); - - recognizer = (Recognizer) ps.getComponent(PROP_RECOGNIZER); - inputDataProcessors = ps.getComponentList(PROP_INPUT_DATA_PROCESSORS, DataProcessor.class); - } - - /** - * Sets the batch file to use for this recognition - * - * @param batchFile the name of the batch file - * @throws IOException if the file could not be opened or read. - */ - public void setBatchFile(String batchFile) throws IOException { - if (usePooledBatchManager) { - batchManager = new PooledBatchManager(batchFile, skip); - } else { - batchManager = new SimpleBatchManager(batchFile, skip, whichBatch, - totalBatches); - } - } - - - /** - * Decodes the batch of audio files - * @param batchFile file with list of files to decode - * @throws IOException if IO went wrong - */ - public void decode(String batchFile) throws IOException { - BatchItem batchItem; - int count = 0; - try { - recognizer.allocate(); - setBatchFile(batchFile); - - batchManager.start(); - logger.info("BatchDecoder: decoding files in " - + batchManager.getFilename()); - - while (count < utteranceId && - (batchItem = batchManager.getNextItem()) != null) { - setInputStream(batchItem.getFilename()); - Result result = recognizer.recognize(batchItem.getTranscript()); - logger.info("File : " + batchItem.getFilename()); - logger.info("Result: " + result); - count++; - } - batchManager.stop(); - recognizer.deallocate(); - } catch (IOException io) { - logger.severe("I/O error during decoding: " + io.getMessage()); - throw io; - } - logger.info("BatchDecoder: " + count + " files decoded"); - } - - - /** - * Sets the input stream to the given filename - * - * @param filename the filename to set the input stream to - * @throws IOException if an error occurs - */ - void setInputStream(String filename) throws IOException { - for (DataProcessor dataSource : inputDataProcessors) { - InputStream is; - try { - File file = new File(filename); - logger.info - (AudioSystem.getAudioFileFormat(file).toString()); - is = AudioSystem.getAudioInputStream(file); - } catch (UnsupportedAudioFileException uafe) { - logger.info - ("Reading " + filename + " as raw audio file."); - is = new FileInputStream(filename); - // Total hack: NIST Sphere files aren't supported by - // javax.sound, so skip their header - if (filename.toLowerCase().endsWith(".sph")) { - logger.info("Skipping 1024-byte Sphere header."); - is.skip(1024); - } - } - if (dataSource instanceof StreamDataSource) { - ((StreamDataSource) dataSource).setInputStream(is); - } else if (dataSource instanceof StreamCepstrumSource) { - boolean isBigEndian = Utilities - .isCepstraFileBigEndian(filename); - StreamCepstrumSource cepstrumSource = - (StreamCepstrumSource) dataSource; - cepstrumSource.setInputStream(is, isBigEndian); - // TODO: christophe: should use an interface there !! - } else if (dataSource instanceof StreamHTKCepstrum) { - StreamHTKCepstrum cepstrumSource = - (StreamHTKCepstrum) dataSource; - cepstrumSource.setInputStream(is); - } - } - } - - - /** - * Add commands to the given interpreter to support shell mode - * - * @param ci the interpreter - */ - void addCommands(CommandInterpreter ci) { - ci.add("ls", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - if (args.length != 1) { - ci.putResponse("Usage: ls"); - } else { - for (String name : cm.getInstanceNames(Configurable.class)) - ci.putResponse(name); - } - return ""; - } - - - public String getHelp() { - return "list active components"; - } - }); - ci.add("show", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - if (args.length < 2) { - ConfigurationManagerUtils.showConfig(cm); - } else { - for (int i = 1; i < args.length; i++) { - String name = args[i]; - ConfigurationManagerUtils.showConfig(cm, name); - } - } - return ""; - } - - - public String getHelp() { - return "show component configuration"; - } - }); - ci.add("edit", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - if (args.length != 2) { - ci.putResponse("Usage: edit component"); - } else { - try { - ConfigurationManagerUtils.editConfig(cm, args[1]); - } catch (Exception e) { - ci.putResponse("Failed to save " + e); - } -// cm.editConfig(args[1]); - } - return ""; - } - - - public String getHelp() { - return "edit a component's configuration"; - } - }); - ci.add("save", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - if (args.length != 2) { - ci.putResponse("Usage: save filename.xml"); - } else { - ConfigurationManagerUtils.save(cm, new File(args[1])); -// cm.save(new File(args[1])); - } - return ""; - } - - - public String getHelp() { - return "save configuration to a file"; - } - }); - ci.add("set", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - if (args.length != 4) { - ci.putResponse("Usage: set component property value"); - } else { -// System.err.println("tried to configure the CM with " + args ); - ConfigurationManagerUtils.setProperty(BatchModeRecognizer.this.cm, args[1], args[3], args[2]); - } - return ""; - } - - - public String getHelp() { - return "set component property to a given value"; - } - }); - ci.add("recognize", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - Result result = null; - - if (args.length < 2) { - ci.putResponse("Usage: recognize audio [transcript]"); - } else { - String audioFile = args[1]; - String transcript = null; - if (args.length > 2) { - transcript = args[2]; - } - - try { - setInputStream(audioFile); - result = recognizer.recognize(transcript); - } catch (IOException io) { - ci.putResponse("I/O error during decoding: " + - io.getMessage()); - } - } - - return result != null ? result.getBestResultNoFiller() : ""; - } - - - public String getHelp() { - return "perform recognition on the given audio"; - } - }); - ci.addAlias("recognize", "rec"); - - ci.add("statsReset", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - if (args.length != 1) { - ci.putResponse("Usage: statsReset"); - } else { - recognizer.resetMonitors(); - } - return ""; - } - - - public String getHelp() { - return "resets gathered statistics"; - } - }); - - ci.add("batchRecognize", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - Result result = null; - - if (args.length != 1) { - ci.putResponse("Usage: batchRecognize"); - } else { - - try { - if (curBatchItem == null) { - batchManager.start(); - curBatchItem = batchManager.getNextItem(); - } - String audioFile = curBatchItem.getFilename(); - String transcript = curBatchItem.getTranscript(); - setInputStream(audioFile); - result = recognizer.recognize(transcript); - } catch (IOException io) { - ci.putResponse("I/O error during decoding: " + - io.getMessage()); - } - } - return result != null ? result.getBestResultNoFiller() : ""; - } - - - public String getHelp() { - return "perform recognition on the current batch item"; - } - }); - ci.addAlias("batchRecognize", "br"); - - ci.add("batchNext", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - Result result = null; - - if (args.length != 1 && args.length != 2) { - ci.putResponse("Usage: batchNext [norec]"); - } else { - try { - - // if we don't have a batch item, start (or - // start over) - - if (curBatchItem == null) { - batchManager.start(); - } - curBatchItem = batchManager.getNextItem(); - - // if we reach the end, just loop back and - // start over. - - if (curBatchItem == null) { - batchManager.start(); - curBatchItem = batchManager.getNextItem(); - } - - String audioFile = curBatchItem.getFilename(); - String transcript = curBatchItem.getTranscript(); - if (args.length == 2) { - ci.putResponse("Skipping: " + transcript); - } else { - setInputStream(audioFile); - result = recognizer.recognize(transcript); - } - } catch (IOException io) { - ci.putResponse("I/O error during decoding: " + - io.getMessage()); - } - } - return result != null ? result.getBestResultNoFiller() : ""; - } - - - public String getHelp() { - return "advance the batch and perform recognition"; - } - }); - ci.addAlias("batchNext", "bn"); - - ci.add("batchAll", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - Result result = null; - - if (args.length != 1) { - ci.putResponse("Usage: batchAll"); - } else { - try { - if (curBatchItem == null) { - batchManager.start(); - } - - while (true) { - curBatchItem = batchManager.getNextItem(); - // if we reach the end bail out - - if (curBatchItem == null) { - return ""; - } - String audioFile = curBatchItem.getFilename(); - String transcript = curBatchItem.getTranscript(); - setInputStream(audioFile); - result = recognizer.recognize(transcript); - } - } catch (IOException io) { - ci.putResponse("I/O error during decoding: " + - io.getMessage()); - } - } - return result != null ? result.getBestResultNoFiller() : ""; - } - - - public String getHelp() { - return "recognize all of the remaining batch items"; - } - }); - - ci.add("batchReset", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - if (args.length != 1) { - ci.putResponse("Usage: batchReset"); - } else { - try { - batchManager.start(); - } catch (IOException ioe) { - ci.putResponse("trouble reseting batch"); - } - } - return ""; - } - - - public String getHelp() { - return "reset the batch to the beginning"; - } - }); - ci.add("batchLoad", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - if (args.length != 2) { - ci.putResponse("Usage: batchReset batchfile"); - } else { - try { - setBatchFile(args[1]); - } catch (IOException ioe) { - ci.putResponse("Can't load " + args[1] + ' ' + ioe); - } - } - return ""; - } - - - public String getHelp() { - return "reset the batch to the beginning"; - } - }); - } - - - public void shell(String batchfile) throws IOException { - try { - CommandInterpreter ci = new CommandInterpreter(); - ci.setPrompt("s4> "); - addCommands(ci); - setBatchFile(batchfile); - recognizer.allocate(); - ci.run(); - batchManager.stop(); - if (recognizer.getState() == State.READY) { - recognizer.deallocate(); - } - } catch (IOException io) { - logger.severe("I/O error during decoding: " + io.getMessage()); - throw io; - } - } - - - /** - * Main method of this BatchDecoder. - * - * @param argv argv[0] : config.xml argv[1] : a file listing all the audio files to decode - */ - public static void main(String[] argv) { - if (argv.length < 2) { - System.out.println( - "Usage: BatchDecoder propertiesFile batchFile [-shell]"); - System.exit(1); - } - String cmFile = argv[0]; - String batchFile = argv[1]; - ConfigurationManager cm; - BatchModeRecognizer bmr; - - try { - URL url = new File(cmFile).toURI().toURL(); - cm = new ConfigurationManager(url); - bmr = (BatchModeRecognizer) cm.lookup("batch"); - if (bmr == null) { - System.err.println("Can't find batchModeRecognizer in " + cmFile); - return; - } - if (argv.length >= 3 && argv[2].equals("-shell")) { - bmr.shell(batchFile); - } else { - bmr.decode(batchFile); - } - System.out.println("Tokens created: " + StatisticsVariable.getStatisticsVariable("totalTokensScored").value); - /* - } catch (IOException ioe) { - System.err.println("I/O error: \n"); - ioe.printStackTrace(); - } catch (InstantiationException e) { - System.err.println("Error during initialization: \n"); - e.printStackTrace(); - } catch (PropertyException e) { - System.err.println("Error during initialization: \n"); - e.printStackTrace(); - */ - } catch (Exception e) { - System.err.println("Error during decoding: \n "); - e.printStackTrace(); - } - } - - - int count; - - - public void start(String batchFile) throws IOException { - recognizer.allocate(); - setBatchFile(batchFile); - batchManager.start(); - logger.info("BatchDecoder: decoding files in " - + batchManager.getFilename()); - count = 0; - } - - - public void stop() throws IOException { - batchManager.stop(); - recognizer.deallocate(); - } - - - public Result recognize() throws IOException { - Result result = null; - BatchItem batchItem; - if (count < utteranceId && - (batchItem = batchManager.getNextItem()) != null) { - setInputStream(batchItem.getFilename()); - result = recognizer.recognize(batchItem.getTranscript()); - logger.info("File : " + batchItem.getFilename()); - logger.info("Result: " + result); - count++; - } - logger.info("BatchDecoder: " + count + " files decoded"); - return result; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/batch/BatchNISTRecognizer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/batch/BatchNISTRecognizer.java deleted file mode 100755 index 5382206b..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/batch/BatchNISTRecognizer.java +++ /dev/null @@ -1,466 +0,0 @@ -package edu.cmu.sphinx.tools.batch; - -import edu.cmu.sphinx.decoder.search.Token; -import edu.cmu.sphinx.frontend.DataProcessor; -import edu.cmu.sphinx.frontend.util.StreamCepstrumSource; -import edu.cmu.sphinx.frontend.util.StreamDataSource; -import edu.cmu.sphinx.linguist.WordSearchState; -import edu.cmu.sphinx.linguist.dictionary.Word; -import edu.cmu.sphinx.recognizer.Recognizer; -import edu.cmu.sphinx.result.Result; -import edu.cmu.sphinx.util.Utilities; -import edu.cmu.sphinx.util.props.*; - -import java.io.*; -import java.net.URL; -import java.util.Iterator; -import java.util.List; -import java.util.logging.Logger; - -/** - * Copyright 1999-2002 Carnegie Mellon University. Portions Copyright 2002 Sun Microsystems, Inc. Portions Copyright - * 2002 Mitsubishi Electric Research Laboratories. All Rights Reserved. Use is subject to license terms. - *

    - * See the file "license.terms" for information on usage and redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - *

    - * User: Peter Wolf Date: Nov 10, 2005 Time: 2:42:06 PM Copyright 2005, Peter Wolf - *

    - * Runs a NIST corpus as used by the GALE project. The inputs are a CTL file, and a REF file. The output is a CTM - * file. - *

    - * A CTL file contains a list of utterances to decode. The format is - *

    - * <utterance file> <start offset> <end offset> <utterance name> - *

    - * The <utterance file> is a base to which the property "dataDirectory" is prepended, and ".raw" is appended. The - * utterance file should be raw PCM that agrees with the "bitsPerSample", "channelCount", "samplesPerSecond", and - * "framesPerSecond" properties. - *

    - * The <start offset> and <end offset> are specified in frames, where - *

    - * bytesPerFrame = (bitsPerSample/8)*channelCount*samplesPerSecond/framesPerSecond - *

    - * The <utterance name> should be a unique string. For example "<utterance file>_<start offset>_<end offset>". - *

    - * A REF file contains the correct transcripts of the utterances specified in the CTL file. Each line should be of the - * form - *

    - * <ASCII transcript> (<utterance name>) - *

    - * The output is a "processed" CTM file. It is used by the NIST tools to compute the performance on the copus. The - * format is not documented because it is currently a hack to get the Dry Run going. We need to think more about it. If - * you want to use this tool talk to Peter Wolf, or Arthur Chan. - */ -public class BatchNISTRecognizer extends BatchModeRecognizer { - - protected String ctlFile; - protected String dataDir; - protected String refFile; - protected String ctmFile; - protected int bitsPerSample; - protected int samplesPerSecond; - protected int framesPerSecond; - protected int channelCount; - protected int bytesPerFrame; - - /** - * The property that specifies the file containing the corpus utterance audio - */ - @S4String(defaultValue = "") - public final static String PROP_DATA_DIR = "dataDirectory"; - - /** - * The property that specifies the file containing the corpus utterance audio - */ - @S4String(defaultValue = "") - public final static String PROP_CTL_FILE = "ctlFile"; - - /** - * The property that specifies the file containing the transcripts of the corpus - */ - @S4String(defaultValue = "") - public final static String PROP_REF_FILE = "refFile"; - - /** - * The property that specifies the the directory where the output XXX files should be placed - */ - @S4String(defaultValue = "") - public final static String PROP_CTM_FILE = "ctmFile"; - - /** - * The sphinx properties that specify the format of the PCM audio in the data file - */ - @S4Integer(defaultValue = 16) - public final static String PROP_BITS_PER_SAMPLE = "bitsPerSample"; - @S4Integer(defaultValue = 1) - public final static String PROP_CHANNEL_COUNT = "channelCount"; - @S4Integer(defaultValue = 16000) - public final static String PROP_SAMPLES_PER_SECOND = "samplesPerSecond"; - @S4Integer(defaultValue = 100) - public final static String PROP_FRAMES_PER_SECOND = "framesPerSecond"; - - - public BatchNISTRecognizer( - Recognizer recognizer, - List inputDataProcessors, - String ctlFile, - String dataDir, - String refFile, - String ctmFile, - int bitsPerSample, - int samplesPerSecond, - int framesPerSecond, - int channelCount - ) { - this.logger = Logger.getLogger(getClass().getName()); - this.recognizer = recognizer; - this.inputDataProcessors = inputDataProcessors; - this.dataDir = dataDir; - this.ctlFile = ctlFile; - this.refFile = refFile; - this.ctmFile = ctmFile; - - this.bitsPerSample = bitsPerSample; - this.channelCount = channelCount; - this.samplesPerSecond = samplesPerSecond; - this.framesPerSecond = framesPerSecond; - - this.bytesPerFrame = ((bitsPerSample / 8) * channelCount * samplesPerSecond) / framesPerSecond; - - logger.info( - "BatchNISTRecognizer:\n" + - " dataDirectory=" + dataDir + '\n' + - " ctlFile=" + ctlFile + '\n' + - " bitsPerSample=" + bitsPerSample + '\n' + - " channelCount=" + channelCount + '\n' + - " samplesPerSecond=" + samplesPerSecond + '\n' + - " framesPerSecond=" + framesPerSecond + '\n'); - } - - public BatchNISTRecognizer() { - - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - logger = ps.getLogger(); - recognizer = (Recognizer) ps.getComponent(PROP_RECOGNIZER); - inputDataProcessors = ps.getComponentList(PROP_INPUT_DATA_PROCESSORS, DataProcessor.class); - dataDir = ps.getString(PROP_DATA_DIR); - ctlFile = ps.getString(PROP_CTL_FILE); - refFile = ps.getString(PROP_REF_FILE); - ctmFile = ps.getString(PROP_CTM_FILE); - - bitsPerSample = ps.getInt(PROP_BITS_PER_SAMPLE); - channelCount = ps.getInt(PROP_CHANNEL_COUNT); - samplesPerSecond = ps.getInt(PROP_SAMPLES_PER_SECOND); - framesPerSecond = ps.getInt(PROP_FRAMES_PER_SECOND); - - bytesPerFrame = ((bitsPerSample / 8) * channelCount * samplesPerSecond) / framesPerSecond; - - logger.info( - "BatchNISTRecognizer:\n" + - " dataDirectory=" + dataDir + '\n' + - " ctlFile=" + ctlFile + '\n' + - " bitsPerSample=" + bitsPerSample + '\n' + - " channelCount=" + channelCount + '\n' + - " samplesPerSecond=" + samplesPerSecond + '\n' + - " framesPerSecond=" + framesPerSecond + '\n'); - } - - - @SuppressWarnings("serial") - protected class CTLException extends Exception { - CTLException(String msg) { - super(msg); - } - } - - public class CTLUtterance { - - int startOffset; - int endOffset; - String name; - byte[] data; - final String ref; - - - public String getFile() { - return file; - } - - - String file; - - - CTLUtterance(String ctl, String ref) throws CTLException { - /* - example line: - 20040422_150000_NTDTV.80Hz-6400Hz 64155 65103 20040422_150000_NTDTV_64155-65103_spk8 - */ - this.ref = ref; - String[] fields = ctl.split(" "); - if (fields.length != 4) throw new CTLException("CTL Syntax Error: " + ctl); - startOffset = Integer.parseInt(fields[1]); - endOffset = Integer.parseInt(fields[2]); - name = fields[3]; - data = new byte[(endOffset - startOffset) * bytesPerFrame]; - int i = fields[0].indexOf('.'); - file = fields[0]; - if (i >= 0) { - file = file.substring(0, i); - } - file = dataDir + '/' + file + ".raw"; - try { - InputStream dataStream = new FileInputStream(file); - dataStream.skip(startOffset * bytesPerFrame); - if (dataStream.read(data) != data.length) { - dataStream.close(); - throw new CTLException("Unable to read " + data.length + " bytes of utterance " + name); - } - dataStream.close(); - } - catch (IOException e) { - throw new CTLException("Unable to read utterance " + name + ": " + e.getMessage()); - } - } - - - public InputStream getInputStream() { - return new ByteArrayInputStream(data); - } - - - public String getName() { - return name; - } - - - public String getRef() { - return ref; - } - - - public int getStartOffset() { - return startOffset; - } - - - public int getEndOffset() { - return endOffset; - } - } - - protected class CTLIterator implements Iterator { - - CTLUtterance utterance; - LineNumberReader ctlReader; - LineNumberReader refReader; - - - public CTLIterator() throws IOException { - ctlReader = new LineNumberReader(new FileReader(ctlFile)); - refReader = new LineNumberReader(new FileReader(refFile)); - utterance = nextUtterance(); - } - - - private CTLUtterance nextUtterance() { - try { - String ctl = ctlReader.readLine(); - String ref = refReader.readLine(); - if (ctl == null || ref == null) - return null; - else - return new CTLUtterance(ctl, ref); - } catch (Exception e) { - throw new Error(e.getMessage()); - } - } - - - public boolean hasNext() { - return utterance != null; - } - - - public CTLUtterance next() { - CTLUtterance u = utterance; - utterance = nextUtterance(); - return u; - } - - - public void remove() { - throw new Error("Not implemented"); - } - } - - - protected void setInputStream(CTLUtterance utt) throws IOException { - for (DataProcessor dataSource : inputDataProcessors) { - if (dataSource instanceof StreamDataSource) { - ((StreamDataSource) - dataSource).setInputStream(utt.getInputStream()); - } else if (dataSource instanceof StreamCepstrumSource) { - boolean isBigEndian = Utilities - .isCepstraFileBigEndian(utt.getName()); - StreamCepstrumSource cepstrumSource = - (StreamCepstrumSource) dataSource; - cepstrumSource.setInputStream(utt.getInputStream(), isBigEndian); - } - } - } - - - public void decode() { - - try { - utteranceId = 0; - DataOutputStream ctm = new DataOutputStream(new FileOutputStream(ctmFile)); - recognizer.allocate(); - - for (Iterator i = new CTLIterator(); i.hasNext();) { - CTLUtterance utt = i.next(); - setInputStream(utt); - Result result = recognizer.recognize(); - System.out.println("Utterance " + utteranceId + ": " + utt.getName()); - System.out.println("Reference: " + utt.getRef()); - System.out.println("Result : " + result); - logger.info("Utterance " + utteranceId + ": " + utt.getName()); - logger.info("Result : " + result); - handleResult(ctm, utt, result); - utteranceId++; - } - - recognizer.deallocate(); - } catch (IOException io) { - logger.severe("I/O error during decoding: " + io.getMessage()); - } - logger.info("BatchCTLDecoder: " + utteranceId + " utterances decoded"); - } - - - protected void handleResult(DataOutputStream out, CTLUtterance utt, Result result) throws IOException { - dumpBestPath(out, utt, result.getBestFinalToken()); - } - - - private long dumpBestPath(DataOutputStream out, CTLUtterance utt, Token token) throws IOException { - - if (token == null) return 0; - - Token pred = token.getPredecessor(); - long startFrame = dumpBestPath(out, utt, pred); - if (token.isWord()) { - - long endFrame = token.getCollectTime(); - - WordSearchState wordState = (WordSearchState) token.getSearchState(); - Word word = wordState.getPronunciation().getWord(); - String spelling = word.getSpelling(); - if (!spelling.startsWith("<")) { - String[] names = utt.name.split("_"); - out.write((names[0] + '_' + names[1] + '_' + names[2] - + " 1 " + (utt.startOffset + startFrame) / 100.0 + ' ' + (endFrame - startFrame) / 100.0 + ' ').getBytes()); - out.write(hex2Binary(spelling)); - out.write(" 0.700000\n".getBytes()); - } - return endFrame; - } - return startFrame; - } - - - static public byte[] hex2Binary(String spelling) { - byte[] bin = new byte[spelling.length() / 2]; - for (int i = 0; i < spelling.length(); i += 2) { - int i0 = hexToByte(spelling.charAt(i)); - int i1 = hexToByte(spelling.charAt(i + 1)); - bin[i / 2] = (byte) (i1 + (16 * i0)); - } - return bin; - } - - - static private int hexToByte(char c) { - switch (c) { - case '0': - return 0; - case '1': - return 1; - case '2': - return 2; - case '3': - return 3; - case '4': - return 4; - case '5': - return 5; - case '6': - return 6; - case '7': - return 7; - case '8': - return 8; - case '9': - return 9; - case 'a': - return 10; - case 'b': - return 11; - case 'c': - return 12; - case 'd': - return 13; - case 'e': - return 14; - case 'f': - return 15; - default: - throw new Error("Bad hex char " + c); - } - - } - - - public static void main(String[] argv) { - - if (argv.length != 1) { - System.out.println( - "Usage: BatchNISTRecognizer propertiesFile"); - System.exit(1); - } - - String propertiesFile = argv[0]; - - ConfigurationManager cm; - - BatchNISTRecognizer bmr; - - try { - URL url = new File(propertiesFile).toURI().toURL(); - cm = new ConfigurationManager(url); - bmr = (BatchNISTRecognizer) cm.lookup("batchNIST"); - } catch (IOException ioe) { - System.err.println("I/O error during initialization: \n " + ioe); - return; - } catch (PropertyException e) { - System.err.println("Error during initialization: \n " + e); - return; - } - - if (bmr == null) { - System.err.println("Can't find batchNIST in " + propertiesFile); - return; - } - - bmr.decode(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/batch/SphinxShell.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/batch/SphinxShell.java deleted file mode 100755 index e25486ae..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/batch/SphinxShell.java +++ /dev/null @@ -1,52 +0,0 @@ -package edu.cmu.sphinx.tools.batch; - -import edu.cmu.sphinx.util.props.ConfigurationManager; -import edu.cmu.sphinx.util.props.ConfigurationManagerUtils; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; - -/** - * A little test application which instantiates a sphinx4-system and allows to reconfigure its component-parameters. - * - * @author Holger Brandl - */ -public class SphinxShell { - - public static void main(String[] args) throws IOException { - if (args.length == 0 || (args.length == 1 && (args[0].startsWith("-h") || args[0].startsWith("--h")))) { - System.out.println("Usage: SphinxShell *([[->]=] )"); - System.out.println("Example: SphinxShell foobar.xml beamWidth=123 phoneDecoder->autoAllocate=true"); - - System.out.println("\nOther options are: "); - System.out.println(" -h : Prints this help message"); - System.out.println(" -l : Prints a list of all component properties"); - - System.exit(-1); - } - - // dump the properties of an xml-configuration - if (args.length == 2 && args[0].equals("-l")) { - ConfigurationManagerUtils.dumpPropStructure(new ConfigurationManager(new File(args[1]).toURI().toURL())); - System.exit(0); - } - - File configFile = new File(args[0]); - if (!configFile.isFile()) - throw new FileNotFoundException("Can not open '" + configFile + '\''); - - ConfigurationManager cm = new ConfigurationManager(configFile.toURI().toURL()); - - // skip the first argument because it's the filename - for (int i = 1; i < args.length; i++) { - String[] splitArg = args[i].split("="); - - assert splitArg.length == 2; - - String propName = splitArg[0]; - String propValue = splitArg[1]; - ConfigurationManagerUtils.setProperty(cm, propName, propValue); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/endpoint/Segmenter.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/endpoint/Segmenter.java deleted file mode 100755 index 71cc2080..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/endpoint/Segmenter.java +++ /dev/null @@ -1,109 +0,0 @@ -package edu.cmu.sphinx.tools.endpoint; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.Scanner; - -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.frontend.FrontEnd; -import edu.cmu.sphinx.frontend.util.AudioFileDataSource; -import edu.cmu.sphinx.frontend.util.WavWriter; -import edu.cmu.sphinx.util.props.ConfigurationManager; -import edu.cmu.sphinx.util.props.ConfigurationManagerUtils; - -public class Segmenter { - - public static void main(String[] argv) throws MalformedURLException, - IOException { - - String configFile = null; - String inputFile = null; - String inputCtl = null; - String outputFile = null; - boolean noSplit = false; - - for (int i = 0; i < argv.length; i++) { - if (argv[i].equals("-c")) { - configFile = argv[++i]; - } - if (argv[i].equals("-i")) { - inputFile = argv[++i]; - } - if (argv[i].equals("-ctl")) { - inputCtl = argv[++i]; - } - if (argv[i].equals("-o")) { - outputFile = argv[++i]; - } - if (argv[i].equals("-no-split")) { - noSplit = Boolean.parseBoolean(argv[i]); - } - } - - if ((inputFile == null && inputCtl == null) || outputFile == null) { - System.out - .println("Usage: java -cp lib/batch.jar:lib/sphinx4.jar edu.cmu.sphinx.tools.endpoint.Segmenter " - + "[ -config configFile ] -name frontendName " - + "< -i input File -o outputFile | -ctl inputCtl -i inputFolder -o outputFolder >"); - System.exit(1); - } - - URL configURL; - if (configFile == null) - configURL = Segmenter.class.getResource("frontend.config.xml"); - else - configURL = new File(configFile).toURI().toURL(); - - ConfigurationManager cm = new ConfigurationManager(configURL); - - if (noSplit) { - ConfigurationManagerUtils.setProperty(cm, "wavWriter", - "captureUtterances", "false"); - } - if (inputCtl != null) { - ConfigurationManagerUtils.setProperty(cm, "wavWriter", - "isCompletePath", "true"); - } - - if (inputCtl == null) - processFile(inputFile, outputFile, cm); - else - processCtl(inputCtl, inputFile, outputFile, cm); - } - - static private void processFile(String inputFile, String outputFile, - ConfigurationManager cm) throws MalformedURLException, IOException { - - FrontEnd frontend = (FrontEnd) cm.lookup("endpointer"); - - AudioFileDataSource dataSource = (AudioFileDataSource) cm - .lookup("audioFileDataSource"); - System.out.println(inputFile); - dataSource.setAudioFile(new File(inputFile), null); - WavWriter wavWriter = (WavWriter) cm.lookup("wavWriter"); - wavWriter.setOutFilePattern(outputFile); - - frontend.initialize(); - - Data data = null; - do { - data = frontend.getData(); - } while (data != null); - } - - static private void processCtl(String inputCtl, String inputFolder, - String outputFolder, ConfigurationManager cm) - throws MalformedURLException, IOException { - - Scanner scanner = new Scanner(new File(inputCtl)); - while (scanner.hasNext()) { - String fileName = scanner.next(); - String inputFile = inputFolder + "/" + fileName + ".wav"; - String outputFile = outputFolder + "/" + fileName + ".wav"; - processFile(inputFile, outputFile, cm); - } - scanner.close(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/feature/FeatureFileDumper.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/feature/FeatureFileDumper.java deleted file mode 100755 index 378500cd..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/feature/FeatureFileDumper.java +++ /dev/null @@ -1,283 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.tools.feature; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.frontend.util.StreamDataSource; -import edu.cmu.sphinx.util.props.ConfigurationManager; -import edu.cmu.sphinx.util.props.PropertyException; - -import java.io.*; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.LinkedList; -import java.util.List; -import java.util.Scanner; -import java.util.logging.Logger; - -/** - * This program takes in an audio file, does frontend signal processing to it, - * and then dumps the resulting Feature into a separate file. Also it can - * process a list of files at once. - *

    - * Available options: - *

      - *
    • -config configFile - the XML configuration file
    • - *
    • -name frontendName - the name of the feature extractor inside the - * configuration file
    • - *
    • -i audioFile - the name of the audio file
    • - *
    • -ctl controlFile - the name of the input file for batch processing
    • - *
    • -o outputFile - the name of the output file or output folder
    • - *
    • -format binary/ascii - output file format
    • - *
    - */ -public class FeatureFileDumper { - - private FrontEnd frontEnd; - private StreamDataSource audioSource; - private List allFeatures; - private int featureLength = -1; - - /** The logger for this class */ - private static final Logger logger = Logger - .getLogger("edu.cmu.sphinx.tools.feature.FeatureFileDumper"); - - /** - * Constructs a FeatureFileDumper. - * - * @param cm - * the configuration manager - * @param frontEndName - * the name for the frontend - * @throws IOException if error occurred - */ - public FeatureFileDumper(ConfigurationManager cm, String frontEndName) - throws IOException { - try { - frontEnd = (FrontEnd) cm.lookup(frontEndName); - audioSource = (StreamDataSource) cm.lookup("streamDataSource"); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * Process the file and store the features - * - * @param inputAudioFile - * the input audio file - * @throws FileNotFoundException if exception occurred - */ - public void processFile(String inputAudioFile) throws FileNotFoundException { - audioSource .setInputStream(new FileInputStream(inputAudioFile)); - allFeatures = new LinkedList(); - getAllFeatures(); - logger.info("Frames: " + allFeatures.size()); - } - - /** - * Retrieve all Features from the frontend, and cache all those with actual - * feature data. - */ - private void getAllFeatures() { - /* - * Run through all the data and produce feature. - */ - try { - assert (allFeatures != null); - Data feature = frontEnd.getData(); - while (!(feature instanceof DataEndSignal)) { - if (feature instanceof DoubleData) { - double[] featureData = ((DoubleData) feature).getValues(); - if (featureLength < 0) { - featureLength = featureData.length; - logger.info("Feature length: " + featureLength); - } - float[] convertedData = new float[featureData.length]; - for (int i = 0; i < featureData.length; i++) { - convertedData[i] = (float) featureData[i]; - } - allFeatures.add(convertedData); - } else if (feature instanceof FloatData) { - float[] featureData = ((FloatData) feature).getValues(); - if (featureLength < 0) { - featureLength = featureData.length; - logger.info("Feature length: " + featureLength); - } - allFeatures.add(featureData); - } - feature = frontEnd.getData(); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * Returns the total number of data points that should be written to the - * output file. - * - * @return the total number of data points that should be written - */ - private int getNumberDataPoints() { - return (allFeatures.size() * featureLength); - } - - /** - * Dumps the feature to the given binary output. - * - * @param outputFile - * the binary output file - * @throws IOException if error occurred - */ - public void dumpBinary(String outputFile) throws IOException { - DataOutputStream outStream = new DataOutputStream(new FileOutputStream( - outputFile)); - outStream.writeInt(getNumberDataPoints()); - - for (float[] feature : allFeatures) { - for (float val : feature) { - outStream.writeFloat(val); - } - } - - outStream.close(); - } - - /** - * Dumps the feature to the given ASCII output file. - * - * @param outputFile - * the ASCII output file - * @throws IOException if error occurred - */ - public void dumpAscii(String outputFile) throws IOException { - PrintStream ps = new PrintStream(new FileOutputStream(outputFile), true); - ps.print(getNumberDataPoints()); - ps.print(' '); - - for (float[] feature : allFeatures) { - for (float val : feature) { - ps.print(val); - ps.print(' '); - } - } - - ps.close(); - } - - public static void main(String[] argv) { - - String configFile = null; - String frontEndName = null; - String inputFile = null; - String inputCtl = null; - String outputFile = null; - String format = "binary"; - - for (int i = 0; i < argv.length; i++) { - if (argv[i].equals("-c")) { - configFile = argv[++i]; - } - if (argv[i].equals("-name")) { - frontEndName = argv[++i]; - } - if (argv[i].equals("-i")) { - inputFile = argv[++i]; - } - if (argv[i].equals("-ctl")) { - inputCtl = argv[++i]; - } - if (argv[i].equals("-o")) { - outputFile = argv[++i]; - } - if (argv[i].equals("-format")) { - format = argv[++i]; - } - } - - if (frontEndName == null || (inputFile == null && inputCtl == null) - || outputFile == null || format == null) { - System.out - .println("Usage: FeatureFileDumper " - + "[ -config configFile ] -name frontendName " - + "< -i input File -o outputFile | -ctl inputFile -i inputFolder -o outputFolder >\n" - + "Possible frontends are: cepstraFrontEnd, spectraFrontEnd, plpFrontEnd"); - System.exit(1); - } - - logger.info("Input file: " + inputFile); - logger.info("Output file: " + outputFile); - logger.info("Format: " + format); - - try { - URL url; - if (configFile != null) { - url = new File(configFile).toURI().toURL(); - } else { - url = FeatureFileDumper.class - .getResource("frontend.config.xml"); - } - ConfigurationManager cm = new ConfigurationManager(url); - - if(cm.lookup(frontEndName) == null) { - throw new RuntimeException("No such frontend: " + frontEndName); - } - - FeatureFileDumper dumper = new FeatureFileDumper(cm, frontEndName); - - if (inputCtl == null) - dumper.processFile(inputFile, outputFile, format); - else - dumper.processCtl(inputCtl, inputFile, outputFile, format); - } catch (IOException ioe) { - System.err.println("I/O Error " + ioe); - } catch (PropertyException p) { - System.err.println("Bad configuration " + p); - } - } - - private void processFile(String inputFile, String outputFile, String format) - throws MalformedURLException, IOException { - processFile(inputFile); - if (format.equals("binary")) { - dumpBinary(outputFile); - } else if (format.equals("ascii")) { - dumpAscii(outputFile); - } else { - System.out.println("ERROR: unknown output format: " + format); - } - } - - private void processCtl(String inputCtl, String inputFolder, - String outputFolder, String format) throws MalformedURLException, - IOException { - - Scanner scanner = new Scanner(new File(inputCtl)); - while (scanner.hasNext()) { - String fileName = scanner.next(); - String inputFile = inputFolder + "/" + fileName + ".wav"; - String outputFile = outputFolder + "/" + fileName + ".mfc"; - - processFile(inputFile); - if (format.equals("binary")) { - dumpBinary(outputFile); - } else if (format.equals("ascii")) { - dumpAscii(outputFile); - } else { - System.out.println("ERROR: unknown output format: " + format); - } - } - scanner.close(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/live/LiveModeRecognizer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/live/LiveModeRecognizer.java deleted file mode 100755 index 35396e61..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/tools/live/LiveModeRecognizer.java +++ /dev/null @@ -1,309 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.tools.live; - -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.net.URL; -import java.util.LinkedList; -import java.util.List; - -import edu.cmu.sphinx.frontend.util.ConcatFileDataSource; -import edu.cmu.sphinx.recognizer.Recognizer; -import edu.cmu.sphinx.result.Result; -import edu.cmu.sphinx.result.WordResult; -import edu.cmu.sphinx.util.*; -import edu.cmu.sphinx.util.props.*; - -/** - * Decodes a batch file containing a list of files to decode. The files can be either audio files or cepstral files, but - * defaults to audio files. - */ -public class LiveModeRecognizer implements Configurable { - - /** The property that specifies the recognizer to use */ - @S4Component(type = Recognizer.class) - public final static String PROP_RECOGNIZER = "recognizer"; - - /** The property that specifies the source of the transcript */ - @S4Component(type = ConcatFileDataSource.class) - public final static String PROP_INPUT_SOURCE = "inputSource"; - - /** The property specifying whether to print out the gap insertion errors. */ - @S4Boolean(defaultValue = false) - public static final String PROP_SHOW_GAP_INSERTIONS = "showGapInsertions"; - - /** The property specifying the transcript file. */ - @S4String(defaultValue = "hypothesis.txt") - public final static String PROP_HYPOTHESIS_TRANSCRIPT = "hypothesisTranscript"; - - /** The property specifying the number of files to decode before alignment is performed. */ - @S4Integer(defaultValue = -1) - public final static String PROP_ALIGN_INTERVAL = "alignInterval"; - - // TODO - the instrumentation in here that is looking for gap insertions - // and performing the alignment and reporting of the live summary data - // should probably be moved to a separate instrumentation package, much - // like the BestPathAccuracyTracker. - - // ------------------------------- - // Configuration data - // -------------------------------- - private Recognizer recognizer; - private ConcatFileDataSource dataSource; - private String hypothesisFile; - private boolean showGapInsertions; - - // ------------------------------- - // Working data - // -------------------------------- - private int alignInterval; - private int numUtterances; - - private FileWriter hypothesisTranscript; - private ReferenceSource referenceSource; - private final NISTAlign aligner = new NISTAlign(true, true); - - public LiveModeRecognizer( Recognizer recognizer, ConcatFileDataSource dataSource, int skip, boolean showGapInsertions, String hypothesisFile, int alignInterval ) { - this.recognizer = recognizer; - this.dataSource = dataSource; - this.showGapInsertions = showGapInsertions; - this.hypothesisFile = hypothesisFile; - this.alignInterval = alignInterval; - this.referenceSource = dataSource; - } - - public LiveModeRecognizer() { - - } - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - public void newProperties(PropertySheet ps) throws PropertyException { - recognizer = (Recognizer) ps.getComponent(PROP_RECOGNIZER); - dataSource = (ConcatFileDataSource) ps.getComponent(PROP_INPUT_SOURCE); - showGapInsertions = ps.getBoolean(PROP_SHOW_GAP_INSERTIONS); - - hypothesisFile = ps.getString(PROP_HYPOTHESIS_TRANSCRIPT); - - alignInterval = ps.getInt(PROP_ALIGN_INTERVAL); - - referenceSource = dataSource; - } - - - /** Decodes the batch of audio files - * @throws IOException if IO went wrong - */ - public void decode() throws IOException { - List resultList = new LinkedList(); - Result result; - int startReference = 0; - hypothesisTranscript = new FileWriter(hypothesisFile); - recognizer.allocate(); - while ((result = recognizer.recognize()) != null) { - numUtterances++; - String resultText = result.getBestResultNoFiller(); - - System.out.println("\nHYP: " + resultText); - System.out.println(" Sentences: " + numUtterances); - resultList.add(resultText); - - for (WordResult wr : result.getTimedBestResult(false)) { - hypothesisTranscript.write(wr.toString()); - hypothesisTranscript.write(' '); - } - hypothesisTranscript.write('\n'); - hypothesisTranscript.flush(); - - if (alignInterval > 0 && (numUtterances % alignInterval == 0)) { - // perform alignment if the property 'alignInterval' is set - List references = referenceSource.getReferences(); - List section = references.subList(startReference, references - .size()); - alignResults(resultList, section); - resultList = new LinkedList(); - startReference = references.size(); - } - } - - hypothesisTranscript.close(); - - // perform alignment on remaining results - List references = referenceSource.getReferences(); - List section = references.subList(startReference, references.size()); - if (!resultList.isEmpty() || !section.isEmpty()) { - alignResults(resultList, section); - } - System.out.println("# ------------- Summary Statistics -------------"); - aligner.printTotalSummary(); - - recognizer.deallocate(); - - showLiveSummary(); - System.out.println(); - } - - - /** Shows the test statistics that relates to live mode decoding. */ - private void showLiveSummary() throws IOException { - int actualUtterances = referenceSource.getReferences().size(); - int gapInsertions = detectGapInsertionErrors(); - - System.out.println - (" Utterances: Actual: " + actualUtterances + - " Found: " + numUtterances); - System.out.println - (" Gap Insertions: " + gapInsertions); - } - - - /** Detect gap insertion errors. */ - private int detectGapInsertionErrors() throws IOException { - Timer gapTimer = TimerPool.getTimer(this, "GapInsertionDetector"); - gapTimer.start(); - GapInsertionDetector gid = new GapInsertionDetector(dataSource - .getTranscriptFile(), hypothesisFile, showGapInsertions); - int gapInsertions = gid.detect(); - gapTimer.stop(); - return gapInsertions; - } - - - /** - * Align the list of results with reference text. This method figures out how many words and sentences match, and - * the different types of errors. - * - * @param hypothesisList the list of hypotheses - * @param referenceList the list of references - */ - private void alignResults(List hypothesisList, List referenceList) { - System.out.println(); - System.out.println("Aligning results..."); - System.out.println(" Utterances: Found: " + hypothesisList.size() - + " Actual: " + referenceList.size()); - - String hypothesis = listToString(hypothesisList); - String reference = listToString(referenceList); - saveAlignedText(hypothesis, reference); - - getAlignTimer().start(); - aligner.align(reference, hypothesis); - getAlignTimer().stop(); - - System.out.println(" ...done aligning"); - System.out.println(); - } - - - /** - * Saves the aligned hypothesis and reference text to the aligned text file. - * - * @param hypothesis the aligned hypothesis text - * @param reference the aligned reference text - */ - private void saveAlignedText(String hypothesis, String reference) { - try { - FileWriter writer = new FileWriter("align.txt"); - writer.write(hypothesis); - writer.write("\n"); - writer.write(reference); - writer.close(); - } catch (IOException ioe) { - ioe.printStackTrace(); - } - } - - - /** - * Converts the given list of strings into one string, putting a space character in between the strings. - * - * @param resultList the list of strings - * @return a string which is a concatenation of the strings in the list, separated by a space character - */ - private String listToString(List resultList) { - StringBuilder sb = new StringBuilder(); - for (String result : resultList) { - sb.append(result).append(' '); - } - return sb.toString(); - } - - - /** Return the timer for alignment. */ - private Timer getAlignTimer() { - return TimerPool.getTimer(this, "Align"); - } - - - /** Do clean up - * @throws IOException if something went wrong - */ - public void close() throws IOException { - hypothesisTranscript.close(); - } - - - /** - * Main method of this BatchDecoder. - * - * @param argv argv[0] : config file argv[1] : a file listing all the audio files to decode - */ - public static void main(String[] argv) { - if (argv.length != 1) { - System.out.println("Usage: LiveModeRecognizer config-file.xml "); - System.exit(1); - } - String cmFile = argv[0]; - ConfigurationManager cm; - LiveModeRecognizer lmr; - - try { - URL url = new File(cmFile).toURI().toURL(); - cm = new ConfigurationManager(url); - lmr = (LiveModeRecognizer) cm.lookup("live"); - } catch (IOException ioe) { - System.err.println("I/O error during initialization: \n " + ioe); - return; - } catch (PropertyException e) { - System.err.println("Error during initialization: \n " + e); - e.printStackTrace(); - return; - } - - if (lmr == null) { - System.err.println("Can't find liveModeRecognizer in " + cmFile); - return; - } - - try { - lmr.decode(); - } catch (IOException ioe) { - System.err - .println("I/O error during decoding: " + ioe.getMessage()); - } - } - -// -// @Test -// public void testUseConcatDataSource() { -// Map props = new HashMap(); -// props.put("inputSource", new ConcatFileDataSource()); -// props.put("recognizer", new Recognizer()); -// LiveModeRecognizer liveRecognizer = (LiveModeRecognizer) ConfigurationManager.getInstance(LiveModeRecognizer.class, props); -// -// } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/BaumWelchLearner.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/BaumWelchLearner.java deleted file mode 100755 index 51a96aef..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/BaumWelchLearner.java +++ /dev/null @@ -1,761 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.trainer; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.frontend.util.StreamCepstrumSource; -import edu.cmu.sphinx.linguist.acoustic.HMMState; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.SenoneHMM; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.SenoneHMMState; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.trainer.TrainerScore; -import edu.cmu.sphinx.util.LogMath; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Component; - -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; -import java.util.logging.Logger; - - -/** Provides mechanisms for computing statistics given a set of states and input data. */ -public class BaumWelchLearner implements Learner { - - - @S4Component(type = FrontEnd.class) - public static final String FRONT_END = "frontend"; - private FrontEnd frontEnd; - - @S4Component(type = StreamCepstrumSource.class) - public static final String DATA_SOURCE = "source"; - private StreamCepstrumSource dataSource; - - private LogMath logMath; - - /* - * The logger for this class - */ - private static Logger logger = - Logger.getLogger("edu.cmu.sphinx.trainer.BaumWelch"); - - private Data curFeature; - private UtteranceGraph graph; - private TrainerScore[][] scoreArray; - private int lastFeatureIndex; - private int currentFeatureIndex; - private float[] betas; - private float[] outputProbs; - private float[] componentScores; - private float[] probCurrentFrame; - private float totalLogScore; - - - public void newProperties(PropertySheet ps) throws PropertyException { - logMath = LogMath.getLogMath(); - dataSource = (StreamCepstrumSource) ps.getComponent(DATA_SOURCE); - - frontEnd = (FrontEnd) ps.getComponent(FRONT_END); - frontEnd.setDataSource(dataSource); - } - - - /* Initialize and return the frontend based on the given sphinx properties. */ - protected FrontEnd getFrontEnd() { - return frontEnd; - } - - - /** - * Sets the learner to use a utterance. - * - * @param utterance the utterance - * @throws IOException if error occurred - */ - public void setUtterance(Utterance utterance) throws IOException { - String file = utterance.toString(); - InputStream is = new FileInputStream(file); - dataSource.setInputStream(is, false); - } - - - /** - * Gets a single frame of speech. - * - * @return if success - */ - private boolean getFeature() { - try { - curFeature = frontEnd.getData(); - - if (curFeature == null) { - return false; - } - - if (curFeature instanceof DataStartSignal) { - curFeature = frontEnd.getData(); - if (curFeature == null) { - return false; - } - } - - if (curFeature instanceof DataEndSignal) { - return false; - } - - if (curFeature instanceof Signal) { - throw new Error("Can't score non-content feature"); - } - } catch (DataProcessingException dpe) { - System.out.println("DataProcessingException " + dpe); - dpe.printStackTrace(); - return false; - } - return true; - } - - - /** Starts the Learner. */ - public void start() { - } - - - /** Stops the Learner. */ - public void stop() { - } - - - /** - * Initializes computation for current utterance and utterance graph. - * - * @param utterance the current utterance - * @param graph the current utterance graph - * @throws IOException if exception occured - */ - public void initializeComputation(Utterance utterance, - UtteranceGraph graph) throws IOException { - setUtterance(utterance); - setGraph(graph); - } - - - /** - * Implements the setGraph method. - * - * @param graph the graph - */ - public void setGraph(UtteranceGraph graph) { - this.graph = graph; - } - - - /** - * Prepares the learner for returning scores, one at a time. To do so, it performs the full forward pass, but - * returns the scores for the backward pass one feature frame at a time. - */ - private TrainerScore[][] prepareScore() { - // scoreList will contain a list of score, which in turn are a - // vector of TrainerScore elements. - List scoreList = new ArrayList(); - int numStates = graph.size(); - TrainerScore[] score = new TrainerScore[numStates]; - betas = new float[numStates]; - outputProbs = new float[numStates]; - - // First we do the forward pass. We need this before we can - // return any probability. When we're doing the backward pass, - // we can finally return a score for each call of this method. - - probCurrentFrame = new float[numStates]; - // Initialization of probCurrentFrame for the alpha computation - Node initialNode = graph.getInitialNode(); - int indexInitialNode = graph.indexOf(initialNode); - for (int i = 0; i < numStates; i++) { - probCurrentFrame[i] = LogMath.LOG_ZERO; - } - // Overwrite in the right position - probCurrentFrame[indexInitialNode] = 0.0f; - - for (initialNode.startOutgoingEdgeIterator(); - initialNode.hasMoreOutgoingEdges();) { - Edge edge = initialNode.nextOutgoingEdge(); - Node node = edge.getDestination(); - int index = graph.indexOf(node); - if (!node.isType("STATE")) { - // Certainly non-emitting, if it's not in an HMM. - probCurrentFrame[index] = 0.0f; - } else { - // See if it's the last state in the HMM, i.e., if - // it's non-emitting. - HMMState state = (HMMState) node.getObject(); - if (!state.isEmitting()) { - probCurrentFrame[index] = 0.0f; - } - assert false; - } - } - - // If getFeature() is true, curFeature contains a valid - // Feature. If not, a problem or EOF was encountered. - lastFeatureIndex = 0; - while (getFeature()) { - forwardPass(score); - scoreList.add(score); - lastFeatureIndex++; - } - logger.info("Feature frames read: " + lastFeatureIndex); - // Prepare for beta computation - for (int i = 0; i < probCurrentFrame.length; i++) { - probCurrentFrame[i] = LogMath.LOG_ZERO; - } - Node finalNode = graph.getFinalNode(); - int indexFinalNode = graph.indexOf(finalNode); - // Overwrite in the right position - probCurrentFrame[indexFinalNode] = 0.0f; - for (finalNode.startIncomingEdgeIterator(); - finalNode.hasMoreIncomingEdges();) { - Edge edge = finalNode.nextIncomingEdge(); - Node node = edge.getSource(); - int index = graph.indexOf(node); - if (!node.isType("STATE")) { - // Certainly non-emitting, if it's not in an HMM. - probCurrentFrame[index] = 0.0f; - assert false; - } else { - // See if it's the last state in the HMM, i.e., if - // it's non-emitting. - HMMState state = (HMMState) node.getObject(); - if (!state.isEmitting()) { - probCurrentFrame[index] = 0.0f; - } - } - } - - return scoreList.toArray(new TrainerScore[scoreList.size()][]); - } - - - /** - * Gets the TrainerScore for the next frame - * - * @return the TrainerScore, or null if EOF was found - */ - public TrainerScore[] getScore() { - TrainerScore[] score; - if (scoreArray == null) { - // Do the forward pass, and create the necessary arrays - scoreArray = prepareScore(); - currentFeatureIndex = lastFeatureIndex; - } - currentFeatureIndex--; - if (currentFeatureIndex >= 0) { - float logScore = LogMath.LOG_ZERO; - score = scoreArray[currentFeatureIndex]; - assert score.length == betas.length; - backwardPass(score); - for (int i = 0; i < betas.length; i++) { - score[i].setGamma(); - logScore = logMath.addAsLinear(logScore, score[i].getGamma()); - } - if (currentFeatureIndex == lastFeatureIndex - 1) { - TrainerScore.setLogLikelihood(logScore); - totalLogScore = logScore; - } else { - if (Math.abs(totalLogScore - logScore) > - Math.abs(totalLogScore)) { - System.out.println("WARNING: log probabilities differ: " + - totalLogScore + " and " + logScore); - } - } - return score; - } else { - // We need to clear this, so we start the next iteration - // on a clean plate. - scoreArray = null; - return null; - } - } - - - /** - * Computes the acoustic scores using the current Feature and a given node in the graph. - * - * @param index the graph index - * @return the overall acoustic score - */ - private float calculateScores(int index) { - float logScore; - // Find the HMM state for this node - SenoneHMMState state = (SenoneHMMState) graph.getNode(index).getObject(); - if ((state != null) && (state.isEmitting())) { - // Compute the scores for each mixture component in this state - componentScores = state.calculateComponentScore(curFeature); - // Compute the overall score for this state - logScore = state.getScore(curFeature); - // For CI models, for now, we only try to use mixtures - // with one component - assert componentScores.length == 1; - } else { - componentScores = null; - logScore = 0.0f; - } - return logScore; - } - - - /** - * Does the forward pass, one frame at a time. - * - * @param score the objects transferring info to the buffers - */ - private void forwardPass(TrainerScore[] score) { - // Let's precompute the acoustic probabilities and create the - // score object, one for each state - for (int i = 0; i < graph.size(); i++) { - outputProbs[i] = calculateScores(i); - score[i] = new TrainerScore(curFeature, - outputProbs[i], - (HMMState) graph.getNode(i).getObject(), - componentScores); - score[i].setAlpha(probCurrentFrame[i]); - } - - // Now, the forward pass. - float[] probPreviousFrame = probCurrentFrame; - probCurrentFrame = new float[graph.size()]; - // First, the emitting states. We have to do this because the - // emitting states use probabilities from the previous - // frame. The non-emitting states, however, since they don't - // consume frames, use probabilities from the current frame - for (int indexNode = 0; indexNode < graph.size(); indexNode++) { - Node node = graph.getNode(indexNode); - // Treat dummy node (and initial and final nodes) the same - // as non-emitting - if (!node.isType("STATE")) { - continue; - } - SenoneHMMState state = (SenoneHMMState) node.getObject(); - SenoneHMM hmm = (SenoneHMM) state.getHMM(); - if (!state.isEmitting()) { - continue; - } - // Initialize the current frame probability with 0.0f, log scale - probCurrentFrame[indexNode] = LogMath.LOG_ZERO; - for (node.startIncomingEdgeIterator(); - node.hasMoreIncomingEdges();) { - // Finds out what the previous node and previous state are - Node previousNode = node.nextIncomingEdge().getSource(); - int indexPreviousNode = graph.indexOf(previousNode); - HMMState previousState = (HMMState) previousNode.getObject(); - float logTransitionProbability; - // previous state could be have an associated hmm state... - if (previousState != null) { - // Make sure that the transition happened from a state - // that either is in the same model, or was a - // non-emitting state - assert ((!previousState.isEmitting()) || - (previousState.getHMM() == hmm)); - if (!previousState.isEmitting()) { - logTransitionProbability = 0.0f; - } else { - logTransitionProbability = - hmm.getTransitionProbability( - previousState.getState(), - state.getState()); - } - } else { - // Previous state is a dummy state or beginning of - // utterance. - logTransitionProbability = 0.0f; - } - // Adds the alpha and transition from the previous - // state into the current alpha - probCurrentFrame[indexNode] = - logMath.addAsLinear(probCurrentFrame[indexNode], - probPreviousFrame[indexPreviousNode] + - logTransitionProbability); - // System.out.println("State= " + indexNode + " curr " - // + probCurrentFrame[indexNode] + " prev " + - // probPreviousFrame[indexNode] + " trans " + - // logTransitionProbability); - } - // Finally, multiply by this state's output probability for the - // current Feature (add in log scale) - probCurrentFrame[indexNode] += outputProbs[indexNode]; - // System.out.println("State= " + indexNode + " alpha= " + - // probCurrentFrame[indexNode]); - score[indexNode].setAlpha(probCurrentFrame[indexNode]); - } - - // Finally, the non-emitting states - for (int indexNode = 0; indexNode < graph.size(); indexNode++) { - Node node = graph.getNode(indexNode); - HMMState state = null; - SenoneHMM hmm = null; - if (node.isType("STATE")) { - state = (HMMState) node.getObject(); - hmm = (SenoneHMM) state.getHMM(); - if (state.isEmitting()) { - continue; - } - } else if (graph.isInitialNode(node)) { - score[indexNode].setAlpha(LogMath.LOG_ZERO); - probCurrentFrame[indexNode] = LogMath.LOG_ZERO; - continue; - } - // Initialize the current frame probability 0.0f, log scale - probCurrentFrame[indexNode] = LogMath.LOG_ZERO; - for (node.startIncomingEdgeIterator(); - node.hasMoreIncomingEdges();) { - float logTransitionProbability; - // Finds out what the previous node and previous state are - Node previousNode = node.nextIncomingEdge().getSource(); - int indexPreviousNode = graph.indexOf(previousNode); - if (previousNode.isType("STATE")) { - HMMState previousState = - (HMMState) previousNode.getObject(); - // Make sure that the transition happened from a - // state that either is in the same model, or was - // a non-emitting state - assert ((!previousState.isEmitting()) || - (previousState.getHMM() == hmm)); - if (!previousState.isEmitting()) { - logTransitionProbability = 0.0f; - } else { - // previousState == state - logTransitionProbability = - hmm.getTransitionProbability( - previousState.getState(), - state.getState()); - } - } else { - logTransitionProbability = 0.0f; - } - // Adds the alpha and transition from the previous - // state into the current alpha - probCurrentFrame[indexNode] = - logMath.addAsLinear(probCurrentFrame[indexNode], - probCurrentFrame[indexPreviousNode] + - logTransitionProbability); - // System.out.println("State= " + indexNode + " curr " - // + probCurrentFrame[indexNode] + " prev " + - // probPreviousFrame[indexNode] + " trans " + - // logTransitionProbability); - } - // System.out.println("State= " + indexNode + " alpha= " + - // probCurrentFrame[indexNode]); - - // Non-emitting states have the equivalent of output - // probability of 1.0. In log scale, this is the same as - // adding 0.0f, or doing nothing. - score[indexNode].setAlpha(probCurrentFrame[indexNode]); - } - } - - - /** - * Does the backward pass, one frame at a time. - * - * @param score the feature to be used - */ - private void backwardPass(TrainerScore[] score) { - // Now, the backward pass. - for (int i = 0; i < graph.size(); i++) { - outputProbs[i] = score[i].getScore(); - score[i].setBeta(probCurrentFrame[i]); - } - float[] probNextFrame = probCurrentFrame; - probCurrentFrame = new float[graph.size()]; - - // First, the emitting states - for (int indexNode = 0; indexNode < graph.size(); indexNode++) { - Node node = graph.getNode(indexNode); - // Treat dummy node (and initial and final nodes) the same - // as non-emitting - if (!node.isType("STATE")) { - continue; - } - HMMState state = (HMMState) node.getObject(); - SenoneHMM hmm = (SenoneHMM) state.getHMM(); - if (!state.isEmitting()) { - continue; - } - // Initialize the current frame probability with log - // probability of log(0f) - probCurrentFrame[indexNode] = LogMath.LOG_ZERO; - for (node.startOutgoingEdgeIterator(); - node.hasMoreOutgoingEdges();) { - float logTransitionProbability; - // Finds out what the next node and next state are - Node nextNode = node.nextOutgoingEdge().getDestination(); - int indexNextNode = graph.indexOf(nextNode); - HMMState nextState = (HMMState) nextNode.getObject(); - if (nextState != null) { - // Make sure that the transition happened to a - // non-emitting state, or to the same model - assert ((!nextState.isEmitting()) || - (nextState.getHMM() == hmm)); - if (nextState.getHMM() != hmm) { - logTransitionProbability = 0.0f; - } else { - logTransitionProbability = - hmm.getTransitionProbability(state.getState(), - nextState.getState()); - } - } else { - // Next state is a dummy state or beginning of - // utterance. - logTransitionProbability = 0.0f; - } - // Adds the beta, the output prob, and the transition - // from the next state into the current beta - probCurrentFrame[indexNode] = - logMath.addAsLinear(probCurrentFrame[indexNode], - probNextFrame[indexNextNode] + - logTransitionProbability + - outputProbs[indexNextNode]); - } - // System.out.println("State= " + indexNode + " beta= " + probCurrentFrame[indexNode]); - score[indexNode].setBeta(probCurrentFrame[indexNode]); - } - - // Now, the non-emitting states - - // We have to go backwards because for non-emitting states we - // use the current frame probability, and we need to refer to - // states that are downstream in the graph - for (int indexNode = graph.size() - 1; indexNode >= 0; indexNode--) { - Node node = graph.getNode(indexNode); - HMMState state = null; - if (node.isType("STATE")) { - state = (HMMState) node.getObject(); - if (state.isEmitting()) { - continue; - } - } else if (graph.isFinalNode(node)) { - score[indexNode].setBeta(LogMath.LOG_ZERO); - probCurrentFrame[indexNode] = LogMath.LOG_ZERO; - continue; - } - // Initialize the current frame probability with log(0f) - probCurrentFrame[indexNode] = LogMath.LOG_ZERO; - for (node.startOutgoingEdgeIterator(); - node.hasMoreOutgoingEdges();) { - float logTransitionProbability; - // Finds out what the next node and next state are - Node nextNode = node.nextOutgoingEdge().getDestination(); - int indexNextNode = graph.indexOf(nextNode); - if (nextNode.isType("STATE")) { - HMMState nextState = (HMMState) nextNode.getObject(); - // Make sure that the transition happened to a - // state that either is the same, or is emitting - assert ((nextState.isEmitting()) || (nextState == state)); - // In any case, the transition (at this point) is - // assumed to be 1.0f, or 0.0f in log scale. - logTransitionProbability = 0.0f; - /* - if (!nextState.isEmitting()) { - logTransitionProbability = 0.0f; - } else { - logTransitionProbability = - hmm.getTransitionProbability(state.getState(), - nextState.getState()); - } - */ - } else { - logTransitionProbability = 0.0f; - } - // Adds the beta, the transition, and the output prob - // from the next state into the current beta - probCurrentFrame[indexNode] = - logMath.addAsLinear(probCurrentFrame[indexNode], - probCurrentFrame[indexNextNode] + - logTransitionProbability); - } - // System.out.println("State= " + indexNode + " beta= " + probCurrentFrame[indexNode]); - score[indexNode].setBeta(probCurrentFrame[indexNode]); - } - } - - /* Pseudo code: - forward pass: - token = maketoken(initialstate); - List initialTokenlist = new List; - newtokenlist.add(token); - - // Initial token is on a nonemitting state; no need to score; - List newList = expandToEmittingStateList(initialTokenList){ - - while (morefeatures){ - scoreTokenList(emittingTokenList, featurevector[timestamp]); - pruneTokenList(emittingTokenList); - List newList = expandToEmittingStateList(emittingTokenList){ - timestamp++; - } - // Some logic to expand to a final nonemitting state (how)? - expandToNonEmittingStates(emittingTokenList); - */ - - /* - private void forwardPass() { - ActiveList activelist = new FastActiveList(createInitialToken()); - AcousticScorer acousticScorer = new ThreadedAcousticScorer(); - FeatureFrame featureFrame = frontEnd.getFeatureFrame(1, ""); - Pruner pruner = new SimplePruner(); - - // Initialization code pushing initial state to emitting state here - - while ((featureFrame.getFeatures() != null)) { - ActiveList nextActiveList = new FastActiveList(); - - // At this point we have only emitting states. We score - // and prune them - ActiveList emittingStateList = new FastActiveList(); - // activelist.getEmittingStateList(); - acousticScorer.calculateScores(emittingStateList.getTokens()); - // The pruner must clear up references to pruned objects - emittingStateList = pruner.prune( emittingStateList); - - expandStateList(emittingStateList, nextActiveList); - - while (nextActiveList.hasNonEmittingStates()){ - // extractNonEmittingStateList will pull out the list - // of nonemitting states completely from the - // nextActiveList. At this point nextActiveList does - // not have a list of nonemitting states and must - // instantiate a new one. - ActiveList nonEmittingStateList = - nextActiveList.extractNonEmittingStateList(); - nonEmittingStateList = pruner.prune(nonEmittingStateList); - expandStateList(nonEmittingStateList, nextActiveList); - } - activeList = newActiveList; - } - } - */ - - /* Pseudo code - backward pass: - state = finaltoken.state.wholelistofeverythingthatcouldbefinal; - while (moreTokensAtCurrentTime) { - Token token = nextToken(); - State state = token.state; - state.gamma = state.logalpha + state.logbeta - logtotalprobability; - SentenceHMM.updateState(state,state.gamma,vector[state.timestamp]); - // state.update (state.gamma, vector[state.timestamp], updatefunction()); - while token.hasMoreIncomingEdges() { - Edge transition = token.nextIncomingEdge(); - double logalpha = transition.source.alpha; - double logbeta = transition.destination.beta; - double logtransition = transition.transitionprob; - // transition.posterior = alpha*transition*beta / - // totalprobability; - double localtransitionbetascore = logtransition + logbeta + - transition.destination.logscore; - double transition.posterior = localtransitionbetascore + - logalpha - logtotalprobability; - transition.updateaccumulator(transition.posterior); - // transition.updateaccumulator(transition.posterior, updatefunction()); - SentenceHMM.updateTransition(transition, transitionstate,state.gamma); - transition.source.beta = Logadd(transition.source.beta, - localtransitionbetascore); - - } - } - */ - - /* - private void expandStateList(ActiveList stateList, - ActiveList nextActiveList) { - while (stateList.hasMoreTokens()) { - Token token = emittingStateList.getNextToken(); - - // First get list of links to possible future states - List successorList = getSuccessors(token); - while (successorList.hasMoreEntries()) { - UtteranceGraphEdge edge = successorList.getNextEntry(); - - // create a token for the future state, if its not - // already in active list; The active list will check - // for the key "edge.destination()" in both of its - // lists - if (nextActiveList.hasState(edge.destination())) { - Token newToken = - nextActiveList.getTokenForState(edge.destination()); - } else { - Token newToken = new Token(edge.destination()); - } - - // create a link between current state and future state - TrainerLink newlink = new TrainerLink(edge, token, newToken); - newlink.logScore = token.logScore + edge.transition.logprob(); - - // add link to the appropriate lists for source and - // destination tokens - token.addOutGoingLink(newlink); - - newToken.addIncomingLink(newlink); - newToken.alpha = logAdd(newToken.alpha, newlink.logScore); - - // At this point, we have placed a new token in the - // successor state, and linked the token at the - // current state to the token at the non-emitting - // states. - - // Add token to appropriate active list - nextActiveList.add(newToken); - } - } - } - */ - - /* - private void expandToEmittingStateList(List tokenList){ - List emittingTokenList = new List(); - do { - List nonEmittingTokenList = new List(); - expandtokens(newtokenlist, emittingTokenList, - nonemittingTokenList); - while (nonEmittingTokenList.length() != 0); - return emittingTokenList; - } - } - */ - - /* - private void expandtokens(List tokens, List nonEmittingStateList, - List EmittingStateList){ - while (moreTokens){ - sucessorlist = SentenceHMM.gettransitions(nextToken()); - while (moretransitions()){ - transition = successor; - State destinationState = successor.state; - newtoken = gettokenfromHash(destinationState, - currenttimestamp); - newtoken.logscore = Logadd(newtoken.logscore, - token.logscore + transition.logscore); - // Add transition to newtoken predecessor list? - // Add transition to token sucessor list - // Should we define a token "arc" for this. ?? - if (state.isemitting) - EmittingStateList.add(newtoken); - else - nonEmittingStateList.add(newtoken); - } - } - } - */ - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/BuildTranscriptHMM.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/BuildTranscriptHMM.java deleted file mode 100755 index b544bec5..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/BuildTranscriptHMM.java +++ /dev/null @@ -1,274 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.trainer; - -import edu.cmu.sphinx.linguist.acoustic.AcousticModel; -import edu.cmu.sphinx.linguist.acoustic.HMM; -import edu.cmu.sphinx.linguist.acoustic.HMMPosition; -import edu.cmu.sphinx.linguist.acoustic.Unit; -import edu.cmu.sphinx.linguist.acoustic.UnitManager; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.SenoneHMM; -import edu.cmu.sphinx.linguist.dictionary.Dictionary; -import edu.cmu.sphinx.linguist.dictionary.Pronunciation; -import edu.cmu.sphinx.util.LogMath; - -/** This class builds an HMM from a transcript, at increasing levels of details. */ -public class BuildTranscriptHMM { - - private Graph wordGraph; - private Graph phonemeGraph; - private Graph contextDependentPhoneGraph; - private Graph hmmGraph; - private TrainerDictionary dictionary; - private AcousticModel acousticModel; - private UnitManager unitManager; - - - /** - * Constructor for class BuildTranscriptHMM. When called, this method creates graphs for the transcript at several - * levels of detail, subsequently mapping from a word graph to a phone graph, to a state graph. - * - * @param context this object's context - * @param transcript the transcript to be converted to HMM - * @param acousticModel the acoustic model to be used - * @param unitManager the manager for units - */ - public BuildTranscriptHMM(String context, Transcript transcript, - AcousticModel acousticModel, UnitManager unitManager) { - - this.acousticModel = acousticModel; - this.unitManager = unitManager; - wordGraph = buildWordGraph(transcript); - assert wordGraph.validate() : "Word graph not validated"; - phonemeGraph = buildPhonemeGraph(wordGraph); - assert phonemeGraph.validate() : "Phone graph not validated"; - contextDependentPhoneGraph = - buildContextDependentPhonemeGraph(phonemeGraph); - assert contextDependentPhoneGraph.validate() : - "Context dependent graph not validated"; - hmmGraph = buildHMMGraph(contextDependentPhoneGraph); - assert hmmGraph.validate() : "HMM graph not validated"; - // hmmGraph.printGraph(); - } - - - /** - * Returns the graph. - * - * @return the graph. - */ - public Graph getGraph() { - return hmmGraph; - } - - - /* - * Build a word graph from this transcript - */ - private Graph buildWordGraph(Transcript transcript) { - Graph graph; - Dictionary transcriptDict = transcript.getDictionary(); - // Make sure the dictionary is a TrainerDictionary before we cast - assert - transcriptDict.getClass().getName().endsWith("TrainerDictionary"); - dictionary = (TrainerDictionary) transcriptDict; - - transcript.startWordIterator(); - /* Shouldn't node and edge be part of the graph class? */ - - /* The wordgraph must always begin with the */ - graph = new Graph(); - Node initialNode = new Node(NodeType.UTTERANCE_BEGIN); - graph.addNode(initialNode); - graph.setInitialNode(initialNode); - - if (transcript.isExact()) { - Node prevNode = initialNode; - for (transcript.startWordIterator(); - transcript.hasMoreWords();) { - /* create a new node for the next word */ - Node wordNode = new Node(NodeType.WORD, - transcript.nextWord()); - /* Link the new node into the graph */ - graph.linkNodes(prevNode, wordNode); - - prevNode = wordNode; - } - /* All words are done. Just add the */ - Node wordNode = new Node(NodeType.UTTERANCE_END); - graph.linkNodes(prevNode, wordNode); - graph.setFinalNode(wordNode); - } else { - /* Begin the utterance with a loopy silence */ - Node silLoopBack = - new Node(NodeType.SILENCE_WITH_LOOPBACK); - graph.linkNodes(initialNode, silLoopBack); - - // Create links with words from the transcript - for (transcript.startWordIterator(); - transcript.hasMoreWords();) { - String word = transcript.nextWord(); - Pronunciation[] pronunciations = - dictionary.getWord(word).getPronunciations(); - int numberOfPronunciations = pronunciations.length; - - Node[] pronNode = new Node[numberOfPronunciations]; - - // Create node at the beginning of the word - Node dummyWordBeginNode = new Node(NodeType.DUMMY); - // Allow the silence to be skipped - // TODO: don't link this, for debugging. - // graph.linkNodes(prevNode, dummyWordBeginNode); - // Link the latest silence to the dummy too - graph.linkNodes(silLoopBack, dummyWordBeginNode); - // Add word ending dummy node - Node dummyWordEndNode = new Node(NodeType.DUMMY); - for (int i = 0; i < numberOfPronunciations; i++) { - String wordAlternate - = pronunciations[i].getWord().getSpelling(); - if (i > 0) { - wordAlternate += "(" + i + ')'; - } - pronNode[i] = new Node(NodeType.WORD, wordAlternate); - graph.linkNodes(dummyWordBeginNode, pronNode[i]); - graph.linkNodes(pronNode[i], dummyWordEndNode); - } - - /* Add silence */ - silLoopBack = new - Node(NodeType.SILENCE_WITH_LOOPBACK); - graph.linkNodes(dummyWordEndNode, silLoopBack); - - } - Node wordNode = new Node(NodeType.UTTERANCE_END); - // Link previous node, a dummy word end node - // TODO: disable this link for now. - // graph.linkNodes(prevNode, wordNode); - // Link also the previous silence node - graph.linkNodes(silLoopBack, wordNode); - graph.setFinalNode(wordNode); - } - return graph; - } - - - /** Convert word graph to phoneme graph */ - private Graph buildPhonemeGraph(Graph wordGraph) { - Graph phonemeGraph = new Graph(); - phonemeGraph.copyGraph(wordGraph); - - for (Node node : phonemeGraph.nodeToArray()) { - if (node.getType().equals(NodeType.WORD)) { - String word = node.getID(); - // "false" means graph won't have additional dummy - // nodes surrounding the word - Graph pronunciationGraph = dictionary.getWordGraph(word, false); - phonemeGraph.insertGraph(pronunciationGraph, node); - } - } - return phonemeGraph; - } - - - /** - * Convert phoneme graph to a context sensitive phoneme graph. This graph expands paths out to have separate phoneme - * nodes for phonemes in different contexts. - * - * @param phonemeGraph the phoneme graph - * @return a context dependendent phoneme graph - */ - public Graph buildContextDependentPhonemeGraph(Graph phonemeGraph) { - // TODO: Dummy stub for now - return a copy of the original graph - Graph cdGraph = new Graph(); - cdGraph.copyGraph(phonemeGraph); - return cdGraph; - } - - - /** - * Convert the phoneme graph to an HMM. - * - * @param cdGraph a context dependent phoneme graph - * @return an HMM graph for a context dependent phoneme graph - */ - public Graph buildHMMGraph(Graph cdGraph) { - Graph hmmGraph = new Graph(); - - hmmGraph.copyGraph(cdGraph); - - for (Node node : hmmGraph.nodeToArray()) { - Unit unit = null; - if (node.getType().equals(NodeType.PHONE)) { - unit = unitManager.getUnit(node.getID()); - } else if (node.getType().equals(NodeType.SILENCE_WITH_LOOPBACK)) { - unit = unitManager.getUnit("SIL"); - } else { - // if it's not a phone, and it's not silence, it's a - // dummy node, and we don't care. - continue; - } - HMM hmm = - acousticModel.lookupNearestHMM(unit, HMMPosition.UNDEFINED, false); - Graph modelGraph = buildModelGraph((SenoneHMM)hmm); - modelGraph.validate(); - hmmGraph.insertGraph(modelGraph, node); - } - return hmmGraph; - } - - - /** - * Build a graph given an HMM. The graph will not be surrounded by dummy nodes. The number of nodes in the graph is - * the number of emitting states in the hmm plus one, to account for a final, non-emitting state. - * - * @param hmm the HMM - * @return the graph - */ - private Graph buildModelGraph(SenoneHMM hmm) { - Graph graph = new Graph(); - Node prevNode; - Node stateNode = null; - float[][] tmat = hmm.getTransitionMatrix(); - - prevNode = new Node(NodeType.DUMMY); - graph.addNode(prevNode); - graph.setInitialNode(prevNode); - - // 'hmm.getOrder() + 1' to account for final, non-emitting state. - for (int i = 0; i < hmm.getOrder() + 1; i++) { - /* create a new node for the next hmmState */ - stateNode = new Node(NodeType.STATE, hmm.getUnit().getName()); - stateNode.setObject(hmm.getState(i)); - graph.addNode(stateNode); - /* Link the new node into the graph */ - if (i == 0) { - graph.linkNodes(prevNode, stateNode); - } - for (int j = 0; j <= i; j++) { - // System.out.println("TMAT: " + j + " " + i + " " + - // tmat[j][i]); - if (tmat[j][i] != LogMath.LOG_ZERO) { - // 'j + 1' to account for the initial dummy node - graph.linkNodes(graph.getNode(j + 1), stateNode); - } - } - prevNode = stateNode; - } - /* All words are done. Just add the final dummy */ - // stateNode = new Node(NodeType.DUMMY); - // graph.linkNodes(prevNode, stateNode); - graph.setFinalNode(stateNode); - - return graph; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/ControlFile.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/ControlFile.java deleted file mode 100755 index 09d311c3..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/ControlFile.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.trainer; - -import edu.cmu.sphinx.util.props.Configurable; -import edu.cmu.sphinx.util.props.S4Integer; -import edu.cmu.sphinx.util.props.S4String; - - -/** Provides mechanisms for reading a control file (or a pair control file plus transcription file). */ -public interface ControlFile extends Configurable { - - /** Simple control file containing audio file names only. */ - @S4String(defaultValue = "an4_train.fileids") - String PROP_AUDIO_FILE = "audioFile"; - - /** Transcription file containing transcriptions, simple or full. */ - @S4String(defaultValue = "an4_train.transcription") - String PROP_TRANSCRIPT_FILE = "transcriptFile"; - - /** The property for which batch partition to process. */ - @S4Integer(defaultValue = 1) - public final static String PROP_WHICH_BATCH = "whichBatch"; - - /** The property for the total number of batch partitions. */ - @S4Integer(defaultValue = 1) - public final static String PROP_TOTAL_BATCHES = "totalBatches"; - - - /** Gets an iterator for utterances. */ - public void startUtteranceIterator(); - - - /** @return whether there is a next utterance. - */ - public boolean hasMoreUtterances(); - - - /** @return next utterance. */ - public Utterance nextUtterance(); - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Edge.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Edge.java deleted file mode 100755 index 3025b537..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Edge.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.trainer; - -/** Defines the basic Edge for any graph A generic graph edge must have a destination Node and an identifier. */ - -public class Edge { - - /** The identifier for this edge */ - public String id; - - /** The source node for this edge */ - public Node sourceNode; - - /** The destination node for this edge */ - public Node destinationNode; - - - /* - * Default Constructor - */ - Edge(Node source, Node destination, String id) { - this.sourceNode = source; - this.destinationNode = destination; - this.id = id; - } - - - /* - * Constructor given no id. - */ - Edge(Node source, Node destination) { - this(source, destination, null); - } - - - /** - * Sets the destination node for a given edge. - * - * @param node the destination node for this edge - * @see #getDestination - */ - public void setDestination(Node node) { - this.destinationNode = node; - } - - - /** - * Sets source node for a given edge. - * - * @param node the source node for this edge - * @see #getSource - */ - public void setSource(Node node) { - this.sourceNode = node; - } - - - /** - * Gets the destination node for a given edge. - * - * @return the destination node - * @see #setDestination - */ - public Node getDestination() { - return destinationNode; - } - - - /** - * Gets source node for a given edge. - * - * @return the source node - * @see #setSource - */ - public Node getSource() { - return sourceNode; - } - - - /** - * Validate this edge. Checks if source and destination are non-null. - * - * @return if true, edge passed validation - */ - public boolean validate() { - return ((sourceNode != null) && (destinationNode != null)); - } - - - /** Prints out this edge. */ - public void print() { - System.out.print("ID: " + id); - System.out.print(" | " + sourceNode); - System.out.println(" | " + destinationNode); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/FlatInitializerLearner.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/FlatInitializerLearner.java deleted file mode 100755 index 86ade6ce..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/FlatInitializerLearner.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.trainer; - -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.frontend.util.StreamCepstrumSource; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.trainer.TrainerAcousticModel; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.trainer.TrainerScore; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Component; - -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; - -/** Provides mechanisms for computing statistics given a set of states and input data. */ -public class FlatInitializerLearner implements Learner { - - @S4Component(type = FrontEnd.class) - public static final String FRONT_END = "frontend"; - private FrontEnd frontEnd; - - @S4Component(type = StreamCepstrumSource.class) - public static final String DATA_SOURCE = "source"; - private StreamCepstrumSource dataSource; - - private Data curFeature; - - - public void newProperties(PropertySheet ps) throws PropertyException { - dataSource = (StreamCepstrumSource) ps.getComponent(DATA_SOURCE); - - frontEnd = (FrontEnd) ps.getComponent(FRONT_END); - frontEnd.setDataSource(dataSource); - } - - - /** - * Sets the learner to use a utterance. - * - * @param utterance the utterance - * @throws IOException if error occured - */ - public void setUtterance(Utterance utterance) throws IOException { - String file = utterance.toString(); - InputStream is = new FileInputStream(file); - - dataSource.setInputStream(is, false); - } - - - /** - * Returns a single frame of speech. - * - * @return a feature frame - * @throws IOException if error occured - */ - private boolean getFeature() { - try { - curFeature = frontEnd.getData(); - - if (curFeature == null) { - return false; - } - - if (curFeature instanceof DataStartSignal) { - curFeature = frontEnd.getData(); - if (curFeature == null) { - return false; - } - } - - if (curFeature instanceof DataEndSignal) { - return false; - } - - if (curFeature instanceof Signal) { - throw new Error("Can't score non-content feature"); - } - - } catch (DataProcessingException dpe) { - System.out.println("DataProcessingException " + dpe); - dpe.printStackTrace(); - return false; - } - - return true; - } - - - /** Starts the Learner. */ - public void start() { - } - - - /** Stops the Learner. */ - public void stop() { - } - - - /** - * Initializes computation for current utterance and utterance graph. - * - * @param utterance the current utterance - * @param graph the current utterance graph - * @throws IOException if IO went wrong - */ - public void initializeComputation(Utterance utterance, - UtteranceGraph graph) throws IOException { - setUtterance(utterance); - setGraph(graph); - } - - - /** - * Implements the setGraph method. Since the flat initializer does not need a graph, this method produces an error. - * - * @param graph the graph - */ - public void setGraph(UtteranceGraph graph) { - throw new Error("Flat initializer does not use a graph!"); - } - - - /** - * Gets the TrainerScore for the next frame - * - * @return the TrainerScore - */ - public TrainerScore[] getScore() { - // If getFeature() is true, curFeature contains a valid - // Feature. If not, a problem or EOF was encountered. - if (getFeature()) { - // Since it's flat initialization, the probability is - // neutral, and the senone means "all senones". - TrainerScore[] score = new TrainerScore[1]; - score[0] = new TrainerScore(curFeature, 0.0f, - TrainerAcousticModel.ALL_MODELS); - return score; - } else { - return null; - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Graph.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Graph.java deleted file mode 100755 index ce54215c..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Graph.java +++ /dev/null @@ -1,376 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.trainer; - -import java.util.ArrayList; -import java.util.Iterator; - -/** Implementation of a graph */ - -public class Graph { - - private ArrayList edges; // The list of edges. - private ArrayList nodes; // The list of nodes. - private Iterator edgeIterator; // The iterator for the list of edges. - private Iterator nodeIterator; // The iterator for the list of nodes. - - /** The initial node in the graph. This has no incoming edges. */ - private Node initialNode; - - /* - * The final node in the graph. This has no outgoing edges. - */ - private Node finalNode; - - - /** Constructor for class. Creates lists of edges and nodes. */ - public Graph() { - edges = new ArrayList(); - nodes = new ArrayList(); - } - - - /** Set the initial node - * @param node node - * @throws IllegalArgumentException if node is not in the graph - */ - public void setInitialNode(Node node) throws IllegalArgumentException { - if (isNodeInGraph(node)) { - initialNode = node; - } else { - throw new IllegalArgumentException("Initial node not in graph"); - } - } - - - /** Set the final node - * @param node node - * @throws IllegalArgumentException if node is not in the graph - */ - public void setFinalNode(Node node) throws IllegalArgumentException { - if (isNodeInGraph(node)) { - finalNode = node; - } else { - throw new IllegalArgumentException("Final node not in graph"); - } - } - - - /** Get the initial node - * @return initial node - */ - public Node getInitialNode() { - return initialNode; - } - - - /** Get the final node - * @return final node - */ - public Node getFinalNode() { - return finalNode; - } - - - /** - * Get this graph's size. The size of a graph is the number of nodes in the graph. - * - * @return the size of the graph - */ - public int size() { - return nodes.size(); - } - - - /** - * Get node at the specified position in the list. The order is the same in which the nodes were entered. - * - * @param index index of item to retun - * @return the item - */ - public Node getNode(int index) { - return nodes.get(index); - } - - - /** - * Gets an array containing the nodes in this graph. - * - * @return an array of nodes - */ - public Node[] nodeToArray() { - return nodes.toArray(new Node[nodes.size()]); - } - - - /** - * Gets the index of a particular node in the graph. - * - * @param node the node - * @return the index in this graph, or -1 if not found - */ - public int indexOf(Node node) { - return nodes.indexOf(node); - } - - - /** - * Returns whether the given node is the initial node in this graph. - * - * @param node the node we want to compare - * @return if true, the node is the initial node - */ - public boolean isInitialNode(Node node) { - return node == initialNode; - } - - - /** - * Returns whether the given node is the final node in this graph. - * - * @param node the node we want to compare - * @return if true, the node is the final node - */ - public boolean isFinalNode(Node node) { - return node == finalNode; - } - - - /** - * Link two nodes. If the source or destination nodes are not in the graph, they are added to it. No check is - * performed to ensure that the nodes are linked to other nodes in the graph. - * @param sourceNode source node - * @param destinationNode destination node - * @return created edge - */ - public Edge linkNodes(Node sourceNode, Node destinationNode) { - Edge newLink = new Edge(sourceNode, destinationNode); - - sourceNode.addOutgoingEdge(newLink); - destinationNode.addIncomingEdge(newLink); - - if (!isNodeInGraph(sourceNode)) { - addNode(sourceNode); - } - - if (!isNodeInGraph(destinationNode)) { - addNode(destinationNode); - } - - addEdge(newLink); - - return newLink; - } - - - /** Add node to list of nodes. - * @param node node to add - */ - public void addNode(Node node) { - nodes.add(node); - } - - - /** Add edge to list of nodes. - * @param edge edge to add - */ - public void addEdge(Edge edge) { - edges.add(edge); - } - - - /** Check if a node is in the graph. - * @param node node to check - * @return if node in the graph - */ - public boolean isNodeInGraph(Node node) { - return nodes.contains(node); - } - - - /** Check if an edge is in the graph. - * @param edge edge to check - * @return if edge in the graph - */ - public boolean isEdgeInGraph(Node edge) { - return edges.contains(edge); - } - - - /** Start iterator for nodes. */ - public void startNodeIterator() { - nodeIterator = nodes.iterator(); - } - - - /** @return whether there are more nodes. - */ - public boolean hasMoreNodes() { - return nodeIterator.hasNext(); - } - - - /** @return next node. - */ - public Node nextNode() { - return nodeIterator.next(); - } - - - /** Start iterator for edges. */ - public void startEdgeIterator() { - edgeIterator = edges.iterator(); - } - - - /** @return whether there are more edges. - */ - public boolean hasMoreEdges() { - return edgeIterator.hasNext(); - } - - - /** @return next edge. */ - public Edge nextEdge() { - return edgeIterator.next(); - } - - - /** - * Copy a graph to the current graph object. - * - * @param graph the graph to copy from - */ - public void copyGraph(Graph graph) { - // Make sure the current graph is empty - assert ((nodes.isEmpty()) && (edges.isEmpty())); - for (graph.startNodeIterator(); - graph.hasMoreNodes();) { - addNode(graph.nextNode()); - } - for (graph.startEdgeIterator(); - graph.hasMoreEdges();) { - addEdge(graph.nextEdge()); - } - setInitialNode(graph.getInitialNode()); - setFinalNode(graph.getFinalNode()); - } - - - /** - * Insert a graph in the current graph, replacing a particular node. - * - * @param graph the graph to insert - * @param node the node that this graph will replace - */ - public void insertGraph(Graph graph, Node node) { - // Make sure the node belongs to the graph - assert isNodeInGraph(node) : "Node not in graph"; - assert graph != null : "Graph not defined"; - assert ((!isFinalNode(node)) && (!isInitialNode(node))); - int nodePosition = nodes.indexOf(node); - nodes.remove(nodePosition); - int index; - for (graph.startNodeIterator(), index = nodePosition; - graph.hasMoreNodes(); index++) { - nodes.add(index, graph.nextNode()); - } - for (graph.startEdgeIterator(); - graph.hasMoreEdges();) { - addEdge(graph.nextEdge()); - } - Node initialNode = graph.getInitialNode(); - for (node.startIncomingEdgeIterator(); - node.hasMoreIncomingEdges();) { - Edge edge = node.nextIncomingEdge(); - edge.setDestination(initialNode); - initialNode.addIncomingEdge(edge); - } - Node finalNode = graph.getFinalNode(); - for (node.startOutgoingEdgeIterator(); - node.hasMoreOutgoingEdges();) { - Edge edge = node.nextOutgoingEdge(); - edge.setSource(finalNode); - finalNode.addOutgoingEdge(edge); - } - } - - - /** - * Validate the graph. It checks out basics about the graph, such as whether all nodes have at least one incoming - * and outgoing edge, except for the initial and final. - * - * @return if true, graph validation passed - */ - public boolean validate() { - boolean passed = true; - for (startNodeIterator(); - hasMoreNodes();) { - Node node = nextNode(); - passed &= node.validate(); - int incoming = node.incomingEdgesSize(); - int outgoing = node.outgoingEdgesSize(); - if (incoming < 1) { - if (!isInitialNode(node)) { - System.out.println("No incoming edge: " + node); - passed = false; - } - } - for (node.startIncomingEdgeIterator(); - node.hasMoreIncomingEdges();) { - passed &= edges.contains(node.nextIncomingEdge()); - } - if (outgoing < 1) { - if (!isFinalNode(node)) { - System.out.println("No outgoing edge: " + node); - passed = false; - } - } - for (node.startOutgoingEdgeIterator(); - node.hasMoreOutgoingEdges();) { - passed &= edges.contains(node.nextOutgoingEdge()); - } - } - for (startEdgeIterator(); - hasMoreEdges();) { - Edge edge = nextEdge(); - passed &= edge.validate(); - passed &= nodes.contains(edge.getSource()); - passed &= nodes.contains(edge.getDestination()); - } - return passed; - } - - - /** Prints out the graph. For debugging purposes. */ - public void printGraph() { - for (startNodeIterator(); - hasMoreNodes();) { - Node node = nextNode(); - if (isInitialNode(node)) { - System.out.println("Initial Node"); - } - if (isFinalNode(node)) { - System.out.println("Final Node"); - } - System.out.println(node); - node.print(); - } - for (startEdgeIterator(); - hasMoreEdges();) { - Edge edge = nextEdge(); - System.out.println(edge); - edge.print(); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Learner.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Learner.java deleted file mode 100755 index 3b510678..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Learner.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.trainer; - -import edu.cmu.sphinx.linguist.acoustic.tiedstate.trainer.TrainerScore; -import edu.cmu.sphinx.util.props.Configurable; - -import java.io.IOException; - - -/** Provides mechanisms for computing statistics given a set of states and input data. */ -public interface Learner extends Configurable { - - /** Starts the Learner. */ - public void start(); - - - /** Stops the Learner. */ - public void stop(); - - - /** - * Sets the learner to use a utterance. - * - * @param utterance the utterance - * @throws IOException if exception occurred - */ - public void setUtterance(Utterance utterance) throws IOException; - - - /** - * Initializes computation for current utterance and utterance graph. - * - * @param utterance the current utterance - * @param graph the current utterance graph - * @throws IOException if exception occurred - */ - public void initializeComputation(Utterance utterance, - UtteranceGraph graph) throws IOException; - - - /** - * Implements the setGraph method. Since the flat initializer does not need a graph, this method produces an error. - * - * @param graph the graph - */ - public void setGraph(UtteranceGraph graph); - - - /** @return posterior probabilities for a given state. */ - public TrainerScore[] getScore(); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Node.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Node.java deleted file mode 100755 index 3c74bb2e..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Node.java +++ /dev/null @@ -1,249 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.trainer; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -/** Defines the basic Node for any graph A generic graph Node must have a list of outgoing edges and an identifier. */ -public class Node { - - // Do we really need nodeId and object? Maybe we can use object as - // the id when we assign a string to it. - /** The identifier for this Node */ - private String nodeId; - - /** Object contained in this mode. Typically, an HMM state, a senone. */ - private Object object; - - /** The type of node, such as a dummy node or node represented by a specific type of symbol */ - private NodeType nodeType; - - /** The list of incoming edges to this node. */ - private List incomingEdges; - private Iterator incomingEdgeIterator; - - /** The list of outgoing edges from this node */ - private List outgoingEdges; - private Iterator outgoingEdgeIterator; - - - /** - * Constructor for node when a type and symbol are given. - * - * @param nodeType the type of node. - * @param nodeSymbol the symbol for this type. - */ - Node(NodeType nodeType, String nodeSymbol) { - incomingEdges = new ArrayList(); - outgoingEdges = new ArrayList(); - this.nodeId = nodeSymbol; - this.nodeType = nodeType; - this.object = null; - } - - - /** - * Constructor for node when a type only is given. - * - * @param nodeType the type of node. - */ - Node(NodeType nodeType) { - this(nodeType, null); - } - - - /** - * Assign an object to this node. - * - * @param object the object to assign - */ - public void setObject(Object object) { - this.object = object; - } - - - /** - * Retrieves the object associated with this node. - * - * @return the object - */ - public Object getObject() { - return object; - } - - - /** - * Method to add an incoming edge. Note that we do not check if the destination node of the incoming edge is - * identical to this node - * - * @param edge the incoming edge - */ - public void addIncomingEdge(Edge edge) { - incomingEdges.add(edge); - } - - - /** Start iterator for incoming edges. */ - public void startIncomingEdgeIterator() { - incomingEdgeIterator = incomingEdges.iterator(); - } - - - /** - * Whether there are more incoming edges. - * - * @return if true, there are more incoming edges - */ - public boolean hasMoreIncomingEdges() { - return incomingEdgeIterator.hasNext(); - } - - - /** - * Returns the next incoming edge to this node. - * - * @return the next edge incoming edge - */ - public Edge nextIncomingEdge() { - return incomingEdgeIterator.next(); - } - - - /** - * Returns the size of the incoming edges list. - * - * @return the number of incoming edges - */ - public int incomingEdgesSize() { - return incomingEdges.size(); - } - - - /** - * Method to add an outgoing edge. Note that we do not check if the source node of the outgoing edge is identical to - * this node - * - * @param edge the outgoing edge - */ - public void addOutgoingEdge(Edge edge) { - outgoingEdges.add(edge); - } - - - /** Start iterator for outgoing edges. */ - public void startOutgoingEdgeIterator() { - outgoingEdgeIterator = outgoingEdges.iterator(); - } - - - /** - * Whether there are more outgoing edges. - * - * @return if true, there are more outgoing edges - */ - public boolean hasMoreOutgoingEdges() { - return outgoingEdgeIterator.hasNext(); - } - - - /** - * Returns the next outgoing edge from this node. - * - * @return the next outgoing edge - */ - public Edge nextOutgoingEdge() { - return outgoingEdgeIterator.next(); - } - - - /** - * Returns the size of the outgoing edges list. - * - * @return the number of outgoing edges - */ - public int outgoingEdgesSize() { - return outgoingEdges.size(); - } - - - /** - * Method to check the type of a node. - * - * @param type to compare to - * @return if true, this node is of the type specified - */ - public boolean isType(String type) { - return (type.equals(this.nodeType.toString())); - } - - - /** - * Returns type of a node. - * - * @return returns the type of this node - */ - public NodeType getType() { - return nodeType; - } - - - /** - * Returns the ID of a node. Typically, a string representing a word or a phoneme. - * - * @return this node's ID - */ - public String getID() { - return nodeId; - } - - - /** - * Validade node. Checks if all nodes have at least one incoming and one outgoing edge. - * - * @return if true, node passed validation - */ - public boolean validate() { - boolean passed = true; - - if (isType("WORD") || isType("PHONE")) { - if (nodeId == null) { - System.out.println("Content null in a WORD node."); - passed = false; - } - } - if ((incomingEdgesSize() == 0) && (outgoingEdgesSize() == 0)) { - System.out.println("Node not connected anywhere."); - passed = false; - } - return passed; - } - - - /** Prints out this node. */ - public void print() { - System.out.print("ID: " + nodeId); - System.out.print(" Type: " + nodeType + " | "); - for (startIncomingEdgeIterator(); - hasMoreIncomingEdges();) { - System.out.print(nextIncomingEdge() + " "); - } - System.out.print(" | "); - for (startOutgoingEdgeIterator(); - hasMoreOutgoingEdges();) { - System.out.print(nextOutgoingEdge() + " "); - } - System.out.println(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/NodeType.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/NodeType.java deleted file mode 100755 index f98c2ebe..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/NodeType.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - - -package edu.cmu.sphinx.trainer; - -/** Indicates node types such as beginning, end, containing word etc. */ -public class NodeType { - - private String name; - - /** NodeType to indicate dummy node. */ - public static final NodeType DUMMY = new NodeType("DUMMY"); - - /** NodeType to indicate node containing silence with loopback. */ - public static final NodeType SILENCE_WITH_LOOPBACK = - new NodeType("SILENCE_WITH_LOOPBACK"); - - /** NodeType to indicate the end of a speech utterance. */ - public static final NodeType UTTERANCE_END = new NodeType("UTTERANCE_END"); - - /** NodeType to indicate the start of am utterance. */ - public static final NodeType UTTERANCE_BEGIN = - new NodeType("UTTERANCE_BEGIN"); - - /** NodeType to indicate the node contains a word. */ - public static final NodeType WORD = new NodeType("WORD"); - - /** NodeType to indicate the node contains a word. */ - public static final NodeType PHONE = new NodeType("PHONE"); - - /** NodeType to indicate the node contains a word. */ - public static final NodeType STATE = new NodeType("STATE"); - - - /** Constructs a NodeType with the given name. - * @param name of the node type - */ - protected NodeType(String name) { - this.name = name; - } - - - /** - * Returns true if the given NodeType is equal to this NodeType. - * - * @param nodeType the NodeType to compare - * @return true if they are the same, false otherwise - */ - public boolean equals(NodeType nodeType) { - if (nodeType != null) { - return toString().equals(nodeType.toString()); - } else { - return false; - } - } - - - /** - * Returns the name of this NodeType. - * - * @return the name of this NodeType. - */ - @Override - public String toString() { - return name; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/SimpleControlFile.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/SimpleControlFile.java deleted file mode 100755 index 9ebef69d..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/SimpleControlFile.java +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.trainer; - -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.S4Component; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.logging.Logger; - -/** Provides mechanisms for accessing a next utterance's file name and transcription. */ -public class SimpleControlFile implements ControlFile { - - @S4Component(type = TrainerDictionary.class) - public static final String DICTIONARY = "dictionary"; - private TrainerDictionary dictionary; - - private String audioFile; // the audio file - private String transcriptFile; // the transcript file - private String wordSeparator; // the word separator - private int currentPartition; // the current partition - private int numberOfPartitions; // total number of partitions - private Iterator audioFileIterator; // iterator for the control file - private Iterator transcriptFileIterator; // iterator for the transcriptions - private List audioFileList; // list containing the audio files - private List transcriptFileList; // list containing the transcriptions - - - /* - * The logger for this class - */ - private Logger logger; - - - public void newProperties(PropertySheet ps) throws PropertyException { - logger = ps.getLogger(); - this.dictionary = (TrainerDictionary)ps.getComponent(DICTIONARY); - try { - dictionary.allocate(); - } catch (IOException e) { - throw new PropertyException(e); - } - - this.audioFile = ps.getString(PROP_AUDIO_FILE); - this.transcriptFile = ps.getString(PROP_TRANSCRIPT_FILE); - this.currentPartition = ps.getInt(PROP_WHICH_BATCH); - this.numberOfPartitions = ps.getInt(PROP_TOTAL_BATCHES); - - - logger.info("Audio control file: " + this.audioFile); - logger.info("Transcript file: " + this.transcriptFile); - this.wordSeparator = " \t\n\r\f"; // the white spaces - logger.info("Processing part " + this.currentPartition + - " of " + this.numberOfPartitions); - try { - this.audioFileList = getLines(audioFile); - } catch (IOException ioe) { - throw new Error("IOE: Can't open file " + audioFile, ioe); - } - try { - this.transcriptFileList = getLines(transcriptFile); - } catch (IOException ioe) { - throw new Error("IOE: Can't open file " + transcriptFile, ioe); - } - } - - - /** Gets an iterator for utterances. */ - public void startUtteranceIterator() { - audioFileIterator = audioFileList.iterator(); - transcriptFileIterator = transcriptFileList.iterator(); - } - - - /** - * Returns whether there is another utterance. - * - * @return true if there is another utterance. - */ - public boolean hasMoreUtterances() { - // Should throw exception or break if one has next and the - // other doesn't. - return (audioFileIterator.hasNext() - && transcriptFileIterator.hasNext()); - } - - - /** - * Gets the next utterance. - * - * @return the next utterance. - */ - public Utterance nextUtterance() { - logger.fine("processing ext utterance"); - - String utteranceLine = audioFileIterator.next() + ".mfc"; - Utterance utterance = new SimpleUtterance(utteranceLine); - String utteranceFilename = - utteranceLine.replaceFirst("^.*/", "").replaceFirst("\\..*$", ""); - String transcriptLine = transcriptFileIterator.next(); - // Finds out if the audio file name is part of the transcript line - assert transcriptLine.matches(".*[ \t]\\(" + utteranceFilename + "\\)$") : - "File name in transcript \"" + transcriptLine + - "\" and control file \"" + utteranceFilename + - "\" have to match."; - // Removes the filename from the transcript line. - // The transcript line is of the form: - // She washed her dark suit (st002) - String transcript = transcriptLine.replaceFirst("[ \t]\\(.*\\)$", ""); - utterance.add(transcript, dictionary, false, wordSeparator); - return utterance; - } - - // Next method copied from decoder.BatchDecoder - - - /** - * Gets the set of lines from the file. - * - * @param file the name of the file - * @throws IOException if error occurs while reading file - */ - private List getLines(String file) throws IOException { - List list = new ArrayList(); - BufferedReader reader - = new BufferedReader(new FileReader(file)); - - String line = null; - - while ((line = reader.readLine()) != null) { - list.add(line); - } - reader.close(); - - if (numberOfPartitions > 1) { - int linesPerBatch = list.size() / numberOfPartitions; - if (linesPerBatch < 1) { - linesPerBatch = 1; - } - if (currentPartition >= numberOfPartitions) { - currentPartition = numberOfPartitions - 1; - } - int startLine = currentPartition * linesPerBatch; - // last batch needs to get all remaining lines - if (currentPartition == (numberOfPartitions - 1)) { - list = list.subList(startLine, list.size()); - } else { - list = list.subList(startLine, startLine + - linesPerBatch); - } - } - return list; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/SimpleTrainManager.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/SimpleTrainManager.java deleted file mode 100755 index 6d36fad9..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/SimpleTrainManager.java +++ /dev/null @@ -1,258 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.trainer; - -import edu.cmu.sphinx.linguist.acoustic.AcousticModel; -import edu.cmu.sphinx.linguist.acoustic.UnitManager; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.trainer.TrainerAcousticModel; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.trainer.TrainerScore; -import edu.cmu.sphinx.util.Utilities; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Component; -import edu.cmu.sphinx.util.props.S4Boolean; -import edu.cmu.sphinx.util.props.S4ComponentList; - -import java.io.IOException; -import java.util.List; - - -/** This is a dummy implementation of a TrainManager. */ -public class SimpleTrainManager implements TrainManager { - - @S4Component(type = ControlFile.class) - public static final String CONTROL_FILE = "control"; - private ControlFile controlFile; - - private boolean dumpMemoryInfo; - - @S4Component(type = Learner.class) - public static final String LEARNER = "learner"; - private Learner learner; - - @S4Component(type = Learner.class) - public static final String INIT_LEARNER = "initLearner"; - private Learner initLearner; - - @S4Component(type = UnitManager.class) - public static final String UNIT_MANAGER = "unitManager"; - private UnitManager unitManager; - - @S4ComponentList(type = TrainerAcousticModel.class) - public static final String AM_COLLECTION = "models"; - private List acousticModels; - - /** - * The property for the boolean property that controls whether or not the recognizer will display detailed - * memory information while it is running. The default value is true. - */ - @S4Boolean(defaultValue = false) - public final static String DUMP_MEMORY_INFO = "dumpMemoryInfo"; - - private int maxIteration; - private float minimumImprovement; - - - public void newProperties(PropertySheet ps) throws PropertyException { - dumpMemoryInfo = ps.getBoolean(DUMP_MEMORY_INFO); - learner = (Learner) ps.getComponent(LEARNER); - controlFile = (ControlFile) ps.getComponent(CONTROL_FILE); - initLearner = (Learner) ps.getComponent(INIT_LEARNER); - minimumImprovement = ps.getFloat(PROP_MINIMUM_IMPROVEMENT); - maxIteration = ps.getInt(PROP_MAXIMUM_ITERATION); - acousticModels = ps.getComponentList(AM_COLLECTION, TrainerAcousticModel.class); - unitManager = (UnitManager)ps.getComponent(UNIT_MANAGER); - } - - - /** Do the train. */ - public void train() { - assert controlFile != null; - for (controlFile.startUtteranceIterator(); - controlFile.hasMoreUtterances();) { - Utterance utterance = controlFile.nextUtterance(); - System.out.println(utterance); - for (utterance.startTranscriptIterator(); - utterance.hasMoreTranscripts();) { - System.out.println(utterance.nextTranscript()); - } - } - } - - - /** - * Copy the model. - *

    - * This method copies to model set, possibly to a new location and new format. This is useful if one wants to - * convert from binary to ascii and vice versa, or from a directory structure to a JAR file. If only one model is - * used, then name can be null. - * - * @param context this TrainManager's context - * @throws IOException if an error occurs while loading the data - */ - public void copyModels(String context) throws IOException { - loadModels(context); - saveModels(context); - } - - - /** - * Saves the acoustic models. - * - * @param context the context of this TrainManager - * @throws IOException if an error occurs while loading the data - */ - public void saveModels(String context) throws IOException { - if (1 == acousticModels.size()) { - acousticModels.get(0).save(null); - } else { - for (AcousticModel model : acousticModels) { - if (model instanceof TrainerAcousticModel) { - TrainerAcousticModel tmodel = - (TrainerAcousticModel) model; - tmodel.save(model.getName()); - } - } - } - } - - - /** - * Loads the acoustic models. - * - * @param context the context of this TrainManager - */ - private void loadModels(String context) throws IOException { - dumpMemoryInfo("TrainManager start"); - - for (TrainerAcousticModel model : acousticModels) { - model.load(); - } - dumpMemoryInfo("acoustic model"); - - } - - - /** - * Initializes the acoustic models. - * - * @param context the context of this TrainManager - */ - public void initializeModels(String context) throws IOException { - TrainerScore score[]; - - dumpMemoryInfo("TrainManager start"); - - for (TrainerAcousticModel model : acousticModels) { - - for (controlFile.startUtteranceIterator(); - controlFile.hasMoreUtterances();) { - Utterance utterance = controlFile.nextUtterance(); - initLearner.setUtterance(utterance); - while ((score = initLearner.getScore()) != null) { - assert score.length == 1; - model.accumulate(0, score); - } - } - - // normalize() has a return value, but we can ignore it here. - model.normalize(); - } - dumpMemoryInfo("acoustic model"); - } - - - /** - * Trains context independent models. If the initialization stage was skipped, it loads models from files, - * automatically. - * - * @param context the context of this train manager. - * @throws IOException if IO went wrong - */ - public void trainContextIndependentModels(String context) - throws IOException { - UtteranceGraph uttGraph; - TrainerScore[] score; - TrainerScore[] nextScore; - - // If initialization was performed, then learner should not be - // null. Otherwise, we need to load the models. - if (learner == null) { - loadModels(context); - } - - - dumpMemoryInfo("TrainManager start"); - - for (TrainerAcousticModel model : acousticModels) { - float logLikelihood; - float lastLogLikelihood = Float.MAX_VALUE; - float relativeImprovement = 100.0f; - for (int iteration = 0; - (iteration < maxIteration) && - (relativeImprovement > minimumImprovement); - iteration++) { - System.out.println("Iteration: " + iteration); - model.resetBuffers(); - for (controlFile.startUtteranceIterator(); - controlFile.hasMoreUtterances();) { - Utterance utterance = controlFile.nextUtterance(); - uttGraph = - new UtteranceHMMGraph(context, utterance, model, unitManager); - learner.setUtterance(utterance); - learner.setGraph(uttGraph); - nextScore = null; - while ((score = learner.getScore()) != null) { - for (int i = 0; i < score.length; i++) { - if (i > 0) { - model.accumulate(i, score, nextScore); - } else { - model.accumulate(i, score); - } - } - nextScore = score; - } - model.updateLogLikelihood(); - } - logLikelihood = model.normalize(); - System.out.println("Loglikelihood: " + logLikelihood); - saveModels(context); - if (iteration > 0) { - if (lastLogLikelihood != 0) { - relativeImprovement = - (logLikelihood - lastLogLikelihood) / - lastLogLikelihood * 100.0f; - } else if (lastLogLikelihood == logLikelihood) { - relativeImprovement = 0; - } - System.out.println("Finished iteration: " + iteration + - " - Improvement: " + - relativeImprovement); - } - lastLogLikelihood = logLikelihood; - } - } - } - - - /** - * Conditional dumps out memory information - * - * @param what an additional info string - */ - private void dumpMemoryInfo(String what) { - if (dumpMemoryInfo) { - Utilities.dumpMemoryInfo(what); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/SimpleTranscript.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/SimpleTranscript.java deleted file mode 100755 index 4883c313..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/SimpleTranscript.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.trainer; - - -import edu.cmu.sphinx.linguist.dictionary.Dictionary; - -import java.util.StringTokenizer; - -/** Provides mechanisms for accessing a transcription. */ -public class SimpleTranscript implements Transcript { - - private String transcript; // the transcript - private Dictionary dictionary; // the dictionary - boolean isExact; // is exact transcription? - private boolean wasInitialized; // Has this object been initialized? - private StringTokenizer words; // string tokenizer for current transcription. - private String wordSeparator; // word separators - - - /** - * Constructor for the SimpleTranscript. - * - * @param transcript this transcript's text - */ - public SimpleTranscript(String transcript) { - if (!wasInitialized) { - initialize(null, false); - } - this.transcript = transcript; - } - - - /** - * Constructor for the SimpleTranscript. - * - * @param dictionary this transcript's dictionary - * @param isExact whether the transcription is exact - */ - public SimpleTranscript(Dictionary dictionary, boolean isExact) { - initialize(dictionary, isExact); - } - - - /** - * Constructor for the SimpleTranscript. - * - * @param transcript this transcript's text - * @param dictionary this transcript's dictionary - * @param isExact whether the transcription is exact - * @param wordSeparator string containing the word separator characters. - */ - public SimpleTranscript(String transcript, Dictionary dictionary, - boolean isExact, String wordSeparator) { - this.transcript = transcript; - this.dictionary = dictionary; - this.isExact = isExact; - this.wordSeparator = wordSeparator; - } - - - /** - * Constructor for the SimpleTranscript. - * - * @param transcript this transcript's text - * @param dictionary this transcript's dictionary - * @param isExact whether the transcription is exact - */ - public SimpleTranscript(String transcript, Dictionary dictionary, - boolean isExact) { - this.transcript = transcript; - this.dictionary = dictionary; - this.isExact = isExact; - this.wordSeparator = " \t\n\r\f"; // the white spaces - } - - - /** - * Initializes the SimpleTranscript with dictionary and exact flag. - * - * @param dictionary this transcript's dictionary - * @param isExact whether the transcription is exact - */ - public void initialize(Dictionary dictionary, boolean isExact) { - this.dictionary = dictionary; - this.isExact = isExact; - wasInitialized = true; - } - - - /** - * Gets the transcription. - * - * @return current transcription string. - */ - public String getTranscriptText() { - return transcript; - } - - - /** - * Gets the transcript's dictionary. - * - * @return current dictionary. - */ - public Dictionary getDictionary() { - return dictionary; - } - - - /** - * Returns whether the transcript is exact. - * - * @return true is transcription is exact (has been forced aligned) - */ - public boolean isExact() { - return isExact; - } - - - /** - * Get the number of words in the transcription. - * - * @return number of words in the transcription. - */ - public int numberOfWords() { - return words.countTokens(); - } - - - /** Start the iterator for the words in the transcription. */ - public void startWordIterator() { - words = new StringTokenizer(transcript, wordSeparator); - } - - - /** - * Return whether there are more words. - * - * @return whether there are more words. - */ - public boolean hasMoreWords() { - return words.hasMoreTokens(); - } - - - /** - * Returns the next word. - * - * @return next word in the transcription. - */ - public String nextWord() { - return words.nextToken(); - } - - - /** - * Returns a string representation of this transcript. - * - * @return the string representation - */ - @Override - public String toString() { - String result = ""; - - result = "Dict: " + dictionary + " : transcript "; - if (isExact) { - result += "IS exact: "; - } else { - result += "is NOT exact: "; - } - result += transcript; - return result; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/SimpleUtterance.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/SimpleUtterance.java deleted file mode 100755 index 4c545e1a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/SimpleUtterance.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.trainer; - -import edu.cmu.sphinx.linguist.dictionary.Dictionary; - -import java.util.Collection; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.logging.Logger; - -/** Provides mechanism for handling a simple utterance. */ -public class SimpleUtterance implements Utterance { - - private String utteranceID; - private Collection transcriptSet; - private Iterator transcriptIterator; - - /* - * The logger for this class - */ - private static Logger logger = - Logger.getLogger("edu.cmu.sphinx.trainer.SimpleUtterance"); - - - /** Constructor for class SimpleUtterance. */ - public SimpleUtterance() { - transcriptSet = new LinkedList(); - } - - - /** - * Constructor for class SimpleUtterance. - * - * @param utteranceID the utterance ID, usually a file name. - */ - public SimpleUtterance(String utteranceID) { - logger.info("Utterance ID: " + utteranceID); - this.utteranceID = utteranceID; - this.transcriptSet = new LinkedList(); - } - - - /** - * Add transcript with dictionary and exact flag. - * - * @param transcript the transcript - * @param dictionary the default dictionary name - * @param isExact the default flag - * @param wordSeparator the word separator characters - */ - public void add(String transcript, Dictionary dictionary, - boolean isExact, String wordSeparator) { - logger.info("Transcript: " + transcript); - transcriptSet.add(new SimpleTranscript(transcript, dictionary, - isExact, wordSeparator)); - } - - - /** - * Starts the transcript iterator. - */ - public void startTranscriptIterator() { - transcriptIterator = transcriptSet.iterator(); - } - - - /** - * Returns whether there is a next transcript. - * - * @return true if there are more transcrips. - */ - public boolean hasMoreTranscripts() { - return transcriptIterator.hasNext(); - } - - - /** - * Gets next transcript. - * - * @return the next Trasncript. - */ - public Transcript nextTranscript() { - return transcriptIterator.next(); - } - - - /** - * Returns a string representation of this utterance. - * - * @return the string representation. - */ - @Override - public String toString() { - return utteranceID; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Stage.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Stage.java deleted file mode 100755 index 4a9d9a13..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Stage.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.trainer; - - -/** - * Indicates stages during training. The numbers prepended to the names indicate the order in which they are performed. - * Consecutive numbers were avoided to allow for future expansion of alternative stages. The value of the numbers has no - * bearing on the importance or duration of each stage, it is just an ordering method. - */ -public class Stage { - - private String name; - - /** Initialization stage. */ - public static final Stage _00_INITIALIZATION = - new Stage("_00_INITIALIZATION"); - - /** Context independent model training stage. */ - public static final Stage _10_CI_TRAIN = new Stage("_10_CI_TRAIN"); - - /** Untied context dependent model training stage. */ - public static final Stage _20_UNTIED_CD_TRAIN = - new Stage("_20_UNTIED_CD_TRAIN"); - - /** State pruning stage. */ - public static final Stage _30_STATE_PRUNING = - new Stage("_30_STATE_PRUNING"); - - /** Tied context dependent model training stage. */ - public static final Stage _40_TIED_CD_TRAIN = - new Stage("_40_TIED_CD_TRAIN"); - - /** Copy models, possibly changing format. */ - public static final Stage _90_CP_MODEL = - new Stage("_90_CP_MODEL"); - - - /** Constructs a Stage with the given name. - * @param name the name to use - */ - protected Stage(String name) { - this.name = name; - } - - - /** - * Returns true if the given Stage is equal to this Stage. - * - * @param stage the Stage to compare - * @return true if they are the same, false otherwise - */ - public boolean equals(Stage stage) { - if (stage != null) { - return toString().equals(stage.toString()); - } else { - return false; - } - } - - - /** - * Returns true if the given String is equal to this Stage's name. - * - * @param stage the Stage to compare - * @return true if they are the same, false otherwise - */ - public boolean equals(String stage) { - if (stage != null) { - return toString().equals(stage); - } else { - return false; - } - } - - - /** - * Returns the name of this Stage. - * - * @return the name of this Stage. - */ - @Override - public String toString() { - return name; - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/TrainManager.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/TrainManager.java deleted file mode 100755 index 18d0cf7d..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/TrainManager.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.trainer; - -import edu.cmu.sphinx.util.props.Configurable; -import edu.cmu.sphinx.util.props.S4Double; -import edu.cmu.sphinx.util.props.S4Integer; - -import java.io.IOException; - -/** Manages inputs and outputs to the other trainer classes. */ -public interface TrainManager extends Configurable { - - /** The minimum relative improvement of the log likelihood associated with the training data. */ - @S4Double(defaultValue = 0.2f) - public final static String PROP_MINIMUM_IMPROVEMENT = "minimumImprovement"; - - /** The maximum number of iterations. */ - @S4Integer(defaultValue = 15) - public final static String PROP_MAXIMUM_ITERATION = "maximumIteration"; - - - /** Do the train. */ - public void train(); - - /** - * Saves the acoustic models. - * - * @param context the context of this TrainManager - * @throws IOException if an error occurs while loading the data - */ - void saveModels(String context) throws IOException; - - - /** - * Copy the model. - *

    - * This method copies to model set, possibly to a new location and new format. This is useful if one wants to - * convert from binary to ascii and vice versa, or from a directory structure to a JAR file. If only one model is - * used, then name can be null. - * - * @param context this TrainManager's context - * @throws IOException if an error occurs while loading the data - */ - void copyModels(String context) throws IOException; - - - /** - * Initializes the acoustic models. - * - * @param context the context of this TrainManager - * @throws IOException if something went wrong - */ - void initializeModels(String context) throws IOException; - - - /** - * Trains context independent models. If the initialization stage was skipped, it loads models from files, - * automatically. - * - * @param context the context of this train manager. - * @throws IOException if something went wrong - */ - void trainContextIndependentModels(String context) throws IOException; -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Trainer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Trainer.java deleted file mode 100755 index f6726303..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Trainer.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.trainer; - - -import java.io.IOException; -import java.util.*; - -import edu.cmu.sphinx.util.props.Configurable; -import edu.cmu.sphinx.util.props.ConfigurationManager; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Component; -import edu.cmu.sphinx.util.props.S4String; - - -/** - * Trains models given a set of audio files. - *

    - * At this point, a very simple file that helps us debug the code. - */ -public class Trainer implements Configurable { - - @S4Component(type = TrainManager.class) - public static final String TRAIN_MANAGER = "trainManager"; - - /** The property for the initial trainer stage to be processed. */ - @S4String(defaultValue = "_00_INITIALIZATION") - public final static String PROP_INITIAL_STAGE = "initialStage"; - - /** The property for the final trainer stage to be processed. */ - @S4String(defaultValue = "_40_TIED_CD_TRAIN") - public final static String PROP_FINAL_STAGE = "finalStage"; - - private String initialStage; - private String finalStage; - private boolean isStageActive; - private List StageList = new LinkedList(); - private Set StageNames = new HashSet(); - - private TrainManager trainManager; - - public void newProperties(PropertySheet ps) throws PropertyException { - trainManager = (TrainManager) ps.getComponent(TRAIN_MANAGER); - - initialStage = ps.getString(PROP_INITIAL_STAGE); - finalStage = ps.getString(PROP_FINAL_STAGE); - - addStage(Stage._00_INITIALIZATION); - addStage(Stage._10_CI_TRAIN); - addStage(Stage._20_UNTIED_CD_TRAIN); - addStage(Stage._30_STATE_PRUNING); - addStage(Stage._40_TIED_CD_TRAIN); - addStage(Stage._90_CP_MODEL); - } - - - /** - * Add Stage to a list of stages. - * - * @param stage the Stage to add - */ - private void addStage(Stage stage) { - StageList.add(stage); - StageNames.add(stage.toString()); - } - - - /** - * Process this stage. - * - * @param context this trainer's context - */ - private void processStages(String context) { - if (!(StageNames.contains(initialStage) && - StageNames.contains(finalStage))) { - return; - } - for (Stage stage : StageList) { - if (!isStageActive) { - if (initialStage.equals(stage.toString())) { - isStageActive = true; - } - } - if (isStageActive) { - /* - * Not sure of an elegant way to do it. For each - * stage, it should call a different method. Switch - * would be a good solution, but it works with int, - * and stage is of type Stage. - * - * run(); - */ - try { - if (stage.equals(Stage._00_INITIALIZATION)) { - System.out.println("00 - Initializing"); - trainManager.initializeModels(context); - System.out.println("Saving"); - trainManager.saveModels(context); - } else if (stage.equals(Stage._10_CI_TRAIN)) { - System.out.println("01 - CI train"); - trainManager.trainContextIndependentModels(context); - System.out.println("Saving"); - trainManager.saveModels(context); - } else if (stage.equals(Stage._20_UNTIED_CD_TRAIN)) { - System.out.println("02 - Untied CD train"); - } else if (stage.equals(Stage._30_STATE_PRUNING)) { - System.out.println("03 - State pruning"); - } else if (stage.equals(Stage._40_TIED_CD_TRAIN)) { - System.out.println("04 - Tied CD train"); - } else if (stage.equals(Stage._90_CP_MODEL)) { - System.out.println("Copying"); - trainManager.copyModels(context); - } else { - assert false : "stage not implemented"; - } - } catch (IOException ioe) { - ioe.printStackTrace(); - throw new Error("IOE: Can't finish trainer " + ioe, ioe); - } - - if (finalStage.equals(stage.toString())) { - isStageActive = false; - } - } - } - } - - - /** - * Main method of this Trainer. - * - * @param argv argv[0] : XML configuration file - */ - public static void main(String[] argv) { - - if (argv.length > 1) { - System.out.println - ("Usage: Trainer [config]"); - System.exit(1); - } - String context = "trainer"; - - if (argv.length == 1) { - String configFile = argv[0]; - - ConfigurationManager cm = new ConfigurationManager(configFile); - Trainer trainer = (Trainer)cm.lookup (context); - trainer.processStages(context); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/TrainerDictionary.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/TrainerDictionary.java deleted file mode 100755 index 5680429c..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/TrainerDictionary.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.trainer; - -import edu.cmu.sphinx.linguist.acoustic.Unit; -import edu.cmu.sphinx.linguist.dictionary.TextDictionary; -import edu.cmu.sphinx.linguist.dictionary.Pronunciation; - -/** Dummy trainer dictionary. */ -public class TrainerDictionary extends TextDictionary { - - static final String UTTERANCE_BEGIN_SYMBOL = ""; - static final String UTTERANCE_END_SYMBOL = ""; - static final String SILENCE_SYMBOL = "SIL"; - - - /** - * Gets a word pronunciation graph. Dummy initial and final states optional. - * - * @param word the word - * @param hasDummy if true, the graph will have dummy initial and final states - * @return the graph - */ - public Graph getWordGraph(String word, boolean hasDummy) { - Graph wordGraph = new Graph(); - Pronunciation[] pronunciations; - Unit[] units; - Node prevNode; - Node wordNode = null; - int pronunciationID = 0; - String wordWithoutParentheses = word.replaceFirst("\\(.*\\)", ""); - - if (word.equals(wordWithoutParentheses)) { - pronunciationID = 0; - } else { - String number = - word.replaceFirst(".*\\(", "").replaceFirst("\\)", ""); - try { - pronunciationID = Integer.parseInt(number); - } catch (NumberFormatException nfe) { - throw new Error("Word with invalid pronunciation ID", nfe); - } - } - pronunciations - = getWord(wordWithoutParentheses).getPronunciations(); - if (pronunciations == null) { - System.out.println("Pronunciation not found for word " + - wordWithoutParentheses); - return null; - } - if (pronunciationID >= pronunciations.length) { - System.out.println("Dictionary has only " + - pronunciations.length + - " for word " + word); - return null; - } - units = pronunciations[pronunciationID].getUnits(); - assert units != null : "units is empty: problem with dictionary?"; - - // Now, create the graph, where each node contains a single unit - if (hasDummy) { - Node initialNode = new Node(NodeType.DUMMY); - wordGraph.addNode(initialNode); - wordGraph.setInitialNode(initialNode); - prevNode = initialNode; - } else { - prevNode = null; - } - for (Unit unit : units) { - // create a new node for the next unit - wordNode = new Node(NodeType.PHONE, unit.getName()); - if (prevNode == null) { - wordGraph.addNode(wordNode); - wordGraph.setInitialNode(wordNode); - } else { - // Link the new node into the graph - wordGraph.linkNodes(prevNode, wordNode); - } - prevNode = wordNode; - } - // All words are done. Just add the final node - if (hasDummy) { - wordNode = new Node(NodeType.DUMMY); - wordGraph.linkNodes(prevNode, wordNode); - } - assert wordNode != null; - wordGraph.setFinalNode(wordNode); - - return wordGraph; - } - - - /** Prints out dictionary as a string. */ - @Override - public String toString() { - return "DEFAULT"; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/TrainerLink.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/TrainerLink.java deleted file mode 100755 index 328d99f1..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/TrainerLink.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.trainer; - -/** Provides mechanisms for handling tokens in the trainer. */ -public class TrainerLink { - - private TrainerToken source; - private TrainerToken destination; - private Edge transition; - - - public TrainerLink(Edge transition, TrainerToken source, TrainerToken destination) { - this.source = source; - this.transition = transition; - this.destination = destination; - } - - - public TrainerToken getSource() { - return source; - } - - - public TrainerToken getDestination() { - return destination; - } - - - public Edge getTransition() { - return transition; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/TrainerToken.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/TrainerToken.java deleted file mode 100755 index 2b93b1d4..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/TrainerToken.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.trainer; - -/** Provides mechanisms for handling tokens in the trainer. */ -public class TrainerToken /* extends Token */ { - - // private Collection linkToParent; - // private Collection linkToChild; - // private float alpha; - // private float beta; - // - // private Node state; - // private boolean isEmitting; - // private Data dataVector; - // private int timeStamp; -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Transcript.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Transcript.java deleted file mode 100755 index 0c79fbff..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Transcript.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.trainer; - -import edu.cmu.sphinx.linguist.dictionary.Dictionary; - -/** Provides mechanisms for accessing an utterance's transcription. */ -public interface Transcript { - - /** @return the transcript's text */ - public String getTranscriptText(); - - - /** @return the transcript's dictionary. */ - public Dictionary getDictionary(); - - - /** @return whether the transcript is exact. */ - public boolean isExact(); - - - /** @return the number of words in the transcription. */ - public int numberOfWords(); - - - /** Start the iterator for the words in the transcription. */ - public void startWordIterator(); - - - /** @return whether there are more words. */ - public boolean hasMoreWords(); - - - /** @return the next word. */ - public String nextWord(); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/TranscriptGraph.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/TranscriptGraph.java deleted file mode 100755 index 6a7700af..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/TranscriptGraph.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.trainer; - - -/** Interface to the TranscriptGraph, a graph of a transcript */ -public interface TranscriptGraph { - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/TranscriptHMMGraph.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/TranscriptHMMGraph.java deleted file mode 100755 index 47da2af3..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/TranscriptHMMGraph.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.trainer; - -import edu.cmu.sphinx.linguist.acoustic.AcousticModel; -import edu.cmu.sphinx.linguist.acoustic.UnitManager; - -/** Defines the Transcript Graph */ -public class TranscriptHMMGraph extends Graph implements TranscriptGraph { - - public TranscriptHMMGraph(String context, Transcript transcript, - AcousticModel acousticModel, UnitManager unitManager) { - super(); - BuildTranscriptHMM builder = - new BuildTranscriptHMM(context, transcript, acousticModel, unitManager); - copyGraph(builder.getGraph()); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Utterance.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Utterance.java deleted file mode 100755 index a045337b..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/Utterance.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.trainer; - -import edu.cmu.sphinx.linguist.dictionary.Dictionary; - -/** Provides mechanisms for accessing an utterance. */ -public interface Utterance { - - /** - * Add transcript with dictionary and exact flag. - * - * @param transcript the transcript - * @param dictionary the default dictionary name - * @param isExact the default flag - * @param wordSeparator the word separator characters - */ - public void add(String transcript, Dictionary dictionary, - boolean isExact, String wordSeparator); - - - /** Gets the transcript iterator. */ - public void startTranscriptIterator(); - - - /** @return whether there is a next transcript. */ - public boolean hasMoreTranscripts(); - - - /** @return next transcript. */ - public Transcript nextTranscript(); - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/UtteranceGraph.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/UtteranceGraph.java deleted file mode 100755 index a10668bb..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/UtteranceGraph.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.trainer; - - -/** Interface to the UtteranceGraph, a graph of an utterance. */ -public interface UtteranceGraph { - - /** - * Add a transcript graph to the current utterance graph. - * - * @param transcriptGraph the transcript graph to add - */ - public void add(Graph transcriptGraph); - - - /** @return the size of a graph. This is the number of nodes in a graph. */ - public int size(); - - - /** - * Get node at the specified position in the list. The order is the same in which the nodes were entered. - * - * @param index index of item to retun - * @return the node - */ - public Node getNode(int index); - - - /** - * Gets the initial node in this graph - * - * @return the initial node - */ - public Node getInitialNode(); - - - /** - * Gets the final node in this graph - * - * @return the final node - */ - public Node getFinalNode(); - - - /** - * Returns whether the given node is the initial node in this graph. - * - * @param node the node we want to compare - * @return if true, the node is the initial node - */ - public boolean isInitialNode(Node node); - - - /** - * Returns whether the given node is the final node in this graph. - * - * @param node the node we want to compare - * @return if true, the node is the final node - */ - public boolean isFinalNode(Node node); - - - /** - * Gets the index of a particular node in the graph. - * - * @param node the node - * @return the index - */ - public int indexOf(Node node); - - - /** - * Validate the graph. It checks out basics about the graph, such as whether all nodes have at least one incoming - * and outgoing edge, except for the initial and final. - * - * @return if true, graph validation passed - */ - public boolean validate(); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/UtteranceHMMGraph.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/UtteranceHMMGraph.java deleted file mode 100755 index 83a4ed6c..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/trainer/UtteranceHMMGraph.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.trainer; - -import edu.cmu.sphinx.linguist.acoustic.AcousticModel; -import edu.cmu.sphinx.linguist.acoustic.UnitManager; - -/** Defines the Utterance Graph. */ -public class UtteranceHMMGraph extends Graph implements UtteranceGraph { - - public UtteranceHMMGraph(String context, Utterance utterance, AcousticModel acousticModel, UnitManager unitManager) { - super(); - - Graph transcriptGraph; - for (utterance.startTranscriptIterator(); - utterance.hasMoreTranscripts();) { - Transcript transcript = utterance.nextTranscript(); - transcriptGraph = new TranscriptHMMGraph(context, transcript, - acousticModel, unitManager); - add(transcriptGraph); - } - } - - - /** - * Add a transcript graph to the current utterance graph. - * Implementation requires a single transcript per - * utterance. The copy will fail if the current utterance - * graph is not empty. - * - * @param transcriptGraph the transcript graph - */ - public void add(Graph transcriptGraph) { - copyGraph(transcriptGraph); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/BatchFile.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/BatchFile.java deleted file mode 100755 index 77a44b2a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/BatchFile.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.util; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - - -/** Provides a set of utilities methods for manipulating batch files. */ -public class BatchFile { - - /** - * Returns a List of the lines in a batch file. - * - * @param batchFile the batch file to read - * @return a List of the lines in a batch file - * @throws IOException if something went wrong - */ - public static List getLines(String batchFile) throws IOException { - return getLines(batchFile, 0); - } - - - /** - * Returns a List of the lines in a batch file. - * - * @param batchFile the batch file to read - * @param skip the number of lines to skip between items - * @return a List of the lines in a batch file - * @throws IOException if something went wrong - */ - public static List getLines(String batchFile, int skip) throws IOException { - int curCount = skip; - List list = new ArrayList(); - BufferedReader reader = new BufferedReader(new FileReader(batchFile)); - - String line = null; - - while ((line = reader.readLine()) != null) { - if (!line.isEmpty()) { - if (++curCount >= skip) { - list.add(line); - curCount = 0; - } - } - } - reader.close(); - return list; - } - - - /** - * Returns the file name portion of a line in a batch file. This is the portion of the line before the first space. - * - * @param batchFileLine the source line - * @return the file name portion of a line in a batch file. - */ - public static String getFilename(String batchFileLine) { - int firstSpace = batchFileLine.indexOf(' '); - return batchFileLine.substring(0, firstSpace).trim(); - } - - - /** - * Returns the reference string portion of a line in a batch file. This is the portion of the line after the first - * space - * - * @param batchFileLine the source line - * @return the reference string portion of a line in a batch file. - */ - public static String getReference(String batchFileLine) { - int firstSpace = batchFileLine.indexOf(' '); - return batchFileLine.substring(firstSpace + 1).trim(); - } -} - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/BatchItem.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/BatchItem.java deleted file mode 100755 index 100a120b..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/BatchItem.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.util; - - -/** Provides a standard interface to for a single decode in a batch of decodes */ -public class BatchItem { - - private final String filename; - private final String transcript; - - - /** - * Creates a batch item - * - * @param filename the filename - * @param transcript the transcript - */ - public BatchItem(String filename, String transcript) { - this.filename = filename; - this.transcript = transcript; - } - - - /** - * Gets the filename for this batch - * - * @return the file name - */ - public String getFilename() { - return filename; - } - - - /** - * Gets the transcript for the batch - * - * @return the transcript (or null if there is no transcript) - */ - public String getTranscript() { - return transcript; - } -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/BatchManager.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/BatchManager.java deleted file mode 100755 index 246fe577..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/BatchManager.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.util; - -import java.io.IOException; - - -/** Provides a standard interface to a batching mechanism */ -public interface BatchManager { - - - /** - * Starts processing the batch - * - * @throws IOException if an error occurs while processing the batch file - */ - public void start() throws IOException; - - - /** - * Gets the next available batch item or null if no more are available - * - * @return the next available batch item - * @throws IOException if an error occurs while processing the batch file - */ - public BatchItem getNextItem() throws IOException; - - - /** - * Stops processing the batch - * - * @throws IOException if an error occurs while processing the batch file - */ - public void stop() throws IOException; - - - /** - * Returns the name of the file - * - * @return the filename - */ - public String getFilename(); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/Cache.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/Cache.java deleted file mode 100755 index a161f124..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/Cache.java +++ /dev/null @@ -1,62 +0,0 @@ -package edu.cmu.sphinx.util; - -import java.util.HashMap; -import java.util.Map; - -/** - * Provides a simple object cache. - * - *

    Object stored in cache must properly implement {@link Object#hashCode hashCode} and {@link Object#equals equals}. - * - *

    Note that this class is not synchronized. - * If multiple threads access a cache concurrently, and at least one of - * the threads modifies the cache, it must be synchronized externally. - * This is typically accomplished by synchronizing on some object that - * naturally encapsulates the cache. - */ -public class Cache { - - private Map map = new HashMap(); - - private int hits = 0; - - /** - * Puts the given object in the cache if it is not already present. - * - *

    If the object is already cached, than the instance that exists in the cached is returned. - * Otherwise, it is placed in the cache and null is returned. - * - * @param object object to cache - * @return the cached object or null if the given object was not already cached - */ - public T cache(T object) { - T result = map.get(object); - if (result == null) { - map.put(object, object); - } else { - hits++; - } - return result; - } - - /** - * Returns the number of cache hits, which is the number of times {@link #cache} was called - * and returned an object that already existed in the cache. - * - * @return the number of cache hits - */ - public int getHits() { - return hits; - } - - /** - * Returns the number of cache misses, which is the number of times {@link #cache} was called - * and returned null (after caching the object), effectively representing the size of the cache. - * - * @return the number of cache misses - */ - public int getMisses() { - return map.size(); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/CommandInterface.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/CommandInterface.java deleted file mode 100755 index 5bae22fa..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/CommandInterface.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.util; - -/** - * An interface implemented by command functions typically added to a command interpreter - * - * @see CommandInterpreter - */ - -public interface CommandInterface { - - /** - * Execute the given command. - * - * @param ci the command interpretere that invoked this command. - * @param args command line arguments (just like main). - * @return a command result - */ - public String execute(CommandInterpreter ci, String[] args); - - - /** - * Returns a one line description of the command - * - * @return a one-liner help message - */ - public String getHelp(); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/CommandInterpreter.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/CommandInterpreter.java deleted file mode 100755 index 12822f45..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/CommandInterpreter.java +++ /dev/null @@ -1,774 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.util; - -import java.io.*; -import java.net.Socket; -import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.regex.PatternSyntaxException; - - -/** - * This class is a command interpreter. It reads strings from an input stream, parses them into commands and executes - * them, results are sent back on the output stream. - * - * @see CommandInterpreter - */ - -public class CommandInterpreter extends Thread { - - private Map commandList; - private int totalCommands; - private BufferedReader in; - private PrintWriter out; - private String prompt; - private boolean done; - private boolean trace; - private final CommandHistory history = new CommandHistory(); - - private Socket socket; - - - /** - * Creates a command interpreter that reads/writes on the given streams. - * - * @param in the input stream. - * @param out the output stream. - */ - - public CommandInterpreter(BufferedReader in, PrintWriter out) { - init(in, out); - } - - - /** - * Sets the trace mode of the command interpreter. - * - * @param trace true if tracing. - */ - - public void setTrace(boolean trace) { - this.trace = trace; - } - - - /** Creates a command interpreter that won't read a stream. */ - - public CommandInterpreter() { - BufferedReader bin = - new BufferedReader(new InputStreamReader(System.in)); - - PrintWriter pw = new PrintWriter(System.out); - init(bin, pw); - } - - - /** Initializes the CI */ - - private void init(BufferedReader in, PrintWriter out) { - commandList = new HashMap(); - addStandardCommands(); - setStreams(in, out); - } - - - /** - * Sets the I/O streams - * - * @param in the input stream. - * @param out the output stream. - */ - public void setStreams(BufferedReader in, PrintWriter out) { - this.in = in; - this.out = out; - } - - - /** @return the Socket this CommandInterpreter uses. */ - public Socket getSocket() { - return socket; - } - - - /** - * Sets the Socket for this CommandInterpreter. - * - * @param skt the Socket this CommandInterpreter uses - */ - public void setSocket(Socket skt) { - socket = skt; - } - - - /** Adds the set of standard commands */ - - private void addStandardCommands() { - add("help", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - dumpCommands(); - return ""; - } - - - public String getHelp() { - return "lists available commands"; - } - }); - - add("history", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - history.dump(); - return ""; - } - - - public String getHelp() { - return "shows command history"; - } - }); - - add("status", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - putResponse("Total number of commands: " + totalCommands); - return ""; - } - - - public String getHelp() { - return "shows command status"; - } - }); - - add("echo", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - StringBuilder b = new StringBuilder(80); - - for (int i = 1; i < args.length; i++) { - b.append(args[i]); - b.append(' '); - } - putResponse(b.toString()); - return ""; - } - - - public String getHelp() { - return "display a line of text"; - } - }); - - add("quit", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - done = true; - return ""; - } - - - public String getHelp() { - return "exit the shell"; - } - }); - - add("on_exit", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - return ""; - } - - - public String getHelp() { - return "command executed upon exit"; - } - }); - - add("version", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - putResponse("Command Interpreter - Version 1.1 "); - return ""; - } - - - public String getHelp() { - return "displays version information"; - } - }); - - add("gc", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - Runtime.getRuntime().gc(); - return ""; - } - - - public String getHelp() { - return "performs garbage collection"; - } - }); - - add("memory", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - long totalMem = Runtime.getRuntime().totalMemory(); - long freeMem = Runtime.getRuntime().freeMemory(); - - putResponse("Free Memory : " - + freeMem / (1024.0 * 1024) + " mbytes"); - putResponse("Total Memory : " - + totalMem / (1024.0 * 1024) + " mbytes"); - return ""; - } - - - public String getHelp() { - return "shows memory statistics"; - } - }); - - - add("delay", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - if (args.length == 2) { - try { - float seconds = Float.parseFloat(args[1]); - Thread.sleep((long) (seconds * 1000)); - } catch (NumberFormatException nfe) { - putResponse("Usage: delay time-in-seconds"); - } catch (InterruptedException ie) { - } - } else { - putResponse("Usage: delay time-in-seconds"); - } - return ""; - } - - - public String getHelp() { - return "pauses for a given number of seconds"; - } - }); - - add("repeat", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - if (args.length >= 3) { - try { - int count = Integer.parseInt(args[1]); - String[] subargs = Arrays.copyOfRange(args, 2, args.length); - for (int i = 0; i < count; i++) { - putResponse(CommandInterpreter.this.execute(subargs)); - } - } catch (NumberFormatException nfe) { - putResponse("Usage: repeat count command args"); - } - } else { - putResponse("Usage: repeat count command args"); - } - return ""; - } - - - public String getHelp() { - return "repeatedly execute a command"; - } - }); - - add("load", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - if (args.length == 2) { - if (!load(args[1])) { - putResponse("load: trouble loading " + args[1]); - } - } else { - putResponse("Usage: load filename"); - } - return ""; - } - - - public String getHelp() { - return "load and execute commands from a file"; - } - }); - - add("chain", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - if (args.length > 1) { - String[] subargs = new String[args.length - 1]; - List commands = new ArrayList(5); - int count = 0; - for (int i = 1; i < args.length; i++) { - if (args[i].equals(";")) { - if (count > 0) { - commands.add(Arrays.copyOf(subargs, count)); - count = 0; - } - } else { - subargs[count++] = args[i]; - } - } - - if (count > 0) { - commands.add(Arrays.copyOf(subargs, count)); - } - - for (String[] command : commands) { - putResponse(CommandInterpreter.this.execute(command)); - } - } else { - putResponse("Usage: chain cmd1 ; cmd2 ; cmd3 "); - } - return ""; - } - - - public String getHelp() { - return "execute multiple commands on a single line"; - } - }); - - add("time", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - if (args.length > 1) { - String[] subargs = Arrays.copyOfRange(args, 1, args.length); - long startTime = System.currentTimeMillis(); - long endTime; - - putResponse(CommandInterpreter.this.execute(subargs)); - endTime = System.currentTimeMillis(); - - putResponse("Time: " + ((endTime - startTime) / 1000.0) - + " seconds"); - - } else { - putResponse("Usage: time cmd [args]"); - } - return ""; - } - - - public String getHelp() { - return "report the time it takes to run a command"; - } - }); - } - - - /** Dumps the commands in the interpreter */ - - private void dumpCommands() { - for (Map.Entry entry : new TreeMap(commandList).entrySet()) - putResponse(entry.getKey() + " - " + entry.getValue().getHelp()); - } - - - /** - * Adds the given command to the command list. - * - * @param name the name of the command. - * @param command the command to be executed. - */ - public void add(String name, CommandInterface command) { - commandList.put(name, command); - } - - - /** - * Adds an alias to the command - * - * @param command the name of the command. - * @param alias the new aliase - */ - public void addAlias(String command, String alias) { - commandList.put(alias, commandList.get(command)); - } - - - /** - * Add the given set of commands to the list of commands. - * - * @param newCommands the new commands to add to this interpreter. - */ - public void add(Map newCommands) { - commandList.putAll(newCommands); - } - - - /** - * Outputs a response to the sender. - * - * @param response the response to send. - */ - - public synchronized void putResponse(String response) { - if (response != null && !response.isEmpty()) { - out.println(response); - out.flush(); - if (trace) { - System.out.println("Out: " + response); - } - } - } - - - /** Called when the interpreter is exiting. Default behavior is to execute an "on_exit" command. */ - - protected void onExit() { - execute("on_exit"); - System.out.println("----------\n"); - } - - - /** - * Execute the given command. - * - * @param args command args, args[0] contains name of cmd. - * @return result string - */ - protected String execute(String[] args) { - String response = ""; - - CommandInterface ci; - - if (args.length > 0) { - - ci = commandList.get(args[0]); - if (ci != null) { - response = ci.execute(this, args); - } else { - response = "ERR CMD_NOT_FOUND"; - } - - totalCommands++; - } - return response; - } - - - /** - * Execute the given command string. - * - * @param cmdString the command string. - * @return result string - */ - public String execute(String cmdString) { - if (trace) { - System.out.println("Execute: " + cmdString); - } - return execute(parseMessage(cmdString)); - } - - - /** - * Parses the given message into an array of strings. - * - * @param message the string to be parsed. - * @return the parsed message as an array of strings - */ - protected String[] parseMessage(String message) { - int tokenType; - List words = new ArrayList(20); - StreamTokenizer st = new StreamTokenizer(new StringReader(message)); - - st.resetSyntax(); - st.whitespaceChars(0, ' '); - st.wordChars('!', 255); - st.quoteChar('"'); - st.quoteChar('\"'); - st.commentChar('#'); - - while (true) { - try { - tokenType = st.nextToken(); - if (tokenType == StreamTokenizer.TT_WORD) { - words.add(st.sval); - } else if (tokenType == '\'' || tokenType == '"') { - words.add(st.sval); - } else if (tokenType == StreamTokenizer.TT_NUMBER) { - System.out.println("Unexpected numeric token!"); - } else { - break; - } - } catch (IOException e) { - break; - } - } - return words.toArray(new String[words.size()]); - } - - // inherited from thread. - - - @Override - public void run() { - while (!done) { - try { - printPrompt(); - String message = getInputLine(); - if (message == null) { - break; - } else { - if (trace) { - System.out.println("\n----------"); - System.out.println("In : " + message); - } - message = message.trim(); - if (!message.isEmpty()) { - putResponse(execute(message)); - } - } - } - catch (IOException e) { - System.out.println("Exception: CommandInterpreter.run()"); - break; - } - } - onExit(); - } - - // some history patterns used by getInputLine() - - private static final Pattern historyPush = Pattern.compile("(.+):p"); - private static final Pattern editPattern = - Pattern.compile("\\^(.+?)\\^(.*?)\\^?"); - private static final Pattern bbPattern = Pattern.compile("(!!)"); - - - /** - * Gets the input line. Deals with history. Currently we support simple csh-like history. !! - execute last command, - * !-3 execute 3 from last command, !2 execute second command in history list, !foo - find last command that started - * with foo and execute it. Also allows editing of the last command wich ^old^new^ type replacesments - * - * @return the next history line or null if done - */ - private String getInputLine() throws IOException { - String message = in.readLine(); - if (message == null) - return null; - - boolean justPush = false; - boolean echo = false; - boolean error = false; - - Matcher m = historyPush.matcher(message); - if (m.matches()) { - justPush = true; - echo = true; - message = m.group(1); - } - if (message.startsWith("^")) { // line editing ^foo^fum^ - m = editPattern.matcher(message); - if (m.matches()) { - String orig = m.group(1); - String sub = m.group(2); - try { - Pattern pat = Pattern.compile(orig); - Matcher subMatcher = pat.matcher(history.getLast(0)); - if (subMatcher.find()) { - message = subMatcher.replaceFirst(sub); - echo = true; - } else { - error = true; - putResponse(message + ": substitution failed"); - } - } catch (PatternSyntaxException pse) { - error = true; - putResponse("Bad regexp: " + pse.getDescription()); - } - } else { - error = true; - putResponse("bad substitution sytax, use ^old^new^"); - } - } else if ((m = bbPattern.matcher(message)).find()) { - message = m.replaceAll(history.getLast(0)); - echo = true; - } else if (message.startsWith("!")) { - if (message.matches("!\\d+")) { - int which = Integer.parseInt(message.substring(1)); - message = history.get(which); - } else if (message.matches("!-\\d+")) { - int which = Integer.parseInt(message.substring(2)); - message = history.getLast(which - 1); - } else { - message = history.findLast(message.substring(1)); - } - echo = true; - } - - if (error) { - return ""; - } - - if (!message.isEmpty()) { - history.add(message); - } - - if (echo) { - putResponse(message); - } - return justPush ? "" : message; - } - - - public void close() { - done = true; - } - - - /** Prints the prompt. */ - - private void printPrompt() { - if (prompt != null) { - out.print(prompt); - out.flush(); - } - } - - - public boolean load(String filename) { - try { - FileReader fr = new FileReader(filename); - BufferedReader br = new BufferedReader(fr); - String inputLine; - - while ((inputLine = br.readLine()) != null) { - String response = CommandInterpreter.this.execute(inputLine); - if (!response.equals("OK")) { - putResponse(response); - } - } - fr.close(); - return true; - } catch (IOException ioe) { - return false; - } - } - - - /** - * Sets the prompt for the interpreter - * - * @param prompt the prompt. - */ - - public void setPrompt(String prompt) { - this.prompt = prompt; - } - - - /** - * Gets the prompt for the interpreter - * - * @return the prompt. - */ - - public String getPrompt() { - return prompt; - } - - - /** - * Returns the output stream of this CommandInterpreter. - * - * @return the output stream - */ - public PrintWriter getPrintWriter() { - return out; - } - - - public static void main(String[] args) { - CommandInterpreter ci = new CommandInterpreter(); - - try { - System.out.println("Welcome to the Command interpreter test program"); - ci.setPrompt("CI> "); - ci.run(); - System.out.println("Goodbye!"); - } catch (Throwable t) { - System.out.println(t); - } - } - - - class CommandHistory { - - private final List history = new ArrayList(100); - - - /** - * Adds a command to the history - * - * @param command the command to add - */ - public void add(String command) { - history.add(command); - } - - - /** - * Gets the most recent element in the history - * - * @param offset the offset from the most recent command - * @return the last command executed - */ - public String getLast(int offset) { - if (history.size() > offset) { - return history.get((history.size() - 1) - offset); - } else { - putResponse("command not found"); - return ""; - } - } - - - /** - * Gets the most recent element in the history - * - * @param which the offset from the most recent command - * @return the last command executed - */ - public String get(int which) { - if (history.size() > which) { - return history.get(which); - } else { - putResponse("command not found"); - return ""; - } - } - - - /** - * Finds the most recent message that starts with the given string - * - * @param match the string to match - * @return the last command executed that matches match - */ - public String findLast(String match) { - for (int i = history.size() - 1; i >= 0; i--) { - String cmd = get(i); - if (cmd.startsWith(match)) { - return cmd; - } - } - putResponse("command not found"); - return ""; - } - - - /** Dumps the current history */ - public void dump() { - for (int i = 0; i < history.size(); i++) { - String cmd = get(i); - putResponse(i + " " + cmd); - } - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/Complex.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/Complex.java deleted file mode 100755 index f93fc9fc..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/Complex.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.util; - -/** Implements complex types and arythmetics */ -public class Complex { - - /** The real part of a complex number. */ - private double real; - - /** The imaginary part of a complex number. */ - private double imaginary; - - - /** Create a default complex number */ - public Complex() { - reset(); - } - - - /** Create a complex number from a real one - * @param real source value - */ - public Complex(double real) { - set(real, 0.0f); - } - - - /** Create a complex number from the real and imaginary parts - * @param real real part - * @param imaginary imaginary part - */ - public Complex(double real, double imaginary) { - set(real, imaginary); - } - - - /** - * Returns the real part of this Complex number. - * - * @return the real part - */ - public double getReal() { - return real; - } - - - /** - * Returns the imaginary part of this Complex number. - * - * @return the imaginary part - */ - public double getImaginary() { - return imaginary; - } - - - /** Sets both the real and imaginary parts of this complex number to zero. */ - public void reset() { - this.real = 0.0f; - this.imaginary = 0.0f; - } - - - /** - * Sets the real and imaginary parts of this complex number. - * - * @param real the value of the real part - * @param imaginary the value of the imaginary part - */ - public void set(double real, double imaginary) { - this.real = real; - this.imaginary = imaginary; - } - - - /** - * Method to add two complex numbers. - * - * @param a the first element to be added - * @param b the second element to be added - */ - public void addComplex(Complex a, Complex b) { - this.real = a.real + b.real; - this.imaginary = a.imaginary + b.imaginary; - } - - - /** - * Method to subtract two complex numbers. - * - * @param a the element we subtract from - * @param b the element to be subtracted - */ - public void subtractComplex(Complex a, Complex b) { - this.real = a.real - b.real; - this.imaginary = a.imaginary - b.imaginary; - } - - - /** - * Method to multiply two complex numbers. - * - * @param a the first element to multiply - * @param b the second element to multiply - */ - public void multiplyComplex(Complex a, Complex b) { - this.real = a.real * b.real - a.imaginary * b.imaginary; - this.imaginary = a.real * b.imaginary + a.imaginary * b.real; - } - - - /** - * Method to divide two complex numbers. To divide two complexes, we multiply by the complex conjugate of the - * denominator, thus resulting in a real number in the denominator. - * - * @param a the numerator - * @param b the denominator - */ - public void divideComplex(Complex a, Complex b) { - this.real = a.real * b.real + a.imaginary * b.imaginary; - this.imaginary = a.imaginary * b.real - a.real * b.imaginary; - this.scaleComplex(this, b.squaredMagnitudeComplex()); - } - - - /** - * Method to scale a complex number by a real one. The input complex number is modified in place. - * - * @param a the complex number - * @param b the real scaling factor - */ - public void scaleComplex(Complex a, double b) { - this.real = a.real / b; - this.imaginary = a.imaginary / b; - } - - - /** - * Method to compute the squared magnitude of a complex number. - * - * @return the squared magnitude of the complex number - */ - public double squaredMagnitudeComplex() { - double squaredMag; - squaredMag = this.real * this.real + this.imaginary * this.imaginary; - return squaredMag; - } - - - /** Returns this complex number as a string in the format (real, imaginary). */ - @Override - public String toString() { - return ("(" + this.real + ", " + this.imaginary + ')'); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/CustomThreadFactory.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/CustomThreadFactory.java deleted file mode 100755 index 275acdd8..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/CustomThreadFactory.java +++ /dev/null @@ -1,39 +0,0 @@ -package edu.cmu.sphinx.util; - -import java.util.concurrent.ThreadFactory; -import java.util.concurrent.atomic.AtomicInteger; - -/** - * A custom thread factory, able to create threads with custom name prefix, daemon-ness and priority. - * Based on java.util.concurrent.ThreadFactory. - * - * @author Yaniv Kunda - * @see java.util.concurrent.ThreadFactory - */ -public class CustomThreadFactory implements ThreadFactory { - static final AtomicInteger poolNumber = new AtomicInteger(1); - final ThreadGroup group; - final AtomicInteger threadNumber = new AtomicInteger(1); - final String namePrefix; - final boolean daemon; - final int priority; - - public CustomThreadFactory(String namePrefix, boolean daemon, int priority) { - if (priority > Thread.MAX_PRIORITY || priority < Thread.MIN_PRIORITY) - throw new IllegalArgumentException("illegal thread priority"); - SecurityManager s = System.getSecurityManager(); - this.group = s != null ? s.getThreadGroup() : Thread.currentThread().getThreadGroup(); - this.namePrefix = namePrefix + "-" + poolNumber.getAndIncrement() + "-thread-"; - this.daemon = daemon; - this.priority = priority; - } - - public Thread newThread(Runnable r) { - Thread t = new Thread(group, r, namePrefix + threadNumber.getAndIncrement(), 0); - if (t.isDaemon() != daemon) - t.setDaemon(daemon); - if (t.getPriority() != priority) - t.setPriority(priority); - return t; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/ExtendedStreamTokenizer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/ExtendedStreamTokenizer.java deleted file mode 100755 index 431a3614..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/ExtendedStreamTokenizer.java +++ /dev/null @@ -1,355 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.util; - -import java.io.*; -import java.util.ArrayList; -import java.util.List; - - -/** A class that provides a mechanism for tokenizing a stream */ -public class ExtendedStreamTokenizer { - - private String path; - private final StreamTokenizer st; - private final Reader reader; - private boolean atEOF; - private final List putbackList; - - - /** - * Creates and returns a stream tokenizer that has been properly configured to parse sphinx3 data This - * ExtendedStreamTokenizer has no comment characters. - * - * @param path the source of the data - * @throws FileNotFoundException if a file cannot be found - */ - public ExtendedStreamTokenizer(String path) throws FileNotFoundException { - this(path, false); - } - - - /** - * Creates and returns a stream tokenizer that has been properly configured to parse sphinx3 data This - * ExtendedStreamTokenizer has no comment characters. - * - * @param path the source of the data - * @param eolIsSignificant if true eol is significant - * @throws FileNotFoundException if a file cannot be found - */ - public ExtendedStreamTokenizer(String path, boolean eolIsSignificant) - throws FileNotFoundException { - this(new FileReader(path), eolIsSignificant); - this.path = path; - } - - - /** - * Constructs an ExtendedStreamTokenizer from the given InputStream - * - * @param inputStream the source of the data - * @param commentChar the comment character - * @param eolIsSignificant true if EOL is significant, false otherwise - */ - public ExtendedStreamTokenizer(InputStream inputStream, int commentChar, - boolean eolIsSignificant) { - this(new InputStreamReader(inputStream), eolIsSignificant); - commentChar(commentChar); - } - - - /** - * Constructs an ExtendedStreamTokenizer from the given InputStream. This ExtendedStreamTokenizer has no comment - * characters. - * - * @param inputStream the source of the data - * @param eolIsSignificant true if EOL is significant, false otherwise - */ - public ExtendedStreamTokenizer(InputStream inputStream, - boolean eolIsSignificant) { - this(new InputStreamReader(inputStream), eolIsSignificant); - } - - - /** - * Constructs an ExtendedStreamTokenizer from the given Reader. This ExtendedStreamTokenizer has no comment - * characters. - * - * @param reader the source of the data - * @param eolIsSignificant true if eol is significant - */ - public ExtendedStreamTokenizer(Reader reader, boolean eolIsSignificant) { - this.reader = new BufferedReader(reader); - - st = new StreamTokenizer(reader); - st.resetSyntax(); - st.whitespaceChars(0, 32); - st.wordChars(33, 255); - st.eolIsSignificant(eolIsSignificant); - putbackList = new ArrayList(); - } - - - /** - * Closes the tokenizer - * - * @throws IOException if an error occurs while closing the stream - */ - public void close() throws IOException { - reader.close(); - } - - - /** - * Specifies that all the characters between low and hi incluseive are whitespace characters - * - * @param low the low end of the range - * @param hi the high end of the range - */ - public void whitespaceChars(int low, int hi) { - st.whitespaceChars(low, hi); - } - - - /** - * Specified that the character argument starts a single-line comment. All characters from the comment character to - * the end of the line are ignored by this stream tokenizer. - * - * @param ch the comment character - */ - public void commentChar(int ch) { - st.commentChar(ch); - } - - - /** - * Gets the next word from the tokenizer - * - * @return the next word - * @throws StreamCorruptedException if the word does not match - * @throws IOException if an error occurs while loading the data - */ - public String getString() throws IOException { - if (!putbackList.isEmpty()) { - return putbackList.remove(putbackList.size() - 1); - } else { - st.nextToken(); - if (st.ttype == StreamTokenizer.TT_EOF) { - atEOF = true; - } - if (st.ttype != StreamTokenizer.TT_WORD && - st.ttype != StreamTokenizer.TT_EOL && - st.ttype != StreamTokenizer.TT_EOF) { - corrupt("word expected but not found"); - } - if (st.ttype == StreamTokenizer.TT_EOL || - st.ttype == StreamTokenizer.TT_EOF) { - return null; - } else { - return st.sval; - } - } - } - - - /** - * Puts a string back, the next get will return this string - * - * @param string the string to unget - */ - public void unget(String string) { - putbackList.add(string); - } - - - /** - * Determines if the stream is at the end of file - * - * @return true if the stream is at EOF - */ - public boolean isEOF() { - return atEOF; - } - - - /** - * Throws an error with the line and path added - * - * @param msg the annotation message - */ - private void corrupt(String msg) throws StreamCorruptedException { - throw new StreamCorruptedException( - msg + " at line " + st.lineno() + " in file " + path); - } - - - /** - * Gets the current line number - * - * @return the line number - */ - public int getLineNumber() { - return st.lineno(); - } - - - /** - * Loads a word from the tokenizer and ensures that it matches 'expecting' - * - * @param expecting the word read must match this - * @throws StreamCorruptedException if the word does not match - * @throws IOException if an error occurs while loading the data - */ - public void expectString(String expecting) - throws IOException { - String line = getString(); - if (!line.equals(expecting)) { - corrupt("error matching expected string '" + expecting + - "' in line: '" + line + '\''); - } - } - - - /** - * Loads an integer from the tokenizer and ensures that it matches 'expecting' - * - * @param name the name of the value - * @param expecting the word read must match this - * @throws StreamCorruptedException if the word does not match - * @throws IOException if an error occurs while loading the data - */ - public void expectInt(String name, int expecting) - throws IOException { - int val = getInt(name); - if (val != expecting) { - corrupt("Expecting integer " + expecting); - } - } - - - /** - * gets an integer from the tokenizer stream - * - * @param name the name of the parameter (for error reporting) - * @return the next word in the stream as an integer - * @throws StreamCorruptedException if the next value is not a - * @throws IOException if an error occurs while loading the data number - */ - public int getInt(String name) - throws IOException { - int iVal = 0; - try { - String val = getString(); - iVal = Integer.parseInt(val); - } catch (NumberFormatException nfe) { - corrupt("while parsing int " + name); - } - return iVal; - } - - - /** - * gets a double from the tokenizer stream - * - * @param name the name of the parameter (for error reporting) - * @return the next word in the stream as a double - * @throws StreamCorruptedException if the next value is not a - * @throws IOException if an error occurs while loading the data number - */ - public double getDouble(String name) - throws IOException { - double dVal = 0.0; - try { - String val = getString(); - if (val.equals("inf")) { - dVal = Double.POSITIVE_INFINITY; - } else { - dVal = Double.parseDouble(val); - } - } catch (NumberFormatException nfe) { - corrupt("while parsing double " + name); - } - return dVal; - } - - - /** - * gets a float from the tokenizer stream - * - * @param name the name of the parameter (for error reporting) - * @return the next word in the stream as a float - * @throws StreamCorruptedException if the next value is not a - * @throws IOException if an error occurs while loading the data number - */ - public float getFloat(String name) - throws IOException { - float fVal = 0.0F; - try { - String val = getString(); - if (val.equals("inf")) { - fVal = Float.POSITIVE_INFINITY; - } else { - fVal = Float.parseFloat(val); - } - } catch (NumberFormatException nfe) { - corrupt("while parsing float " + name); - } - return fVal; - } - - - /** - * gets a optional float from the tokenizer stream. If a float is not present, the default is returned - * - * @param name the name of the parameter (for error reporting) - * @param defaultValue the default value - * @return the next word in the stream as a float - * @throws StreamCorruptedException if the next value is not a - * @throws IOException if an error occurs while loading the data number - */ - public float getFloat(String name, float defaultValue) - throws IOException { - float fVal = 0.0F; - try { - String val = getString(); - if (val == null) { - fVal = defaultValue; - } else if (val.equals("inf")) { - fVal = Float.POSITIVE_INFINITY; - } else { - fVal = Float.parseFloat(val); - } - } catch (NumberFormatException nfe) { - corrupt("while parsing float " + name); - } - return fVal; - } - - - /** - * Skip any carriage returns. - * - * @throws IOException if an error occurs while reading data from the stream. - */ - public void skipwhite() throws IOException { - String next = null; - - while (!isEOF()) { - if ((next = getString()) != null) { - unget(next); - break; - } - } - } -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/FileReferenceSource.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/FileReferenceSource.java deleted file mode 100755 index 65183a48..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/FileReferenceSource.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.util; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.util.LinkedList; -import java.util.List; - -/** A source of reference texts. */ -public class FileReferenceSource implements ReferenceSource { - - private final List references; - - - /** - * Constructs a ReferenceSource from a reference file. - * - * @param file the reference file - * @throws IOException if something went wrong - */ - public FileReferenceSource(String file) throws IOException { - references = new LinkedList(); - BufferedReader reader = new BufferedReader(new FileReader(file)); - String line = null; - while ((line = reader.readLine()) != null) { - if (!line.startsWith(";;")) { - int fromIndex = 0; - boolean isSilence = false; - for (int i = 0; i < 6; i++) { - if (i == 2) { - String type = line.substring(fromIndex); - if (type.startsWith("inter_segment_gap")) { - isSilence = true; - break; - } - } - fromIndex = line.indexOf(' ', fromIndex) + 1; - } - if (!isSilence) { - String reference = line.substring(fromIndex).trim(); - // System.out.println("REF: " + reference); - references.add(reference); - } - } - } - reader.close(); - } - - - /** - * Returns a list of reference text. - * - * @return a list of reference text - */ - public List getReferences() { - return references; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/GapInsertionDetector.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/GapInsertionDetector.java deleted file mode 100755 index c0f7bd23..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/GapInsertionDetector.java +++ /dev/null @@ -1,460 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.util; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.StringTokenizer; - - -/** - * A program that takes in a reference transcript and a hypothesis transcript and figures out how many gap insertion - * errors are there. The hypothesis transcript file should contain timestamps for when each word was entered and exited. - *

    The gap insertion detection algorithm works as follows. It takes each hypothesized word individually and see - * whether it falls into a non-speech region in the reference transcript. If it does, that hypothesized word is counted - * as a gap insertion. - */ -public class GapInsertionDetector { - - - private ReferenceFile referenceFile; - private HypothesisFile hypothesisFile; - private boolean showGapInsertions; - - - /** - * Create a gap insertion detector to detect gap insertions using the given reference file and hypothesis file. - * - * @param referenceFile the file of references - * @param hypothesisFile the file of hypotheses - * @param showGapInsertions if true show gap insertions. - * @throws IOException if IO went wrong - */ - public GapInsertionDetector(String referenceFile, String hypothesisFile, - boolean showGapInsertions) - throws IOException { - this.referenceFile = new ReferenceFile(referenceFile); - this.hypothesisFile = new HypothesisFile(hypothesisFile); - } - - - /** - * Detect the gap insertion errors. - * - * @return the total number of gap insertion errors - * @throws IOException if IO error occurred - */ - public int detect() throws IOException { - int gaps = 0; - boolean done = false; - ReferenceUtterance reference = referenceFile.nextUtterance(); - StringBuilder log = new StringBuilder(); - while (!done) { - HypothesisWord word = hypothesisFile.nextWord(); - if (word != null) { - boolean hasGapError = false; - - // go to the relevant reference utterance - while (reference != null && - reference.getEndTime() < word.getStartTime()) { - reference = referenceFile.nextUtterance(); - } - - // 'reference' should be the relevant one now - if (reference != null) { - if (reference.isSilenceGap()) { - hasGapError = true; - } else { - while (reference.getEndTime() < word.getEndTime()) { - reference = referenceFile.nextUtterance(); - if (reference == null || - reference.isSilenceGap()) { - hasGapError = true; - break; - } - } - } - } else { - // if no more reference words, this is a gap insertion - hasGapError = true; - } - - if (hasGapError) { - gaps++; - if (showGapInsertions) { - log.append("GapInsError: Utterance: ").append(hypothesisFile.getUtteranceCount()) - .append(" Word: ").append(word.getText()).append(" (") - .append(word.getStartTime()).append(',').append(word.getEndTime()).append("). "); - if (reference != null) { - assert reference.isSilenceGap(); - log.append("Reference: (").append(reference.getStartTime()) - .append(',').append(reference.getEndTime()).append(')'); - } - log.append('\n'); - } - } - } else { - done = true; - } - } - if (showGapInsertions) { - System.out.println(log); - } - return gaps; - } - - - /* - * A command line program for detecting gap insertion errors. To run this program, type: java - * GapInsertionDetector {propsFile} {referenceFile} {hypothesisFile} The propsFile need to have only one - * property: edu.cmu.sphinx.util.GapInsertionDetector.showGapInsertions=true/false - */ - public static void main(String[] argv) { - - if (argv.length < 2) { - System.out.println("Usage: java GapInsertionDetector " + - " "); - } - try { - String referenceFile = argv[0]; - String hypothesisFile = argv[1]; - - GapInsertionDetector gid = new GapInsertionDetector - (referenceFile, hypothesisFile, true); - System.out.println("# of gap insertions: " + gid.detect()); - } catch (Exception e) { - e.printStackTrace(); - } - } -} - -/** - * Creates a ReferenceFile. - */ -class ReferenceFile { - - private BufferedReader reader; - - - /** - * Creates a ReferenceFile, given the name of the reference file. - * - * @param fileName the name of the reference file - */ - ReferenceFile(String fileName) throws IOException { - reader = new BufferedReader(new FileReader(fileName)); - } - - - /** - * Returns the next available ReferenceUtterance. This method skips all the silence gaps. - * - * @return the next available ReferenceUtterance, or null if the end of file has been reached. - */ - ReferenceUtterance nextUtterance() throws IOException { - String line = reader.readLine(); - if (line != null) { - return new ReferenceUtterance(line); - } else { - return null; - } - } -} - -/** - * Converts a line in the HUB-4 .stm reference file into an object. - */ -class ReferenceUtterance { - - private boolean isSilenceGap; - private final float startTime; - private final float endTime; - private final String[] words; - - - /** - * Creates a ReferenceUtterance from the given line of reference. - * - * @param line the line of reference, in the format: [test_name] [category] [speaker_name|"inter_segment_gap"] - * [start_time] [end_time] [] [reference_text] - */ - ReferenceUtterance(String line) { - StringTokenizer st = new StringTokenizer(line); - st.nextToken(); // parse the test set name - st.nextToken(); // parse category - String type = st.nextToken(); // parse speaker - if (type.equals("inter_segment_gap")) { - isSilenceGap = true; - } - startTime = Float.parseFloat(st.nextToken()); // parse start time - endTime = Float.parseFloat(st.nextToken()); // parse end time - - if (st.hasMoreTokens()) { - st.nextToken(); // parse <...> - words = new String[st.countTokens()]; - for (int i = 0; i < words.length; i++) { - words[i] = st.nextToken(); - } - } else { - words = new String[0]; - } - } - - - /** - * Returns true if this is a silence gap. - * - * @return true if this is a silence gap, false otherwise. - */ - boolean isSilenceGap() { - return isSilenceGap; - } - - - /** - * Returns the starting time (in seconds) of this utterance. - * - * @return the starting time of this utterance - */ - float getStartTime() { - return startTime; - } - - - /** - * Returns the ending time (in seconds) of this utterance. - * - * @return the ending time of this utterance - */ - float getEndTime() { - return endTime; - } - - - /** - * Returns the text of this utterance. - * - * @return the text of this utterance - */ - String[] getWords() { - return words; - } -} - -class HypothesisFile { - - private BufferedReader reader; - private Iterator iterator; - private int utteranceCount; - - - /** - * Creates a HypothesisFile from the given file. - * - * @param fileName the name of the hypothesis file - */ - HypothesisFile(String fileName) throws IOException { - reader = new BufferedReader(new FileReader(fileName)); - } - - - /** - * Returns the next hypothesized word in the hypothesis file. - * - * @return the next hypothesized word - */ - HypothesisWord nextWord() throws IOException { - if (iterator == null || !iterator.hasNext()) { - HypothesisUtterance utterance = nextUtterance(); - if (utterance != null) { - iterator = utterance.getWords().iterator(); - } else { - iterator = null; - } - } - if (iterator == null) { - return null; - } else { - return iterator.next(); - } - } - - - /** - * Returns the next available hypothesis utterance. - * - * @return the next available hypothesis utterance, or null if the end of file has been reached - */ - private HypothesisUtterance nextUtterance() throws IOException { - String line = reader.readLine(); - if (line != null) { - utteranceCount++; - HypothesisUtterance utterance = new HypothesisUtterance(line); - if (utterance.getWordCount() <= 0) { - return nextUtterance(); - } else { - return utterance; - } - } else { - return null; - } - } - - - /** - * Returns the utterance count. - * - * @return the utterance count - */ - public int getUtteranceCount() { - return utteranceCount; - } -} - -/** - * A hypothesis utterance, which will give you a list of hypothesis words. - */ -class HypothesisUtterance { - - private final List words; - private float startTime; - private float endTime; - - - /** - * Creates a hypothesis utterance from a line of input describing the hypothesis. - */ - HypothesisUtterance(String line) { - words = new LinkedList(); - StringTokenizer st = new StringTokenizer(line, " \t\n\r\f(),"); - while (st.hasMoreTokens()) { - String text = st.nextToken(); - try { - float myStartTime = Float.parseFloat(st.nextToken()); - float myEndTime = Float.parseFloat(st.nextToken()); - HypothesisWord word = new HypothesisWord - (text, myStartTime, myEndTime); - words.add(word); - } catch (NumberFormatException nfe) { - System.out.println("NumberFormatException at line: " + line); - nfe.printStackTrace(); - } - } - if (!words.isEmpty()) { - HypothesisWord firstWord = words.get(0); - startTime = firstWord.getStartTime(); - HypothesisWord lastWord = - words.get(words.size() - 1); - endTime = lastWord.getEndTime(); - } - } - - - /** - * Returns the number of words in this hypothesis. - * - * @return the number of words in this hypothesis - */ - int getWordCount() { - return words.size(); - } - - - /** - * Returns a list of the words in this hypothesis. - * - * @return a list of the words in this hypothesis - */ - List getWords() { - List newList = new LinkedList(); - newList.addAll(words); - return newList; - } - - - /** - * Returns the start time of this hypothesis. - * - * @return the start time of this hypothesis - */ - float getStartTime() { - return startTime; - } - - - /** - * Returns the end time of this hypothesis. - * - * @return the end time of this hypothesis - */ - float getEndTime() { - return endTime; - } -} - -/** - * A word in the hypothesis, containing information about when the word started and ended. - */ -class HypothesisWord { - - private final String text; - private final float startTime; - private final float endTime; - - - /** - * Constructs a hypothesis word with the given start and end times. - * - * @param text the text of the hypothesized word - * @param startTime the starting time of the word - * @param endTime the ending time of the word - */ - HypothesisWord(String text, float startTime, float endTime) { - this.text = text; - this.startTime = startTime; - this.endTime = endTime; - } - - - /** - * Returns the text of the word. - * - * @return the text of the word - */ - String getText() { - return text; - } - - - /** - * Returns the starting time of the word. - * - * @return the starting time of the word - */ - float getStartTime() { - return startTime; - } - - - /** - * Returns the ending time of the word. - * - * @return the ending time of the word - */ - float getEndTime() { - return endTime; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/LogMath.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/LogMath.java deleted file mode 100755 index 784e2719..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/LogMath.java +++ /dev/null @@ -1,362 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ - -package edu.cmu.sphinx.util; - -/** - * Provides a set of methods for performing simple math in the log domain. - * - * The logarithmic base can be set by the - * property: edu.cmu.sphinx.util.LogMath.logBase - */ -public final class LogMath { - - public static final float LOG_ZERO = -Float.MAX_VALUE; - public static final float LOG_ONE = 0.f; - - // Singleton instance. - private static LogMath instance; - private static float logBase = 1.0001f; - private static boolean useTable = true; - - private float naturalLogBase; - private float inverseNaturalLogBase; - - private float theAddTable[]; - - private LogMath() { - naturalLogBase = (float) Math.log(logBase); - inverseNaturalLogBase = 1.0f / naturalLogBase; - if (useTable) { - // Now create the addTable table. - // summation needed in the loop - float innerSummation; - // First decide number of elements. - int entriesInTheAddTable; - final int veryLargeNumberOfEntries = 150000; - final int verySmallNumberOfEntries = 0; - // To decide size of table, take into account that a base - // of 1.0001 or 1.0003 converts probabilities, which are - // numbers less than 1, into integers. Therefore, a good - // approximation for the smallest number in the table, - // therefore the value with the highest index, is an - // index that maps into 0.5: indices higher than that, if - // they were present, would map to less values less than - // 0.5, therefore they would be mapped to 0 as - // integers. Since the table implements the expression: - // - // log(1.0 + base^(-index))) - // - // then the highest index would be: - // - // topIndex = - log(logBase^(0.5) - 1) - // - // where log is the log in the appropriate base. - // - // Added -Math.rint(...) to round to nearest - // integer. Added the negation to match the preceding - // documentation - entriesInTheAddTable = (int) -Math - .rint(linearToLog(logToLinear(0.5f) - 1)); - // We reach this max if the log base is 1.00007. The - // closer you get to 1, the higher the number of entries - // in the table. - if (entriesInTheAddTable > veryLargeNumberOfEntries) { - entriesInTheAddTable = veryLargeNumberOfEntries; - } - if (entriesInTheAddTable <= verySmallNumberOfEntries) { - throw new IllegalArgumentException("The log base " + logBase - + " yields a very small addTable. " - + "Either choose not to use the addTable, " - + "or choose a logBase closer to 1.0"); - } - // PBL added this just to see how many entries really are - // in the table - theAddTable = new float[entriesInTheAddTable]; - for (int index = 0; index < entriesInTheAddTable; ++index) { - // This loop implements the expression: - // - // log( 1.0 + power(base, index)) - // - // needed to add two numbers in the log domain. - innerSummation = (float) logToLinear(-index); - innerSummation += 1.0f; - theAddTable[index] = linearToLog(innerSummation); - } - } - } - - public static LogMath getLogMath() { - if (null == instance) { - synchronized(LogMath.class) { - if (null == instance) - instance = new LogMath(); - } - } - - return instance; - } - - /** - * Sets log base. - *

    - * According to forum discussions a value between 1.00001 and 1.0004 should - * be used for speech recognition. Going above 1.0005 will probably hurt. - * - * @param logBase Log base - */ - public static void setLogBase(float logBase) { - synchronized(LogMath.class) { - assert instance == null; - LogMath.logBase = logBase; - } - } - - /** - * The property that controls whether we use the old, slow (but correct) - * method of performing the LogMath.add by doing the actual computation. - * @param useTable to configure table lookups - */ - public static void setUseTable(boolean useTable) { - synchronized(LogMath.class) { - assert instance == null; - LogMath.useTable = useTable; - } - } - - /** - * Returns the summation of two numbers when the arguments and the result are in log.

    That is, it returns - * log(a + b) given log(a) and log(b)

    This method makes use of the equality:

    log(a - * + b) = log(a) + log (1 + exp(log(b) - log(a)))

    which is derived from:

    a + b - * = a * (1 + (b / a))

    which in turns makes use of:

    b / a = exp (log(b) - - * log(a))

    Important to notice that subtractAsLinear(a, b) is *not* the same as - * addAsLinear(a, -b), since we're in the log domain, and -b is in fact the inverse.

    No - * underflow/overflow check is performed.

    - * - * @param logVal1 value in log domain (i.e. log(val1)) to add - * @param logVal2 value in log domain (i.e. log(val2)) to add - * @return sum of val1 and val2 in the log domain - */ - public final float addAsLinear(float logVal1, float logVal2) { - float logHighestValue = logVal1; - float logDifference = logVal1 - logVal2; - /* - * [ EBG: maybe we should also have a function to add many numbers, * - * say, return the summation of all terms in a given vector, if * - * efficiency becomes an issue. - */ - // difference is always a positive number - if (logDifference < 0) { - logHighestValue = logVal2; - logDifference = -logDifference; - } - return logHighestValue + addTable(logDifference); - } - - /** - * Method used by add() internally. It returns the difference between the highest number and the total summation of - * two numbers.

    Considering the expression (in which we assume natural log)

    log(a + b) = log(a) + - * log(1 + exp(log(b) - log(a)))

    - *

    - * the current function returns the second term of the right hand side of the equality above, generalized for the - * case of any log base. This function can be constructed as a table, if table lookup is faster than actual - * computation. - * - * @param index the index into the addTable - * @return the value pointed to by index - */ - @SuppressWarnings("unused") - private float addTableActualComputation(float index) { - double logInnerSummation; - // Negate index, since the derivation of this formula implies - // the smallest number as a numerator, therefore the log of the - // ratio is negative - logInnerSummation = logToLinear(-index); - logInnerSummation += 1.0; - return linearToLog(logInnerSummation); - } - - /** - * Method used by add() internally. It returns the difference between the highest number and the total summation of - * two numbers.

    Considering the expression (in which we assume natural log)

    log(a + b) = log(a) + - * log(1 + exp(log(b) - log(a)))

    - *

    - * the current function returns the second term of the right hand side of the equality above, generalized for the - * case of any log base. This function is constructed as a table lookup. - * - * @param index the index into the addTable - * @return the value pointed to by index - * @throws IllegalArgumentException - */ - private float addTable(float index) throws IllegalArgumentException { - // int intIndex = (int) Math.rint(index); - int intIndex = (int) (index + 0.5); - // When adding two numbers, the highest one should be - // preserved, and therefore the difference should always - // be positive. - if (intIndex < theAddTable.length) { - return theAddTable[intIndex]; - } else { - return 0.0f; - } - } - - /** - * Returns the difference between two numbers when the arguments and the result are in log.

    That is, it - * returns log(a - b) given log(a) and log(b)

    Implementation is less efficient than add(), since - * we're less likely to use this function, provided for completeness. Notice however that the result only makes - * sense if the minuend is higher than the subtrahend. Otherwise, we should return the log of a negative number. - *

    It implements the subtraction as:

    log(a - b) = log(a) + log(1 - exp(log(b) - - * log(a)))

    No need to check for underflow/overflow.

    - * - * @param logMinuend value in log domain (i.e. log(minuend)) to be subtracted from - * @param logSubtrahend value in log domain (i.e. log(subtrahend)) that is being subtracted - * @return difference between minuend and the subtrahend in the log domain - * @throws IllegalArgumentException

    This is a very slow way to do this, but this method should rarely be used. - *

    - */ - public final float subtractAsLinear(float logMinuend, float logSubtrahend) - throws IllegalArgumentException { - double logInnerSummation; - if (logMinuend < logSubtrahend) { - throw new IllegalArgumentException("Subtraction results in log " - + "of a negative number: " + logMinuend + " - " - + logSubtrahend); - } - logInnerSummation = 1.0; - logInnerSummation -= logToLinear(logSubtrahend - logMinuend); - return logMinuend + linearToLog(logInnerSummation); - } - - /** - * Converts the source, which is assumed to be a log value whose base is sourceBase, to a log value whose base is - * resultBase. Possible values for both the source and result bases include Math.E, 10.0, LogMath.getLogBase(). If a - * source or result base is not supported, an IllegalArgumentException will be thrown.

    It takes advantage - * of the relation:

    log_a(b) = log_c(b) / lob_c(a)

    or:

    - * log_a(b) = log_c(b) * lob_a(c)

    where log_a(b) is logarithm of b base a - * etc.

    - * - * @param logSource log value whose base is sourceBase - * @param sourceBase the base of the log the source - * @param resultBase the base to convert the source log to - * @return converted value - * @throws IllegalArgumentException if arguments out of bounds - */ - public static float logToLog(float logSource, float sourceBase, - float resultBase) throws IllegalArgumentException { - // TODO: This is slow, but it probably doesn't need - // to be too fast. - // It can be made more efficient if one of the bases is - // Math.E. So maybe we should consider two functions logToLn and - // lnToLog instead of a generic function like this?? - float lnSourceBase = (float) Math.log(sourceBase); - float lnResultBase = (float) Math.log(resultBase); - return (logSource * lnSourceBase / lnResultBase); - } - - /** - * Converts the source, which is a number in base Math.E, to a log value which base is the LogBase of this LogMath. - * - * @return converted value - * @param logSource the number in base Math.E to convert - */ - public final float lnToLog(float logSource) { - return (logSource * inverseNaturalLogBase); - } - - /** - * Converts the source, which is a number in base 10, to a log value which base is the LogBase of this LogMath. - * - * @return converted value - * @param logSource the number in base Math.E to convert - */ - public final float log10ToLog(float logSource) { - return logToLog(logSource, 10.0f, logBase); - } - - /** - * Converts the source, whose base is the LogBase of this LogMath, to a log value which is a number in base Math.E. - * - * @param logSource the number to convert to base Math.E - * @return converted value - */ - public final float logToLn(float logSource) { - return logSource * naturalLogBase; - } - - /** - * Converts the value from linear scale to log scale. The log scale numbers are limited by the range of the type - * float. The linear scale numbers can be any double value. - * - * @param linearValue the value to be converted to log scale - * @return the value in log scale - * @throws IllegalArgumentException if value out of range - */ - public final float linearToLog(double linearValue) - throws IllegalArgumentException { - return (float)Math.log(linearValue) * inverseNaturalLogBase; - } - - /** - * Converts the value from log scale to linear scale. - * - * @param logValue the value to be converted to the linear scale - * @return the value in the linear scale - */ - public final double logToLinear(float logValue) { - return Math.exp(logToLn(logValue)); - } - - /** @return the actual log base. - */ - public final float getLogBase() { - return logBase; - } - - public boolean isUseTable() { - return useTable; - } - - /** - * Returns the log (base 10) of value - * - * @param value the value to take the log of - * @return the log (base 10) of value - */ - // [ EBG: Shouldn't we be using something like logToLog(value, base, 10) - // for this? ] - public static float log10(float value) { - return (float) (0.4342944819 * java.lang.Math.log(value)); - // If you want to get rid of the constant: - // return ((1.0f / Math.log(10.0f)) * Math.log(value)); - } - - /** Converts a vector from linear domain to log domain using a given LogMath-instance for conversion. - * @param vector to convert in-place - */ - public void linearToLog(float[] vector) { - int nbGaussians = vector.length; - for (int i = 0; i < nbGaussians; i++) { - vector[i] = linearToLog(vector[i]); - } - } - - - /** Converts a vector from log to linear domain using a given LogMath-instance for conversion. - * @param vector to convert - * @param out result - */ - public void logToLinear(float[] vector, float[] out) { - for (int i = 0; i < vector.length; i++) { - out[i] = (float)logToLinear(vector[i]); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/MatrixUtils.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/MatrixUtils.java deleted file mode 100755 index 4168dc20..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/MatrixUtils.java +++ /dev/null @@ -1,79 +0,0 @@ -package edu.cmu.sphinx.util; - -import java.text.DecimalFormat; - -/** Some simple matrix and vector manipulation methods. */ -public class MatrixUtils { - - public static final DecimalFormat df = new DecimalFormat("0.00"); - - - public static String toString(double[][] m) { - StringBuilder s = new StringBuilder("["); - - for (double[] row : m) { - s.append(toString(row)); - s.append('\n'); - } - - return s.append(" ]").toString(); - } - - - public static String toString(double[] m) { - StringBuilder s = new StringBuilder("["); - - for (double val : m) { - s.append(' ').append(df.format(val)); - } - - return s.append(" ]").toString(); - } - - - public static int numCols(double[][] m) { - return m[0].length; - } - - - public static String toString(float[][] matrix) { - return toString(float2double(matrix)); - } - - - public static float[] double2float(double[] values) { // what a mess !!! -> fixme: how to convert number arrays ? - float[] newVals = new float[values.length]; - for (int i = 0; i < newVals.length; i++) { - newVals[i] = (float) values[i]; - } - - return newVals; - } - - - public static float[][] double2float(double[][] array) { - float[][] floatArr = new float[array.length][array[0].length]; - for (int i = 0; i < array.length; i++) - floatArr[i] = double2float(array[i]); - - return floatArr; - } - - - public static double[] float2double(float[] values) { - double[] doubArr = new double[values.length]; - for (int i = 0; i < doubArr.length; i++) - doubArr[i] = values[i]; - - return doubArr; - } - - - public static double[][] float2double(float[][] array) { - double[][] doubArr = new double[array.length][array[0].length]; - for (int i = 0; i < array.length; i++) - doubArr[i] = float2double(array[i]); - - return doubArr; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/NISTAlign.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/NISTAlign.java deleted file mode 100755 index 5409c519..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/NISTAlign.java +++ /dev/null @@ -1,977 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.util; - -import java.io.BufferedReader; -import java.io.FileInputStream; -import java.io.InputStreamReader; -import java.text.DecimalFormat; -import java.util.LinkedList; -import java.util.ListIterator; -import java.util.StringTokenizer; - -/** - * Implements a portion of the NIST align/scoring algorithm to compare a reference string to a hypothesis string. It - * only keeps track of substitutions, insertions, and deletions. - */ -public class NISTAlign { - - /* Constants that help with the align. The following are - * used in the backtrace table and backtrace list. - */ - final static int OK = 0; - final static int SUBSTITUTION = 1; - final static int INSERTION = 2; - final static int DELETION = 3; - - /* Constants that help with the align. The following are - * used to create the penalty table. - */ - final static int MAX_PENALTY = 1000000; - final static int SUBSTITUTION_PENALTY = 100; - final static int INSERTION_PENALTY = 75; - final static int DELETION_PENALTY = 75; - - /* Used for padding out aligned strings. - */ - final static String STARS = - "********************************************"; - final static String SPACES = - " "; - final static String HRULE = - "============================================" - + "================================"; - - /** Totals over the life of this class. These can be reset to 0 with a call to resetTotals. */ - private int totalSentences; - private int totalSentencesWithErrors; - private int totalSentencesWithSubtitutions; - private int totalSentencesWithInsertions; - private int totalSentencesWithDeletions; - private int totalReferenceWords; - private int totalHypothesisWords; - private int totalAlignedWords; - private int totalWordsCorrect; - private int totalSubstitutions; - private int totalInsertions; - private int totalDeletions; - - /** Error values for one call to 'align' */ - private int substitutions; - private int insertions; - private int deletions; - private int correct; - - /** The raw reference string. Updated with each call to 'align'. */ - private String rawReference; - - /** - * The reference annotation; typically the name of the audio file for the reference string. This is an optional - * part of the rawReference string. If it is included, it is appended to the end of the string in parentheses. - * Updated with each call to 'align'. - */ - private String referenceAnnotation; - - /** - * Ordered list of words from rawReference after the annotation has been removed. Updated with each call to - * 'align'. - */ - private LinkedList referenceItems; - - /** Aligned list of words from rawReference. Created in alignWords. Updated with each call to 'align'. */ - private LinkedList alignedReferenceWords; - - /** The raw hypothesis string. Updated with each call to 'align'. */ - private String rawHypothesis; - - /** - * Ordered list of words from rawHypothesis after the annotation has been removed. Updated with each call to - * 'align'. - */ - private LinkedList hypothesisItems; - - /** Aligned list of words from rawHypothesis. Created in alignWords. Updated with each call to 'align'. */ - private LinkedList alignedHypothesisWords; - - /** Helpers to create percentage strings. */ - static final DecimalFormat percentageFormat = new DecimalFormat("##0.0%"); - - - private boolean showResults; - private boolean showAlignedResults; - - - /** Creates a new NISTAlign object. - * @param showResults show decoding result - * @param showAlignedResults show alignment - */ - public NISTAlign(boolean showResults, boolean showAlignedResults) { - this.showResults = showResults; - this.showAlignedResults = showAlignedResults; - resetTotals(); - } - - - /** - * Sets whether results are displayed - * - * @param showResults true if the results should be displayed - */ - public void setShowResults(boolean showResults) { - this.showResults = showResults; - } - - - /** - * Sets whether aligned results are displayed - * - * @param showAlignedResults true if the aligned results should be displayed - */ - public void setShowAlignedResults(boolean showAlignedResults) { - this.showAlignedResults = showAlignedResults; - } - - - /** Reset the total insertions, deletions, and substitutions counts for this class. */ - public void resetTotals() { - totalSentences = 0; - totalSentencesWithErrors = 0; - totalSentencesWithSubtitutions = 0; - totalSentencesWithInsertions = 0; - totalSentencesWithDeletions = 0; - totalReferenceWords = 0; - totalHypothesisWords = 0; - totalAlignedWords = 0; - totalWordsCorrect = 0; - totalSubstitutions = 0; - totalInsertions = 0; - totalDeletions = 0; - } - - - /** - * Performs the NIST alignment on the reference and hypothesis strings. This has the side effect of updating nearly - * all the fields of this class. - * - * @param reference the reference string - * @param hypothesis the hypothesis string - * @return true if the reference and hypothesis match - */ - public boolean align(String reference, String hypothesis) { - int annotationIndex; - - // Save the original strings for future reference. - // - rawReference = reference; - rawHypothesis = hypothesis; - - // Strip the annotation off the reference string and - // save it. - // - annotationIndex = rawReference.indexOf('('); - if (annotationIndex != -1) { - referenceAnnotation = rawReference.substring(annotationIndex); - referenceItems = toList(rawReference.substring(0, annotationIndex)); - } else { - referenceAnnotation = null; - referenceItems = toList(rawReference); - } - - // Strip the annotation off the hypothesis string. - // If one wanted to be anal retentive, they might compare - // the hypothesis annotation to the reference annotation, - // but I'm not quite that obsessive. - // - annotationIndex = rawHypothesis.indexOf('('); - if (annotationIndex != -1) { - hypothesisItems = toList( - rawHypothesis.substring(0, annotationIndex)); - } else { - hypothesisItems = toList(rawHypothesis); - } - - // Reset the counts for this sentence. - // - substitutions = 0; - insertions = 0; - deletions = 0; - - // Turn the list of reference and hypothesis words into two - // aligned lists of strings. This has the side effect of - // creating alignedReferenceWords and alignedHypothesisWords. - // - alignWords(backtrace(createBacktraceTable(referenceItems, - hypothesisItems, new Comparator () { - public boolean isSimilar(Object ref, Object hyp) { - if (ref instanceof String && hyp instanceof String) { - return ((String)ref).equals(hyp); - } - return false; - } - })), new StringRenderer () { - - public String getRef(Object ref, Object hyp) { - return (String)ref; - } - public String getHyp(Object ref, Object hyp) { - return (String)hyp; - } - - }); - - // Compute the number of correct words in the hypothesis. - // - correct = alignedReferenceWords.size() - - (insertions + deletions + substitutions); - - // Update the totals that are kept over the lifetime of this - // class. - // - updateTotals(); - - return (insertions + deletions + substitutions) == 0; - } - - - /** - * Returns the reference string. This string will be filtered (all spurious whitespace removed and annotation - * removed) and set to all lower case. - * - * @return the reference string - */ - public String getReference() { - return toString(referenceItems); - } - - - /** - * Returns the hypothesis string. This string will be filtered (all spurious whitespace removed and annotation - * removed) and set to all lower case. - * - * @return the hypothesis string - */ - public String getHypothesis() { - return toString(hypothesisItems); - } - - - /** - * Returns the aligned reference string. - * - * @return the aligned reference string - */ - public String getAlignedReference() { - return toString(alignedReferenceWords); - } - - - /** - * Returns the aligned hypothesis string. - * - * @return the aligned hypothesis string - */ - public String getAlignedHypothesis() { - return toString(alignedHypothesisWords); - } - - - /** - * Gets the total number of word errors for all calls to align. - * - * @return the total number of word errors for all calls to align - */ - public int getTotalWordErrors() { - return totalSubstitutions + totalInsertions + totalDeletions; - } - - - /** - * Returns the total word accuracy. - * - * @return the accuracy between 0.0 and 1.0 - */ - public float getTotalWordAccuracy() { - if (totalReferenceWords == 0) { - return 0; - } else { - return ((float) totalWordsCorrect) / ((float) totalReferenceWords); - } - } - - - /** - * Returns the total word accuracy. - * - * @return the accuracy between 0.0 and 1.0 - */ - public float getTotalWordErrorRate() { - if (totalReferenceWords == 0) { - return 0; - } else { - return ((float) getTotalWordErrors()) - / ((float) totalReferenceWords); - } - } - - - /** - * Returns the total sentence accuracy. - * - * @return the accuracy between 0.0 and 1.0 - */ - public float getTotalSentenceAccuracy() { - int totalSentencesCorrect = totalSentences - totalSentencesWithErrors; - if (totalSentences == 0) { - return 0; - } else { - return ((float) totalSentencesCorrect / (float) totalSentences); - } - } - - - /** - * Gets the total number of words - * - * @return the total number of words - */ - public int getTotalWords() { - return totalReferenceWords; - } - - - /** - * Gets the total number of substitution errors - * - * @return the total number of substitutions - */ - public int getTotalSubstitutions() { - return totalSubstitutions; - } - - - /** - * Gets the total number of insertion errors - * - * @return the total number of insertion errors - */ - public int getTotalInsertions() { - return totalInsertions; - } - - - /** - * Gets the total number of deletions - * - * @return the total number of deletions - */ - public int getTotalDeletions() { - return totalDeletions; - } - - - /** - * Gets the total number of sentences - * - * @return the total number of sentences - */ - public int getTotalSentences() { - return totalSentences; - } - - - /** - * Gets the total number of sentences with errors - * - * @return the total number of sentences with errors - */ - public int getTotalSentencesWithErrors() { - return totalSentencesWithDeletions; - } - - - /** - * Prints the results for this sentence to System.out. If you want the output to match the NIST output, see - * printNISTSentenceSummary. - * - * @see #printNISTSentenceSummary - */ - public void printSentenceSummary() { - if (showResults) { - System.out.println("REF: " + toString(referenceItems)); - System.out.println("HYP: " + toString(hypothesisItems)); - } - - if (showAlignedResults) { - System.out.println("ALIGN_REF: " + toString(alignedReferenceWords)); - System.out.println("ALIGN_HYP: " + toString(alignedHypothesisWords)); - } - } - - - /** - * Prints the total summary for all calls. If you want the output to match the NIST output, see - * printNISTTotalSummary. - * - * @see #printNISTTotalSummary - */ - public void printTotalSummary() { - if (totalSentences > 0) { - System.out.print( - " Accuracy: " + toPercentage("##0.000%", - getTotalWordAccuracy())); - System.out.println( - " Errors: " + getTotalWordErrors() - + " (Sub: " + totalSubstitutions - + " Ins: " + totalInsertions - + " Del: " + totalDeletions + ')'); - System.out.println( - " Words: " + totalReferenceWords - + " Matches: " + totalWordsCorrect - + " WER: " + toPercentage("##0.000%", - getTotalWordErrorRate())); - System.out.println( - " Sentences: " + totalSentences - + " Matches: " + (totalSentences - totalSentencesWithErrors) - + " SentenceAcc: " + toPercentage("##0.000%", - getTotalSentenceAccuracy())); - } - } - - - /** Prints the results for this sentence to System.out. This matches the output from the NIST aligner. */ - public void printNISTSentenceSummary() { - int sentenceErrors = substitutions + insertions + deletions; - - System.out.println(); - - System.out.print("REF: " + toString(alignedReferenceWords)); - if (referenceAnnotation != null) { - System.out.print(' ' + referenceAnnotation); - } - System.out.println(); - - System.out.print("HYP: " + toString(alignedHypothesisWords)); - if (referenceAnnotation != null) { - System.out.print(' ' + referenceAnnotation); - } - System.out.println(); - - System.out.println(); - - if (referenceAnnotation != null) { - System.out.println("SENTENCE " + totalSentences - + " " + referenceAnnotation); - } else { - System.out.println("SENTENCE " + totalSentences); - } - - System.out.println("Correct = " - + toPercentage("##0.0%", - correct, - referenceItems.size()) - + padLeft(5, correct) - + " (" - + padLeft(6, totalWordsCorrect) - + ')'); - System.out.println("Errors = " - + toPercentage("##0.0%", - sentenceErrors, - referenceItems.size()) - + padLeft(5, sentenceErrors) - + " (" - + padLeft(6, totalSentencesWithErrors) - + ')'); - - System.out.println(); - System.out.println(HRULE); - } - - - /** Prints the summary for all calls to align to System.out. This matches the output from the NIST aligner. */ - public void printNISTTotalSummary() { - int totalSentencesCorrect = totalSentences - totalSentencesWithErrors; - - System.out.println(); - System.out.println("---------- SUMMARY ----------"); - System.out.println(); - System.out.println("SENTENCE RECOGNITION PERFORMANCE:"); - System.out.println( - "sentences " + totalSentences); - System.out.println( - " correct " - + toPercentage("##0.0%", totalSentencesCorrect, totalSentences) - + " (" + padLeft(4, totalSentencesCorrect) + ')'); - System.out.println( - " with error(s) " - + toPercentage("##0.0%", totalSentencesWithErrors, totalSentences) - + " (" + padLeft(4, totalSentencesWithErrors) + ')'); - System.out.println( - " with substitutions(s) " - + toPercentage("##0.0%", totalSentencesWithSubtitutions, totalSentences) - + " (" + padLeft(4, totalSentencesWithSubtitutions) + ')'); - System.out.println( - " with insertion(s) " - + toPercentage("##0.0%", totalSentencesWithInsertions, totalSentences) - + " (" + padLeft(4, totalSentencesWithInsertions) + ')'); - System.out.println( - " with deletions(s) " - + toPercentage("##0.0%", totalSentencesWithDeletions, totalSentences) - + " (" + padLeft(4, totalSentencesWithDeletions) + ')'); - - System.out.println(); - System.out.println(); - System.out.println(); - - System.out.println("WORD RECOGNITION PERFORMANCE:"); - System.out.println( - "Correct = " - + toPercentage("##0.0%", totalWordsCorrect, totalReferenceWords) - + " (" + padLeft(6, totalWordsCorrect) + ')'); - System.out.println( - "Substitutions = " - + toPercentage("##0.0%", totalSubstitutions, totalReferenceWords) - + " (" + padLeft(6, totalSubstitutions) + ')'); - System.out.println( - "Deletions = " - + toPercentage("##0.0%", totalDeletions, totalReferenceWords) - + " (" + padLeft(6, totalDeletions) + ')'); - System.out.println( - "Insertions = " - + toPercentage("##0.0%", totalInsertions, totalReferenceWords) - + " (" + padLeft(6, totalInsertions) + ')'); - System.out.println( - "Errors = " - + toPercentage("##0.0%", getTotalWordErrors(), totalReferenceWords) - + " (" + padLeft(6, getTotalWordErrors()) + ')'); - - System.out.println(); - - System.out.println( - "Ref. words = " + padLeft(6, totalReferenceWords)); - System.out.println( - "Hyp. words = " + padLeft(6, totalHypothesisWords)); - System.out.println( - "Aligned words = " + padLeft(6, totalAlignedWords)); - - System.out.println(); - System.out.println( - "WORD ACCURACY= " - + toPercentage("##0.000%", totalWordsCorrect, totalReferenceWords) - + " (" - + padLeft(5, totalWordsCorrect) - + '/' - + padLeft(5, totalReferenceWords) - + ") ERRORS= " - + toPercentage("##0.000%", - getTotalWordErrors(), - totalReferenceWords) - + " (" - + padLeft(5, getTotalWordErrors()) - + '/' - + padLeft(5, totalReferenceWords) - + ')'); - - System.out.println(); - } - - - /** - * Creates the backtrace table. This is magic. The basic idea is that the penalty table contains a set of penalty - * values based on some strategically selected numbers. I'm not quite sure what they are, but they help determine - * the backtrace table values. The backtrace table contains information used to help determine if words matched - * (OK), were inserted (INSERTION), substituted (SUBSTITUTION), or deleted (DELETION). - * - * @param referenceItems the ordered list of reference words - * @param hypothesisItems the ordered list of hypothesis words - * @return the backtrace table - */ - int[][] createBacktraceTable(LinkedList referenceItems, - LinkedList hypothesisItems, - Comparator comparator) { - int[][] penaltyTable; - int[][] backtraceTable; - int penalty; - int minPenalty; - - penaltyTable = - new int[referenceItems.size() + 1][hypothesisItems.size() + 1]; - - backtraceTable = - new int[referenceItems.size() + 1][hypothesisItems.size() + 1]; - - // Initialize the penaltyTable and the backtraceTable. The - // rows of each table represent the words in the reference - // string. The columns of each table represent the words in - // the hypothesis string. - // - penaltyTable[0][0] = 0; - backtraceTable[0][0] = OK; - - // The lower left of the tables represent deletions. If you - // think about this, a shorter hypothesis string will have - // deleted words from the reference string. - // - for (int i = 1; i <= referenceItems.size(); i++) { - penaltyTable[i][0] = DELETION_PENALTY * i; - backtraceTable[i][0] = DELETION; - } - - // The upper right of the tables represent insertions. If - // you think about this, a longer hypothesis string will have - // inserted words. - // - for (int j = 1; j <= hypothesisItems.size(); j++) { - penaltyTable[0][j] = INSERTION_PENALTY * j; - backtraceTable[0][j] = INSERTION; - } - - // Row-by-row, column-by-column, fill out the tables. - // The goal is to keep the penalty for each cell to a - // minimum. - // - for (int i = 1; i <= referenceItems.size(); i++) { - for (int j = 1; j <= hypothesisItems.size(); j++) { - minPenalty = MAX_PENALTY; - - // First assume that this represents a deletion. - // - penalty = penaltyTable[i - 1][j] + DELETION_PENALTY; - if (penalty < minPenalty) { - minPenalty = penalty; - penaltyTable[i][j] = penalty; - backtraceTable[i][j] = DELETION; - } - - // If the words match, we'll assume it's OK. - // Otherwise, we assume we have a substitution. - // - if (comparator.isSimilar(referenceItems.get(i - 1), (hypothesisItems.get(j - 1)))) { - penalty = penaltyTable[i - 1][j - 1]; - if (penalty < minPenalty) { - minPenalty = penalty; - penaltyTable[i][j] = penalty; - backtraceTable[i][j] = OK; - } - } else { - penalty = penaltyTable[i - 1][j - 1] + SUBSTITUTION_PENALTY; - if (penalty < minPenalty) { - minPenalty = penalty; - penaltyTable[i][j] = penalty; - backtraceTable[i][j] = SUBSTITUTION; - } - } - - // If you've made it this far, it should be obvious I - // have no idea what the heck this code is doing. I'm - // just doing a transliteration. - // - penalty = penaltyTable[i][j - 1] + INSERTION_PENALTY; - if (penalty < minPenalty) { - minPenalty = penalty; - penaltyTable[i][j] = penalty; - backtraceTable[i][j] = INSERTION; - } - } - } - return backtraceTable; - } - - - /** - * Backtraces through the penalty table. This starts at the "lower right" corner (i.e., the last word of the longer - * of the reference vs. hypothesis strings) and works its way backwards. - * - * @param backtraceTable created from call to createBacktraceTable - * @return a linked list of Integers representing the backtrace - */ - LinkedList backtrace(int[][] backtraceTable) { - LinkedList list = new LinkedList(); - int i = referenceItems.size(); - int j = hypothesisItems.size(); - while ((i >= 0) && (j >= 0)) { - list.add(backtraceTable[i][j]); - switch (backtraceTable[i][j]) { - case OK: - i--; - j--; - break; - case SUBSTITUTION: - i--; - j--; - substitutions++; - break; - case INSERTION: - j--; - insertions++; - break; - case DELETION: - i--; - deletions++; - break; - } - } - return list; - } - - - /** - * Based on the backtrace information, words are aligned as appropriate with insertions and deletions causing - * asterisks to be placed in the word lists. This generates the alignedReferenceWords and alignedHypothesisWords - * lists. - * - * @param backtrace the backtrace list created in backtrace - */ - void alignWords(LinkedList backtrace, StringRenderer renderer) { - ListIterator referenceWordsIterator = referenceItems.listIterator(); - ListIterator hypothesisWordsIterator = hypothesisItems.listIterator(); - String referenceWord; - String hypothesisWord; - Object a = null; - Object b = null; - - alignedReferenceWords = new LinkedList(); - alignedHypothesisWords = new LinkedList(); - - - for (int m = backtrace.size() - 2; m >= 0; m--) { - int backtraceEntry = backtrace.get(m); - - if (backtraceEntry != INSERTION) { - a = referenceWordsIterator.next(); - referenceWord = renderer.getRef(a, b); - } else { - referenceWord = null; - } - if (backtraceEntry != DELETION) { - b = hypothesisWordsIterator.next(); - hypothesisWord = renderer.getHyp(a, b); - } else { - hypothesisWord = null; - } - switch (backtraceEntry) { - case SUBSTITUTION: { - referenceWord = referenceWord.toUpperCase(); - hypothesisWord = hypothesisWord.toUpperCase(); - break; - } - case INSERTION: { - hypothesisWord = hypothesisWord.toUpperCase(); - break; - } - case DELETION: { - referenceWord = referenceWord.toUpperCase(); - break; - } - case OK: - break; - } - - // Expand the missing words out to be all *'s. - // - if (referenceWord == null) { - referenceWord = STARS.substring(0, hypothesisWord.length()); - } - if (hypothesisWord == null) { - hypothesisWord = STARS.substring(0, referenceWord.length()); - } - - // Fill the words up with spaces so they are the same - // length. - // - if (referenceWord.length() > hypothesisWord.length()) { - hypothesisWord = hypothesisWord.concat( - SPACES.substring(0, - referenceWord.length() - - hypothesisWord.length())); - } else if (referenceWord.length() < hypothesisWord.length()) { - referenceWord = referenceWord.concat( - SPACES.substring(0, - hypothesisWord.length() - - referenceWord.length())); - } - - alignedReferenceWords.add(referenceWord); - alignedHypothesisWords.add(hypothesisWord); - } - } - - - /** Updates the total counts based on the current alignment. */ - void updateTotals() { - totalSentences++; - if ((substitutions + insertions + deletions) != 0) { - totalSentencesWithErrors++; - } - if (substitutions != 0) { - totalSentencesWithSubtitutions++; - } - if (insertions != 0) { - totalSentencesWithInsertions++; - } - if (deletions != 0) { - totalSentencesWithDeletions++; - } - totalReferenceWords += referenceItems.size(); - totalHypothesisWords += hypothesisItems.size(); - totalAlignedWords += alignedReferenceWords.size(); - - totalWordsCorrect += correct; - totalSubstitutions += substitutions; - totalInsertions += insertions; - totalDeletions += deletions; - } - - - /** - * Turns the numerator/denominator into a percentage. - * - * @param pattern percentage pattern (ala DecimalFormat) - * @param numerator the numerator - * @param denominator the denominator - * @return a String that represents the percentage value. - */ - String toPercentage(String pattern, int numerator, int denominator) { - percentageFormat.applyPattern(pattern); - return padLeft( - 6, - percentageFormat.format((double) numerator - / (double) denominator)); - } - - - /** - * Turns the float into a percentage. - * - * @param pattern percentage pattern (ala DecimalFormat) - * @param value the floating point value - * @return a String that represents the percentage value. - */ - String toPercentage(String pattern, float value) { - percentageFormat.applyPattern(pattern); - return percentageFormat.format(value); - } - - - /** - * Turns the integer into a left-padded string. - * - * @param width the total width of String, including spaces - * @param i the integer - * @return a String padded left with spaces - */ - String padLeft(int width, int i) { - return padLeft(width, Integer.toString(i)); - } - - - /** - * Pads a string to the left with spaces (i.e., prepends spaces to the string so it fills out the given width). - * - * @param width the total width of String, including spaces - * @param string the String to pad - * @return a String padded left with spaces - */ - String padLeft(int width, String string) { - int len = string.length(); - if (len < width) { - return SPACES.substring(0, width - len).concat(string); - } else { - return string; - } - } - - - /** - * Converts the given String or words to a LinkedList. - * - * @param s the String of words to parse to a LinkedList - * @return a list, one word per item - */ - LinkedList toList(String s) { - LinkedList list = new LinkedList(); - StringTokenizer st = new StringTokenizer(s.trim()); - while (st.hasMoreTokens()) { - String token = st.nextToken(); - list.add(token); - } - return list; - } - - - /** - * convert the list of words back to a space separated string - * - * @param list the list of words - * @return a space separated string - */ - private String toString(LinkedList list) { - if (list == null || list.isEmpty()) - return ""; - StringBuilder sb = new StringBuilder(); - ListIterator iterator = list.listIterator(); - while (iterator.hasNext()) - sb.append(iterator.next()).append(' '); - sb.setLength(sb.length() - 1); - return sb.toString(); - } - - - /* - * Takes two filenames -- the first contains a list of reference sentences, the second contains a list of hypothesis - * sentences. Aligns each pair of sentences and outputs the individual and total results. - */ - public static void main(String args[]) { - NISTAlign align = new NISTAlign(true, true); - - BufferedReader referenceFile; - BufferedReader hypothesisFile; - String reference; - String hypothesis; - - try { - referenceFile = new BufferedReader( - new InputStreamReader(new FileInputStream(args[0]))); - hypothesisFile = new BufferedReader( - new InputStreamReader(new FileInputStream(args[1]))); - try { - while (true) { - reference = referenceFile.readLine(); - hypothesis = hypothesisFile.readLine(); - if ((reference == null) || (hypothesis == null)) { - break; - } else { - align.align(reference, hypothesis); - align.printNISTSentenceSummary(); - } - } - } catch (java.io.IOException e) { - } - align.printNISTTotalSummary(); - } catch (Exception e) { - System.err.println(e); - e.printStackTrace(); - System.out.println(); - System.out.println("Usage: align "); - System.out.println(); - } - } - - interface Comparator { - public boolean isSimilar (Object ref, Object hyp); - } - - - public interface StringRenderer { - String getRef (Object ref, Object hyp); - String getHyp (Object ref, Object hyp); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/PooledBatchManager.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/PooledBatchManager.java deleted file mode 100755 index e09151f9..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/PooledBatchManager.java +++ /dev/null @@ -1,271 +0,0 @@ -/* - * Copyright 2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.util; - -import java.io.*; -import java.net.InetAddress; -import java.nio.channels.FileLock; -import java.util.List; - -/** A simple implementation of the batch manager suitable for single threaded batch processing */ -public class PooledBatchManager implements BatchManager { - - private final String batchFile; - private final int skip; - private File processingFile; - - private final static File topDir = new File("tests"); - private final static File inputDir = new File(topDir, "ToRun"); - private final static File inProcessDir = new File(topDir, "InProcess"); - private final static File completedDir = new File(topDir, "Completed"); - private final static File resultsDir = new File(topDir, "Results"); - private final static File lockFile = new File(".lock"); - private FileLock lock; - private PrintStream oldOut; - private final FileFilter testFileFilter = new TestFileFilter(); - - - /** - * Creates a pooled batch manager - * - * @param filename the name of the batch file - * @param skip items to skip between runs - */ - - public PooledBatchManager(String filename, int skip) { - this.batchFile = filename; - this.skip = skip; - } - - - /** Starts processing the batch */ - public void start() throws IOException { - - // redirect standard out to a file - lock(); - try { - createDirectories(); - redirectStdout(); - } finally { - unlock(); - } - } - - - /** - * Gets the next available batch item or null if no more are available - * - * @return the next available batch item - * @throws IOException if an I/O error occurs while reading the next item from the batch file. - */ - public BatchItem getNextItem() throws IOException { - lock(); - try { - // move the last 'in process' file to the 'completed' - // tests section. - - if (processingFile != null) { - File completedFile = getCompletedFile(processingFile); - processingFile.renameTo(completedFile); - processingFile = null; - } - File testFile = getNextFile(); - if (testFile != null) { - processingFile = getProcessingFile(testFile); - testFile.renameTo(processingFile); - System.out.println("Processing: " + processingFile); - return getBatchItem(processingFile); - } else { - return null; - } - } finally { - unlock(); - } - } - - - /** Stops processing the batch */ - public void stop() throws IOException { - lock(); - try { - closeStdout(); - } finally { - unlock(); - } - } - - - /** - * Returns the name of the file - * - * @return the filename - */ - public String getFilename() { - return batchFile; - } - - - /** Creates the test directories as necessary */ - private void createDirectories() throws IOException { - if (!topDir.isDirectory()) { - topDir.mkdir(); - inProcessDir.mkdir(); - completedDir.mkdir(); - resultsDir.mkdir(); - createInputDirectory(); - } - } - - - /** Creates the input directory */ - private void createInputDirectory() throws IOException { - inputDir.mkdir(); - // read in the batch file - List list = BatchFile.getLines(batchFile, skip); - - for (int i = 0; i < list.size(); i++) { - String name = Integer.toString(i + 1); - String line = list.get(i); - createInputFile(inputDir, name, line); - } - } - - - /** - * Creates the individual batch files - * - * @param dir the directory to place the input file in - * @param name the name of the file - * @param line the contents of the file - */ - private void createInputFile(File dir, String name, String line) - throws IOException { - - File path = new File(dir, name); - FileOutputStream fos = new FileOutputStream(path); - PrintStream ps = new PrintStream(fos); - ps.println(line); - ps.close(); - } - - - /** Redirects standard out to a file in the results directory with a name 'Results_xxx.out' */ - private void redirectStdout() throws IOException { - String myName = getMyName(); - File resultFile = File.createTempFile(myName, ".out", resultsDir); - - FileOutputStream fos = new FileOutputStream(resultFile); - PrintStream ps = new PrintStream(fos); - oldOut = System.out; - System.setOut(ps); - - System.out.println("# These results collected on " + getMyName()); - } - - - /** - * Gets my network name - * - * @return my network name - */ - private String getMyName() throws IOException { - return InetAddress.getLocalHost().getHostName(); - } - - - /** Close the redirected stdout and restore it to what it was before we redirected it. */ - private void closeStdout() throws IOException { - System.out.close(); - System.setOut(oldOut); - } - - - /** Lock the test suite so we can manipulate the set of tests */ - private void lock() throws IOException { - RandomAccessFile raf = new RandomAccessFile(lockFile, "rw"); - lock = raf.getChannel().lock(); - raf.close(); - } - - - /** unlock the test suite so we can manipulate the set of tests */ - private void unlock() throws IOException { - lock.release(); - lock = null; - } - - - /** - * Given an 'in process' file, generate the corresponding completed file. - * - * @param file the in process file - * @return the completed file - */ - private File getCompletedFile(File file) { - return new File(completedDir, file.getName()); - } - - - /** - * Given an 'input' file, generate the corresponding inProcess file. - * - * @param file the in process file - * @return the completed file - */ - private File getProcessingFile(File file) { - return new File(inProcessDir, file.getName()); - } - - - /** returns the next batch item file in the input directory */ - private File getNextFile() throws IOException { - File[] match = inputDir.listFiles(testFileFilter); - - if (match.length > 0) { - return match[0]; - } - return null; - } - - - /** - * Given a file parse the contents of the file into a BatchItem - * - * @param file the file to parse - * @return the contents in the form of a batch item - */ - private BatchItem getBatchItem(File file) throws IOException { - List list = BatchFile.getLines(file.getPath()); - if (list.size() != 1) { - throw new IOException("Bad batch file size"); - } - String line = list.get(0); - return new BatchItem(BatchFile.getFilename(line), - BatchFile.getReference(line)); - } -} - -/** Filter that only yields filenames that are integer numbers */ -class TestFileFilter implements FileFilter { - - public boolean accept(File pathname) { - String name = pathname.getName(); - try { - Integer.parseInt(name); - return true; - } catch (NumberFormatException nfe) { - return false; - } - } -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/Range.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/Range.java deleted file mode 100755 index cf68f946..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/Range.java +++ /dev/null @@ -1,28 +0,0 @@ -package edu.cmu.sphinx.util; - -public class Range { - - private int start; - private int end; - - public Range(int start, int end) { - this.start = start; - this.end = end; - } - - public boolean contains(int shift) { - return shift >= start && shift < end; - } - - public int lowerEndpoint() { - return start; - } - - public int upperEndpoint() { - return end; - } - - public String toString() { - return String.format("[%d, %d]", start, end); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/ReferenceSource.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/ReferenceSource.java deleted file mode 100755 index b871d6f7..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/ReferenceSource.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - *[B - */ -package edu.cmu.sphinx.util; - -import java.util.List; - -/** A source of reference texts. */ -public interface ReferenceSource { - - /** @return a list of reference texts. */ - public List getReferences(); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/SimpleBatchManager.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/SimpleBatchManager.java deleted file mode 100755 index de1cba10..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/SimpleBatchManager.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright 2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.util; - -import java.io.IOException; -import java.util.List; - - -/** A simple implementation of the batch manager suitable for single threaded batch processing */ -public class SimpleBatchManager implements BatchManager { - - private final String batchFile; - private final int skip; - private int whichBatch; - private final int totalBatches; - private int curItem; - private List items; - - - /** - * Constructs a SimpleBatchManager object. - * - * @param filename the name of the batch file - * @param skip number of records to skip between items - * @param whichBatch which chunk of the batch should we process - * @param totalBatches the total number of chuncks that the batch is divided into. - */ - public SimpleBatchManager(String filename, - int skip, int whichBatch, int totalBatches) { - this.batchFile = filename; - this.skip = skip; - this.whichBatch = whichBatch; - this.totalBatches = totalBatches; - } - - - /** Starts processing the batch */ - public void start() throws IOException { - curItem = 0; - items = getBatchItems(batchFile); - } - - - /** - * Gets the next available batch item or null if no more are available - * - * @return the next available batch item - * @throws IOException if an I/O error occurs while getting the next item from the batch file. - */ - public BatchItem getNextItem() throws IOException { - if (curItem >= items.size()) { - return null; - } else { - String line = items.get(curItem++); - return new BatchItem(BatchFile.getFilename(line), - BatchFile.getReference(line)); - } - } - - - /** Stops processing the batch */ - public void stop() throws IOException { - } - - - /** - * Returns the name of the file - * - * @return the filename - */ - public String getFilename() { - return batchFile; - } - - - /** - * Gets the set of lines from the file - * - * @param file the name of the file - */ - private List getBatchItems(String file) throws IOException { - List list = BatchFile.getLines(file, skip); - - if (totalBatches > 1) { - int linesPerBatch = list.size() / totalBatches; - if (linesPerBatch < 1) { - linesPerBatch = 1; - } - if (whichBatch >= totalBatches) { - whichBatch = totalBatches - 1; - } - int startLine = whichBatch * linesPerBatch; - // last batch needs to get all remaining lines - if (whichBatch == (totalBatches - 1)) { - list = list.subList(startLine, list.size()); - } else { - list = list.subList(startLine, startLine + - linesPerBatch); - } - } - return list; - } -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/SocketCommandClient.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/SocketCommandClient.java deleted file mode 100755 index f1ec85bb..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/SocketCommandClient.java +++ /dev/null @@ -1,299 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.util; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.PrintWriter; -import java.net.Socket; -import java.net.SocketException; - -/** - * A client for a socketed command interpreter. Hooks up to a socketed command interpreter and allows the sending of - * commands. - * - * @see CommandInterpreter - */ - -public class SocketCommandClient { - - private String host; - private int port; - private Socket socket; - private BufferedReader inReader; - private PrintWriter outWriter; - - - /** - * Creates a socket command client at the given host and port. - * - * @param host the host machine - * @param port the port to use - * @throws IOException if setup went wrong - */ - public SocketCommandClient(String host, int port) - throws IOException { - this.host = host; - this.port = port; - open(); - } - - - /** Creats a SocketCommandClient with no connection open must be called. */ - public SocketCommandClient() { - } - - - /** - * Opens a socket connection - * - * @param aHost the host to connect to - * @param aPort the port to connect to - * @throws IOException if connection fails - */ - public synchronized void open(String aHost, int aPort) - throws IOException { - host = aHost; - port = aPort; - - /* Open a client socket connection, throws IOExceptions - * to the calling thread. - * RATIONALE: the caller should handle any connection- - * related errors. - */ - socket = new Socket(host, port); - - inReader = new BufferedReader - (new InputStreamReader(socket.getInputStream())); - outWriter = new PrintWriter(socket.getOutputStream(), true); - } - - - private synchronized void open() throws IOException { - open(host, port); - } - - - /** - * @return the SO_TIMEOUT of the Socket that this client uses. 0 returns implies that the option is disabled (i.e., - * timeout of infinity). - * @throws SocketException if configuration failed - */ - public int getSoTimeout() throws SocketException { - if (socket != null) { - return socket.getSoTimeout(); - } else { - return 0; - } - } - - - /** - * Enable/disable SO_TIMEOUT with the specified timeout, in milliseconds. The timeout must be > 0. A timeout of zero - * is interpreted as an infinite timeout. - * - * @param millisecs the timeout in milliseconds - * @throws SocketException if configuration failed - */ - public void setSoTimeout(int millisecs) throws SocketException { - if (socket != null) { - socket.setSoTimeout(millisecs); - } else { - System.err.println("SocketCommandClient.setSoTimeout(): " + - "socket is null"); - } - } - - - /** - * sends a command, retries on error which will attempt to repair a dead socket - * - * @param command the command - * @return true if command was sent ok - */ - - public synchronized boolean sendCommand(String command) { - final int maxTries = 2; - - for (int i = 0; i < maxTries; i++) { - if (!checkOpen()) { - continue; - } - outWriter.println(command); - if (outWriter.checkError()) { - close(); - System.err.println("IO error while sending " + command); - } else { - return true; - } - } - return false; - } - - - /** - * Gets a response - * - * @return the response or null if error - */ - - public synchronized String getResponse() { - String response = null; - - if (!checkOpen()) { - return null; - } - - try { - response = inReader.readLine(); - } catch (IOException ioe) { - System.err.println("IO error while reading response"); - close(); - } - return response; - } - - - /** - * is a response - * - * @return the response or null if error - */ - - public synchronized boolean isResponse() { - boolean response = false; - - if (!checkOpen()) { - return false; - } - - try { - response = inReader.ready(); - } catch (IOException ioe) { - System.err.println("IO error while checking response"); - close(); - } - return response; - } - - - /** - * sends a command get a response - * - * @param command the command to send - * @return the response or null if error - */ - - public synchronized String sendCommandGetResponse(String command) { - String response = null; - if (sendCommand(command)) { - response = getResponse(); - } - return response; - } - - - /** Closes the socket connection */ - public synchronized void close() { - try { - if (socket != null) { - socket.close(); - } else { - System.err.println("SocketCommandClient.close(): " + - "socket is null"); - } - } catch (IOException ioe) { - System.err.println("Trouble closing socket"); - } - socket = null; - } - - - /** Checks to see if the socket is open, if not opens it. */ - private synchronized boolean checkOpen() { - try { - if (socket == null) - open(); - } - catch (IOException e) { - System.err.println("SocketCommandClient.checkOpen():" - + "could not open socket"); - socket = null; - } - return socket != null; - } - - public static void main(String[] args) { - try { - CommandInterpreter ci = new CommandInterpreter(); - final SocketCommandClient sci = new - SocketCommandClient("localhost", 7890); - ci.add("s", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - StringBuilder cmd = new StringBuilder(); - for (int i = 1; i < args.length; i++) { - cmd.append(args[i]).append(' '); - } - sci.sendCommand(cmd.toString()); - return ""; - } - - - public String getHelp() { - return "send a command"; - } - }); - - ci.add("r", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - while (sci.isResponse()) { - ci.putResponse(sci.getResponse()); - } - return ""; - } - - - public String getHelp() { - return "receive a response"; - } - }); - - ci.add("sr", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - StringBuilder cmd = new StringBuilder(); - for (int i = 1; i < args.length; i++) { - cmd.append(args[i]).append(' '); - } - ci.putResponse(sci.sendCommandGetResponse(cmd.toString())); - while (sci.isResponse()) { - ci.putResponse(sci.getResponse()); - } - return ""; - } - - - public String getHelp() { - return "send a command, receive a response"; - } - }); - - ci.setPrompt("scc-test> "); - ci.run(); - } - catch (Exception e) { - System.err.println("error occured."); - e.printStackTrace(); - System.exit(-1); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/SocketCommandInterpreter.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/SocketCommandInterpreter.java deleted file mode 100755 index e81dfdd8..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/SocketCommandInterpreter.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.util; - - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.PrintWriter; -import java.net.ServerSocket; -import java.net.Socket; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - -/** - * This class is a command interpreter. It reads strings from an input stream, parses them into commands and executes - * them, results are sent back on the output stream. - * - * @see CommandInterpreter - */ - -public class SocketCommandInterpreter extends Thread { - - private final int port; - private final Map commandList; - private boolean trace; - private boolean acceptConnections = true; - - - /** - * Creates a command interpreter at the given port. - * - * @param port the port to create the command interpreter - */ - public SocketCommandInterpreter(int port) { - this.port = port; - commandList = new HashMap(); - } - - - /** - * Adds the given command to the command list. - * - * @param name the name of the command. - * @param command the command to be executed. - */ - - public void add(String name, CommandInterface command) { - commandList.put(name, command); - } - - // Implements the run() method of Runnable - - - @Override - public final void run() { - ServerSocket ss; - - try { - ss = new ServerSocket(port); - System.out.println("Waiting on " + ss); - } catch (IOException ioe) { - System.out.println("Can't open socket on port " + port); - ioe.printStackTrace(); - return; - } - - while (acceptConnections) { - try { - Socket s = ss.accept(); - spawnCommandInterpreter(s); - } catch (IOException ioe) { - System.err.println("Could not accept socket " + ioe); - ioe.printStackTrace(); - break; - } - } - - try { - ss.close(); - } catch (IOException ioe) { - System.err.println("Could not close server socket " + ioe); - ioe.printStackTrace(); - } - } - - - /** Stops this SocketCommandInterpreter from accepting connections. Effectively stops this thread. */ - public void setStopAcceptConnections() { - acceptConnections = false; - } - - - /** - * Sets the trace mode of the command interpreter. - * - * @param trace true if tracing. - */ - - public void setTrace(boolean trace) { - this.trace = trace; - } - - - /** - * spawns a command interpreter - * - * @param s the socket where the interpeter reads/writes to/from - */ - private void spawnCommandInterpreter(Socket s) { - try { - BufferedReader inReader = new BufferedReader( - new InputStreamReader(s.getInputStream())); - PrintWriter outWriter = new PrintWriter( - s.getOutputStream(), true); - CommandInterpreter ci = new CommandInterpreter(inReader, outWriter); - ci.setSocket(s); - ci.add(commandList); - ci.setTrace(trace); - ci.start(); - } catch (IOException ioe) { - System.err.println("Could not attach CI to socket " + ioe); - } - } - - public static void main(String[] args) { - SocketCommandInterpreter sci = new SocketCommandInterpreter(7890); - sci.add("testCommand", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - return "this is a test"; - } - - - public String getHelp() { - return "a test command"; - } - }); - sci.add("time", new CommandInterface() { - public String execute(CommandInterpreter ci, String[] args) { - return "Time is " + new Date(); - } - - - public String getHelp() { - return "shows the current time"; - } - }); - - System.out.println("Welcome to SocketCommand interpreter test program"); - sci.setTrace(true); - sci.start(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/SphinxHelp.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/SphinxHelp.java deleted file mode 100755 index b62544a3..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/SphinxHelp.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.util; - -/** This class provides information on Sphinx-4 and how to use it */ - -public class SphinxHelp { - - private final static String VERSION = "1.0 beta6"; - - /** - * The main entry point - * - * @param args the command line arguments - */ - public static void main(String[] args) { - System.out.println(); - System.out.println("Welcome to Sphinx-4!"); - System.out.println(); - System.out.println(" This is version " + VERSION + '.'); - System.out.println(" For information on how to configure and run"); - System.out.println(" Sphinx-4 please read:"); - System.out.println(" http://cmusphinx.sourceforge.net/sphinx4"); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/SphinxLogFormatter.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/SphinxLogFormatter.java deleted file mode 100755 index d8417ddf..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/SphinxLogFormatter.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.util; - -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.logging.Formatter; -import java.util.logging.LogRecord; - -/** - * Provides a log formatter for use with CMU Sphinx. This formatter generates - * nicer looking console messages than the default formatter. To use the - * formatter, set the property - *

    - * java.util.logging.ConsoleHandler.formatter to - * edu.cmu.sphinx.util.SphinxLogFormatter - *

    - * This is typically done in a custom loger.properties file - */ -public class SphinxLogFormatter extends Formatter { - - private final DateFormat DATE_FORMATTER = new SimpleDateFormat("HH:mm:ss.SSS"); - private boolean terse; - - - /** - * Sets the level of output - * - * @param terse if true, the output level should be terse - */ - public void setTerse(boolean terse) { - this.terse = terse; - } - - - /** - * Retrieves the level of output - * - * @return the level of output - */ - public boolean getTerse() { - return terse; - } - - - /** - * Formats the given log record and return the formatted string. - * - * @param record the record to format - * @return the formatted string - */ - @Override - public String format(LogRecord record) { - if (terse) { - return record.getMessage() + '\n'; - } else { - String date = DATE_FORMATTER.format(new Date(record.getMillis())); - StringBuilder sb = new StringBuilder().append(date).append(' '); - - String loggerName = record.getLoggerName(); - String source; - if (loggerName != null) { - String[] strings = loggerName.split("[.]"); - source = strings[strings.length - 1]; - } else { - source = loggerName; - } - - sb.append(Utilities.pad(record.getLevel().getName() + ' ' + source, 24)); - sb.append(" ").append(record.getMessage()).append('\n'); - return sb.toString(); - } - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/StatisticsVariable.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/StatisticsVariable.java deleted file mode 100755 index 61f27ca2..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/StatisticsVariable.java +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.util; - -import java.util.HashMap; -import java.util.Map; - -/** - * Represents a named value. A StatisticsVariable may be used to track data in a fashion that will allow the data to be - * viewed or dumped at any time. Statistics are kept in a pool and are grouped in contexts. Statistics can be dumped - * as a whole or by context. - */ -public class StatisticsVariable { - - private static final Map pool = new HashMap(); - - /** the value of this StatisticsVariable. It can be manipulated directly by the application. */ - public double value; - - private final String name; // the name of this value - private boolean enabled; // if true this var is enabled - - - /** - * Gets the StatisticsVariable with the given name from the given context. If the statistic does not currently - * exist, it is created. If the context does not currently exist, it is created. - * - * @param statName the name of the StatisticsVariable - * @return the StatisticsVariable with the given name and context - */ - static public StatisticsVariable getStatisticsVariable(String statName) { - - StatisticsVariable stat = pool.get(statName); - if (stat == null) { - stat = new StatisticsVariable(statName); - pool.put(statName, stat); - } - return stat; - } - - - /** - * Gets the StatisticsVariable with the given name for the given instance and context. This is a convenience - * function. - * - * @param instanceName the instance name of creator - * @param statName the name of the StatisticsVariable - * @return new variable - */ - static public StatisticsVariable getStatisticsVariable( - String instanceName, String statName) { - return getStatisticsVariable(instanceName + '.' + statName); - } - - - /** Dump all of the StatisticsVariable in the given context */ - static public void dumpAll() { - System.out.println(" ========= statistics " + "======="); - for (StatisticsVariable stats : pool.values()) { - stats.dump(); - } - } - - - /** Resets all of the StatisticsVariables in the given context */ - static public void resetAll() { - for (StatisticsVariable stats : pool.values()) { - stats.reset(); - } - } - - - /** - * Contructs a StatisticsVariable with the given name and context - * - * @param statName the name of this StatisticsVariable - */ - private StatisticsVariable(String statName) { - this.name = statName; - this.value = 0.0; - } - - - /** - * Retrieves the name of this StatisticsVariable - * - * @return the name of this StatisticsVariable - */ - public String getName() { - return name; - } - - - /** - * Retrieves the value for this StatisticsVariable - * - * @return the current value for this StatisticsVariable - */ - public double getValue() { - return value; - } - - - /** - * Sets the value for this StatisticsVariable - * - * @param value the new value - */ - public void setValue(double value) { - this.value = value; - } - - - /** Resets this StatisticsVariable. The value is set to zero. */ - public void reset() { - setValue(0.0); - } - - - /** Dumps this StatisticsVariable. */ - public void dump() { - if (isEnabled()) { - System.out.println(name + ' ' + value); - } - } - - - /** - * Determines if this StatisticsVariable is enabled - * - * @return true if enabled - */ - public boolean isEnabled() { - return enabled; - } - - - /** - * Sets the enabled state of this StatisticsVariable - * - * @param enabled the new enabled state - */ - public void setEnabled(boolean enabled) { - this.enabled = enabled; - } - - - public static void main(String[] args) { - StatisticsVariable loops = - StatisticsVariable.getStatisticsVariable("main", "loops"); - StatisticsVariable sum = - StatisticsVariable.getStatisticsVariable("main", "sum"); - - StatisticsVariable foot = - StatisticsVariable.getStatisticsVariable("body", "foot"); - StatisticsVariable leg = - StatisticsVariable.getStatisticsVariable("body", "leg"); - StatisticsVariable finger = - StatisticsVariable.getStatisticsVariable("body", "finger"); - - foot.setValue(2); - leg.setValue(2); - finger.setValue(10); - - StatisticsVariable.dumpAll(); - StatisticsVariable.dumpAll(); - - for (int i = 0; i < 1000; i++) { - loops.value++; - sum.value += i; - } - - StatisticsVariable.dumpAll(); - - - StatisticsVariable loopsAlias = - StatisticsVariable.getStatisticsVariable("main", "loops"); - StatisticsVariable sumAlias = - StatisticsVariable.getStatisticsVariable("main", "sum"); - - for (int i = 0; i < 1000; i++) { - loopsAlias.value++; - sumAlias.value += i; - } - - StatisticsVariable.dumpAll(); - StatisticsVariable.resetAll(); - StatisticsVariable.dumpAll(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/StreamFactory.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/StreamFactory.java deleted file mode 100755 index 45d49b3c..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/StreamFactory.java +++ /dev/null @@ -1,344 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.util; - -import java.io.*; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.zip.ZipEntry; -import java.util.zip.ZipException; -import java.util.zip.ZipFile; -import java.util.zip.ZipOutputStream; - -/** - * Supports the loading and saving of files from different sources, e.g., a ZIP file or a plain directory. Provides - * methods that returns an InputStream or OutputStream to the named file in the given source. - */ -public class StreamFactory { - - /** Identifies a ZIP file. */ - public static final String ZIP_FILE = "ZIP_FILE"; - - - /** Identifies a plain directory. */ - public static final String DIRECTORY = "DIRECTORY"; - - - /** - * Returns an appropriate InputStream of the given file in the given URL location. The location can be a plain - * directory or a ZIP file (these are the only two supported at this point). The resolve method is - * called to resolve whether "location" refers to a ZIP file or a directory. - *

    - * Suppose you want the InputStream to the file "dict/dictionary.txt" in the ZIP file - * "file:/lab/speech/sphinx4/data/wsj.zip". You will do: StreamFactory.getInputStream( - * "file:/lab/speech/sphinx4/data/wsj.zip", "dict/dictionary.txt"); - *

    - * Suppose you want the InputStream to the file "dict/dictionary.txt" in the directory - * "file:/lab/speech/sphinx4/data/wsj", you will do: StreamFactory.getInputStream( - * "file:/lab/speech/sphinx4/data/wsj", "dict/dictionary.txt"); - *

    - * The StreamFactory.resolve() method is called to resolve whether "location" refers to a ZIP file or a - * directory. - * - * @param location the URL location of the input data, it can now be a directory or a ZIP file - * @param file the file in the given location to obtain the InputStream - * @return an InputStream of the given file in the given location - * @throws IOException if IO went wrong - */ - public static InputStream getInputStream(String location, - String file) throws - IOException { - if (location != null) { - return StreamFactory.getInputStream - (StreamFactory.resolve(location), location, file); - } else { - return StreamFactory.getInputStream(StreamFactory.DIRECTORY, - location, file); - } - } - - - /** - * According to the given data format, returns an appropriate InputStream of the given file in the given URL - * location. The location can be a plain directory or a JAR or ZIP file (these are the only ones supported at this - * point). - *

    - * Suppose you want the InputStream to the file "dict/dictionary.txt" in the ZIP file - * "file:/lab/speech/sphinx4/data/wsj.zip". You will do: StreamFactory.getInputStream(StreamFactory.ZIP_FILE, - * "file:/lab/speech/sphinx4/data/wsj.zip", "dict/dictionary.txt"); - *

    - * Suppose you want the InputStream to the file "dict/dictionary.txt" in the directory - * "file:/lab/speech/sphinx4/data/wsj", you will do: StreamFactory.getInputStream(StreamFactory.DIRECTORY, - * "file:/lab/speech/sphinx4/data/wsj", "dict/dictionary.txt"); - * - * @param format the format of the input data, the currently supported formats are:
    StreamFactory.ZIP_FILE - *
    StreamFactory.DIRECTORY - * @param location the URL location of the input data, it can now be a directory or a JAR or ZIP file, or null if no - * location is given, which means that the argument also specifies the exact location - * @param file the file in the given location to obtain the InputStream - * @return an InputStream of the given file in the given location - * @throws IOException if IO went wrong - */ - public static InputStream getInputStream(String format, - String location, - String file) throws - IOException { - InputStream stream = null; - String absoluteLocation; - - if (location == null) { - absoluteLocation = null; - } else { - // Create a url from the location, possibly relative path - URI uri = URI.create(location); - // Get the scheme and the path - String scheme = uri.getScheme(); - String path = uri.getSchemeSpecificPart(); - // Create a file with the path (aka scheme-specific part) - File relativeFile = new File(path); - // Make the path absolute and reconstruct the location, with - // the correct scheme - URI absoluteURI = relativeFile.getAbsoluteFile().toURI(); - if (scheme == null) { - absoluteLocation = absoluteURI.getSchemeSpecificPart(); - } else { - absoluteLocation = scheme + ':' + - absoluteURI.getSchemeSpecificPart(); - } - } - - if (format.equals(ZIP_FILE)) { - try { - URI newURI = new URI(absoluteLocation); - ZipFile zipFile = - new ZipFile(new File(newURI)); - ZipEntry entry = zipFile.getEntry(file); - if (entry != null) { - stream = zipFile.getInputStream(entry); - } - zipFile.close(); - } catch (URISyntaxException use) { - use.printStackTrace(); - throw new ZipException("URISyntaxException: " + - use.getMessage()); - } - } else if (format.equals(DIRECTORY)) { - if (absoluteLocation != null) { - stream = new FileInputStream(absoluteLocation + - File.separator + file); - } else { - stream = new FileInputStream(file); - } - } - return stream; - } - - - /** - * Returns an appropriate OutputStream of the given file in the given URL location. The location can be a plain - * directory or a ZIP file (these are the only two supported at this point). The resolve method is - * called to resolve whether "location" refers to a ZIP file or a directory. If saving to a zip or jar, the file can - * be appended or overwritten. If saving to a directory, files are always overwritten. - *

    - * Suppose you want the OutputStream to the file "dict/dictionary.txt" in the ZIP file - * "file:/lab/speech/sphinx4/data/wsj.zip". You will do: StreamFactory.getOutputStream( - * "file:/lab/speech/sphinx4/data/wsj.zip", "dict/dictionary.txt", true); - *

    - * Suppose you want the OutputStream to the file "dict/dictionary.txt" in the directory - * "file:/lab/speech/sphinx4/data/wsj", you will do: StreamFactory.getOutputStream( - * "file:/lab/speech/sphinx4/data/wsj", "dict/dictionary.txt", false); - *

    - * The StreamFactory.resolve() method is called to resolve whether "location" refers to a ZIP file or a - * directory. - * - * @param location the URL location of the output data, it can now be a directory or a ZIP file - * @param file the file in the given location to obtain the OutputStream - * @param append if true and saving to a zip file, then file is appended rather than overwritten. - * @return an OutputStream of the given file in the given location - * @throws IOException if IO went wrong - */ - public static OutputStream getOutputStream(String location, - String file, - boolean append) throws - IOException { - if (location != null) { - return StreamFactory.getOutputStream - (StreamFactory.resolve(location), location, file, append); - } else { - return StreamFactory.getOutputStream(StreamFactory.DIRECTORY, - location, file); - } - } - - - /** - * According to the given data format, returns an appropriate OutputStream of the given file in the given URL - * location. The location can be a plain directory or a JAR or ZIP file (these are the only ones supported at this - * point). If saving to a zip or jar, the file can be appended or overwritten. If saving to a directory, files are - * always overwritten. - *

    - * Suppose you want the OutputStream to the file "dict/dictionary.txt" in the ZIP file - * "file:/lab/speech/sphinx4/data/wsj.zip". You will do: StreamFactory.getOutputStream(StreamFactory.ZIP_FILE, - * "file:/lab/speech/sphinx4/data/wsj.zip", "dict/dictionary.txt", true); - *

    - * Suppose you want the OutputStream to the file "dict/dictionary.txt" in the directory - * "file:/lab/speech/sphinx4/data/wsj", you will do: StreamFactory.getOutputStream(StreamFactory.DIRECTORY, - * "file:/lab/speech/sphinx4/data/wsj", "dict/dictionary.txt", false); - * - * @param format the format of the output data, the currently supported formats are:
    StreamFactory.ZIP_FILE - *
    StreamFactory.DIRECTORY - * @param location the URL location of the output data, it can now be a directory or a JAR or ZIP file, or null if - * no location is given, which means that the argument also specifies the exact - * location - * @param file the file in the given location to obtain the OutputStream - * @param append if true and saving to a zip file, then file is appended rather than overwritten. - * @return an OutputStream of the given file in the given location - * @throws IOException if IO went wrong - */ - public static OutputStream getOutputStream(String format, - String location, - String file, - boolean append) throws - IOException { - OutputStream stream = null; - if (format.equals(ZIP_FILE)) { - try { - System.out.println("WARNING: ZIP not yet fully supported.!"); - File path = new File(location); - File parent = new File(path.getParent()); - if (!parent.exists()) { - parent.mkdirs(); - } - FileOutputStream fos = - new FileOutputStream(new File(new URI(location)), append); - stream = new ZipOutputStream(new BufferedOutputStream(fos)); - - ZipEntry entry = new ZipEntry(file); - ((ZipOutputStream) stream).putNextEntry(entry); - } catch (URISyntaxException use) { - use.printStackTrace(); - throw new ZipException("URISyntaxException: " + - use.getMessage()); - } - } else if (format.equals(DIRECTORY)) { - if (location != null) { - File path = new File(location + File.separator + file); - File parent = new File(path.getParent()); - if (!parent.exists()) { - parent.mkdirs(); - } - stream = new FileOutputStream(location + File.separator + file); - } else { - File path = new File(file); - File parent = new File(path.getParent()); - if (!parent.exists()) { - parent.mkdirs(); - } - stream = new FileOutputStream(file); - } - } else { - throw new IOException("Format not supported for writing"); - } - return stream; - } - - - /** - * Returns an appropriate OutputStream of the given file in the given URL location. The location can be a plain - * directory or a ZIP file (these are the only two supported at this point). The resolve method is - * called to resolve whether "location" refers to a ZIP file or a directory. Files are overwritten, which may be - * risky for ZIP of JAR files. - *

    - * Suppose you want the OutputStream to the file "dict/dictionary.txt" in the ZIP file - * "file:/lab/speech/sphinx4/data/wsj.zip". You will do: StreamFactory.getOutputStream( - * "file:/lab/speech/sphinx4/data/wsj.zip", "dict/dictionary.txt"); - *

    - * Suppose you want the OutputStream to the file "dict/dictionary.txt" in the directory - * "file:/lab/speech/sphinx4/data/wsj", you will do: StreamFactory.getOutputStream( - * "file:/lab/speech/sphinx4/data/wsj", "dict/dictionary.txt"); - *

    - * The StreamFactory.resolve() method is called to resolve whether "location" refers to a ZIP file or a - * directory. - * - * @param location the URL location of the output data, it can now be a directory or a ZIP file - * @param file the file in the given location to obtain the OutputStream - * @return an OutputStream of the given file in the given location - * @throws IOException if IO went wrong - */ - public static OutputStream getOutputStream(String location, - String file) throws - IOException { - if (location != null) { - return StreamFactory.getOutputStream - (StreamFactory.resolve(location), location, file); - } else { - return StreamFactory.getOutputStream(StreamFactory.DIRECTORY, - location, file); - } - } - - - /** - * According to the given data format, returns an appropriate OutputStream of the given file in the given URL - * location. The location can be a plain directory or a JAR or ZIP file (these are the only ones supported at this - * point). Files are always overwritten, which can be risky for ZIP or JAR files. - *

    - * Suppose you want the OutputStream to the file "dict/dictionary.txt" in the ZIP file - * "file:/lab/speech/sphinx4/data/wsj.zip". You will do: StreamFactory.getOutputStream(StreamFactory.ZIP_FILE, - * "file:/lab/speech/sphinx4/data/wsj.zip", "dict/dictionary.txt"); - *

    - * Suppose you want the OutputStream to the file "dict/dictionary.txt" in the directory - * "file:/lab/speech/sphinx4/data/wsj", you will do: StreamFactory.getOutputStream(StreamFactory.DIRECTORY, - * "file:/lab/speech/sphinx4/data/wsj", "dict/dictionary.txt"); - * - * @param format the format of the output data, the currently supported formats are:
    StreamFactory.ZIP_FILE - *
    StreamFactory.DIRECTORY - * @param location the URL location of the output data, it can now be a directory or a JAR or ZIP file, or null if - * no location is given, which means that the argument also specifies the exact - * location - * @param file the file in the given location to obtain the OutputStream - * @return an OutputStream of the given file in the given location - * @throws IOException if IO went wrong - */ - public static OutputStream getOutputStream(String format, - String location, - String file) throws - IOException { - if (format.equals(ZIP_FILE)) { - System.out.println("WARNING: overwriting ZIP or JAR file!"); - return StreamFactory.getOutputStream - (StreamFactory.resolve(location), location, file, false); - } else if (format.equals(DIRECTORY)) { - return StreamFactory.getOutputStream(StreamFactory.DIRECTORY, - location, file, false); - } else { - throw new IOException("Format not supported for writing"); - } - } - - - /** - * @param sourceName name of the source - * @return the type of the given data source. The current supported types are: StreamFactory.ZIP_FILE - * StreamFactory.DIRECTORY - */ - public static String resolve(String sourceName) { - if ((sourceName.endsWith(".jar")) || (sourceName.endsWith(".zip"))) { - return StreamFactory.ZIP_FILE; - } else { - return StreamFactory.DIRECTORY; - } - } -} - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/TimeFrame.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/TimeFrame.java deleted file mode 100755 index 93c8ca0f..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/TimeFrame.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2013 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ - -package edu.cmu.sphinx.util; - - -public class TimeFrame { - - public static final TimeFrame NULL = new TimeFrame(0); - public static final TimeFrame INFINITE = new TimeFrame(Long.MAX_VALUE); - - private final long start; - private final long end; - - public TimeFrame(long duration) { - this(0, duration); - } - - public TimeFrame(long start, long end) { - this.start = start; - this.end = end; - } - - public long getStart() { - return start; - } - - public long getEnd() { - return end; - } - - public long length() { - return end - start; - } - - @Override - public String toString() { - return String.format("%d:%d", start, end); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/Timer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/Timer.java deleted file mode 100755 index 65053ff3..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/Timer.java +++ /dev/null @@ -1,251 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.util; - -import java.text.DecimalFormat; -import java.util.logging.Logger; - -/** - * Keeps track of execution times. This class provides methods that can be used for timing processes. The process to be - * timed should be bracketed by calls to timer.start() and timer.stop(). Repeated operations can be timed more than - * once. The timer will report the minimum, maximum, average and last time executed for all start/stop pairs when the - * timer.dump is called. - *

    - * Timer instances can be obtained from a global cache implemented in {@code TimerPool}. - * - * @see TimerPool - */ -public class Timer { - - private final static DecimalFormat timeFormatter = new DecimalFormat("###0.0000"); - - private final String name; - - private double sum; - private long count; - private long startTime; - private long curTime; - private long minTime = Long.MAX_VALUE; - private long maxTime; - private boolean notReliable; // if true, timing is not reliable - - - /** - * Creates a timer. - * - * @param name the name of the timer - */ - Timer(String name) { - assert name != null : "timers must have a name!"; - this.name = name; - reset(); - } - - - /** - * Retrieves the name of the timer - * - * @return the name of the timer - */ - public String getName() { - return name; - } - - - /** Resets the timer as if it has never run before. */ - public void reset() { - startTime = 0L; - count = 0L; - sum = 0L; - minTime = Long.MAX_VALUE; - maxTime = 0L; - notReliable = false; - } - - - /** - * Returns true if the timer has started. - * - * @return true if the timer has started; false otherwise - */ - public boolean isStarted() { - return (startTime > 0L); - } - - - /** Starts the timer running. */ - public void start() { - if (startTime != 0L) { - notReliable = true; // start called while timer already running - System.out.println - (getName() + " timer.start() called without a stop()"); - } - startTime = System.currentTimeMillis(); - } - - - /** - * Starts the timer at the given time. - * - * @param time the starting time - */ - public void start(long time) { - if (startTime != 0L) { - notReliable = true; // start called while timer already running - System.out.println - (getName() + " timer.start() called without a stop()"); - } - if (time > System.currentTimeMillis()) { - throw new IllegalStateException - ("Start time is later than current time"); - } - startTime = time; - } - - - /** - * Stops the timer. - * - * @return the duration since start in milliseconds - */ - public long stop() { - if (startTime == 0L) { - notReliable = true; // stop called, but start never called - System.out.println - (getName() + " timer.stop() called without a start()"); - } - curTime = System.currentTimeMillis() - startTime; - startTime = 0L; - if (curTime > maxTime) { - maxTime = curTime; - } - if (curTime < minTime) { - minTime = curTime; - } - count++; - sum += curTime; - return curTime; - } - - - /** - * Dump the timer. Shows the timer details. - * @param logger to use for dump - */ - public void dump(Logger logger) { - showTimesShort(logger); - } - - - /** - * Gets the count of starts for this timer - * - * @return the count - */ - public long getCount() { - return count; - } - - - /** - * Returns the latest time gathered - * - * @return the time in milliseconds - */ - public long getCurTime() { - return curTime; - } - - - /** - * Gets the average time for this timer in milliseconds - * - * @return the average time - */ - public double getAverageTime() { - if (count == 0) { - return 0.0; - } - return sum / count; - } - - - /** - * Gets the min time for this timer in milliseconds - * - * @return the min time - */ - public long getMinTime() { - return minTime; - } - - - /** - * Gets the max time for this timer in milliseconds - * - * @return the max time in milliseconds - */ - public long getMaxTime() { - return maxTime; - } - - - /** - * Formats times into a standard format. - * - * @param time the time (in milliseconds) to be formatted - * @return a string representation of the time. - */ - private String fmtTime(long time) { - return fmtTime(time / 1000.0); - } - - - /** - * Formats times into a standard format. - * - * @param time the time (in seconds) to be formatted - * @return a string representation of the time. - */ - private String fmtTime(double time) { - return Utilities.pad(timeFormatter.format(time) + 's', 10); - } - - - /** Shows brief timing statistics . - * @param logger */ - private void showTimesShort(Logger logger) { - double avgTime = 0.0; - - if (count == 0) { - return; - } - - if (count > 0) { - avgTime = sum / count / 1000.0; - } - - if (notReliable) { - logger.info(Utilities.pad(name, 20) + ' ' + "Not reliable."); - } else { - logger.info(Utilities.pad(name, 20) + ' ' - + Utilities.pad(String.valueOf(count), 8) - + fmtTime(curTime) - + fmtTime(minTime) - + fmtTime(maxTime) - + fmtTime(avgTime) - + fmtTime(sum / 1000.0)); - } - } -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/TimerPool.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/TimerPool.java deleted file mode 100755 index e35a6840..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/TimerPool.java +++ /dev/null @@ -1,104 +0,0 @@ -package edu.cmu.sphinx.util; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.WeakHashMap; -import java.util.logging.Logger; - -/** - * Keeps references to a list of timers which can be referenced by a key-pair consisting of an owner and a timer name. - * - * @author Holger Brandl - */ -public class TimerPool { - - private static final Map> weakRefTimerPool = new WeakHashMap>(); - - - // disable the constructor - private TimerPool() { - - } - - - /** - * Retrieves (or creates) a timer with the given name - * - * @param owner owner of the timer - * @param timerName the name of the particular timer to retrieve. If the timer does not already exist, it will be - * created - * @return the timer - */ - public static synchronized Timer getTimer(Object owner, String timerName) { - if (!weakRefTimerPool.containsKey(owner)) - weakRefTimerPool.put(owner, new ArrayList()); - - List ownerTimers = weakRefTimerPool.get(owner); - - for (Timer timer : ownerTimers) { - if (timer.getName().equals(timerName)) - return timer; - } - - // there is no timer named 'timerName' yet, so create it - Timer requestedTimer = new Timer(timerName); - ownerTimers.add(requestedTimer); - - return requestedTimer; - } - - - /** @return the number of currently caches {@code Timer} instances. */ - public static int getNumCachedTimers() { - int counter = 0; - for (List timers : weakRefTimerPool.values()) { - counter += timers.size(); - } - - return counter; - } - - - /** - * Dump all timers - * @param logger the logger to use for dump - */ - public static void dumpAll(Logger logger) { - showTimesShortTitle(logger); - - for (List timers : weakRefTimerPool.values()) { - for (Timer timer : timers) { - timer.dump(logger); - } - } - } - - - /** Shows the timing stats title. - * @param logger */ - private static void showTimesShortTitle(Logger logger) { - String title = "Timers"; - String titleBar = - "# ----------------------------- " + title + - "----------------------------------------------------------- "; - logger.info(Utilities.pad(titleBar, 78)); - logger.info(Utilities.pad("# Name", 20) + ' ' - + Utilities.pad("Count", 8) - + Utilities.pad("CurTime", 10) - + Utilities.pad("MinTime", 10) - + Utilities.pad("MaxTime", 10) - + Utilities.pad("AvgTime", 10) - + Utilities.pad("TotTime", 10)); - } - - - /** Resets all timers */ - public static void resetAll() { - for (List timers : weakRefTimerPool.values()) { - for (Timer timer : timers) { - timer.reset(); - } - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/Utilities.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/Utilities.java deleted file mode 100755 index f4903ffb..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/Utilities.java +++ /dev/null @@ -1,327 +0,0 @@ -/* - * Copyright 1999-2002 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.util; - -import java.io.*; -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.List; - - -/** Provides a set of generic utilities */ -public class Utilities { - - private final static boolean TRACKING_OBJECTS = false; - - - // Unconstructable. - private Utilities() { - } - - - /** - * Returns a string with the given number of spaces. - * - * @param padding the number of spaces in the string - * @return a string of length 'padding' containing only the SPACE char. - */ - public static String pad(int padding) { - if (padding > 0) { - StringBuilder sb = new StringBuilder(padding); - for (int i = 0; i < padding; i++) { - sb.append(' '); - } - return sb.toString(); - } else { - return ""; - } - } - - - /** - * Pads with spaces or truncates the given string to guarantee that it is exactly the desired length. - * - * @param string the string to be padded - * @param minLength the desired length of the string - * @return a string of length containing string padded with whitespace or truncated - */ - public static String pad(String string, int minLength) { - String result = string; - int pad = minLength - string.length(); - if (pad > 0) { - result = string + pad(minLength - string.length()); - } else if (pad < 0) { - result = string.substring(0, minLength); - } - return result; - } - - - /** - * Pads with spaces or truncates the given int to guarantee that it is exactly the desired length. - * - * @param val the value to be padded - * @param minLength the desired length of the string - * @return a string of length containing string padded with whitespace or truncated - */ - public static String pad(int val, int minLength) { - return pad(String.valueOf(val), minLength); - } - - - /** - * Pads with spaces or truncates the given double to guarantee that it is exactly the desired length. - * - * @param val the value to be padded - * @param minLength the desired length of the string - * @return a string of length containing string padded with whitespace or truncated - */ - public static String pad(double val, int minLength) { - return pad(String.valueOf(val), minLength); - } - - /** - * Dumps padded text. This is a simple tool for helping dump text with padding to a Writer. - * - * @param pw the stream to send the output - * @param padding the number of spaces in the string - * @param string the string to output - */ - public static void dump(PrintWriter pw, int padding, String string) { - pw.print(pad(padding)); - pw.println(string); - } - - - /** - * utility method for tracking object counts - * - * @param name the name of the object - * @param count the count of objects - */ - public static void objectTracker(String name, int count) { - if (TRACKING_OBJECTS) { - if (count % 1000 == 0) { - System.out.println("OT: " + name + ' ' + count); - } - } - } - - - static long maxUsed; - - - /** - * Dumps out memory information - * - * @param msg addditional text for the dump - */ - - public static void dumpMemoryInfo(String msg) { - Runtime rt = Runtime.getRuntime(); - long free = rt.freeMemory(); - rt.gc(); - long reclaimedMemory = (rt.freeMemory() - free) - / (1024 * 1024); - long freeMemory = rt.freeMemory() / (1024 * 1024); - long totalMemory = rt.totalMemory() / (1024 * 1024); - long usedMemory = rt.totalMemory() - rt.freeMemory(); - - if (usedMemory > maxUsed) { - maxUsed = usedMemory; - } - - System.out.println("Memory (mb) " - + " total: " + totalMemory - + " reclaimed: " + reclaimedMemory - + " free: " + freeMemory - + " Max Used: " + (maxUsed / (1024 * 1024)) - + " -- " + msg); - } - - - /** - * Returns the string representation of the given double value in normalized scientific notation. The - * fractionDigits argument gives the number of decimal digits in the fraction portion. For example, if - * fractionDigits is 4, then the 123450 will be "1.2345e+05". There will always be two digits in the - * exponent portion, and a plus or minus sign before the exponent. - * - * @param number the double to convert - * @param fractionDigits the number of digits in the fraction part, e.g., 4 in "1.2345e+05". - * @return the string representation of the double in scientific notation - */ - public static String doubleToScientificString(double number, - int fractionDigits) { - DecimalFormat format = new DecimalFormat(); - - StringBuilder formatter = new StringBuilder(5 + fractionDigits).append("0."); - for (int i = 0; i < fractionDigits; i++) { - formatter.append('0'); - } - formatter.append("E00"); - - format.applyPattern(formatter.toString()); - String formatted = format.format(number); - - int index = formatted.indexOf('E'); - if (formatted.charAt(index + 1) != '-') { - return formatted.substring(0, index + 1) + '+' + - formatted.substring(index + 1); - } else { - return formatted; - } - } - - - /** - * Returns true if the given binary cepstra file is in big-endian format. It assumes that the first 4 bytes of the - * file tells you how many 4-byte floating point cepstra values are in the file. - * - * @param filename the cepstra file name - * @return true if the given binary cepstra file is big-endian - * @throws IOException if something went wrong - */ - public static boolean isCepstraFileBigEndian(String filename) - throws IOException { - File cepstraFile = new File(filename); - int fileSize = (int) cepstraFile.length(); - DataInputStream stream = - new DataInputStream(new FileInputStream(filename)); - int numberBytes = stream.readInt() * 4 + 4; - stream.close(); - return (fileSize == numberBytes); - } - - - /** - * Reads the next float from the given DataInputStream, where the data is in little endian. - * - * @param dataStream the DataInputStream to read from - * @return a float - * @throws IOException if something went wrong - */ - public static float readLittleEndianFloat(DataInputStream dataStream) - throws IOException { - return Float.intBitsToFloat(readLittleEndianInt(dataStream)); - } - - - /** - * Reads the next little-endian integer from the given DataInputStream. - * - * @param dataStream the DataInputStream to read from - * @return an integer - * @throws IOException if something went wrong - */ - public static int readLittleEndianInt(DataInputStream dataStream) - throws IOException { - return dataStream.readUnsignedByte() | dataStream.readUnsignedByte() << 8 | - dataStream.readUnsignedByte() << 16 | dataStream.readUnsignedByte() << 24; - } - - - /** - * Byte-swaps the given integer to the other endian. That is, if this integer is big-endian, it becomes - * little-endian, and vice-versa. - * - * @param integer the integer to swap - * @return swapped integer - */ - public static int swapInteger(int integer) { - return (((0x000000ff & integer) << 24) | - ((0x0000ff00 & integer) << 8) | - ((0x00ff0000 & integer) >> 8) | - ((0xff000000 & integer) >> 24)); - } - - - /** - * Byte-swaps the given float to the other endian. That is, if this float is big-endian, it becomes little-endian, - * and vice-versa. - * - * @param floatValue the float to swap - * @return swapped float - */ - public static float swapFloat(float floatValue) { - return Float.intBitsToFloat - (swapInteger(Float.floatToRawIntBits(floatValue))); - } - - - /** - * If a data point is below 'floor' make it equal to floor. - * - * @param data the data to floor - * @param floor the floored value - */ - public static void floorData(float[] data, float floor) { - for (int i = 0; i < data.length; i++) { - if (data[i] < floor) { - data[i] = floor; - } - } - } - /** - * If a data point is non-zero and below 'floor' make it equal to floor - * (don't floor zero values though). - * - * @param data the data to floor - * @param floor the floored value - */ - public static void nonZeroFloor(float[] data, float floor) { - for (int i = 0; i < data.length; i++) { - if (data[i] != 0.0 && data[i] < floor) { - data[i] = floor; - } - } - } - - - /** - * Normalize the given data. - * - * @param data the data to normalize - */ - public static void normalize(float[] data) { - float sum = 0; - for (float val : data) { - sum += val; - } - if (sum != 0.0f) { - for (int i = 0; i < data.length; i++) { - data[i] = data[i] / sum; - } - } - } - - - public static String join(List tokens) { - StringBuilder builder = new StringBuilder(); - for (String token : tokens) { - builder.append(token); - builder.append(' '); - } - return builder.toString().trim(); - } - - - public static List asList(int[] align) { - ArrayList result = new ArrayList(align.length); - for (int i : align) { - result.add(i); - } - return result; - } -} - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/machlearn/OVector.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/machlearn/OVector.java deleted file mode 100755 index b2127b9a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/machlearn/OVector.java +++ /dev/null @@ -1,62 +0,0 @@ -package edu.cmu.sphinx.util.machlearn; - -import java.io.Serializable; -import java.util.Arrays; - -/** An real-valued observation. */ -@SuppressWarnings("serial") -public class OVector implements Cloneable, Serializable { - - protected final double[] values; - - - /** Constructs a new observation for a given feature-vector. - * @param values vector values - */ - public OVector(double[] values) { - this.values = values; - } - - - /** Creates a one-dimensional instance of this class. - * @param value vector value - */ - public OVector(double value) { - this(new double[]{value}); - } - - - /** - * Returns the values of this observation. - * - * @return the values - */ - public double[] getValues() { - return values; - } - - - /** @return the dimension of this observation. */ - public int dimension() { - return getValues().length; - } - - - @Override - public boolean equals(Object obj) { - return obj instanceof OVector && Arrays.equals(values, ((OVector) obj).values); - - } - - - @Override - public int hashCode() { - return Arrays.hashCode(values); - } - - - @Override - public String toString() { - return Arrays.toString(values); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/ConfCategory.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/ConfCategory.java deleted file mode 100755 index b920faf7..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/ConfCategory.java +++ /dev/null @@ -1,18 +0,0 @@ -package edu.cmu.sphinx.util.props; - -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - -/** - * An annotation which can be used to tag classes. Based on these tags classes will be sorted into module categories - * within the graphical system designer. - * - * @author Holger Brandl - */ -@Documented -@Retention(RetentionPolicy.RUNTIME) -public @interface ConfCategory { - - String[] value(); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/ConfigHandler.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/ConfigHandler.java deleted file mode 100755 index e6a4f648..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/ConfigHandler.java +++ /dev/null @@ -1,147 +0,0 @@ -package edu.cmu.sphinx.util.props; - -import org.xml.sax.Attributes; -import org.xml.sax.Locator; -import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; -import org.xml.sax.helpers.DefaultHandler; - -import java.io.File; -import java.io.IOException; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.logging.Logger; - -/** A SAX XML Handler implementation that builds up the map of raw property data objects */ -public class ConfigHandler extends DefaultHandler { - - protected RawPropertyData rpd; - protected Locator locator; - protected List itemList; - protected String itemListName; - protected StringBuilder curItem; - - protected final Map rpdMap; - protected final Map globalProperties; - - private boolean replaceDuplicates; - private final URL baseURL; - - public ConfigHandler(Map rpdMap, Map globalProperties, - boolean replaceDuplicates, URL baseURL) { - this.rpdMap = rpdMap; - this.globalProperties = globalProperties; - this.replaceDuplicates = replaceDuplicates; - this.baseURL = baseURL; - } - - public ConfigHandler(Map rpdMap, Map globalProperties) { - this(rpdMap, globalProperties, false, null); - } - - @Override - public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { - if (qName.equals("config")) { - // test if this configuration extends another one - String extendedConfigName = attributes.getValue("extends"); - if (extendedConfigName != null) { - mergeConfigs(extendedConfigName, true); - replaceDuplicates = true; - } - } else if (qName.equals("include")) { - String includeFileName = attributes.getValue("file"); - mergeConfigs(includeFileName, false); - } else if (qName.equals("extendwith")) { - String includeFileName = attributes.getValue("file"); - mergeConfigs(includeFileName, true); - } else if (qName.equals("component")) { - String curComponent = attributes.getValue("name"); - String curType = attributes.getValue("type"); - if (rpdMap.get(curComponent) != null && !replaceDuplicates) { - throw new SAXParseException("duplicate definition for " + curComponent, locator); - } - rpd = new RawPropertyData(curComponent, curType); - } else if (qName.equals("property")) { - String name = attributes.getValue("name"); - String value = attributes.getValue("value"); - if (attributes.getLength() != 2 || name == null || value == null) { - throw new SAXParseException("property element must only have 'name' and 'value' attributes", locator); - } - if (rpd == null) { - // we are not in a component so add this to the global - // set of symbols -// String symbolName = "${" + name + "}"; // why should we warp the global props here - globalProperties.put(name, value); - } else if (rpd.contains(name) && !replaceDuplicates) { - throw new SAXParseException("Duplicate property: " + name, locator); - } else { - rpd.add(name, value); - } - } else if (qName.equals("propertylist")) { - itemListName = attributes.getValue("name"); - if (attributes.getLength() != 1 || itemListName == null) { - throw new SAXParseException("list element must only have the 'name' attribute", locator); - } - itemList = new ArrayList(); - } else if (qName.equals("item")) { - if (attributes.getLength() != 0) { - throw new SAXParseException("unknown 'item' attribute", locator); - } - curItem = new StringBuilder(); - } else { - throw new SAXParseException("Unknown element '" + qName + '\'', locator); - } - } - - @Override - public void characters(char ch[], int start, int length) throws SAXParseException { - if (curItem != null) { - curItem.append(ch, start, length); - } - } - - @Override - public void endElement(String uri, String localName, String qName) throws SAXParseException { - if (qName.equals("component")) { - rpdMap.put(rpd.getName(), rpd); - rpd = null; - } else if (qName.equals("property")) { - // nothing to do - } else if (qName.equals("propertylist")) { - if (rpd.contains(itemListName)) { - throw new SAXParseException("Duplicate property: " + itemListName, locator); - } else { - rpd.add(itemListName, itemList); - itemList = null; - } - } else if (qName.equals("item")) { - itemList.add(curItem.toString().trim()); - curItem = null; - } - } - - @Override - public void setDocumentLocator(Locator locator) { - this.locator = locator; - } - - private void mergeConfigs(String configFileName, boolean replaceDuplicates) { - try { - File parent = new File(baseURL.toURI().getPath()).getParentFile(); - URL fileURL = new File(parent.getPath() + File.separatorChar + configFileName).toURI().toURL(); - - Logger logger = Logger.getLogger(ConfigHandler.class.getSimpleName()); - logger.fine((replaceDuplicates ? "extending" : "including") + " config:" + fileURL.toURI()); - - SaxLoader saxLoader = new SaxLoader(fileURL, globalProperties, rpdMap, replaceDuplicates); - saxLoader.load(); - } catch (IOException e) { - throw new RuntimeException("Error while processing : " + e, e); - } catch (URISyntaxException e) { - e.printStackTrace(); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/Configurable.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/Configurable.java deleted file mode 100755 index e18c11be..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/Configurable.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.util.props; - -/** - * Defines the interface that must be implemented by any configurable component in Sphinx-4. The life cycle of a - * component is as follows: - *

    • Class Parsing The class file is parsed in order to determine all its configurable properties. These - * are defined using public static final String fields which are annotated with one of the following - * annotations:
      • S4Integer
      • S4Double
      • S4Boolean
      • S4Component
      • S4ComponentList
      Further - * informations about property-specific fields can be found in the javadoc of the property-annotation-definitions. Only - * names of annotated properties will be allowed by the configuration system later on. - *
    • Construction - The (empty) component constructor is called in order to instantiate the component. - * Typically the constructor does little, if any work, since the component has not been configured yet. - *
    • Configuration - Shortly after instantiation, the component's newProperties method is - * called. This method is called with a PropertySheet containing the properties (usually taken from an - * external configuration file). The component should extract the properties from the property sheet. If some properties - * defined for a component does not fulfill the property definition given by the annotation (type, range, etc.) a - * PropertyException is thrown. Typically, once a component gets its configuration data via the - * newData method, the component will initialize itself. - *

      - * Note: In most cases newProperties is called only once as a result of system configuration during - * startup. But nevertheless it is possible (and sometimes necessary) to reconfigure a component while it's running. - * Therefore, a well behaved component should react properly to multiple newProperties calls.

    - *

    - * Connecting to other components - *

    Components often need to interact with other components in the system. - * One of the design goals of Sphinx-4 is that it allows for very flexible hook up of components in the system. - * Therefore, it is *not* considered good S4 style to hardcode which subcomponents a particular subcomponent is - * interacting with. Instead, the component should use the configuration manager to provide the hook up to another - * component. - *

    - * For example, if a component needs to interact with a Linguist. Instead of explicitly setting which linguist is to be - * used via a constructor or via a setLinguist call, the component should instead define a configuration - * property for the linguist. This would be done like so: - * - * \@S4Component(type=Linguist.class) - * public static String PROP_LINGUIST = "linguist"; - * - *

    The linguist is made available in the newProperties method, like so:

    - * - * public void newProperties(PropertySheet propertySheet) { - * linguist = (Linguist) propertySheet.getComponent(PROP_LINGUIST); - * } - * - * This getComponent call will find the proper linguist based upon the configuration data. Thus, if the - * configuration for this component had the 'linguist' defined to be 'dynamicLexTreeLinguist', then the configuration - * manager will look up and return a linguist with that name, creating and configuring it as necessary. Of course, the - * dynamicLexTreeLinguist itself may have a number of sub-components that will be created and configured as a result. If - * the component doesn't exist (but was defined to mandatory) and no configuration information is found in the config - * file for it, or if it is of the wrong type, a PropertyException will be thrown. - */ -public interface Configurable { - - - /** - * This method is called when this configurable component needs to be reconfigured. - * - * @param ps a property sheet holding the new data - * @throws PropertyException if there is a problem with the properties. - */ - public void newProperties(PropertySheet ps) throws PropertyException; -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/ConfigurableAdapter.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/ConfigurableAdapter.java deleted file mode 100755 index 7e390bc0..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/ConfigurableAdapter.java +++ /dev/null @@ -1,49 +0,0 @@ -package edu.cmu.sphinx.util.props; - -import java.util.logging.Logger; - -/** - * An default (abstract) implementation of a configurable that implements a meaning {@code toString()} and keeps a - * references to the {@code Confurable}'s logger. - * - * @author Holger Brandl - */ -public abstract class ConfigurableAdapter implements Configurable { - - private String name; - protected Logger logger; - - public ConfigurableAdapter() { - } - - protected void initLogger() { - this.name = getClass().getSimpleName(); - init( name , Logger.getLogger( name ) ); - } - - public void newProperties(PropertySheet ps) throws PropertyException { - init( ps.getInstanceName(), ps.getLogger()); - } - - private void init(String name, Logger logger) { - this.name = name; - this.logger = logger; - } - - /** @return the configuration name this {@code Configurable}. */ - public String getName() { - // fix null names - return name != null ? name : getClass().getSimpleName(); - } - - - /** - * Returns the name of this BaseDataProcessor. - * - * @return the name of this BaseDataProcessor - */ - @Override - public String toString() { - return getName(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/ConfigurationChangeListener.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/ConfigurationChangeListener.java deleted file mode 100755 index 60491860..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/ConfigurationChangeListener.java +++ /dev/null @@ -1,47 +0,0 @@ -package edu.cmu.sphinx.util.props; - -/** - * Describes all methods necessary to process change events of a ConfigurationManager. - * - * @author Holger Brandl - * @see edu.cmu.sphinx.util.props.ConfigurationManager - */ - -public interface ConfigurationChangeListener { - - /** - * Called if the configuration of a registered compoenent named configurableName was changed. - * - * @param configurableName The name of the changed configurable. - * @param propertyName The name of the property which was changed - * @param cm The ConfigurationManager-instance this component is registered to - */ - public void configurationChanged(String configurableName, String propertyName, ConfigurationManager cm); - - - /** - * Called if a new compoenent defined by ps was registered to the ConfigurationManager - * cm. - * @param cm Configuration manager - * @param ps Property sheet - */ - public void componentAdded(ConfigurationManager cm, PropertySheet ps); - - - /** - * Called if a compoenent defined by ps was unregistered (removed) from the ConfigurationManager - * cm. - * @param cm Configuration manager - * @param ps Property sheet - */ - public void componentRemoved(ConfigurationManager cm, PropertySheet ps); - - - /** - * Called if a compoenent was renamed. - * @param cm Configuration manager - * @param ps Property sheet - * @param oldName Old name - */ - public void componentRenamed(ConfigurationManager cm, PropertySheet ps, String oldName); -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/ConfigurationManager.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/ConfigurationManager.java deleted file mode 100755 index e2fece32..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/ConfigurationManager.java +++ /dev/null @@ -1,601 +0,0 @@ -package edu.cmu.sphinx.util.props; - -import java.io.File; -import java.io.IOException; -import java.net.URL; -import java.util.*; -import java.util.logging.Logger; - - -/** - * Manages a set of Configurables, their parameterization and the relationships between them. Configurations - * can be specified either by xml or on-the-fly during runtime. - * - * @see edu.cmu.sphinx.util.props.Configurable - * @see edu.cmu.sphinx.util.props.PropertySheet - */ -public class ConfigurationManager implements Cloneable { - - private List changeListeners = new ArrayList(); - - private Map symbolTable = new LinkedHashMap(); - private Map rawPropertyMap = new HashMap(); - private Map globalProperties = new HashMap(); - - private boolean showCreations; - private URL configURL; - - - /** - * Creates a new empty configuration manager. This constructor is only of use in cases when a system configuration - * is created during runtime. - */ - public ConfigurationManager() { - } - - - /** - * Creates a new configuration manager. Initial properties are loaded from the given URL. No need to keep the notion - * of 'context' around anymore we will just pass around this property manager. - * - * @param configFileName The location of the configuration file. - */ - public ConfigurationManager(String configFileName) throws PropertyException { - this(ConfigurationManagerUtils.getURL(new File(configFileName))); - } - - - /** - * Creates a new configuration manager. Initial properties are loaded from the given URL. No need to keep the notion - * of 'context' around anymore we will just pass around this property manager. - * - * @param url The location of the configuration file. - */ - public ConfigurationManager(URL url) throws PropertyException { - configURL = url; - - try { - rawPropertyMap = new SaxLoader(url, globalProperties).load(); - } catch (IOException e) { - throw new RuntimeException(e); - } - - ConfigurationManagerUtils.applySystemProperties(rawPropertyMap, globalProperties); - ConfigurationManagerUtils.configureLogger(this); - - // we can't configure the configuration manager with itself so we - // do some of these configure items manually. - String showCreations = globalProperties.get("showCreations"); - if (showCreations != null) - this.showCreations = "true".equals(showCreations); - } - - - /** - * Returns the property sheet for the given object instance - * - * @param instanceName the instance name of the object - * @return the property sheet for the object. - */ - public PropertySheet getPropertySheet(String instanceName) { - if (!symbolTable.containsKey(instanceName)) { - // if it is not in the symbol table, so construct - // it based upon our raw property data - RawPropertyData rpd = rawPropertyMap.get(instanceName); - if (rpd != null) { - String className = rpd.getClassName(); - try { - Class cls = Class.forName(className); - - // now load the property-sheet by using the class annotation - PropertySheet propertySheet = new PropertySheet(cls.asSubclass(Configurable.class), instanceName, this, rpd); - - symbolTable.put(instanceName, propertySheet); - - } catch (ClassNotFoundException e) { - System.err.println("class not found !" + e); - } catch (ClassCastException e) { - System.err.println("can not cast class !" + e); - } catch (ExceptionInInitializerError e) { - System.err.println("couldn't load class !" + e); - } - } - } - - return symbolTable.get(instanceName); - } - - - /** - * Gets all instances that are of the given type. - * - * @param type the desired type of instance - * @return the set of all instances - */ - public Collection getInstanceNames(Class type) { - Collection instanceNames = new ArrayList(); - - for (PropertySheet ps : symbolTable.values()) { - if (!ps.isInstanciated()) - continue; - - if (ConfigurationManagerUtils.isDerivedClass(ps.getConfigurableClass(), type)) - instanceNames.add(ps.getInstanceName()); - } - - return instanceNames; - } - - - /** - * Returns all names of configurables registered to this instance. The resulting set includes instantiated and - * non-instantiated components. - * - * @return all component named registered to this instance of ConfigurationManager - */ - public Set getComponentNames() { - return rawPropertyMap.keySet(); - } - - - /** - * Looks up a configurable component by name. Creates it if necessary - * - * @param instanceName the name of the component - * @param component type - * @return the component, or null if a component was not found. - * @throws InternalConfigurationException If the requested object could not be properly created, or is not a - * configurable object, or if an error occured while setting a component - * property. - */ - @SuppressWarnings("unchecked") - public C lookup(String instanceName) throws InternalConfigurationException { - // Apply all new properties to the model. - instanceName = getStrippedComponentName(instanceName); - PropertySheet ps = getPropertySheet(instanceName); - - if (ps == null) - return null; - - if (showCreations) - getRootLogger().config("Creating: " + instanceName); - - return (C) ps.getOwner(); - } - - - /** - * Returns a Configurable instance of a given type C, if such a component (or a derived - * one) is registered to this ConfigurationManager instance, and there is one and only match. - *

    - * This is a convenience method that allows to access a system configuration without knowing the instance names of - * registered components. - * - * @param A component type - * @param confClass class to lookup - * @return The Configurable instance of null if there is no matching Configurable. - * @throws IllegalArgumentException if more than one component of the given type is registered to this - * ConfigurationManager. - */ - public C lookup(Class confClass) { - List matchPropSheets = getPropSheets(confClass); - if (matchPropSheets.isEmpty()) - return null; - - assert matchPropSheets.size() == 1; - return confClass.cast(lookup(matchPropSheets.get(0).getInstanceName())); - } - - - /** - * Given a Configurable-class/interface, all property-sheets which are subclassing/implemting this - * class/interface are collected and returned. No Configurable will be instantiated by this method. - * @param confClass class to lookup - * @return a list of property sheets - */ - public List getPropSheets(Class confClass) { - List psCol = new ArrayList(); - - for (PropertySheet ps : symbolTable.values()) { - if (ConfigurationManagerUtils.isDerivedClass(ps.getConfigurableClass(), confClass)) - psCol.add(ps); - } - - return psCol; - } - - - /** - * Registers a new configurable to this configuration manager. - * - * @param confClass The class of the configurable to be instantiated and to be added to this configuration manager - * instance. - * @param name The desired lookup-name of the configurable - * @throws IllegalArgumentException if the there's already a component with the same name registered to - * this configuration manager instance. - */ - public void addConfigurable(Class confClass, String name) { - addConfigurable(confClass, name, new HashMap()); - } - - - /** - * Registers a new configurable to this configuration manager. - * - * @param confClass The class of the configurable to be instantiated and to be added to this configuration manager - * instance. - * @param name The desired lookup-name of the configurable - * @param props The properties to be used for component configuration - * @throws IllegalArgumentException if the there's already a component with the same name registered to - * this configuration manager instance. - */ - public void addConfigurable(Class confClass, String name, Map props) { - if (name == null) // use the class name as default if no name is given - name = confClass.getName(); - - if (symbolTable.containsKey(name)) - throw new IllegalArgumentException("tried to override existing component name : " + name); - - PropertySheet ps = getPropSheetInstanceFromClass(confClass, props, name, this); - symbolTable.put(name, ps); - rawPropertyMap.put(name, new RawPropertyData(name, confClass.getName())); - - for (ConfigurationChangeListener changeListener : changeListeners) - changeListener.componentAdded(this, ps); - } - - - /** - * Adds an already instantiated Configurable to this configuration manager. - * - * @param configurable A configurable to add - * @param name The desired lookup-instanceName of the configurable - */ - public void addConfigurable(Configurable configurable, String name) { - if (symbolTable.containsKey(name)) - throw new IllegalArgumentException("tried to override existing component name"); - - RawPropertyData dummyRPD = new RawPropertyData(name, configurable.getClass().getName()); - - PropertySheet ps = new PropertySheet(configurable, name, dummyRPD, this); - symbolTable.put(name, ps); - rawPropertyMap.put(name, dummyRPD); - - for (ConfigurationChangeListener changeListener : changeListeners) - changeListener.componentAdded(this, ps); - } - - - public void renameConfigurable(String oldName, String newName) { - PropertySheet ps = getPropertySheet(oldName); - - if (ps == null) { - throw new RuntimeException("no configurable (to be renamed) named " + oldName + " is contained in the CM"); - } - - ConfigurationManagerUtils.renameComponent(this, oldName, newName); - - symbolTable.remove(oldName); - symbolTable.put(newName, ps); - - RawPropertyData rpd = rawPropertyMap.remove(oldName); - rawPropertyMap.put(newName, new RawPropertyData(newName, rpd.getClassName(), rpd.getProperties())); - - fireRenamedConfigurable(oldName, newName); - } - - - /** Removes a configurable from this configuration manager. - * @param name a name to remove - */ - public void removeConfigurable(String name) { - assert getComponentNames().contains(name); - - PropertySheet ps = symbolTable.remove(name); - rawPropertyMap.remove(name); - - for (ConfigurationChangeListener changeListener : changeListeners) - changeListener.componentRemoved(this, ps); - } - - - /** @param subCM The subconfiguration that should be to this instance */ - public void addSubConfiguration(ConfigurationManager subCM) { - addSubConfiguration(subCM, false); - } - - - /** - * Adds a subconfiguration to this instance by registering all subCM-components and all its global properties. - * - * @param subCM The subconfiguration that should be to this instance - * @param doOverrideComponents If true non-instantiated components will be overridden by elements of - * subCM even if already being registered to this CM-instance. The same holds for global - * properties. - * @throws RuntimeException if an already instantiated component in this instance is redefined in subCM. - */ - public void addSubConfiguration(ConfigurationManager subCM, boolean doOverrideComponents) { - Collection compNames = getComponentNames(); - - for (String componentName : subCM.getComponentNames()) { - if (compNames.contains(componentName)) { - if (doOverrideComponents && !getPropertySheet(componentName).isInstanciated()) { - PropertySheet ps = subCM.getPropertySheet(componentName); - symbolTable.put(componentName, ps); - rawPropertyMap.put(componentName, new RawPropertyData(componentName, ps.getConfigurableClass().getSimpleName())); - - } else { - throw new RuntimeException(componentName + " is already registered to system configuration"); - } - } - } - - for (String globProp : subCM.globalProperties.keySet()) { - // the second test is necessary because system-props will be global-props in both CMs - if (globalProperties.containsKey(globProp) && !System.getProperties().containsKey(globProp)) { - if (!doOverrideComponents) - throw new RuntimeException(globProp + " is already registered as global property"); - } - } - - globalProperties.putAll(subCM.globalProperties); - - // correct the reference to the configuration manager - for (PropertySheet ps : subCM.symbolTable.values()) { - ps.setCM(this); - } - - symbolTable.putAll(subCM.symbolTable); - rawPropertyMap.putAll(subCM.rawPropertyMap); - } - - - /** @return a copy of the map of global properties set for this configuration manager. */ - public Map getGlobalProperties() { - return new HashMap(globalProperties); - } - - - /** - * Returns a global property. - * - * @param propertyName The name of the global property or null if no such property exists - * @return a global property - */ - public String getGlobalProperty(String propertyName) { - // propertyName = propertyName.startsWith("$") ? propertyName : "${" + propertyName + "}"; - String globProp = globalProperties.get(propertyName); - return globProp != null ? globProp.toString() : null; - } - - - public String getGloPropReference(String propertyName) { - return globalProperties.get(propertyName); - } - - - /** - * @return the URL of the XML configuration which defined this configuration or null if it was created - * dynamically. - */ - public URL getConfigURL() { - return configURL; - } - - - /** - * Sets a global property. - * - * @param propertyName The name of the global property. - * @param value The new value of the global property. If the value is null the property becomes - * removed. - */ - public void setGlobalProperty(String propertyName, String value) { - if (value == null) - globalProperties.remove(propertyName); - else - globalProperties.put(propertyName, value); - - // update all component configurations because they might be affected by the change - for (String instanceName : getInstanceNames(Configurable.class)) { - PropertySheet ps = getPropertySheet(instanceName); - if (ps.isInstanciated()) - try { - ps.getOwner().newProperties(ps); - } catch (PropertyException e) { - e.printStackTrace(); - } - } - } - - - public String getStrippedComponentName(String propertyName) { - assert propertyName != null; - - while (propertyName.startsWith("$")) - propertyName = globalProperties.get(ConfigurationManagerUtils.stripGlobalSymbol(propertyName)).toString(); - - return propertyName; - } - - - /** Adds a new listener for configuration change events. - * @param l listener to add - **/ - public void addConfigurationChangeListener(ConfigurationChangeListener l) { - if (l == null) - return; - - changeListeners.add(l); - } - - - /** Removes a listener for configuration change events. - * @param l listener to remove - **/ - public void removeConfigurationChangeListener(ConfigurationChangeListener l) { - if (l == null) - return; - - changeListeners.remove(l); - } - - - /** - * Informs all registered ConfigurationChangeListeners about a configuration changes the component - * named configurableName. - */ - void fireConfChanged(String configurableName, String propertyName) { - assert getComponentNames().contains(configurableName); - - for (ConfigurationChangeListener changeListener : changeListeners) - changeListener.configurationChanged(configurableName, propertyName, this); - } - - - /** - * Informs all registered ConfigurationChangeListeners about the component previously namesd - * oldName - */ - void fireRenamedConfigurable(String oldName, String newName) { - assert getComponentNames().contains(newName); - - for (ConfigurationChangeListener changeListener : changeListeners) { - changeListener.componentRenamed(this, getPropertySheet(newName), oldName); - } - } - - - /** - * Test whether the given configuration manager instance equals this instance in terms of same configuration. This - * This equals implementation does not care about instantiation of components. - */ - @Override - public boolean equals(Object obj) { - if (!(obj instanceof ConfigurationManager)) - return false; - - ConfigurationManager cm = (ConfigurationManager) obj; - - Set thisCompNames = getComponentNames(); - if (!thisCompNames.equals(cm.getComponentNames())) - return false; - - // make sure that all components are the same - for (String instanceName : thisCompNames) { - PropertySheet myPropSheet = getPropertySheet(instanceName); - PropertySheet otherPropSheet = cm.getPropertySheet(instanceName); - - if (!otherPropSheet.equals(myPropSheet)) - return false; - } - - // make sure that both configuration managers have the same set of global properties - return cm.getGlobalProperties().equals(getGlobalProperties()); - } - - @Override - public int hashCode() { - assert false : "hashCode not designed"; - return 1; // any arbitrary constant will do - } - - /** Creates a deep copy of the given CM instance. */ - // This is not tested yet !!! - @Override - public ConfigurationManager clone() throws CloneNotSupportedException { - ConfigurationManager cloneCM = (ConfigurationManager)super.clone(); - - cloneCM.changeListeners = new ArrayList(); - cloneCM.symbolTable = new LinkedHashMap(); - for (Map.Entry entry : symbolTable.entrySet()) { - cloneCM.symbolTable.put(entry.getKey(), entry.getValue().clone()); - } - - cloneCM.globalProperties = new HashMap(globalProperties); - cloneCM.rawPropertyMap = new HashMap(rawPropertyMap); - - - return cloneCM; - } - - - /** - * Creates an instance of the given Configurable by using the default parameters as defined by the - * class annotations to parameterize the component. - * @param component class - * @param targetClass target class - * @return an instance of class - * @throws PropertyException if no such class is defined - */ - public static C getInstance(Class targetClass) throws PropertyException { - return getInstance(targetClass, new HashMap()); - } - - - /** - * Creates an instance of the given Configurable by using the default parameters as defined by the - * class annotations to parameterize the component. Default parameters will be overridden if a their names are - * contained in the given props-map - * @param component class - * @param targetClass target class - * @param props additional properties - * @return an instance of class - * @throws PropertyException if no such class is defined - */ - public static C getInstance(Class targetClass, Map props) throws PropertyException { - return getInstance(targetClass, props, null); - - } - - - /** - * Creates an instance of the given Configurable by using the default parameters as defined by the - * class annotations to parameterize the component. Default parameters will be overridden if a their names are - * contained in the given props-map. The component is used to create a parameterized logger for the - * Configurable being created. - * @param component class - * @param targetClass target class - * @param props additional properties - * @param compName component name - * @return an instance of class - * @throws PropertyException if no such class is defined - */ - public static C getInstance(Class targetClass, Map props, String compName) throws PropertyException { - PropertySheet ps = getPropSheetInstanceFromClass(targetClass, props, compName, new ConfigurationManager()); - Configurable configurable = ps.getOwner(); - return targetClass.cast(configurable); - } - - - /** - * Instantiates the given targetClass and instruments it using default properties or the properties - * given by the defaultProps. - */ - private static PropertySheet getPropSheetInstanceFromClass(Class targetClass, Map defaultProps, String componentName, ConfigurationManager cm) { - RawPropertyData rpd = new RawPropertyData(componentName, targetClass.getName()); - - for (Map.Entry entry : defaultProps.entrySet()) { - Object property = entry.getValue(); - - if (property instanceof Class) - property = ((Class) property).getName(); - - rpd.getProperties().put(entry.getKey(), property); - } - - return new PropertySheet(targetClass, componentName, cm, rpd); - } - - - /** - * Returns the root-logger of this configuration manager. This method is just a convenience mapper around a few CMU - * calls. - * - * @return the root logger of this CM-instance - */ - public Logger getRootLogger() { - return Logger.getLogger(ConfigurationManagerUtils.getLogPrefix(this)); - } -} - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/ConfigurationManagerUtils.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/ConfigurationManagerUtils.java deleted file mode 100755 index c5748e29..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/ConfigurationManagerUtils.java +++ /dev/null @@ -1,734 +0,0 @@ -package edu.cmu.sphinx.util.props; - -import java.io.*; -import java.net.MalformedURLException; -import java.net.URL; -import java.nio.charset.Charset; -import java.util.*; -import java.util.logging.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import edu.cmu.sphinx.util.SphinxLogFormatter; - -/** - * Some static utility methods which ease the handling of system configurations. - * - * @author Holger Brandl - */ -public final class ConfigurationManagerUtils { - - // this pattern matches strings of the form '${word}' - private static final Pattern globalSymbolPattern = Pattern.compile("\\$\\{(\\w+)\\}"); - - /** - * A common property (used by all components) that sets the log level for the component. - */ - public final static String GLOBAL_COMMON_LOGLEVEL = "logLevel"; - - /** - * The default file suffix of configuration files. - */ - public static final String CM_FILE_SUFFIX = ".sxl"; - - - // disabled constructor because the class is just a collection of utilities for handling system configurations - - private ConfigurationManagerUtils() { - } - - - /** - * Validates that only annotated property names have been used to setup this instance of {@code - * edu.cmu.sphinx.util.props.ConfigurationManager}. - * - * @param cm Configuration manager - * @return {@code true} if it is a valid configuration. - */ - public boolean validateConfiguration(ConfigurationManager cm) { - for (String compName : cm.getComponentNames()) { - if (!cm.getPropertySheet(compName).validate()) - return false; - } - - return true; - } - - - /** - * Strips the ${ and } off of a global symbol of the form ${symbol}. - * - * @param symbol the symbol to strip - * @return the stripped symbol - */ - public static String stripGlobalSymbol(String symbol) { - Matcher matcher = globalSymbolPattern.matcher(symbol); - if (matcher.matches()) { - return matcher.group(1); - } else { - return symbol; - } - } - - - public static void editConfig(ConfigurationManager cm, String name) { - PropertySheet ps = cm.getPropertySheet(name); - boolean done; - - if (ps == null) { - System.out.println("No component: " + name); - return; - } - System.out.println(name + ':'); - - Collection propertyNames = ps.getRegisteredProperties(); - BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); - - for (String propertyName : propertyNames) { - try { - Object value = ps.getRaw(propertyName); - String svalue; - - if (value instanceof List) { - continue; - } else if (value instanceof String) { - svalue = (String) value; - } else { - svalue = "DEFAULT"; - } - done = false; - - while (!done) { - System.out.print(" " + propertyName + " [" + svalue + "]: "); - String in = br.readLine(); - if (in.isEmpty()) { - done = true; - } else if (in.equals(".")) { - return; - } else { - - cm.getPropertySheet(name).setRaw(propertyName, in); - done = true; - } - } - } catch (IOException ioe) { - System.out.println("Trouble reading input"); - return; - } - } - } - - - // remark: the replacement of xml/sxl suffix is not necessary and just done to improve readability - public static String getLogPrefix(ConfigurationManager cm) { - if (cm.getConfigURL() != null) - return new File(cm.getConfigURL().getFile()).getName().replace(".sxl", "").replace(".xml", "") + '.'; - else - return "S4CM."; - } - - /** - * Configure the logger - * @param cm Configuration manager - */ - public static void configureLogger(ConfigurationManager cm) { - - // Allow others to override the logging settings. - if (System.getProperty("java.util.logging.config.class") != null - || System.getProperty("java.util.logging.config.file") != null) { - return; - } - // apply the log level (if defined) for the root logger (because we're using package based logging now) - - String cmPrefix = getLogPrefix(cm); - Logger cmRootLogger = Logger.getLogger(cmPrefix.substring(0, cmPrefix.length() - 1)); - - // we need to determine the root-level here, because the logManager will reset it - Level rootLevel = Logger.getLogger("").getLevel(); - - configureLogger(cmRootLogger); - - String level = cm.getGlobalProperty(GLOBAL_COMMON_LOGLEVEL); - if (level == null) - level = Level.WARNING.getName(); - - cmRootLogger.setLevel(Level.parse(level)); - - // restore the old root logger level - Logger.getLogger("").setLevel(rootLevel); - } - - - /** - * Configures a logger to use the sphinx4-log-formatter. - * @param logger logger to configure - */ - public static void configureLogger(Logger logger) { - - logger.setUseParentHandlers(false); - - boolean hasHandler = false; - - for (Handler handler : logger.getHandlers()) { - if (handler.getFormatter() instanceof SphinxLogFormatter) { - hasHandler = true; - break; - } - } - - if (!hasHandler) { - ConsoleHandler handler = new ConsoleHandler(); - handler.setFormatter(new SphinxLogFormatter()); - logger.addHandler(handler); - } - } - - - /** - * This method will automatically rename all components of subCM for which there is component named the - * same in the baseCM . - *

    - * Note: This is required when merging two system configurations into one. - * - * @param baseCM base configuration manager - * @param subCM other configuration manager - * @return A map which maps all renamed component names to their new names. - */ - public static Map fixDuplicateNames(ConfigurationManager baseCM, ConfigurationManager subCM) { - Map renames = new HashMap(); - - for (String compName : subCM.getComponentNames()) { - String uniqueName = compName; - - int i = 0; - - while (baseCM.getComponentNames().contains(uniqueName) || - (subCM.getComponentNames().contains(uniqueName) && !uniqueName.equals(compName))) { - - i++; - uniqueName = compName + i; - } - - subCM.renameConfigurable(compName, uniqueName); - renames.put(compName, uniqueName); - } - - return renames; - } - - - /** - * Converts a configuration manager instance into a xml-string . - * Note: This methods will not instantiate configurables. - * - * @param cm configuration manager - * @return xml representation - */ - public static String toXML(ConfigurationManager cm) { - StringBuilder sb = new StringBuilder(); - sb.append("\n"); - sb.append("\n \n\n"); - - sb.append(""); - - Pattern pattern = Pattern.compile("\\$\\{(\\w+)\\}"); - - Map globalProps = cm.getGlobalProperties(); - for (Map.Entry entry : globalProps.entrySet()) { - String propName = entry.getKey(); - - Matcher matcher = pattern.matcher(propName); - propName = matcher.matches() ? matcher.group(1) : propName; - - sb.append("\n\t"); - } - - for (String instanceName : cm.getComponentNames()) - sb.append("\n\n").append(propSheet2XML(instanceName, cm.getPropertySheet(instanceName))); - - sb.append("\n"); - return sb.toString(); - } - - - private static String propSheet2XML(String instanceName, PropertySheet ps) { - StringBuilder sb = new StringBuilder(); - sb.append("\t"); - - for (String propName : ps.getRegisteredProperties()) { - String predec = "\n\t\t"); - List compNames = toStringList(ps.getRawNoReplacement(propName)); - for (String compName : compNames) - sb.append("\n\t\t\t").append(compName).append(""); - sb.append("\n\t\t"); - break; - default: - sb.append(predec).append("value=\"").append(ps.getRawNoReplacement(propName)).append("\"/>"); - } - } - - sb.append("\n\t\n\n"); - return sb.toString(); - } - - - public static void save(ConfigurationManager cm, File cmLocation) { - if (!cmLocation.getName().endsWith(CM_FILE_SUFFIX)) - System.err.println("WARNING: Serialized s4-configuration should have the suffix '" + CM_FILE_SUFFIX + '\''); - - assert cm != null; - try { - PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(cmLocation), Charset.forName("UTF-8"))); - String configXML = ConfigurationManagerUtils.toXML(cm); - pw.print(configXML); - pw.flush(); - pw.close(); - } catch (FileNotFoundException e1) { - e1.printStackTrace(); - } - } - - - /** - * Shows the current configuration - * @param cm configuration manager - */ - public static void showConfig(ConfigurationManager cm) { - System.out.println(" ============ config ============= "); - for (String allName : cm.getInstanceNames(Configurable.class)) { - showConfig(cm, allName); - } - } - - - /** - * Show the configuration for the component with the given name - * - * @param cm configuration manager - * @param name the component name - */ - public static void showConfig(ConfigurationManager cm, String name) { - // Symbol symbol = cm.getsymbolTable.get(name); - - if (!cm.getComponentNames().contains(name)) { - System.out.println("No component: " + name); - return; - } - System.out.println(name + ':'); - - PropertySheet properties = cm.getPropertySheet(name); - - for (String propertyName : properties.getRegisteredProperties()) { - System.out.print(" " + propertyName + " = "); - Object obj; - obj = properties.getRaw(propertyName); - if (obj instanceof String) { - System.out.println(obj); - } else if (obj instanceof List) { - List l = (List) obj; - for (Iterator k = l.iterator(); k.hasNext();) { - System.out.print(k.next()); - if (k.hasNext()) { - System.out.print(", "); - } - } - System.out.println(); - } else { - System.out.println("[DEFAULT]"); - } - } - } - - - /** - * Applies the system properties to the raw property map. System properties should be of the form - * compName[paramName]=paramValue - *

    - * List types cannot currently be set from system properties. - * - * @param rawMap the map of raw property values - * @param global global properties - * @throws PropertyException if an attempt is made to set a parameter for an unknown component. - */ - static void applySystemProperties(Map rawMap, Map global) - throws PropertyException { - Properties props = System.getProperties(); - for (Enumeration e = props.keys(); e.hasMoreElements();) { - String param = (String) e.nextElement(); - String value = props.getProperty(param); - - // search for parameters of the form component[parameter]=value - // these go in the property sheet for the component - int lb = param.indexOf('['); - int rb = param.indexOf(']'); - - if (lb > 0 && rb > lb) { - String compName = param.substring(0, lb); - String paramName = param.substring(lb + 1, rb); - RawPropertyData rpd = rawMap.get(compName); - if (rpd != null) { - rpd.add(paramName, value); - } else { - throw new InternalConfigurationException(compName, param, - "System property attempting to set parameter " - + " for unknown component " + compName - + " (" + param + ')'); - } - } - - // look for parameters of the form foo=bar - // these go in the global map - - else if (param.indexOf('.') == -1) { - global.put(param, value); - } - } - } - - - /** - * Renames a given Configurable. The configurable component named oldName is assumed to be - * registered to the CM. Renaming does not only affect the configurable itself but possibly global property values - * and properties of other components. - */ - static void renameComponent(ConfigurationManager cm, String oldName, String newName) { - assert cm != null; - assert oldName != null && newName != null; - if (cm.getPropertySheet(oldName) == null) { - throw new RuntimeException("no configurable (to be renamed) named " + oldName + " is contained in the CM"); - } - - // this iteration is a little hacky. It would be much better to maintain the links to a configurable in a special table - for (String instanceName : cm.getComponentNames()) { - PropertySheet propSheet = cm.getPropertySheet(instanceName); - - for (String propName : propSheet.getRegisteredProperties()) { - if (propSheet.getRawNoReplacement(propName) == null) - continue; // if the property was net defined within the xml-file - - switch (propSheet.getType(propName)) { - - case COMPONENT_LIST: - List compNames = toStringList(propSheet.getRawNoReplacement(propName)); - for (int i = 0; i < compNames.size(); i++) { - String compName = compNames.get(i); - if (compName.equals(oldName)) { - compNames.set(i, newName); - } - } - - break; - case COMPONENT: - if (propSheet.getRawNoReplacement(propName).equals(oldName)) { - propSheet.setRaw(propName, newName); - } - default: - break; - } - } - } - - PropertySheet ps = cm.getPropertySheet(oldName); - ps.setInstanceName(newName); - - // it might be possible that the component is the value of a global property - for (Map.Entry entry : cm.getGlobalProperties().entrySet()) { - if (entry.getValue().equals(oldName)) - cm.setGlobalProperty(entry.getKey(), newName); - } - } - - - /** - * Gets a resource associated with the given parameter name given an property sheet. - * - * @param name the parameter name - * @param ps The property sheet which contains the property - * @return the resource associated with the name or NULL if it doesn't exist. - * @throws PropertyException if the resource cannot be found - */ - public static URL getResource(String name, PropertySheet ps) throws PropertyException { - - String location = ps.getString(name); - if (location == null) { - throw new InternalConfigurationException(ps.getInstanceName(), name, "Required resource property '" + name + "' not set"); - } - - try { - URL url = resourceToURL(location); - - if (url == null) { - throw new InternalConfigurationException(ps.getInstanceName(), name, "Can't locate " + location); - } - return url; - } catch (MalformedURLException e) { - throw new InternalConfigurationException(e, ps.getInstanceName(), name, "Bad URL " + location + e.getMessage()); - } - - } - - final static Pattern jarPattern = Pattern.compile("resource:(.*)", Pattern.CASE_INSENSITIVE); - - public static URL resourceToURL(String location) throws MalformedURLException { - Matcher jarMatcher = jarPattern.matcher(location); - if (jarMatcher.matches()) { - String resourceName = jarMatcher.group(1); - return ConfigurationManagerUtils.class.getResource(resourceName); - } else { - if (location.indexOf(':') == -1) { - location = "file:" + location; - } - return new URL(location); - } - } - - - /** - * @param derived derived class - * @param parent parent class - * @return true if aClass is either equal to poosibleParent, a subclass of - * it, or implements it if possibleParent is an interface. - */ - public static boolean isDerivedClass(Class derived, Class parent) { - return parent.isAssignableFrom(derived); - } - - - public static boolean isImplementingInterface(Class aClass, Class interfaceClass) { - assert interfaceClass.isInterface(); - - Class superClass = aClass.getSuperclass(); - if (superClass != null && isImplementingInterface(superClass, interfaceClass)) - return true; - - for (Class curInterface : aClass.getInterfaces()) { - if (curInterface.equals(interfaceClass) || isImplementingInterface(curInterface, interfaceClass)) - return true; - } - - return false; - } - - - public static boolean isSubClass(Class aClass, Class possibleSuperclass) { - while (aClass != null && !aClass.equals(Object.class)) { - aClass = aClass.getSuperclass(); - - if (aClass != null && aClass.equals(possibleSuperclass)) - return true; - } - - return false; - } - - - /** - * Why do we need this method? The reason is, that we would like to avoid this method to be part of the - * PropertySheet-API. In some circumstances it is nevertheless required to get access to the managing - * ConfigurationManager. - * @param ps Property sheet - * @return the new configuration manager - */ - public static ConfigurationManager getPropertyManager(PropertySheet ps) { - return ps.getPropertyManager(); - } - - - /** - * Returns a map of all component-properties of this config-manager (including their associated property-sheets. - * - * @param cm configuration manager - * @return map with properties - */ - public static Map> listAllsPropNames(ConfigurationManager cm) { - Map> allProps = new HashMap>(); - - for (String configName : cm.getComponentNames()) { - PropertySheet ps = cm.getPropertySheet(configName); - - for (String propName : ps.getRegisteredProperties()) { - if (!allProps.containsKey(propName)) - allProps.put(propName, new ArrayList()); - - allProps.get(propName).add(ps); - } - } - - return allProps; - } - - - public static void dumpPropStructure(ConfigurationManager cm) { - Map> allProps = listAllsPropNames(cm); - - System.out.println("Property-structure of '" + cm.getConfigURL() + "':"); - - // print non-ambiguous props first - System.out.println("\nUnambiguous properties = "); - for (Map.Entry> entry : allProps.entrySet()) { - if (entry.getValue().size() == 1) - System.out.print(entry.getKey() + ", "); - } - - // now print ambiguous properties (including the associated components - System.out.println("\n\nAmbiguous properties: "); - for (Map.Entry> entry : allProps.entrySet()) { - if (entry.getValue().size() == 1) - continue; - - System.out.print(entry.getKey() + '='); - for (PropertySheet ps : entry.getValue()) { - System.out.print(ps.getInstanceName() + ", "); - } - System.out.println(); - } - } - - - /** - * Attempts to set the value of an arbitrary component-property. If the property-name is ambiguous with respect to - * the given ConfiguratioManager an extended syntax (componentName->propName) can be used to access the - * property. - *

    - * Beside component properties it is also possible to modify the class of a configurable, but this is only allowed if - * the configurable under question has not been instantiated yet. Furthermore the user has to ensure to set all - * mandatory component properties. - * @param cm configuration manager - * @param propName property to set - * @param propValue value to set - */ - public static void setProperty(ConfigurationManager cm, String propName, String propValue) { - assert propValue != null; - - Map> allProps = listAllsPropNames(cm); - Set configurableNames = cm.getComponentNames(); - - if (!allProps.containsKey(propName) && !propName.contains("->") && !configurableNames.contains(propName)) - throw new RuntimeException("No property or configurable '" + propName + "' in configuration '" + cm.getConfigURL() + "'!"); - - // if a configurable-class should be modified - if (configurableNames.contains(propName)) { - try { - final Class confClass = Class.forName(propValue).asSubclass(Configurable.class); - ConfigurationManagerUtils.setClass(cm.getPropertySheet(propName), confClass); - } catch (ClassNotFoundException e) { - throw new RuntimeException(e); - } - - return; - } - - if (!propName.contains("->") && allProps.get(propName).size() > 1) { - throw new RuntimeException("Property-name '" + propName + "' is ambiguous with respect to configuration '" - + cm.getConfigURL() + "'. Use 'componentName->propName' to disambiguate your request."); - } - - String componentName; - - // if disambiguation syntax is used find the correct PS first - if (propName.contains("->")) { - String[] splitProp = propName.split("->"); - componentName = splitProp[0]; - propName = splitProp[1]; - } else { - componentName = allProps.get(propName).get(0).getInstanceName(); - } - - setProperty(cm, componentName, propName, propValue); - } - - public static void setProperty(ConfigurationManager cm, String componentName, String propName, String propValue) { - - // now set the property - PropertySheet ps = cm.getPropertySheet(componentName); - if (ps == null) - throw new RuntimeException("Component '" + propName + "' is not registered to this system configuration '"); - - // set the value to null if the string content is 'null - if (propValue.equals("null")) - propValue = null; - - switch (ps.getType(propName)) { - case BOOLEAN: - ps.setBoolean(propName, Boolean.valueOf(propValue)); - break; - case DOUBLE: - ps.setDouble(propName, new Double(propValue)); - break; - case INT: - ps.setInt(propName, new Integer(propValue)); - break; - case STRING: - ps.setString(propName, propValue); - break; - case COMPONENT: - ps.setComponent(propName, propValue, null); - break; - case COMPONENT_LIST: - List compNames = new ArrayList(); - for (String component : propValue.split(";")) { - compNames.add(component.trim()); - } - - ps.setComponentList(propName, compNames, null); - break; - default: - throw new RuntimeException("unknown property-type"); - } - } - - public static URL getURL(File file) { - try { - return file.toURI().toURL(); - } catch (MalformedURLException e) { - e.printStackTrace(); - } - - return null; - } - - - /** - * Returns the not yet instantiated components registered to this configuration manager. - * - * @param cm configuration manager - * @return collection of instantiated components - */ - public static Collection getNonInstaniatedComps(ConfigurationManager cm) { - Collection nonInstComponents = new ArrayList(); - - for (String compName : cm.getComponentNames()) { - if (!cm.getPropertySheet(compName).isInstanciated()) - nonInstComponents.add(compName); - } - return nonInstComponents; - } - - - public static void setClass(PropertySheet ps, Class confClass) { - if (ps.isInstanciated()) - throw new RuntimeException("configurable " + ps.getInstanceName() + "has already been instantiated"); - - ps.setConfigurableClass(confClass); - } - - - public static List toStringList(Object obj) { - List result = new ArrayList(); - if (!(obj instanceof List)) - return null; - for (Object o : (List) obj) { - if (o instanceof String) { - result.add((String) o); - } - } - return result; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/InternalConfigurationException.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/InternalConfigurationException.java deleted file mode 100755 index a5ae03e8..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/InternalConfigurationException.java +++ /dev/null @@ -1,28 +0,0 @@ -package edu.cmu.sphinx.util.props; - -/** - * Indicates that a problem occurred while setting one or more properties for this component. This includes errors as - * improper type for component(-lists) properties, out-of-range-problems for double-, int- and ranged string-properties, - * instantiation errors and undefined mandatory properties. - *

    - * This exception is instantiable only by the configuration management classes itself. In order to indicate problems - * within Configurable.newProperties which are not coped by types or ranges (eg file-not-found, complex configuration - * logic problems, etc.) PropertyException (which superclasses this class) can be used. - *

    - * The intention of the class is to make a clear distinction between core configuration errors and high level user - * specific problems. - * - * @author Holger Brandl - */ -@SuppressWarnings("serial") -public class InternalConfigurationException extends PropertyException { - - InternalConfigurationException(String instanceName, String propertyName, String msg) { - super(instanceName, propertyName, msg); - } - - - InternalConfigurationException(Throwable cause, String instanceName, String propertyName, String msg) { - super(cause, instanceName, propertyName, msg); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/PropertyException.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/PropertyException.java deleted file mode 100755 index b07d7634..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/PropertyException.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.util.props; - -/** Indicates that a problem occurred while setting one or more properties for this component */ -@SuppressWarnings("serial") -public class PropertyException extends RuntimeException { - - private String instanceName; - private String propertyName; - - - /** - * Creates a new property exception. - * - * @param instanceName The component this exception is related to. (or null if unknown) - * @param propertyName The name of the component-property which the problem is related. (or null if - * unknown) - * @param msg a description of the problem. - */ - public PropertyException(String instanceName, String propertyName, String msg) { - this(null, instanceName, propertyName, msg); - } - - - /** - * Creates a new property exception. - * - * @param cause The cause of exception. (or null if unknown) - * @param instanceName The component this exception is related to. (or null if unknown) - * @param propertyName The name of the component-property which the problem is related. (or null if - * unknown) - * @param msg a description of the problem. - */ - public PropertyException(Throwable cause, String instanceName, String propertyName, String msg) { - super(msg, cause); - - this.instanceName = instanceName; - this.propertyName = propertyName; - } - - - public PropertyException(Exception e) { - super(e); - } - - - /** - * Retrieves the name of the offending property - * - * @return the name of the offending property - */ - public String getProperty() { - return propertyName; - } - - - /** - * Returns a string representation of this object - * - * @return the string representation of the object. - */ - @Override - public String toString() { - return "Property exception component:'" + instanceName + "' property:'" + propertyName + "' - " + getMessage() + '\n' - + super.toString(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/PropertySheet.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/PropertySheet.java deleted file mode 100755 index 4c89b42f..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/PropertySheet.java +++ /dev/null @@ -1,949 +0,0 @@ -package edu.cmu.sphinx.util.props; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.*; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * A property sheet which defines a collection of properties for a single component - * in the system. - * - * @author Holger Brandl - */ -public class PropertySheet implements Cloneable { - - public static final String COMP_LOG_LEVEL = "logLevel"; - - private Map registeredProperties = new HashMap(); - private Map propValues = new HashMap(); - - /** - * Maps the names of the component properties to their (possibly unresolved) values. - *

    - * Example: frontend to ${myFrontEnd} - */ - private Map rawProps = new HashMap(); - - private ConfigurationManager cm; - private Configurable owner; - private Class ownerClass; - - private String instanceName; - - - public PropertySheet(Configurable configurable, String name, RawPropertyData rpd, ConfigurationManager ConfigurationManager) { - this(configurable.getClass(), name, ConfigurationManager, rpd); - owner = configurable; - } - - - public PropertySheet(Class confClass, String name, ConfigurationManager cm, RawPropertyData rpd) { - ownerClass = confClass; - this.cm = cm; - this.instanceName = name; - - parseClass(confClass); - setConfigurableClass(confClass); - - // now apply all xml properties - Map flatProps = rpd.flatten(cm).getProperties(); - rawProps = new HashMap(rpd.getProperties()); - - for (String propName : rawProps.keySet()) - propValues.put(propName, flatProps.get(propName)); - } - - - /** - * Registers a new property which type and default value are defined by the given sphinx property. - * - * @param propName The name of the property to be registered. - * @param property The property annotation masked by a proxy. - */ - private void registerProperty(String propName, S4PropWrapper property) { - if (property == null || propName == null) - throw new InternalConfigurationException(getInstanceName(), propName, "property or its value is null"); - - if (!registeredProperties.containsKey(propName)) - registeredProperties.put(propName, property); - - if (!propValues.containsKey(propName)) { - propValues.put(propName, null); - rawProps.put(propName, null); - } - } - - - /** Returns the property names name which is still wrapped into the annotation instance. - * - * @param name the name of the property - * @param propertyClass the class of the property - * @return the wrapper around property - * @throws PropertyException if there is no such property - **/ - public S4PropWrapper getProperty(String name, Class propertyClass) throws PropertyException { - if (!propValues.containsKey(name)) - throw new InternalConfigurationException(getInstanceName(), name, - "Unknown property '" + name + "' ! Make sure that you've annotated it."); - - S4PropWrapper s4PropWrapper = registeredProperties.get(name); - - if (s4PropWrapper == null) { - throw new InternalConfigurationException(getInstanceName(), name, "Property is not an annotated property of " + getConfigurableClass()); - } - - try { - propertyClass.cast(s4PropWrapper.getAnnotation()); - } catch (ClassCastException e) { - throw new InternalConfigurationException(e, getInstanceName(), name, "Property annotation " + s4PropWrapper.getAnnotation() + " doesn't match the required type " + propertyClass.getName()); - } - - return s4PropWrapper; - } - - - /** - * Gets the value associated with this name - * - * @param name the name - * @return the value - */ - public String getString(String name) throws PropertyException { - S4PropWrapper s4PropWrapper = getProperty(name, S4String.class); - S4String s4String = ((S4String) s4PropWrapper.getAnnotation()); - - if (propValues.get(name) == null) { - boolean isDefDefined = !s4String.defaultValue().equals(S4String.NOT_DEFINED); - - if (s4String.mandatory()) { - if (!isDefDefined) - throw new InternalConfigurationException(getInstanceName(), name, "mandatory property is not set!"); - } - propValues.put(name, isDefDefined ? s4String.defaultValue() : null); - } - - String propValue = flattenProp(name); - - // Check range - List range = Arrays.asList(s4String.range()); - if (!range.isEmpty() && !range.contains(propValue)) - throw new InternalConfigurationException(getInstanceName(), name, " is not in range (" + range + ')'); - - return propValue; - } - - - private String flattenProp(String name) { - Object value = propValues.get(name); - return value instanceof String ? (String)value : null; - } - - - /** - * Gets the value associated with this name - * - * @param name the name - * @return the value - * @throws edu.cmu.sphinx.util.props.PropertyException - * if the named property is not of this type - */ - public int getInt(String name) throws PropertyException { - S4PropWrapper s4PropWrapper = getProperty(name, S4Integer.class); - S4Integer s4Integer = (S4Integer) s4PropWrapper.getAnnotation(); - - if (propValues.get(name) == null) { - boolean isDefDefined = !(s4Integer.defaultValue() == S4Integer.NOT_DEFINED); - - if (s4Integer.mandatory()) { - if (!isDefDefined) - throw new InternalConfigurationException(getInstanceName(), name, "mandatory property is not set!"); - } else if (!isDefDefined) - throw new InternalConfigurationException(getInstanceName(), name, "no default value for non-mandatory property"); - - propValues.put(name, s4Integer.defaultValue()); - } - - Object propObject = propValues.get(name); - Integer propValue = propObject instanceof Integer ? (Integer) propObject : Integer.decode(flattenProp(name)); - - int[] range = s4Integer.range(); - if (range.length != 2) - throw new InternalConfigurationException(getInstanceName(), name, Arrays.toString(range) + " is not of expected range type, which is {minValue, maxValue)"); - - if (propValue < range[0] || propValue > range[1]) - throw new InternalConfigurationException(getInstanceName(), name, " is not in range (" + Arrays.toString(range) + ')'); - - return propValue; - } - - - /** - * Gets the value associated with this name - * - * @param name the name - * @return the value - * @throws edu.cmu.sphinx.util.props.PropertyException - * if the named property is not of this type - */ - public float getFloat(String name) throws PropertyException { - return ((Double) getDouble(name)).floatValue(); - } - - - /** - * Gets the value associated with this name - * - * @param name the name - * @return the value - * @throws edu.cmu.sphinx.util.props.PropertyException - * if the named property is not of this type - */ - public double getDouble(String name) throws PropertyException { - S4PropWrapper s4PropWrapper = getProperty(name, S4Double.class); - S4Double s4Double = (S4Double) s4PropWrapper.getAnnotation(); - - if (propValues.get(name) == null) { - boolean isDefDefined = !(s4Double.defaultValue() == S4Double.NOT_DEFINED); - - if (s4Double.mandatory()) { - if (!isDefDefined) - throw new InternalConfigurationException(getInstanceName(), name, "mandatory property is not set!"); - } else if (!isDefDefined) - throw new InternalConfigurationException(getInstanceName(), name, "no default value for non-mandatory property"); - - propValues.put(name, s4Double.defaultValue()); - } - - Object propObject = propValues.get(name); - Double propValue; - - if (propObject instanceof Double) - propValue = (Double)propObject; - else if (propObject instanceof Number) - propValue = ((Number)propObject).doubleValue(); - else - propValue = Double.valueOf(flattenProp(name)); - - double[] range = s4Double.range(); - if (range.length != 2) - throw new InternalConfigurationException(getInstanceName(), name, Arrays.toString(range) + " is not of expected range type, which is {minValue, maxValue)"); - - if (propValue < range[0] || propValue > range[1]) - throw new InternalConfigurationException(getInstanceName(), name, " is not in range (" + Arrays.toString(range) + ')'); - - return propValue; - } - - - /** - * Gets the value associated with this name - * - * @param name the name - * @return the value - * @throws edu.cmu.sphinx.util.props.PropertyException - * if the named property is not of this type - */ - public Boolean getBoolean(String name) throws PropertyException { - S4PropWrapper s4PropWrapper = getProperty(name, S4Boolean.class); - S4Boolean s4Boolean = (S4Boolean) s4PropWrapper.getAnnotation(); - - if (propValues.get(name) == null) - propValues.put(name, s4Boolean.defaultValue()); - - Object propObject = propValues.get(name); - Boolean propValue; - - if (propObject instanceof Boolean) - propValue = (Boolean) propObject; - else - propValue = Boolean.valueOf(flattenProp(name)); - - return propValue; - } - - /** - * Gets a component associated with the given parameter name. First search - * the component in property table, then try to get component by name from - * the manager, then creates component with default properties. - * - * @param name - * the parameter name - * @return the component associated with the name - * @throws edu.cmu.sphinx.util.props.PropertyException - * if the component does not exist or is of the wrong type. - */ - public Configurable getComponent(String name) throws PropertyException { - S4PropWrapper s4PropWrapper = getProperty(name, S4Component.class); - Configurable configurable = null; - - S4Component s4Component = (S4Component) s4PropWrapper.getAnnotation(); - Class expectedType = s4Component.type(); - - Object propVal = propValues.get(name); - - if (propVal != null && propVal instanceof Configurable) { - return (Configurable) propVal; - } - - if (propVal != null && propVal instanceof String) { - PropertySheet ps = cm.getPropertySheet(flattenProp(name)); - if (ps != null) - configurable = ps.getOwner(); - else - throw new InternalConfigurationException(getInstanceName(), name, "component '" + flattenProp(name) - + "' is missing"); - } - - if (configurable != null && !expectedType.isInstance(configurable)) - throw new InternalConfigurationException(getInstanceName(), name, "mismatch between annotation and component type"); - - if (configurable != null) { - propValues.put(name, configurable); - return configurable; - } - - configurable = getComponentFromAnnotation(name, s4Component); - - propValues.put(name, configurable); - return configurable; - } - - - private Configurable getComponentFromAnnotation(String name, S4Component s4Component) { - Configurable configurable; - Class defClass = s4Component.defaultClass(); - - if (defClass.equals(Configurable.class) && s4Component.mandatory()) { - throw new InternalConfigurationException(getInstanceName(), name, "mandatory property is not set!"); - } - - if (Modifier.isAbstract(defClass.getModifiers()) && s4Component.mandatory()) - throw new InternalConfigurationException(getInstanceName(), name, defClass.getName() + " is abstract!"); - - // because we're forced to use the default type, make sure that it - // is set - if (defClass.equals(Configurable.class)) { - if (s4Component.mandatory()) { - throw new InternalConfigurationException(getInstanceName(), name, instanceName - + ": no default class defined for " + name); - } else { - return null; - } - } - - configurable = ConfigurationManager.getInstance(defClass); - if (configurable == null) { - throw new InternalConfigurationException(getInstanceName(), name, "instantiation of referenenced configurable failed"); - } - - return configurable; - } - - /** Returns the class of of a registered component property without instantiating it. - * @param propName the name of the property - * @return class of the component corresponding to that property - */ - public Class getComponentClass(String propName) { - Class defClass = null; - - if (propValues.get(propName) != null) - try { - Class objClass = Class.forName((String) propValues.get(propName)); - defClass = objClass.asSubclass(Configurable.class); - } catch (ClassNotFoundException e) { - PropertySheet ps = cm.getPropertySheet(flattenProp(propName)); - defClass = ps.ownerClass; - } - else { - S4Component comAnno = (S4Component) registeredProperties.get(propName).getAnnotation(); - defClass = comAnno.defaultClass(); - if (comAnno.mandatory()) - defClass = null; - } - - return defClass; - } - - /** - * Gets a list of float numbers associated with the given parameter name - * - * @param name the parameter name - * @return a list of floats associated with the name. - * @throws InternalConfigurationException if parameters are not double values. - */ - public List getStringList(String name) throws InternalConfigurationException { - getProperty(name, S4StringList.class); - - return ConfigurationManagerUtils.toStringList (propValues.get(name)); - } - - /** - * Gets a list of components associated with the given parameter name - * - * @param parent component - * @param name - * the parameter name - * @param tclass - * the class of the list elements - * @return the component associated with the name - * @throws PropertyException - * if the component does not exist or is of the wrong type. - */ - public List getComponentList(String name, Class tclass) - throws InternalConfigurationException { - getProperty(name, S4ComponentList.class); - - List components = (List) propValues.get(name); - - assert registeredProperties.get(name).getAnnotation() instanceof S4ComponentList; - S4ComponentList annotation = (S4ComponentList) registeredProperties - .get(name).getAnnotation(); - - // no components names are available and no component list was yet - // loaded therefore load the default list of components from the - // annotation - if (components == null) { - List> defClasses = Arrays - .asList(annotation.defaultList()); - - // if (annotation.mandatory() && defClasses.isEmpty()) - // throw new InternalConfigurationException(getInstanceName(), name, - // "mandatory property is not set!"); - - List defaultComponents = new ArrayList(); - - for (Class defClass : defClasses) { - defaultComponents.add(ConfigurationManager.getInstance(defClass)); - } - - propValues.put(name, defaultComponents); - - } else if (!components.isEmpty() - && !(components.get(0) instanceof Configurable)) { - - List resolvedComponents = new ArrayList(); - - for (Object componentName : components) { - Configurable configurable = cm.lookup((String) componentName); - - if (configurable != null) { - resolvedComponents.add(configurable); - } else if (!annotation.beTolerant()) { - throw new InternalConfigurationException(name, - (String) componentName, "lookup of list-element '" - + componentName + "' failed!"); - } - } - - propValues.put(name, resolvedComponents); - } - - List values = (List) propValues.get(name); - ArrayList result = new ArrayList(); - for (Object obj : values) { - if (tclass.isInstance(obj)) { - result.add(tclass.cast(obj)); - } else { - throw new InternalConfigurationException(getInstanceName(), - name, "Not all elements have required type " + tclass + " Found one of type " + obj.getClass()); - } - } - return result; - } - - - /** - * Parses the string with multiple URL's separated by ;. Return the list of - * resources to load - * - * @param name - * list with URL's - * @return list of resources - */ - public List getResourceList(String name) { - List resourceList = new ArrayList(); - String pathListString = getString(name); - - if (pathListString != null) { - for (String url : pathListString.split(";")) { - try { - URL resourceUrl = new URL(url); - resourceList.add(resourceUrl); - } catch (MalformedURLException mue) { - throw new IllegalArgumentException(url - + " is not a valid URL."); - } - } - } - return resourceList; - } - - - public String getInstanceName() { - return instanceName; - } - - public void setInstanceName(String newInstanceName) { - this.instanceName = newInstanceName; - } - - - /** @return true if the owner of this property sheet is already instantiated. */ - public boolean isInstanciated() { - return !(owner == null); - } - - - /** - * @return the owner of this property sheet. In most cases this will be the configurable instance which was - * instrumented by this property sheet. - */ - public synchronized Configurable getOwner() { - try { - - if (!isInstanciated()) { - // ensure that all mandatory properties are set before instantiating the component - Collection undefProps = getUndefinedMandatoryProps(); - if (!undefProps.isEmpty()) { - throw new InternalConfigurationException(getInstanceName(), - undefProps.toString(), "not all mandatory properties are defined"); - } - - owner = ownerClass.newInstance(); - owner.newProperties(this); - } - } catch (IllegalAccessException e) { - throw new InternalConfigurationException(e, getInstanceName(), null, "Can't access class " + ownerClass); - } catch (InstantiationException e) { - throw new InternalConfigurationException(e, getInstanceName(), null, "Can't instantiate class " + ownerClass); - } - - return owner; - } - - - /** - * @return the set of all component properties which were tagged as mandatory but which are not set (or no default - * value is given). - */ - public Collection getUndefinedMandatoryProps() { - Collection undefProps = new ArrayList(); - for (String propName : getRegisteredProperties()) { - Annotation anno = registeredProperties.get(propName).getAnnotation(); - - boolean isMandatory = false; - if (anno instanceof S4Component) { - isMandatory = ((S4Component) anno).mandatory() && ((S4Component) anno).defaultClass() == null; - } else if (anno instanceof S4String) { - isMandatory = ((S4String) anno).mandatory() && ((S4String) anno).defaultValue().equals(S4String.NOT_DEFINED); - } else if (anno instanceof S4Integer) { - isMandatory = ((S4Integer) anno).mandatory() && ((S4Integer) anno).defaultValue() == S4Integer.NOT_DEFINED; - } else if (anno instanceof S4Double) { - isMandatory = ((S4Double) anno).mandatory() && ((S4Double) anno).defaultValue() == S4Double.NOT_DEFINED; - } - - if (isMandatory && !((rawProps.get(propName) != null) || (propValues.get(propName) != null))) - undefProps.add(propName); - } - return undefProps; - } - - - /** @return the class of the owner configurable of this property sheet. */ - public Class getConfigurableClass() { - return ownerClass; - } - - - /** - * Sets the configurable class of this object. - * - * @throws RuntimeException if the the Configurable is already instantiated. - */ - void setConfigurableClass(Class confClass) { - ownerClass = confClass; - - // Don't allow changes of the class if the configurable has already been instantiated - if (isInstanciated()) - throw new RuntimeException("class is already instantiated"); - - // clean up the properties if necessary - // registeredProperties.clear(); - - final Collection classProperties = new HashSet(); - final Map classProps = parseClass(ownerClass); - for (Map.Entry entry : classProps.entrySet()) { - try { - String propertyName = (String)entry.getKey().get(null); - - // make sure that there is not already another property with this name - assert !classProperties.contains(propertyName) : - "duplicate property-name for different properties: " + propertyName + " for the class " + confClass; - - registerProperty(propertyName, new S4PropWrapper(entry.getValue())); - classProperties.add(propertyName); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - - - /** - * Sets the given property to the given name - * - * @param name the simple property name - * @param value to set - * @throws PropertyException if error occurred - */ - public void setString(String name, String value) throws PropertyException { - // ensure that there is such a property - if (!registeredProperties.containsKey(name)) - throw new InternalConfigurationException(getInstanceName(), name, '\'' + name + - "' is not a registered string-property"); - - Annotation annotation = registeredProperties.get(name).getAnnotation(); - if (!(annotation instanceof S4String)) - throw new InternalConfigurationException(getInstanceName(), name, '\'' + name + "' is of type string"); - - applyConfigurationChange(name, value, value); - } - - - /** - * Sets the given property to the given name - * - * @param name the simple property name - * @param value the value for the property - */ - public void setInt(String name, int value) throws PropertyException { - // ensure that there is such a property - if (!registeredProperties.containsKey(name)) - throw new InternalConfigurationException(getInstanceName(), name, '\'' + name + - "' is not a registered int-property"); - - Annotation annotation = registeredProperties.get(name).getAnnotation(); - if (!(annotation instanceof S4Integer)) - throw new InternalConfigurationException(getInstanceName(), name, '\'' + name + "' is of type int"); - - applyConfigurationChange(name, value, value); - } - - - /** - * Sets the given property to the given name - * - * @param name the simple property name - * @param value the value for the property - */ - public void setDouble(String name, double value) throws PropertyException { - // ensure that there is such a property - if (!registeredProperties.containsKey(name)) - throw new InternalConfigurationException(getInstanceName(), name, '\'' + name + - "' is not a registered double-property"); - - Annotation annotation = registeredProperties.get(name).getAnnotation(); - if (!(annotation instanceof S4Double)) - throw new InternalConfigurationException(getInstanceName(), name, '\'' + name + "' is of type double"); - - applyConfigurationChange(name, value, value); - } - - - /** - * Sets the given property to the given name - * - * @param name the simple property name - * @param value the value for the property - */ - public void setBoolean(String name, Boolean value) throws PropertyException { - if (!registeredProperties.containsKey(name)) - throw new InternalConfigurationException(getInstanceName(), name, '\'' + name + - "' is not a registered boolean-property"); - - Annotation annotation = registeredProperties.get(name).getAnnotation(); - if (!(annotation instanceof S4Boolean)) - throw new InternalConfigurationException(getInstanceName(), name, '\'' + name + "' is of type boolean"); - - applyConfigurationChange(name, value, value); - } - - - /** - * Sets the given property to the given name - * - * @param name the simple property name - * @param cmName the name of the configurable within the configuration manager (required for serialization only) - * @param value the value for the property - */ - public void setComponent(String name, String cmName, Configurable value) throws PropertyException { - if (!registeredProperties.containsKey(name)) - throw new InternalConfigurationException(getInstanceName(), name, '\'' + name + - "' is not a registered compontent"); - - Annotation annotation = registeredProperties.get(name).getAnnotation(); - if (!(annotation instanceof S4Component)) - throw new InternalConfigurationException(getInstanceName(), name, '\'' + name + "' is of type component"); - - - applyConfigurationChange(name, cmName, value); - } - - - /** - * Sets the given property to the given name - * - * @param name the simple property name - * @param valueNames the list of names of the configurables within the configuration manager (required for - * serialization only) - * @param value the value for the property - */ - public void setComponentList(String name, List valueNames, List value) throws PropertyException { - if (!registeredProperties.containsKey(name)) - throw new InternalConfigurationException(getInstanceName(), name, '\'' + name + - "' is not a registered component-list"); - - Annotation annotation = registeredProperties.get(name).getAnnotation(); - if (!(annotation instanceof S4ComponentList)) - throw new InternalConfigurationException(getInstanceName(), name, '\'' + name + "' is of type component-list"); - - rawProps.put(name, valueNames); - propValues.put(name, value); - - applyConfigurationChange(name, valueNames, value); - } - - - private void applyConfigurationChange(String propName, Object cmName, Object value) throws PropertyException { - rawProps.put(propName, cmName); - propValues.put(propName, value != null ? value : cmName); - - if (getInstanceName() != null) - cm.fireConfChanged(getInstanceName(), propName); - - if (owner != null) - owner.newProperties(this); - } - - - /** - * Sets the raw property to the given name - * - * @param key the simple property name - * @param val the value for the property - */ - void setRaw(String key, Object val) { - rawProps.put(key, val); - propValues.put(key, null); - } - - - /** - * Gets the raw value associated with this name - * - * @param name the name - * @return the value as an object (it could be a String or a String[] depending upon the property type) - */ - public Object getRaw(String name) { - return rawProps.get(name); - } - - - /** - * Gets the raw value associated with this name, no global symbol replacement is performed. - * - * @param name the name - * @return the value as an object (it could be a String or a String[] depending upon the property type) - */ - public Object getRawNoReplacement(String name) { - return rawProps.get(name); - } - - - /** - * Returns the type of the given property. - * - * @param propName the name of the property - * @return the type of the property - */ - public PropertyType getType(String propName) { - S4PropWrapper wrapper = registeredProperties.get(propName); - if (wrapper == null) { - throw new InternalConfigurationException(getInstanceName(), propName, " is not a valid property of" + getConfigurableClass()); - } - - Annotation annotation = wrapper.getAnnotation(); - if (annotation instanceof S4Component) - return PropertyType.COMPONENT; - else if (annotation instanceof S4ComponentList) - return PropertyType.COMPONENT_LIST; - else if (annotation instanceof S4Integer) - return PropertyType.INT; - else if (annotation instanceof S4Double) - return PropertyType.DOUBLE; - else if (annotation instanceof S4Boolean) - return PropertyType.BOOLEAN; - else if (annotation instanceof S4String) - return PropertyType.STRING; - else - throw new RuntimeException("Unknown property type"); - } - - - /** - * Gets the owning property manager - * - * @return the property manager - */ - ConfigurationManager getPropertyManager() { - return cm; - } - - - /** - * Returns a logger to use for this configurable component. The logger can be configured with the property: - * 'logLevel' - The default logLevel value is defined (within the xml configuration file by the global property - * 'defaultLogLevel' (which defaults to WARNING). - *

    - * implementation note: the logger became configured within the constructor of the parenting configuration manager. - * - * @return the logger for this component - * @throws edu.cmu.sphinx.util.props.PropertyException - * if an error occurs - */ - public Logger getLogger() { - Logger logger; - - String baseName = ConfigurationManagerUtils.getLogPrefix(cm) + ownerClass.getName(); - if (instanceName != null) { - logger = Logger.getLogger(baseName + '.' + instanceName); - } else - logger = Logger.getLogger(baseName); - - // if there's a logLevel set for component apply to the logger - Object rawLogLevel = rawProps.get(COMP_LOG_LEVEL); - if (rawLogLevel != null) - logger.setLevel(rawLogLevel instanceof String ? Level.parse((String) rawLogLevel) : (Level) rawLogLevel); - - return logger; - } - - - /** @return the names of registered properties of this PropertySheet object. */ - public Collection getRegisteredProperties() { - return Collections.unmodifiableCollection(registeredProperties.keySet()); - } - - - public void setCM(ConfigurationManager cm) { - this.cm = cm; - } - - - /** - * Returns true if two property sheet define the same object in terms of configuration. The owner (and the parent - * configuration manager) are not expected to be the same. - */ - @Override - public boolean equals(Object obj) { - if (obj == null || !(obj instanceof PropertySheet)) - return false; - - PropertySheet ps = (PropertySheet) obj; - if (!rawProps.keySet().equals(ps.rawProps.keySet())) - return false; - - // maybe we could test a little bit more here. suggestions? - return true; - } - - @Override - public int hashCode() { - assert false : "hashCode not designed"; - return 1; // any arbitrary constant will do - } - - @Override - public String toString() { - return getInstanceName() + "; isInstantiated=" + isInstanciated() + "; props=" + rawProps.keySet(); - } - - @Override - protected PropertySheet clone() throws CloneNotSupportedException { - PropertySheet ps = (PropertySheet)super.clone(); - - ps.registeredProperties = new HashMap(this.registeredProperties); - ps.propValues = new HashMap(this.propValues); - - ps.rawProps = new HashMap(this.rawProps); - - // make deep copy of raw-lists - for (String regProp : ps.getRegisteredProperties()) { - if (getType(regProp) == PropertyType.COMPONENT_LIST) { - ps.rawProps.put(regProp, ConfigurationManagerUtils.toStringList(rawProps.get(regProp))); - ps.propValues.put(regProp, null); - } - } - - ps.cm = cm; - ps.owner = null; - ps.instanceName = this.instanceName; - - return ps; - } - - - /** Validates a configuration, by ensuring that only valid property-names have been used to configure the component. - * - * @return if property is validated - */ - public boolean validate() { - for (String propName : rawProps.keySet()) { - if (propName.equals(ConfigurationManagerUtils.GLOBAL_COMMON_LOGLEVEL)) - continue; - - if (!registeredProperties.containsKey(propName)) - return false; - } - - return true; - } - - - /** - * use annotation based class parsing to detect the configurable properties of a Configurable-class - * - * @param configurable of type Class - */ - private static Map parseClass(Class configurable) { - Field[] classFields = configurable.getFields(); - - Map s4props = new HashMap(); - for (Field field : classFields) { - Annotation[] annotations = field.getAnnotations(); - - for (Annotation annotation : annotations) { - Annotation[] superAnnotations = annotation.annotationType().getAnnotations(); - - for (Annotation superAnnotation : superAnnotations) { - if (superAnnotation instanceof S4Property) { - int fieldModifiers = field.getModifiers(); - assert Modifier.isStatic(fieldModifiers) : "property fields are assumed to be static"; - assert Modifier.isPublic(fieldModifiers) : "property fields are assumed to be public"; - assert Modifier.isFinal(fieldModifiers) : "property fields are assumed to be final"; - assert field.getType().equals(String.class) : "properties fields are assumed to be instances of java.lang.String"; - - s4props.put(field, annotation); - } - } - } - } - - return s4props; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/PropertyType.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/PropertyType.java deleted file mode 100755 index 9c09fa03..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/PropertyType.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.util.props; - -import java.util.List; -import java.net.URL; - -/** An enum type that defines the possible property types. */ -public enum PropertyType { - - INT("int") { - @Override protected boolean validateString(String obj) throws Exception { - Integer.parseInt(obj); - return true; - } - }, - BOOLEAN("boolean") { - @Override protected boolean validateString(String obj) throws Exception { - obj = obj.toLowerCase(); - return "true".equals(obj) || "false".equals(obj); - } - }, - FLOAT("float") { - @Override protected boolean validateString(String obj) throws Exception { - Float.parseFloat(obj); - return true; - } - }, - DOUBLE("double") { - @Override protected boolean validateString(String obj) throws Exception { - Double.parseDouble(obj); - return true; - } - }, - COMPONENT("Component", String.class), - COMPONENT_LIST("ComponentList", List.class), - STRING("String", String.class), - /** - * A Resource type. Resources are in one of the following forms: - * - *

      - *
    • a URL such as http://www.cmu.edu/foo.zip - *
    • a simple file location (e.g. /lab/speech/data/wsj.jar) - *
    • a resource in a jar file in the form: - * resource:/FullyQualifiedClassName!resourceName - *
    - */ - RESOURCE("Resource") { - @Override - public boolean validateString(String obj) throws Exception { - // First see if it is a resource - if (obj.toLowerCase().startsWith("resource:/")) - return true; - - // if it doesn't have a protocol spec add a "file:" to it, to make it a URL - if (obj.indexOf(':') == -1) - obj = "file:" + obj; - - // Check to see if it is a URL - new URL(obj); - return true; - } - }, - STRING_LIST("StringList", List.class); - - - - /** Display name of this PropertyType. */ - private final String displayName; - - /** - * Calls to {@link #isValid} will check if an object is instance of the class. - * If null, {@link #validateString} will be used to validate the object. */ - private Class checkClass; - - /** - * Creates type of the property - * @param displayName name of the property to output - */ - private PropertyType(String displayName) { - this.displayName = displayName; - } - - /** - * Creates type of the property - * @param displayName name of the property to output - * @param checkClass checked class - */ - private PropertyType(String displayName, Class checkClass) { - this.displayName = displayName; - this.checkClass = checkClass; - } - - @Override - public String toString() { - return displayName; - } - - /** - * Validates the given String.
    - * Should be overridden if there exists a value of obj which is invalid. - * - * @param obj String to validate - * @return true if obj is valid, false otherwise - * @throws Exception if obj is not valid - */ - protected boolean validateString(String obj) throws Exception { - return true; // default implementation - } - - /** - * Determines if the given object can be converted to this type. - * - * @param obj the object to verify - * @return true if the object can be converted to an object of this type. - */ - public boolean isValid(Object obj) { - if (checkClass != null) - return checkClass.isInstance(obj); - if (obj instanceof String) { - try { - return validateString((String)obj); - } catch (Exception e) { - return false; - } - } - return false; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/RawPropertyData.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/RawPropertyData.java deleted file mode 100755 index f0d3c482..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/RawPropertyData.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.util.props; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - - -/** Holds the raw property data just as it has come in from the properties file. */ -public class RawPropertyData { - - private String name; - private String className; - private Map properties; - - /** - * Creates a raw property data item. - * - * @param name the name of the item - * @param className the class name of the item - */ - public RawPropertyData(String name, String className) { - this(name, className, new HashMap()); - } - - /** - * Creates a raw property data item, using a given property map. - * - * @param name the name of the item - * @param className the class name of the item - * @param properties existing property map to use - */ - public RawPropertyData(String name, String className, Map properties) { - this.name = name; - this.className = className; - this.properties = properties; - } - - /** - * Adds a new property with a {@code String} value. - * - * @param propName the name of the property - * @param propValue the value of the property - */ - public void add(String propName, String propValue) { - properties.put(propName, propValue); - } - - /** - * Adds a new property with a {@code List} value. - * - * @param propName the name of the property - * @param propValue the value of the property - */ - public void add(String propName, List propValue) { - properties.put(propName, propValue); - } - - /** - * Removes an existing property. - * - * @param propName the name of the property - */ - public void remove(String propName) { - properties.remove(propName); - } - - /** @return the className. */ - public String getClassName() { - return className; - } - - /** @return the name. */ - public String getName() { - return name; - } - - /** @return the properties. */ - public Map getProperties() { - return properties; - } - - /** - * Determines if the map already contains an entry for a property. - * - * @param propName the property of interest - * @return true if the map already contains this property - */ - public boolean contains(String propName) { - return properties.get(propName) != null; - } - - /** Return a copy of this property data instance with all ${}-fields resolved. - * @param cm configuration manager - * @return the property data - **/ - public RawPropertyData flatten(ConfigurationManager cm) { - RawPropertyData copyRPD = new RawPropertyData(name, className); - - for (Map.Entry entry : properties.entrySet()) { - Object propVal = entry.getValue(); - if (propVal instanceof String) { - if (((String) propVal).startsWith("${")) - propVal = cm.getGloPropReference(ConfigurationManagerUtils.stripGlobalSymbol((String) propVal)); - } - - copyRPD.properties.put(entry.getKey(), propVal); - } - - return copyRPD; - } - - /** - * Lookup a global symbol with a given name (and resolves - * - * @param key the name of the property - * @param globalProperties global properties - * @return the property value or null if it doesn't exist. - */ - public String getGlobalProperty(String key, Map globalProperties) { - if (!key.startsWith("${")) // is symbol already flat - return key; - - while (true) { - key = globalProperties.get(key); - if (key == null || !(key.startsWith("${") && key.endsWith("}"))) - return key; - } - } - - /** - * Provide information stored inside this Object, used mainly for debugging/testing. - * - * @return Description of object - */ - @Override - public String toString(){ - StringBuilder output = new StringBuilder().append("name : ").append(name); - for (Object value : properties.values()) { - if (value != null) { - if (value instanceof String) { - output.append("value string : "); - } - output.append(value); - } - } - return output.toString(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4Boolean.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4Boolean.java deleted file mode 100755 index 767b71cf..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4Boolean.java +++ /dev/null @@ -1,19 +0,0 @@ -package edu.cmu.sphinx.util.props; - -import java.lang.annotation.*; - -/** - * A logical property. - * - * @author Holger Brandl - * @see ConfigurationManager - */ -@Documented -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -@S4Property -public @interface S4Boolean { - - boolean defaultValue(); - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4Component.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4Component.java deleted file mode 100755 index 25d74ab8..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4Component.java +++ /dev/null @@ -1,24 +0,0 @@ -package edu.cmu.sphinx.util.props; - -import java.lang.annotation.*; - -/** - * A component property. - * - * @author Holger Brandl - * @see ConfigurationManager - */ -@Documented -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -@S4Property -public @interface S4Component { - - Class type(); - - - Class defaultClass() default Configurable.class; - - - boolean mandatory() default true; -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4ComponentList.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4ComponentList.java deleted file mode 100755 index a81eb0c5..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4ComponentList.java +++ /dev/null @@ -1,34 +0,0 @@ -package edu.cmu.sphinx.util.props; - -import java.lang.annotation.*; - -/** - * A list property. - * - * @author Holger Brandl - * @see ConfigurationManager - */ -@Documented -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -@S4Property -public @interface S4ComponentList { - - Class type(); - - - /** - * A default list of Configurables used to configure this component list given the case that no - * component list was defined (via xml or during runtime). - * @return default list - */ - Class[] defaultList() default {}; - - - /** - * If this flag is set the ConfigurationManager will not fail if some elements of the list couldn't be - * instantitated. - * @return tolerance - */ - boolean beTolerant() default false; -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4Double.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4Double.java deleted file mode 100755 index e2d7260d..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4Double.java +++ /dev/null @@ -1,30 +0,0 @@ -package edu.cmu.sphinx.util.props; - -import java.lang.annotation.*; - -/** - * * A double property. - * - * @author Holger Brandl - * @see ConfigurationManager - */ -@Documented -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -@S4Property -public @interface S4Double { - - /** - * Default value to return - */ - public static final double NOT_DEFINED = -918273645.12345; // not bullet-proof, but should work in most cases - - - double defaultValue() default NOT_DEFINED; - - - double[] range() default {-Double.MAX_VALUE, Double.MAX_VALUE}; - - - boolean mandatory() default true; -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4Integer.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4Integer.java deleted file mode 100755 index 35bc2c29..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4Integer.java +++ /dev/null @@ -1,28 +0,0 @@ -package edu.cmu.sphinx.util.props; - -import java.lang.annotation.*; - -/** - * An integer property. - * - * @author Holger Brandl - * @see ConfigurationManager - */ -@Documented -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -@S4Property -public @interface S4Integer { - - /** - * Default value to return - */ - public static final int NOT_DEFINED = -918273645; - - int defaultValue() default NOT_DEFINED; - - int[] range() default {-Integer.MAX_VALUE, Integer.MAX_VALUE}; - - - boolean mandatory() default true; -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4PropWrapper.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4PropWrapper.java deleted file mode 100755 index 470058ba..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4PropWrapper.java +++ /dev/null @@ -1,23 +0,0 @@ -package edu.cmu.sphinx.util.props; - -import java.lang.annotation.Annotation; - -/** - * Wraps annotations - * - * @author Holger Brandl - */ -public class S4PropWrapper { - - private final Annotation annotation; - - - public S4PropWrapper(Annotation annotation) { - this.annotation = annotation; - } - - - public Annotation getAnnotation() { - return annotation; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4Property.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4Property.java deleted file mode 100755 index 244e50ec..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4Property.java +++ /dev/null @@ -1,21 +0,0 @@ -package edu.cmu.sphinx.util.props; - -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - -/** - * A tag which superclasses all sphinx property annotations. Because there is no real inheritance for annotations all - * child classes are annotated by this general property annotation. - * - * @author Holger Brandl - * @see S4Component - * @see S4Integer - * @see S4ComponentList - * @see S4Double - * @see S4Boolean - * @see S4String - */ -@Retention(RetentionPolicy.RUNTIME) -public @interface S4Property { - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4String.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4String.java deleted file mode 100755 index 3f407b2e..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4String.java +++ /dev/null @@ -1,31 +0,0 @@ -package edu.cmu.sphinx.util.props; - -import java.lang.annotation.*; - -/** - * A string property. - * - * @author Holger Brandl - * @see ConfigurationManager - */ -@Documented -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -@S4Property -public @interface S4String { - - - /** - * Default value to return - */ - public static final String NOT_DEFINED = "nullnullnull"; - - - String defaultValue() default NOT_DEFINED; // this default value will be mapped to zero by the configuration manager - - - String[] range() default {}; - - - boolean mandatory() default true; -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4StringList.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4StringList.java deleted file mode 100755 index f7ab782f..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/S4StringList.java +++ /dev/null @@ -1,13 +0,0 @@ -package edu.cmu.sphinx.util.props; - -import java.lang.annotation.*; - -/** - * A List containing float numbers. - */ -@Documented -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -@S4Property -public @interface S4StringList { -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/SaxLoader.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/SaxLoader.java deleted file mode 100755 index ba4e45d6..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/SaxLoader.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.util.props; - -import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; -import org.xml.sax.XMLReader; - -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.parsers.SAXParserFactory; -import java.io.IOException; -import java.net.URL; -import java.util.HashMap; -import java.util.Map; - -/** Loads configuration from an XML file */ -public class SaxLoader { - - private final URL url; - private final Map rpdMap; - private final Map globalProperties; - private final boolean replaceDuplicates; - - /** - * Creates a loader that will load from the given location - * - * @param url the location to load - * @param globalProperties the map of global properties - * @param initRPD init raw property data - * @param replaceDuplicates replace duplicates - */ - public SaxLoader(URL url, Map globalProperties, Map initRPD, boolean replaceDuplicates) { - this.url = url; - this.globalProperties = globalProperties; - this.replaceDuplicates = replaceDuplicates; - this.rpdMap = initRPD == null ? new HashMap() : initRPD; - } - - /** - * Creates a loader that will load from the given location - * - * @param url the location to load - * @param globalProperties the map of global properties - */ - public SaxLoader(URL url, Map globalProperties) { - this(url, globalProperties, null, false); - } - - /** - * Loads a set of configuration data from the location - * - * @return a map keyed by component name containing RawPropertyData objects - * @throws IOException if an I/O or parse error occurs - */ - public Map load() throws IOException { - try { - SAXParserFactory factory = SAXParserFactory.newInstance(); - XMLReader xr = factory.newSAXParser().getXMLReader(); - ConfigHandler handler = new ConfigHandler(rpdMap, globalProperties, replaceDuplicates, url); - xr.setContentHandler(handler); - xr.parse(url.toString()); - } catch (SAXParseException e) { - String msg = "Error while parsing line " + e.getLineNumber() + " of " + url + ": " + e.getMessage(); - throw new IOException(msg); - } catch (SAXException e) { - throw new IOException("Problem with XML: " + e); - } catch (ParserConfigurationException e) { - throw new IOException(e.getMessage()); - } - - return rpdMap; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/tools/GDLDumper.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/tools/GDLDumper.java deleted file mode 100755 index 2cd92ae9..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/tools/GDLDumper.java +++ /dev/null @@ -1,136 +0,0 @@ -package edu.cmu.sphinx.util.props.tools; - -import edu.cmu.sphinx.util.props.*; - -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintStream; -import java.util.Collection; -import java.util.List; - -/** - * Dumps a given configuration manager as GDL. ... - * - * @author Holger Brandl - */ -public class GDLDumper { - - - /** - * Dumps the given component as GDL to the given stream - * - * @param cm configuration manager - * @param out where to dump the GDL - * @param name the name of the component to dump - */ - public static void dumpComponentAsGDL(ConfigurationManager cm, PrintStream out, String name) { - - out.println("node: {title: \"" + name + "\" color: " + getColor(cm, name) - + '}'); - - PropertySheet ps = cm.getPropertySheet(name); - Collection propertyNames = ps.getRegisteredProperties(); - - for (String propertyName : propertyNames) { - PropertyType propType = ps.getType(propertyName); - Object val = ps.getRaw(propertyName); - - if (val != null) { - if (propType == PropertyType.COMPONENT) { - out.println("edge: {source: \"" + name - + "\" target: \"" + val + "\"}"); - } else if (propType == PropertyType.COMPONENT_LIST) { - List list = (List) val; - for (Object listElement : list) { - out.println("edge: {source: \"" + name - + "\" target: \"" + listElement + "\"}"); - } - } - } - } - } - - - /** - * Dumps the config as a GDL plot - * - * @param ConfigurationManager manager - * @param path where to output the GDL - * @throws java.io.IOException if an error occurs - */ - public static void showConfigAsGDL(ConfigurationManager ConfigurationManager, String path) throws IOException { - PrintStream out = new PrintStream(new FileOutputStream(path)); - dumpGDLHeader(out); - for (String componentName : ConfigurationManager.getInstanceNames(Configurable.class)) { - dumpComponentAsGDL(ConfigurationManager, out, componentName); - } - dumpGDLFooter(out); - out.close(); - } - - - /** - * Outputs the GDL header - * - * @param out the output stream - */ - public static void dumpGDLHeader(PrintStream out) { - out.println(" graph: {title: \"unix evolution\" "); - out.println(" layoutalgorithm: tree"); - out.println(" scaling : 2.0"); - out.println(" colorentry 42 : 152 222 255"); - out.println(" node.shape : ellipse"); - out.println(" node.color : 42 "); - out.println("node.height : 32 "); - out.println("node.fontname : \"helvB08\""); - out.println("edge.color : darkred"); - out.println("edge.arrowsize : 6 "); - out.println("node.textcolor : darkblue "); - out.println("splines : yes"); - } - - - /** - * Gets the color for the given component - * - * @param ConfigurationManager manager - * @param componentName the name of the component @return the color name for the component - * @return color to assign - */ - public static String getColor(ConfigurationManager ConfigurationManager, String componentName) { - try { - Configurable c = ConfigurationManager.lookup(componentName); - Class cls = c.getClass(); - if (cls.getName().indexOf(".recognizer") > 1) { - return "cyan"; - } else if (cls.getName().indexOf(".tools") > 1) { - return "darkcyan"; - } else if (cls.getName().indexOf(".decoder") > 1) { - return "green"; - } else if (cls.getName().indexOf(".frontend") > 1) { - return "orange"; - } else if (cls.getName().indexOf(".acoustic") > 1) { - return "turquoise"; - } else if (cls.getName().indexOf(".linguist") > 1) { - return "lightblue"; - } else if (cls.getName().indexOf(".instrumentation") > 1) { - return "lightgrey"; - } else if (cls.getName().indexOf(".util") > 1) { - return "lightgrey"; - } - } catch (PropertyException e) { - return "black"; - } - return "darkgrey"; - } - - - /** - * Dumps the footer for GDL output - * - * @param out the output stream - */ - public static void dumpGDLFooter(PrintStream out) { - out.println("}"); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/tools/HTMLDumper.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/tools/HTMLDumper.java deleted file mode 100755 index 2dd6647a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/java/edu/cmu/sphinx/util/props/tools/HTMLDumper.java +++ /dev/null @@ -1,100 +0,0 @@ -package edu.cmu.sphinx.util.props.tools; - -import edu.cmu.sphinx.util.props.ConfigurationManager; -import edu.cmu.sphinx.util.props.Configurable; -import edu.cmu.sphinx.util.props.PropertySheet; - -import java.io.IOException; -import java.io.PrintStream; -import java.io.FileOutputStream; -import java.util.Collection; -import java.util.List; - -/** - * Dumps a given configuration manager to HTML. - * - * @author Holger Brandl - */ -public class HTMLDumper { - - /** - * Dumps the config as a set of HTML tables - * - * @param ConfigurationManager the manager - * @param path where to output the HTML - * @throws java.io.IOException if an error occurs - */ - public static void showConfigAsHTML(ConfigurationManager ConfigurationManager, String path) throws IOException { - PrintStream out = new PrintStream(new FileOutputStream(path)); - dumpHeader(out); - for (String componentName : ConfigurationManager.getInstanceNames(Configurable.class)) { - dumpComponentAsHTML(out, componentName, ConfigurationManager.getPropertySheet(componentName)); - } - dumpFooter(out); - out.close(); - } - - - /** - * Dumps the footer for HTML output - * - * @param out the output stream - */ - public static void dumpFooter(PrintStream out) { - out.println(""); - out.println(""); - } - - - /** - * Dumps the header for HTML output - * - * @param out the output stream - */ - public static void dumpHeader(PrintStream out) { - out.println(""); - out.println(" Sphinx-4 Configuration</title"); - out.println("</head>"); - out.println("<body>"); - } - - - /** - * Dumps the given component as HTML to the given stream - * - * @param out where to dump the HTML - * @param name the name of the component to dump - * @param properties properties to dump - */ - public static void dumpComponentAsHTML(PrintStream out, String name, PropertySheet properties) { - out.println("<table border=1>"); - // out.println("<table border=1 width=\"%80\">"); - out.print(" <tr><th bgcolor=\"#CCCCFF\" colspan=2>"); - // out.print("<a href="") - out.print(name); - out.print("</a>"); - out.println("</td></tr>"); - - out.println(" <tr><th bgcolor=\"#CCCCFF\">Property</th><th bgcolor=\"#CCCCFF\"> Value</th></tr>"); - Collection<String> propertyNames = properties.getRegisteredProperties(); - - for (String propertyName : propertyNames) { - out.print(" <tr><th align=\"leftt\">" + propertyName + "</th>"); - Object obj; - obj = properties.getRaw(propertyName); - if (obj instanceof String) { - out.println("<td>" + obj + "</td></tr>"); - } else if (obj instanceof List<?>) { - List<?> l = (List<?>) obj; - out.println(" <td><ul>"); - for (Object listElement : l) { - out.println(" <li>" + listElement + "</li>"); - } - out.println(" </ul></td>"); - } else { - out.println("<td>DEFAULT</td></tr>"); - } - } - out.println("</table><br>"); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/decoder/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/decoder/package.html deleted file mode 100755 index f12cb1a2..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/decoder/package.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<html> -<head> - <!-- - - Copyright 1999-2003 Carnegie Mellon University. - Portions Copyright 2002-2003 Sun Microsystems, Inc. - Portions Copyright 2002-2003 Mitsubishi Electric Research Laboratories. - All Rights Reserved. Use is subject to license terms. - - See the file "license.terms" for information on usage and - redistribution of this file, and for a DISCLAIMER OF ALL - WARRANTIES. - - --> -</head> -<body bgcolor="white"> - -Provides a set of high level classes that can -be used to configure and initiate the speech recognition decoding -process. -<p> - -</body> -</html> - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/decoder/pruner/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/decoder/pruner/package.html deleted file mode 100755 index 32827aaa..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/decoder/pruner/package.html +++ /dev/null @@ -1,23 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<html> -<head> - <!-- - - Copyright 1999-2003 Carnegie Mellon University. - Portions Copyright 2002-2003 Sun Microsystems, Inc. - Portions Copyright 2002-2003 Mitsubishi Electric Research Laboratories. - All Rights Reserved. Use is subject to license terms. - - See the file "license.terms" for information on usage and - redistribution of this file, and for a DISCLAIMER OF ALL - WARRANTIES. - - --> -</head> -<body bgcolor="white"> -Provides an interface that represents the pruning facility -<p> - - -</body> -</html> diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/decoder/scorer/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/decoder/scorer/package.html deleted file mode 100755 index df4459fe..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/decoder/scorer/package.html +++ /dev/null @@ -1,43 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<html> -<head> - <!-- - - Copyright 1999-2003 Carnegie Mellon University. - Portions Copyright 2002-2003 Sun Microsystems, Inc. - Portions Copyright 2002-2003 Mitsubishi Electric Research Laboratories. - All Rights Reserved. Use is subject to license terms. - - See the file "license.terms" for information on usage and - redistribution of this file, and for a DISCLAIMER OF ALL - WARRANTIES. - - --> -</head> -<body bgcolor="white"> -Provides an interface that represents entities that can be -scored, and an interface and several implementations of a scorer that -can score these entities. Additionally it provides an interface to normalize computed scores and some basic -implementations of it. -<p> - - <!-- - <h2>Package Specification</h2> - - <ul> - <li><a href=""> </a> - </ul> - - <h2>Related Documentation</h2> - - For overviews, tutorials, examples, guides, and tool documentation, - please see: - <ul> - <li><a href="">/a> - </ul> - - --> - -</body> -</html> - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/decoder/search/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/decoder/search/package.html deleted file mode 100755 index f2af7405..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/decoder/search/package.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<html> -<head> - <!-- - - Copyright 1999-2003 Carnegie Mellon University. - Portions Copyright 2002-2003 Sun Microsystems, Inc. - Portions Copyright 2002-2003 Mitsubishi Electric Research Laboratories. - All Rights Reserved. Use is subject to license terms. - - See the file "license.terms" for information on usage and - redistribution of this file, and for a DISCLAIMER OF ALL - WARRANTIES. - - --> -</head> -<body bgcolor="white"> - -Provides classes and interfaces that are used to manage the search -through the search graph. Standard implementations are also provided -for the interfaces. - - -</body> -</html> - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/databranch/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/databranch/package.html deleted file mode 100755 index 483702da..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/databranch/package.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<html> -<head> - <!-- - - Copyright 1999-2003 Carnegie Mellon University. - Portions Copyright 2002-2003 Sun Microsystems, Inc. - Portions Copyright 2002-2003 Mitsubishi Electric Research Laboratories. - All Rights Reserved. Use is subject to license terms. - - See the file "license.terms" for information on usage and - redistribution of this file, and for a DISCLAIMER OF ALL - WARRANTIES. - - --> -</head> -<body bgcolor="white"> - -This package contains some classes to create a subbranch of a FronEnd at an arbitrary position. This can be useful in -order to make several decoders to use the same feature-frontend. - -<p> - -</body> -</html> - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/doc-files/FrontEndConfiguration.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/doc-files/FrontEndConfiguration.html deleted file mode 100755 index 24a87eb3..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/doc-files/FrontEndConfiguration.html +++ /dev/null @@ -1,201 +0,0 @@ -<html> - -<head> - <!-- - - Copyright 1999-2002 Carnegie Mellon University. - Portions Copyright 2002 Sun Microsystems, Inc. - Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - All Rights Reserved. Use is subject to license terms. - - See the file "license.terms" for information on usage and - redistribution of this file, and for a DISCLAIMER OF ALL - WARRANTIES. - - --> - <title>Configuring the Sphinx-4 Front End - - - - - - -
    - - - - -
    -

    Configuring the Sphinx-4 Front End

    -
    -
    -
    - -

    - The main design goal of the Sphinx-4 front end is flexibility. - The front end should be modeled as a pipeline of data processors, - and the entire composition of the pipeline should be configurable - from the configuration file. Other design requirements include - allowing multiple instances of the same data processor in the same front end, - where each can be configured differently. Moreover, the possibility of - multiple front ends should be allowed. - - -

    - -

    A Simple Example

    - -

    - To enable all these capabilities, the following scheme is devised to specify - the front end in the configuration file. Lets work with the example of a - standard Mel Frequency Cepstral Coefficients (MFCC) front end, - followed by an explanation: - -

    -

    -<component name="mfcFrontEnd" type="edu.cmu.sphinx.frontend.FrontEnd">
    -    <propertylist name="pipeline">
    -        <item>preemphasizer</item>
    -        <item>windower</item>
    -        <item>dft</item>
    -        <item>melFilterBank</item>
    -        <item>dct</item>
    -        <item>batchCMN</item>
    -	<item>featureExtractor</item>
    -    </propertylist>
    -</component>
    -
    -<component name="preemphasizer" type="edu.cmu.sphinx.frontend.filter.Preemphasizer"/>
    -<component name="windower" type="edu.cmu.sphinx.frontend.window.RaisedCosineWindower"/>
    -
    -<component name="dft" type="edu.cmu.sphinx.frontend.transform.DiscreteFourierTransform">
    -    <property name="numberFftPoints" value="512"/>
    -</component>
    -
    -<component name="melFilterBank" type="edu.cmu.sphinx.frontend.frequencywarp.MelFrequencyFilterBank"/>
    -<component name="dct" type="edu.cmu.sphinx.frontend.transform.DiscreteCosineTransform"/>
    -<component name="batchCMN" type="edu.cmu.sphinx.frontend.feature.BatchCMN"/>
    -<component name="featureExtractor" type="edu.cmu.sphinx.frontend.feature.DeltasFeatureExtractor"/>
    -
    - -Example 1: Specifying a standard MFCC front end. - -

    - The first component specifies all the front end proceessors. "mfcFrontEnd" - is the name of our MFCC front end pipeline, followed by the Java class type - of the front end. It is then followed by a list of the data processors, - using a propertylist called pipeline, which - you will see is a property of the - FrontEnd class. - -

    - The rest of the components specify each of the data processors in turn. - They mainly specify the Java class type of the processor, but it can also - specify the properties of the data processor. For example, in the - case of the DFT data processor, the number of FFT points is specified - as 512. If you look at the DiscreteFourierTransform class, - you will notice that - numberFftPoints is a property of the class. - - -

    - -

    Multiple Instances of the Same DataProcessor

    - -

    - The name of a component is also useful if we have multiple instances of the - same data processor class. For example, suppose that we perform - Discrete Fourier Transform two times in a row, but each with a different - number of FFT points, we would specify the following: - -

    -

    -<component name="mfcFrontEnd" type="edu.cmu.sphinx.frontend.FrontEnd">
    -    <propertylist name="pipeline">
    -        <item>preemphasizer</item>
    -        <item>windower</item>
    -        <item>dft_1</item>
    -        <item>dft_2</item>
    -        <item>melFilterBank</item>
    -        <item>dct</item>
    -        <item>batchCMN</item>
    -	<item>featureExtractor</item>
    -    </propertylist>
    -</component>
    -
    -<component name="dft_1" type="edu.cmu.sphinx.frontend.transform.DiscreteFourierTransform">
    -    <property name="numberFftPoints" value="128"/>
    -</component>
    -
    -<component name="dft_2" type="edu.cmu.sphinx.frontend.transform.DiscreteFourierTransform">
    -    <property name="numberFftPoints" value="256"/>
    -</component>
    -
    - -Example 2: Specifying a front-end pipeline with two DataProcessors of the same class, but different - properties. - -

    - When the first DiscreteFourierTransform class is initialized in the - 'initialize()' method, the 'name' argument will be 'dft_1'. Calling - DiscreteFourierTransform.getName() on it will return 'dft_1'. - - -

    - -

    Multiple Front Ends

    - -Multiple front ends are simply specified as separate components: - -

    - -

    -<component name="mfcFrontEnd" type="edu.cmu.sphinx.frontend.FrontEnd">
    -    <propertylist name="pipeline">
    -        <item>preemphasizer</item>
    -        <item>windower</item>
    -        <item>dft</item>
    -        <item>melFilterBank</item>
    -        <item>dct</item>
    -        <item>batchCMN</item>
    -	<item>featureExtractor</item>
    -    </propertylist>
    -</component>
    -
    -<component name="plpFrontEnd" type="edu.cmu.sphinx.frontend.FrontEnd">
    -    <propertylist name="pipeline">
    -        <item>preemphasizer</item>
    -        <item>windower</item>
    -        <item>dft</item>
    -        <item>plpFilterBank</item>
    -        <item>plpCepstrumProducer</item>
    -        <item>batchCMN</item>
    -	<item>featureExtractor</item>
    -    </propertylist>
    -</component>
    -
    -... // define the components of both front ends
    -
    - - -Example 3: Specifying multiple front-end pipelines. - -

    - That is, you specify the different pipelines, and then just specify each pipeline as you would individually. - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/doc-files/FrontEndFAQ.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/doc-files/FrontEndFAQ.html deleted file mode 100755 index 2f97a1f1..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/doc-files/FrontEndFAQ.html +++ /dev/null @@ -1,272 +0,0 @@ - - - - - - - Front End Framework - - - - - -

    - - - - -
    -

    Front End Framework

    -
    -
    - - - -

    - -

    Table of Contents

    - -

    - -


    - -

    Fine Tuning the Front End to the Sampling Rate

    - -

    Typically, you will need to fine tune some of the front end - parameters depending on the sampling frequency used to collect - the audio data. Sphinx-4 has default values that may be - different from what you need. Please check the constant field - values page to verify the default values.

    - -

    You will find details about how to choose the values to fine - tune the front end in the javadocs for the appropriate - classes. Other than the sampling rate itself, it is common that - a user has to change the filterbank parameters, i.e., the number - of filters and the frequency range spanned by the - filter. Depending on the sampling rate, a user may also want to - change the window shift and size, as well as the number of fft - points.

    - -

    For more information on these variables, please follow the - links below. You do not need all the links, just the ones defined on - your configuration.

    - - - -
    - -

    Creating MFC Cepstrum/PLP - Cepstrum/Spectrum from Audio

    - -There is a program called FeatureFileDumper that turns an audio file -into binary cepstra file using the front end. -To create MFCC cepstrum using this program, -go to the -edu/cmu/sphinx/tools/feature directory, -and type: -

    - ant -Dinput="input file" -Doutput="output file" cepstra_producer - -

    - To create a binary PLP cepstrum file using this program, type: - -

    - ant -Dinput="input file" -Doutput="output file" plp_producer - -

    - To create a binary spectra file, type: - -

    - ant -Dinput="input file" -Doutput="output file" spectra_producer - - -

    - As you might notice by comparing the files cepstra_dump.props - and spectra_dump.props in the "edu/cmu/sphinx/tools/feature" directory, - the only difference in setup between dumping different types of - features is in the sequence of data processors as specified in the - properties file. If you give it a difference data processor sequence, - it will give you different output. - -

    - Binary File Format - -

    - The first 4 bytes of the binary file is an integer indicating the total - number of data points in the file. This is used by the program - that reads this file to check the endianness of the file - by comparing with the file size. The rest of the file is simply - the data points. Each data point is a 4-byte floating point number, - in big-endian order. - -


    - -

    Decoding from Cepstra Files

    - -

    - This normally applies to batch mode decoding using the - BatchModeRecognizer. - In the configuration file, set the first processor of the front end - to be StreamCepstrumSource, and use that as the input source of the - BatchModeRecognizer. Also, change the front end pipeline so that - either BatchCMN or LiveCMN will follow the StreamCepstrumSource, - skiping the preemphasis, windowing, MFCC, and DCT steps. The - configuration should contain the lines: - -

    -<component name="batchRecognizer" type="edu.cmu.sphinx.tools.batch.BatchModeRecognizer">
    -
    -    <property name="inputSource" value="streamCepstrumSource">
    -    // ... other properties ...
    -
    -</component>
    -
    -<component name="frontEnd" type="edu.cmu.sphinx.frontend.FrontEnd">
    -
    -    <propertylist name="pipeline">
    -        <item>streamCepstrumSource</item>
    -	<item>batchCMN</item>
    -	// ... other front end processors
    -    </propertylist>
    -
    -</component>
    -
    -<component name="streamCepstrumSource" type="edu.cmu.sphinx.frontend.util.StreamCepstrumSource"/>
    -      
    -
    - For more information on configuration files, please refer to the document - Sphinx-4 Configuration Management -

    -


    - -

    Enabling the Endpointer

    - -

    - The Sphinx-4 audio endpointer is composed of three data processors - that carry out different functions: - -

    SpeechClassifier - classifies chunks of audio into speech - and non-speech. -
    SpeechMarker - marks the audio stream into speech and non-speech - regions, giving some 'cushion areas' around these regions. -
    NonSpeechDataFilter - removes the non-speech regions from - the audio. - -

    - The Sphinx-4 audio endpointer is enabled by including it as part of - the front end pipeline. The three data processors - should be placed in front of all the other data processors, e.g., - -

    - -

    -<component name="frontEnd" type="edu.cmu.sphinx.frontend.FrontEnd">
    -
    -    <propertylist name="pipeline">
    -        <item>speechClassifier</item>
    -	<item>speechMarker</item>
    -	<item>nonSpeechDataFilter</item>
    -	<item>preemphasizer</item>
    -	// ... other front end processors
    -    </propertylist>
    -
    -</component>
    -
    -<component name="speechClassifier" type="edu.cmu.sphinx.frontend.endpoint.SpeechClassifier">
    -    <property name="threshold" value="13"/>
    -</component>
    -<component name="speechMarker" type="edu.cmu.sphinx.frontend.endpoint.SpeechMarker"/>
    -<component name="nonSpeechDataFilter" type="edu.cmu.sphinx.frontend.endpoint.NonSpeechDataFilter"/>
    -      
    - - -

    - The SpeechClassifier property 'threshold' controls how sensitive the - endpointer is. It is empirically determined that the value of 13 is - optimal for most environments. A lower threshold will make the - endpointer more sensitive, that is, mark more audio as speech. A - higher threshold will make the endpointer less sensitive, that is, - mark less audio as speech. -


    - -Copyright 1999-2004 Carnegie Mellon University.
    -Portions Copyright 2002-2004 Sun Microsystems, Inc.
    -Portions Copyright 2002-2004 Mitsubishi Electric Research Laboratories.
    -All Rights Reserved. Usage is subject to -license terms. - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/doc-files/frontend.jpg b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/doc-files/frontend.jpg deleted file mode 100755 index 44d3874bb6ac14f2f4103915c475b9d0fe31757d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13604 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 Yk#Zu>kMA|#8vyo7^j{esdNcPw0L+4v-T(jq diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/endpoint/doc-files/NonSpeechDataFilter.gif b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/endpoint/doc-files/NonSpeechDataFilter.gif deleted file mode 100755 index 94f7c55ae5a5eee3ea5868d0dd3505579b8a5a1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21266 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 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/endpoint/doc-files/NonSpeechDataFilter.sxd b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/endpoint/doc-files/NonSpeechDataFilter.sxd deleted file mode 100755 index db966dc8e66d85532a64ebb4ee66e77306b27ae2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10652 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 J_Oy>z{|~D`A$$M; diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/endpoint/doc-files/one-region-filtered.gif b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/endpoint/doc-files/one-region-filtered.gif deleted file mode 100755 index f14246afb2247940c7d90b29ed25f2c0cbad79a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2798 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 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/endpoint/doc-files/two-regions-nonmerge.gif b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/endpoint/doc-files/two-regions-nonmerge.gif deleted file mode 100755 index a782ab252046d99c558955c0e5b086b9b228faca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4706 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 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/endpoint/doc-files/two-regions.gif b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/endpoint/doc-files/two-regions.gif deleted file mode 100755 index d5989ca5d0c13c43749f07ff15207cc085c81281..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3280 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 Onyu-YuZar<0029p{eVvZ diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/endpoint/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/endpoint/package.html deleted file mode 100755 index 0befdb2b..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/endpoint/package.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - -Provides classes and interfaces used for speech endpointing. - -

    - The Sphinx-4 audio endpointer is composed of three data processors - that carry out different functions: - -

    - SpeechClassifier - classifies chunks of audio into speech and non-speech. - -

    - SpeechMarker - marks the audio stream into speech and non-speech regions, by - inserting SpeechStartSignals and SpeechEndSignals - into the data stream, while giving some 'cushion areas' around these regions. - -

    - NonSpeechDataFilter - removes the non-speech regions from the audio. - -

    - - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/feature/doc-files/deltas.jpg b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/feature/doc-files/deltas.jpg deleted file mode 100755 index ec8c6cdd47db94ddcab42f87cb5402470d8e0ee0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82757 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�cP@Sd6`lXFfg*+o9EFb_Z;J&`T!N#Ct$AT6^ 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 CuP)92 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/feature/doc-files/feature.jpg b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/feature/doc-files/feature.jpg deleted file mode 100755 index efbf02612b2416e0f5bb07295c1f4a008231ffc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19835 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 W#A=(_6{DX%T^nT|{#+vK|Gxmpt6hlz diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/feature/doc-files/feature.sxd b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/feature/doc-files/feature.sxd deleted file mode 100755 index d5aa0a3bd598785afcba92c9f8e537a3f4fe064d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7138 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 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/feature/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/feature/package.html deleted file mode 100755 index 8f3e6330..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/feature/package.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - -Provides classes that processes features. Examples include batch mode cepstral -mean normalization, and the computation of delta and double delta of features. - - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/filter/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/filter/package.html deleted file mode 100755 index 2589f10f..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/filter/package.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - -Provides classes that implement frequency filters. - - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/frequencywarp/doc-files/melfilter.jpg b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/frequencywarp/doc-files/melfilter.jpg deleted file mode 100755 index d65d2b07b52efd06a5d300e04830343a2db18665..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25245 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 L1@ce(tM7jR?E3gr diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/frequencywarp/doc-files/melfilter.sxd b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/frequencywarp/doc-files/melfilter.sxd deleted file mode 100755 index 9ad52ba22032c113679e124f9f286eb73f8b58b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6775 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 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/frequencywarp/doc-files/melfilterbank.jpg b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/frequencywarp/doc-files/melfilterbank.jpg deleted file mode 100755 index a03dc6333ae768c646ce5a1618853aa075352212..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39423 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 - - - - - - -Provides classes that perform frequency warping. -

    - - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/package.html deleted file mode 100755 index ab70c1ec..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/package.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - -Provides a set of high level classes and interfaces that are used -to perform digital signal processing for speech recognition. - -

    - The front end is modeled as a series of data processors, each of - which performs a specific signal processing function on the incoming - data. Therefore, the incoming data is transformed as it passes through - each data processor. A high-level design of the front end looks like: - -

    - - -

    - For more detailed explanation, please refer to the - FrontEnd class documentation. - -

    - For information on how to configure the front end using the properties - file, please refer to the document - Configuring the Front End. - - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/transform/doc-files/139o.jpg b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/transform/doc-files/139o.jpg deleted file mode 100755 index 2a19c8b0997165f41bd69ae7707619cf77eca8ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35066 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 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/transform/doc-files/139ospectrum.jpg b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/transform/doc-files/139ospectrum.jpg deleted file mode 100755 index ed5d7d7f7bdf861699e4070c4b5147dcc262966a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24167 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 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/transform/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/transform/package.html deleted file mode 100755 index 10e13b37..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/transform/package.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - -Provides classes that transform data from one domain into another. For example, -the discrete fourier transform transform data from the time domain to the -frequency domain. - - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/util/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/util/package.html deleted file mode 100755 index f49cddf7..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/util/package.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - -Provides classes that are generally useful to the various frontend -classes. -

    - - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/window/doc-files/framing.jpg b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/window/doc-files/framing.jpg deleted file mode 100755 index 2dbabd5c74c957cd105356942049df770f47fe74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52312 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 Y%~Ta}E|vfQ;9gw%7yv-u&CAyR0elE1zyJUM diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/window/doc-files/hamming-window.gif b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/window/doc-files/hamming-window.gif deleted file mode 100755 index 819eb8d4461053d2ef8a95745cf5228106b27f37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2255 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 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/window/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/window/package.html deleted file mode 100755 index 79b3d7ec..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/frontend/window/package.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - -Provides classes that implement windowing functions. - - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/fst/openfst/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/fst/openfst/package.html deleted file mode 100755 index b01515ff..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/fst/openfst/package.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - -Provides classes required to convert from/to openFst text format. - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/fst/operations/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/fst/operations/package.html deleted file mode 100755 index 79544cda..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/fst/operations/package.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - -Provides classes for fst operations. - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/fst/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/fst/package.html deleted file mode 100755 index 049a4abd..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/fst/package.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - -Provides the basic fst classes. - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/fst/semiring/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/fst/semiring/package.html deleted file mode 100755 index 99a0aa50..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/fst/semiring/package.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - -Provides semiring related classes. - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/fst/utils/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/fst/utils/package.html deleted file mode 100755 index 67dc42b6..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/fst/utils/package.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - -Provides a set of utility classes. - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/instrumentation/doc-files/Instrumentation.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/instrumentation/doc-files/Instrumentation.html deleted file mode 100755 index 1c497a99..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/instrumentation/doc-files/Instrumentation.html +++ /dev/null @@ -1,726 +0,0 @@ - - - - - Sphinx-4 Instrumentation - - - - - -

    - -
    -
    -
    -

    Introduction

    -Sphinx-4 can be configured to output various collections of information -that may be useful for users and developers. This information includes:
    -
      -
    • Warning and Error messages
      -
    • -
    • Logging  /  tracing messages
    • -
    • Recognition results
      -
    • -
    • Accuracy statistics
    • -
    • Speed statistics
    • -
    • Memory footprint statistics
    • -
    • Configuration information
    • -
    • Grammar plots
    • -
    • Search space plots
    • -
    -The output of the various types of instrumentation information is -controllable from the configuration file.  Lets look in -detail  at what information is being displayed and how to control -what information is output.
    - -

    Silence is Golden

    -First lets look at a Sphinx-4 configuration file for a tidigits -task.  (You can learn more about configuration files by reading Sphinx-4 - Configuration Management).  The Sphinx-4 configuration file silent.config.xml shows a standard -configuration for recognizing connected digits.  It is based upon -the tidigits.config.xml found in sphinx4/tests/performance/tidigits, -except that all logging and instrumentation has been disabled.  If -we run Sphinx-4 with this configuration we get absolutely no output:
    -
    -
    % java edu.cmu.sphinx.tools.batch.BatchModeRecognizer silent.config.xml tidigits.batch
    %
    -That is probably not very useful for most applications.  Let's -take a look to see if we can get some recognition results using the Logger.
    -
    - -

    Using the Logger

    -Any well behaved Sphinx components (there are some that are not so well -behaved...) that needs to output informational messages will do so via -the Sphinx-4 logger.  These have a level of importance associated -with them. Some messages indicate severe  -problems, some messages are  warnings, some are informational,  and some are fine  level tracing messages. -The complete set of log levels are:
    -
      -
    • SEVERE (highest value) - an error occurs that makes continuing - the operation difficult or impossible -
    • -
    • WARNING - an anomalie has occured, but the operation is - continuing -
    • -
    • INFO - general information
    • -
    • CONFIG - information about a components configuration
    • -
    • FINE - tracing messages
    • -
    • FINER - finer grained tracing messages (lots of output)
    • -
    • FINEST (lowest value) - finest grained tracing messages (huge - amounts of output) -
    • -
    -In  silent.config.xml   there is a global property -called logLevel that is set -to OFF. 
    -
    <config>
    <property name="logLevel" value="OFF"/>
    <!-- components omitted -->
    </config>
    -This indicates that by default, no logging information will be logged -to the console at all.  This, of course, is dangerous because we -probably want at least  to see all warning and error -messages.  Let's turn on warning and error messages. We do this by -setting the logLevel to WARNING like so:
    -
    <config>
    <property name="logLevel" value="WARNING"/>
    <!-- components omitted -->
    </config>
    -By setting the logLevel to WARNING, we are saying that we want to see -all log messages at the WARNING level or higher. With this setting we -should see WARNING and SEVERE messages.  (Note that this is the -default setting anyway, so if you omit setting logLevel at the global -level, the logLevel is automatically set to WARNING).
    -
    -Let's run this again with our new settings:
    -
    % java edu.cmu.sphinx.tools.batch.BatchModeRecognizer silent.config.xml tidigits.batch
    %
    -It is still silent, which means we don't have any warning or errors in -our run.  Now, lets see what an error looks like. To force an -error, I'll delete one of the audio input files listed in the tidigits.batch file. This should -cause an error when the recognizer attempts to deocode the  -missing file .  Here's an example:
    -
    % java edu.cmu.sphinx.tools.batch.BatchModeRecognizer silent.config.xml tidigits.batch

    07:37.604 SEVERE I/O error during decoding: /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.o5o6671a.wav.raw\
     (No such file or directory) in edu.cmu.sphinx.tools.batch.BatchModeRecognizer:decode
    %
    -This time we get a SEVERE error report showing when and where the error -occurred. Note that the log includes information such as the timetamp -for the error, the level of the error, a detailed error message and an -indication of where in the code the error occurred.
    -
    -Now let's restore the missing file so we don't get this error anymore -and try to get some results displayed.
    -
    -The JavaDocs for the BatchModeRecognizer  -indicate that the BatchModeRecognizer will log results at the INFO -level.  Let's try setting the logLevel to INFO to see what the -BatchModeRecognizer reports.
    -
    <config>
    <property name="logLevel" value="INFO"/>
    <!-- components omitted -->
    </config>
    -By setting the logLevel to INFO we are enabling logs at the INFO, -WARNING and SEVERE levels.
    -
    - -With this new setting lets run the recognizer again to see what output -we get:
    - -
    % java edu.cmu.sphinx.tools.batch.BatchModeRecognizer silent.config.xml tidigits.batch
    -08:23.006 INFO logMath Log base is 1.0001
    -08:23.020 INFO logMath Using AddTable when adding logs
    -08:23.021 INFO logMath LogAdd table has 99022 entries.
    -08:23.683 INFO sphinx3Loader Sphinx3Loader
    -08:23.684 INFO sphinx3Loader Pool /means Entries: 4816
    -08:23.686 INFO sphinx3Loader Pool /variances Entries: 4816
    -08:23.687 INFO sphinx3Loader Pool /transition_matrices Entries: 34
    -08:23.688 INFO sphinx3Loader Pool senones Entries: 602
    -08:23.689 INFO sphinx3Loader Pool meanTransformationMatrix Entries: 1
    -08:23.690 INFO sphinx3Loader Pool meanTransformationMatrix Entries: 1
    -08:23.691 INFO sphinx3Loader Pool varianceTransformationMatrix Entries: 1
    -08:23.692 INFO sphinx3Loader Pool varianceTransformationMatrix Entries: 1
    -08:23.693 INFO sphinx3Loader Pool /mixture_weights Entries: 602
    -08:23.694 INFO sphinx3Loader Pool senones Entries: 602
    -08:23.696 INFO sphinx3Loader Context Independent Unit Entries: 34
    -08:23.697 INFO sphinx3Loader HMM Manager: 430 hmms
    -08:23.698 INFO acousticModel CompositeSenoneSequences: 0
    -08:23.700 INFO dictionary Loading dictionary from:
    -08:23.701 INFO dictionary file:/lab/speech/sphinx4/data/tidigits_8gau_13dCep_16k_40mel_130Hz_6800Hz.bin.zip/dictionary
    -08:23.712 INFO dictionary Loading filler dictionary from:
    -08:23.714 INFO dictionary file:/lab/speech/sphinx4/data/tidigits_8gau_13dCep_16k_40mel_130Hz_6800Hz.bin.zip/fillerdict
    -08:23.728 INFO wordListGrammar Num nodes : 14
    -08:23.729 INFO wordListGrammar Num arcs : 34
    -08:23.731 INFO wordListGrammar Avg arcs : 2.4285715
    -08:23.306 INFO threadedScorer # of scoring threads: 1
    -08:23.393 INFO batch BatchDecoder: decoding files in tidigits.batch
    -08:23.173 INFO batch File : /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.111a.wav.raw
    -08:23.175 INFO batch Result: <sil> one one one
    -08:23.645 INFO batch File : /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.139oa.wav.raw
    -08:23.647 INFO batch Result: <sil> one three nine oh
    -08:24.957 INFO batch File : /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.155a.wav.raw
    -08:24.958 INFO batch Result: <sil> one five five
    -08:24.278 INFO batch File : /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.1688a.wav.raw
    -08:24.279 INFO batch Result: <sil> one six eight eight
    -08:24.987 INFO batch File : /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.1a.wav.raw
    -08:24.988 INFO batch Result: <sil> one
    -
    -
    - -It looks like there are a number of other components that are issuing -INFO messages that are cluttering up our output.  We'd like to be -able to turn the other INFO messages off, and just get the -BatchModeRecognizer INFO messages.  We can do this by setting the -logLevel at the individual component level.  Each component can -have its own individual logging level.  This means that different -components can be logging messages at different levels.  Since we -only want the BatchModeRecognizer to be outputing INFO messages, lets -restore the overall logging level to WARNING and set the logLevel for -'batch' (the name of the BatchModeRecognizer component) to INFO.
    -
    -
    -
    <config>
    <property name="logLevel" value="INFO"/>

    <component name="batch"
    type="edu.cmu.sphinx.tools.batch.BatchModeRecognizer">
    <property name="recognizer" value="connectedDigitsRecognizer"/>
    <property name="inputSource" value="streamDataSource"/>
    <property name="logLevel" value="INFO"/>
    </component>


    <!-- many components omitted -->
    </config>
    -Now lets look at out output:
    -
    -
    % java -cp ../../../bld/classes/ -Dskip=20 edu.cmu.sphinx.tools.batch.BatchModeRecognizer silent.config.xml tidigits.batch
    08:26.591 INFO batch BatchDecoder: decoding files in tidigits.batch
    08:26.260 INFO batch File : /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.111a.wav.raw
    08:26.262 INFO batch Result: <sil> one one one
    08:26.749 INFO batch File : /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.139oa.wav.raw
    08:26.751 INFO batch Result: <sil> one three nine oh
    08:26.105 INFO batch File : /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.155a.wav.raw
    08:26.107 INFO batch Result: <sil> one five five
    08:26.390 INFO batch File : /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.1688a.wav.raw
    08:26.391 INFO batch Result: <sil> one six eight eight
    08:26.022 INFO batch File : /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.1a.wav.raw
    08:26.023 INFO batch Result: <sil> one
    08:26.029 INFO batch File : /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.1b.wav.raw
    08:26.030 INFO batch Result: <sil> one
    08:26.048 INFO batch File : /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.1za.wav.raw
    08:26.049 INFO batch Result: <sil> one zero


    -There are ways -to control the terseness of the actual output as well.  Setting -the global property logTerse -to true, will result in the ancillary information (timestamp, level, -source component) being omitted.
    -
    -
    <config>
    <property name="logLevel" value="INFO"/>

    <component name="batch"
    type="edu.cmu.sphinx.tools.batch.BatchModeRecognizer">
    <property name="recognizer" value="connectedDigitsRecognizer"/>
    <property name="inputSource" value="streamDataSource"/>
    <property name="logLevel" value="INFO"/>
    <property name="logTerse" value="true"/>
    </component>

    </config>
    -Here's the terse output:
    -
    -
    % java -cp ../../../bld/classes/ -Dskip=20 edu.cmu.sphinx.tools.batch.BatchModeRecognizer silent.config.xml tidigits.batch
    Handler java.util.logging.ConsoleHandler@cdfc9c
    BatchDecoder: decoding files in tidigits.batch
    File : /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.111a.wav.raw
    Result: <sil> one one one
    File : /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.139oa.wav.raw
    Result: <sil> one three nine oh
    File : /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.155a.wav.raw
    Result: <sil> one five five
    File : /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.1688a.wav.raw
    Result: <sil> one six eight eight
    File : /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.1a.wav.raw
    Result: <sil> one
    File : /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.1b.wav.raw
    Result: <sil> one
    File : /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.1za.wav.raw
    Result: <sil> one zero

    -At this point we know enough about the logger to be able to turn it on -and off, to control the level of logging output on a per component -basis and to configure the appearance of the logging output.
    -
    - -

    Tracking Accuracy

    -Now lets look at how we can track the accuracy performance of -Sphinx-4.  One of the prime methods of measuring the overall -quality of a speech recognition system is the recognition accuracy.  This -statistic shows how well the sentence hypotheses produced by the -recognizer match the actual transcripts of what was spoken.  -Obviously, recognition accuracy can only be reported when the -transcripts are available as well.  All of the Sphinx-4 -performance tests (found under the Sphinx-4/tests/performance -directory) include transcripts. For instance, the batch file tidigits.batch begins like so:
    -
    -
    /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.111a.wav.raw one one one
    /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.139oa.wav.raw one three nine oh
    /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.155a.wav.raw one five five
    /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.1688a.wav.raw one six eight eight
    /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.1a.wav.raw one
    /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.1b.wav.raw one
    /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.1za.wav.raw one zero
    /lab/speech/sphinx4/data/tidigits/test/raw16k/man/man.ah.24z982za.wav.raw two four
    -Each line represents a single utterance. The first entry on each line -contains the path name to the audio that is to be recognized. The -remaining entries are the words that make up the transcript for the -utterance.  Using this information the BatchModeRecognizer can -make available the transcripts necessary for producing accuracy -statistics.
    -
    -The accuracy tracker is a component that is typically added to the set -of monitors for a recognizer.  The accuracy tracker will monitor -the recognizer, and when the recognizer generates a result, the tracker -will compare the resulting hypothesis to the appropriate transcript and -generate the statistics.
    -
    -Let's configure our system now to include an accuracy tracker.  -First we add an entry for the component itself:
    -
        <component name="accuracyTracker"
    type="edu.cmu.sphinx.instrumentation.BestPathAccuracyTracker">
    <property name="recognizer" value="connectedDigitsRecognizer"/>
    <property name="showAlignedResults" value="false"/>
    <property name="showRawResults" value="false"/>
    </component>

    -
    -Next, we add the accuracy tracker to the set of recognizer monitors -like so:
    -
        <component name="connectedDigitsRecognizer"
    type="edu.cmu.sphinx.recognizer.Recognizer">
    <property name="decoder" value="digitsDecoder"/>
    <propertylist name="monitors">
    <item>accuracyTracker </item>
    </propertylist>
    </component>

    -
    -Also, since the accuracy tracker will ouput results, we can turn off -the output of the results by the 'batch' component by reseting the logLevel  setting to WARNING.
    -
    -Here's the output:
    -
    % java -cp ../../../bld/classes/ -Dskip=20 edu.cmu.sphinx.tools.batch.BatchModeRecognizer silent.config.xml tidigits.batch
    (... many lines omitted)

    REF: four one six
    HYP: four one six
    ALIGN_REF: four one six
    ALIGN_HYP: four one six
    RAW <sil> four one six

    Accuracy: 100.000% Errors: 0 (Sub: 0 Ins: 0 Del: 0)
    Words: 78 Matches: 78 WER: 0.000%
    Sentences: 23 Matches: 23 SentenceAcc: 100.000%

    REF: four two eight oh oh oh nine
    HYP: four two eight oh oh nine
    ALIGN_REF: four two eight oh oh OH nine
    ALIGN_HYP: four two eight oh oh ** nine
    RAW <sil> four two eight oh oh nine

    Accuracy: 98.824% Errors: 1 (Sub: 0 Ins: 0 Del: 1)
    Words: 85 Matches: 84 WER: 1.176%
    Sentences: 24 Matches: 23 SentenceAcc: 95.833%

    REF: four five two zero three
    HYP: four five two zero three
    ALIGN_REF: four five two zero three
    ALIGN_HYP: four five two zero three
    RAW <sil> four five two zero three

    -As you can see the accuracy tracker outputs quite a bit of -information.  Lets look at the information in detail:
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    REF
    -
    Reference -- This is the reference or transcript. This is what should be recognized.
    -
    HYP
    -
    Hypothesis - - This is the result that is generated by the recognizer. This is what was  recognized.
    -
    ALIGN_REF
    -
    Aligned -Reference - This is the reference text, where mismatches between - the reference and the hypothesis are highlighted. 
    -
    ALIGH_HYP
    -
    Aligned -Hypothesis -  This is the recognized text with mismatched - text highlighted.
    -
    RAW
    -
    Raw -Text - this is the actual text recognized, including all filler - words such as silences, coughs, lip smacks, breaths and so on.
    -
    Accuracy
    -
    Word -Accuracy - The number of matching words compared to the total - number of words in the input as a percent.
    -
    Errors:
    -
    Word -Error Count - The total number of word errors.
    -
    Sub
    -
    Substition -count - The total number of substitution errors. A substitution - error occurs when one word is replaced by another.
    -
    Ins
    -
    Insertion -count - The total number of insertion errors. An insertion - error occurs when an extra word is inserted in the hypothesis.
    -
    Del
    -
    Deletion -count - The total number of deletion errors. A deletion error - occurs when a word is missing in the hypothesis.
    -
    Words
    -
    Reference -word count - The total number of words expected
    -
    Matches
    -
    Matching -word count - The total number of matching words
    -
    WER
    -
    Word -error rate - This is equal to (sub + ins + del) / words * 100
    -
    Sentences
    -
    Reference -sentence count - The total number of sentences.
    -
    Matches
    -
    Matching -sentences - The total number of matching sentences
    -
    SentenceAcc
    -
    Sentence -Accuracy  - This is equal to (matches / sentences) * 100
    -
    -
    -First it shows the REF and HYP outputs.  REF is the reference or -transcript. This is the expected result. HYP is the hypothesis, the -result that was generated by the recognizer.
    -
    -That's a whole lot of stuff, in fact, it is probably more than we need. -We can configure the accuracy tracker  (of course) to reduce the -amount of output.  Let's turn off the ALIGN and the RAW outputs:
    -
        <component name="accuracyTracker"
    type="edu.cmu.sphinx.instrumentation.BestPathAccuracyTracker">
    <property name="recognizer" value="connectedDigitsRecognizer"/>
    <property name="showAlignedResults" value="false"/>
    <property name="showRawResults" value="false"/>
    </component>
    -The accuracy tracker will also show summary information at the end of a -run (when the recognizer is deallocated).   Here's an example -showing the reduced out and the summary information.
    -
    -

    REF: one
    HYP: one

    Accuracy: 100.000% Errors: 0 (Sub: 0 Ins: 0 Del: 0)
    Words: 15 Matches: 15 WER: 0.000%
    Sentences: 5 Matches: 5 SentenceAcc: 100.000%

    # --------------- Summary statistics ---------
    Accuracy: 100.000% Errors: 0 (Sub: 0 Ins: 0 Del: 0)
    Words: 15 Matches: 15 WER: 0.000%
    Sentences: 5 Matches: 5 SentenceAcc: 100.000%


    -
    -The summary statistics shows the total accuracy data for the entire run.
    -
    - -

    Tracking Speed

    -Another important aspect of speech recognition is the speed of -recognition.  The speed tracker will track and report statistics -relating to the speed of recognition.  The speed tracker is added -to the set of monitors in the recognizer in the same way that the -accuracy tracker is added:
    -
        <component name="connectedDigitsRecognizer"
    type="edu.cmu.sphinx.recognizer.Recognizer">
    <property name="decoder" value="digitsDecoder"/>
    <propertylist name="monitors">
    <item>accuracyTracker </item>
    <item>speedTracker </item>
    </propertylist>
    </component>

    <component name="speedTracker"
    type="edu.cmu.sphinx.instrumentation.SpeedTracker">
    <property name="recognizer" value="connectedDigitsRecognizer"/>
    <property name="frontend" value="${frontend}"/>
    </component>

    -Here's some output of the speed tracker:
    -
    REF:       one one one
    HYP: one one one

    Accuracy: 100.000% Errors: 0 (Sub: 0 Ins: 0 Del: 0)
    Words: 3 Matches: 3 WER: 0.000%
    Sentences: 1 Matches: 1 SentenceAcc: 100.000%
    This Time Audio: 1.38s Proc: 2.16s Speed: 1.56 X real time
    Total Time Audio: 1.38s Proc: 2.16s Speed: 1.56 X real time

    REF: one three nine oh
    HYP: one three nine oh

    Accuracy: 100.000% Errors: 0 (Sub: 0 Ins: 0 Del: 0)
    Words: 7 Matches: 7 WER: 0.000%
    Sentences: 2 Matches: 2 SentenceAcc: 100.000%
    This Time Audio: 1.47s Proc: 0.97s Speed: 0.66 X real time
    Total Time Audio: 2.85s Proc: 3.13s Speed: 1.10 X real time


    -
    -The data output by the speed tracker are:
    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    This time audio
    -
    The length of  time (in - seconds) of the current audio.
    -
    This time proc
    -
    The time spent processing this - audio.
    -
    This Speed:
    -
    processing time / audio time
    -
    Total time audio
    -
    The time for all audio
    -
    Total processingThe time spent processing all - audio -
    Total Speed:
    -
    total proc time / total audio - time
    -
    -
    -
    -Dumping Response Time
    -The speed tracker can also be configured to show response time. This is -useful when running in a live-mode situation where front-end buffering -latency can affect the perceived performance of the system.
    -The speed tracker configuration for enabling tracking of response time -is shown here:
    -
    -
        <component name="speedTracker"
    type="edu.cmu.sphinx.instrumentation.SpeedTracker">
    <property name="recognizer" value="connectedDigitsRecognizer"/>
    <property name="frontend" value="${frontend}"/>
    <property name="showResponseTime" value="true"/>
    </component>
    -The response time output looks like this:
    -
    -
    HYP: one three nine oh
    Sentences: 2
    This Time Audio: 1.15s Proc: 0.86s Speed: 0.75 X real time
    Total Time Audio: 3.33s Proc: 3.52s Speed: 1.06 X real time
    Response Time: Avg: 0.032333333s Max: 0.085s Min: 0.0060s

    -The response time field includes and average (Avg), maximum(Max) and -minimum (Min) response time encountered. This is the time from when the -front-end first encounters a packet of audio, until it is delivered to -the decoding portion of the recognizer.  This gives a good measure -of the latency due to the front-end processing such as normalization -and end-pointing.
    -
    -Dumping Timing Statistics
    -The speed tracker can also be configured to dump out low level timing -data for various aspects of the recognition process.  Many of the -components in the Sphinx-4 system will collect detailed timing -statistics.  For instance, the linguist may keep track of how long -it takes to build the search graph, and the acoustic model loader may -keep track of how long it takes to load the acoustic model from a -compressed file. 
    -Setting the speedTracker showTimers property -to true will cause the timing information to be dump. The timing -information is dumped immediately after the system is initialized, and -again when the recognizer is deallocated.  Here's a sample of the -timing output:
    -
    -
    # ----------------------------- Timers----------------------------------------
    # Name Count CurTime MinTime MaxTime AvgTime TotTime
    streamDataSourc 196 0.0000s 0.0000s 0.0390s 0.0004s 0.0760s
    preemphasizer 196 0.0000s 0.0000s 0.0130s 0.0001s 0.0190s
    windower 194 0.0010s 0.0000s 0.0550s 0.0009s 0.1840s
    fft 1732 0.0000s 0.0000s 0.0530s 0.0003s 0.4780s
    melFilterBank 1732 0.0000s 0.0000s 0.0410s 0.0000s 0.0790s
    dct 1732 0.0000s 0.0000s 0.0280s 0.0001s 0.0920s
    featureExtracti 1692 0.0000s 0.0000s 0.1610s 0.0001s 0.1980s
    AM_Load 1 2.3060s 2.3060s 2.3060s 2.3060s 2.3060s
    DictionaryLoad 1 0.0110s 0.0110s 0.0110s 0.0110s 0.0110s
    compile 1 0.8750s 0.8750s 0.8750s 0.8750s 0.8750s
    createGStates 1 0.0260s 0.0260s 0.0260s 0.0260s 0.0260s
    collectContex 1 0.0050s 0.0050s 0.0050s 0.0050s 0.0050s
    expandStates 1 0.7250s 0.7250s 0.7250s 0.7250s 0.7250s
    connectNodes 1 0.0140s 0.0140s 0.0140s 0.0140s 0.0140s
    scoring 1722 0.0000s 0.0000s 0.3980s 0.0037s 6.4570s
    pruning 1712 0.0000s 0.0000s 0.0010s 0.0000s 0.0100s
    growing 1722 0.0030s 0.0000s 0.0610s 0.0027s 4.666
    -This table shows the timing information after a short run of tidigits -word list.   Here's the data key:
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Name
    -
    The name of the operation
    -
    Count
    -
    The number of times the - operation was invoked
    -
    CurTime
    -
    The most recent timing for this - operation
    -
    MinTime
    -
    The fastest time for this - operation
    -
    MaxTime
    -
    The slowest time for this - operation
    -
    AvgTime
    -
    The average time for this - operation
    -
    TotTime
    -
    The total time for this operation
    -
    -
    - -

    Tracking Memory Usage

    -For some applications, the overall memory footprint of the recognizer -is important.  The MemoryTracker can be used to track the memory -usage of Sphinx-4.   The MemoryTracker is added -to the set of monitors in the recognizer in the same way that the -accuracy tracker is added:
    -
    -
        <component name="connectedDigitsRecognizer" 
    type="edu.cmu.sphinx.recognizer.Recognizer">
    <property name="decoder" value="digitsDecoder"/>
    <propertylist name="monitors">
    <item>accuracyTracker </item>
    <item>speedTracker </item>
    <item>memoryTracker </item>
    </propertylist>
    </component>

    <component name="memoryTracker"
    type="edu.cmu.sphinx.instrumentation.MemoryTracker">
    <property name="recognizer" value="connectedDigitsRecognizer"/>
    </component>

    -
    -The output of the memory tracker is as follows:
    -
    -
    REF:       one
    HYP: one

    Accuracy: 100.000% Errors: 0 (Sub: 0 Ins: 0 Del: 0)
    Words: 16 Matches: 16 WER: 0.000%
    Sentences: 6 Matches: 6 SentenceAcc: 100.000%
    This Time Audio: 0.99s Proc: 0.64s Speed: 0.65 X real time
    Total Time Audio: 7.47s Proc: 6.13s Speed: 0.82 X real time
    Mem Total: 126.62 Mb Free: 112.26 Mb
    Used: This: 14.36 Mb Avg: 14.35 Mb Max: 18.82 Mb
    -
    -The memory tracker ouputs five data items:
    -
    - - - - - - - - - - - - - - - - - - - - - - - -
    Mem total
    -
    The total amount of memory - allocated to the VM
    -
    Free
    -
    Of the Mem Total how much is currently not - being used
    -
    Used This
    -
    How much memory is currently - being used
    -
    Used Avg
    -
    The average amount of memory used
    -
    Used MaxThe maximum amount of memory used
    -
    -

    Miscellaneous Instrumentation

    -In addition to the previously described instrumentation, there are a -few other monitors that are useful.
    -
    - -

    Configuration Monitor

    -The configuration monitor dumps out the current configuration of the -system.  This dump differs from the configuration file in a few -ways:
    -
      -
    • The format is more readable by humans than the XML format
    • -
    • The configuration dump shows  just the active configuration, - whereas the XML configuration file may have configuration data for - components that are not actually used. -
    • -
    • The configuration dump shows the configuration data after any - properties have been set via system properties (as is often done in the - build.xml file). 
      -
    • -
    • The configuration dump shows all the possible properties for a - particular component and highlights the values that are receiving their - default values.
      -
    • -
    -The Configuration Monitor (as well as most of the 'dump something -interesting' monitors) are generally controlled by the -RecognizerMonitor.   The Configuration Monitor defines what -is to be dumped (in this case the configuration), while the -RecognizerMonitor indicates when it should be dumped.  Let's -configure a recognizer to dump the configuration after the recognizer -is allocated (that is, the recognizer is completely initialized and -ready to recognize).
    -
    <!-- add the recognizer monitor to the recognizer -->
    <component name="connectedDigitsRecognizer"
    type="edu.cmu.sphinx.recognizer.Recognizer">
    <property name="decoder" value="digitsDecoder"/>
    <propertylist name="monitors">
    <item>accuracyTracker </item>
    <item>speedTracker </item>
    <item>memoryTracker </item>
    <item>recognizerMonitor </item>
    </propertylist>
    </component>

    <!-- create the recognizer monitor with the configMonitor as one of the dumpers -->

    <component name="recognizerMonitor"
    type="edu.cmu.sphinx.instrumentation.RecognizerMonitor">
    <property name="recognizer" value="connectedDigitsRecognizer"/>
    <propertylist name="allocatedMonitors">
    <item>configMonitor </item>
    </propertylist>
    </component>

    <!-- create the configMonitor -->
    <component name="configMonitor"
    type="edu.cmu.sphinx.instrumentation.ConfigMonitor">
    <property name="showConfig" value="true"/>
    </component>



    -
    -Here's a snippet of the output:
    -
    -
     ============ config =============
    batch:
    logLevel = [DEFAULT]
    skip = 0
    totalBatches = [DEFAULT]
    recognizer = connectedDigitsRecognizer
    usePooledBatchManager = [DEFAULT]
    count = 0
    inputSource = streamDataSource
    whichBatch = [DEFAULT]

    connectedDigitsRecognizer:
    logLevel = [DEFAULT]
    monitors = accuracyTracker, speedTracker, memoryTracker, recognizerMonitor
    decoder = digitsDecoder

    digitsDecoder:
    searchManager = searchManager
    logLevel = [DEFAULT]
    featureBlockSize = [DEFAULT]

    searchManager:
    scorer = threadedScorer
    activeListFactory = activeList
    logLevel = [DEFAULT]
    pruner = trivialPruner
    logMath = logMath
    growSkipInterval = [DEFAULT]
    showTokenCount = [DEFAULT]
    wantEntryPruning = [DEFAULT]
    linguist = flatLinguist
    relativeWordBeamWidth = [DEFAULT]

    logMath:
    logLevel = [DEFAULT]
    useAddTable = true
    logBase = 1.0001


    -
    -Plotting Component connections
    -The configuration monitor can also dump out a graphical plot of the -components and their connections.  The  plot is in GDL format  which can be -plotted with the aiSee - graph - visualization program.  Here's a sample of the output:
    -
    -gdl plot
    -
    -To generate a component dump, set the showConfigAsGDL -property of the configuration monitor to true. This will dump the GDL -plot to a file called "config.gdl".
    -
    -Other Configuration Dump
    -There are some other configuration dumps in the works, including a -configuration dumper that outputs the current configuration in HTML -format with hyperlinks to the appropriate JavaDoc component -documentation.
    - -

    Linguist  GDLDumper

    -The lingust GDL dumper dumps a GDL plot of the search graph.  The -search graph is the primary data structure used by the recognizer -during the decode process. Note that the graph can become very large -even for very small vocabularies.  Here's a configuration for the -LinguistDumper:
    -
    -
        <component name="recognizerMonitor" 
    type="edu.cmu.sphinx.instrumentation.RecognizerMonitor">
    <property name="recognizer" value="isolatedDigitsRecognizer"/>
    <propertylist name="allocatedMonitors">
    <item>linguistDumper </item>
    </propertylist>
    </component>


    <component name="linguistDumper"
    type="edu.cmu.sphinx.linguist.util.GDLDumper">
    <property name="linguist" value="flatLinguist"/>
    <property name="logMath" value="logMath"/>
    </component>

    -
    -Here's reduced size image of a plot generated by the GDL Dumper for the -TI46 word list test:
    -
    -GDL Dumper output
    -
    -
    - -

    Linguist Stats Dumper

    -This useful dumper shows statistics about the search space.   -Here's the config:
    -
        <component name="recognizerMonitor" 
    type="edu.cmu.sphinx.instrumentation.RecognizerMonitor">
    <property name="recognizer" value="${recognizer}"/>
    <propertylist name="allocatedMonitors">
    <item>linguistStats </item>
    </propertylist>
    </component

    <component name="linguistStats"
    type="edu.cmu.sphinx.linguist.util.LinguistStats">
    <property name="linguist" value="${linguist}"/>
    </component>

    -The Lingust Stats dumper shows the total number of states in the search -space as well as the total number of states of each type.   -Here's some sample output:
    -
    # ----------- linguist stats ------------ 
    # Total states: 256
    # class edu.cmu.sphinx.linguist.flat.PronunciationState: 13
    # class edu.cmu.sphinx.linguist.flat.NonEmittingHMMState: 46
    # class edu.cmu.sphinx.linguist.flat.ExtendedUnitState: 46
    # class edu.cmu.sphinx.linguist.flat.BranchState: 12
    # class edu.cmu.sphinx.linguist.flat.HMMStateState: 138
    # class edu.cmu.sphinx.linguist.flat.GrammarState: 1

    -Note that for larger tasks, the linguist stats dumper may take a very -long time to run since it needs to visit every possible state in the -search graph. Even for a relatively small task like the rm1 bigram -task, the dumper can take several minutes to work its way through the -search graph.
    -
    -Copyright 1999-2004 Carnegie Mellon - University.
    - Portions Copyright 2002-2004 Sun Microsystems, Inc.
    - Portions Copyright 2002-2004 Mitsubishi Electric Research - Laboratories.
    - All Rights Reserved. Usage is subject to license - terms.
    -
    -
    - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/instrumentation/doc-files/gdl_config.jpg b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/instrumentation/doc-files/gdl_config.jpg deleted file mode 100755 index 0b3eeb0d4937f570e436c4958ce5f8e7417279b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64969 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

    aGFY@cj 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 H{+s__^)FBg diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/instrumentation/doc-files/lingustDump.jpg b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/instrumentation/doc-files/lingustDump.jpg deleted file mode 100755 index 2041d30348ff6898e765de0093a149b9491c9b35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36872 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 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/instrumentation/doc-files/silent.config.xml b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/instrumentation/doc-files/silent.config.xml deleted file mode 100755 index b41da658..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/instrumentation/doc-files/silent.config.xml +++ /dev/null @@ -1,268 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - streamDataSource - preemphasizer - windower - fft - melFilterBank - dct - batchCMN - featureExtraction - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - linguistStats - - - - - - - - - - - - - - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/instrumentation/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/instrumentation/package.html deleted file mode 100755 index 46e56b3f..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/instrumentation/package.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - -Provides a set of classes that monitor and track operational aspects of the Sphinx system. -

    - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/jsgf/doc-files/commandGrammar.jpg b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/jsgf/doc-files/commandGrammar.jpg deleted file mode 100755 index 2aed35f8afd2c375f99ff8de4938fec7f6f40f82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47024 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 uGZzxy>inTpw4D&%hW`&Q)IRP2 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/jsgf/doc-files/helloWorld.jpg b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/jsgf/doc-files/helloWorld.jpg deleted file mode 100755 index 32a1ddfc05e4dc75e006244525f1b0a7c610e5bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10141 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 - - - - - - -Provides classes that represent the acoustic model. The acoustic model -is represented as a set of hidden markov models (HMMs) associated with -a unit of speech. - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/acoustic/tiedstate/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/acoustic/tiedstate/package.html deleted file mode 100755 index aedc001c..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/acoustic/tiedstate/package.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - -Provides classes that represent acoustic model in terms of a set of -tied states. HMM states are represented by senones which in turn are -represented by gaussian mixtures. - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/package.html deleted file mode 100755 index 372772c7..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/acoustic/tiedstate/trainer/package.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - -Provides classes that represent a trainable acoustic model. - - - \ No newline at end of file diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/acoustic/trivial/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/acoustic/trivial/package.html deleted file mode 100755 index d45adce2..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/acoustic/trivial/package.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - -Provides classes that represent a trivial acoustic model. This acoustic model is -used to demonstrate how to write one's own acoustic model. - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/dictionary/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/dictionary/package.html deleted file mode 100755 index 09af857e..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/dictionary/package.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - -Provides a generic interface to a dictionary as well as several -implementations. The dictionary provides a mechanism for determining -the pronunciation of a word. - - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/flat/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/flat/package.html deleted file mode 100755 index 801c7c6b..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/flat/package.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - -Provides an implementation of the Linguist that -statically represents the search space as a flat graph, where each -word in the vocabulary has its own branch. This linguist is suitable -for small and medium size vocabularies. - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/g2p/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/g2p/package.html deleted file mode 100755 index 49b1eb99..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/g2p/package.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - -Provides classes that implement the g2p decoding functionality. - - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/language/grammar/doc-files/fst-end-node.jpg b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/language/grammar/doc-files/fst-end-node.jpg deleted file mode 100755 index f96b1033b3db05cf41ed352caff88ee7ddcc5c04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9248 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 - - - - - - -Provides classes and interfaces that can be used to represent a graph of words and word transitions. - - - - \ No newline at end of file diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/language/ngram/large/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/language/ngram/large/package.html deleted file mode 100755 index 343ca914..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/language/ngram/large/package.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - -Provides an implementation of the LanguageModel interface.
    -This implementation loads large binary forms of language model -generated by the lm_convert CMU Sphinx tool. - -To handle n-gram language models with n>3, use the lm_convert tool -available in the cmusphinx/branches/LIUM/lm_tools_32bits_file64bits -directory of the CMU Sphinx svn repository on SourceForge. - -The DMP binary tools are built by lm_convert from ARPA language models -produced by, for example, the CMU-Cambridge Statistical Language Modeling -Toolkit or the SRILM toolkit. Be careful to sort all the n-grams in the same -way, for each n, and to have always a value for back-off weights (even 0). - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/language/ngram/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/language/ngram/package.html deleted file mode 100755 index 5cc7dcdd..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/language/ngram/package.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - -Provides classes and interfaces that represent a stochastic language model - - - \ No newline at end of file diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/language/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/language/package.html deleted file mode 100755 index 964cb2f0..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/language/package.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - -Provides a generic interface to an N-Gram language model. Also -provides implementations of this interface and a factory for -generating instances of these implementations. - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/lextree/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/lextree/package.html deleted file mode 100755 index 49477f90..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/lextree/package.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - -Provides an implementation of the Linguist that -represents the search space as a lex tree. This linguist dynamically -generates the search states based upon the lex tree. The lex tree is -generated from the vocabulary supplied by the -LanguageModel. The lex tree nodes contained 'compressed' -hmm nodes. The final unit of a word is not expanded until search -time. This avoids the large fanout that typically occurs at word -endings, reducing memory consumption and startup time significantly. - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/package.html deleted file mode 100755 index 5c86281f..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/package.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - -Provides a set of interfaces and classes that are used to define the -search graph used by the decoder. Implementations of the -Linguist interface are used by the decoder to create the -search graph. The search graph is a directed graph formed by -SearchState and SearchStateArc objects. -Some implementations of the Linguist may build the search -graph based upon a Grammar, which represents a graph of -words and probabilities. This package provides a number of different -implementations of Grammar - - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/util/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/util/package.html deleted file mode 100755 index 4960eef6..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/linguist/util/package.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - -Provides a set of classes that are useful by implementations of the -Linguist interface. These utility classes are typically -used to test and debug a linguist. - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/recognizer/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/recognizer/package.html deleted file mode 100755 index 0e1a40ba..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/recognizer/package.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - -Provides a set of high level classes and interfaces that are used -to perform speech recognition with the Sphinx-4 speech recognition system. - - -

    Related Documentation

    - -For overviews, tutorials, examples, guides, and tool documentation, -please see: -
      -
    • -
    - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/result/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/result/package.html deleted file mode 100755 index c970403e..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/result/package.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - -Provides a set of classes that represent the result of a recognition. -Results can maintained in a lattice, which is a directed graph of all -the possible words recognized. - - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/tools/audio/doc-files/HowToRunAudioTool.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/tools/audio/doc-files/HowToRunAudioTool.html deleted file mode 100755 index 3928e498..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/tools/audio/doc-files/HowToRunAudioTool.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - -Sphinx-4 AudioTool - - - - -
    - - - - -
    -

    Sphinx-4 AudioTool

    -
    -
    -
    - -

    - AudioTool is a visual tool that records and displays the waveform - and spectrogram of an audio signal. The image below is a screen shot - of the AudioTool. -

    -

    - -

    - To run this AudioTool, first make sure that all sources are built - by typing at the top level directory: -

    - -
    -ant
    -
    - -

    - Then, to run the tool, at the top level directory, type: -

    - -
    -java -jar bin/AudioTool.jar
    -
    - -

    - You can record audio by pressing the "Record" button. When you do so, - the label of the "Record" button will change to "Stop." At this - time, you can speak into the microphone. To stop recording, press the - "Stop" button. When you do so, the label of the "Stop" button will - change to "Record" and the tool will play back and display the audio - you just recorded. - -

    - NOTE: On some systems, trouble occurs when you try to record and play - at the same time. To avoid this, please make sure you press the "Stop" - button before playing audio you just recorded, and please make sure - the audio has finished playing before you press the "Record" button. - -

    - You can play the displayed waveform by selecting a region to play, and then - pressing the "Play" button. You can enlarge or shrink the waveform and - spectrogram by clicking the "Zoom In" and "Zoom Out" buttons. - You can also record your own waveform by selecting "Record Start/Stop" - under the "Audio" menu. -

    - -

    - If you are running Linux and have problems with the audio, - please read the - - Linux JavaSound section. - -

    - You can also run AudioTool with a single command line option of - "-dumpMixers" to dump information about the audio system settings - that are specific to your machine. In the following example, we - see there are 3 Mixers (indexed by 0, 1, and 2) available on this - machine. -

    - -
    -java -jar bin/AudioTool.jar -dumpMixers
    -Mixer[0]: "Java Sound Audio Engine"
    -    Description: Software mixer and synthesizer
    -    SourceLineInfo (e.g., speakers):
    -        PCM_SIGNED, -1.0 Hz, 8 bit, mono, audio data
    -        PCM_UNSIGNED, -1.0 Hz, 8 bit, mono, audio data
    -        PCM_SIGNED, -1.0 Hz, 8 bit, stereo, audio data
    -        PCM_UNSIGNED, -1.0 Hz, 8 bit, stereo, audio data
    -        PCM_SIGNED, -1.0 Hz, 16 bit, mono, little-endian, audio data
    -        PCM_SIGNED, -1.0 Hz, 16 bit, mono, big-endian, audio data
    -        PCM_SIGNED, -1.0 Hz, 16 bit, stereo, little-endian, audio data
    -        PCM_SIGNED, -1.0 Hz, 16 bit, stereo, big-endian, audio data
    -        PCM_SIGNED, -1.0 Hz, 8 bit, mono, audio data
    -        PCM_UNSIGNED, -1.0 Hz, 8 bit, mono, audio data
    -        PCM_SIGNED, -1.0 Hz, 8 bit, stereo, audio data
    -        PCM_UNSIGNED, -1.0 Hz, 8 bit, stereo, audio data
    -        PCM_SIGNED, -1.0 Hz, 16 bit, mono, little-endian, audio data
    -        PCM_SIGNED, -1.0 Hz, 16 bit, mono, big-endian, audio data
    -        PCM_SIGNED, -1.0 Hz, 16 bit, stereo, little-endian, audio data
    -        PCM_SIGNED, -1.0 Hz, 16 bit, stereo, big-endian, audio data
    -    TargetLineInfo (e.g., microphones):
    -        none
    -Mixer[1]: "Mac OS X,CoreAudio,Audio hardware"
    -    Description: No details available
    -    SourceLineInfo (e.g., speakers):
    -        none
    -    TargetLineInfo (e.g., microphones):
    -        PCM_SIGNED, 44100.0 Hz, 8 bit, mono, audio data
    -        PCM_UNSIGNED, 44100.0 Hz, 8 bit, mono, audio data
    -        PCM_SIGNED, 44100.0 Hz, 16 bit, mono, big-endian, audio data
    -        PCM_SIGNED, 44100.0 Hz, 16 bit, mono, little-endian, audio data
    -        PCM_SIGNED, 44100.0 Hz, 8 bit, stereo, audio data
    -        PCM_UNSIGNED, 44100.0 Hz, 8 bit, stereo, audio data
    -        PCM_SIGNED, 44100.0 Hz, 16 bit, stereo, big-endian, audio data
    -        PCM_SIGNED, 44100.0 Hz, 16 bit, stereo, little-endian, audio data
    -Mixer[2]: ""
    -    Description: No details available
    -    SourceLineInfo (e.g., speakers):
    -        none
    -    TargetLineInfo (e.g., microphones):
    -        PCM_SIGNED, 44100.0 Hz, 8 bit, mono, audio data
    -        PCM_UNSIGNED, 44100.0 Hz, 8 bit, mono, audio data
    -        PCM_SIGNED, 44100.0 Hz, 16 bit, mono, big-endian, audio data
    -        PCM_SIGNED, 44100.0 Hz, 16 bit, mono, little-endian, audio data
    -        PCM_SIGNED, 44100.0 Hz, 8 bit, stereo, audio data
    -        PCM_UNSIGNED, 44100.0 Hz, 8 bit, stereo, audio data
    -        PCM_SIGNED, 44100.0 Hz, 16 bit, stereo, big-endian, audio data
    -        PCM_SIGNED, 44100.0 Hz, 16 bit, stereo, little-endian, audio data
    -
    - -

    - -
    -Copyright 1999-2004 Carnegie Mellon University. -
    -Portions Copyright 2002-2004 Sun Microsystems, Inc. -
    -Portions Copyright 2002-2004 Mitsubishi Electric Research Laboratories. -
    -All Rights Reserved. Usage is subject to license terms. - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/tools/audio/doc-files/audiotool.gif b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/tools/audio/doc-files/audiotool.gif deleted file mode 100755 index 9b52c6f414ef045809c5a9c2e8928b05c4ba8e2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24863 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 W?vMZc>wo|J@4x^54}kd>5CA(K_&tvR diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/tools/audio/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/tools/audio/package.html deleted file mode 100755 index 068de32a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/tools/audio/package.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - -Provides an tool that records and displays the waveform and -spectrogram of an audio signal. For instructions on how to run the tool, -please refer to the document -How to Run AudioTool - - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/tools/batch/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/tools/batch/package.html deleted file mode 100755 index 49362e95..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/tools/batch/package.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - -Provides an tool that performs batch-mode speech recognition. - - - - - - \ No newline at end of file diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/tools/feature/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/tools/feature/package.html deleted file mode 100755 index ad5efaf4..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/tools/feature/package.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - -

    Description

    -

    -Provides an tool that generates different types of features -(MFCC, PLP, spectrum) from audio files. -

    - -

    -This program takes in an audio file, does frontend signal processing to it, and then dumps -the resulting Feature into a separate file. Also it can process a list of files at once. -

    - -

    -Available options: -

    - -
      -
    • -config configFile - the XML configuration file
    • -
    • -name frontendName - the name of the feature extractor inside the configuration file
    • -
    • -i audioFile - the name of the audio file
    • -
    • -ctl controlFile - the name of the input file for batch processing
    • -
    • -o outputFile - the name of the output file or output folder
    • -
    • -format binary/ascii - output file format
    • -
    - -

    Binary File Format

    - -

    - - The first 4 bytes of the binary file is an integer indicating the - total number of data points in the file. This is used by the program - that reads this file to check the endianness of the file by comparing - with the file size. The rest of the file is simply the data points. - Each data point is a 4-byte floating point number, in big-endian order. -

    - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/tools/live/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/tools/live/package.html deleted file mode 100755 index 947b320c..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/tools/live/package.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - -Provides an tool that performs pseudo-live-mode speech recognition. - - - - - - \ No newline at end of file diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/trainer/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/trainer/package.html deleted file mode 100755 index a60d3068..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/trainer/package.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - -Provides a set of high level classes that can -be used to configure and initiate the speech recognition training -process. -

    - - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/util/machlearn/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/util/machlearn/package.html deleted file mode 100755 index 9a8113bf..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/util/machlearn/package.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - -Provides a set of classes and interfaces which aim to unify the different probabilistic modeling approaches spread over the -S4-library into a common probabilistic framework. - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/util/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/util/package.html deleted file mode 100755 index 979e1a37..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/util/package.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - -Provides a set of general purpose utility classes for Sphinx. This is -a grab bag of classes that generally useful but not specific to any -one sphinx subsystem. -

    - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/util/props/doc-files/ConfigurationManagement.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/util/props/doc-files/ConfigurationManagement.html deleted file mode 100755 index 2439afc4..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/util/props/doc-files/ConfigurationManagement.html +++ /dev/null @@ -1,577 +0,0 @@ - - - - - - - - Sphinx-4 Configuration Management - - - - -

    - - - - - - -
    -

    Configuration Management for Sphinx-4

    -
    -
    -
    - -

    Managing the Sphinx Configuration

    - - The Sphinx-4 configuration manager system has two primary - purposes:
    - -
      -
    • Determining which - components are to be used in the system. The Sphinx-4 - system is designed to be extremely flexible. At runtime, just - about any component can be replaced with another. For example, - in Sphinx-4 the FrontEnd component provides acoustic - features that are used scored against the acoustic model. - Typically, Sphinx-4 is configured with a FrontEnd that produces - Mel frequency cepstral coefficients (MFCCs), however it - is possible to reconfigure Sphinx-4 to use a different FrontEnd - that, for instance, produces Perceptual Linear Prediction - coefficients (PLP). The Sphinx-4 configuration manager is - used to configure the system in this fashion.
    • - -
    • Determining the - detailed configuration of each of these components. The - Sphinx-4 system is like most speech recognition systems in that - it has a large number of parameters that control how the system - functions. For instance, a beam width is sometimes used - to control the number of active search paths maintained during - the speech decoding. A larger value for this beam width can - sometimes yield higher recognition accuracy at the expense of - longer decode times. The Sphinx-4 configuration manager is used - to configure such parameters.
    • -
    - -

    The Configuration File

    - - The configuration of a particular Sphinx-4 system is determined by a configuration file. This - configuration file defines the following:
    - -
      -
    • The names and - types  of all of - the components of the system
    • - -
    • The connectivity of these components - that is, which - components talk to each other
    • - -
    • The detailed configuration for each of these - components.
    • -
    Let's take a look at a simple configuration file:
    -
    -
    -<config>
    <component name="mySampleComponent" type="edu.cmu.sphinx.sample.MyComponent"/>
    </config>
    -
     
    - Some things to note about this configuration file:
    - -
      -
    • The format of the file is XML
    • - -
    • This configuration file defines a single component called - mySampleComponent. 
    • - -
    • The type of this component is  edu.cmu.sphinx.sample.MyComponent  - which must implement the - Configurable interface.
    • -
    - -

    Defining components

    Now lets look - at a somewhat more complex configuration file:
    -
    -<config>
    <component name="mySampleComponent" type="edu.cmu.sphinx.sample.MyComponent"/>
    <component name="anotherComponent" type="edu.cmu.sphinx.sample.MyComponent"/>
    <component name="aDifferentComponent" type="edu.cmu.sphinx.sample.YourComponent"/>
    </config> -
    This configuration file defines three components, two of the -type MyComponent , and one -with the type YourComponent. The two components with -the same types will result in two different instances of that -component being created.
    -
    - The data types  MyComponent and YourComponent are, of course, - fictional types.   Now lets look at a section from a - real configuration file.
    -
    -<config>
    -
    <component name="dct" type="edu.cmu.sphinx.frontend.transform.DiscreteCosineTransform"/> - <component name="batchCMN" type="edu.cmu.sphinx.frontend.feature.BatchCMN"/> - <component name="liveCMN" type="edu.cmu.sphinx.frontend.feature.LiveCMN"/> - <component name="featureExtraction" type="edu.cmu.sphinx.frontend.feature.DeltasFeatureExtractor"/> -
    </config>

    -
    Here we see some of the components used in the front end of -Sphinx4
    - -

    Defining configuration data

    So far, - we've shown how to define new components in the configuration - file. Now lets take a look at how we define the detailed - configuration data for a component. 
    -
    -
    -<config>

    <component name="concatDataSource" type="edu.cmu.sphinx.frontend.util.ConcatFileDataSource">
    <property name="sampleRate" value="16000"/>
    <property name="transcriptFile" value="reference.txt"/>
    <property name="silenceFile" value="/lab/speech/sphinx4/data/tidigits/test/raw16k/silence1sec.raw"/>
    <property name="bytesPerRead" value="320"/>
    <property name="batchFile" value="tidigits.batch"/>
    <property name="addRandomSilence" value="true"/>
    </component>

    </config> >
    -
    In Sphinx-4,  we call the configuration data for a -component  its properties.  Here, we are -defining six properties for the - concatDataSource component.  Properties are simple - name/value pairs and are set with the <property> statement - as shown above. 
    -
    - The properties that can be defined for a component vary based - upon the component type.  The API documentation for a - component includes a description of the set of properties, the - data type for each property, and the default value for each - property.  For example a description of the properties used - above can be found on the - ConcatFileDataSource page.
    -
    - If a property is omitted from the configuration file, the - component will usually provide a default value for the - property.
    -
    - -

    Configuration data types

    Sphinx-4 simple - properties can be of the following types:
    - -
      -
    • boolean - the value can be either "true" or "false"
    • - -
    • float - a single-precision floating point value
    • - -
    • double - a double-precision floating point value
    • - -
    • int - a 32 bit signed integer
    • - -
    • String - a sequence of characters
    • - -
    • Component - the name of a Sphinx-4 component (more on this - later)
    • -
    Here are some examples:
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -value="'Twas brillig and slithey toves"    
    -
    -
    string
    -
    -value="3.14"
    -
    -
    float
    -
    -value="1E-140"
    -
    -
    double
    -
    -value="16000"
    -
    -
    integer
    -
    -value="false"
    -
    -
    boolean
    -
    -value="beamPruner"
    -
    -
    component

    - In addition to these simple property types, there are two - list types:
    - -
      -
    • String list - a list of strings
    • - -
    • Component list  - a list of components
    • -
    Lists are defined in a propertylist element. Each item in a - list is defined with an item  element.  Here's an - example of how to define a property list of strings:
    -
    -
    -<component name="fileManager" type="edu.cmu.sphinx.sample.FileManager">
    <propertylist name="fileNames">
    <item>file1.txt</item>
    <item>file2.txt</item>
    <item>file3.txt</item>
    </propertylist>
    </component>
    -
    Property lists of components are defined similarly:
    -
    -    <component name="mfcLiveFrontEnd" type="edu.cmu.sphinx.frontend.FrontEnd">
    <propertylist name="pipeline">
    <item>concatDataSource </item>
    <item>speechClassifier </item>
    <item>speechMarker </item>
    <item>nonSpeechDataFilter </item>
    <item>preemphasizer </item>
    <item>windower </item>
    <item>fft </item>
    <item>melFilterBank </item>
    <item>dct </item>
    <item>liveCMN </item>
    <item>featureExtraction </item>
    </propertylist>
    </component>

    -
    - -

    Error Checking

    When a configuration file - is loaded, the configuration manager will check for certain - errors and abort the process if an error is detected.  Some - of the errors that are detected are:
    - -
      -
    • Invalid XML - the - file is not a valid XML file
    • - -
    • Unknown XML - elements  - there are unknown elements in the - file.
    • - -
    • Missing, extra or Unknown - XML attributes - an element has been given the wrong - number of attribute
    • - -
    • Multiply defined properties - -   a - property  for a component has been defined more than - once.
    • - -
    • Bad data type for a property - - a given value cannot be - converted to the declared type for a property
    • - -
    • Multiply defined components - - a component can be defined - only once
    • - -
    • Out-of-range-data for a - component - the given value for a component property is - out of the range.
    • -
    - -

    The Elements

    The following table details - the elements and attributes of the configuration file
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - Element
    - Attributes
    - Sub-elements
    - Description
    <config>
    none
    <component>
    - <property>
    - <propertylist>
    The top level element. It - has no attributes. It can have any number of the - component, - property and - propertylist sub-elements.
    - <component>
    name - the component name
    - type - the - component type
    <property>
    - <propertylist>
    Defines an instance of a - component. This element must always have the name and type attributes.
    - <property>
    name -  the property - name
    - value - the type of - the property
    None
    Used to define a single - property of a component or a global system property. This - element must always have the name and value attributes.
    - <propertylist>
    name  - the name of the - property list
    <item>
    Used to define a list of - strings or components. This element must always have the - name element. I - can have any number of item sub-elements.
    <item>
    none
    none
    contents of this element - define  a string or a component name.

    - -

    Global Properties

    You may have noticed - that properties can be defined out side of any component, at the - configuration level.  These are called global properties. Here's an example - of some global properties being defined.
    -
    -
    -<config>
    <property name="absoluteBeam" value="1000"/>
    <property name="relativeBeam" value="1E-10"/>
    </config>
    -

    - These global variables can then be used in the property - statements inside components.  A variable is referenced - using the syntax ${variableName}.  To reference the - variables defined in the previous example you would use - ${absoluteBeam} and ${relativeBeam}
    -
    - Here's an example of using global properties in a config - file:
    -
    -
    -<config>
    <property name="sampleRate" value="16000"/>

    <component name="concatDataSource" type="edu.cmu.sphinx.frontend.util.ConcatFileDataSource">
    <property name="sampleRate" value="${sampleRate}/>
    </component>

    <component name="microphone" type="edu.cmu.sphinx.frontend.util.Microphone">
    <property name="sampleRate" value="${sampleRate}/>
    </component>

    <component name="streamDataSource" type="edu.cmu.sphinx.frontend.util.StreamDataSource">
    <property name="sampleRate" value="${sampleRate}/>
    </component>

    </config> > -
    In this example we have three components, all of which need -to be configured with a sampleRate.  We could explicitly -use the value "16000" for -each of the sampleRate -properties, but if we decided to change the sample rate at a later -time, we would have to change it in three places.  Using a -global property allows us to have a single point where the sample -rate is defined. To change the sample rate, we only have to change -the single number. 
    -
    - Global properties are also useful to highlight important tunable - parameters. Often times in large configuration files, important - parameters that frequently need to be tuned for best results are - hidden deep down in the configuration file.  Using global - properties, these important, frequently tuned properties can be - highlighted.  Here's an example from the tidigits.config.xml file:
    -
    -
    -<config>        


    <!-- ******************************************************** -->
    <!-- frequently tuned properties -->
    <!-- ******************************************************** -->

    <property name="absoluteBeamWidth" value="-1"/>
    <property name="relativeBeamWidth" value="1E-200"/>
    <property name="wordInsertionProbability" value="1E-36"/>
    <property name="languageWeight" value="8"/>
    <property name="silenceInsertionProbability" value="1"/>
    <property name="skip" value="0"/>

    <!-- ******************************************************** -->
    <!-- Components -->
    <!-- ******************************************************** -->
    <component name="batch" type-"..." >
    ...
    </component>



    <!-- more omitted .... -->
    -

    - Global variables can be substituted for all property value  attributes. - They can also be used in propertylist item statements.  - For example,
    - here's a configuration of the FrontEnd pipeline that uses a - global property to set which cepstral mean normalizer to - use:
    -
    -
    -<config>
    <property name="cmn" value="liveCMN"/>

    <component name="mfcFrontEnd" type="edu.cmu.sphinx.frontend.FrontEnd">
    <propertylist name="pipeline">
    <item>streamDataSource</item>
    <item>preemphasizer</item>
    <item>windower</item>
    <item>fft</item>
    <item>melFilterBank</item>
    <item>dct</item>
    <item>${cmn}/item>
    <item>featureExtraction</item>
    </propertylist>
    </component>
    </config>

    -
    Note that you can not -substitute global variables for component names or types.  -Thus, this is illegal:
    -
    -
    -<config>
    <property name="cmn" value="liveCMN"/>
    <!-- illegal! -->
    <component name="${cmn}" type="edu.cmu.sphinx.frontend.CepstralMeanNormalizer">
    </component>
    </config> -
    - -

    Setting properties from the Java command - line

    Sometimes it is desirable to set component properties - from the java command line.  This is often done from an - ant build.xml file. This - allows a single configuration file be used to support multiple - tests.  The syntax for setting a component property from the - command line is:         - componentName[propertyName]=value.
    -
    - For example to set the sampleRate property for the microphone - from the command line, you would invoke Java like this:
    -
    -
    -java -Dmicrophone[sampleRate]=44100 edu.cmu.sphinx.tools.LiveModeRecognizer tidigits.config.xml tidigits.batch
    -
    The syntax for global properties is:      -globalProperty=value
    -
    - Here's an example of setting multiple properties, some global and - some component properties, from the command line:
    -
    -
    -java -Dmicrophone[sampleRate]=441000 -DabsoluteBeamWidth=2000 -DwordInsertionProbability=.01 \
    edu.cmu.sphinx.tools.LiveModeRecognizer tidigits.config.xml tidigits.batch -
    Of course, ant  -has its own syntax for setting such things. Here's an example of -setting properties from an ant build file:
    -
    -    <target name="tidigits_wordlist_live" description="Live mode TIDIGITS test.">
    <java classpath="${classes_dir}" classname="${live_main}"
    <sysproperty key="live[skip]" value="1"/>
    <sysproperty key="speedTracker[showResponseTime]" value="true"/>
    <sysproperty key="frontend" value="mfcLiveFrontEnd"/>
    <arg value="${config}"/>
    </java>
    </target>

    -
    Note that currently, it is not possible to set the value of -propertylist properties -from the command line.
    -
    - -

    Debugging your configuration

    Here - are some tips for developing a configuration and getting it to - work
    - -
      -
    • When a configuration has an error the configuration manager - will throw a PropertyException that details the cause of the - error. These exceptions are reported by all of the main - Sphinx-4 programs and utilities.  Use these messages to - debug problems with your configuration file.
    • - -
    • There is a special global property called showCreations.  If this - property is set to "true" the configuration manager will trace - the names of all components that are being created, as they are - being created. This can sometimes help track down missing or - extra components.:
      -
      - java -cp ../../../bld/classes -DshowCreations=true edu.cmu.sphinx.tools.batch.BatchModeRecognizer \
      tidigits.config.xml tidigits.batch
      Creating: batch
      Creating: connectedDigitsRecognizer
      Creating: digitsDecoder
      Creating: searchManager
      Creating: logMath
      Creating: flatLinguist
      Creating: wordListGrammar
      Creating: dictionary
      Creating: acousticModel
      Creating: sphinx3Loader
      Creating: trivialPruner
      Creating: threadedScorer
      Creating: mfcFrontEnd
      Creating: streamDataSource
      Creating: preemphasizer
      Creating: windower
      Creating: fft
      Creating: melFilterBank
      Creating: dct
      Creating: batchCMN
      Creating: featureExtraction
      Creating: activeList
      Creating: accuracyTracker
      Creating: speedTracker
      Creating: memoryTracker
      Creating: recognizerMonitor
      Creating: linguistStats


      -
      -
    • - -
    • There is a component called a ConfigMonitor that can be used to - help debug the configuration by showing the actual - configuration being used by the system.  Typically, the - configuration monitor is set up to show the configuration of - the system after the system has been completely initialized, - but before it starts performing recognition.  Here's some - example output:
      -
      -
      - ============ config ============= 
      fft:
      numberFftPoints = [DEFAULT]

      trivialPruner:

      searchManager:
      scorer = threadedScorer
      activeListFactory = activeList
      pruner = trivialPruner
      logMath = logMath
      growSkipInterval = [DEFAULT]
      showTokenCount = [DEFAULT]
      wantEntryPruning = [DEFAULT]
      linguist = flatLinguist
      relativeWordBeamWidth = [DEFAULT]

      wordRecognizer:
      decoder = decoder

      melFilterBank:
      numberFilters = [DEFAULT]
      maximumFrequency = [DEFAULT]
      minimumFrequency = [DEFAULT]

      threadedScorer:
      numThreads = 0
      scoreablesKeepFeature = true
      frontend = mfcFrontEnd
      isCpuRelative = true
      minScoreablesPerThread = 10

      preemphasizer:
      factor = [DEFAULT]

      memoryTracker:
      showDetails = [DEFAULT]
      showSummary = [DEFAULT]
      recognizer = wordRecognizer

      -
      -
    • -
    - -
    - Note that properties that are not explicitly defined in the - configuration file or as a system property from the command - line are shown as [DEFAULT]. This indicates that the internal - default for this value is being used.
    -
    -
    - -

    Full Example

    You can find full examples of Sphinx-4 - configuration file in sources. For example, check the file -
    sphinx4/src/apps/edu/cmu/sphinx/demo/transcriber/config.xml
    -
    -
    - Copyright 1999-2004 Carnegie Mellon University.
    - Portions Copyright 2002-2004 Sun Microsystems, Inc.
    - Portions Copyright 2002-2004 Mitsubishi Electric Research - Laboratories.
    - All Rights Reserved. Usage is subject to license terms - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/util/props/package.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/util/props/package.html deleted file mode 100755 index ef9bbf70..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/edu/cmu/sphinx/util/props/package.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - -Provides a mechanism for managing persistent configuration data. - -The configuration manager and the associated set of interfaces and classes -provides the following services: - -
      -
    • Loads configuration data from an XML-based configuration file. -
    • Manages the component life-cycle for Configurable objects -
    • Allows discovery of components via name or type. -
    -

    - For an overview of how to use this configuration management system to create - and configure components please see: Sphinx-4 Configuration - Management - -

    - For a description of how to create your own configurable components see: - {@link edu.cmu.sphinx.util.props.Configurable} - -

    - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/index.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/index.html deleted file mode 100755 index 9a6f335c..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/index.html +++ /dev/null @@ -1,135 +0,0 @@ - - - -Sphinx-4 - A speech recognizer written entirely in the - Java(TM) programming language - - - - - - - -

    General Information about Sphinx-4

    - -
      -
    • Introduction - -

      - Sphinx-4 is a state-of-the-art speech recognition system written - entirely in the JavaTM programming language. It was - created via a joint collaboration between the Sphinx group at - Carnegie Mellon University, Sun Microsystems Laboratories, - Mitsubishi Electric Research Labs (MERL), and Hewlett Packard (HP), - with contributions from the University of California at Santa Cruz - (UCSC) and the Massachusetts Institute of Technology (MIT). -

      - -

      Sphinx-4 started out as a port of Sphinx-3 to the Java - programming language, but evolved into a recognizer designed to be - much more flexible than Sphinx-3, thus becoming an excellent - platform for speech research.

    • - -
    • Capabilities - -

      Live mode and batch mode speech recognizers, capable of - recognizing discrete and continuous speech.

      - -

      Speech aligner for aligning speech to text.

      - -

      Various tools to work with the speech including the tools to - display spectograms, detect silence and extract features

    • - -
    • Performance - -

      Sphinx-4 is a very flexible system capable of performing many - different types of recognition tasks. As such, it is difficult to - characterize the performance and accuracy of Sphinx-4 with just a - few simple numbers such as speed and accuracy. Instead, we regularly - run regression tests on Sphinx-4 to determine how it performs under - a variety of tasks fro simple grammar recognition to large - vocabulary speech recognition

    • -
    - -

    Installation

    - - Required Software - -

    - Sphinx-4 has been built and tested on the Solaris TM - Operating Environment, Mac OS X, Linux and Win32 operating systems. - Running, building, and testing Sphinx-4 requires additional software. - Before you start, you will need the following software available on - your machine. -

    - -
      -
    • Java SE 6 Development Kit or better. Go to java.sun.com, and select "J2SE" from - popular downloads. At the time of writing, the latest release version - is JDK 6 Update 14, which is the one we recommend.
    • -
    - -
      -
    • Apache maven or better, available at maven.apache.org. The site has a - manual with instructions on how to download, install, and use ant. - You will only need ant if you wish to build Sphinx-4 from the source - distribution.
    • - -
    • Subversion (svn), but only if you want to interact - directly with the svn tree (which we recommend). The canonical places - to get it is subversion.tigris.org. - If you are using Windows, your best choice is to install cygwin, which will give you a linux-like - environment in a command prompt window. Make sure to choose "svn" - when you install cygwin.
    • -
    - -

    - Demos -

    - -

    Sphinx-4 contains a number of demo programs. You can find them - in sphinx4-samples package.

    - -
      - -
    • Transcriber - transcribe speech file
    • - -
    • Dialog - interact with the user commands
    • - -
    • Aligner - align speech to text
    • - -
    - -

    Sphinx-4 in Detail

    - -

    - Sphinx-4 Whitepaper Sphinx-4: A Flexible Open - Source Framework for Speech Recognition describes the framework and - implementation of Sphinx-4 from a speech-technologist's perspective. - Please read this if you'd like to extend Sphinx-4. -

    - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/overview.html b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/overview.html deleted file mode 100755 index e2a27ed9..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/javadoc/overview.html +++ /dev/null @@ -1,97 +0,0 @@ - -Sphinx-4 is a speech recognition system written entirely in the -Java(TM) programming language. - -

    - The diagram below shows the general architecture of Sphinx-4, followed by - a description of each block: - -

    -
    Figure 1: Architecture diagram of Sphinx-4. - -

    - - Recognizer - Contains the main components of - Sphinx-4, which are - the front end, the linguist, and the decoder. The application interacts - with the Sphinx-4 system mainly via the Recognizer. - -

    - Audio - The data to be decoded. This is audio in most systems, - but it can also be configured to accept other forms of data, - e.g., spectral or cepstral data. - - -

    - Front End - Performs digital signal processing (DSP) on - the incoming data. - - -

    - Feature - The output of the front end are features, - which are used for decoding in the rest of the system. - - -

    - Linguist - Embodies the linguistic knowledge of the - system, which are - the acoustic model, the dictionary, and the language model. - The linguist produces a search graph structure on which the search manager - performs search using different algorithms. - -

    - Acoustic Model - Contains a representation - (often statistical) of a sound, often created by training using lots of acoustic data. - -

    - Dictionary - Responsible for determining how - a words is pronounced. - -

    - Language Model - Contains a - representation (often statistical) of the probability of occurrence of words. - -

    - Search Graph - The graph structure produced by the - linguist according - to certain criteria (e.g., the grammar), using knowledge from the dictionary, - the acoustic model, and the language model. - - -

    - Decoder - Contains the search manager. - - -

    - Search Manager - Performs search using certain - algorithm used, e.g., - breadth-first search, best-first search, depth-first search, etc.. Also contains the feature scorer and the pruner. - - -

    - Active List - A list of tokens representing all - the states in the - search graph that are active in the current feature frame. - - -

    - Scorer - Scores the current feature frame - against all the active - states in the ActiveList. - - -

    - Pruner - Prunes the active list according to certain - strategies. - - -

    - Result - The decoded result, which usually contains the - N-best results. - - -

    - Configuration Manager - loads the Sphinx-4 - configuration data from an XML-based file, and manages the component life cycle for objects. - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/alignment/nums_cart.txt b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/alignment/nums_cart.txt deleted file mode 100755 index ffefae9c..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/alignment/nums_cart.txt +++ /dev/null @@ -1,109 +0,0 @@ -*** Cart dump created by cart_dump -*** Flite version: flite-1.1-release December 2001 -*** -*** Portions Copyright 2001,2002 Sun Microsystems, Inc. -*** Portions Copyright 1999-2001 Language Technologies Institute, -*** Carnegie Mellon University. -*** All Rights Reserved. Use is subject to license terms. -*** -*** See the file "license.terms" for information on usage and -*** redistribution of this file, and for a DISCLAIMER OF ALL -*** WARRANTIES. -TOTAL 97 -NODE num_digits < Float(3.800000) 56 -NODE p.token_pos_guess = String(month) 5 -NODE month_range = String(0) 4 -LEAF String(year) -LEAF String(ordinal) -NODE n.token_pos_guess = String(month) 9 -NODE month_range = String(0) 8 -LEAF String(cardinal) -LEAF String(ordinal) -NODE n.token_pos_guess = String(numeric) 19 -NODE num_digits < Float(2.000000) 16 -NODE p.token_pos_guess = String(numeric) 15 -NODE p.p.token_pos_guess = String(sym) 14 -LEAF String(digits) -LEAF String(cardinal) -LEAF String(cardinal) -NODE n.n.token_pos_guess = String(sym) 18 -LEAF String(cardinal) -LEAF String(digits) -NODE num_digits < Float(2.000000) 27 -NODE n.n.token_pos_guess = String(numeric) 26 -NODE n.token_pos_guess = String(sym) 25 -NODE month_range = String(0) 24 -LEAF String(digits) -LEAF String(cardinal) -LEAF String(cardinal) -LEAF String(cardinal) -NODE name < Float(302.299988) 35 -NODE p.token_pos_guess = String(flight) 30 -LEAF String(digits) -NODE n.token_pos_guess = String(sym) 34 -NODE p.token_pos_guess = String(sym) 33 -LEAF String(digits) -LEAF String(cardinal) -LEAF String(cardinal) -NODE p.token_pos_guess = String(a) 37 -LEAF String(digits) -NODE n.token_pos_guess = String(sym) 43 -NODE n.n.token_pos_guess = String(sym) 42 -NODE name < Float(669.200012) 41 -LEAF String(digits) -LEAF String(cardinal) -LEAF String(cardinal) -NODE name < Float(373.200012) 45 -LEAF String(cardinal) -NODE name < Float(436.200012) 49 -NODE name < Float(392.600006) 48 -LEAF String(digits) -LEAF String(cardinal) -NODE name < Float(716.500000) 51 -LEAF String(cardinal) -NODE name < Float(773.599976) 55 -NODE p.token_pos_guess = String(_other_) 54 -LEAF String(digits) -LEAF String(cardinal) -LEAF String(cardinal) -NODE p.token_pos_guess = String(numeric) 62 -NODE p.p.token_pos_guess = String(month) 59 -LEAF String(year) -NODE n.n.token_pos_guess = String(numeric) 61 -LEAF String(cardinal) -LEAF String(digits) -NODE n.n.token_pos_guess = String(numeric) 70 -NODE n.token_pos_guess = String(month) 65 -LEAF String(cardinal) -NODE n.token_pos_guess = String(numeric) 67 -LEAF String(digits) -NODE p.token_pos_guess = String(_other_) 69 -LEAF String(cardinal) -LEAF String(year) -NODE p.token_pos_guess = String(_other_) 80 -NODE num_digits < Float(4.400000) 77 -NODE name < Float(2959.600098) 76 -NODE name < Float(1773.400024) 75 -LEAF String(cardinal) -LEAF String(year) -LEAF String(cardinal) -NODE p.p.token_pos_guess = String(_other_) 79 -LEAF String(digits) -LEAF String(cardinal) -NODE n.token_pos_guess = String(to) 82 -LEAF String(year) -NODE p.token_pos_guess = String(sym) 88 -NODE p.p.token_pos_guess = String(sym) 85 -LEAF String(cardinal) -NODE num_digits < Float(4.600000) 87 -LEAF String(year) -LEAF String(digits) -NODE num_digits < Float(4.800000) 96 -NODE name < Float(2880.000000) 95 -NODE name < Float(1633.199951) 94 -NODE name < Float(1306.400024) 93 -LEAF String(cardinal) -LEAF String(year) -LEAF String(year) -LEAF String(cardinal) -LEAF String(cardinal) diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/alignment/prefix_fsm.txt b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/alignment/prefix_fsm.txt deleted file mode 100755 index 5789c3ca..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/alignment/prefix_fsm.txt +++ /dev/null @@ -1,16 +0,0 @@ -*** fsm dump created by fsm_dump -*** Flite version: flite-1.1-release December 2001 -*** -*** Portions Copyright 2001,2002 Sun Microsystems, Inc. -*** Portions Copyright 1999-2001 Language Technologies Institute, -*** Carnegie Mellon University. -*** All Rights Reserved. Use is subject to license terms. -*** -*** See the file "license.terms" for information on usage and -*** redistribution of this file, and for a DISCLAIMER OF ALL -*** WARRANTIES. -*** Dumped on Jan 18 2002 - -VOCAB_SIZE 128 -NUM_OF_TRANSITIONS 203 -TRANSITIONS 291 0 3064 3057 3322 3050 4470 4971 6004 7159 7654 8295 9328 10476 10995 13160 13938 14308 15458 16227 17102 17622 0 17622 0 3062 3063 3052 17779 3048 18020 3042 17622 0 3052 3058 17622 0 3050 3063 3052 3048 3058 3022 17622 0 3050 3062 3051 3063 18291 18664 19186 17622 0 3048 3058 17622 0 3050 3052 3058 17622 0 3050 3063 3052 3048 19186 3022 17622 0 3060 19558 3052 3059 4456 19186 3022 17622 0 3052 3048 17622 0 3057 19962 3050 3062 4459 20340 3063 3046 18023 20720 3052 21352 3058 21987 3022 17622 0 3063 3052 3059 3058 17622 0 3048 17622 0 3066 3050 3062 3063 3052 3048 3058 17622 0 3050 3052 3048 3058 17622 0 3066 3063 3052 4456 3058 17622 0 3058 22627 17622 0 0 24803 0 3058 0 24803 17622 0 3063 3058 17622 0 3066 17622 0 3052 17622 0 25059 17622 0 3058 17622 0 3052 3048 3058 17622 0 3052 3058 24803 17622 0 3052 25320 3058 17622 0 3057 3062 3051 3060 3063 3046 4455 13936 3052 3048 3058 3044 20322 4451 3022 17622 0 3048 0 3066 0 3063 3052 3058 3022 17622 0 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/alignment/suffix_fsm.txt b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/alignment/suffix_fsm.txt deleted file mode 100755 index 42663eed..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/alignment/suffix_fsm.txt +++ /dev/null @@ -1,16 +0,0 @@ -*** fsm dump created by fsm_dump -*** Flite version: flite-1.1-release December 2001 -*** -*** Portions Copyright 2001,2002 Sun Microsystems, Inc. -*** Portions Copyright 1999-2001 Language Technologies Institute, -*** Carnegie Mellon University. -*** All Rights Reserved. Use is subject to license terms. -*** -*** See the file "license.terms" for information on usage and -*** redistribution of this file, and for a DISCLAIMER OF ALL -*** WARRANTIES. -*** Dumped on Jan 18 2002 - -VOCAB_SIZE 128 -NUM_OF_TRANSITIONS 454 -TRANSITIONS 291 0 3050 3313 3830 4194 4986 6374 7288 8048 8936 3063 10467 11243 12532 14828 17127 18020 19187 21490 22350 23766 0 23766 0 3811 3022 23766 0 3058 23766 0 3042 3052 3058 3022 23766 0 3066 3046 23907 24564 3052 25444 25843 3058 3022 23766 0 26214 26992 27500 3058 3022 23766 0 3064 3052 3058 3022 23766 0 25840 3052 3059 3058 3022 23766 0 3042 27888 28515 3051 29428 27879 25828 31091 31602 3022 23766 0 3052 3059 3058 3022 23766 0 3066 3063 27875 3051 3052 31859 3058 3022 23766 0 3042 32762 33254 3064 27888 33896 3063 25827 3819 26996 34284 25831 34788 35443 27506 36686 23766 0 3050 3062 3042 37498 25840 37864 3063 38243 38507 39028 3820 25831 25828 39795 3058 3022 23766 0 3048 3052 25831 3058 27470 23766 0 3066 3048 3063 40172 3044 3058 3790 23766 0 3062 4194 3066 40678 41328 42216 3063 10467 43115 44148 46316 47207 47844 3827 48754 49358 23766 0 3062 3048 3060 3059 3058 23766 0 3050 3066 50536 3063 3052 3047 3059 3058 3790 23766 0 0 51066 3058 3022 23766 0 3060 3052 3059 3058 3790 23766 0 3066 23766 0 3022 23766 0 38256 3052 3058 3022 23766 0 3058 3022 23766 0 3048 23766 0 3052 3058 3022 23766 0 3828 3052 51315 3058 3022 23766 0 52342 52582 3064 3056 52968 3063 3052 38247 3044 3058 3790 23766 0 3052 3058 23766 0 3058 0 3062 3060 3052 3058 3022 23766 0 31604 3059 3058 0 3046 3052 3022 23766 0 53219 3047 0 3048 3058 23766 0 3052 3058 3790 23766 0 3810 3824 3051 3052 25831 3044 3058 53582 23766 0 54132 52580 3059 3058 23766 0 3060 3022 0 54371 23766 0 3022 0 3043 3058 3022 0 3060 3059 3058 3022 23766 0 3063 3059 0 3043 3058 23766 0 3046 27500 3058 23766 0 3056 3052 3059 3058 3022 23766 0 27888 3811 3051 54772 3047 23766 0 3063 26979 3052 3059 3058 3022 23766 0 3042 3066 3046 3064 27888 56168 3063 25827 3060 3052 3047 56548 3827 3058 3022 23766 0 3062 3048 3063 3052 3058 23766 0 3047 3058 3022 23766 0 3063 53612 3044 3058 56910 23766 0 3048 54131 3058 23766 0 50536 3063 3052 3047 3059 27506 3022 23766 0 3060 3047 23766 0 31603 0 57338 3051 57588 3052 3058 3022 23766 0 3052 0 3052 23766 0 3047 0 31603 23766 0 3063 3058 23766 0 3059 0 3059 23766 0 3046 3064 3056 3063 3052 38247 25828 3058 3022 23766 0 3043 3047 0 3058 3022 0 3063 23766 0 38260 0 3060 3058 3022 23766 0 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/api/default.config.xml b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/api/default.config.xml deleted file mode 100755 index 07f2a00f..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/api/default.config.xml +++ /dev/null @@ -1,335 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - speedTracker - memoryTracker - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - standardActiveListFactory - wordActiveListFactory - wordActiveListFactory - standardActiveListFactory - standardActiveListFactory - standardActiveListFactory - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - dataSource - dataBlocker - speechClassifier - speechMarker - preemphasizer - windower - fft - autoCepstrum - liveCMN - featureExtraction - featureTransform - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/jsgf/parser/jsgf.jj b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/jsgf/parser/jsgf.jj deleted file mode 100755 index 7b9aa855..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/jsgf/parser/jsgf.jj +++ /dev/null @@ -1,758 +0,0 @@ -/** - * Copyright 1998-2003 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ - -/** - * JavaCC grammar for parsing and creating grammars from JSGF files - * using JSAPI. - * - * This grammar can be compiled with JavaCC version 5.0, which is available at - * https://javacc.dev.java.net/ - */ - -options -{ - JAVA_UNICODE_ESCAPE = true; - STATIC = false; -} - -PARSER_BEGIN(JSGFParser) - -package edu.cmu.sphinx.jsgf.parser; - -import java.io.BufferedInputStream; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.io.StringReader; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.StringTokenizer; - -import edu.cmu.sphinx.jsgf.rule.*; -import edu.cmu.sphinx.jsgf.JSGFRuleGrammar; -import edu.cmu.sphinx.jsgf.JSGFRuleGrammarFactory; -import edu.cmu.sphinx.jsgf.JSGFRuleGrammarManager; -import edu.cmu.sphinx.jsgf.JSGFGrammarParseException; - -class JSGFEncoding { - public String version; - - public String encoding; - - public String locale; - - JSGFEncoding(String version, String encoding, String locale) { - this.version = version; - this.encoding = encoding; - this.locale = locale; - } -} - -public class JSGFParser { - // For now we create one global parser, if needed JavaCC can be set - // to allow the creation of multiple parser instances - // - static final String version = "1.0"; - - static JSGFParser parser = null; - - // This main method simply checks the syntax of a jsgf Grammar - // - public static void main(String[] args) { - if (args.length == 0) { - System.out.println("JSGF Parser Version " + version + ": Reading from standard input . . ."); - parser = new JSGFParser(System.in); - } - else if (args.length > 0) { - System.out.println("JSGF Parser Version " + version + ": Reading from file " + args[0] + " . . ."); - try { - URL codeBase = null; - File f = new File("."); - String path = f.getAbsolutePath() + "/" + args[0]; - try { - codeBase = new URL("file:" + path); - } catch (MalformedURLException e) { - System.out.println("Could not get URL for current directory " + e); - return; - } - BufferedInputStream i = new BufferedInputStream(codeBase.openStream(), 256); - JSGFEncoding encoding = getJSGFEncoding(i); - Reader rdr; - if ((encoding != null) && (encoding.encoding != null)) { - System.out.println("Grammar Character Encoding \"" + encoding.encoding + "\""); - rdr = new InputStreamReader(i, encoding.encoding); - } else { - if (encoding == null) System.out.println("WARNING: Grammar missing self identifying header"); - rdr = new InputStreamReader(i); - } - parser = new JSGFParser(rdr); - } catch (Exception e) { - System.out.println("JSGF Parser Version " + version + ": File " + args[0] + " not found."); - return; - } - } else { - System.out.println("JSGF Parser Version " + version + ": Usage is one of:"); - System.out.println(" java JSGFParser < inputfile"); - System.out.println("OR"); - System.out.println(" java JSGFParser inputfile"); - return; - } - try { - parser.GrammarUnit(new JSGFRuleGrammarFactory (new JSGFRuleGrammarManager())); - System.out.println("JSGF Parser Version " + version + ": JSGF Grammar parsed successfully."); - } catch (ParseException e) { - System.out.println("JSGF Parser Version " + version + ": Encountered errors during parse." + e.getMessage()); - } - } - - /** - * newGrammarFromJSGF - Once JavaCC supports Readers we will change this - */ - public static JSGFRuleGrammar newGrammarFromJSGF(InputStream i, JSGFRuleGrammarFactory factory) throws JSGFGrammarParseException - { - JSGFRuleGrammar grammar = null; - if (parser == null) { - parser = new JSGFParser(i); - } else { - parser.ReInit(i); - } - try { - grammar = parser.GrammarUnit(factory); - return grammar; - } catch (ParseException e) { - Token etoken = e.currentToken; - JSGFGrammarParseException ge = new JSGFGrammarParseException(etoken.beginLine, etoken.beginColumn, "Grammar Error", e.getMessage()); - throw ge; - } - } - - /** - * newGrammarFromJSGF - Once JavaCC supports Readers we will change this - */ - public static JSGFRuleGrammar newGrammarFromJSGF(Reader i, JSGFRuleGrammarFactory factory) throws JSGFGrammarParseException - { - JSGFRuleGrammar grammar = null; - if (parser == null) { - parser = new JSGFParser(i); - } else { - parser.ReInit(i); - } - try { - grammar = parser.GrammarUnit(factory); - return grammar; - } catch (ParseException e) { - Token etoken = e.currentToken; - JSGFGrammarParseException ge = new JSGFGrammarParseException(etoken.beginLine, etoken.beginColumn, "Grammar Error", e.getMessage()); - throw ge; - } - } - - private static JSGFEncoding getJSGFEncoding(BufferedInputStream is) { - int i = 0; - byte[] b = new byte[2]; - byte[] c = new byte[80]; - is.mark(256); - /* read 2 bytes */ - try { - if (is.read(b, 0, 2) != 2) { - is.reset(); - return null; - } - if ((b[0] == 0x23) && (b[1] == 0x4A)) { - // UTF-8 - i = 0; - c[i++] = b[0]; - c[i++] = b[1]; - while (i < 80) { - if (is.read(b, 0, 1) != 1) { - is.reset(); - return null; - } - if ((b[0] == 0x0A) || (b[0] == 0x0D)) break; - c[i++] = b[0]; - } - } else if ((b[0] == 0x23) && (b[1] == 0x00)) { - // UTF-16 BE - i = 0; - c[i++] = b[0]; - while (i < 80) { - if (is.read(b, 0, 2) != 2) { - is.reset(); - return null; - } - if (b[1] != 0) return null; - if ((b[0] == 0x0A) || (b[0] == 0x0D)) break; - c[i++] = b[0]; - } - } else if ((b[0] == 0x00) && (b[1] == 0x23)) { - // UTF-16 LE - i = 0; - c[i++] = b[1]; - while (i < 80) { - if (is.read(b, 0, 2) != 2) { - is.reset(); - return null; - } - if (b[0] != 0) return null; - if ((b[1] == 0x0A) || (b[1] == 0x0D)) break; - c[i++] = b[1]; - } - } - } - catch (IOException ioe) { - try { - is.reset(); - } catch (IOException ioe2) { - } - return null; - } - if (i == 0) { - try { - is.reset(); - } catch (IOException ioe2) { - } - return null; - } - // - // Now c[] should have first line of text in UTF-8 format - // - String estr = new String(c, 0, i); - StringTokenizer st = new StringTokenizer(estr, " \t\n\r\f;"); - String id = null; - String ver = null; - String enc = null; - String loc = null; - if (st.hasMoreTokens()) id = st.nextToken(); - if (!id.equals("#JSGF")) { - try { - is.reset(); - } catch (IOException ioe2) { - } - return null; - } - if (st.hasMoreTokens()) ver = st.nextToken(); - if (st.hasMoreTokens()) enc = st.nextToken(); - if (st.hasMoreTokens()) loc = st.nextToken(); - return new JSGFEncoding(ver, enc, loc); - } - - /** - * newGrammarFromURL - */ - public static JSGFRuleGrammar newGrammarFromJSGF(URL url, JSGFRuleGrammarFactory factory) throws JSGFGrammarParseException, IOException - { - Reader reader; - BufferedInputStream stream = new BufferedInputStream(url.openStream(), 256); - JSGFEncoding encoding = getJSGFEncoding(stream); - if ((encoding != null) && (encoding.encoding != null)) { - System.out.println("Grammar Character Encoding \"" + encoding.encoding + "\""); - reader = new InputStreamReader(stream, encoding.encoding); - } else { - if (encoding == null) System.out.println("WARNING: Grammar missing self identifying header"); - reader = new InputStreamReader(stream); - } - return newGrammarFromJSGF(reader, factory); - } - - /** - * ruleForJSGF - */ - public static JSGFRule ruleForJSGF(String text) { - JSGFRule r = null; - try { - StringReader sread = new StringReader(text); - if (parser == null) parser = new JSGFParser(sread); - else parser.ReInit(sread); - r = parser.alternatives(); - // System.out.println("JSGF Parser Version " + version - // + ": JSGF RHS parsed successfully."); - } catch (ParseException e) { - System.out.println("JSGF Parser Version " + version + ": Encountered errors during parse."); - } - return r; - } - - /** - * extract @keywords from documentation comments - */ - static void extractKeywords(JSGFRuleGrammar grammar, String rname, String comment) { - int i = 0; - while ((i = comment.indexOf("@example ", i) + 9) > 9) { - int j = Math.max(comment.indexOf('\r', i), comment.indexOf('\n', i)); - if (j < 0) { - j = comment.length(); - if (comment.endsWith(("*/"))) - j -= 2; - } - grammar.addSampleSentence(rname, comment.substring(i, j).trim()); - i = j + 1; - } - } -} - -PARSER_END(JSGFParser) - -/* WHITE SPACE */ -SKIP : -{ - " " -| "\t" -| "\n" -| "\r" -| "\f" -} - -/* COMMENTS */ -MORE : -{ - "//" : IN_SINGLE_LINE_COMMENT -| < "/**" ~[ "/" ] > - { - input_stream.backup(1); - } - : IN_FORMAL_COMMENT -| "/*" : IN_MULTI_LINE_COMMENT -} - -< IN_SINGLE_LINE_COMMENT > -SPECIAL_TOKEN : -{ - < SINGLE_LINE_COMMENT : (~["\n","\r"])* ("\n"|"\r"|"\r\n")? > : DEFAULT -} - -< IN_FORMAL_COMMENT > -SPECIAL_TOKEN : -{ - < FORMAL_COMMENT : "*/" > : DEFAULT -} - -< IN_MULTI_LINE_COMMENT > -SPECIAL_TOKEN : -{ - < MULTI_LINE_COMMENT : "*/" > : DEFAULT -} - -< IN_SINGLE_LINE_COMMENT, IN_FORMAL_COMMENT, IN_MULTI_LINE_COMMENT > -MORE : -{ - < ~[ ] > -} - -TOKEN : /* RESERVED WORDS AND LITERALS */ -{ - < GRAMMAR : "grammar" > -| < IMPORT : "import" > -| < PUBLIC : "public" > -} - -TOKEN : /* LITERALS */ -{ - < INTEGER_LITERAL : < DECIMAL_LITERAL > > -| < #DECIMAL_LITERAL : [ "0"-"9" ] ([ "0"-"9" ])* > -| < FLOATING_POINT_LITERAL : - ([ "0"-"9" ])+ "." ([ "0"-"9" ])* (< EXPONENT >)? ([ "f", "F", "d", "D" ])? - | "." ([ "0"-"9" ])+ (< EXPONENT >)? ([ "f", "F", "d", "D" ])? - | ([ "0"-"9" ])+ < EXPONENT > ([ "f", "F", "d", "D" ])? - | ([ "0"-"9" ])+ (< EXPONENT >)? [ "f", "F", "d", "D" ] > -| < #EXPONENT : [ "e", "E" ] ([ "+", "-" ])? ([ "0"-"9" ])+ > -| < CHARACTER_LITERAL : - "'" - ( - (~[ "'", "\\", "\n", "\r" ]) - | - ( - "\\" - ( - [ "n", "t", "b", "r", "f", "\\", "'", "\"" ] - | [ "0"-"7" ] ([ "0"-"7" ])? - | [ "0"-"3" ] [ "0"-"7" ] [ "0"-"7" ] - ) - ) - ) - "'" > -| < STRING_LITERAL : - "\"" - ( - (~[ "\"", "\\", "\n", "\r" ]) - | - ( - "\\" - ( - [ "n", "t", "b", "r", "f", "\\", "'", "\"" ] - | [ "0"-"7" ] ([ "0"-"7" ])? - | [ "0"-"3" ] [ "0"-"7" ] [ "0"-"7" ] - ) - ) - )* - "\"" > -| < TAG : - "{" - ( - (~[ "}" ]) - | - ( - "\\" - ( - [ "}", "n", "t", "b", "r", "f", "\\", "'", "\"" ] - | [ "0"-"7" ] ([ "0"-"7" ])? - | [ "0"-"3" ] [ "0"-"7" ] [ "0"-"7" ] - ) - ) - )* - "}" > -} - -TOKEN : /* IDENTIFIERS */ -{ - < IDENTIFIER : - ( - < LETTER > - | < DIGIT > - )+ > -| < #LETTER : [ "-", "'", ":", ",", "\\", "@", "#", "%", "!", "^", "&", "~", "\u0024", "\u0041"-"\u005a", "\u005f", "\u0061"-"\u007a", "\u00c0"-"\u00d6", "\u00d8"-"\u00f6", "\u00f8"-"\u00ff", "\u0100"-"\u1fff", "\u3040"-"\u318f", "\u3300"-"\u337f", "\u3400"-"\u3d2d", "\u4e00"-"\u9fff", "\uf900"-"\ufaff" ] > -| < #DIGIT : [ "\u0030"-"\u0039", "\u0660"-"\u0669", "\u06f0"-"\u06f9", "\u0966"-"\u096f", "\u09e6"-"\u09ef", "\u0a66"-"\u0a6f", "\u0ae6"-"\u0aef", "\u0b66"-"\u0b6f", "\u0be7"-"\u0bef", "\u0c66"-"\u0c6f", "\u0ce6"-"\u0cef", "\u0d66"-"\u0d6f", "\u0e50"-"\u0e59", "\u0ed0"-"\u0ed9", "\u1040"-"\u1049" ] > -} - -JSGFRuleGrammar GrammarUnit(JSGFRuleGrammarFactory factory) : -{ - JSGFRuleGrammar grammar = null; -} -{ - [ IdentHeader() ] grammar = GrammarDeclaration(factory) - ( - ImportDeclaration(grammar) - )* - ( - RuleDeclaration(grammar) - )* - < EOF > - { - return grammar; - } -} - -JSGFRuleGrammar GrammarDeclaration(JSGFRuleGrammarFactory factory) : -{ - String s; - JSGFRuleGrammar grammar = null; - Token t = null; -} -{ - t = < GRAMMAR > s = Name() ";" - { - grammar = factory.newGrammar (s); - if (grammar != null && t != null && t.specialToken != null) { - if (t.specialToken.image != null && t.specialToken.image.startsWith("/**")) { - JSGFRuleGrammar JG = (JSGFRuleGrammar) grammar; - JG.addGrammarDocComment(t.specialToken.image); - } - } - return grammar; - } -} - -void IdentHeader() : -{} -{ - // oops this should be "#JSGF" - < IDENTIFIER > "V1.0" - [ - < IDENTIFIER > [ < IDENTIFIER > ] - ] - ";" -} - -void ImportDeclaration(JSGFRuleGrammar grammar) : -{ - boolean all = false; - String name; - Token t = null; -} -{ - t = < IMPORT > "<" name = Name() - [ - "." "*" - { - all = true; - } - ] - ">" ";" - { - // import all rules if .* - if (all) name = name + ".*"; - JSGFRuleName r = new JSGFRuleName(name); - if (grammar != null) { - grammar.addImport(r); - if (grammar instanceof JSGFRuleGrammar && t != null && t.specialToken != null) { - if (t.specialToken.image != null && t.specialToken.image.startsWith("/**")) { - JSGFRuleGrammar JG = (JSGFRuleGrammar) grammar; - JG.addImportDocComment(r, t.specialToken.image); - } - } - } - } -} - -String Name() : -/* - * A lookahead of 2 is required below since "Name" can be followed - * by a ".*" when used in the context of an "ImportDeclaration". - */ -{ - Token t1, t2; - StringBuilder sb = new StringBuilder(); -} -{ - ( - t1 = < IDENTIFIER > - | t1 = < PUBLIC > - | t1 = < IMPORT > - | t1 = < GRAMMAR > - ) - { - sb.append(t1.image); - } - ( - LOOKAHEAD(2) - "." t2 = < IDENTIFIER > - { - sb.append('.'); - sb.append(t2.image); - } - )* - { - return sb.toString(); - } -} - -void RuleDeclaration(JSGFRuleGrammar grammar) : -{ - boolean pub = false; - String s; - JSGFRule r; - Token t = null; - Token t1 = null; -} -{ - [ - t = < PUBLIC > - { - pub = true; - } - ] - t1 = "<" s = ruleDef() ">" "=" r = alternatives() ";" - { - try { - if (grammar != null) { - grammar.setRule(s, r, pub); - String docComment = null; - if ((t != null) && (t.specialToken != null) && (t.specialToken.image != null)) docComment = t.specialToken.image; - else if ((t1 != null) && (t1.specialToken != null) && (t1.specialToken.image != null)) docComment = t1.specialToken.image; - if (docComment != null && docComment.startsWith("/**")) { - extractKeywords(grammar, s, docComment); - grammar.addRuleDocComment(s, docComment); - } - } - } catch (IllegalArgumentException e) { - System.out.println("ERROR SETTING JSGFRule " + s); - } - } -} - -JSGFRuleAlternatives alternatives() : -{ - ArrayList ruleList = new ArrayList(); - JSGFRule r; - float w; - ArrayListweights = new ArrayList(); -} -{ - ( - ( r = sequence() { ruleList.add(r); } ( "|" r = sequence() { ruleList.add(r); } )* ) - | - ( - w = weight() r = sequence() - { - ruleList.add(r); - weights.add(w); - } - ( - "|" w = weight() r = sequence() - { - ruleList.add(r); - weights.add(w); - } - )+ - ) - ) - { - JSGFRuleAlternatives ra = new JSGFRuleAlternatives(ruleList); - if (weights.size() > 0) { - ra.setWeights(weights); - } - return ra; - } -} - -String ruleDef() : -{ - Token t; -} -{ - ( - t = < IDENTIFIER > - | t = < INTEGER_LITERAL > - | t = < PUBLIC > - | t = < IMPORT > - | t = < GRAMMAR > - ) - { - return t.image; - } -} - -JSGFRuleSequence sequence() : -{ - JSGFRule JSGFRule; - ArrayList ruleList = new ArrayList(); -} -{ - ( - JSGFRule = item() - { - ruleList.add(JSGFRule); - } - )+ - { - return new JSGFRuleSequence(ruleList); - } -} - -float weight() : -{ - Token t; -} -{ - "/" ( t = < FLOATING_POINT_LITERAL > | t = < INTEGER_LITERAL > ) "/" - { - return Float.valueOf(t.image).floatValue(); - } -} - -JSGFRule item() : -{ - JSGFRule r; - ArrayList tags = null; - int count =-1; -} -{ - ( - ( - ( r = terminal() | r = ruleRef() ) - [ - "*" - { - count = JSGFRuleCount.ZERO_OR_MORE; - } - | "+" - { - count = JSGFRuleCount.ONCE_OR_MORE; - } - ] - [ tags = tags() ] - ) - | - ( - "(" r = alternatives() ")" - [ "*" { count = JSGFRuleCount.ZERO_OR_MORE; } | "+" { count = JSGFRuleCount.ONCE_OR_MORE; } ] - [ tags = tags() ] - ) - | - ( - "[" r = alternatives() "]" { count = JSGFRuleCount.OPTIONAL; } - [ tags = tags() ] - ) - ) - { - if (count != - 1) r = new JSGFRuleCount(r, count); - if (tags != null) { - for (String tag : tags) { - if (tag.charAt(0) == '{') { - tag = tag.substring(1, tag.length() - 1); - tag = tag.replace('\\', ' '); - } - r = new JSGFRuleTag(r, tag); - } - } - return r; - } -} - -ArrayList tags() : -{ - Token token; - ArrayList tags = new ArrayList(); -} -{ - ( token = < TAG > { tags.add(token.image); } )+ - { - return tags; - } -} - -JSGFRule terminal() : -{ - Token t; -} -{ - ( - t = < IDENTIFIER > - | t = < STRING_LITERAL > - | t = < INTEGER_LITERAL > - | t = < FLOATING_POINT_LITERAL > - | t = < PUBLIC > - | t = < IMPORT > - | t = < GRAMMAR > - ) - { - String tn = t.image; - if (tn.startsWith("\"") && tn.endsWith("\"")) tn = tn.substring(1, tn.length() - 1); - JSGFRuleToken rt = new JSGFRuleToken(tn); - return rt; - } -} - -JSGFRuleName ruleRef() : -{ - String s; -} -{ - ( "<" s = Name() ">" ) - { - JSGFRuleName rn = new JSGFRuleName(s); - return rn; - } -} - -JSGFRuleName importRef() : -{ - String s; - boolean all = false; -} -{ - ( "<" s = Name() [ "." "*" { all = true; } ] ">" ) - { - if (all) s = s + ".*"; - JSGFRuleName rn = new JSGFRuleName(s); - return rn; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/linguist/language/ngram/alphabet.arpaformat b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/linguist/language/ngram/alphabet.arpaformat deleted file mode 100755 index 282bf6aa..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/linguist/language/ngram/alphabet.arpaformat +++ /dev/null @@ -1,6867 +0,0 @@ -############################################################################ -## Copyright (c) 1996, Carnegie Mellon University, Cambridge University, -## Ronald Rosenfeld and Philip Clarkson -############################################################################# -============================================================================= -=============== This file was produced by the CMU-Cambridge =============== -=============== Statistical Language Modeling Toolkit =============== -============================================================================= -This is a 3-gram language model, based on a vocabulary of 26 words, - which begins "a", "b", "c"... -This is an OPEN-vocabulary model (type 1) - (OOVs were mapped to UNK, which is treated as any other vocabulary word) -Good-Turing discounting was applied. -1-gram frequency of frequency : 0 -2-gram frequency of frequency : 21 11 7 9 8 4 4 -3-gram frequency of frequency : 824 450 320 241 185 170 142 -1-gram discounting ratios : -2-gram discounting ratios : -3-gram discounting ratios : -This file is in the ARPA-standard format introduced by Doug Paul. - -p(wd3|wd1,wd2)= if(trigram exists) p_3(wd1,wd2,wd3) - else if(bigram w1,w2 exists) bo_wt_2(w1,w2)*p(wd3|wd2) - else p(wd3|w2) - -p(wd2|wd1)= if(bigram exists) p_2(wd1,wd2) - else bo_wt_1(wd1)*p_1(wd2) - -All probs and back-off weights (bo_wt) are given in log10 form. - -Data formats: - -Beginning of data mark: \data\ -ngram 1=nr # number of 1-grams -ngram 2=nr # number of 2-grams -ngram 3=nr # number of 3-grams - -\1-grams: -p_1 wd_1 bo_wt_1 -\2-grams: -p_2 wd_1 wd_2 bo_wt_2 -\3-grams: -p_3 wd_1 wd_2 wd_3 - -end of data mark: \end\ - -\data\ -ngram 1=27 -ngram 2=556 -ngram 3=6226 - -\1-grams: --99.0000 0.0000 --1.0948 a -99.9990 --1.8543 b -2.4583 --1.5435 c -1.4720 --1.3761 d -1.6391 --0.8934 e -99.9990 --1.6013 f -1.4144 --1.7301 g -1.1869 --1.2488 h -1.6671 --1.1708 i -99.9990 --2.9827 j -2.3668 --2.1567 k -1.5789 --1.3804 l -1.6348 --1.5905 m -1.4251 --1.1714 n -99.9990 --1.1136 o -99.9990 --1.7580 p -1.8271 --3.0182 q -2.4893 --1.2265 r -1.7885 --1.2050 s -1.7108 --1.0458 t -1.8699 --1.5021 u -1.0954 --1.9777 v -3.3293 --1.6086 w -1.3080 --2.6639 x -2.0766 --1.6901 y -1.2268 --3.2550 z -2.0017 - -\2-grams: --2.7068 a a -1.1162 --1.5278 a b -1.3977 --1.3853 a c -1.0799 --1.3042 a d 1.0231 --3.1839 a e -0.9701 --1.8260 a f -1.7788 --1.6386 a g -1.3684 --2.2648 a h -1.1407 --1.4231 a i -2.0239 --3.2297 a j -0.6596 --1.7185 a k -1.2539 --1.1008 a l 0.8154 --1.5419 a m -0.1836 --0.7217 a n -0.0538 --2.4357 a o -1.7710 --1.5770 a p -1.0196 --3.0700 a q 0.6726 --0.9652 a r -0.1664 --0.9270 a s 0.3397 --0.8618 a t 0.0656 --2.0750 a u -1.3660 --1.4471 a v -0.5493 --1.8796 a w -0.6463 --3.0870 a x -1.0319 --1.6306 a y 0.4343 --2.7947 a z -1.1362 --1.2189 b a -1.5967 --2.2354 b b -0.9813 --3.2496 b c -0.3819 --3.2496 b d -0.4151 --0.5012 b e -1.4151 --3.2496 b f -0.3961 --3.2496 b h -0.4093 --1.4988 b i -1.3038 --2.0933 b j -1.4492 --0.8280 b l -2.4651 --3.0278 b m -0.5539 --3.0278 b n -0.6078 --0.8730 b o -1.2987 --3.4257 b p -0.2493 --1.3101 b r -2.0528 --1.5744 b s -1.3280 --1.6195 b t -0.6893 --0.9801 b u -1.8920 --3.4257 b v -0.2504 --1.0621 b y 0.0799 --0.9381 c a -1.8580 --2.9954 c b -0.6275 --1.7125 c c -1.5461 --3.1337 c d -0.6542 --0.7252 c e -0.7589 --2.8907 c f -0.8877 --2.9576 c g -0.9134 --0.8365 c h 0.2857 --1.3740 c i -1.8149 --3.7358 c j -0.2989 --1.3404 c k -0.6502 --1.0903 c l -2.5128 --2.8327 c m -0.6814 --3.1337 c n -0.7790 --0.7622 c o -1.6307 --2.5597 c p -0.9483 --2.9954 c q 1.0462 --1.2909 c r -2.3112 --2.5183 c s -0.7185 --1.0811 c t -0.0553 --1.4468 c u -1.8538 --3.5597 c v -0.3746 --2.8607 c w -0.2515 --2.3647 c y -1.1541 --1.0351 d a -0.4900 --1.4510 d b -1.5955 --1.7790 d c -1.6486 --1.6195 d d -1.9761 --0.8197 d e -0.7844 --1.6264 d f -2.1825 --2.0249 d g -1.7714 --1.4747 d h -1.7959 --0.8757 d i -0.9911 --2.8059 d j -0.5571 --2.7267 d k -1.0136 --1.7430 d l -2.0273 --1.3483 d m -2.1054 --1.5879 d n -2.3422 --1.1139 d o -1.4340 --1.8796 d p -1.5703 --2.9028 d q 1.2636 --1.4937 d r -2.2192 --1.2140 d s -0.1949 --0.9714 d t -2.2792 --1.5644 d u -1.2399 --2.0278 d v -0.3370 --1.3465 d w -1.8966 --1.8182 d y -0.5594 --1.0060 e a 0.8048 --1.8719 e b -1.4139 --1.4085 e c -1.7723 --1.0036 e d 0.5213 --1.4152 e e -0.3910 --1.5998 e f -1.8290 --1.8157 e g -1.7008 --1.6857 e h -2.0704 --1.4713 e i -0.8814 --2.8868 e j 0.3278 --2.6447 e k -0.7421 --1.3307 e l -0.1973 --1.4504 e m -0.3920 --1.0512 e n -0.6245 --1.5278 e o -1.9552 --1.5969 e p 0.0347 --2.5927 e q -0.0059 --0.8575 e r 0.5247 --1.0161 e s 0.7047 --1.2362 e t -0.5289 --2.2193 e u -1.8743 --1.6455 e v -1.2015 --1.4185 e w -0.5968 --1.8562 e x -1.4492 --1.9942 e y -0.3453 --3.6447 e z -0.5080 --0.9605 f a 0.0349 --2.1159 f b -0.7060 --1.8521 f c -1.3509 --2.0654 f d -1.6012 --0.9757 f e -1.1479 --1.3367 f f -1.1462 --2.0871 f g -1.4987 --1.7050 f h -1.3904 --1.0088 f i -1.8723 --2.4740 f j -0.8786 --3.1341 f k -0.4485 --1.4541 f l -2.0622 --1.6175 f m -1.6116 --2.1939 f n -1.6303 --0.8380 f o -2.3316 --2.0298 f p -1.0461 --3.6782 f q 1.7865 --1.2173 f r -2.3302 --1.5305 f s -0.8855 --0.7191 f t -0.3597 --1.3664 f u -1.7719 --2.3071 f v 0.1670 --1.6156 f w -1.3973 --2.3357 f y -1.2500 --0.9349 g a -0.7277 --1.9643 g b -0.8922 --1.9423 g c -1.2300 --1.9643 g d -1.5739 --0.9044 g e -0.1354 --1.9477 g f -1.5081 --1.6281 g g -0.9825 --0.8166 g h -1.0064 --1.1003 g i -1.5383 --3.1519 g j -0.2794 --3.1519 g k -0.3072 --1.3914 g l -2.0506 --1.7141 g m -1.4380 --1.6386 g n -1.8066 --1.1160 g o -0.9624 --2.2074 g p -1.1061 --3.3737 g q 1.6104 --1.0494 g r -2.3697 --1.4599 g s -0.2738 --1.1390 g t -1.8607 --1.2015 g u -1.7173 --2.6467 g v -0.2634 --1.6360 g w -1.2541 --2.1976 g y -1.1026 --3.2488 g z -0.5653 --0.7388 h a -1.2008 --2.3866 h b -0.7871 --2.4016 h c -1.1532 --2.6321 h d -1.3726 --0.3643 h e 0.7193 --2.2976 h f -1.6385 --2.7183 h g -1.2261 --2.0856 h h -1.3618 --0.8400 h i -1.5370 --3.3768 h j -0.5144 --3.5529 h k -0.5029 --2.4737 h l -1.4237 --2.1379 h m -1.4252 --2.7870 h n -1.3812 --1.0770 h o -1.5106 --2.6068 h p -1.0521 --3.3768 h q 1.1333 --1.8511 h r -2.0208 --2.0569 h s -0.9296 --1.2753 h t -0.0271 --1.7247 h u -1.9712 --3.1550 h v 0.6630 --1.9029 h w -1.5035 --2.1297 h y -0.8279 --4.0300 h z -0.0375 --1.7606 i a -1.3151 --1.8146 i b -1.7718 --1.1343 i c 0.2850 --1.3162 i d 1.1111 --1.4294 i e -2.0171 --1.6426 i f -1.1834 --1.4368 i g -1.8981 --2.0234 i h -1.5814 --2.9940 i i -0.7552 --3.6308 i j -0.5144 --1.9526 i k -1.5589 --1.3173 i l 0.2048 --1.4155 i m 0.2183 --0.5970 i n -0.8660 --1.1992 i o -2.1616 --2.2271 i p -0.1443 --2.9466 i q 0.6251 --1.4962 i r 1.4406 --0.9038 i s 0.3925 --0.9055 i t -0.4168 --2.7755 i u -1.2126 --1.7616 i v -1.4665 --1.9940 i w -1.4904 --2.4899 i x -1.3635 --3.7100 i y -0.5652 --2.4177 i z -1.0920 --0.8967 j a -1.3627 --2.3032 j d -0.2297 --0.6597 j e -1.7376 --0.3974 j o -1.9825 --2.0022 j s -0.5142 --0.6265 j u -1.3134 --1.2089 k a -1.2438 --2.0646 k b -0.7595 --2.0646 k c -0.7516 --2.2802 k d -0.8613 --0.4551 k e -0.4187 --1.9492 k f -1.2455 --2.8243 k g -0.5615 --1.5938 k h -0.9727 --0.8386 k i -1.2311 --2.0646 k j -1.3028 --2.9492 k k -0.2181 --1.8823 k l -1.2376 --1.9078 k m -1.0426 --1.0064 k n -2.2929 --1.3545 k o -1.5752 --2.1476 k p -1.0584 --2.3472 k r -0.7154 --1.1275 k s -0.4413 --1.3191 k t -1.7214 --1.7731 k u -1.3930 --1.4919 k w -1.0099 --1.6940 k y -1.0631 --0.9845 l a -0.7514 --2.1168 l b -0.7417 --1.8794 l c -1.5439 --1.2196 l d -0.4389 --0.6869 l e 0.0943 --1.6210 l f 0.4975 --2.5094 l g -1.2785 --2.2084 l h -1.1315 --0.9850 l i -0.4958 --3.3545 l j -0.4052 --2.2965 l k -0.7555 --0.8749 l l 0.2728 --1.8794 l m -0.7881 --2.2753 l n -1.7692 --1.0186 l o -1.9961 --2.2453 l p -0.9389 --3.7225 l q 1.6104 --2.2502 l r -1.5344 --1.5032 l s -0.4422 --1.4407 l t -0.8494 --1.6630 l u -0.6914 --2.2084 l v -0.1522 --1.9467 l w -1.3282 --0.9947 l y 0.6858 --0.8041 m a -1.2033 --1.6320 m b -0.3033 --2.4714 m c -0.8400 --2.6889 m d -0.9747 --0.6318 m e 0.2488 --2.2117 m f -1.3832 --2.9485 m g -0.7840 --2.1448 m h -0.9853 --1.0323 m i -1.5678 --3.6889 m j -0.1839 --2.8438 m k -0.8508 --2.3367 m l -1.2196 --1.5902 m m -0.5681 --2.1638 m n -1.5102 --0.9085 m o -2.0681 --1.2110 m p -1.6852 --3.5128 m q 1.6104 --2.4714 m r -0.8820 --1.5817 m s -0.6133 --1.6377 m t -1.7234 --1.4661 m u -1.7929 --3.0868 m v -0.2548 --2.0031 m w -1.0260 --0.8188 m y 0.1175 --1.2280 n a -0.1104 --2.0945 n b -1.1030 --1.1779 n c -2.1342 --0.7770 n d 0.5725 --1.0283 n e 0.2269 --1.8978 n f -2.1156 --0.9517 n g -0.3048 --1.8096 n h -1.7390 --1.2862 n i -0.6910 --3.0282 n j 0.3789 --2.1831 n k -0.9357 --1.8297 n l -1.9498 --2.0053 n m -1.6678 --1.9884 n n -2.2040 --1.0192 n o -0.7556 --2.3402 n p -1.3022 --2.8521 n q 0.5312 --2.2911 n r -1.7046 --1.2211 n s -0.5759 --0.8101 n t 0.0905 --1.9032 n u -1.8785 --2.2944 n v 1.0114 --1.7289 n w -1.7187 --3.0282 n x -1.3252 --1.9046 n y -0.4582 --3.8063 n z -0.1851 --1.7402 o a -1.5689 --1.7949 o b -0.2869 --1.6702 o c -1.0834 --1.6627 o d -1.1462 --2.2357 o e -1.3629 --0.8626 o f -0.1014 --2.0315 o g -1.1781 --2.0613 o h -1.1672 --1.7795 o i -1.8515 --2.8641 o j -0.7613 --1.8460 o k -0.6851 --1.4652 o l -1.4225 --1.2137 o m -0.4386 --0.8462 o n -0.6095 --1.4888 o o -0.9824 --1.7671 o p -0.9095 --3.5119 o q 1.1333 --0.9451 o r 0.8323 --1.3990 o s -1.7787 --1.1844 o t 0.0480 --0.8440 o u -0.8227 --1.7501 o v -0.8769 --1.2719 o w 0.7776 --3.2620 o x -1.1086 --2.1257 o y -1.3430 --3.4247 o z -0.7778 --0.9496 p a -1.5106 --2.5676 p b -0.8107 --2.7089 p c -0.8385 --2.8686 p d -0.7404 --0.7000 p e -0.9267 --2.6468 p f -0.9387 --3.1239 p g -0.5153 --1.4373 p h -1.0212 --1.2352 p i -1.0294 --3.5219 p j -0.1839 --0.9981 p l -2.3912 --2.4427 p m -1.0716 --3.0447 p n -0.6870 --0.8343 p o -1.7832 --1.1471 p p -2.0322 --0.8207 p r -2.6384 --1.6298 p s -0.6286 --1.2901 p t -0.9651 --1.7157 p u -1.3525 --3.1239 p v 0.2054 --1.9840 p w -0.8781 --2.3177 p y -0.9107 --3.5219 p z -0.2643 --2.2636 q e -0.2557 --0.0036 q u -2.5227 --1.0113 r a -1.0332 --2.0031 r b -0.5680 --1.7189 r c -1.5215 --1.4049 r d -0.2359 --0.6055 r e -0.1408 --1.7910 r f -1.5156 --2.0070 r g -1.6584 --1.7793 r h -1.6654 --1.0334 r i -0.4673 --2.6812 r j 0.4550 --1.9879 r k 0.4588 --1.8455 r l -1.7059 --1.5694 r m -0.8193 --1.5810 r n -1.8546 --0.9695 r o 0.0823 --2.0169 r p -1.2960 --3.3991 r q 1.1333 --1.5759 r r -2.3343 --1.2923 r s -0.4497 --1.0827 r t -0.8087 --1.6579 r u -1.2734 --2.1306 r v 0.2658 --1.7416 r w -1.5853 --1.3371 r y 0.2724 --1.0484 s a -0.7165 --1.8270 s b -1.3369 --1.4273 s c -2.1049 --2.0464 s d -2.0158 --0.9351 s e 0.1673 --1.8173 s f -2.1575 --2.2642 s g -1.3039 --1.2431 s h 0.7223 --1.0278 s i -0.4431 --2.8307 s j 0.2151 --2.2045 s k -1.1295 --1.6723 s l -2.2688 --1.6630 s m -1.5964 --1.7505 s n -2.4535 --1.0011 s o -1.5933 --1.4905 s p -1.9809 --2.6344 s q 0.3472 --2.1006 s r -1.8559 --1.1099 s s 0.6328 --0.7337 s t 0.0477 --1.3748 s u -1.1472 --2.4303 s v -0.1054 --1.4293 s w -1.9847 --2.2779 s y -1.3304 --4.0737 s z -0.2971 --1.1960 t a -0.5519 --2.0553 t b -1.3212 --1.9824 t c -1.7752 --2.1342 t d -2.0871 --0.9842 t e -1.6516 --2.0685 t f -2.0704 --2.5252 t g -1.6220 --0.4755 t h -0.2044 --1.0053 t i -1.3937 --3.5796 t j -0.3277 --3.1359 t k -0.9561 --1.7514 t l -2.3102 --1.8749 t m -1.9180 --2.3297 t n -2.0412 --0.8977 t o -0.2492 --2.2983 t p -1.4695 --3.1025 t q 0.6562 --1.4819 t r -2.5357 --1.5156 t s -0.4069 --1.2861 t t -2.4151 --1.6101 t u -0.9886 --2.7856 t v 0.0909 --1.4762 t w -2.0969 --1.7682 t y -1.6451 --3.7557 t z -0.4274 --1.6632 u a -0.9679 --1.7126 u b -1.3236 --1.4804 u c -1.7789 --1.6436 u d -1.4367 --1.5206 u e -1.5063 --2.2586 u f -1.4096 --1.3809 u g -2.1402 --2.4653 u h -1.0815 --1.5123 u i -1.7924 --3.0367 u k -0.7824 --0.9699 u l 0.0500 --1.4367 u m -0.6686 --0.8202 u n -0.5738 --2.7559 u o -0.8765 --1.2733 u p 0.5409 --3.7771 u q 1.7865 --0.7691 u r 1.0443 --0.8570 u s 0.6765 --0.9082 u t -0.2696 --3.1750 u u -0.6954 --2.6632 u v -0.6710 --2.4761 u w -1.1511 --3.3792 u x -0.5797 --3.7771 u y -0.2545 --3.0367 u z -1.0025 --0.9993 v a -1.2699 --0.1490 v e 0.1535 --0.9581 v i -1.5936 --1.1825 v o -1.9343 --3.3015 v s -0.2603 --2.6025 v u -0.9508 --1.9493 v y -1.2050 --0.6289 w a -1.5929 --2.2906 w b -1.1567 --2.4534 w c -1.1557 --2.3384 w d -1.3209 --0.6265 w e -1.2917 --2.1725 w f -1.4044 --2.9719 w g -0.7285 --0.7251 w h -2.3630 --0.8694 w i -2.2623 --3.6708 w j -0.0788 --3.1268 w k -0.4174 --2.1865 w l -1.2758 --2.2010 w m -1.0874 --1.4547 w n -1.6186 --1.0639 w o -0.0100 --2.7958 w p -0.5461 --3.3698 w q 1.4855 --2.0225 w r -1.5856 --1.9633 w s -0.4683 --1.8135 w t -1.6953 --2.8579 w u -0.6735 --3.1937 w v 0.1625 --2.1206 w w -0.9267 --2.8927 w y -0.8915 --3.4948 w z -0.2136 --0.8717 x a -1.7416 --2.6238 x b -0.1365 --0.8914 x c -1.5653 --2.1466 x d -0.7434 --1.3566 x e -1.3399 --2.2258 x f -0.5735 --1.4334 x h -1.3070 --0.9248 x i -1.3080 --2.0797 x m -0.6458 --2.6238 x n -0.2574 --1.6238 x o -1.0165 --0.6325 x p -1.6577 --2.3227 x s -0.4671 --0.6348 x t -1.6286 --2.1466 x u -0.6253 --2.1466 x w -0.5124 --2.6238 x y -0.2959 --1.0197 y a -0.8409 --1.4007 y b -1.3291 --1.4876 y c -1.7246 --1.5328 y d -2.0453 --1.2014 y e -1.6789 --1.4529 y f -2.0391 --1.9269 y g -1.5521 --1.3938 y h -1.6132 --1.2327 y i -1.0891 --2.5685 y j 0.4369 --2.3466 y k -1.1430 --1.5623 y l -1.6782 --1.4405 y m -1.4577 --1.7032 y n -2.0246 --0.9413 y o -2.1597 --1.5385 y p -1.4489 --2.8907 y q 1.0875 --1.5542 y r -1.7333 --1.0358 y s -1.1467 --0.9931 y t -2.1572 --1.1583 y u -2.4590 --2.2279 y v 0.1763 --1.2552 y w -1.6748 --2.2572 y y -1.4586 --3.4136 y z -0.2136 --1.0911 z a -0.9075 --2.0453 z b -0.2530 --0.3420 z e -1.1857 --1.0911 z i -1.0512 --1.1159 z l -1.0698 --0.7666 z o -1.4963 --2.0453 z p -0.2551 --2.0453 z t -0.2423 --1.7443 z u -0.5211 --1.0676 z z -1.2042 - -\3-grams: --1.3010 a a b --1.7782 a a c --1.7782 a a g --1.1761 a a l --1.7782 a a m --0.3468 a a n --1.4771 a a p --1.1761 a a r --0.9331 a a s --0.8239 a a t --1.6147 a b a --2.4800 a b b --2.9571 a b d --1.6147 a b e --1.2329 a b i --2.9571 a b j --0.4020 a b l --2.6561 a b n --0.4561 a b o --1.4947 a b r --1.2411 a b s --1.8432 a b u --1.4658 a b y --1.7195 a c a --1.0544 a c c --0.6313 a c e --0.8164 a c h --1.3073 a c i --0.9891 a c k --1.4764 a c l --3.0997 a c m --1.3754 a c o --2.1454 a c q --1.5945 a c r --2.7987 a c s --0.6448 a c t --1.8692 a c u --2.4976 a c y --1.0908 a d a --1.2362 a d b --1.6009 a d c --1.3883 a d d --0.7759 a d e --1.6244 a d f --2.0668 a d g --1.6244 a d h --1.1200 a d i --2.2776 a d j --2.7036 a d k --1.5574 a d l --1.4248 a d m --1.2564 a d n --1.1637 a d o --1.9766 a d p --3.1807 a d q --1.4817 a d r --1.2616 a d s --1.2412 a d t --1.7828 a d u --1.2313 a d v --1.6366 a d w --1.3612 a d y --1.3010 a e c --1.3010 a e d --1.3010 a e h --1.0000 a e i --0.6990 a e l --1.3010 a e n --0.8239 a e o --1.0000 a e r --0.8239 a e v --1.3010 a e x --1.3165 a f a --0.9430 a f e --1.2440 a f f --1.3579 a f i --2.6590 a f j --1.6176 a f l --2.6590 a f n --1.6176 a f o --1.4037 a f r --0.1996 a f t --2.0569 a f u --2.6590 a f w --0.7636 a g a --2.8463 a g d --0.4501 a g e --2.8463 a g f --1.2336 a g g --2.3692 a g h --1.0075 a g i --1.7672 a g l --1.8463 a g m --1.3692 a g n --1.3278 a g o --1.1303 a g r --2.3692 a g s --2.8463 a g t --0.9830 a g u --2.8463 a g w --2.8463 a g y --0.5389 a h a --1.9191 a h c --0.8051 a h e --1.7430 a h h --1.5211 a h i --1.7430 a h m --0.8777 a h o --1.6180 a h r --1.9191 a h s --0.5299 a h u --2.2201 a h w --2.5847 a i a --3.0618 a i b --2.1587 a i c --0.6982 a i d --2.5847 a i e --2.4598 a i f --2.3629 a i g --3.0618 a i h --1.1428 a i l --1.8314 a i m --0.2910 a i n --0.9580 a i r --1.6305 a i s --1.3716 a i t --2.7608 a i v --3.0618 a i w --0.9542 a j a --0.9542 a j e --0.1413 a j o --1.7250 a k a --2.7664 a k c --2.4654 a k d --0.2654 a k e --1.6203 a k f --2.2893 a k h --0.6081 a k i --2.7664 a k k --2.7664 a k l --2.4654 a k m --1.0852 a k n --1.8633 a k o --1.8122 a k s --1.7664 a k t --2.4654 a k u --1.8633 a k w --2.4654 a k y --1.3467 a l a --2.0831 a l b --1.4447 a l c --1.8401 a l d --1.4811 a l e --1.4447 a l f --2.2081 a l g --1.9528 a l h --1.2110 a l i --2.6852 a l j --1.6283 a l k --0.3739 a l l --1.3086 a l m --2.5391 a l n --1.1387 a l o --1.8527 a l p --3.3842 a l q --1.7121 a l r --1.2506 a l s --1.3350 a l t --2.0224 a l u --2.3842 a l v --1.6518 a l w --2.5391 a l y --0.8899 a m a --1.3989 a m b --1.8291 a m c --2.0979 a m d --0.5005 a m e --2.1648 a m f --2.4659 a m g --2.6420 a m h --0.7816 a m i --2.4659 a m l --1.5280 a m m --1.8638 a m n --0.9474 a m o --1.2898 a m p --2.9430 a m q --2.0979 a m r --1.4115 a m s --2.0979 a m t --1.6877 a m u --2.3409 a m v --1.8638 a m w --2.0979 a m y --1.4890 a n a --2.1504 a n b --1.2649 a n c --0.3182 a n d --1.4890 a n e --2.4015 a n f --1.5031 a n g --1.9244 a n h --1.2021 a n i --3.2861 a n j --2.2317 a n k --2.7218 a n l --2.5328 a n m --1.8338 a n n --1.5537 a n o --2.8090 a n p --2.6171 a n q --2.4208 a n r --1.1721 a n s --1.0660 a n t --2.2581 a n u --2.9181 a n v --1.9639 a n w --2.4015 a n x --1.3318 a n y --1.7482 a o a --2.0492 a o d --0.3960 a o f --1.2711 a o n --0.3010 a o r --2.0492 a o s --1.3169 a p a --2.9079 a p b --2.9079 a p c --0.8868 a p e --2.6069 a p f --1.5857 a p h --0.9348 a p i --1.7940 a p l --1.0950 a p o --0.3987 a p p --1.4456 a p r --1.2745 a p s --1.0884 a p t --2.4308 a p u --2.4308 a p w --0.0170 a q u --1.2364 a r a --1.9756 a r b --1.4263 a r c --0.9610 a r d --0.7379 a r e --1.6808 a r f --1.7344 a r g --2.2892 a r h --1.3436 a r i --2.9176 a r j --1.3798 a r k --1.5420 a r l --1.4705 a r m --1.5607 a r n --1.4863 a r o --2.1580 a r p --1.3156 a r r --1.4298 a r s --0.7754 a r t --2.2892 a r u --1.8385 a r v --2.0883 a r w --1.2364 a r y --1.0694 a s a --1.7384 a s b --1.4341 a s c --1.9782 a s d --1.2337 a s e --1.6604 a s f --2.1963 a s g --1.4181 a s h --1.0202 a s i --3.2570 a s j --1.7255 a s k --1.6772 a s l --1.4027 a s m --1.4542 a s n --1.3705 a s o --1.5803 a s p --2.2358 a s q --1.9898 a s r --0.9358 a s s --0.6270 a s t --1.6185 a s u --2.2358 a s v --1.5088 a s w --1.8021 a s y --1.2429 a t a --2.0211 a t b --1.6500 a t c --1.7147 a t d --0.7201 a t e --1.9604 a t f --2.5440 a t g --1.0866 a t h --0.6382 a t i --3.6231 a t j --3.1460 a t k --1.5857 a t l --1.4500 a t m --2.1760 a t n --1.4356 a t o --1.9897 a t p --3.0211 a t q --1.9419 a t r --1.6231 a t s --0.8875 a t t --1.4500 a t u --2.5818 a t v --1.3030 a t w --2.2614 a t y --2.4099 a u c --1.3308 a u d --0.7197 a u g --2.4099 a u i --0.9950 a u l --1.8079 a u m --1.1795 a u n --2.1089 a u p --1.1547 a u r --0.4961 a u s --0.7765 a u t --2.4099 a u x --1.0884 a v a --0.1519 a v e --0.9140 a v i --1.2597 a v o --1.4468 a v y --0.4914 a w a --1.9063 a w b --2.3043 a w c --1.0371 a w e --0.9925 a w f --0.9241 a w h --1.2074 a w i --2.3043 a w k --1.5639 a w l --1.8272 a w m --1.3500 a w n --0.9619 a w o --2.3043 a w r --1.4914 a w s --1.5261 a w t --2.6053 a w v --1.9063 a w w --0.7959 a x a --1.3979 a x b --0.5528 a x e --0.7959 a x i --1.3979 a x n --1.0969 a x o --1.3979 a x s --1.3979 a x t --0.9208 a x w --0.9512 a y a --1.1553 a y b --1.7404 a y c --2.0762 a y d --1.3228 a y e --1.5756 a y f --2.5533 a y g --1.5119 a y h --1.0218 a y i --2.3772 a y j --2.8543 a y k --1.8543 a y l --1.6502 a y m --1.6782 a y n --1.0835 a y o --2.0092 a y p --2.8543 a y q --2.0762 a y r --0.7644 a y s --0.8129 a y t --2.0762 a y u --2.5533 a y v --1.1139 a y w --2.0762 a y y --1.6902 a z a --0.2588 a z e --0.6902 a z i --1.2131 a z u --0.8451 a z z --0.8644 b a b --0.5301 b a c --1.5536 b a d --2.5079 b a f --1.3037 b a g --2.2068 b a h --1.9058 b a i --2.5079 b a k --1.5079 b a l --1.0929 b a n --0.7919 b a r --1.1461 b a s --1.0455 b a t --1.5536 b a y --1.1903 b b a --0.5371 b b e --0.4914 b b i --0.7132 b b l --1.4914 b b n --1.1903 b b o --0.4771 b c h --0.4771 b c r --0.1761 b d i --1.0409 b e a --1.9468 b e b --1.0888 b e c --1.3563 b e d --0.8992 b e e --1.0495 b e f --1.0920 b e g --1.5921 b e h --1.1611 b e i --2.7484 b e k --1.0553 b e l --1.7071 b e m --1.3931 b e n --2.0214 b e o --2.0495 b e p --2.5266 b e q --1.2524 b e r --1.1537 b e s --1.2961 b e t --2.3805 b e u --2.4474 b e v --1.9951 b e w --1.8276 b e y --0.4771 b f a --0.4771 b f r --0.1761 b h i --1.9269 b i a --2.2279 b i c --2.2279 b i d --2.2279 b i e --2.2279 b i f --1.1139 b i g --0.7365 b i l --0.7807 b i n --1.9269 b i o --1.3828 b i r --1.1139 b i s --0.3954 b i t --1.0314 b j a --0.0537 b j e --1.5185 b l a --0.1177 b l e --1.1584 b l i --1.3305 b l o --2.0536 b l u --1.0925 b l y --0.6990 b m a --0.3979 b m i --0.6990 b m u --0.6990 b n e --0.2218 b n o --1.3096 b o a --2.8537 b o b --2.8537 b o c --1.1294 b o d --2.8537 b o e --2.8537 b o f --2.8537 b o g --1.6776 b o i --2.8537 b o k --1.8123 b o l --2.2516 b o m --1.2626 b o n --1.5113 b o o --1.3222 b o r --2.1547 b o s --1.0544 b o t --0.4387 b o u --1.0544 b o v --1.5113 b o w --2.0086 b o x --0.9845 b o y --0.3010 b p a --0.6313 b r a --0.6037 b r e --0.6924 b r i --0.5654 b r o --1.4166 b r u --1.8513 b s a --0.9218 b s c --0.5088 b s e --2.1523 b s g --1.8513 b s h --1.8513 b s i --2.1523 b s j --0.7051 b s o --2.1523 b s r --1.8513 b s s --0.6899 b s t --1.1109 b s u --2.1523 b s w --0.8519 b t a --0.4944 b t e --1.2041 b t f --1.5051 b t h --1.3291 b t i --0.8062 b t l --2.1072 b t m --1.8062 b t n --1.3291 b t o --2.1072 b t r --1.5051 b t s --0.9933 b t t --2.1072 b t u --2.1072 b t w --2.1072 b t y --2.2695 b u b --2.7466 b u c --2.4456 b u d --2.7466 b u f --2.7466 b u h --1.7052 b u i --2.0477 b u l --2.1446 b u n --2.7466 b u p --0.9015 b u r --1.6675 b u s --0.0983 b u t --2.7466 b u z --0.3010 b v i --0.8723 b y a --1.7616 b y b --1.6232 b y c --1.6646 b y d --2.0626 b y e --1.7616 b y f --1.6646 b y g --1.5507 b y h --1.6646 b y i --2.6646 b y j --2.6646 b y k --1.5855 b y l --1.0736 b y m --1.3029 b y n --1.7104 b y o --1.8195 b y p --1.4886 b y r --0.9925 b y s --0.5124 b y t --2.6646 b y u --2.6646 b y v --1.3222 b y w --1.9657 b y y --1.8199 c a b --2.3997 c a c --2.3997 c a d --3.0986 c a f --2.7976 c a g --3.0986 c a h --2.7976 c a k --0.6721 c a l --0.9494 c a m --0.7602 c a n --3.0986 c a o --1.2178 c a p --0.8108 c a r --1.0652 c a s --1.0858 c a t --1.2726 c a u --1.4652 c a v --3.0986 c a y --0.3424 c b a --1.0414 c b e --0.7404 c b o --0.7404 c b u --0.9626 c c a --2.3243 c c d --0.6253 c c e --1.8472 c c h --1.3243 c c i --2.3243 c c l --0.4730 c c o --1.5461 c c r --0.6711 c c u --0.9031 c d a --0.9031 c d e --0.6021 c d i --0.6021 c d r --0.9031 c d u --0.9977 c e a --1.9313 c e b --2.3115 c e c --1.0660 c e d --1.7095 c e e --1.9136 c e f --2.5334 c e g --1.6394 c e h --1.1943 c e i --3.0105 c e j --3.0105 c e k --0.9914 c e l --1.4855 c e m --0.8982 c e n --0.9977 c e o --1.7095 c e p --1.1240 c e r --1.0171 c e s --1.1943 c e t --2.3573 c e u --3.3115 c e v --1.3115 c e w --3.0105 c e x --2.7095 c e y --1.1461 c f a --1.1461 c f i --0.4472 c f l --0.4472 c f o --1.1461 c f r --0.7782 c g e --0.7782 c g l --0.4771 c g r --0.6021 c g u --0.7379 c h a --1.7853 c h b --1.6952 c h c --1.8781 c h d --0.7689 c h e --1.6818 c h f --1.8781 c h g --1.2865 c h h --0.8907 c h i --3.2003 c h j --1.8201 c h l --1.4222 c h m --1.9962 c h n --1.1750 c h o --1.9699 c h p --3.2003 c h q --1.5471 c h r --1.4010 c h s --1.0864 c h t --2.2003 c h u --2.5982 c h v --1.1248 c h w --2.2461 c h y --3.2003 c h z --1.3010 c i a --2.1856 c i b --0.9907 c i d --0.6805 c i e --1.8846 c i f --1.6214 c i l --1.4323 c i m --0.8919 c i n --1.0000 c i o --1.5488 c i p --1.0500 c i r --1.2156 c i s --0.8498 c i t --2.1856 c i v --2.6628 c i w --0.3010 c j d --0.9804 c k a --1.6172 c k b --2.0943 c k c --2.2192 c k d --0.9640 c k e --1.9974 c k f --2.6964 c k g --1.2814 c k h --0.9255 c k i --2.6964 c k k --1.4922 c k l --1.6550 c k m --1.5824 c k n --1.2340 c k o --2.6964 c k p --2.3953 c k r --0.7619 c k s --0.8970 c k t --1.6550 c k u --1.1649 c k w --1.5824 c k y --1.1076 c l a --0.1734 c l e --1.2563 c l i --0.8426 c l o --1.3030 c l u --2.9465 c l y --0.3010 c m a --0.7270 c m e --0.9031 c m o --1.2041 c m u --1.2041 c m y --0.3010 c n a --0.9031 c n e --0.6021 c n o --1.5756 c o a --3.2746 c o b --2.6726 c o c --2.2332 c o d --3.2746 c o f --2.2746 c o g --2.7975 c o h --2.0442 c o i --1.3015 c o l --0.6204 c o m --0.5528 c o n --1.6948 c o o --1.9322 c o p --1.3351 c o r --2.3204 c o s --2.4295 c o t --0.6736 c o u --1.1193 c o v --2.4965 c o w --3.2746 c o y --1.4771 c p a --0.8751 c p e --0.7782 c p h --1.4771 c p i --0.8751 c p o --0.3310 c p r --0.0414 c q u --0.8708 c r a --2.7459 c r c --0.6560 c r e --0.4626 c r i --0.9008 c r o --0.9465 c r u --1.2407 c r y --1.2175 c s a --1.0414 c s c --1.5185 c s e --0.6734 c s h --1.0414 c s i --1.5185 c s k --0.8195 c s o --1.5185 c s s --0.6734 c s t --1.5185 c s u --1.5185 c s w --1.1361 c t a --2.4786 c t b --1.9557 c t c --2.4786 c t d --0.8351 c t e --1.7252 c t f --2.4786 c t g --1.9557 c t h --0.5390 c t i --2.9557 c t k --1.1168 c t l --2.0526 c t m --2.1775 c t n --1.0063 c t o --2.1106 c t p --1.3536 c t r --1.2567 c t s --1.3646 c t t --1.1998 c t u --2.1775 c t v --1.5940 c t w --2.6547 c t y --1.5899 c u i --0.3858 c u l --0.8418 c u m --2.1128 c u n --2.5899 c u o --1.3347 c u p --0.6761 c u r --1.0217 c u s --1.4139 c u t --2.5899 c u u --1.8910 c u v --0.4771 c v a --0.4771 c v i --0.3310 c w a --0.8751 c w e --1.1761 c w h --1.1761 c w i --0.6990 c w o --0.6721 c y a --1.0700 c y c --1.6721 c y d --1.6721 c y e --1.6721 c y f --1.1950 c y h --1.0700 c y i --1.3711 c y l --1.6721 c y m --0.8270 c y o --1.6721 c y p --1.6721 c y r --0.7179 c y t --1.6721 c y y --2.8678 d a a --1.4528 d a b --1.6636 d a c --1.8678 d a d --1.6636 d a f --1.4967 d a g --1.8900 d a h --2.0227 d a i --2.3237 d a k --1.1911 d a l --1.5890 d a m --0.5323 d a n --2.8678 d a o --1.6373 d a p --2.6917 d a q --1.1235 d a r --1.0515 d a s --1.0044 d a t --2.4698 d a u --2.0548 d a v --1.6125 d a w --0.8788 d a y --2.3237 d a z --1.8497 d b a --0.3584 d b e --2.2757 d b i --1.6067 d b l --1.3215 d b o --1.4741 d b r --1.0538 d b u --0.4606 d b y --0.6053 d c a --1.0632 d c e --1.1027 d c h --2.4249 d c i --1.2208 d c l --0.3996 d c o --1.0447 d c r --1.5218 d c u --1.1694 d d a --0.3148 d d e --0.6867 d d i --1.8062 d d l --0.9031 d d o --1.3539 d d r --2.5843 d d s --2.2833 d d t --1.3802 d d u --2.5843 d d v --2.5843 d d w --0.9897 d e a --2.2081 d e b --1.5329 d e c --1.0477 d e d --1.5209 d e e --1.7821 d e f --1.7407 d e g --1.9862 d e h --1.8401 d e i --2.7821 d e j --1.4548 d e l --1.8279 d e m --0.9496 d e n --1.5209 d e o --1.4397 d e p --2.7821 d e q --0.6749 d e r --0.9339 d e s --1.3671 d e t --2.0224 d e u --1.4397 d e v --2.0418 d e w --1.6599 d e x --2.5391 d e y --1.0334 d f a --0.8293 d f e --0.8293 d f i --1.3222 d f l --0.4771 d f o --0.7024 d f r --1.5361 d f u --1.2247 d g a --0.5069 d g e --0.9002 d g i --0.9485 d g l --1.8779 d g m --0.7166 d g o --0.8172 d g r --1.5769 d g u --0.4573 d h a --0.6254 d h e --0.5830 d h i --0.9298 d h o --2.7292 d h r --1.5250 d h u --2.7292 d h y --1.5288 d i a --1.7967 d i b --1.2043 d i c --1.1003 d i d --1.7484 d i e --1.2348 d i f --1.9132 d i g --1.7719 d i h --2.3739 d i i --3.0271 d i j --2.5500 d i k --1.6122 d i l --1.5958 d i m --0.5588 d i n --2.0729 d i o --2.2868 d i p --1.4305 d i r --0.7461 d i s --0.9355 d i t --2.7261 d i u --2.2490 d i v --1.7261 d i w --3.3282 d i z --1.0969 d j e --0.4437 d j o --0.2840 d j u --1.4771 d k a --0.5229 d k e --0.8751 d k i --0.3010 d k n --1.0630 d l a --0.5315 d l e --0.7449 d l i --0.9046 d l o --1.9838 d l u --0.5214 d l y --0.8870 d m a --2.8555 d m b --0.7517 d m e --1.9013 d m f --1.1073 d m i --1.0294 d m o --1.7094 d m u --0.3127 d m y --1.5368 d n a --0.7183 d n e --1.7129 d n i --0.1260 d n o --2.3149 d n t --2.3149 d n u --2.3118 d o a --1.9760 d o b --1.5985 d o c --1.5458 d o e --0.6245 d o f --2.4878 d o g --2.7889 d o h --1.5985 d o i --3.0899 d o j --3.0899 d o k --2.0899 d o l --1.9138 d o m --0.7377 d o n --1.7097 d o o --2.0899 d o p --1.5714 d o r --2.1357 d o s --1.8858 d o t --0.7656 d o u --1.6128 d o v --0.8298 d o w --3.0899 d o x --1.4878 d o y --2.2448 d o z --0.9441 d p a --0.9093 d p e --1.4212 d p h --1.2103 d p i --0.9093 d p l --0.8619 d p o --0.4854 d p r --1.1482 d p u --1.3010 d q e --0.0458 d q u --0.8650 d r a --0.2869 d r e --0.9467 d r i --2.7101 d r k --2.7101 d r m --0.7910 d r o --2.7101 d r r --1.4548 d r u --1.5340 d r y --0.9330 d s a --1.8760 d s b --1.3564 d s c --2.6889 d s d --1.0761 d s e --1.9485 d s f --2.9899 d s g --1.1704 d s h --1.1091 d s i --2.5128 d s k --1.5920 d s l --1.7111 d s m --1.8138 d s n --0.8500 d s o --1.4458 d s p --2.9899 d s q --2.0357 d s r --1.9485 d s s --0.7493 d s t --1.0554 d s u --2.9899 d s v --1.2909 d s w --2.9899 d s y --1.7273 d t a --1.8523 d t e --0.2408 d t h --1.9772 d t i --0.4646 d t o --1.7273 d t r --3.2325 d t t --2.1911 d t u --3.2325 d t v --1.9315 d t w --3.2325 d t y --1.4934 d u a --2.6395 d u b --0.7822 d u c --2.0374 d u e --1.7364 d u g --2.6395 d u i --1.2081 d u l --2.1624 d u m --0.8199 d u n --2.6395 d u o --0.7152 d u p --0.7822 d u r --0.8134 d u s --1.4934 d u t --2.6395 d u u --0.2840 d v a --0.4771 d v e --1.0300 d v i --1.3310 d v o --0.8159 d w a --0.6871 d w e --0.6960 d w h --0.4244 d w i --1.2891 d w o --1.9542 d w r --0.9706 d y a --1.3064 d y b --1.9085 d y c --2.3856 d y d --0.6613 d y e --1.6866 d y f --1.9085 d y g --1.7835 d y h --1.3856 d y i --2.0846 d y l --1.6866 d y m --1.9085 d y n --0.6148 d y o --1.9085 d y p --1.6075 d y r --1.6075 d y s --0.9877 d y t --2.3856 d y u --1.2717 d y w --2.0846 d y y --2.2488 e a a --1.5662 e a b --1.3397 e a c --1.1411 e a d --2.9812 e a e --1.8606 e a f --1.5798 e a g --2.3184 e a h --2.0367 e a i --3.6802 e a j --1.6157 e a k --1.2520 e a l --1.5764 e a m --0.8186 e a n --2.2030 e a o --1.7117 e a p --3.6802 e a q --0.6528 e a r --0.9734 e a s --0.9035 e a t --2.0367 e a u --1.5466 e a v --1.7771 e a w --3.3791 e a x --3.2030 e a y --3.6802 e a z --0.9817 e b a --2.2122 e b b --0.4043 e b e --1.7003 e b i --1.4163 e b l --0.7889 e b o --1.1910 e b r --2.8142 e b t --0.8797 e b u --1.1241 e b y --0.8544 e c a --1.0011 e c e --1.3045 e c h --1.2402 e c i --3.2776 e c j --1.7213 e c k --1.4581 e c l --0.5946 e c o --1.1570 e c r --2.9766 e c s --0.6055 e c t --1.6544 e c u --2.4995 e c y --0.8929 e d a --1.2777 e d b --1.9343 e d c --1.9191 e d d --1.3114 e d e --1.4624 e d f --2.1027 e d g --1.3992 e d h --0.8696 e d i --3.2054 e d j --2.7794 e d k --1.7582 e d l --1.1073 e d m --1.8763 e d n --1.1814 e d o --2.0104 e d p --2.6825 e d q --1.8133 e d r --1.5522 e d s --0.7216 e d t --1.4297 e d u --2.2511 e d v --1.2479 e d w --2.1027 e d y --0.9345 e e a --2.1917 e e b --1.8907 e e c --1.2027 e e d --2.9699 e e e --1.8559 e e f --2.9699 e e g --1.7524 e e h --1.5150 e e i --1.8559 e e k --1.3071 e e l --1.3624 e e m --0.6275 e e n --2.0405 e e o --1.1066 e e p --2.7938 e e q --1.7394 e e r --1.3901 e e s --0.9899 e e t --2.5719 e e u --1.4448 e e v --1.7658 e e w --1.1006 e e x --2.2709 e e y --2.4258 e e z --0.8932 e f a --3.0864 e f c --3.0864 e f d --1.1943 e f e --1.1132 e f f --3.0864 e f h --0.8768 e f i --2.1321 e f j --1.1833 e f l --3.0864 e f n --0.4898 e f o --1.0996 e f r --2.7853 e f s --1.3382 e f t --1.1673 e f u --2.7853 e f w --3.0864 e f y --0.6224 e g a --2.8704 e g b --1.1714 e g e --1.9162 e g g --2.8704 e g h --0.9114 e g i --1.3141 e g l --2.2683 e g m --2.3933 e g n --1.0253 e g o --0.5503 e g r --1.7912 e g s --2.2683 e g t --1.0131 e g u --2.5694 e g y --0.3540 e h a --0.7016 e h e --0.9213 e h i --0.7830 e h o --1.1744 e h u --2.5233 e h v --3.0004 e h w --2.6994 e h y --1.8531 e i a --2.0107 e i b --1.3284 e i c --1.4514 e i d --2.3697 e i e --1.6963 e i f --1.1814 e i g --1.6834 e i h --2.9138 e i i --2.6128 e i k --1.7835 e i l --1.3575 e i m --0.4628 e i n --2.6128 e i o --2.5159 e i p --1.2020 e i r --0.9596 e i s --0.8844 e i t --3.2148 e i u --1.5246 e i v --1.5159 e i w --3.2148 e i y --2.4367 e i z --0.8451 e j a --1.3222 e j e --0.2679 e j o --1.4983 e j s --0.6532 e j u --1.2632 e k a --1.7404 e k b --2.0414 e k d --0.6264 e k e --1.7404 e k f --2.0414 e k h --0.5790 e k i --2.0414 e k m --0.7861 e k n --1.0872 e k o --2.0414 e k p --2.0414 e k r --1.1963 e k s --1.7404 e k t --1.7404 e k w --2.0414 e k y --0.8976 e l a --2.3141 e l b --2.2093 e l c --1.6742 e l d --0.9273 e l e --0.9862 e l f --3.3555 e l g --2.5104 e l h --0.8901 e l i --3.0544 e l k --0.8126 e l l --2.2415 e l m --2.8783 e l n --1.0676 e l o --2.0130 e l p --3.0544 e l r --1.2415 e l s --1.4578 e l t --1.9937 e l u --1.5493 e l v --2.2093 e l w --1.0353 e l y --0.6074 e m a --1.4876 e m b --3.2358 e m c --2.6337 e m d --0.7543 e m e --2.6337 e m f --3.2358 e m g --2.4576 e m h --1.0344 e m i --2.9348 e m k --2.6337 e m l --1.5826 e m m --2.1218 e m n --0.6980 e m o --1.2864 e m p --3.2358 e m r --1.7886 e m s --1.9348 e m t --1.3969 e m u --2.2358 e m w --1.1054 e m y --1.2440 e n a --1.9722 e n b --1.0823 e n c --1.1408 e n d --1.1381 e n e --1.9818 e n f --1.6264 e n g --1.7374 e n h --1.2405 e n i --2.5936 e n j --3.0329 e n k --1.6573 e n l --1.8288 e n m --2.3562 e n n --0.9510 e n o --2.2548 e n p --3.3340 e n q --1.9537 e n r --1.2530 e n s --0.4889 e n t --1.9818 e n u --2.4589 e n v --1.6221 e n w --2.6807 e n y --3.3340 e n z --3.1584 e o a --1.6812 e o b --1.5149 e o c --3.1584 e o d --0.2891 e o f --2.6812 e o g --3.1584 e o h --3.1584 e o i --1.4424 e o l --2.5563 e o m --0.9104 e o n --1.4863 e o p --1.2393 e o r --2.6812 e o s --1.3875 e o t --0.9765 e o u --1.6143 e o v --2.3802 e o w --0.8267 e p a --2.4871 e p b --2.3110 e p c --2.4871 e p d --1.1497 e p e --2.6121 e p f --3.0892 e p g --1.3410 e p h --1.4080 e p i --0.7817 e p l --2.3110 e p m --2.7882 e p n --0.9993 e p o --2.6121 e p p --0.6164 e p r --1.5329 e p s --1.0173 e p t --1.5978 e p u --2.7882 e p v --2.1350 e p w --2.3902 e p y --0.0035 e q u --1.0164 e r a --1.8792 e r b --1.7113 e r c --1.8555 e r d --0.6422 e r e --1.6299 e r f --2.0293 e r g --1.5544 e r h --1.0404 e r i --3.1296 e r j --2.7147 e r k --1.8374 e r l --1.6033 e r m --1.5806 e r n --1.2409 e r o --1.9961 e r p --3.3515 e r q --1.5064 e r r --1.1101 e r s --1.0117 e r t --1.8330 e r u --1.8601 e r v --1.5084 e r w --1.1236 e r y --1.0615 e s a --1.9458 e s b --1.4005 e s c --2.1260 e s d --1.0026 e s e --1.9219 e s f --2.5561 e s g --1.2214 e s h --1.0869 e s i --3.6701 e s j --2.2387 e s k --1.8127 e s l --1.8639 e s m --1.8847 e s n --0.9702 e s o --1.4605 e s p --2.8919 e s q --2.3478 e s r --0.8151 e s s --0.8002 e s t --1.3027 e s u --3.0680 e s v --1.4714 e s w --2.1787 e s y --3.6701 e s z --1.3818 e t a --2.2195 e t b --1.7096 e t c --2.6718 e t d --1.1340 e t e --2.3360 e t f --2.8479 e t g --0.4058 e t h --1.2768 e t i --2.0520 e t l --2.3708 e t m --2.4957 e t n --0.6873 e t o --3.4499 e t p --3.1489 e t q --1.3101 e t r --1.9185 e t s --1.4371 e t t --1.3818 e t u --3.4499 e t v --1.4587 e t w --2.0882 e t y --2.1658 e u c --2.4669 e u e --2.1658 e u h --1.4255 e u m --0.5478 e u n --2.4669 e u o --0.5531 e u p --1.3877 e u r --0.5976 e u s --1.1051 e u t --2.4669 e u v --1.2277 e v a --0.1041 e v e --1.1773 e v i --1.0629 e v o --0.5974 e w a --2.9666 e w b --2.4895 e w c --2.3646 e w d --0.5909 e w e --2.6656 e w f --2.9666 e w g --0.7478 e w h --0.9116 e w i --3.2676 e w k --2.6656 e w l --1.9252 e w m --2.4225 e w n --0.9601 e w o --2.6656 e w p --1.8052 e w r --2.0915 e w s --1.9889 e w t --2.9666 e w v --1.9889 e w w --2.9666 e w y --3.2676 e w z --0.7965 e x a --0.8006 e x c --1.8299 e x e --1.4497 e x h --1.0376 e x i --2.5289 e x o --0.5444 e x p --0.6072 e x t --2.5289 e x u --1.1009 e y a --1.7377 e y b --1.6506 e y c --2.2148 e y d --0.6389 e y e --1.9930 e y f --2.0899 e y g --1.4878 e y h --1.2940 e y i --1.3697 e y k --1.9138 e y l --1.6920 e y m --2.0899 e y n --0.6626 e y o --2.2148 e y p --1.7889 e y r --1.2296 e y s --1.2940 e y t --2.0899 e y u --2.6920 e y v --1.0199 e y w --2.6920 e y y --0.1383 e z e --1.0414 e z i --1.0414 e z o --3.0187 f a a --1.6763 f a b --0.7006 f a c --1.6763 f a d --2.7177 f a e --1.7399 f a f --1.7177 f a g --2.0187 f a h --1.2553 f a i --3.0187 f a j --2.4166 f a k --0.9253 f a l --1.3752 f a m --0.8820 f a n --3.0187 f a o --1.8146 f a p --0.8948 f a r --1.1436 f a s --1.0144 f a t --2.1156 f a u --1.6385 f a v --2.1736 f a w --2.5416 f a x --2.7177 f a y --3.0187 f a z --0.8633 f b a --0.5623 f b e --1.3862 f b i --1.1644 f b l --0.7841 f b o --0.8219 f b r --1.0182 f b u --1.2613 f b y --0.8967 f c a --1.2820 f c e --1.5250 f c h --1.3490 f c i --1.4281 f c l --0.2080 f c o --1.2240 f c r --1.6500 f c u --0.7097 f d a --0.3575 f d e --0.7677 f d i --1.3118 f d o --1.0107 f d r --1.4367 f d u --0.9700 f e a --2.4014 f e b --1.0690 f e c --2.2253 f e d --0.8451 f e e --2.7024 f e f --2.7024 f e g --2.7024 f e h --1.9621 f e i --0.7705 f e l --2.3045 f e m --1.7482 f e n --2.3045 f e o --3.0035 f e p --2.7024 f e q --0.9100 f e r --0.6896 f e s --1.7482 f e t --2.5263 f e u --1.5721 f e v --1.3502 f e w --1.7730 f e x --1.0862 f f a --2.6425 f f b --1.6882 f f c --0.4224 f f e --2.6425 f f f --2.6425 f f g --2.3414 f f h --0.6131 f f i --1.5633 f f l --2.1653 f f m --2.6425 f f n --0.9797 f f o --1.6425 f f r --1.8643 f f s --1.4963 f f t --1.3000 f f u --2.6425 f f w --1.1139 f g a --0.8129 f g e --1.1139 f g i --1.4150 f g l --0.8507 f g o --0.3606 f g r --1.2900 f g u --1.8921 f g y --0.6944 f h a --0.6831 f h e --0.4960 f h i --0.8270 f h o --0.9519 f h u --2.2742 f h y --2.0673 f i a --2.3683 f i b --0.7608 f i c --1.8912 f i d --1.1642 f i e --1.4518 f i f --1.7662 f i g --2.3683 f i h --2.9703 f i i --1.4263 f i l --2.0161 f i m --0.6523 f i n --2.9703 f i p --0.7374 f i r --1.1378 f i s --1.0727 f i t --2.9703 f i u --1.3793 f i v --2.2714 f i w --1.8564 f i x --1.2041 f j a --0.2747 f j o --0.4260 f j u --0.8451 f k e --0.5441 f k i --0.8451 f k n --0.5441 f k r --0.6330 f l a --0.6274 f l e --2.5250 f l f --0.7769 f l i --0.6442 f l o --0.9936 f l u --1.5250 f l y --0.8846 f m a --2.3617 f m b --0.8993 f m e --2.0607 f m f --1.2478 f m i --0.7819 f m o --1.8846 f m u --0.3086 f m y --0.4631 f n a --0.6392 f n e --1.0072 f n i --0.5066 f n o --2.2380 f o a --2.6640 f o b --2.2380 f o c --3.1411 f o d --3.1411 f o e --2.0620 f o f --2.3630 f o g --3.1411 f o h --1.1077 f o l --1.7609 f o n --1.4690 f o o --2.8401 f o p --0.1898 f o r --1.8624 f o s --2.8401 f o t --0.7609 f o u --2.3630 f o v --3.1411 f o x --0.7189 f p a --1.0463 f p e --1.6484 f p h --1.3473 f p i --0.9494 f p l --0.8354 f p o --0.4723 f p r --1.9494 f p t --1.4723 f p u --0.3010 f q u --1.0717 f r a --0.7707 f r e --2.7619 f r h --1.1285 f r i --0.1833 f r o --1.9838 f r u --2.7619 f r y --1.0508 f s a --2.4487 f s b --1.2183 f s c --1.0870 f s e --2.4487 f s f --1.6036 f s h --1.1063 f s i --2.4487 f s k --1.4945 f s l --1.5456 f s m --1.1265 f s n --0.8255 f s o --1.3695 f s p --2.4487 f s r --2.4487 f s s --0.7766 f s t --0.8466 f s u --2.1477 f s w --1.7549 f t a --2.3570 f t b --2.6580 f t c --2.9590 f t d --0.9021 f t e --2.9590 f t f --2.9590 f t g --0.1448 f t h --1.6368 f t i --3.2601 f t k --2.7830 f t l --2.7830 f t m --2.4819 f t n --1.6690 f t o --2.7830 f t p --1.7977 f t r --2.1809 f t s --1.8799 f t t --2.6580 f t u --3.2601 f t v --1.7286 f t w --1.7038 f t y --2.3118 f u c --1.8346 f u g --0.1672 f u l --2.6128 f u m --1.4087 f u n --1.7097 f u p --0.9793 f u r --1.0217 f u s --1.4367 f u t --0.4168 f v a --0.7179 f v e --0.7690 f v i --0.6307 f v o --0.5248 f w a --0.7838 f w e --0.4291 f w h --1.0849 f w i --1.1875 f w o --2.0626 f w r --2.3636 f w u --1.6435 f y a --1.0414 f y e --0.9445 f y i --1.3424 f y m --0.2632 f y o --1.6435 f y p --1.6435 f y s --1.0414 f y t --1.6435 f y y --1.4388 g a b --1.9617 g a c --2.9159 g a d --2.9159 g a e --1.9159 g a f --1.3719 g a g --2.2170 g a h --0.8121 g a i --2.9159 g a j --2.9159 g a k --0.9569 g a l --1.9159 g a m --0.5357 g a n --1.7118 g a p --2.9159 g a q --1.3361 g a r --1.1306 g a s --1.0899 g a t --2.6149 g a u --1.2725 g a v --1.8745 g a w --2.6149 g a y --1.6149 g a z --1.0414 g b a --0.4886 g b e --1.5855 g b l --1.0414 g b o --1.4094 g b r --0.5441 g b u --0.8865 g b y --0.6780 g c a --1.9085 g c e --0.9542 g c h --1.0054 g c l --0.3287 g c o --1.1303 g c r --1.9085 g c u --1.0414 g d a --0.8865 g d e --0.6312 g d i --0.3302 g d o --1.4094 g d r --1.5855 g d u --1.2837 g e a --1.7704 g e b --1.9922 g e c --1.0772 g e d --2.3444 g e e --1.8003 g e f --2.1014 g e g --1.9922 g e h --1.4024 g e i --2.9465 g e k --1.7160 g e l --1.6454 g e m --1.0120 g e n --0.8934 g e o --1.9922 g e p --2.9465 g e q --0.7733 g e r --1.0120 g e s --0.8601 g e t --2.9465 g e u --1.8673 g e v --1.4551 g e w --1.9051 g e x --1.9051 g e y --0.8617 g f a --1.9031 g f e --0.9488 g f i --1.6021 g f l --0.5051 g f o --0.4407 g f r --1.6021 g f u --0.6786 g g a --1.9217 g g b --1.6207 g g c --2.2227 g g d --0.6545 g g e --2.2227 g g f --1.9217 g g h --1.0766 g g i --0.8077 g g l --1.6207 g g m --1.4446 g g o --1.2685 g g r --1.4446 g g s --1.3776 g g t --1.7456 g g u --1.3776 g g w --1.9217 g g y --1.4110 g h a --1.7555 g h b --2.4322 g h c --3.0342 g h d --1.3908 g h e --2.0342 g h f --3.0342 g h g --2.0800 g h h --1.0611 g h i --1.8038 g h l --2.0342 g h m --2.3353 g h n --1.8581 g h o --2.7332 g h p --2.7332 g h r --1.8581 g h s --0.1540 g h t --2.1891 g h u --1.6363 g h w --1.3888 g i a --2.1484 g i b --1.0784 g i c --2.0515 g i d --2.2734 g i e --1.7505 g i f --1.2190 g i g --2.0515 g i h --1.6366 g i l --0.4409 g i n --0.9652 g i o --2.0515 g i r --1.3526 g i s --1.1942 g i t --2.4495 g i u --0.8697 g i v --1.8474 g i w --2.7505 g i z --0.3979 g j e --0.3979 g j o --0.6990 g k e --0.3979 g k i --0.6990 g k n --0.7351 g l a --0.6532 g l e --0.6398 g l i --0.5843 g l o --0.9970 g l y --0.7217 g m a --0.7217 g m e --2.1367 g m h --1.5347 g m i --0.7750 g m o --1.6596 g m u --0.4124 g m y --0.6807 g n a --2.2122 g n c --0.7498 g n e --2.2122 g n h --0.5889 g n i --1.7351 g n m --0.6681 g n o --1.0361 g n s --1.9112 g n t --1.5307 g o a --1.5044 g o b --2.7348 g o c --1.7348 g o d --2.2577 g o e --0.8317 g o f --2.7348 g o g --2.2577 g o h --0.9639 g o i --2.0358 g o l --2.4338 g o m --0.8054 g o n --0.7220 g o o --2.7348 g o p --1.3369 g o r --2.4338 g o s --1.0188 g o t --1.0024 g o u --1.4338 g o v --2.4338 g o w --2.7348 g o y --0.6892 g p a --1.0414 g p e --0.6021 g p l --0.7984 g p o --0.5643 g p r --0.1761 g q u --0.6027 g r a --0.2512 g r e --2.8014 g r h --1.6875 g r i --0.8823 g r o --2.1993 g r u --1.5461 g r y --0.8724 g s a --1.7889 g s b --1.9138 g s c --2.0899 g s d --1.3495 g s e --1.7889 g s f --2.3909 g s g --1.1868 g s h --1.0687 g s i --2.0899 g s k --1.4878 g s l --2.0899 g s m --1.7889 g s n --0.7575 g s o --1.3909 g s p --2.3909 g s r --1.6920 g s s --0.7377 g s t --1.3118 g s u --1.1605 g s w --2.3909 g s y --2.4108 g t a --2.7118 g t c --1.8667 g t e --0.1881 g t h --1.7576 g t i --0.5386 g t o --1.8667 g t r --2.7118 g t s --2.4108 g t u --2.4108 g t w --1.2022 g u a --2.3483 g u b --0.6159 g u e --0.6240 g u i --0.8233 g u l --1.7462 g u m --1.2691 g u n --0.9772 g u p --1.6493 g u r --1.0261 g u s --2.1722 g u t --0.3010 g v e --0.9031 g v i --0.5051 g v o --0.5336 g w a --0.7524 g w e --0.6585 g w h --0.6128 g w i --1.2606 g w o --2.2148 g w r --0.6118 g y a --1.6532 g y b --1.6532 g y d --1.6532 g y e --1.3522 g y h --1.6532 g y i --1.6532 g y l --1.1761 g y m --0.5393 g y o --1.3522 g y p --1.6532 g y r --0.9542 g y t --1.3522 g y w --0.1249 g z a --1.9295 h a b --2.4783 h a c --0.8006 h a d --2.0360 h a f --2.2499 h a g --2.5131 h a h --2.1773 h a i --2.3135 h a k --1.2701 h a l --1.9295 h a m --0.7999 h a n --3.5923 h a o --1.4048 h a p --3.5923 h a q --1.2639 h a r --1.3370 h a s --0.5358 h a t --2.2306 h a u --0.8899 h a v --2.3135 h a w --3.1152 h a y --2.9902 h a z --1.2455 h b a --0.6021 h b e --1.9445 h b i --1.2455 h b l --0.6657 h b o --0.9902 h b r --0.7404 h b u --0.9445 h b y --0.6507 h c a --0.8155 h c e --1.1513 h c h --1.6284 h c i --1.9294 h c l --0.4381 h c o --0.9752 h c r --1.4523 h c u --0.8539 h d a --0.6198 h d e --0.7447 h d i --1.0000 h d o --0.6576 h d r --1.0969 h d u --1.6990 h d y --1.1772 h e a --1.6467 h e b --1.2910 h e c --1.2829 h e d --1.3126 h e e --1.4897 h e f --1.5290 h e g --1.5387 h e h --1.3951 h e i --2.5866 h e j --2.2766 h e k --1.4302 h e l --1.2163 h e m --1.1330 h e n --1.6446 h e o --1.3870 h e p --2.5044 h e q --0.8365 h e r --0.9544 h e s --1.5014 h e t --2.1343 h e u --1.7765 h e v --1.2687 h e w --2.6244 h e x --1.9023 h e y --3.4897 h e z --1.0334 h f a --0.9542 h f e --1.0334 h f i --1.1303 h f l --0.5019 h f o --0.8573 h f r --0.7782 h f u --1.1357 h g a --1.0107 h g e --1.6128 h g i --0.9138 h g l --0.9138 h g o --0.3118 h g r --1.3118 h g u --0.4326 h h a --0.6435 h h e --0.5734 h h i --1.0151 h h o --1.5465 h h u --2.2455 h h y --2.5368 h i a --2.3771 h i b --0.6856 h i c --1.9596 h i d --2.4497 h i e --2.5880 h i f --1.8098 h i g --2.4119 h i h --3.4911 h i j --3.1901 h i k --1.3544 h i l --1.1037 h i m --0.7887 h i n --2.6460 h i o --2.1109 h i p --1.7751 h i r --0.4029 h i s --1.4782 h i t --2.4497 h i v --2.3771 h i w --0.2553 h j o --0.4771 h j u --0.7782 h k e --0.4771 h k n --0.4771 h k y --0.8159 h l a --0.5563 h l e --0.7782 h l i --0.9031 h l o --1.8573 h l u --0.6021 h l y --0.9627 h m a --0.5399 h m e --2.1931 h m f --1.0792 h m i --1.1931 h m k --2.1931 h m m --0.9379 h m o --1.8921 h m r --1.8921 h m u --0.5304 h m y --0.9420 h n a --0.9420 h n e --1.5441 h n i --0.1639 h n o --1.5441 h n u --2.0780 h o a --2.6520 h o b --1.9988 h o c --2.0499 h o d --2.2541 h o e --1.3733 h o f --1.9753 h o h --2.0499 h o i --3.2541 h o j --2.3510 h o k --0.9444 h o l --1.7356 h o m --1.6743 h o n --1.5551 h o o --1.4345 h o p --0.9360 h o r --1.2048 h o s --1.6308 h o t --0.4759 h o u --2.4759 h o v --0.8527 h o w --0.7700 h p a --0.7243 h p e --1.1222 h p i --1.0253 h p l --1.0253 h p o --0.4938 h p r --1.4232 h p u --0.0512 h q u --1.2247 h r a --2.4800 h r d --0.4347 h r e --1.5769 h r i --0.3308 h r o --1.3039 h r u --1.6349 h r y --1.0700 h s a --1.5752 h s b --1.2742 h s c --1.0437 h s e --1.1950 h s h --1.2328 h s i --2.2742 h s k --1.7970 h s l --2.2742 h s m --1.9731 h s n --0.7828 h s o --1.5752 h s p --1.4960 h s s --0.7427 h s t --0.8118 h s u --1.7970 h s w --2.2742 h s y --1.2923 h t a --1.6086 h t b --2.0558 h t c --2.7547 h t d --1.2362 h t e --1.6940 h t f --2.3568 h t g --0.4771 h t h --1.2045 h t i --3.0558 h t j --1.7335 h t l --1.7335 h t m --1.8253 h t n --0.8462 h t o --2.0144 h t p --2.7547 h t q --1.7770 h t r --1.5372 h t s --1.3315 h t t --1.6244 h t u --3.0558 h t v --1.4223 h t w --1.1367 h t y --1.6064 h u d --2.1293 h u e --0.9532 h u g --0.7313 h u m --0.3709 h u n --1.7613 h u p --1.3054 h u r --0.8505 h u s --1.4603 h u t --0.2730 h v a --0.5740 h v e --1.1761 h v i --1.1761 h v o --0.6021 h w a --0.4550 h w e --0.6021 h w h --1.1729 h w i --1.1059 h w o --1.0875 h y a --1.9004 h y b --1.5024 h y c --1.5993 h y d --1.5993 h y e --2.2014 h y f --1.4232 h y g --1.2014 h y h --1.2014 h y i --1.4232 h y m --1.2983 h y n --0.7864 h y o --0.9709 h y p --1.9004 h y r --1.0253 h y s --1.3563 h y t --1.2472 h y u --1.2014 h y w --1.7243 h y y --0.3010 h z e --1.8702 i a a --1.7453 i a b --1.5692 i a c --1.4442 i a d --2.3473 i a e --1.8702 i a f --1.5692 i a g --2.6484 i a h --2.1712 i a i --0.7563 i a l --0.7791 i a m --0.7345 i a n --2.6484 i a o --2.0463 i a p --1.1043 i a r --0.9582 i a s --1.0049 i a t --2.6484 i a u --2.6484 i a v --1.6941 i a w --2.2934 i b a --2.1173 i b b --0.6259 i b e --1.2327 i b i --0.2088 i b l --1.8954 i b o --1.4483 i b r --1.6402 i b u --0.8244 i c a --2.2746 i c b --1.9959 i c c --2.4965 i c d --0.8481 i c e --2.1607 i c f --2.2332 i c g --0.4746 i c h --1.3996 i c i --1.4617 i c k --1.8122 i c l --2.1285 i c m --2.4295 i c n --1.1223 i c o --1.8122 i c p --3.2746 i c q --1.3401 i c r --1.8433 i c s --1.4617 i c t --1.3555 i c u --2.9736 i c v --2.1285 i c w --2.7975 i c y --1.3219 i d a --2.0927 i d b --2.0513 i d c --1.8623 i d d --0.3860 i d e --2.3146 i d f --2.1385 i d g --1.5245 i d h --0.8968 i d i --3.0927 i d j --3.0927 i d k --1.7705 i d l --1.2934 i d m --1.1842 i d n --1.5612 i d o --2.1385 i d p --2.6156 i d q --1.4907 i d r --1.4115 i d s --1.1842 i d t --2.4907 i d u --2.7917 i d v --1.6777 i d w --2.1896 i d y --2.5024 i e a --1.6178 i e c --0.3918 i e d --2.9795 i e e --1.7243 i e f --2.5024 i e g --2.3775 i e i --2.6785 i e k --1.5816 i e l --0.8460 i e n --2.6785 i e o --1.3263 i e r --0.7727 i e s --1.5024 i e t --2.3775 i e u --1.1535 i e v --1.7754 i e w --1.5646 i e x --1.5623 i f a --2.4654 i f b --2.7664 i f c --0.8633 i f e --0.8074 i f f --1.5623 i f h --0.6695 i f i --1.6525 i f l --1.9213 i f m --1.9213 i f n --1.0943 i f o --2.4654 i f p --2.7664 i f r --2.0674 i f s --0.7841 i f t --1.3862 i f u --1.3350 i f w --1.4047 i f y --1.1461 i g a --1.7418 i g e --1.3288 i g g --0.1840 i g h --1.4671 i g i --2.6712 i g l --2.9722 i g m --1.0801 i g n --1.7681 i g o --2.0180 i g r --2.0180 i g s --2.2732 i g t --1.3701 i g u --2.4951 i g z --0.1046 i h a --0.9384 i h e --1.7835 i h i --1.1069 i h o --1.1139 i i c --1.4150 i i f --1.1139 i i i --1.1139 i i l --0.9379 i i m --0.4607 i i n --1.4150 i i o --1.4150 i i r --1.1139 i i s --1.4150 i i t --1.4150 i i y --0.7782 i j e --0.1761 i j u --1.8543 i k a --0.1199 i k e --2.4564 i k h --1.6113 i k i --2.4564 i k m --0.9379 i k n --2.1553 i k r --1.3102 i k s --1.9792 i k t --2.1553 i k w --2.4564 i k y --1.4196 i l a --1.9777 i l b --2.7906 i l c --1.2052 i l d --0.6539 i l e --2.6145 i l f --2.6145 i l g --2.2466 i l h --1.0746 i l i --2.3135 i l k --0.4885 i l l --2.3927 i l m --2.1374 i l n --1.1622 i l o --3.0917 i l p --3.0917 i l q --2.6145 i l r --1.4789 i l s --1.7115 i l t --1.7694 i l u --2.6145 i l v --1.6293 i l w --1.2166 i l y --0.7948 i m a --1.5955 i m b --2.5163 i m c --2.9934 i m d --0.6150 i m e --2.0903 i m f --2.6924 i m g --1.9520 i m h --1.1739 i m i --2.9934 i m k --1.9934 i m l --1.3307 i m m --1.7893 i m n --1.7893 i m o --0.6510 i m p --2.2945 i m r --1.2376 i m s --1.4024 i m t --1.4883 i m u --2.9934 i m v --1.6132 i m w --2.3914 i m y --1.0902 i n a --2.5567 i n b --1.3742 i n c --1.2013 i n d --1.1877 i n e --1.6881 i n f --0.4596 i n g --1.7867 i n h --1.5739 i n i --3.3349 i n j --1.8343 i n k --1.8775 i n l --1.8982 i n m --2.0716 i n n --1.6536 i n o --2.3648 i n p --2.6980 i n q --2.3496 i n r --1.3178 i n s --0.7945 i n t --1.6566 i n u --2.1218 i n v --1.8725 i n w --2.9669 i n y --2.3647 i o b --2.6077 i o c --1.5865 i o d --2.5108 i o f --3.2098 i o g --3.2098 i o i --1.8118 i o l --2.5108 i o m --0.1157 i o n --2.6077 i o p --1.3647 i o r --2.0637 i o s --2.7327 i o t --0.9220 i o u --2.9088 i o v --3.2098 i o w --0.8201 i p a --2.1818 i p b --1.8808 i p c --1.8808 i p d --1.2276 i p e --2.1818 i p h --1.3367 i p i --1.2788 i p l --1.8808 i p m --1.1405 i p o --1.0679 i p p --1.1405 i p r --0.7047 i p s --1.0058 i p t --1.1818 i p u --2.1818 i p v --1.5798 i p w --2.1818 i p z --0.0152 i q u --1.1646 i r a --1.8336 i r b --1.1493 i r c --1.7666 i r d --0.5271 i r e --1.8336 i r f --2.4356 i r g --1.8336 i r h --1.1493 i r i --2.9128 i r j --2.2138 i r k --1.7988 i r l --1.4076 i r m --2.4356 i r n --1.2407 i r o --2.3107 i r p --2.9128 i r q --1.5325 i r r --0.8158 i r s --1.1967 i r t --2.0677 i r u --2.4356 i r v --1.5148 i r w --2.0677 i r y --1.1055 i s a --1.8331 i s b --1.1142 i s c --1.7270 i s d --1.1020 i s e --1.5414 i s f --1.8819 i s g --0.9208 i s h --1.1768 i s i --2.5509 i s j --2.2499 i s k --1.4333 i s l --1.4048 i s m --1.5461 i s n --1.4407 i s o --1.4407 i s p --2.2747 i s q --1.8819 i s r --1.1955 i s s --0.7562 i s t --1.9141 i s u --2.0428 i s v --1.4188 i s w --3.0280 i s y --1.2458 i t a --1.9353 i t b --1.9237 i t c --2.2248 i t d --0.9759 i t e --2.1813 i t f --2.7254 i t g --0.5393 i t h --0.9670 i t i --3.5035 i t j --3.5035 i t k --2.2994 i t l --1.7792 i t m --2.2482 i t n --1.5897 i t o --2.3574 i t p --1.9472 i t r --1.0674 i t s --1.2756 i t t --1.5950 i t u --2.9015 i t v --1.0122 i t w --1.1552 i t y --3.2025 i t z --0.2910 i u m --0.6335 i u n --1.3324 i u r --0.7884 i u s --1.6335 i u t --1.3464 i v a --0.0984 i v e --0.8550 i v i --2.6474 i v s --2.1703 i v u --2.1703 i v y --0.1362 i w a --1.2389 i w e --1.7160 i w h --0.8709 i w i --1.2688 i w o --1.2201 i x d --0.8051 i x e --1.3170 i x f --1.1409 i x h --1.3170 i x i --1.2201 i x m --0.7730 i x o --1.9191 i x p --1.6180 i x s --0.5041 i x t --1.6180 i x w --0.3979 i y i --0.6990 i y o --0.6990 i y s --0.9912 i z a --0.3100 i z e --1.6902 i z i --0.4349 i z o --1.9912 i z z --1.2304 j a g --1.4065 j a m --1.2304 j a n --1.4065 j a o --1.7076 j a p --1.0086 j a r --1.7076 j a s --0.4288 j a v --0.6284 j a w --1.4065 j a x --0.3010 j d e --0.0812 j e c --1.9445 j e l --1.6435 j e r --1.6435 j e s --0.9902 j e t --1.7297 j o h --0.9516 j o i --1.9058 j o k --2.2068 j o l --1.0307 j o r --2.2068 j o t --0.2337 j o u --0.7919 j o y --0.3010 j s a --0.6021 j s i --0.8985 j u d --1.9777 j u i --0.9777 j u l --1.1996 j u m --0.8316 j u n --1.3757 j u r --0.3343 j u s --1.6767 j u t --1.9777 j u v --0.7703 k a b --1.9165 k a c --1.9165 k a d --1.9165 k a f --1.2632 k a g --2.2175 k a h --2.2175 k a k --1.3724 k a l --1.9165 k a m --0.4771 k a n --1.9165 k a p --1.3724 k a r --1.1035 k a s --0.9387 k a t --2.2175 k a u --1.7404 k a w --1.2175 k a x --1.3617 k b a --0.5836 k b e --1.3617 k b o --1.3617 k b r --0.5166 k b u --0.5836 k b y --0.4075 k c a --1.3617 k c e --1.3617 k c h --0.8846 k c l --1.0607 k c o --0.5836 k c r --1.1461 k d a --0.6690 k d e --0.8451 k d i --0.4472 k d o --0.8451 k d u --0.8779 k e a --2.0682 k e b --2.0682 k e c --0.6470 k e d --1.2470 k e e --1.9299 k e f --2.6702 k e g --1.7952 k e h --1.5089 k e i --2.9713 k e j --2.9713 k e k --1.4528 k e l --1.6491 k e m --0.9106 k e n --1.3378 k e o --1.4398 k e p --1.8921 k e r --1.3480 k e s --0.9221 k e t --1.6289 k e u --2.2723 k e v --1.8573 k e w --2.2723 k e x --1.7952 k e y --0.3010 k f a --1.4771 k f i --0.5229 k f o --0.8751 k f r --0.1249 k g r --0.7911 k h a --0.6864 k h e --0.4708 k h i --0.8325 k h o --0.8783 k h u --2.1106 k i a --1.8096 k i c --2.5877 k i d --1.9857 k i e --2.2867 k i f --2.5877 k i g --2.1106 k i h --2.5877 k i k --2.2867 k i l --1.9857 k i m --0.1020 k i n --2.5877 k i o --2.1106 k i p --1.5463 k i r --1.5877 k i s --1.1727 k i t --2.2867 k i w --0.0193 k j a --0.4771 k k e --0.4771 k k n --0.5027 k l e --0.3979 k l i --0.9420 k l o --0.8451 k l y --0.7404 k m a --0.8195 k m e --0.9165 k m o --0.2881 k m y --0.5335 k n e --1.9428 k n i --0.2738 k n o --0.7967 k n u --2.0719 k o a --2.0719 k o c --2.0719 k o d --2.0719 k o e --0.3010 k o f --1.5948 k o h --1.7709 k o l --0.7709 k o n --1.7709 k o p --0.8958 k o r --1.0305 k o u --2.0719 k o v --0.1996 k p l --0.9777 k p o --0.6767 k p r --1.0792 k r a --0.3802 k r e --0.7782 k r i --0.7782 k r o --1.0792 k r u --0.8517 k s a --1.4538 k s b --1.5999 k s c --1.9978 k s d --1.8217 k s e --1.6968 k s f --2.2989 k s g --1.9978 k s h --1.1228 k s i --1.9978 k s l --1.8217 k s m --1.9978 k s n --0.6087 k s o --1.9978 k s p --1.6968 k s r --1.0201 k s s --0.9371 k s t --1.5207 k s u --1.0436 k s w --1.8217 k s y --2.1072 k t a --0.2621 k t h --0.3829 k t o --2.1072 k t s --1.8062 k t w --0.9542 k u l --0.8751 k u n --0.2218 k u p --0.8751 k u s --0.7304 k w a --0.6335 k w e --0.4431 k w h --0.7584 k w i --1.4574 k w o --1.0334 k y a --1.4314 k y b --1.4314 k y c --1.7324 k y d --1.2553 k y e --1.4314 k y f --1.2553 k y h --1.4314 k y i --0.7324 k y o --0.7324 k y r --1.1303 k y s --1.2553 k y t --0.9542 k y w --1.7237 l a b --0.9898 l a c --1.8001 l a d --3.2151 l a e --2.3120 l a f --2.3700 l a g --2.9141 l a h --1.2561 l a i --2.0390 l a k --2.0390 l a l --1.5524 l a m --0.5827 l a n --2.5161 l a o --1.7527 l a p --0.9574 l a r --0.8727 l a s --0.9251 l a t --1.8349 l a u --1.4443 l a v --1.9847 l a w --3.2151 l a x --1.3763 l a y --3.2151 l a z --1.0414 l b a --0.2975 l b e --2.0828 l b i --1.7818 l b l --0.9067 l b o --1.1285 l b r --2.0828 l b t --0.8275 l b u --1.7818 l b y --0.4281 l c a --1.5420 l c e --1.1441 l c h --2.0191 l c i --1.7181 l c l --0.6126 l c o --1.1160 l c r --0.7638 l c u --1.2396 l d a --1.0023 l d b --1.4485 l d c --1.8339 l d d --1.0355 l d e --1.4886 l d f --1.8339 l d g --0.9081 l d h --1.1167 l d i --2.5029 l d k --1.5176 l d l --1.5328 l d m --0.9426 l d n --1.3079 l d o --1.9386 l d p --1.5998 l d r --1.1412 l d s --1.2396 l d t --1.8661 l d u --2.5029 l d v --1.4359 l d w --2.2019 l d y --0.8595 l e a --1.7274 l e b --1.2952 l e c --1.0533 l e d --1.5682 l e e --1.4482 l e f --1.8406 l e g --1.4915 l e h --1.3196 l e i --2.5584 l e j --2.7345 l e k --1.9564 l e l --1.5884 l e m --1.1884 l e n --1.4635 l e o --1.6096 l e p --2.7345 l e q --1.3921 l e r --0.8946 l e s --0.9227 l e t --2.4713 l e u --1.6866 l e v --1.2502 l e w --2.2339 l e x --2.2339 l e y --0.7274 l f a --1.5786 l f b --1.8797 l f c --1.6755 l f d --1.5786 l f e --1.6244 l f f --2.2776 l f g --1.3234 l f h --0.8228 l f i --2.2776 l f j --1.7335 l f l --1.5372 l f m --1.8005 l f n --0.9554 l f o --1.9766 l f p --2.5786 l f q --1.6755 l f r --1.3234 l f s --0.9554 l f t --1.5786 l f u --2.1015 l f v --1.0735 l f w --2.2776 l f y --0.9912 l g a --0.6902 l g e --0.9120 l g i --1.0881 l g l --1.6902 l g n --0.7871 l g o --0.6902 l g r --1.0881 l g u --0.6488 l h a --0.4861 l h e --0.6110 l h i --0.7608 l h o --1.6902 l h u --1.4587 l i a --2.0105 l i b --1.4292 l i c --1.4903 l i d --1.0443 l i e --1.4822 l i f --0.9335 l i g --2.1354 l i h --2.7375 l i i --3.2146 l i j --0.8882 l i k --2.3115 l i l --1.4152 l i m --0.7628 l i n --2.3695 l i o --1.6705 l i p --1.9358 l i q --2.3115 l i r --1.2701 l i s --0.8566 l i t --1.4664 l i v --2.2603 l i w --3.2146 l i x --1.8166 l i z --0.1461 l j o --0.8451 l j u --1.1249 l k a --0.7270 l k e --1.9031 l k f --1.6021 l k h --0.6243 l k i --0.7570 l k n --1.3010 l k o --1.3010 l k s --1.3010 l k t --1.9031 l k u --1.6021 l k w --1.0580 l k y --1.2041 l l a --1.5254 l l b --1.8476 l l c --1.8476 l l d --0.8433 l l e --1.8476 l l f --2.1486 l l g --1.6257 l l h --0.9783 l l i --3.3247 l l j --2.2455 l l k --2.0694 l l l --1.5843 l l m --1.6004 l l n --0.8917 l l o --2.0025 l l p --1.9268 l l r --1.1848 l l s --0.9862 l l t --1.5185 l l u --2.7226 l l v --1.4986 l l w --0.8638 l l y --0.8888 l m a --2.3201 l m c --1.0191 l m e --2.3201 l m f --2.0191 l m h --1.0649 l m i --1.3659 l m l --2.0191 l m m --1.6212 l m n --0.5072 l m o --2.3201 l m p --2.0191 l m r --1.4750 l m s --2.0191 l m t --1.6212 l m u --2.0191 l m w --0.7291 l m y --1.2253 l n a --0.4619 l n e --1.2253 l n i --0.2808 l n o --1.5789 l o a --1.6247 l o b --1.2945 l o c --2.2267 l o d --1.1396 l o f --1.3957 l o g --3.1810 l o i --2.4820 l o m --0.7972 l o n --0.8865 l o o --1.6369 l o p --2.8800 l o q --1.3886 l o r --0.9991 l o s --1.8800 l o t --1.0841 l o u --1.8800 l o v --0.6786 l o w --2.5789 l o y --0.8081 l p a --1.9542 l p c --1.0512 l p e --1.9542 l p f --1.9542 l p g --0.8751 l p h --0.8751 l p i --1.0000 l p l --0.9542 l p o --0.7501 l p r --1.9542 l p s --1.4771 l p t --1.9542 l p u --0.1761 l q u --1.1043 l r a --0.1365 l r e --1.1043 l r i --1.9494 l r j --1.1712 l r o --1.9494 l r u --1.9494 l r y --0.9640 l s a --1.7933 l s b --1.4922 l s c --2.3953 l s d --0.8213 l s e --1.8513 l s f --1.3539 l s h --0.9482 l s i --2.6964 l s j --2.6964 l s k --1.9182 l s l --1.6550 l s m --1.9974 l s n --0.6920 l s o --1.9182 l s p --2.6964 l s q --2.0943 l s r --1.7421 l s s --0.8902 l s t --1.2984 l s u --2.6964 l s v --1.4411 l s w --2.2192 l s y --1.2965 l t a --2.2818 l t b --2.4579 l t c --1.2274 l t e --2.1569 l t f --0.3751 l t h --1.0513 l t i --2.7589 l t l --1.8047 l t m --2.7589 l t n --0.8897 l t o --2.7589 l t p --1.3118 l t r --1.5285 l t s --1.2676 l t t --2.2818 l t u --2.7589 l t v --1.6450 l t w --1.2965 l t y --1.6335 l u a --1.9345 l u b --1.3061 l u c --1.4574 l u d --0.9925 l u e --1.4226 l u g --1.5823 l u i --2.2355 l u k --2.5366 l u l --0.7372 l u m --0.9345 l u n --2.5366 l u o --1.1386 l u p --1.8376 l u r --0.9031 l u s --0.8833 l u t --1.3061 l u v --2.0594 l u x --1.3892 l v a --0.0567 l v e --1.2131 l v i --1.9912 l v o --0.4675 l w a --0.6966 l w e --0.6618 l w h --0.7615 l w i --1.2115 l w o --0.8508 l y a --1.2859 l y b --1.3018 l y c --1.3018 l y d --1.4807 l y e --1.3073 l y f --2.0008 l y g --1.4125 l y h --1.0910 l y i --2.6029 l y j --2.4268 l y k --1.4889 l y l --1.5817 l y m --1.6139 l y n --1.2137 l y o --1.5237 l y p --3.2049 l y q --1.3789 l y r --1.2365 l y s --0.9425 l y t --1.5422 l y u --2.2507 l y v --1.2182 l y w --2.4268 l y y --2.9039 l y z --2.0097 m a b --1.9817 m a c --0.9140 m a d --3.1858 m a e --2.4077 m a f --1.2882 m a g --2.8848 m a h --1.3166 m a i --2.7087 m a j --1.0995 m a k --1.1858 m a l --2.0719 m a m --0.6083 m a n --3.1858 m a o --2.1066 m a p --3.1858 m a q --1.0366 m a r --1.1991 m a s --0.9071 m a t --2.7087 m a v --2.8848 m a w --3.1858 m a x --1.2882 m a y --2.1858 m a z --1.1275 m b a --2.0569 m b c --0.5067 m b e --2.3579 m b f --1.0792 m b i --2.0569 m b j --0.8139 m b l --2.3579 m b n --1.2788 m b o --1.1538 m b r --1.3579 m b s --2.0569 m b t --0.8394 m b u --1.5798 m b y --1.2175 m c a --1.0414 m c e --0.6734 m c h --1.0414 m c l --0.4393 m c o --1.0414 m c r --1.2175 m c u --1.3010 m d a --0.5229 m d e --1.0000 m d i --0.8239 m d o --1.3010 m d r --0.8239 m d u --0.8239 m d y --0.9365 m e a --1.6338 m e b --1.7783 m e c --1.0002 m e d --1.8810 m e e --1.5800 m e f --2.0794 m e g --1.7049 m e h --1.3012 m e i --3.0571 m e j --2.7561 m e k --1.6954 m e l --1.3804 m e m --0.6860 m e n --1.4660 m e o --1.9110 m e p --2.7561 m e q --1.3453 m e r --1.2409 m e s --0.8503 m e t --1.8810 m e u --2.0157 m e v --1.4236 m e w --3.3581 m e x --2.5130 m e y --1.7782 m f a --0.9331 m f e --1.3010 m f i --1.4771 m f l --0.4164 m f o --0.4357 m f r --1.7782 m f u --1.0414 m g a --0.5643 m g e --1.0414 m g l --0.5643 m g o --0.7404 m g r --0.6146 m h a --0.4834 m h e --0.5441 m h i --1.0669 m h o --1.3680 m h u --2.6566 m i a --1.5597 m i c --1.2674 m i d --2.2586 m i e --2.1125 m i f --0.8821 m i g --2.6566 m i h --2.9576 m i k --0.9845 m i l --2.2586 m i m --0.3953 m i n --2.4805 m i o --2.4805 m i p --1.5597 m i r --1.0491 m i s --0.9282 m i t --2.2586 m i w --2.0545 m i x --0.3010 m j u --1.1461 m k e --0.8451 m k n --0.1461 m k o --1.3522 m l a --0.6532 m l e --0.9542 m l i --0.8081 m l o --1.6532 m l u --0.3745 m l y --0.9847 m m a --2.3997 m m b --1.9226 m m c --2.3997 m m d --0.5189 m m e --1.6215 m m h --0.7465 m m i --2.0986 m m m --2.3997 m m n --0.9083 m m o --2.3997 m m p --2.0986 m m r --2.0986 m m s --1.7007 m m t --1.3997 m m u --1.7007 m m w --0.8812 m m y --1.0479 m n a --0.4459 m n e --1.5250 m n l --1.8261 m n n --0.4837 m n o --1.8261 m n p --0.9810 m n s --1.8261 m n t --1.8261 m n v --1.8261 m n w --2.6042 m o a --2.7803 m o b --2.6042 m o c --1.6342 m o d --1.2425 m o f --2.6042 m o i --2.1271 m o k --2.1783 m o l --1.0946 m o m --0.8910 m o n --1.9352 m o o --0.5681 m o r --0.7739 m o s --1.2301 m o t --0.8535 m o u --1.4379 m o v --3.0813 m o y --0.7258 m p a --2.7789 m p b --0.7618 m p e --2.7789 m p f --2.7789 m p g --1.4778 m p h --1.6997 m p i --0.6717 m p l --0.6683 m p o --1.1991 m p r --1.6997 m p s --1.2875 m p t --2.0799 m p u --2.7789 m p w --2.1768 m p y --0.1761 m q u --0.6734 m r a --1.5185 m r b --1.5185 m r d --0.4771 m r e --1.5185 m r h --0.9165 m r i --1.5185 m r m --1.2175 m r n --1.2175 m r o --1.5185 m r t --1.5185 m r u --1.0465 m s a --2.1072 m s b --1.7093 m s c --2.1072 m s d --0.5631 m s e --1.9311 m s f --1.9311 m s h --1.1778 m s i --2.1072 m s k --1.9311 m s l --2.1072 m s m --1.9311 m s n --0.7955 m s o --1.8062 m s p --2.4082 m s q --2.1072 m s r --1.9311 m s s --0.7648 m s t --1.3668 m s u --1.2621 m s w --2.3522 m t a --2.0512 m t e --0.1167 m t h --1.8751 m t i --2.3522 m t n --0.7289 m t o --1.8751 m t r --0.5553 m u c --1.3477 m u l --2.2227 m u m --1.2685 m u n --1.8248 m u p --0.9923 m u r --0.3477 m u s --1.3196 m u t --0.2041 m v e --0.6021 m v o --0.9454 m w a --0.8107 m w e --0.3533 m w h --0.6443 m w i --1.3847 m w o --1.9868 m w r --1.6148 m y a --1.2790 m y b --1.5277 m y c --1.4077 m y d --1.3019 m y e --1.3582 m y f --1.8701 m y g --1.2627 m y h --1.7398 m y i --2.4722 m y j --2.6940 m y k --1.5691 m y l --1.5691 m y m --1.8094 m y n --1.5584 m y o --1.5691 m y p --3.1711 m y q --1.5277 m y r --0.8287 m y s --1.6940 m y t --0.5150 m y u --2.1297 m y v --1.5084 m y w --2.8701 m y y --2.5784 n a a --1.2510 n a b --1.4728 n a c --1.6489 n a d --3.1804 n a e --1.7033 n a f --1.6122 n a g --1.8187 n a h --1.9251 n a i --2.4814 n a j --1.9251 n a k --0.8859 n a l --1.3171 n a m --0.7790 n a n --2.5784 n a o --1.7333 n a p --2.8794 n a q --1.1235 n a r --0.9901 n a s --0.6919 n a t --2.4023 n a u --1.7180 n a v --1.6122 n a w --3.1804 n a y --2.8794 n a z --1.4688 n b a --0.4814 n b e --1.8367 n b i --2.0128 n b j --1.8367 n b l --0.8667 n b o --1.4108 n b r --0.6326 n b u --0.7341 n b y --1.5870 n c a --0.3737 n c e --1.3612 n c h --1.4746 n c i --0.4909 n c l --1.1698 n c o --1.3979 n c r --1.6394 n c t --2.4523 n c u --1.7833 n c y --1.1195 n d a --1.6629 n d b --1.5899 n d c --1.5632 n d d --0.8886 n d e --1.5860 n d f --1.8460 n d g --1.5275 n d h --0.9474 n d i --2.6771 n d j --2.4852 n d k --1.6676 n d l --1.3908 n d m --1.8605 n d n --1.1630 n d o --1.5595 n d p --3.0293 n d q --1.3154 n d r --1.0347 n d s --0.9298 n d t --1.6869 n d u --2.2511 n d v --1.2265 n d w --1.8320 n d y --1.0620 n e a --2.1759 n e b --1.4162 n e c --0.7912 n e d --1.7268 n e e --1.5108 n e f --2.1496 n e g --1.8749 n e h --1.3800 n e i --3.0790 n e j --3.0790 n e k --1.5876 n e l --1.7079 n e m --1.5349 n e n --1.2465 n e o --1.7780 n e p --2.5349 n e q --1.1982 n e r --0.9651 n e s --1.4558 n e t --2.1759 n e u --1.1573 n e v --1.2157 n e w --1.2866 n e x --1.3347 n e y --0.8573 n f a --0.9423 n f e --0.8116 n f i --0.9920 n f l --0.5468 n f o --0.9423 n f r --1.0481 n f u --0.9488 n g a --1.6054 n g b --1.5759 n g c --1.5993 n g d --1.0622 n g e --1.5816 n g f --2.0765 n g g --1.4567 n g h --1.1263 n g i --2.8546 n g j --2.8546 n g k --1.3168 n g l --1.4113 n g m --1.9382 n g n --1.1666 n g o --1.8232 n g p --3.1556 n g q --1.4929 n g r --1.1345 n g s --0.7682 n g t --1.2445 n g u --2.2806 n g v --1.2806 n g w --2.4153 n g y --0.5735 n h a --0.6543 n h e --0.5654 n h i --0.7537 n h o --1.2186 n h u --1.7072 n i a --2.3441 n i b --1.1584 n i c --1.8000 n i d --1.9181 n i e --1.3229 n i f --1.3160 n i g --1.8669 n i h --2.6451 n i i --2.5202 n i k --2.0430 n i l --1.2357 n i m --0.4788 n i n --1.4320 n i o --2.2191 n i p --3.1222 n i q --2.0430 n i r --0.9639 n i s --0.7878 n i t --2.5202 n i u --2.3441 n i v --1.6909 n i w --1.9461 n i z --1.3802 n j a --1.3802 n j e --0.3010 n j o --0.4260 n j u --1.4472 n k a --2.2253 n k b --2.2253 n k d --1.1461 n k e --2.2253 n k g --1.4472 n k h --0.7939 n k i --1.9243 n k l --1.9243 n k m --0.8636 n k n --0.8636 n k o --2.2253 n k p --0.7339 n k s --1.0492 n k t --1.0792 n k w --1.9243 n k y --1.0346 n l a --0.8974 n l e --1.0873 n l i --2.2776 n l l --1.4995 n l o --2.2776 n l u --0.1842 n l y --0.7799 n m a --2.4031 n m b --1.1727 n m e --1.1244 n m i --0.8591 n m o --1.5000 n m u --0.2892 n m y --1.4200 n n a --0.3336 n n e --0.9728 n n i --2.4200 n n k --0.4804 n n o --2.4200 n n s --1.3408 n n u --2.4200 n n y --2.1587 n o a --2.2752 n o b --1.7871 n o c --1.7264 n o d --2.1104 n o e --0.9135 n o f --2.4861 n o g --2.1104 n o h --1.7557 n o i --3.0881 n o k --1.8577 n o l --1.3721 n o m --1.2923 n o n --2.1850 n o o --2.0274 n o p --3.3892 n o q --1.0370 n o r --1.8978 n o s --0.4791 n o t --1.1878 n o u --2.2430 n o v --0.7981 n o w --2.4861 n o y --0.8641 n p a --0.9221 n p e --1.7672 n p h --1.1651 n p i --0.9221 n p l --0.6702 n p o --0.5630 n p r --1.4661 n p u --2.0682 n p y --0.0122 n q u --0.8868 n r a --0.2599 n r e --1.5152 n r i --0.8620 n r o --1.5152 n r u --0.9412 n r y --1.0442 n s a --1.7401 n s b --1.5962 n s c --2.0733 n s d --0.9913 n s e --1.8255 n s f --2.3421 n s g --1.3122 n s h --0.8351 n s i --2.7101 n s j --3.1872 n s k --1.7248 n s l --1.9320 n s m --2.0733 n s n --0.8972 n s o --1.6075 n s p --2.1458 n s r --1.8255 n s s --0.7044 n s t --1.3948 n s u --2.4883 n s v --1.0869 n s w --2.5852 n s y --1.2091 n t a --2.3430 n t b --2.2180 n t c --2.0797 n t d --0.9402 n t e --2.0072 n t f --2.4222 n t g --0.4910 n t h --1.0642 n t i --3.2972 n t j --3.2972 n t k --1.5608 n t l --1.9648 n t m --2.5569 n t n --0.8333 n t o --2.2003 n t p --2.5982 n t q --1.4136 n t r --1.2180 n t s --1.5896 n t t --1.6740 n t u --2.7531 n t v --1.6538 n t w --1.8579 n t y --1.4638 n u a --0.7128 n u e --2.5051 n u f --1.6601 n u i --0.9488 n u m --0.8924 n u n --1.9031 n u o --1.0902 n u p --2.5051 n u r --0.6187 n u s --0.7809 n u t --0.8129 n v a --0.4327 n v e --0.5576 n v i --0.8587 n v o --1.3358 n v u --2.1139 n v y --0.6582 n w a --0.6972 n w e --0.4315 n w h --0.8221 n w i --1.3177 n w o --2.0774 n w r --0.0185 n x i --1.1614 n y a --1.8048 n y b --1.3577 n y c --1.5495 n y d --1.3577 n y e --1.5038 n y f --2.5038 n y g --1.3277 n y h --1.3898 n y i --1.4624 n y l --1.2485 n y m --1.9017 n y n --0.7479 n y o --1.2028 n y p --1.4246 n y r --1.2028 n y s --0.8136 n y t --1.7256 n y u --2.5038 n y v --1.3277 n y w --2.2028 n y y --0.6021 n z a --0.6021 n z e --0.6021 n z i --1.8228 o a b --1.0538 o a c --0.8174 o a d --2.0269 o a f --2.2488 o a g --1.7259 o a h --1.9478 o a k --0.9935 o a l --1.5498 o a m --0.8626 o a n --1.6467 o a p --2.7259 o a q --0.9478 o a r --0.9478 o a s --0.8174 o a t --2.7259 o a u --1.7259 o a v --2.4249 o a w --2.4249 o a x --1.0180 o b a --2.1941 o b b --0.2562 o b e --2.6712 o b h --1.8930 o b i --1.3490 o b j --1.4671 o b l --1.8930 o b o --1.7169 o b r --0.8451 o b s --1.8261 o b t --1.3288 o b u --2.6712 o b v --2.0691 o b y --1.3188 o c a --1.1726 o c c --0.9151 o c e --1.3487 o c h --1.5654 o c i --0.4379 o c k --1.0325 o c l --0.8182 o c o --1.5654 o c r --1.8416 o c t --1.4157 o c u --1.2594 o d a --1.7243 o d b --2.1045 o d c --1.4812 o d d --0.8492 o d e --1.6895 o d f --1.6895 o d h --0.6796 o d i --2.8035 o d j --2.2014 o d l --1.9584 o d m --2.3263 o d n --0.6962 o d o --2.0253 o d p --1.5730 o d r --1.3263 o d s --1.5482 o d t --1.1802 o d u --1.5730 o d w --1.2014 o d y --1.0544 o e a --2.2304 o e b --2.2304 o e c --2.2304 o e d --1.9294 o e f --1.5315 o e i --1.9294 o e l --1.7533 o e m --0.8687 o e n --1.7533 o e r --0.4311 o e s --1.7533 o e t --2.2304 o e u --1.3854 o e v --2.2304 o e w --0.6622 o e x --2.2304 o e y --1.0388 o f a --1.8326 o f b --1.5390 o f c --1.7461 o f d --1.1038 o f e --1.4245 o f f --1.7342 o f g --1.4303 o f h --1.4245 o f i --2.3730 o f j --2.8253 o f k --1.6078 o f l --1.2854 o f m --1.9600 o f n --1.3363 o f o --1.6950 o f p --1.6444 o f r --1.2090 o f s --0.4832 o f t --2.0594 o f u --1.9700 o f v --1.3808 o f w --2.4573 o f y --1.5315 o g a --0.7186 o g e --1.9574 o g g --2.1335 o g h --0.5895 o g i --1.6564 o g l --1.9574 o g m --1.2884 o g n --0.8783 o g o --0.7356 o g r --2.4346 o g s --2.1335 o g t --1.5895 o g u --2.4346 o g w --1.2304 o g y --0.4604 o h a --0.8997 o h e --0.5415 o h i --2.4048 o h m --0.9577 o h o --2.4048 o h t --0.9899 o h u --2.1038 o h w --2.1038 o h y --2.3856 o i a --2.6866 o i b --0.9542 o i c --1.2395 o i d --2.0846 o i f --2.6866 o i g --2.6866 o i h --0.7782 o i l --1.8415 o i m --0.3403 o i n --1.7324 o i r --1.1184 o i s --1.1681 o i t --1.9877 o i w --0.0969 o j e --1.6021 o j o --0.8239 o j u --1.0638 o k a --2.1430 o k b --1.6659 o k c --1.9212 o k d --0.3649 o k e --1.8420 o k f --1.2979 o k h --1.0887 o k i --1.9212 o k l --1.8420 o k m --1.2777 o k n --1.5410 o k o --1.4740 o k p --2.6201 o k r --1.3897 o k s --1.5062 o k t --1.2979 o k u --1.6659 o k w --2.3191 o k y --1.4694 o l a --2.3988 o l b --1.2085 o l c --0.9005 o l d --0.6565 o l e --2.6998 o l f --3.0009 o l h --1.0714 o l i --3.0009 o l k --0.6745 o l l --3.0009 o l m --2.2227 o l n --0.8803 o l o --1.8547 o l s --2.0009 o l t --1.1558 o l u --1.8869 o l v --2.1558 o l y --1.2149 o m a --1.5364 o m b --2.6503 o m c --2.6503 o m d --0.3975 o m e --2.0763 o m f --2.7752 o m g --1.7472 o m h --1.3128 o m i --3.2524 o m j --2.3493 o m l --1.3439 o m m --2.7752 o m n --1.3030 o m o --0.9281 o m p --3.2524 o m q --2.2981 o m r --1.6291 o m s --1.1318 o m t --1.7083 o m u --2.9513 o m v --1.7900 o m w --1.1660 o m y --1.2203 o n a --1.7278 o n b --1.3389 o n c --1.4051 o n d --0.8418 o n e --1.6657 o n f --1.1934 o n g --1.6514 o n h --1.2203 o n i --2.9210 o n j --2.7168 o n k --1.4104 o n l --1.7939 o n m --2.0071 o n n --1.0517 o n o --2.2977 o n p --3.0179 o n q --2.4738 o n r --0.9048 o n s --0.7755 o n t --2.2977 o n u --1.9210 o n v --1.3844 o n w --2.1728 o n y --3.6199 o n z --2.9773 o o a --1.8311 o o b --2.9773 o o c --0.6917 o o d --2.9773 o o e --1.2138 o o f --2.5001 o o g --2.5001 o o h --2.9773 o o i --0.5224 o o k --1.3338 o o l --1.2138 o o m --0.8735 o o n --2.9773 o o o --1.8311 o o p --1.3862 o o r --1.9773 o o s --1.3438 o o t --1.3862 o o u --2.1991 o o v --2.1322 o o w --1.1308 o p a --0.3665 o p e --1.3010 o p h --1.1549 o p i --1.2076 o p l --2.2218 o p m --1.0655 o p o --1.1079 o p p --1.1938 o p r --1.6198 o p s --1.6990 o p t --1.5528 o p u --2.2218 o p w --0.0512 o q u --1.2515 o r a --1.9082 o r b --1.7357 o r c --1.0025 o r d --0.6930 o r e --2.0025 o r f --1.8582 o r g --1.5620 o r h --1.2222 o r i --3.5210 o r j --1.6949 o r k --1.6577 o r l --1.1390 o r m --1.5967 o r n --1.3596 o r o --2.1593 o r p --3.2200 o r q --1.4206 o r r --1.3009 o r s --0.8042 o r t --2.1060 o r u --2.8220 o r v --1.5433 o r w --1.6019 o r y --1.2609 o s a --2.5899 o s b --2.1640 o s c --0.5914 o s e --1.7053 o s h --1.0140 o s i --2.0671 o s l --2.3681 o s m --2.5899 o s n --1.3595 o s o --1.2097 o s p --0.7682 o s s --0.6107 o s t --1.7449 o s u --2.2220 o s w --2.7660 o s y --1.1711 o t a --1.6005 o t b --1.8346 o t c --1.9595 o t d --1.3040 o t e --2.0513 o t f --2.1356 o t g --0.3156 o t h --1.1644 o t i --2.4366 o t k --1.7904 o t l --1.7632 o t m --2.8046 o t n --1.4125 o t o --2.0513 o t p --2.8046 o t q --1.7904 o t r --1.3896 o t s --1.0803 o t t --1.9393 o t u --2.5827 o t v --1.6907 o t w --2.9807 o t y --1.9594 o u a --1.5577 o u b --2.0201 o u c --1.7300 o u d --2.7770 o u e --3.1450 o u f --1.1036 o u g --2.1907 o u h --2.6221 o u i --2.7190 o u k --0.8491 o u l --2.2419 o u m --0.9145 o u n --2.8440 o u o --2.2242 o u p --3.6221 o u q --0.6269 o u r --0.7986 o u s --0.7993 o u t --3.0201 o u u --3.6221 o u v --2.0310 o u w --1.6021 o v a --0.0504 o v e --1.1249 o v i --2.1139 o v o --0.9664 o w a --1.5922 o w b --1.8140 o w c --1.6628 o w d --0.6628 o w e --1.9638 o w f --2.3491 o w g --1.1772 o w h --1.1450 o w i --3.1942 o w j --2.7171 o w k --1.5410 o w l --1.7171 o w m --0.7128 o w n --1.4700 o w o --2.1942 o w p --2.7171 o w q --2.0181 o w r --1.3309 o w s --1.1489 o w t --2.1528 o w u --2.8932 o w v --1.5315 o w w --2.2400 o w y --3.1942 o w z --0.4260 o x e --0.4260 o x i --1.2041 o x m --1.2041 o x o --1.2041 o x y --0.7070 o y a --1.8633 o y b --1.7384 o y c --2.3404 o y d --1.1644 o y e --2.3404 o y g --1.2265 o y h --0.9091 o y i --2.0394 o y m --2.3404 o y n --0.4831 o y o --2.3404 o y r --1.2613 o y s --1.5623 o y t --2.3404 o y u --2.3404 o y v --1.3404 o y w --1.6415 o y y --0.0414 o z e --1.8319 p a b --1.3548 p a c --2.5723 p a d --2.2713 p a g --2.8733 p a h --1.1330 p a i --1.3170 p a l --2.8733 p a m --0.9048 p a n --2.0282 p a p --2.1744 p a q --0.4583 p a r --0.6638 p a s --1.1409 p a t --1.7272 p a u --2.5723 p a v --2.8733 p a w --2.1744 p a y --0.5563 p b e --0.6532 p b o --0.7782 p b u --0.5563 p b y --0.4150 p c a --0.6368 p c h --0.6368 p c o --1.1139 p c u --0.6532 p d e --0.9542 p d i --0.3522 p d o --0.9542 p d u --0.6665 p e a --2.6457 p e b --0.9297 p e c --1.1361 p e d --1.8676 p e e --1.6605 p e f --2.4239 p e g --3.1229 p e h --1.9468 p e i --1.5318 p e l --2.4239 p e m --0.9270 p e n --1.5318 p e o --2.5208 p e p --0.5512 p e r --1.4794 p e s --1.5208 p e t --3.1229 p e u --2.6457 p e v --2.2198 p e w --3.1229 p e x --2.8218 p e y --0.6990 p f a --1.1761 p f e --0.6990 p f o --0.3310 p f r --0.6990 p g a --0.6990 p g o --0.6990 p g r --0.6990 p g u --0.9877 p h a --0.2887 p h e --2.3856 p h h --0.7228 p h i --1.6866 p h l --1.7835 p h o --1.1552 p h r --2.3856 p h s --1.9085 p h t --1.7835 p h u --1.3442 p h y --2.1106 p i a --2.5877 p i b --0.9156 p i c --0.8024 p i d --1.0314 p i e --2.1106 p i f --2.5877 p i g --1.8887 p i h --2.5877 p i i --2.5877 p i k --1.1563 p i l --2.1106 p i m --0.6146 p i n --2.1106 p i o --2.2867 p i p --1.4416 p i r --1.7426 p i s --0.7244 p i t --1.9857 p i w --0.3010 p j u --0.4065 p l a --0.6429 p l e --0.8291 p l i --1.2685 p l o --1.5695 p l u --0.8248 p l y --0.7782 p m e --1.3802 p m o --0.1249 p m y --0.4771 p n e --0.3010 p n o --1.9094 p o c --2.2896 p o d --2.5114 p o e --1.5114 p o f --1.0541 p o i --1.4204 p o k --1.5262 p o l --2.6875 p o m --0.6403 p o n --1.7844 p o o --2.3865 p o p --0.7954 p o r --0.5588 p o s --1.5572 p o t --1.5262 p o u --2.9886 p o v --1.3451 p o w --1.2956 p p a --0.2460 p p e --1.3536 p p i --1.2286 p p l --0.8497 p p o --1.0130 p p r --1.4205 p p y --1.7717 p r a --0.5164 p r e --0.8984 p r i --0.2706 p r o --1.8261 p r u --0.9144 p s a --1.7160 p s b --1.7160 p s c --2.1931 p s d --0.6746 p s e --1.3480 p s f --1.2900 p s h --1.0170 p s i --1.8921 p s l --1.8921 p s m --2.1931 p s n --0.7782 p s o --2.1931 p s p --2.1931 p s s --0.9627 p s t --1.5911 p s u --1.1517 p s w --2.1931 p s y --1.1348 p t a --2.5328 p t b --1.9307 p t c --0.7474 p t e --2.0556 p t f --2.5328 p t g --0.6463 p t h --0.6137 p t i --2.0556 p t m --2.5328 p t n --1.1178 p t o --2.5328 p t p --1.9307 p t r --1.6877 p t s --1.3023 p t t --1.3866 p t u --2.2317 p t v --1.7546 p t w --1.9307 p t y --0.9933 p u b --2.1072 p u d --0.8285 p u l --1.6301 p u m --1.6301 p u n --1.4082 p u p --0.8062 p u r --1.3291 p u s --0.4260 p u t --1.1530 p u z --0.3979 p v a --0.6990 p v e --0.6990 p v o --0.2368 p w a --0.8846 p w e --1.5378 p w h --0.7597 p w i --1.8388 p w o --1.2368 p w r --1.0280 p y a --0.9031 p y c --1.5051 p y d --1.5051 p y e --1.5051 p y f --0.9031 p y o --1.2041 p y p --0.8062 p y r --0.7270 p y s --1.2041 p y t --1.5051 p y u --1.5051 p y w --0.3010 p z i --0.3010 q e d --0.6919 q u a --0.5655 q u e --0.2893 q u i --2.2601 q u o --2.5611 q u y --1.3377 r a b --1.2215 r a c --1.6096 r a d --1.2851 r a f --1.4075 r a g --2.3878 r a h --1.4229 r a i --2.5639 r a k --1.0076 r a l --1.6431 r a m --0.6626 r a n --1.6345 r a o --1.3292 r a p --1.5225 r a r --1.3464 r a s --0.7738 r a t --2.5639 r a u --1.3975 r a v --1.6345 r a w --1.8369 r a y --3.0410 r a z --0.8062 r b a --0.4810 r b e --2.3502 r b f --2.3502 r b h --1.5051 r b i --1.8731 r b l --2.0492 r b m --0.8317 r b o --2.3502 r b p --1.2363 r b r --2.3502 r b s --2.3502 r b t --0.8062 r b u --1.1461 r b y --0.9355 r c a --0.5307 r c e --0.7000 r c h --1.4883 r c i --1.5553 r c l --0.7712 r c o --1.3557 r c r --2.6345 r c s --2.1574 r c t --1.0112 r c u --2.1574 r c y --1.0508 r d a --1.8692 r d b --2.1033 r d c --2.1703 r d d --0.7811 r d e --1.8023 r d f --2.6474 r d g --1.9070 r d h --0.7257 r d i --2.6474 r d j --2.0453 r d l --1.9070 r d m --2.1033 r d n --1.1850 r d o --2.6474 r d p --2.9484 r d q --1.8345 r d r --0.6766 r d s --1.2952 r d t --1.5867 r d u --2.6474 r d v --1.0619 r d w --2.1703 r d y --0.7241 r e a --1.9283 r e b --1.2189 r e c --0.9416 r e d --1.3569 r e e --1.4215 r e f --1.6871 r e g --1.8340 r e h --1.3880 r e i --2.7478 r e j --3.2707 r e k --1.7747 r e l --1.2930 r e m --1.3481 r e n --1.6579 r e o --1.3880 r e p --2.2163 r e q --1.8965 r e r --0.9769 r e s --1.1194 r e t --2.1567 r e u --1.7793 r e v --1.3464 r e w --2.2163 r e x --1.8613 r e y --0.7427 r f a --2.5623 r f c --0.6592 r f e --1.5623 r f f --2.5623 r f h --1.1644 r f i --2.5623 r f j --1.5209 r f l --0.8995 r f o --2.5623 r f p --1.0999 r f r --2.5623 r f s --2.5623 r f t --0.6033 r f u --0.9661 r g a --2.3464 r g b --0.5268 r g e --2.3464 r g f --2.3464 r g g --1.2324 r g i --1.5682 r g l --2.3464 r g n --0.7666 r g o --0.9661 r g r --2.0453 r g s --1.5682 r g t --0.9661 r g u --1.7443 r g w --1.3464 r g y --0.3261 r h a --0.6498 r h e --1.0058 r h i --2.5740 r h m --0.8751 r h o --1.1938 r h u --2.5740 r h y --1.5641 r i a --1.2707 r i b --1.2265 r i c --1.5275 r i d --0.7553 r i e --1.7759 r i f --1.3071 r i g --2.1158 r i h --3.3199 r i i --1.9397 r i k --1.6124 r i l --1.7759 r i m --0.7179 r i n --1.0103 r i o --2.0412 r i p --2.4168 r i r --1.0146 r i s --1.1832 r i t --2.0412 r i u --1.6124 r i v --2.1158 r i w --2.7179 r i x --3.3199 r i y --1.7179 r i z --1.0700 r j a --1.3711 r j e --0.1158 r j o --1.6721 r j s --1.1950 r j u --0.7973 r k a --1.7634 r k b --1.4624 r k c --2.3655 r k d --0.7857 r k e --2.3655 r k f --2.3655 r k g --1.5204 r k h --1.0867 r k i --2.0645 r k j --1.3655 r k l --1.6665 r k m --0.8884 r k n --1.2194 r k o --2.3655 r k p --2.3655 r k r --0.9675 r k s --1.1894 r k t --2.0645 r k u --1.4624 r k w --2.0645 r k y --0.9638 r l a --0.8003 r l d --1.0765 r l e --1.0027 r l i --2.5079 r l l --1.3318 r l o --2.5079 r l p --1.7297 r l u --2.0307 r l w --0.3318 r l y --0.7505 r m a --2.0849 r m b --2.0849 r m c --2.4829 r m d --0.7386 r m e --2.7839 r m f --2.1818 r m h --0.8394 r m i --1.8808 r m l --2.1818 r m m --0.7669 r m o --2.3068 r m p --2.7839 r m r --1.0763 r m s --1.6700 r m t --1.5535 r m u --1.9388 r m w --0.9088 r m y --0.9661 r n a --1.8692 r n b --2.2952 r n c --2.4713 r n d --0.3761 r n e --1.9942 r n f --1.8692 r n h --0.8692 r n i --2.7723 r n j --2.0734 r n l --1.9942 r n m --2.7723 r n n --0.9031 r n o --1.9942 r n p --1.9942 r n r --1.3410 r n s --1.3744 r n t --1.9272 r n u --2.4713 r n v --1.7723 r n w --2.7723 r n y --1.3385 r o a --1.7710 r o b --1.1214 r o c --1.5985 r o d --2.9067 r o e --0.7071 r o f --1.8925 r o g --3.0828 r o h --2.6057 r o i --1.8787 r o j --2.0036 r o k --1.8787 r o l --0.8215 r o m --1.2834 r o n --1.5776 r o o --1.4862 r o p --1.6678 r o r --1.4862 r o s --1.9367 r o t --0.7414 r o u --1.6057 r o v --1.3346 r o w --2.6848 r o x --2.6057 r o y --2.9067 r o z --0.8593 r p a --0.7802 r p e --1.6375 r p h --1.7344 r p i --1.3365 r p l --0.8741 r p o --0.3587 r p r --2.0354 r p s --2.3365 r p t --1.8593 r p u --2.3365 r p w --0.0512 r q u --0.8689 r r a --0.6131 r r e --0.5319 r r i --2.7774 r r n --0.7997 r r o --1.6313 r r u --0.8480 r r y --1.0236 r s a --1.8570 r s b --1.6993 r s c --2.3621 r s d --0.7600 r s e --2.0611 r s f --2.3621 r s g --1.2757 r s h --1.2222 r s i --3.0611 r s j --2.4590 r s k --1.7187 r s l --1.6631 r s m --2.2160 r s n --0.8967 r s o --1.4813 r s p --2.3621 r s r --1.7823 r s s --0.6281 r s t --1.3890 r s u --2.4590 r s v --1.2687 r s w --3.0611 r s y --0.9127 r t a --2.2707 r t b --2.9696 r t c --2.7936 r t d --1.2707 r t e --2.4925 r t f --2.2707 r t g --0.3443 r t h --1.1123 r t i --1.8727 r t l --2.2707 r t m --2.9696 r t n --0.9322 r t o --2.9696 r t p --1.9919 r t r --1.7793 r t s --1.9919 r t t --1.2795 r t u --1.7025 r t w --1.5464 r t y --2.7936 r t z --1.4914 r u b --1.1640 r u c --1.3945 r u d --1.2331 r u e --1.1514 r u g --1.6955 r u h --1.4402 r u i --1.3733 r u l --1.1514 r u m --0.8204 r u n --0.9631 r u p --2.6955 r u r --0.6463 r u s --1.1514 r u t --0.5695 r v a --0.2685 r v e --1.1088 r v i --0.9923 r v o --2.2227 r v y --0.5114 r w a --0.6623 r w e --0.5823 r w h --0.9585 r w i --1.0435 r w o --2.1346 r w r --2.6117 r w t --1.0668 r y a --1.4599 r y b --1.4847 r y c --1.4251 r y d --1.4599 r y e --1.5248 r y f --1.7152 r y g --1.3534 r y h --1.0868 r y i --2.3172 r y j --2.7152 r y k --1.4364 r y l --1.1411 r y m --1.6738 r y n --1.0162 r y o --1.2380 r y p --2.2380 r y q --1.5690 r y r --1.0477 r y s --0.9868 r y t --2.0620 r y u --2.0620 r y v --1.2238 r y w --2.3172 r y y --3.3263 s a a --1.3051 s a b --1.7243 s a c --1.7353 s a d --3.0253 s a e --1.5629 s a f --1.6021 s a g --2.0253 s a h --0.9354 s a i --2.8492 s a j --1.6542 s a k --1.1710 s a l --1.4455 s a m --0.5712 s a n --3.3263 s a o --1.4342 s a p --2.8492 s a q --1.2436 s a r --1.2733 s a s --1.0808 s a t --2.0253 s a u --1.7136 s a v --1.4690 s a w --1.3625 s a y --1.1328 s b a --0.4544 s b e --1.4686 s b i --2.5478 s b j --1.6447 s b l --1.1498 s b o --1.0426 s b r --0.6393 s b u --0.9143 s b y --0.6421 s c a --2.9474 s c c --0.7861 s c e --1.2150 s c h --1.1840 s c i --1.6050 s c l --0.5050 s c o --1.0901 s c r --1.2314 s c u --2.6464 s c y --1.0062 s d a --0.4833 s d e --0.5023 s d i --0.8099 s d o --1.3284 s d r --1.2870 s d u --1.0067 s e a --2.1174 s e b --1.6071 s e c --0.9525 s e d --1.0003 s e e --1.8486 s e f --2.4854 s e g --1.9082 s e h --1.5206 s e i --3.4396 s e j --2.9625 s e k --0.9056 s e l --1.4103 s e m --1.0894 s e n --1.4574 s e o --1.8956 s e p --2.0972 s e q --1.1632 s e r --1.2067 s e s --1.2753 s e t --2.2935 s e u --1.4396 s e v --1.4185 s e w --1.7236 s e x --1.8714 s e y --0.6130 s f a --1.1261 s f e --0.8415 s f i --1.3271 s f l --0.5322 s f o --0.7941 s f r --1.6033 s f u --2.0804 s f y --0.8096 s g a --1.0314 s g e --2.1106 s g h --1.3324 s g i --0.9966 s g l --2.1106 s g n --0.6792 s g o --0.5085 s g r --2.1106 s g t --1.3324 s g u --2.1106 s g y --0.5658 s h a --2.0524 s h b --2.2865 s h c --2.8306 s h d --0.6197 s h e --2.0902 s h f --3.1316 s h g --2.0524 s h h --1.0524 s h i --3.1316 s h j --2.6545 s h k --2.5296 s h l --1.6265 s h m --2.8306 s h n --0.5876 s h o --3.1316 s h p --3.1316 s h q --1.8529 s h r --2.4326 s h s --1.7699 s h t --1.6403 s h u --3.1316 s h v --1.8763 s h w --2.5296 s h y --1.6394 s i a --1.1856 s i b --1.6066 s i c --1.0917 s i d --2.2330 s i e --1.4836 s i f --1.3513 s i g --1.8029 s i h --3.3469 s i j --2.8698 s i k --1.3341 s i l --1.2678 s i m --0.6532 s i n --1.0636 s i o --2.3469 s i p --3.0459 s i q --1.5911 s i r --1.2231 s i s --0.8206 s i t --2.7449 s i u --1.8284 s i v --2.0682 s i w --1.6066 s i x --2.3927 s i z --0.9420 s j a --1.2430 s j e --0.3680 s j o --0.4301 s j u --1.4713 s k a --0.4890 s k e --0.6931 s k i --1.5682 s k m --1.1289 s k n --1.3252 s k o --1.8692 s k r --1.4713 s k s --1.8692 s k t --1.3252 s k u --1.4713 s k w --0.8480 s k y --0.6854 s l a --0.7293 s l e --0.5918 s l i --0.6232 s l o --1.6232 s l u --1.0590 s l y --0.6114 s m a --2.7118 s m b --2.7118 s m c --1.1436 s m e --2.4108 s m f --2.7118 s m g --2.4108 s m h --0.9265 s m i --2.7118 s m l --2.4108 s m m --0.6824 s m o --2.1097 s m s --2.4108 s m t --1.2204 s m u --1.9337 s m w --0.5979 s m y --1.1929 s n a --0.5487 s n e --1.7212 s n i --0.2027 s n o --2.6243 s n u --2.6243 s n y --2.0119 s o a --1.9265 s o b --1.9587 s o c --2.3736 s o d --2.3736 s o e --0.4695 s o f --2.3736 s o g --2.2597 s o h --1.5541 s o i --1.3129 s o l --0.8371 s o m --0.9740 s o n --1.4243 s o o --2.0514 s o p --3.0726 s o q --0.9423 s o r --2.2275 s o s --1.8965 s o t --1.1184 s o u --2.0726 s o v --1.8422 s o w --2.6747 s o y --0.8672 s p a --0.5225 s p e --1.1853 s p h --0.9977 s p i --1.2310 s p l --0.7804 s p o --0.8389 s p r --2.8842 s p t --1.5832 s p u --0.0080 s q u --0.7970 s r a --0.2964 s r e --0.9317 s r i --0.8118 s r o --1.9731 s r s --1.3199 s r u --1.0144 s s a --2.1509 s s b --1.7597 s s c --2.1856 s s d --0.8054 s s e --2.1509 s s f --2.6628 s s g --1.5405 s s h --0.7195 s s i --2.7877 s s j --2.7877 s s k --1.9224 s s l --2.1187 s s m --2.1856 s s n --0.6873 s s o --1.5572 s s p --3.2648 s s q --2.4197 s s r --2.0607 s s s --0.9907 s s t --1.0946 s s u --2.7877 s s v --1.6738 s s w --2.2648 s s y --0.8615 s t a --1.8702 s t b --1.8702 s t c --2.0390 s t d --1.0137 s t e --1.9421 s t f --2.3189 s t g --0.7305 s t h --0.9509 s t i --3.1640 s t j --2.9421 s t k --1.9251 s t l --1.9168 s t m --2.2609 s t n --0.7643 s t o --2.0390 s t p --3.0390 s t q --1.0456 s t r --1.6543 s t s --1.4708 s t t --1.5655 s t u --2.6868 s t v --1.6588 s t w --2.3623 s t y --1.5686 s u a --1.1487 s u b --0.8962 s u c --1.1308 s u d --2.3979 s u e --1.2596 s u f --2.0458 s u g --2.3979 s u i --1.3872 s u l --1.1192 s u m --1.1135 s u n --0.8894 s u p --0.6108 s u r --1.3768 s u s --1.7447 s u t --0.7404 s v a --0.2543 s v e --1.0414 s v i --0.7984 s v o --0.8025 s w a --0.4140 s w e --0.6050 s w h --0.8848 s w i --1.1973 s w o --1.8663 s w r --1.2518 s y a --0.4634 s y e --2.0969 s y g --2.0969 s y h --1.4949 s y i --1.6198 s y l --1.6198 s y m --0.4841 s y o --2.0969 s y p --2.0969 s y r --1.0969 s y s --1.4949 s y t --1.7959 s y u --2.0969 s y v --1.7959 s y w --0.3010 s z p --3.0368 t a a --1.2886 t a b --1.3983 t a c --1.9954 t a d --3.3379 t a e --1.9399 t a f --1.6944 t a g --2.2587 t a h --0.9469 t a i --3.0368 t a j --1.0637 t a k --0.9994 t a l --1.7358 t a m --0.6111 t a n --2.4348 t a o --1.4402 t a p --2.6389 t a q --1.1257 t a r --1.2273 t a s --0.9876 t a t --2.6389 t a u --2.2965 t a v --2.1074 t a w --3.3379 t a x --3.0368 t a y --1.1775 t b a --0.2306 t b e --1.7004 t b i --1.6335 t b l --1.4786 t b o --1.2744 t b r --0.8875 t b u --1.0806 t b y --0.8702 t c a --1.1712 t c e --0.4796 t c h --1.7733 t c i --1.4723 t c l --0.5101 t c o --1.1043 t c r --1.5972 t c u --0.7465 t d a --0.7276 t d e --0.5246 t d i --0.6073 t d o --1.3205 t d r --1.4454 t d u --1.4777 t e a --2.4035 t e b --2.0725 t e c --0.7158 t e d --1.5673 t e e --2.2486 t e f --2.8506 t e g --2.0872 t e h --1.8869 t e i --3.5496 t e j --1.4777 t e l --1.4290 t e m --1.0541 t e n --1.5858 t e o --1.8336 t e p --3.5496 t e q --0.4013 t e r --1.3621 t e s --1.7503 t e t --2.7715 t e u --1.6923 t e v --1.9368 t e w --1.8336 t e x --1.0030 t f a --0.9469 t f e --0.7411 t f i --1.5111 t f l --0.4697 t f o --0.8633 t f r --1.0182 t f u --0.9294 t g a --0.9672 t g e --1.0086 t g i --1.0544 t g l --0.5462 t g o --0.6284 t g r --1.2304 t g u --0.9460 t h a --2.5812 t h b --2.4672 t h c --2.6604 t h d --0.1945 t h e --2.3340 t h f --2.8279 t h g --2.2258 t h h --0.9850 t h i --3.2802 t h j --3.7573 t h k --2.7361 t h l --2.4785 t h m --3.0169 t h n --1.3602 t h o --2.5532 t h p --3.2802 t h q --1.7299 t h r --2.0540 t h s --1.7159 t h t --2.1289 t h u --3.2802 t h v --2.0540 t h w --2.1775 t h y --1.8851 t i a --2.0814 t i b --1.0814 t i c --2.1136 t i d --1.6200 t i e --1.5791 t i f --1.8753 t i g --1.9157 t i h --3.0514 t i i --2.8296 t i k --1.2407 t i l --1.2002 t i m --0.7375 t i n --0.5431 t i o --2.4146 t i p --2.7504 t i q --2.0234 t i r --1.0048 t i s --1.1725 t i t --3.2275 t i u --1.5743 t i v --1.9603 t i w --3.5285 t i y --0.9542 t j a --0.4771 t j o --0.3522 t j u --0.5528 t k e --0.6990 t k i --0.3565 t k n --1.3979 t k o --0.7531 t l a --0.4381 t l e --1.0116 t l i --1.3675 t l o --2.7825 t l s --2.7825 t l u --0.5037 t l y --0.6419 t m a --0.7839 t m e --1.1538 t m i --2.6590 t m m --0.7245 t m o --1.1149 t m u --0.5726 t m y --1.3010 t n a --0.7270 t n e --1.0000 t n i --0.1955 t n o --1.7270 t n u --1.3329 t o a --1.2452 t o b --1.4994 t o c --1.4869 t o d --1.7440 t o e --0.8712 t o f --1.5221 t o g --1.4514 t o h --1.8802 t o i --3.0340 t o j --2.1590 t o k --1.6108 t o l --1.1905 t o m --1.1282 t o n --1.2595 t o o --1.4688 t o p --3.1590 t o q --1.1737 t o r --1.2956 t o s --0.8630 t o t --1.4430 t o u --2.1447 t o v --1.4293 t o w --3.6361 t o x --2.3351 t o y --0.8206 t p a --0.6915 t p e --1.4574 t p h --1.4574 t p i --1.0594 t p l --0.7584 t p o --0.5543 t p r --1.6335 t p u --2.2355 t p y --0.0164 t q u --0.4653 t r a --3.0519 t r d --0.6079 t r e --3.0519 t r f --0.8996 t r i --1.0105 t r o --3.0519 t r r --0.8318 t r u --1.4391 t r y --1.0013 t s a --1.4501 t s b --1.4998 t s c --1.9043 t s d --1.0140 t s e --1.8142 t s f --2.0183 t s g --1.2330 t s h --1.0838 t s i --2.5412 t s j --2.4162 t s k --1.8142 t s l --1.6381 t s m --1.5269 t s n --0.8115 t s o --1.3462 t s p --1.8422 t s r --1.4998 t s s --0.9111 t s t --1.2779 t s u --2.1732 t s v --1.2701 t s w --3.0183 t s y --1.6457 t t a --0.7214 t t e --0.3234 t t h --1.4282 t t i --1.2391 t t l --0.7453 t t o --1.8498 t t r --2.6457 t t u --1.7706 t t w --2.4026 t t y --1.2162 t u a --2.3217 t u b --2.1456 t u c --1.2248 t u d --2.0207 t u e --2.2248 t u f --2.6227 t u g --2.6227 t u i --2.4466 t u l --1.9238 t u m --0.8669 t u n --2.3217 t u o --1.0429 t u p --0.3206 t u r --1.0099 t u s --1.6450 t u t --2.9238 t u u --0.7068 t v a --0.3865 t v e --0.8451 t v i --0.6342 t v o --0.5099 t w a --0.6090 t w e --0.8000 t w h --1.0046 t w i --0.7354 t w o --2.5805 t w r --1.0022 t y a --1.5615 t y b --1.5104 t y c --1.6865 t y d --1.3855 t y e --1.1529 t y f --2.0667 t y g --1.4434 t y h --1.3343 t y i --2.4646 t y j --1.2605 t y l --1.4869 t y m --1.8114 t y n --0.6653 t y o --1.7243 t y p --1.9206 t y r --1.3033 t y s --0.9083 t y t --1.8114 t y v --1.1424 t y w --2.4646 t y y --0.4771 t z a --0.7782 t z b --0.7782 t z e --0.7782 t z t --1.5119 u a b --1.9379 u a c --1.7160 u a d --2.1139 u a e --2.4150 u a f --1.0000 u a g --1.9379 u a i --1.7160 u a k --0.4656 u a l --2.1139 u a m --1.5119 u a n --2.1139 u a p --2.4150 u a q --0.6368 u a r --1.9379 u a s --0.8239 u a t --2.4150 u a v --2.4150 u a y --2.0645 u b a --1.1350 u b b --1.4112 u b e --1.8884 u b i --1.1894 u b j --0.6753 u b l --2.0645 u b m --2.3655 u b o --1.8884 u b r --1.3241 u b s --0.3048 u b t --1.7634 u b u --1.5185 u c a --1.0295 u c c --1.0066 u c e --0.2775 u c h --1.3424 u c i --1.0179 u c k --1.6435 u c o --1.1063 u c t --2.2967 u c u --1.1793 u d a --2.4346 u d b --1.8325 u d c --0.4901 u d d --0.6787 u d e --1.3206 u d g --2.4346 u d h --1.0728 u d i --2.1335 u d l --1.7356 u d n --1.3554 u d o --2.4346 u d p --2.1335 u d r --0.9874 u d s --2.1335 u d t --2.4346 u d v --2.1335 u d w --1.3932 u d y --1.0804 u e a --1.8585 u e b --1.8585 u e c --0.8093 u e d --2.0804 u e f --1.7794 u e h --1.7794 u e i --1.7124 u e l --1.4783 u e m --0.8499 u e n --1.5575 u e o --2.5575 u e q --1.8585 u e r --0.4469 u e s --1.3022 u e t --2.0804 u e v --1.6033 u e w --2.0804 u e x --2.5575 u e y --1.3424 u f a --1.8195 u f e --0.0714 u f f --1.8195 u f i --1.8195 u f r --1.3424 u f t --2.0952 u g a --2.6972 u g b --2.3962 u g d --0.9812 u g e --2.6972 u g f --1.0538 u g g --0.1433 u g h --2.0952 u g i --2.6972 u g m --1.8521 u g o --2.3962 u g s --1.3750 u g u --0.2704 u h a --0.7677 u h e --0.6128 u h m --1.6128 u h o --2.5658 u i a --1.5245 u i c --0.5245 u i d --1.2871 u i e --2.2648 u i g --1.1034 u i l --1.1679 u i n --2.5658 u i p --1.1187 u i r --1.2648 u i s --0.5089 u i t --2.0887 u i v --2.0887 u i w --2.5658 u i x --0.7404 u k e --0.1383 u k n --0.8387 u l a --2.1540 u l b --1.9943 u l c --0.3396 u l d --1.7860 u l e --1.7860 u l f --1.9621 u l g --2.4093 u l h --1.3840 u l i --3.1082 u l k --1.1082 u l l --1.9621 u l m --2.4093 u l n --1.6458 u l o --2.1082 u l p --2.0668 u l r --1.5642 u l s --0.9976 u l t --2.6311 u l u --2.6311 u l v --2.1082 u l w --1.7465 u l y --0.8780 u m a --0.9513 u m b --2.6415 u m c --0.5696 u m e --1.7384 u m f --2.1644 u m h --1.0394 u m i --1.0394 u m m --1.4654 u m n --1.3404 u m o --1.1791 u m p --2.6415 u m r --1.1644 u m s --2.1644 u m t --1.4110 u m u --2.6415 u m w --2.0394 u m y --1.4871 u n a --2.6559 u n b --0.5168 u n c --0.4790 u n d --1.5858 u n e --2.2579 u n f --1.4871 u n g --2.1118 u n h --1.6347 u n i --1.8777 u n k --2.2579 u n l --2.4798 u n m --1.5020 u n n --1.8777 u n o --1.9792 u n p --3.2579 u n q --2.3548 u n r --2.1787 u n s --0.8688 u n t --2.7808 u n u --2.7808 u n v --2.2579 u n w --3.2579 u n y --1.0212 u o f --0.8451 u o n --1.0212 u o r --1.0212 u o s --1.3222 u o t --0.3222 u o u --1.3135 u p a --1.8048 u p b --2.5038 u p c --2.5038 u p d --1.1614 u p e --1.9597 u p f --2.8048 u p g --1.5495 u p h --1.3277 u p i --2.8048 u p j --1.9017 u p l --1.7256 u p m --2.3277 u p n --0.5038 u p o --0.8271 u p p --1.5744 u p r --1.5261 u p s --0.8805 u p t --2.3277 u p u --2.8048 u p v --1.1327 u p w --2.5038 u p y --0.3010 u q u --1.3178 u r a --1.6558 u r b --1.5686 u r c --1.3899 u r d --0.7080 u r e --1.3499 u r f --1.6277 u r g --1.5097 u r h --1.1215 u r i --1.7775 u r j --2.7069 u r k --1.6857 u r l --1.5930 u r m --0.9416 u r n --1.5381 u r o --1.3178 u r p --3.0080 u r q --1.4282 u r r --0.9868 u r s --1.4169 u r t --2.3090 u r u --2.0785 u r v --1.5930 u r w --1.7905 u r y --0.9933 u s a --1.6414 u s b --1.5777 u s c --1.8594 u s d --0.8519 u s e --1.7740 u s f --1.9659 u s g --1.3461 u s h --1.1006 u s i --2.2212 u s j --2.4430 u s k --1.4150 u s l --1.6771 u s m --2.0170 u s n --1.5979 u s o --1.5679 u s p --2.5222 u s q --1.8232 u s r --1.1006 u s s --0.5917 u s t --1.6649 u s u --2.1798 u s v --1.5777 u s w --2.5222 u s y --1.0908 u t a --1.7228 u t b --1.7898 u t c --1.8912 u t d --1.0560 u t e --1.5467 u t f --2.2669 u t g --0.9294 u t h --0.9447 u t i --2.5679 u t k --1.8275 u t l --1.4457 u t m --1.6928 u t n --1.1488 u t o --2.3918 u t p --2.0560 u t r --1.3638 u t s --0.6321 u t t --1.7076 u t u --2.3918 u t v --1.3126 u t w --1.9658 u t y --0.6021 u u m --0.4260 u u n --0.9031 u u p --0.9031 u u s --0.9379 u v e --0.0726 u v i --0.7570 u w e --1.3010 u w h --0.2218 u w i --0.8239 u w o --0.6990 u x p --0.2218 u x u --0.3010 u y t --0.0414 u z z --1.4271 v a a --1.5618 v a b --1.7580 v a c --1.8250 v a d --2.6031 v a e --2.6031 v a f --1.3990 v a g --2.0011 v a h --1.1560 v a i --1.0121 v a l --2.6031 v a m --0.7223 v a n --2.1260 v a o --1.0980 v a p --1.3021 v a r --0.7902 v a s --0.8956 v a t --1.3990 v a u --2.6031 v a v --1.7580 v a w --1.3928 v e a --1.4944 v e b --1.9763 v e c --1.2230 v e d --2.1524 v e e --1.8514 v e f --1.9094 v e g --1.9094 v e h --1.7131 v e i --2.7545 v e j --3.1524 v e k --1.2308 v e l --1.7633 v e m --0.9443 v e n --1.8003 v e o --2.1747 v e p --2.9763 v e q --0.3736 v e r --1.1612 v e s --1.3199 v e t --1.9483 v e u --3.1524 v e v --1.7814 v e w --3.1524 v e x --2.1747 v e y --1.2131 v i a --1.3020 v i c --0.9542 v i d --1.3222 v i e --2.1673 v i f --1.5305 v i g --1.3657 v i k --1.6030 v i l --0.4655 v i n --1.1393 v i o --1.8663 v i r --0.9284 v i s --1.3434 v i t --2.3434 v i u --1.5653 v i v --2.1189 v o c --0.6418 v o i --2.1189 v o k --0.4243 v o l --1.7210 v o m --1.8179 v o n --0.9286 v o r --1.1895 v o t --1.4200 v o u --2.1189 v o w --0.9428 v o y --0.3010 v s a --0.0458 v u l --0.7501 v y a --1.1761 v y b --0.9542 v y c --0.9542 v y f --1.6532 v y g --1.6532 v y h --1.1761 v y i --1.1761 v y l --1.6532 v y n --1.3522 v y r --0.9542 v y s --0.9542 v y t --1.6532 v y w --1.6532 v y y --2.7410 w a b --2.8659 w a c --2.6440 w a d --3.0420 w a f --3.3430 w a g --3.3430 w a h --1.8517 w a i --2.0643 w a k --1.3056 w a l --2.5649 w a m --1.4622 w a n --3.0420 w a p --1.0463 w a r --0.2351 w a s --1.0508 w a t --1.6709 w a v --3.3430 w a w --3.0420 w a x --1.0066 w a y --0.4771 w b a --0.3802 w b e --1.0792 w b o --1.0792 w b u --1.2041 w b y --0.4771 w c a --1.5185 w c h --0.9165 w c l --0.4771 w c o --0.8195 w c r --0.9345 w d a --0.3782 w d e --0.8553 w d i --0.7304 w d o --1.1563 w d r --1.3324 w d u --1.0689 w e a --2.2314 w e b --1.6378 w e c --1.2485 w e d --1.5193 w e e --1.8269 w e f --2.2314 w e g --1.0735 w e h --1.9304 w e i --3.3454 w e j --2.6464 w e k --1.0294 w e l --1.5325 w e m --1.3201 w e n --2.3454 w e o --2.0030 w e p --0.5760 w e r --1.1522 w e s --1.8139 w e t --1.2662 w e v --1.0643 w e w --2.7433 w e x --3.3454 w e y --1.1973 w f a --1.0212 w f e --1.7993 w f i --1.7993 w f l --0.9542 w f o --1.1973 w f r --0.2083 w f u --0.6990 w g a --1.0000 w g i --1.0000 w g l --0.6990 w g o --0.6990 w g r --1.0000 w g u --0.7052 w h a --0.7102 w h e --0.3758 w h i --0.8011 w h o --3.2467 w h u --1.5565 w h y --2.6253 w i a --2.8014 w i b --2.0610 w i c --1.7045 w i d --2.0610 w i f --1.4896 w i g --3.1024 w i h --0.7620 w i l --2.5004 w i m --0.9721 w i n --2.2573 w i r --1.3542 w i s --0.2297 w i t --3.1024 w i u --2.6253 w i w --0.3010 w j o --0.5441 w k e --0.8451 w k i --0.5441 w k n --0.8451 w k w --1.7853 w l a --0.4631 w l e --1.0864 w l i --1.7853 w l m --1.0072 w l o --1.7853 w l s --1.7853 w l t --0.4051 w l y --0.8166 w m a --0.8166 w m e --0.8166 w m i --0.8166 w m o --1.4698 w m u --0.4698 w m y --0.9857 w n a --1.5172 w n b --1.6721 w n c --1.8182 w n d --1.2867 w n e --1.3131 w n f --1.1022 w n h --0.9490 w n i --2.5172 w n k --1.6721 w n l --1.6721 w n m --2.0401 w n n --0.8939 w n o --1.6141 w n p --2.5172 w n q --2.0401 w n r --1.3711 w n s --0.8096 w n t --1.7390 w n u --2.2162 w n v --1.0258 w n w --2.9079 w o a --2.9079 w o b --2.0049 w o c --2.2090 w o d --2.3059 w o e --1.2452 w o f --2.6069 w o g --1.4608 w o h --2.3059 w o i --2.9079 w o j --1.7618 w o k --1.7319 w o l --1.7618 w o m --1.0506 w o n --1.4608 w o o --1.9079 w o p --0.4028 w o r --1.9537 w o s --1.7940 w o t --0.6026 w o u --2.4308 w o v --2.1298 w o w --2.6069 w o y --0.6990 w p a --0.8751 w p e --0.8751 w p h --1.1761 w p l --0.8751 w p o --0.6990 w p r --1.1761 w p u --0.1249 w q u --0.9494 w r a --0.4723 w r e --0.5180 w r i --0.6706 w r o --1.6484 w r u --0.8325 w s a --1.5315 w s b --1.7076 w s c --1.7076 w s d --1.1635 w s e --1.7076 w s f --1.0086 w s h --1.1055 w s i --2.0086 w s l --1.4065 w s m --2.0086 w s n --0.7533 w s o --1.7076 w s p --2.0086 w s s --0.9294 w s t --1.4065 w s u --2.0086 w s v --1.1055 w s w --1.6812 w t e --0.1091 w t h --0.7966 w t o --1.6812 w t r --2.1584 w t u --2.1584 w t w --0.4150 w u n --0.8129 w u p --1.1139 w u r --0.6368 w u s --1.1139 w u t --0.7782 w v e --0.3010 w v i --0.7782 w v o --0.7051 w w a --0.7051 w w e --0.4533 w w h --1.2492 w w i --0.7373 w w o --0.7782 w y a --1.0792 w y n --0.3010 w y o --1.0792 w y p --1.0792 w y s --0.1761 w z e --2.0531 x a a --1.7520 x a b --0.4196 x a c --1.7520 x a g --1.7520 x a l --0.3127 x a m --1.7520 x a n --1.3541 x a s --0.3010 x b e --1.7324 x c a --0.3174 x c e --1.4314 x c h --0.6910 x c i --0.7324 x c l --2.0334 x c r --1.2553 x c u --0.0792 x d o --1.0911 x e c --0.3378 x e d --1.5682 x e m --0.8692 x e r --0.5682 x e s --0.2218 x f e --0.6990 x f o --0.2126 x h a --0.7924 x h i --0.7132 x h u --1.6990 x i a --1.6990 x i b --2.0000 x i c --1.3010 x i e --2.0000 x i l --1.2218 x i m --1.3979 x i n --0.6990 x i o --0.2596 x i s --1.6990 x i t --2.0000 x i u --0.5441 x m i --0.3680 x m o --0.8451 x m y --0.3010 x n o --0.2218 x o c --1.0000 x o f --0.8239 x o r --1.3010 x o t --1.3010 x o u --1.4472 x p a --0.3838 x p e --1.8151 x p i --0.4058 x p l --1.3892 x p o --1.0135 x p r --0.6021 x s e --0.6021 x s h --0.6021 x s i --2.2900 x t a --0.9678 x t d --0.6179 x t e --1.5119 x t h --1.0596 x t i --1.6880 x t m --2.2900 x t q --0.3606 x t r --2.2900 x t t --1.5911 x t u --2.2900 x t w --1.5911 x t y --0.7782 x u b --0.7782 x u l --0.3010 x u r --0.7782 x w e --0.3010 x w i --0.7782 x w o --0.3010 x y g --1.4086 y a b --1.3796 y a c --1.7570 y a d --1.3658 y a f --1.1989 y a g --2.0259 y a h --2.8710 y a i --2.0928 y a k --1.1808 y a l --1.7570 y a m --0.4560 y a n --1.4560 y a p --2.8710 y a q --1.0928 y a r --1.0514 y a s --1.1228 y a t --1.7570 y a u --1.7249 y a v --1.6405 y a w --2.8710 y a y --1.4108 y b a --2.4900 y b d --0.4565 y b e --1.7910 y b i --1.5357 y b l --0.6035 y b o --1.0750 y b r --0.7341 y b u --1.3760 y b y --0.7219 y c a --1.3239 y c e --1.0229 y c h --0.9560 y c l --0.3349 y c o --1.1727 y c r --1.6250 y c u --0.8265 y d a --0.3757 y d e --0.6590 y d i --1.0155 y d o --1.1027 y d r --1.5128 y d u --0.9569 y e a --2.6893 y e c --1.3276 y e d --2.2122 y e f --1.7862 y e i --1.4852 y e l --2.0872 y e m --1.2422 y e n --2.3883 y e o --2.0872 y e p --2.6893 y e q --1.2743 y e r --0.4934 y e s --0.9334 y e t --1.6893 y e v --1.9903 y e w --0.9040 y e x --1.2422 y e y --0.6384 y f a --0.8250 y f e --0.7476 y f i --2.4378 y f j --1.6596 y f l --0.5293 y f o --0.9754 y f r --1.9606 y f u --1.1856 y g a --0.9224 y g e --1.1856 y g i --1.1856 y g l --1.9638 y g n --0.5488 y g o --0.5836 y g r --0.9224 y g u --0.4635 y h a --0.4635 y h e --0.9171 y h i --0.8437 y h o --1.3830 y h u --2.4969 y h y --1.5788 y i a --2.0560 y i b --1.2963 y i c --1.4819 y i d --1.5119 y i e --1.3793 y i f --2.1809 y i g --1.4539 y i h --2.1809 y i k --1.6580 y i l --1.1666 y i m --0.3979 y i n --2.1809 y i o --2.1809 y i p --1.5119 y i r --1.1809 y i s --0.8799 y i t --2.6580 y i u --1.6166 y i w --1.3222 y j a --1.0212 y j e --0.4771 y j o --0.3222 y j u --1.0669 y k e --0.9420 y k i --0.2430 y k j --0.6990 y k n --0.7373 y l a --0.6294 y l e --0.5360 y l i --1.7263 y l l --0.6949 y l o --1.3284 y l u --2.3284 y l w --1.8513 y l y --0.7782 y m a --0.8168 y m e --2.1492 y m f --0.7782 y m i --2.4502 y m l --2.4502 y m n --0.8168 y m o --2.4502 y m p --2.1492 y m r --2.4502 y m t --0.9731 y m u --0.6509 y m y --1.0414 y n a --0.6962 y n e --1.1083 y n i --0.2098 y n o --2.1875 y n u --1.9080 y o b --1.9080 y o c --2.9494 y o d --0.5953 y o f --2.9494 y o k --2.1043 y o l --0.9582 y o n --1.8702 y o p --1.6070 y o r --2.3473 y o s --1.9494 y o t --0.2923 y o u --1.8033 y o v --1.6941 y o w --0.8081 y p a --0.8081 y p e --1.3979 y p h --1.5071 y p i --1.2730 y p l --0.7087 y p o --0.5460 y p r --1.3522 y p t --1.4491 y p u --0.0458 y q u --0.8741 y r a --2.3365 y r d --0.2834 y r e --0.7924 y r i --1.8593 y r k --0.9215 y r o --2.3365 y r s --2.3365 y r t --1.4914 y r u --1.0990 y s a --2.1559 y s b --1.6245 y s c --0.6094 y s e --2.2529 y s f --2.5539 y s g --1.1922 y s h --1.0990 y s i --2.1559 y s k --1.6788 y s l --1.9518 y s m --2.1559 y s n --0.8681 y s o --1.4747 y s p --2.8549 y s q --2.5539 y s r --1.5762 y s s --0.7721 y s t --1.2317 y s u --1.7757 y s w --1.9434 y t a --1.7215 y t e --0.2021 y t h --1.7215 y t i --0.5754 y t o --1.6424 y t r --1.8976 y t u --1.6935 y t w --0.0257 y u n --1.6185 y u p --1.5863 y u s --2.2553 y u t --0.6628 y v a --0.5488 y v e --0.6628 y v i --0.5836 y v o --0.7379 y w a --0.5283 y w e --0.5748 y w h --0.8502 y w i --0.9920 y w o --2.0334 y w r --1.6335 y y a --0.5921 y y e --1.6335 y y i --0.1711 y y o --0.1761 y z e --1.2553 z a b --1.2553 z a d --0.7782 z a g --1.2553 z a n --0.4102 z a r --0.7782 z a t --1.2553 z a w --0.3010 z b u --1.0043 z e a --2.0043 z e b --0.3609 z e d --1.7033 z e f --2.0043 z e h --1.5272 z e i --2.0043 z e l --1.3054 z e m --1.0043 z e n --1.1012 z e o --2.0043 z e p --1.4023 z e r --1.7033 z e s --1.2262 z e t --1.7033 z e w --1.2553 z i e --0.6532 z i g --1.2553 z i l --0.2139 z i n --0.2762 z l e --0.3854 z l i --0.0235 z o n --1.5798 z o o --0.3010 z p l --0.3010 z t o --0.1249 z u r --0.9777 z z i --0.0746 z z l - -\end\ diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/speakerid/frontend.config.xml b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/speakerid/frontend.config.xml deleted file mode 100755 index aeea16ac..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/speakerid/frontend.config.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - - - - - - - - streamDataSource - preemphasizer - windower - fft - melFilterBank - dct - - - - - - streamDataSource - preemphasizer - windower - fft - - - - - - streamDataSource - preemphasizer - dither - windower - fft - plpFrequencyFilterBank - plpCepstrumProducer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/tools/audio/spectrogram.config.xml b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/tools/audio/spectrogram.config.xml deleted file mode 100755 index 8dba659a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/tools/audio/spectrogram.config.xml +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - streamDataSource - preemphasizer - windower - fft - - - - - - - - - - - - - - - - - cstreamDataSource - dither - cpreemphasizer - cwindower - cfft - melFilterBank - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/tools/endpoint/frontend.config.xml b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/tools/endpoint/frontend.config.xml deleted file mode 100755 index 7dd819b3..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/tools/endpoint/frontend.config.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - audioFileDataSource - dataBlocker - speechClassifier - speechMarker - wavWriter - - - - - - - - - - - - - - - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/tools/feature/frontend.config.xml b/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/tools/feature/frontend.config.xml deleted file mode 100755 index 7dc120c1..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/main/resources/edu/cmu/sphinx/tools/feature/frontend.config.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - - - - - streamDataSource - preemphasizer - windower - fft - melFilterBank - dct - - - - - - streamDataSource - preemphasizer - windower - fft - - - - - - streamDataSource - preemphasizer - windower - fft - plpFrequencyFilterBank - plpCepstrumProducer - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/alignment/SpeechAlignerTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/alignment/SpeechAlignerTest.java deleted file mode 100755 index 12a657b9..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/alignment/SpeechAlignerTest.java +++ /dev/null @@ -1,44 +0,0 @@ -/** - * Copyright 2014 Alpha Cephei Inc. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ -package edu.cmu.sphinx.alignment; - -import static java.util.Arrays.asList; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.contains; - -import java.util.List; - -import org.testng.annotations.Test; - -import edu.cmu.sphinx.util.Utilities; - -public class SpeechAlignerTest { - - @Test - public void shouldAlignText() { - align(asList("foo"), asList("bar"), -1); - align(asList("foo"), asList("foo"), 0); - align(asList("foo", "bar"), asList("foo"), 0); - align(asList("foo", "bar"), asList("bar"), 1); - align(asList("foo"), asList("foo", "bar"), 0, -1); - align(asList("bar"), asList("foo", "bar"), -1, 0); - align(asList("foo", "bar", "baz"), asList("foo", "baz"), 0, 2); - align(asList("foo", "bar", "42", "baz", "qux"), asList("42", "baz"), 2, - 3); - } - - private void align(List database, List query, - Integer... result) { - LongTextAligner aligner = new LongTextAligner(database, 1); - int[] alignment = aligner.align(query); - - assertThat(Utilities.asList(alignment), contains(result)); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/alignment/TextAlignerLargeTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/alignment/TextAlignerLargeTest.java deleted file mode 100755 index 0cefc643..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/alignment/TextAlignerLargeTest.java +++ /dev/null @@ -1,44 +0,0 @@ -package edu.cmu.sphinx.alignment; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.contains; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -import edu.cmu.sphinx.util.Utilities; - -public class TextAlignerLargeTest { - - private List database; - private LongTextAligner aligner; - - @BeforeClass - public void setUp() { - Random rng = new Random(42); - database = new ArrayList(); - String[] dictionary = new String[] {"foo", "bar", "baz", "quz"}; - for (int i = 0; i < 100000; ++i) - database.add(dictionary[rng.nextInt(dictionary.length)]); - aligner = new LongTextAligner(database, 3); - } - - @Test(invocationTimeOut = 10000, invocationCount = 1, enabled = false) - public void alignShortSequence() { - List query = database.subList(100, 200); - Integer[] ids = new Integer[query.size()]; - for (int i = 0; i < query.size(); ++i) - ids[i] = 100 + i; - assertThat(Utilities.asList(aligner.align(query)), contains(ids)); - } - - @Test(invocationTimeOut = 10000, invocationCount = 1, enabled = false) - public void alignLongSequence() { - List query = database.subList(1999, 8777); - assertThat(Utilities.asList(aligner.align(query)), contains(1)); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/alignment/TextAlignerSmallTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/alignment/TextAlignerSmallTest.java deleted file mode 100755 index 315d7a2a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/alignment/TextAlignerSmallTest.java +++ /dev/null @@ -1,72 +0,0 @@ -package edu.cmu.sphinx.alignment; - -import static java.util.Arrays.asList; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.contains; - -import java.io.IOException; -import java.net.URL; -import java.util.ArrayList; -import java.util.List; -import java.util.Scanner; - -import org.hamcrest.Matcher; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.DataProvider; -import org.testng.annotations.Test; - -import edu.cmu.sphinx.util.Utilities; - -public class TextAlignerSmallTest { - - @DataProvider(name = "words") - public static Object[][] createWords() { - return new Object[][] { - // No match. - { - asList("foo", "foo"), - contains(-1, -1)}, - // Align a single tuple. - { - asList("foo", "baz"), - contains(2, 3)}, - // Align disjoint tuples. - { - asList("foo", "bar", "foo", "bar", "baz", "42"), - contains(0, 1, 2, 4, 5, 6)}, - // Align overlapping tuples. - { - asList("foo", "bar", "foo", "baz", "bar"), - contains(0, 1, 2, 3, 4)}, - // { - // asList("foo", "bar", "foo", "x", "foo", "baz", "bar"), - // contains(0, 1, 2, -1, -1, 3, 4)}, - // { - // asList("foo", "bar", "foo", "foo", "baz", "bar", "42"), - // contains(0, 1, 2, -1, -1, -1)}, - }; - } - - private LongTextAligner aligner; - - @BeforeClass - public void setUp() throws IOException { - URL url = getClass().getResource("transcription-small.txt"); - ArrayList words = new ArrayList(); - Scanner scanner = new Scanner(url.openStream()); - while (scanner.hasNext()) { - words.add(scanner.next()); - } - scanner.close(); - aligner = new LongTextAligner(words, 2); - } - - @Test(dataProvider = "words") - public void align(List words, Matcher> matcher) { - assertThat(Utilities.asList(aligner.align(words)), matcher); - } - - @Test(enabled=false) - public void alignRange() { - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/alignment/UsEnglishWordExpanderTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/alignment/UsEnglishWordExpanderTest.java deleted file mode 100755 index 5b1df3a3..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/alignment/UsEnglishWordExpanderTest.java +++ /dev/null @@ -1,70 +0,0 @@ -package edu.cmu.sphinx.alignment; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; - -import java.util.List; - -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.DataProvider; -import org.testng.annotations.Test; - -import edu.cmu.sphinx.util.Utilities; - -public class UsEnglishWordExpanderTest { - - private static final Object[][] TEST_DATA = - { - {"# . no, $ convertion.", ". no $ convertion"}, - {"1, 2 3", "one two three"}, - {"the answer is 42,", "the answer is forty two"}, - {"587", "five hundred eighty seven"}, - {"1903", "one thousand nine hundred three"}, - {"12011", "twelve thousand eleven"}, - {"126166", - "one hundred twenty six thousand one hundred sixty six"}, - {"9 3/4", "nine and three fourth 's"}, - {"October 1st", "october first"}, - {"May the 4th be with you", "may the fourth be with you"}, - {"7-11", "seven to eleven"}, - {"12, 35", "twelve thirty five"}, - {"146%", "one hundred forty six percent"}, - {"320'000", "three hundred twenty thousand"}, - {"120,000", "one hundred twenty thousand"}, - {"$35,000", "thirty five thousand dollars"}, - {"$1000000", "one million dollars"}, - {"U.S. economy", "u s economy"}, - {"sweet home Greenbow, AL.", "sweet home greenbow alabama"}, - {"Henry I", "henry the first"}, - {"Chapter XVII", "chapter seventeen"}, - {"don't, doesn't, won't, can't", "don't doesn't won't can't"}, - {"I've we've", "i've we've"}, - {"I've we've it's", "i've we've it's"}, - {"Classics of 80s", "classics of eighties"}, - {"In 1880s", "in eighteen eighties"}, - {"Mulholland Dr.", "mulholland drive"}, - {"dr. Jekyll and Mr. Hyde.", - "doctor jekyll and mister hyde"}, - {"Mr. & Mrs. smith", "mister and missus smith"}, - {"St. Louis Cardinals", "saint louis cardinals"}, - {"St. Elmo's fire", "saint elmo's fire"}, - {"elm st.", "elm street"},}; - - private TextTokenizer expander; - - @BeforeMethod - public void setupMethod() { - expander = new USEnglishTokenizer(); - } - - @DataProvider(name = "data") - public Object[][] getData() { - return TEST_DATA; - } - - @Test(dataProvider = "data") - public void textToWords(String text, String expanded) { - List tokens = expander.expand(text); - assertThat(Utilities.join(tokens), equalTo(expanded)); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/api/LiveRecognizerTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/api/LiveRecognizerTest.java deleted file mode 100755 index 93912436..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/api/LiveRecognizerTest.java +++ /dev/null @@ -1,61 +0,0 @@ -package edu.cmu.sphinx.api; - -import static org.testng.AssertJUnit.assertEquals; - -import java.io.IOException; -import java.io.InputStream; - -import org.testng.annotations.Test; - -import edu.cmu.sphinx.result.WordResult; - -public class LiveRecognizerTest { - @Test - public void testLm() throws IOException { - Configuration configuration = new Configuration(); - - configuration.setAcousticModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us"); - configuration.setDictionaryPath("resource:/edu/cmu/sphinx/models/en-us/cmudict-en-us.dict"); - configuration.setLanguageModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us.lm.dmp"); - - StreamSpeechRecognizer recognizer = new StreamSpeechRecognizer(configuration); - InputStream stream = LiveRecognizerTest.class - .getResourceAsStream("/edu/cmu/sphinx/tools/bandwidth/10001-90210-01803.wav"); - stream.skip(44); - - // Simple recognition with generic model - recognizer.startRecognition(stream); - SpeechResult result = recognizer.getResult(); - - assertEquals("one zero zero zero one", result.getHypothesis()); - - WordResult word = result.getWords().get(0); - assertEquals("{one, 0.685, [820:1060]}", word.toString()); - } - - - @Test - public void testGram() throws IOException { - Configuration configuration = new Configuration(); - - configuration.setAcousticModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us"); - configuration.setDictionaryPath("resource:/edu/cmu/sphinx/models/en-us/cmudict-en-us.dict"); - configuration.setGrammarPath("resource:/edu/cmu/sphinx/jsgf/test/"); - configuration.setGrammarName("digits.grxml"); - configuration.setUseGrammar(true); - - StreamSpeechRecognizer recognizer = new StreamSpeechRecognizer(configuration); - InputStream stream = LiveRecognizerTest.class - .getResourceAsStream("/edu/cmu/sphinx/tools/bandwidth/10001-90210-01803.wav"); - stream.skip(44); - - // Simple recognition with generic model - recognizer.startRecognition(stream); - SpeechResult result = recognizer.getResult(); - - assertEquals("one zero zero zero one", result.getHypothesis()); - - WordResult word = result.getWords().get(0); - assertEquals("{one, 1.000, [840:1060]}", word.toString()); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/decoder/scorer/ScorerTests.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/decoder/scorer/ScorerTests.java deleted file mode 100755 index 0da97d94..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/decoder/scorer/ScorerTests.java +++ /dev/null @@ -1,122 +0,0 @@ -package edu.cmu.sphinx.decoder.scorer; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -import edu.cmu.sphinx.decoder.search.Token; -import edu.cmu.sphinx.frontend.*; -import edu.cmu.sphinx.frontend.databranch.DataBufferProcessor; -import edu.cmu.sphinx.frontend.endpoint.SpeechEndSignal; -import edu.cmu.sphinx.frontend.endpoint.SpeechStartSignal; -import edu.cmu.sphinx.util.props.ConfigurationManager; -import edu.cmu.sphinx.util.props.ConfigurationManagerUtils; - -/** - * Unit tests for the processing logic of the scorer implementations - * - * @author Holger Brandl - */ -public class ScorerTests { - - Scoreable testToken = new Token(null, 0.f, 0.f, 0.f, 0.f) { - - @Override - public float calculateScore(Data feature) { - return -1; - } - }; - - - @BeforeClass - public static void configureLogger() { - Logger.getLogger(ScorerTests.class.getSimpleName()).setLevel(Level.FINER); - } - - - @Test - public void waitUntilSpeechStart() { - List> scorerClasses = new ArrayList>(); - scorerClasses.add(SimpleAcousticScorer.class); - scorerClasses.add(ThreadedAcousticScorer.class); - - for (Class scorerClass : scorerClasses) { - System.err.println("testing: " + scorerClass.getSimpleName()); - DataBufferProcessor dummyFrontEnd = createDummyFrontEnd(); - - Map props = new HashMap(); - props.put(SimpleAcousticScorer.FEATURE_FRONTEND, dummyFrontEnd); - AcousticScorer scorer = ConfigurationManager.getInstance(scorerClass, props); - - int startBufferSize = dummyFrontEnd.getBufferSize(); - - scorer.allocate(); - scorer.startRecognition(); - - List dummyTokens = Arrays.asList(testToken); - for (int i = 0; i < 100; i++) - scorer.calculateScores(dummyTokens); - - Assert.assertTrue(dummyFrontEnd.getBufferSize() < (startBufferSize - 100)); - - scorer.stopRecognition(); - scorer.deallocate(); - } - } - - - private DataBufferProcessor createDummyFrontEnd() { - DataBufferProcessor bufferProc = ConfigurationManager.getInstance(DataBufferProcessor.class); - bufferProc.processDataFrame(new DataStartSignal(16000)); - - for (DoubleData doubleData : RandomDataProcessor.createFeatVectors(5, 16000, 0, 39, 10)) - bufferProc.processDataFrame(doubleData); - - bufferProc.processDataFrame(new SpeechStartSignal()); - for (DoubleData doubleData : RandomDataProcessor.createFeatVectors(3, 16000, 1000, 39, 10)) - bufferProc.processDataFrame(doubleData); - - bufferProc.processDataFrame(new SpeechEndSignal()); - for (DoubleData doubleData : RandomDataProcessor.createFeatVectors(5, 16000, 2000, 39, 10)) - bufferProc.processDataFrame(doubleData); - - bufferProc.processDataFrame(new DataEndSignal(123)); - - return bufferProc; - } - - - @Test - public void testThreadedScorerDeallocation() throws InterruptedException { - Map props = new HashMap(); - DataBufferProcessor dummyFrontEnd = createDummyFrontEnd(); - - props.put(SimpleAcousticScorer.FEATURE_FRONTEND, dummyFrontEnd); - props.put(ThreadedAcousticScorer.PROP_NUM_THREADS, 4); - props.put(ConfigurationManagerUtils.GLOBAL_COMMON_LOGLEVEL, "FINEST"); - AcousticScorer scorer = ConfigurationManager.getInstance(ThreadedAcousticScorer.class, props); - - scorer.allocate(); - scorer.startRecognition(); - - List dummyTokens = Arrays.asList(testToken); - - // score around a little - scorer.calculateScores(dummyTokens); - - scorer.stopRecognition(); - scorer.deallocate(); - - Thread.sleep(1000); - - // ensure that all scoring threads have died - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/decoder/search/test/PartitionerTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/decoder/search/test/PartitionerTest.java deleted file mode 100755 index f0034b14..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/decoder/search/test/PartitionerTest.java +++ /dev/null @@ -1,129 +0,0 @@ -package edu.cmu.sphinx.decoder.search.test; - -import java.util.Arrays; -import java.util.Collections; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Random; - -import org.testng.Assert; -import org.testng.annotations.Test; - -import edu.cmu.sphinx.decoder.scorer.Scoreable; -import edu.cmu.sphinx.decoder.search.Partitioner; -import edu.cmu.sphinx.decoder.search.Token; - -public class PartitionerTest { - - public void testSorted(Token[] tokens, int p) { - for (int i = 0; i < p; i++) { - Assert.assertTrue(tokens[i].getScore() >= tokens[p].getScore()); - } - for (int i = p; i < tokens.length; i++) { - Assert.assertTrue(tokens[i].getScore() <= tokens[p].getScore()); - } - } - - private void performTestPartitionSizes(int absoluteBeamWidth, - int tokenListSize, boolean tokenListLarger) { - - Random random = new Random(System.currentTimeMillis()); - Partitioner partitioner = new Partitioner(); - - Token parent = new Token(null, 0); - Token[] tokens = new Token[tokenListSize]; - - for (int i = 0; i < tokens.length; i++) { - float logTotalScore = random.nextFloat(); - tokens[i] = new Token(parent, null, logTotalScore, 0.0f, 0.0f, i); - } - - final int r = partitioner.partition(tokens, tokens.length, - absoluteBeamWidth); - - if (tokenListLarger) { - Assert.assertEquals(r, absoluteBeamWidth - 1); - } else { - Assert.assertEquals (r, tokenListSize - 1); - } - - List firstList = new LinkedList(); - if (r >= 0) { - float lowestScore = tokens[r].getScore(); - - for (int i = 0; i <= r; i++) { - Assert.assertTrue(tokens[i].getScore() >= lowestScore); - firstList.add(tokens[i]); - } - for (int i = r + 1; i < tokens.length; i++) { - Assert.assertTrue(lowestScore > tokens[i].getScore()); - } - - Collections.sort(firstList, Scoreable.COMPARATOR); - - List secondList = Arrays.asList(tokens); - Collections.sort(secondList, Scoreable.COMPARATOR); - - for (Iterator i1 = firstList.iterator(), i2 = secondList - .iterator(); i1.hasNext() && i2.hasNext();) { - Token t1 = i1.next(); - Token t2 = i2.next(); - Assert.assertEquals(t1, t2); - } - } - } - - @Test - public void testPartitionOrders() { - int p; - Token[] tokens = new Token[100000]; - Partitioner partitioner = new Partitioner(); - - for (int i = 0; i < 100000; i++) - tokens[i] = new Token(null, null, 1 - i, 0, 0, 0); - p = partitioner.partition(tokens, 100000, 3000); - Assert.assertEquals(p, 2999); - testSorted(tokens, p); - - for (int i = 0; i < 100000; i++) - tokens[i] = new Token(null, null, i, 0, 0, 0); - p = partitioner.partition(tokens, 100000, 3000); - Assert.assertEquals(p, 2999); - testSorted(tokens, p); - - for (int i = 0; i < 100000; i++) - tokens[i] = new Token(null, null, 0, 0, 0, 0); - p = partitioner.partition(tokens, 100000, 3000); - Assert.assertEquals(p, 2999); - testSorted(tokens, p); - - for (int i = 0; i < 100000; i++) - tokens[i] = new Token(null, null, (float) Math.random(), 0, 0, 0); - p = partitioner.partition(tokens, 100000, 3000); - Assert.assertEquals(p, 2999); - testSorted(tokens, p); - } - - @Test - public void testPartitionSizes() { - - int absoluteBeamWidth = 1500; - int tokenListSize = 3000; - - // Test 1 : (tokenListSize > absoluteBeamWidth) - performTestPartitionSizes(absoluteBeamWidth, tokenListSize, true); - - // Test 2 : (tokenListSize == absoluteBeamWidth) - tokenListSize = absoluteBeamWidth; - performTestPartitionSizes(absoluteBeamWidth, tokenListSize, false); - - // Test 3 : (tokenListSize < absoluteBeamWidth) - tokenListSize = 1000; - performTestPartitionSizes(absoluteBeamWidth, tokenListSize, false); - - // Test 4 : (tokenListSize == 0) - tokenListSize = 0; - performTestPartitionSizes(absoluteBeamWidth, tokenListSize, false); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/frontend/AudioDataSourcesTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/frontend/AudioDataSourcesTest.java deleted file mode 100755 index 4bb5912d..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/frontend/AudioDataSourcesTest.java +++ /dev/null @@ -1,123 +0,0 @@ -package edu.cmu.sphinx.frontend; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.instanceOf; -import static org.testng.Assert.assertFalse; - -import java.io.File; -import java.io.IOException; -import java.io.PrintWriter; -import java.net.URISyntaxException; - -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -import edu.cmu.sphinx.frontend.util.AudioFileDataSource; -import edu.cmu.sphinx.frontend.util.AudioFileProcessListener; -import edu.cmu.sphinx.frontend.util.ConcatAudioFileDataSource; -import edu.cmu.sphinx.util.props.ConfigurationManager; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; - - -/** - * Some small unit tests to check whether the AudioFileDataSource and the - * ConcatAudioFileDataSource are working properly. - */ -public class AudioDataSourcesTest { - - private int numFileStarts; - private int numFileEnds; - - @BeforeMethod - public void setUp() { - numFileStarts = 0; - numFileEnds = 0; - } - - @Test - public void testSimpleFileSources() throws DataProcessingException, - URISyntaxException { - // TODO: test.ogg - runAssert("test.wav"); - runAssert("test.aiff"); - runAssert("test.au"); - } - - @Test - public void test8KhzSource() throws DataProcessingException, - URISyntaxException { - AudioFileDataSource dataSource = ConfigurationManager - .getInstance(AudioFileDataSource.class); - - // Test simple WAV. - File file = new File(getClass().getResource("test8k.wav").toURI()); - dataSource.setAudioFile(file, null); - assertThat(dataSource.getData(), instanceOf(DataStartSignal.class)); - Data d = dataSource.getData(); - assertThat(dataSource.getData(), instanceOf(DoubleData.class)); - assertThat(((DoubleData) d).getSampleRate(), equalTo(8000)); - - while ((d = dataSource.getData()) instanceof DoubleData); - assertThat(d, instanceOf(DataEndSignal.class)); - } - - @Test - public void testConcatDataSource() throws DataProcessingException, - IOException, URISyntaxException { - ConcatAudioFileDataSource dataSource = ConfigurationManager - .getInstance(ConcatAudioFileDataSource.class); - - dataSource.addNewFileListener(new AudioFileProcessListener() { - - public void audioFileProcStarted(File audioFile) { - numFileStarts++; - } - - public void audioFileProcFinished(File audioFile) { - numFileEnds++; - } - - public void newProperties(PropertySheet ps) - throws PropertyException { - } - }); - - File tmpFile = File.createTempFile(getClass().getName(), ".drv"); - tmpFile.deleteOnExit(); - PrintWriter pw = new PrintWriter(tmpFile); - String path = new File(getClass().getResource("test.wav").toURI()).getPath(); - pw.println(path); - pw.println(path); - pw.print(path); - assertFalse(pw.checkError()); - pw.close(); - - dataSource.setBatchFile(tmpFile); - assertThat(dataSource.getData(), instanceOf(DataStartSignal.class)); - assertThat(dataSource.getData(), instanceOf(DoubleData.class)); - - Data d; - while ((d = dataSource.getData()) instanceof DoubleData); - assertThat(d, instanceOf(DataEndSignal.class)); - - assertThat(numFileStarts, equalTo(3)); - assertThat(numFileEnds, equalTo(3)); - } - - private void runAssert(String fileName) throws DataProcessingException, - URISyntaxException { - AudioFileDataSource dataSource = ConfigurationManager - .getInstance(AudioFileDataSource.class); - - File file = new File(getClass().getResource(fileName).toURI()); - dataSource.setAudioFile(file, null); - assertThat(dataSource.getData(), instanceOf(DataStartSignal.class)); - assertThat(dataSource.getData(), instanceOf(DoubleData.class)); - - Data d; - while ((d = dataSource.getData()) instanceof DoubleData); - assertThat(d, instanceOf(DataEndSignal.class)); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/frontend/DataBlockerTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/frontend/DataBlockerTest.java deleted file mode 100755 index a5f13560..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/frontend/DataBlockerTest.java +++ /dev/null @@ -1,144 +0,0 @@ -package edu.cmu.sphinx.frontend; - -import java.util.ArrayList; -import java.util.List; - -import org.testng.Assert; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -import edu.cmu.sphinx.frontend.BaseDataProcessor; -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.frontend.DataBlocker; -import edu.cmu.sphinx.frontend.DataEndSignal; -import edu.cmu.sphinx.frontend.DataProcessingException; -import edu.cmu.sphinx.frontend.DataStartSignal; -import edu.cmu.sphinx.frontend.DoubleData; - -/** Some small tests which ensure that the DataBlocker works properly. */ -public class DataBlockerTest extends BaseDataProcessor { - - private List input; - - - @BeforeMethod - public void setUp() { - input = new ArrayList(); - } - - - @Test - public void testLongInput() throws DataProcessingException { - int sampleRate = 1000; - - input.add(new DataStartSignal(sampleRate)); - - input.addAll(createDataInput(1000, 1000, sampleRate, 0)); // create one second of data sampled with 1kHz - input.add(new DataEndSignal(0)); - - Assert.assertTrue(hasIncreasingOrder(collectOutput(100), 1000)); - } - - - @Test - public void testUsualInput() throws DataProcessingException { - int sampleRate = 1000; - - input.add(new DataStartSignal(sampleRate)); - - input.addAll(createDataInput(600, 120, sampleRate, 0)); - input.add(new DataEndSignal(0)); - - List output = collectOutput(100); - - Assert.assertEquals(output.size(), 6); - Assert.assertEquals(201, ((DoubleData) output.get(2)).getFirstSampleNumber()); - Assert.assertTrue(hasIncreasingOrder(output, 600)); - } - - - @Test - public void skipLastSamples() throws DataProcessingException { - int sampleRate = 1000; - - input.add(new DataStartSignal(sampleRate)); - input.addAll(createDataInput(500, 500, sampleRate, 0)); - input.addAll(createDataInput(300, 300, sampleRate, 500)); - input.add(new DataEndSignal(0)); - - List output = collectOutput(250); - - Assert.assertEquals(output.size(), 3); - Assert.assertEquals(501, ((DoubleData) output.get(2)).getFirstSampleNumber()); - Assert.assertTrue(hasIncreasingOrder(output, 750)); - } - - - /** - * Returns the processed Data output. - * - * @return an Data object that has been processed by this DataProcessor - * @throws edu.cmu.sphinx.frontend.DataProcessingException - * if a data processor error occurs - */ - @Override - public Data getData() throws DataProcessingException { - return input.remove(0); - } - - - public List collectOutput(double blocSizeMs) throws DataProcessingException { - DataBlocker dataBlocker = new DataBlocker(blocSizeMs); - dataBlocker.setPredecessor(this); - - List output = new ArrayList(); - - while (true) { - Data d = dataBlocker.getData(); - if (d instanceof DoubleData) - output.add(d); - if (d instanceof DataEndSignal) - return output; - } - } - - - public static List createDataInput(int numSamples, int blockSize, int sampleRate, int offSet) { - List datas = new ArrayList(); - - double counter = 1; - for (int i = 0; i < numSamples / blockSize; i++) { - double[] values = new double[blockSize]; - datas.add(new DoubleData(values, sampleRate, (long) counter + offSet)); - - for (int j = 0; j < values.length; j++) - values[j] = counter++ + offSet; - } - - return datas; - } - - - /** - * Tests whether the samples of all Datas in the list are ordered in increasing order with +1 - * increments. - */ - public static boolean hasIncreasingOrder(List output, int lastValue) { - int dataCounter = 0; - - for (Data data : output) { - if (data instanceof DoubleData) { - DoubleData dd = (DoubleData) data; - - for (int i = 0; i < dd.getValues().length; i++) { - if ((dataCounter + 1) == dd.getValues()[i]) - dataCounter++; - else - return false; - } - } - } - - return dataCounter == lastValue; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/frontend/FrontendElementTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/frontend/FrontendElementTest.java deleted file mode 100755 index 1715b6e9..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/frontend/FrontendElementTest.java +++ /dev/null @@ -1,120 +0,0 @@ -package edu.cmu.sphinx.frontend; - -import static java.lang.Double.parseDouble; -import static java.lang.Float.parseFloat; -import static java.lang.Integer.parseInt; -import static java.lang.Math.abs; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.closeTo; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.instanceOf; - -import java.io.*; -import java.net.URL; - -import org.testng.Assert; -import org.testng.annotations.DataProvider; -import org.testng.annotations.Test; - -import edu.cmu.sphinx.frontend.endpoint.SpeechEndSignal; -import edu.cmu.sphinx.frontend.endpoint.SpeechStartSignal; -import edu.cmu.sphinx.frontend.util.AudioFileDataSource; -import edu.cmu.sphinx.util.props.ConfigurationManager; - - -public class FrontendElementTest { - - @DataProvider(name = "frontendProvider") - public Object[][] provide() { - return new Object[][] { - { - "preempTest", - "after-preemp.dump"}, - { - "windowTest", - "after-window.dump"}, - { - "fftTest", - "after-fft.dump"}, - { - "melTest", - "after-mel.dump"}, - { - "dctTest", - "after-dct.dump"}, - { - "cmnTest", - "after-cmn.dump"}, - { - "feTest", - "after-feature.dump"}}; - } - - @Test(dataProvider = "frontendProvider") - public void testElement(String frontendName, String name) - throws IOException { - URL url = getClass().getResource("frontend.xml"); - ConfigurationManager cm = new ConfigurationManager(url); - - AudioFileDataSource ds = cm.lookup("audioFileDataSource"); - ds.setAudioFile(getClass().getResource("test-feat.wav"), null); - - FrontEnd frontend = cm.lookup(frontendName); - compareDump(frontend, name); - } - - private void compareDump(FrontEnd frontend, String name) - throws NumberFormatException, DataProcessingException, IOException { - InputStream stream = getClass().getResource(name).openStream(); - Reader reader = new InputStreamReader(stream); - BufferedReader br = new BufferedReader(reader); - String line; - - // To dump data next time -// while (true) { -// Data data = frontend.getData(); -// if (data == null) -// break; -// } -// if (false) - - while (null != (line = br.readLine())) { - Data data = frontend.getData(); - - if (line.startsWith("DataStartSignal")) - assertThat(data, instanceOf(DataStartSignal.class)); - if (line.startsWith("DataEndSignal")) - assertThat(data, instanceOf(DataEndSignal.class)); - if (line.startsWith("SpeechStartSignal")) - assertThat(data, instanceOf(SpeechStartSignal.class)); - if (line.startsWith("SpeechEndSignal")) - assertThat(data, instanceOf(SpeechEndSignal.class)); - - if (line.startsWith("Frame")) { - assertThat(data, instanceOf(DoubleData.class)); - - double[] values = ((DoubleData) data).getValues(); - String[] tokens = line.split(" "); - - assertThat(values.length, equalTo(parseInt(tokens[1]))); - - for (int i = 0; i < values.length; i++) - assertThat(values[i], - closeTo(parseDouble(tokens[2 + i]), - abs(0.01 * values[i]))); - } - - if (line.startsWith("FloatFrame")) { - String[] tokens = line.split(" "); - Assert.assertTrue(data instanceof FloatData); - float[] values = ((FloatData) data).getValues(); - Assert.assertEquals(values.length, - (int) Integer.valueOf(tokens[1])); - for (int i = 0; i < values.length; i++) - assertThat(Double.valueOf(values[i]), - closeTo(parseFloat(tokens[2 + i]), - abs(0.01 * values[i]))); - } - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/frontend/RandomDataProcessor.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/frontend/RandomDataProcessor.java deleted file mode 100755 index 1d310e1d..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/frontend/RandomDataProcessor.java +++ /dev/null @@ -1,97 +0,0 @@ -package edu.cmu.sphinx.frontend; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -import org.testng.annotations.BeforeMethod; - -import edu.cmu.sphinx.frontend.BaseDataProcessor; -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.frontend.DataProcessingException; -import edu.cmu.sphinx.frontend.DoubleData; - -/** - * A DataProcessor implemenation which can be used to setup simple unit-tests for other DataProcessors. Addtionally some - * static utility methods which should ease unit-testing of DataProcessors are provided by this class. - * - * @author Holger Brandl - */ -public abstract class RandomDataProcessor extends BaseDataProcessor { - - public static Random r = new Random(123); - - protected List input; - - - @BeforeMethod - public void setUp() { - input = new ArrayList(); - } - - - @Override - public Data getData() throws DataProcessingException { - return input.isEmpty() ? null : input.remove(0); - } - - - public List collectOutput(BaseDataProcessor dataProc) throws DataProcessingException { - dataProc.setPredecessor(this); - - List output = new ArrayList(); - - Data d; - while ((d = dataProc.getData()) != null) { - output.add(d); - } - - return output; - } - - - public static List createFeatVectors(double lengthSec, int sampleRate, long startSample, int featDim, double shiftMs) { - int numFrames = (int) Math.ceil((lengthSec * 1000) / shiftMs); - List datas = new ArrayList(numFrames); - - long curStartSample = startSample; - long shiftSamples = ms2samples((int) shiftMs, sampleRate); - for (int i = 0; i < numFrames; i++) { - double[] values = createRandFeatureVector(featDim, null, null); - datas.add(new DoubleData(values, sampleRate, curStartSample)); - - curStartSample += shiftSamples; - } - - return datas; - } - - - public static double[] createRandFeatureVector(int featDim, double[] mean, double[] variance) { - if (mean == null) { - mean = new double[featDim]; - } - - if (variance == null) { - variance = new double[featDim]; - for (int i = 0; i < variance.length; i++) { - variance[i] = 1; - } - } - - assert featDim == mean.length && featDim == variance.length; - - double[] updBlock = new double[featDim]; - - for (int i = 0; i < updBlock.length; i++) { - updBlock[i] = mean[i] + variance[i] * r.nextDouble(); // *10 to get better debuggable (sprich: merkbarer) values - } - - return updBlock; - } - - - public static long ms2samples(double ms, int sampleRate) { - return Math.round(sampleRate * ms / 1000); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/frontend/RandomSampleRepeater.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/frontend/RandomSampleRepeater.java deleted file mode 100755 index f8334c29..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/frontend/RandomSampleRepeater.java +++ /dev/null @@ -1,301 +0,0 @@ -package edu.cmu.sphinx.frontend; - -import java.util.Random; -import java.util.logging.Logger; - -import org.testng.Assert; -import org.testng.annotations.Test; - -import edu.cmu.sphinx.frontend.BaseDataProcessor; -import edu.cmu.sphinx.frontend.Data; -import edu.cmu.sphinx.frontend.DataProcessingException; -import edu.cmu.sphinx.frontend.DataStartSignal; -import edu.cmu.sphinx.frontend.DoubleData; -import edu.cmu.sphinx.frontend.FloatData; -import edu.cmu.sphinx.util.props.ConfigurationManager; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Boolean; -import edu.cmu.sphinx.util.props.S4Double; -import edu.cmu.sphinx.util.props.S4Integer; - -/** - * A DataProcessor which inserts short speech snippets with variable length into a speech stream. The snippets are takes - * from the local neighborhood of the insertion point. The insertion behavior satisfies a uniform distribution with a - * user defined width. Additionally a insertion of can be enforced at the beginning of the stream. - * - * The purpose of this component is to randomize data to blow a small set of data up to a larger one. - *

    - * This component should be put into the processing chain AFTER the SpeechClassifier or BEFORE a DataBlocker. The reason - * for that is, that the current implementation generates blocks with different lengths which would affect the results - * of the SpeechClassifier. - * - * @author Holger Brandl - */ -public class RandomSampleRepeater extends BaseDataProcessor { - - /** The maximal value which could be added to the signal */ - @S4Boolean(defaultValue = false) - public static final String PROP_RAND_STREAM_START = "forceRandStreamStart"; - private boolean randStreamStart; - - - /** - * The maximal number of milliseconds which can be repeated using this randomizer. This number has to smaller than - * the length of the incoming data-blocks, because currently this class does not support data-buffering. - */ - @S4Double(defaultValue = 0.0) - public static final String PROP_MAX_REAPTED_MS = "maxRepeatedMs"; - private double maxRepeatedMs; - private long maxRepeatedSamples = -1; - - - /** - * The property about the width of the uniform distribution which determines the distance between - * different repeated-sample-insertion-points. - */ - @S4Double(defaultValue = 100.0) - public static final String PROP_UNIFORM_DIST_WIDTH = "uDistWidthSec"; - private double uDistWidthSec; - private long uDistWidthSamples = -1; - - - /** - * The property about using random seed or not for the randomization process. if not the stream - * will be randomized every time in the same manner. - */ - @S4Boolean(defaultValue = true) - public static final String PROP_USE_RANDSEED = "useRandSeed"; - private boolean useRandSeed; - - - /** The property for the sample rate. */ - @S4Integer(defaultValue = 16000) - public static final String PROP_SAMPLE_RATE = "sampleRate"; - private int sampleRate; - - - /** The random generator used to compute the insertion points. */ - private Random r; - private Logger logger; - - private long nextInsertionPoint = 0; - private long numInsertedSamples = 0; - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.frontend.DataProcessor#initialize(edu.cmu.sphinx.frontend.CommonConfig) - */ - @Override - public void initialize() { - super.initialize(); - - if (useRandSeed) - r = new Random(); - else - r = new Random(12345); - - uDistWidthSamples = RandomDataProcessor.ms2samples((int) (uDistWidthSec * 1000), sampleRate); - maxRepeatedSamples = RandomDataProcessor.ms2samples((int) (maxRepeatedMs), sampleRate); - } - - - private long computeNextInsertionPoint() { - // compute the next number in samples - - int stepWidth = r.nextInt((int) uDistWidthSamples); - return stepWidth + nextInsertionPoint; - } - - - public void prepareForNewStream() { - if (randStreamStart) - nextInsertionPoint = 0; - else - nextInsertionPoint = computeNextInsertionPoint(); - - // reset the number of inserted samples - numInsertedSamples = 0; - } - - - /** - * Returns the next DoubleData object, which is a dithered version of the input - * - * @return the next available DoubleData object, or null if no Data is available - * @throws edu.cmu.sphinx.frontend.DataProcessingException - * if a data processing error occurred - */ - @Override - public Data getData() throws DataProcessingException { - Data input = getPredecessor().getData(); // get the spectrum - - if (input instanceof DataStartSignal) - prepareForNewStream(); - - if (input != null && maxRepeatedMs != 0) { - if (input instanceof DoubleData || input instanceof FloatData) { - input = process(input); - } - } - - return input; - } - - - /** - * Process data, adding dither - * - * @param input a MelSpectrum frame - * @return a mel Cepstrum frame - */ - private DoubleData process(Data input) throws IllegalArgumentException { - assert input instanceof DoubleData; - - double[] inFeatures; - - DoubleData doubleData = (DoubleData) input; - assert sampleRate == doubleData.getSampleRate(); - - inFeatures = doubleData.getValues(); - - // check wether we reached the next insertion point and repeat some parts of the input part if necessary - double[] extFeatures; - long firstSampleNumber = doubleData.getFirstSampleNumber() + numInsertedSamples; - long lastSampleNumber = doubleData.getFirstSampleNumber() + doubleData.getValues().length - 1; - - if (nextInsertionPoint >= doubleData.getFirstSampleNumber() && nextInsertionPoint <= lastSampleNumber) { - int insertLength = Math.min(r.nextInt((int) maxRepeatedSamples) + 1, inFeatures.length); - - // make sure that after insertion the block-length does not exceed 160 samples because with more SpeechClassifierNT will fail - assert doubleData.getValues().length + insertLength <= 160 : "block too large for next SpeechClassifier"; - - - extFeatures = new double[insertLength + inFeatures.length]; - - logger.fine("RSR: repeat snippet with length " + insertLength + " at position " + nextInsertionPoint); - - // copy the existing block into the new array and replicate the desired snippet inbetween - int startIndex = (int) (nextInsertionPoint - doubleData.getFirstSampleNumber()); - - System.arraycopy(inFeatures, 0, extFeatures, 0, startIndex); - System.arraycopy(inFeatures, 0, extFeatures, startIndex, insertLength); - System.arraycopy(inFeatures, startIndex, extFeatures, startIndex + insertLength, inFeatures.length - startIndex); - numInsertedSamples += insertLength; - nextInsertionPoint = computeNextInsertionPoint(); - } else { - extFeatures = inFeatures; - } - - - DoubleData extendedData = new DoubleData(extFeatures, doubleData.getSampleRate(), - firstSampleNumber); - - return extendedData; - } - - - /* - * (non-Javadoc) - * - * @see edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util.props.PropertySheet) - */ - @Override - public void newProperties(PropertySheet ps) throws PropertyException { - super.newProperties(ps); - - logger = ps.getLogger(); - maxRepeatedMs = ps.getDouble(RandomSampleRepeater.PROP_MAX_REAPTED_MS); - uDistWidthSec = ps.getDouble(RandomSampleRepeater.PROP_UNIFORM_DIST_WIDTH); - useRandSeed = ps.getBoolean(RandomSampleRepeater.PROP_USE_RANDSEED); - randStreamStart = ps.getBoolean(RandomSampleRepeater.PROP_RAND_STREAM_START); - sampleRate = ps.getInt(RandomSampleRepeater.PROP_SAMPLE_RATE); - - initialize(); - } - - - @Test - public void testInsertAtZero() { - RandomSampleRepeater rsr = ConfigurationManager.getInstance(RandomSampleRepeater.class); - rsr.randStreamStart = true; - rsr.useRandSeed = false; - - rsr.initialize(); - rsr.maxRepeatedSamples = 5; - rsr.numInsertedSamples = 20; - rsr.nextInsertionPoint = 5; - - // create a dummy DoubleData - double[] data = new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; - DoubleData dd = new DoubleData(data, 16000, 0); - - DoubleData extData = rsr.process(dd); - - double[] expectedData = new double[]{1, 2, 3, 4, 5, 1, 2, 6, 7, 8, 9, 10}; - Assert.assertEquals(extData.getFirstSampleNumber(), 20, 0); - Assert.assertEquals(extData.getValues().length, expectedData.length); - - for (int i = 0; i < expectedData.length; i++) { - Assert.assertEquals(extData.getValues()[i], expectedData[i], 0); - } - } - - - @Test - public void testInsertAt4() { - RandomSampleRepeater rsr = ConfigurationManager.getInstance(RandomSampleRepeater.class); - rsr.randStreamStart = true; - rsr.useRandSeed = false; - - rsr.initialize(); - rsr.maxRepeatedSamples = 3; - rsr.numInsertedSamples = 20; - rsr.nextInsertionPoint = 5; - - // create a dummy DoubleData - double[] data = new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; - DoubleData dd = new DoubleData(data, 16000, 0); - - DoubleData extData = rsr.process(dd); - - double[] expectedData = new double[]{1, 2, 3, 4, 5, 1, 2, 6, 7, 8, 9, 10}; - Assert.assertEquals(extData.getFirstSampleNumber(), 20, 0); - Assert.assertEquals(extData.getValues().length, expectedData.length); - - for (int i = 0; i < expectedData.length; i++) { - Assert.assertEquals(extData.getValues()[i], expectedData[i], 0); - } - } - - - @Test - public void testInsertAtBlockEnd() { - RandomSampleRepeater rsr = ConfigurationManager.getInstance(RandomSampleRepeater.class); - rsr.randStreamStart = true; - rsr.useRandSeed = false; - - rsr.initialize(); - rsr.maxRepeatedSamples = 3; - rsr.numInsertedSamples = 20; - rsr.nextInsertionPoint = 9; - - // create a dummy DoubleData - double[] data = new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; - DoubleData dd = new DoubleData(data, 16000, 0); - - DoubleData extData = rsr.process(dd); - - double[] expectedData = new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 10}; - Assert.assertEquals(extData.getFirstSampleNumber(), 20, 0); - Assert.assertEquals(extData.getValues().length, expectedData.length); - - for (int i = 0; i < expectedData.length; i++) { - Assert.assertEquals(extData.getValues()[i], expectedData[i], 0); - } - } - - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/frontend/SpeechMarkerTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/frontend/SpeechMarkerTest.java deleted file mode 100755 index 50bc42d2..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/frontend/SpeechMarkerTest.java +++ /dev/null @@ -1,70 +0,0 @@ -package edu.cmu.sphinx.frontend; - -import static edu.cmu.sphinx.util.props.ConfigurationManager.getInstance; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.instanceOf; - -import java.util.ArrayList; -import java.util.List; - -import org.hamcrest.Matchers; -import org.testng.annotations.Test; - -import edu.cmu.sphinx.frontend.endpoint.*; -import edu.cmu.sphinx.util.props.PropertyException; - - -/** - * DOCUMENT ME! - * - * @author Holger Brandl - */ -public class SpeechMarkerTest extends RandomDataProcessor { - - public BaseDataProcessor createDataFilter(boolean mergeSpeechSegments) { - try { - SpeechMarker speechMarker = getInstance(SpeechMarker.class); - speechMarker.initialize(); - - return speechMarker; - - } catch (PropertyException e) { - e.printStackTrace(); - } - - return null; - } - - /** - * Test whether the speech marker is able to handle cases in which an - * DataEndSignal occurs somewhere after a SpeechStartSignal. This is might - * occur if the microphone is stopped while someone is speaking. - */ - @Test - public void testEndWithoutSilence() throws DataProcessingException { - int sampleRate = 1000; - input.add(new DataStartSignal(sampleRate)); - input.addAll(createClassifiedSpeech(sampleRate, 2., true)); - input.add(new DataEndSignal(-2)); - - List results = collectOutput(createDataFilter(false)); - - assertThat(results, Matchers.hasSize(104)); - assertThat(results.get(0), instanceOf(DataStartSignal.class)); - assertThat(results.get(1), instanceOf(SpeechStartSignal.class)); - assertThat(results.get(102), instanceOf(SpeechEndSignal.class)); - assertThat(results.get(103), instanceOf(DataEndSignal.class)); - } - - private List createClassifiedSpeech(int sampleRate, - double lengthSec, - boolean isSpeech) { - List datas = new ArrayList(); - List featVecs = createFeatVectors(1, sampleRate, 0, 10, 10); - - for (DoubleData featVec : featVecs) - datas.add(new SpeechClassifiedData(featVec, isSpeech)); - - return datas; - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ArcSortTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ArcSortTest.java deleted file mode 100755 index d52e7c21..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ArcSortTest.java +++ /dev/null @@ -1,145 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.fst; - -import static edu.cmu.sphinx.fst.operations.ArcSort.apply; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.not; - -import org.testng.annotations.Test; - -import edu.cmu.sphinx.fst.operations.ILabelCompare; -import edu.cmu.sphinx.fst.operations.OLabelCompare; -import edu.cmu.sphinx.fst.semiring.TropicalSemiring; - -public class ArcSortTest { - - /** - * Create an output label sorted fst as per the example at - * http://www.openfst.org/twiki/bin/view/FST/ArcSortDoc - * - * @return the created fst - */ - private Fst createOsorted() { - Fst fst = new Fst(new TropicalSemiring()); - - State s1 = new State(0.f); - State s2 = new State(0.f); - State s3 = new State(0.f); - - // State 0 - fst.addState(s1); - s1.addArc(new Arc(4, 1, 0.f, s3)); - s1.addArc(new Arc(5, 2, 0.f, s3)); - s1.addArc(new Arc(2, 3, 0.f, s2)); - s1.addArc(new Arc(1, 4, 0.f, s2)); - s1.addArc(new Arc(3, 5, 0.f, s2)); - - // State 1 - fst.addState(s2); - s2.addArc(new Arc(3, 1, 0.f, s3)); - s2.addArc(new Arc(1, 2, 0.f, s3)); - s2.addArc(new Arc(2, 3, 0.f, s2)); - - // State 2 (final) - fst.addState(s3); - - return fst; - } - - /** - * Create an input label sorted fst as per the example at - * http://www.openfst.org/twiki/bin/view/FST/ArcSortDoc - * - * @return the created fst - */ - private Fst createIsorted() { - Fst fst = new Fst(new TropicalSemiring()); - - State s1 = new State(0.f); - State s2 = new State(0.f); - State s3 = new State(0.f); - - // State 0 - fst.addState(s1); - s1.addArc(new Arc(1, 4, 0.f, s2)); - s1.addArc(new Arc(2, 3, 0.f, s2)); - s1.addArc(new Arc(3, 5, 0.f, s2)); - s1.addArc(new Arc(4, 1, 0.f, s3)); - s1.addArc(new Arc(5, 2, 0.f, s3)); - - // State 1 - fst.addState(s2); - s2.addArc(new Arc(1, 2, 0.f, s3)); - s2.addArc(new Arc(2, 3, 0.f, s2)); - s2.addArc(new Arc(3, 1, 0.f, s3)); - - // State 2 (final) - fst.addState(s3); - - return fst; - } - - /** - * Create an unsorted fst as per the example at - * http://www.openfst.org/twiki/bin/view/FST/ArcSortDoc - * - * @return the created fst - */ - private Fst createUnsorted() { - Fst fst = new Fst(new TropicalSemiring()); - - State s1 = new State(0.f); - State s2 = new State(0.f); - State s3 = new State(0.f); - - // State 0 - fst.addState(s1); - s1.addArc(new Arc(1, 4, 0.f, s2)); - s1.addArc(new Arc(3, 5, 0.f, s2)); - s1.addArc(new Arc(2, 3, 0.f, s2)); - s1.addArc(new Arc(5, 2, 0.f, s3)); - s1.addArc(new Arc(4, 1, 0.f, s3)); - - // State 1 - fst.addState(s2); - s2.addArc(new Arc(2, 3, 0.f, s2)); - s2.addArc(new Arc(3, 1, 0.f, s3)); - s2.addArc(new Arc(1, 2, 0.f, s3)); - - // State 2 (final) - fst.addState(s3); - - return fst; - } - - @Test - public void testArcSort() { - // Input label sort test - Fst fst1 = createUnsorted(); - Fst fst2 = createIsorted(); - assertThat(fst1, not(equalTo(fst2))); - apply(fst1, new ILabelCompare()); - assertThat(fst1, equalTo(fst2)); - - // Output label sort test - fst1 = createUnsorted(); - fst2 = createOsorted(); - assertThat(fst1, not(equalTo(fst2))); - apply(fst1, new OLabelCompare()); - assertThat(fst1, equalTo(fst2)); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ComposeEpsilonTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ComposeEpsilonTest.java deleted file mode 100755 index f181d7d2..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ComposeEpsilonTest.java +++ /dev/null @@ -1,51 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. Portions Copyright 2002 Sun - * Microsystems, Inc. Portions Copyright 2002 Mitsubishi Electric Research - * Laboratories. All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. - * - */ - -package edu.cmu.sphinx.fst; - -import static edu.cmu.sphinx.fst.Convert.importFst; -import static edu.cmu.sphinx.fst.operations.Compose.get; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; - -import java.io.File; -import java.io.IOException; -import java.net.URISyntaxException; -import java.net.URL; - -import org.testng.annotations.Test; - -import edu.cmu.sphinx.fst.semiring.TropicalSemiring; - - -/** - * @author John Salatas - * - */ -public class ComposeEpsilonTest { - - @Test - public void testCompose() throws NumberFormatException, IOException, URISyntaxException { - URL url = getClass().getResource("algorithms/composeeps/A.fst.txt"); - File parent = new File(url.toURI()).getParentFile(); - - String path = new File(parent, "A").getPath(); - Fst fstA = importFst(path, new TropicalSemiring()); - path = new File(parent, "B").getPath(); - Fst fstB = importFst(path, new TropicalSemiring()); - path = new File(parent, "fstcomposeeps").getPath(); - Fst fstC = importFst(path, new TropicalSemiring()); - - Fst fstComposed = get(fstA, fstB, new TropicalSemiring()); - assertThat(fstC, equalTo(fstComposed)); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ComposeTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ComposeTest.java deleted file mode 100755 index 4d183fe4..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ComposeTest.java +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Copyright 1999-2012 Carnegie Mellon University. Portions Copyright 2002 Sun - * Microsystems, Inc. Portions Copyright 2002 Mitsubishi Electric Research - * Laboratories. All Rights Reserved. Use is subject to license terms. See the - * file "license.terms" for information on usage and redistribution of this - * file, and for a DISCLAIMER OF ALL WARRANTIES. - */ - -package edu.cmu.sphinx.fst; - -import static edu.cmu.sphinx.fst.Convert.importFst; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; - -import java.io.File; -import java.io.IOException; -import java.net.URISyntaxException; -import java.net.URL; - -import org.testng.annotations.Test; - -import edu.cmu.sphinx.fst.operations.Compose; -import edu.cmu.sphinx.fst.semiring.TropicalSemiring; - - -/** - * Compose Testing for Examples provided by M. Mohri, - * "Weighted Automata Algorithms", Handbook of Weighted Automata, - * Springer-Verlag, 2009, pp. 213–254. - * - * @author John Salatas - */ -public class ComposeTest { - - @Test - public void testCompose() throws NumberFormatException, IOException, ClassNotFoundException, URISyntaxException { - String path = "algorithms/compose/fstcompose.fst.ser"; - URL url = getClass().getResource(path); - File parent = new File(url.toURI()).getParentFile(); - - path = new File(parent, "A").getPath(); - Fst fstA = importFst(path, new TropicalSemiring()); - path = new File(parent, "B").getPath(); - Fst fstB = importFst(path, new TropicalSemiring()); - path = new File(parent, "fstcompose.fst.ser").getPath(); - Fst composed = Fst.loadModel(path); - - Fst fstComposed = Compose.get(fstA, fstB, new TropicalSemiring()); - assertThat(composed, equalTo(fstComposed)); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ConnectTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ConnectTest.java deleted file mode 100755 index a4674836..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ConnectTest.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Copyright 1999-2012 Carnegie Mellon University. Portions Copyright 2002 Sun - * Microsystems, Inc. Portions Copyright 2002 Mitsubishi Electric Research - * Laboratories. All Rights Reserved. Use is subject to license terms. See the - * file "license.terms" for information on usage and redistribution of this - * file, and for a DISCLAIMER OF ALL WARRANTIES. - */ - -package edu.cmu.sphinx.fst; - -import static edu.cmu.sphinx.fst.Convert.importFst; -import static edu.cmu.sphinx.fst.operations.Connect.apply; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; - -import java.io.File; -import java.io.IOException; -import java.net.URISyntaxException; -import java.net.URL; - -import org.testng.annotations.Test; - -import edu.cmu.sphinx.fst.semiring.TropicalSemiring; - - -/** - * @author John Salatas - */ -public class ConnectTest { - - @Test - public void testConnect() throws NumberFormatException, IOException, ClassNotFoundException, URISyntaxException { - String path = "algorithms/connect/fstconnect.fst.ser"; - URL url = getClass().getResource(path); - File parent = new File(url.toURI()).getParentFile(); - - path = new File(parent, "A").getPath(); - Fst fst = importFst(path, new TropicalSemiring()); - path = new File(parent, "fstconnect.fst.ser").getPath(); - Fst connectSaved = Fst.loadModel(path); - - apply(fst); - assertThat(connectSaved, equalTo(fst)); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/DeterminizeTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/DeterminizeTest.java deleted file mode 100755 index 3f7b9e0c..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/DeterminizeTest.java +++ /dev/null @@ -1,40 +0,0 @@ -/** - * - */ -package edu.cmu.sphinx.fst; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; - -import java.io.File; -import java.io.IOException; -import java.net.URISyntaxException; -import java.net.URL; - -import org.testng.annotations.Test; - -import edu.cmu.sphinx.fst.operations.Determinize; -import edu.cmu.sphinx.fst.semiring.TropicalSemiring; - - -/** - * @author John Salatas - * - */ -public class DeterminizeTest { - - @Test - public void testDeterminize() throws NumberFormatException, IOException, ClassNotFoundException, URISyntaxException { - String path = "algorithms/determinize/fstdeterminize.fst.ser"; - URL url = getClass().getResource(path); - File parent = new File(url.toURI()).getParentFile(); - - path = new File(parent, "A").getPath(); - Fst fstA = Convert.importFst(path, new TropicalSemiring()); - path = new File(parent, "fstdeterminize.fst.ser").getPath(); - Fst determinized = Fst.loadModel(path); - - Fst fstDeterminized = Determinize.get(fstA); - assertThat(determinized, equalTo(fstDeterminized)); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ImportTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ImportTest.java deleted file mode 100755 index 7fd76b64..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ImportTest.java +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Copyright 1999-2012 Carnegie Mellon University. Portions Copyright 2002 Sun - * Microsystems, Inc. Portions Copyright 2002 Mitsubishi Electric Research - * Laboratories. All Rights Reserved. Use is subject to license terms. See the - * file "license.terms" for information on usage and redistribution of this - * file, and for a DISCLAIMER OF ALL WARRANTIES. - */ - -package edu.cmu.sphinx.fst; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; - -import java.io.File; -import java.io.IOException; -import java.net.URISyntaxException; -import java.net.URL; - -import org.testng.annotations.Test; - -import edu.cmu.sphinx.fst.semiring.TropicalSemiring; - - -/** - * @author "John Salatas" - */ -public class ImportTest { - - @Test - public void testConvert() throws NumberFormatException, IOException, ClassNotFoundException, URISyntaxException { - URL url = getClass().getResource("openfst/basic.fst"); - String dir = new File(url.toURI()).getParent(); - - String path = new File(dir, "basic").getPath(); - Fst fst1 = Convert.importFst(path, new TropicalSemiring()); - - path = new File(dir, "basic.fst.ser").getPath(); - Fst fst2 = Fst.loadModel(path); - - assertThat(fst1, equalTo(fst2)); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/NShortestPathsTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/NShortestPathsTest.java deleted file mode 100755 index b1676d70..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/NShortestPathsTest.java +++ /dev/null @@ -1,40 +0,0 @@ -/** - * - */ -package edu.cmu.sphinx.fst; - -import static edu.cmu.sphinx.fst.Convert.importFst; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; - -import java.io.File; -import java.io.IOException; -import java.net.URISyntaxException; -import java.net.URL; - -import org.testng.annotations.Test; - -import edu.cmu.sphinx.fst.operations.NShortestPaths; -import edu.cmu.sphinx.fst.semiring.TropicalSemiring; - -/** - * @author John Salatas - * - */ -public class NShortestPathsTest { - - @Test - public void testNShortestPaths() throws NumberFormatException, IOException, URISyntaxException { - String path = "algorithms/shortestpath/A.fst"; - URL url = getClass().getResource(path); - File parent = new File(url.toURI()).getParentFile(); - - path = new File(parent, "A").getPath(); - Fst fst = importFst(path, new TropicalSemiring()); - path = new File(parent, "nsp").getPath(); - Fst nsp = importFst(path, new TropicalSemiring()); - - Fst fstNsp = NShortestPaths.get(fst, 6, true); - assertThat(nsp, equalTo(fstNsp)); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ProjectTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ProjectTest.java deleted file mode 100755 index f6ed0904..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ProjectTest.java +++ /dev/null @@ -1,157 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. - * Portions Copyright 2002 Sun Microsystems, Inc. - * Portions Copyright 2002 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.fst; - -import org.testng.Assert; -import org.testng.annotations.Test; - -import edu.cmu.sphinx.fst.Arc; -import edu.cmu.sphinx.fst.Fst; -import edu.cmu.sphinx.fst.State; -import edu.cmu.sphinx.fst.operations.Project; -import edu.cmu.sphinx.fst.operations.ProjectType; -import edu.cmu.sphinx.fst.semiring.TropicalSemiring; - -/** - * @author John Salatas - * - */ -public class ProjectTest { - /** - * Create an fst to Project as per the example at - * http://www.openfst.org/twiki/bin/view/FST/ProjectDoc - * - * @return the created fst - */ - private Fst createFst() { - TropicalSemiring ts = new TropicalSemiring(); - Fst fst = new Fst(ts); - - State s1 = new State(ts.zero()); - State s2 = new State(ts.zero()); - State s3 = new State(ts.zero()); - State s4 = new State(2.f); - - // State 0 - fst.addState(s1); - s1.addArc(new Arc(1, 5, 1.f, s2)); - s1.addArc(new Arc(2, 4, 3.f, s2)); - fst.setStart(s1); - - // State 1 - fst.addState(s2); - s2.addArc(new Arc(3, 3, 7.f, s2)); - s2.addArc(new Arc(4, 2, 5.f, s3)); - - // State 2 - fst.addState(s3); - s3.addArc(new Arc(5, 1, 9.f, s4)); - - // State 3 - fst.addState(s4); - - return fst; - } - - /** - * Create the Project on Input Labels as per the example at - * http://www.openfst.org/twiki/bin/view/FST/ProjectDoc - * - * @return the created fst - */ - private Fst createPi() { - TropicalSemiring ts = new TropicalSemiring(); - Fst fst = new Fst(ts); - State s1 = new State(ts.zero()); - State s2 = new State(ts.zero()); - State s3 = new State(ts.zero()); - State s4 = new State(2.f); - - // State 0 - fst.addState(s1); - s1.addArc(new Arc(1, 1, 1.f, s2)); - s1.addArc(new Arc(2, 2, 3.f, s2)); - fst.setStart(s1); - - // State 1 - fst.addState(s2); - s2.addArc(new Arc(3, 3, 7.f, s2)); - s2.addArc(new Arc(4, 4, 5.f, s3)); - - // State 2 - fst.addState(s3); - s3.addArc(new Arc(5, 5, 9.f, s4)); - - // State 3 - fst.addState(s4); - - return fst; - } - - /** - * Create the Project on Output Labels as per the example at - * http://www.openfst.org/twiki/bin/view/FST/ProjectDoc - * - * @return the created fst - */ - private Fst createPo() { - TropicalSemiring ts = new TropicalSemiring(); - Fst fst = new Fst(ts); - - State s1 = new State(ts.zero()); - State s2 = new State(ts.zero()); - State s3 = new State(ts.zero()); - State s4 = new State(2.f); - - // State 0 - fst.addState(s1); - s1.addArc(new Arc(5, 5, 1.f, s2)); - s1.addArc(new Arc(4, 4, 3.f, s2)); - fst.setStart(s1); - - // State 1 - fst.addState(s2); - s2.addArc(new Arc(3, 3, 7.f, s2)); - s2.addArc(new Arc(2, 2, 5.f, s3)); - - // State 2 - fst.addState(s3); - s3.addArc(new Arc(1, 1, 9.f, s4)); - - // State 3 - fst.addState(s4); - - return fst; - } - - @Test - public void testProject() { - System.out.println("Testing Project..."); - // Project on Input label - Fst fst = createFst(); - Fst p = createPi(); - Project.apply(fst, ProjectType.INPUT); - Assert.assertTrue(fst.equals(p)); - - // Project on Output label - fst = createFst(); - p = createPo(); - Project.apply(fst, ProjectType.OUTPUT); - Assert.assertTrue(fst.equals(p)); - - System.out.println("Testing Project Completed!\n"); - - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ReverseTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ReverseTest.java deleted file mode 100755 index 0abe264e..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/ReverseTest.java +++ /dev/null @@ -1,40 +0,0 @@ -/** - * - */ -package edu.cmu.sphinx.fst; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; - -import java.io.File; -import java.io.IOException; -import java.net.URISyntaxException; -import java.net.URL; - -import org.testng.annotations.Test; - -import edu.cmu.sphinx.fst.operations.Reverse; -import edu.cmu.sphinx.fst.semiring.TropicalSemiring; - - -/** - * @author John Salatas - */ -public class ReverseTest { - - @Test - public void testReverse() throws NumberFormatException, IOException, ClassNotFoundException, URISyntaxException { - String path = "algorithms/reverse/A.fst"; - URL url = getClass().getResource(path); - File parent = new File(url.toURI()).getParentFile(); - - path = new File(parent, "A").getPath(); - Fst fst = Convert.importFst(path, new TropicalSemiring()); - path = new File(parent, "fstreverse.fst.ser").getPath(); - Fst fstB = Fst.loadModel(path); - - Fst fstReversed = Reverse.get(fst); - assertThat(fstB, equalTo(fstReversed)); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/RmEpsilonTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/RmEpsilonTest.java deleted file mode 100755 index df461772..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/fst/RmEpsilonTest.java +++ /dev/null @@ -1,47 +0,0 @@ -/** - * - * Copyright 1999-2012 Carnegie Mellon University. Portions Copyright 2002 Sun - * Microsystems, Inc. Portions Copyright 2002 Mitsubishi Electric Research - * Laboratories. All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. - * - */ - -package edu.cmu.sphinx.fst; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; - -import java.io.File; -import java.io.IOException; -import java.net.URISyntaxException; -import java.net.URL; - -import org.testng.annotations.Test; - -import edu.cmu.sphinx.fst.operations.RmEpsilon; -import edu.cmu.sphinx.fst.semiring.ProbabilitySemiring; - - -/** - * @author John Salatas - * - */ -public class RmEpsilonTest { - - @Test - public void testRmEpsilon() throws NumberFormatException, IOException, ClassNotFoundException, URISyntaxException { - URL url = getClass().getResource("algorithms/rmepsilon/A.fst.txt"); - File parent = new File(url.toURI()).getParentFile(); - - String path = new File(parent, "A").getPath(); - Fst fst = Convert.importFst(path, new ProbabilitySemiring()); - path = new File(parent, "fstrmepsilon.fst.ser").getPath(); - Fst fstRmEps = Fst.loadModel(path); - - Fst rmEpsilon = RmEpsilon.get(fst); - assertThat(fstRmEps, equalTo(rmEpsilon)); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/WordSequenceTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/WordSequenceTest.java deleted file mode 100755 index e1d2f943..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/WordSequenceTest.java +++ /dev/null @@ -1,85 +0,0 @@ -package edu.cmu.sphinx.linguist; - -import static edu.cmu.sphinx.linguist.WordSequence.asWordSequence; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.*; - -import java.io.IOException; -import java.net.URL; - -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -import edu.cmu.sphinx.linguist.acoustic.UnitManager; -import edu.cmu.sphinx.linguist.dictionary.Dictionary; -import edu.cmu.sphinx.linguist.dictionary.TextDictionary; -import edu.cmu.sphinx.linguist.dictionary.Word; - -public class WordSequenceTest { - - private Dictionary dictionary; - - @BeforeClass - public void setUp() throws IOException { - URL dictUrl = - getClass() - .getResource( - "/edu/cmu/sphinx/models/en-us/cmudict-en-us.dict"); - URL noiseDictUrl = - getClass().getResource( - "/edu/cmu/sphinx/models/en-us/en-us/noisedict"); - - dictionary = - new TextDictionary(dictUrl, noiseDictUrl, null, null, - new UnitManager()); - dictionary.allocate(); - } - - @Test - public void equals() { - WordSequence ws = asWordSequence(dictionary, "one", "two", "three"); - assertThat(ws.size(), is(3)); - assertThat(asWordSequence(dictionary, "one", "two", "three"), - equalTo(ws)); - } - - @Test - public void comparison() { - assertThat(asWordSequence(dictionary, "one"), - lessThan(asWordSequence(dictionary, "two"))); - assertThat(asWordSequence(dictionary, "one"), - lessThan(asWordSequence(dictionary, "one", "two"))); - assertThat(asWordSequence(dictionary, "one", "two"), - lessThanOrEqualTo(asWordSequence(dictionary, "one", "two"))); - assertThat(asWordSequence(dictionary, "one", "two", "one"), - greaterThan(asWordSequence(dictionary, "one", "two"))); - assertThat(asWordSequence(dictionary, "one", "two", "one"), - greaterThan(asWordSequence(dictionary, "one", "one", "one"))); - } - - @Test - public void getOldest() { - WordSequence ws = asWordSequence(dictionary, "zero", "six", "one"); - assertThat(asWordSequence(dictionary, "zero", "six"), - equalTo(ws.getOldest())); - assertThat(ws.getOldest().getOldest(), - equalTo(new WordSequence(ws.getWord(0)))); - } - - @Test - public void getNewest() { - WordSequence ws = asWordSequence(dictionary, "one", "two", "three"); - assertThat(asWordSequence(dictionary, "two", "three"), - equalTo(ws.getNewest())); - assertThat(ws.getNewest().getOldest(), equalTo(ws.getOldest() - .getNewest())); - } - - @Test - public void unknownWords() { - assertThat(new WordSequence(Word.UNKNOWN), equalTo(new WordSequence( - Word.UNKNOWN))); - assertThat(new WordSequence(Word.UNKNOWN, Word.UNKNOWN, Word.UNKNOWN), - not(equalTo(new WordSequence(Word.UNKNOWN, Word.UNKNOWN)))); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/test/MixtureComponentTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/test/MixtureComponentTest.java deleted file mode 100755 index ab495cd5..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/acoustic/tiedstate/test/MixtureComponentTest.java +++ /dev/null @@ -1,91 +0,0 @@ -/* -* Copyright 1999-2002 Carnegie Mellon University. -* Portions Copyright 2002 Sun Microsystems, Inc. -* Portions Copyright 2002 Mitsubishi Electric Research Laboratories. -* All Rights Reserved. Use is subject to license terms. -* -* See the file "license.terms" for information on usage and -* redistribution of this file, and for a DISCLAIMER OF ALL -* WARRANTIES. -* -*/ - -package edu.cmu.sphinx.linguist.acoustic.tiedstate.test; - -import static java.lang.Math.PI; -import static java.lang.Math.exp; -import static java.lang.Math.sqrt; - -import org.testng.Assert; -import org.testng.annotations.BeforeSuite; -import org.testng.annotations.Test; - -import edu.cmu.sphinx.frontend.FloatData; -import edu.cmu.sphinx.linguist.acoustic.tiedstate.MixtureComponent; -import edu.cmu.sphinx.util.LogMath; - -/** - * Some tests which test the functionality of MixtureComponent. - *

    - * Currently testing is restricted to univariate gaussians. It should be extended to test high-dimensional gaussians as - * well. - */ -public class MixtureComponentTest { - - @BeforeSuite - public void setupLogMath() { - LogMath.setUseTable(true); - } - - /** - * Compute the density values of a sampled interval with an univariate MixtureComponent and compare - * values with the precomputed-computed ones. - */ - @Test - public void testUnivariateDensity() { - - float minX = 10; - float maxX = 30; - float resolution = 0.1f; - - float mean = 20; - float var = 3; - - MixtureComponent gaussian = new MixtureComponent(new float[]{mean}, new float[]{var}); - - for (float curX = minX; curX <= maxX; curX += resolution) { - double gauLogScore = gaussian.getScore(new FloatData(new float[]{curX}, 16000, 0)); - - double manualScore = (1 / sqrt(var * 2 * PI)) * exp((-0.5 / var) * (curX - mean) * (curX - mean)); - double gauScore = LogMath.getLogMath().logToLinear((float) gauLogScore); - - Assert.assertEquals(manualScore, gauScore, 1E-5); - } - } - - - /** Tests whether working with different types transformations works properly. */ - @Test - public void testUnivariateMeanTransformation() { - float mean = 20; - float var = 0.001f; - - MixtureComponent gaussian = new MixtureComponent(new float[]{mean}, new float[][]{{2}}, new float[]{5}, new float[]{var}, null, null); - Assert.assertTrue(LogMath.getLogMath().logToLinear(gaussian.getScore(new float[]{2 * mean + 5})) > 10); - } - - - /** Tests whether a MixtureComponents can be cloned (using deep copying). */ - @Test - public void testClone() throws CloneNotSupportedException { - MixtureComponent gaussian = new MixtureComponent(new float[]{2}, new float[][]{{3}}, new float[]{4}, new float[]{5}, new float[][]{{6}}, new float[]{7}); - - MixtureComponent clonedGaussian = gaussian.clone(); - - Assert.assertTrue(!clonedGaussian.equals(gaussian)); - - Assert.assertTrue(gaussian.getMean() != clonedGaussian.getMean()); - Assert.assertTrue(gaussian.getVariance() != clonedGaussian.getVariance()); - Assert.assertTrue(gaussian.getScore(new float[]{2}) == clonedGaussian.getScore(new float[]{2})); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/dictionary/DictionaryTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/dictionary/DictionaryTest.java deleted file mode 100755 index b1a0f68b..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/dictionary/DictionaryTest.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright 1999-2012 Carnegie Mellon University. Portions Copyright 2002 Sun - * Microsystems, Inc. Portions Copyright 2002 Mitsubishi Electric Research - * Laboratories. Portions Copyright 2012 Nexiwave All Rights Reserved. Use is - * subject to license terms. See the file "license.terms" for information on - * usage and redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.linguist.dictionary; - -import static org.testng.AssertJUnit.assertTrue; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.arrayWithSize; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.nullValue; - -import java.io.IOException; -import java.net.URL; - -import org.testng.annotations.Test; - -import edu.cmu.sphinx.linguist.acoustic.UnitManager; - - -public class DictionaryTest { - - @Test - public void testDictionary() throws IOException { - URL dictUrl = getClass() - .getResource("/edu/cmu/sphinx/models/en-us/cmudict-en-us.dict"); - URL noiseDictUrl = getClass() - .getResource("/edu/cmu/sphinx/models/en-us/en-us/noisedict"); - - Dictionary dictionary = new TextDictionary(dictUrl, - noiseDictUrl, - null, - null, - new UnitManager()); - dictionary.allocate(); - Word word = dictionary.getWord("one"); - - assertThat(word.getPronunciations(), arrayWithSize(2)); - assertThat(word.getPronunciations()[0].toString(), - equalTo("one(W AH N )")); - assertThat(word.getPronunciations()[1].toString(), - equalTo("one(HH W AH N )")); - - word = dictionary.getWord("something_missing"); - assertThat(word, nullValue()); - - assertThat(dictionary.getSentenceStartWord().getSpelling(), - equalTo("")); - assertThat(dictionary.getSentenceEndWord().getSpelling(), - equalTo("")); - assertThat(dictionary.getSilenceWord().getSpelling(), equalTo("")); - - assertThat(dictionary.getFillerWords(), arrayWithSize(5)); - } - - @Test - public void testBadDictionary() throws IOException { - URL dictUrl = getClass() - .getResource("/edu/cmu/sphinx/linguist/dictionary/bad.dict"); - URL noiseDictUrl = getClass() - .getResource("/edu/cmu/sphinx/models/en-us/en-us/noisedict"); - - Dictionary dictionary = new TextDictionary(dictUrl, - noiseDictUrl, - null, - null, - new UnitManager()); - boolean failed = false; - try { - dictionary.allocate(); - } catch (Error e) { - failed = true; - } - assertTrue(failed); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/language/grammar/BatchForcedAlignerGrammarTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/language/grammar/BatchForcedAlignerGrammarTest.java deleted file mode 100755 index 8d6b29e0..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/language/grammar/BatchForcedAlignerGrammarTest.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 1999-2012 Carnegie Mellon University. Portions Copyright 2002 Sun - * Microsystems, Inc. Portions Copyright 2002 Mitsubishi Electric Research - * Laboratories. Portions Copyright 2012 Nexiwave All Rights Reserved. Use is - * subject to license terms. See the file "license.terms" for information on - * usage and redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.linguist.language.grammar; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.isOneOf; - -import java.io.File; -import java.io.IOException; -import java.net.URISyntaxException; -import java.net.URL; - -import org.testng.annotations.Test; - -import edu.cmu.sphinx.linguist.acoustic.UnitManager; -import edu.cmu.sphinx.linguist.dictionary.Dictionary; -import edu.cmu.sphinx.linguist.dictionary.TextDictionary; - - -public class BatchForcedAlignerGrammarTest { - - @Test - public void testForcedAlignerGrammar() throws IOException, URISyntaxException { - URL dictionaryUrl = getClass() - .getResource( - "/edu/cmu/sphinx/models/en-us/cmudict-en-us.dict"); - URL noisedictUrl = getClass() - .getResource("/edu/cmu/sphinx/models/en-us/en-us/noisedict"); - - Dictionary dictionary = new TextDictionary(dictionaryUrl, - noisedictUrl, - null, - null, - new UnitManager()); - - URL url = getClass().getResource("BatchForcedAlignerGrammarTest.utts"); - BatchForcedAlignerGrammar grammar; - grammar = new BatchForcedAlignerGrammar(new File(url.toURI()).getPath(), - true, - true, - true, - true, - dictionary); - grammar.allocate(); - assertThat(grammar.getRandomSentence(), isOneOf("one", "two", "three")); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/language/grammar/FSTGrammarTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/language/grammar/FSTGrammarTest.java deleted file mode 100755 index 8ce70fbc..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/language/grammar/FSTGrammarTest.java +++ /dev/null @@ -1,42 +0,0 @@ -package edu.cmu.sphinx.linguist.language.grammar; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.hasSize; - -import java.io.File; -import java.io.IOException; -import java.net.URISyntaxException; -import java.net.URL; - -import org.testng.annotations.Test; - -import edu.cmu.sphinx.linguist.acoustic.UnitManager; -import edu.cmu.sphinx.linguist.dictionary.Dictionary; -import edu.cmu.sphinx.linguist.dictionary.TextDictionary; - - -public class FSTGrammarTest { - - @Test - public void testForcedAlignerGrammar() throws IOException, URISyntaxException { - URL dictionaryUrl = getClass().getResource("FSTGrammarTest.dic"); - URL noisedictUrl = getClass() - .getResource("/edu/cmu/sphinx/models/en-us/en-us/noisedict"); - - Dictionary dictionary = new TextDictionary(dictionaryUrl, - noisedictUrl, - null, - null, - new UnitManager()); - - URL url = getClass().getResource("FSTGrammarTest.gram"); - FSTGrammar grammar = new FSTGrammar(new File(url.toURI()).getPath(), - true, - true, - true, - true, - dictionary); - grammar.allocate(); - assertThat(grammar.getGrammarNodes(), hasSize(14)); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/language/ngram/DynamicTrigramModelTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/language/ngram/DynamicTrigramModelTest.java deleted file mode 100755 index 6ad042f9..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/language/ngram/DynamicTrigramModelTest.java +++ /dev/null @@ -1,102 +0,0 @@ -package edu.cmu.sphinx.linguist.language.ngram; - - -import static edu.cmu.sphinx.util.LogMath.getLogMath; -import static java.util.Arrays.asList; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.contains; -import static org.hamcrest.Matchers.containsInAnyOrder; -import static org.hamcrest.Matchers.equalTo; - -import java.io.File; -import java.io.IOException; -import java.net.URL; -import java.util.ArrayList; -import java.util.List; -import java.util.Scanner; - -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -import edu.cmu.sphinx.linguist.WordSequence; -import edu.cmu.sphinx.linguist.acoustic.UnitManager; -import edu.cmu.sphinx.linguist.dictionary.Dictionary; -import edu.cmu.sphinx.linguist.dictionary.TextDictionary; - - -public class DynamicTrigramModelTest { - - private Dictionary dictionary; - - @BeforeClass - public void setUp() throws IOException { - URL dictUrl = - getClass() - .getResource( - "/edu/cmu/sphinx/models/en-us/cmudict-en-us.dict"); - URL noiseDictUrl = - getClass().getResource( - "/edu/cmu/sphinx/models/en-us/en-us/noisedict"); - - dictionary = - new TextDictionary(dictUrl, noiseDictUrl, null, null, - new UnitManager()); - dictionary.allocate(); - } - - @Test - public void unigramModel() throws IOException { - DynamicTrigramModel model = new DynamicTrigramModel(dictionary); - model.setText(asList("one")); - model.allocate(); - assertThat(model.getVocabulary(), contains("one")); - assertThat(model.getProbability(new WordSequence(dictionary - .getWord("one"))), equalTo(getLogMath().linearToLog(1.0/3))); - } - - @Test - public void bigramModel() throws IOException { - DynamicTrigramModel model = new DynamicTrigramModel(dictionary); - model.setText(asList("one", "two")); - model.allocate(); - assertThat(model.getVocabulary(), containsInAnyOrder("one", "two")); - } - - @Test - public void trigramModel() throws IOException { - DynamicTrigramModel model = new DynamicTrigramModel(dictionary); - model.setText(asList("one", "two", "three")); - model.allocate(); - assertThat(model.getVocabulary(), - containsInAnyOrder("one", "two", "three")); - } - - @Test(enabled = false) - public void compareWithPrecomputed() throws ClassNotFoundException, - IOException { - DynamicTrigramModel model = new DynamicTrigramModel(dictionary); - URL url = getClass().getResource("npr.transcript"); - - Scanner scanner = new Scanner(new File("../words")); - List words = new ArrayList(); - while (scanner.hasNext()) { - words.add(scanner.next()); - } - scanner.close(); - model.setText(words); - model.allocate(); - url = getClass().getResource("npr.lm"); - SimpleNGramModel simpleModel = - new SimpleNGramModel(url.getPath(), dictionary, 1.f, -1); - model.allocate(); - simpleModel.allocate(); - assertThat(model.getVocabulary(), equalTo(simpleModel.getVocabulary())); - for (WordSequence wordSequence : simpleModel.getNGrams()) { - if (wordSequence.size() < 3) - continue; - System.err.println(wordSequence); - assertThat(model.getProbability(wordSequence), - equalTo(simpleModel.getProbability(wordSequence))); - } - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/language/ngram/large/LargeNgramTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/language/ngram/large/LargeNgramTest.java deleted file mode 100755 index 83504b86..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/linguist/language/ngram/large/LargeNgramTest.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 1999-2012 Carnegie Mellon University. Portions Copyright 2002 Sun - * Microsystems, Inc. Portions Copyright 2002 Mitsubishi Electric Research - * Laboratories. Portions Copyright 2012 Nexiwave All Rights Reserved. Use is - * subject to license terms. See the file "license.terms" for information on - * usage and redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ -package edu.cmu.sphinx.linguist.language.ngram.large; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.closeTo; -import static org.hamcrest.Matchers.equalTo; - -import java.io.IOException; -import java.net.URL; - -import org.testng.annotations.Test; - -import edu.cmu.sphinx.linguist.WordSequence; -import edu.cmu.sphinx.linguist.acoustic.UnitManager; -import edu.cmu.sphinx.linguist.dictionary.Dictionary; -import edu.cmu.sphinx.linguist.dictionary.TextDictionary; -import edu.cmu.sphinx.linguist.dictionary.Word; - - -public class LargeNgramTest { - - @Test - public void testNgram() throws IOException { - URL dictUrl = getClass().getResource("100.dict"); - URL noisedictUrl = getClass() - .getResource("/edu/cmu/sphinx/models/en-us/en-us/noisedict"); - - Dictionary dictionary = new TextDictionary(dictUrl, - noisedictUrl, - null, - null, - new UnitManager()); - - URL lm = getClass().getResource("100.arpa.dmp"); - LargeTrigramModel model = new LargeTrigramModel("", - lm, - null, - 100, - 100, - false, - 3, - dictionary, - false, - 1.0f, - 1.0f, - 1.0f, - false); - dictionary.allocate(); - model.allocate(); - assertThat(model.getMaxDepth(), equalTo(3)); - - Word[] words = { - new Word("huggins", null, false), - new Word("daines", null, false)}; - assertThat((double) model.getProbability(new WordSequence(words)), - closeTo(-830.862, .001)); - - Word[] words1 = { - new Word("huggins", null, false), - new Word("daines", null, false), - new Word("david", null, false)}; - assertThat((double) model.getProbability(new WordSequence(words1)), - closeTo(-67625.77, .01)); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/result/LatticeCompTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/result/LatticeCompTest.java deleted file mode 100755 index fe3a2247..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/result/LatticeCompTest.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. Portions Copyright 2004 Sun - * Microsystems, Inc. Portions Copyright 2004 Mitsubishi Electric Research - * Laboratories. All Rights Reserved. Use is subject to license terms. See the - * file "license.terms" for information on usage and redistribution of this - * file, and for a DISCLAIMER OF ALL WARRANTIES. - */ - -package edu.cmu.sphinx.result; - -import static org.testng.AssertJUnit.assertTrue; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Collection; -import java.util.Iterator; - -import javax.sound.sampled.UnsupportedAudioFileException; - -import org.testng.annotations.Test; - -import edu.cmu.sphinx.api.Configuration; -import edu.cmu.sphinx.api.SpeechResult; -import edu.cmu.sphinx.api.StreamSpeechRecognizer; - -/** - * Compares the lattices generated when the LexTreeLinguist flag 'keepAllTokens' - * is turned on/off. - */ -public class LatticeCompTest { - - /** - * Main method for running the LatticeCompTest demo. - * - * @throws IOException - * @throws UnsupportedAudioFileException - */ - @Test - public void testLatticeComp() throws UnsupportedAudioFileException, IOException { - - Configuration configuration = new Configuration(); - - // Load model from the jar - configuration.setAcousticModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us"); - configuration.setDictionaryPath("resource:/edu/cmu/sphinx/models/en-us/cmudict-en-us.dict"); - configuration.setLanguageModelPath("resource:/edu/cmu/sphinx/result/hellongram.trigram.lm"); - - StreamSpeechRecognizer recognizer = new StreamSpeechRecognizer(configuration); - InputStream stream = LatticeCompTest.class.getResourceAsStream("green.wav"); - stream.skip(44); - - // Simple recognition with generic model - recognizer.startRecognition(stream); - SpeechResult result = recognizer.getResult(); - Lattice lattice = result.getLattice(); - - Lattice otherLattice = Lattice.readSlf(getClass().getResourceAsStream("correct.slf")); - - Collection latNodes = lattice.getNodes(); - Collection otherLatNodes = otherLattice.getNodes(); - Iterator it = latNodes.iterator(); - boolean latticesAreEquivalent = true; - while (it.hasNext()) { - Node node = it.next(); - Iterator otherIt = otherLatNodes.iterator(); - boolean hasEquivalentNode = false; - while (otherIt.hasNext()) { - Node otherNode = otherIt.next(); - boolean nodesAreEquivalent = node.getWord().getSpelling().equals(otherNode.getWord().getSpelling()) - && node.getEnteringEdges().size() == otherNode.getEnteringEdges().size() - && node.getLeavingEdges().size() == otherNode.getLeavingEdges().size(); - if (nodesAreEquivalent) { - hasEquivalentNode = true; - break; - } - } - - if (!hasEquivalentNode) { - latticesAreEquivalent = false; - break; - } - } - assertTrue(latticesAreEquivalent); - - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/result/LatticeIOTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/result/LatticeIOTest.java deleted file mode 100755 index 3b67dd9b..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/result/LatticeIOTest.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright 2015 Carnegie Mellon University. - * All Rights Reserved. Use is subject to license terms. See the - * file "license.terms" for information on usage and redistribution of this - * file, and for a DISCLAIMER OF ALL WARRANTIES. - */ - -package edu.cmu.sphinx.result; - -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.util.Iterator; - -import javax.sound.sampled.UnsupportedAudioFileException; - -import org.testng.annotations.AfterTest; -import org.testng.annotations.Test; -import org.testng.Assert; - -import edu.cmu.sphinx.api.Configuration; -import edu.cmu.sphinx.api.SpeechResult; -import edu.cmu.sphinx.api.StreamSpeechRecognizer; -import edu.cmu.sphinx.result.Lattice; -import edu.cmu.sphinx.result.WordResult; - -/** - * Compares the lattices after recognition and loaded from file for LAT and HTK - * format - */ -public class LatticeIOTest { - - private File latFile = new File("tmp.lat"); - private File slfFile = new File("tmp.slf"); - - /** - * Method for cleaning tmp files if any was created - */ - @AfterTest - public void removeTmpFiles() { - if (latFile.exists()) - latFile.delete(); - if (slfFile.exists()) - slfFile.delete(); - } - - /** - * Main method for running the LatticeIOTest demo. - * - * @throws IOException - * @throws UnsupportedAudioFileException - */ - @Test - public void testLatticeIO() throws UnsupportedAudioFileException, IOException { - Configuration configuration = new Configuration(); - - // Load model from the jar - configuration.setAcousticModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us"); - configuration.setDictionaryPath("resource:/edu/cmu/sphinx/models/en-us/cmudict-en-us.dict"); - configuration.setLanguageModelPath("resource:/edu/cmu/sphinx/result/hellongram.trigram.lm"); - - StreamSpeechRecognizer recognizer = new StreamSpeechRecognizer(configuration); - InputStream stream = getClass().getResourceAsStream("green.wav"); - stream.skip(44); - - // Simple recognition with generic model - recognizer.startRecognition(stream); - SpeechResult result = recognizer.getResult(); - Lattice lattice = result.getLattice(); - - lattice.dump(latFile.getAbsolutePath()); - lattice.dumpSlf(new FileWriter(slfFile)); - - Lattice latLattice = new Lattice(latFile.getAbsolutePath()); - latLattice.computeNodePosteriors(1.0f); - Lattice slfLattice = Lattice.readSlf(slfFile.getAbsolutePath()); - - slfLattice.computeNodePosteriors(1.0f); - Iterator latIt = lattice.getWordResultPath().iterator(); - Iterator latLatIt = latLattice.getWordResultPath().iterator(); - Iterator slfLatIt = slfLattice.getWordResultPath().iterator(); - while (latIt.hasNext()) { - WordResult latWord = latIt.next(); - WordResult latLatWord = latLatIt.next(); - WordResult slfLatWord = slfLatIt.next(); - Assert.assertEquals(latWord.getWord().toString(), latLatWord.getWord().toString()); - Assert.assertEquals(latWord.getWord().toString(), slfLatWord.getWord().toString()); - Assert.assertEquals(latWord.getTimeFrame().getStart(), latLatWord.getTimeFrame().getStart()); - } - Assert.assertEquals(lattice.getTerminalNode().getViterbiScore(), latLattice.getTerminalNode().getViterbiScore(), 0.001); - Assert.assertEquals(lattice.getTerminalNode().getViterbiScore(), slfLattice.getTerminalNode().getViterbiScore(), 0.001); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/result/PosteriorTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/result/PosteriorTest.java deleted file mode 100755 index c2ff3500..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/result/PosteriorTest.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 1999-2004 Carnegie Mellon University. - * Portions Copyright 2004 Sun Microsystems, Inc. - * Portions Copyright 2004 Mitsubishi Electric Research Laboratories. - * All Rights Reserved. Use is subject to license terms. - * - * See the file "license.terms" for information on usage and - * redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - * - */ - -package edu.cmu.sphinx.result; - -import org.testng.Assert; -import org.testng.annotations.Test; - -import edu.cmu.sphinx.result.Lattice; -import edu.cmu.sphinx.result.Node; -import edu.cmu.sphinx.util.LogMath; - -/** - * Tests the posterior score computation code. Sets up a simple lattice, and - * dumps out the posterior probabilities of each node. - */ -public class PosteriorTest { - - @Test - public void testPosterior() { - - LogMath logMath = LogMath.getLogMath(); - - Lattice lattice = new Lattice(); - - Node a = lattice.addNode("A", "A", 0, 0); - Node b = lattice.addNode("B", "B", 0, 0); - Node c = lattice.addNode("C", "C", 0, 0); - Node d = lattice.addNode("D", "D", 0, 0); - - double acousticAB = 4; - double acousticAC = 6; - double acousticCB = 1; - double acousticBD = 5; - double acousticCD = 2; - - lattice.setInitialNode(a); - lattice.setTerminalNode(d); - - lattice.addEdge(a, b, logMath.linearToLog(acousticAB), 0); - lattice.addEdge(a, c, logMath.linearToLog(acousticAC), 0); - lattice.addEdge(c, b, logMath.linearToLog(acousticCB), 0); - lattice.addEdge(b, d, logMath.linearToLog(acousticBD), 0); - lattice.addEdge(c, d, logMath.linearToLog(acousticCD), 0); - - lattice.computeNodePosteriors(1.0f); - double pathABD = acousticAB * acousticBD; - double pathACBD = acousticAC * acousticCB * acousticBD; - double pathACD = acousticAC * acousticCD; - double allPaths = pathABD + pathACBD + pathACD; - - double bPosterior = (pathABD + pathACBD) / allPaths; - double cPosterior = (pathACBD + pathACD) / allPaths; - - double delta = 1e-4; - Assert.assertEquals (logMath.logToLinear((float) a.getPosterior()), 1.0, delta); - Assert.assertEquals (logMath.logToLinear((float) b.getPosterior()), bPosterior, delta); - Assert.assertEquals (logMath.logToLinear((float) c.getPosterior()), cPosterior, delta); - Assert.assertEquals (logMath.logToLinear((float) d.getPosterior()), 1.0, delta); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/tools/bandwidth/BandDetectorTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/tools/bandwidth/BandDetectorTest.java deleted file mode 100755 index 48fd3812..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/tools/bandwidth/BandDetectorTest.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 1999-2013 Carnegie Mellon University. All Rights Reserved. Use is - * subject to license terms. See the file "license.terms" for information on - * usage and redistribution of this file, and for a DISCLAIMER OF ALL - * WARRANTIES. - */ - -package edu.cmu.sphinx.tools.bandwidth; - -import static org.testng.Assert.assertFalse; -import static org.testng.Assert.assertTrue; - -import java.io.File; -import java.net.URISyntaxException; - -import org.testng.annotations.Test; - - -public class BandDetectorTest { - - @Test - public void test() throws URISyntaxException { - BandDetector detector = new BandDetector(); - String path; - path = new File(getClass().getResource("10001-90210-01803-8khz.wav").toURI()).getPath(); - assertTrue(detector.bandwidth(path)); - path = new File(getClass().getResource("10001-90210-01803.wav").toURI()).getPath(); - assertFalse(detector.bandwidth(path)); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/AnotherDummyFrontEnd.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/AnotherDummyFrontEnd.java deleted file mode 100755 index 002ec338..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/AnotherDummyFrontEnd.java +++ /dev/null @@ -1,5 +0,0 @@ -package edu.cmu.sphinx.util.props; - -public class AnotherDummyFrontEnd extends DummyFrontEnd { - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/AnotherDummyProcessor.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/AnotherDummyProcessor.java deleted file mode 100755 index c1c39e75..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/AnotherDummyProcessor.java +++ /dev/null @@ -1,10 +0,0 @@ -package edu.cmu.sphinx.util.props; - -/** - * DOCUMENT ME! - * - * @author Holger Brandl - */ -public class AnotherDummyProcessor extends DummyProcessor { - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/CMUTests.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/CMUTests.java deleted file mode 100755 index c90ed676..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/CMUTests.java +++ /dev/null @@ -1,50 +0,0 @@ -package edu.cmu.sphinx.util.props; - -import java.io.File; -import java.io.IOException; - -import org.testng.Assert; -import org.testng.annotations.Test; - -import edu.cmu.sphinx.frontend.DataProcessor; -import edu.cmu.sphinx.frontend.DoubleData; -import edu.cmu.sphinx.frontend.FrontEnd; -import edu.cmu.sphinx.instrumentation.AccuracyTracker; -import edu.cmu.sphinx.instrumentation.BestPathAccuracyTracker; -import edu.cmu.sphinx.util.props.Configurable; -import edu.cmu.sphinx.util.props.ConfigurationManager; -import edu.cmu.sphinx.util.props.ConfigurationManagerUtils; - -/** Some unit-tests for the ConfigurationManagerUtils. */ -public class CMUTests { - - @Test - public void testClassTesting() { - Assert.assertTrue(ConfigurationManagerUtils.isImplementingInterface(FrontEnd.class, DataProcessor.class)); - Assert.assertTrue(ConfigurationManagerUtils.isImplementingInterface(DataProcessor.class, Configurable.class)); - Assert.assertFalse(ConfigurationManagerUtils.isImplementingInterface(Configurable.class, Configurable.class)); - - Assert.assertFalse(ConfigurationManagerUtils.isSubClass(Configurable.class, Configurable.class)); - Assert.assertTrue(ConfigurationManagerUtils.isSubClass(Integer.class, Object.class)); - Assert.assertFalse(ConfigurationManagerUtils.isSubClass(Object.class, Object.class)); - - Assert.assertTrue(ConfigurationManagerUtils.isSubClass(BestPathAccuracyTracker.class, AccuracyTracker.class)); - - Assert.assertTrue(ConfigurationManagerUtils.isDerivedClass(BestPathAccuracyTracker.class, AccuracyTracker.class)); - Assert.assertTrue(ConfigurationManagerUtils.isDerivedClass(BestPathAccuracyTracker.class, BestPathAccuracyTracker.class)); - Assert.assertTrue(!ConfigurationManagerUtils.isDerivedClass(BestPathAccuracyTracker.class, DoubleData.class)); - } - - - @Test - public void setComponentPropertyTest() throws IOException { - File configFile = new File("src/test/resources/edu/cmu/sphinx/util/props/ConfigurationManagerTest.testconfig.sxl"); - ConfigurationManager cm = new ConfigurationManager(configFile.toURI().toURL()); - - int newBeamWidth = 4711; - ConfigurationManagerUtils.setProperty(cm, "beamWidth", String.valueOf(newBeamWidth)); - - DummyComp dummyComp = (DummyComp) cm.lookup("duco"); - Assert.assertEquals(newBeamWidth, dummyComp.getBeamWidth()); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/ComponentListTests.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/ComponentListTests.java deleted file mode 100755 index ebd580ce..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/ComponentListTests.java +++ /dev/null @@ -1,31 +0,0 @@ -package edu.cmu.sphinx.util.props; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; - -import org.testng.annotations.Test; - -import edu.cmu.sphinx.util.props.ConfigurationManager; - -/** - * DOCUMENT ME! - * - * @author Holger Brandl - */ -public class ComponentListTests { - - - @Test - public void testInvalidList() { - ConfigurationManager cm = new ConfigurationManager(); - - Map props = new HashMap(); - cm.addConfigurable(DummyProcessor.class, "dummyA"); - props.put(DummyFrontEnd.DATA_PROCS, Arrays.asList("dummyA, dummyB")); - cm.addConfigurable(DummyFrontEnd.class, "dfe", props); - - cm.lookup("dfe"); - } - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/ComponentPropertyTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/ComponentPropertyTest.java deleted file mode 100755 index e7bec7e5..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/ComponentPropertyTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package edu.cmu.sphinx.util.props; - -import org.testng.Assert; -import org.testng.annotations.Test; - -import edu.cmu.sphinx.util.props.Configurable; -import edu.cmu.sphinx.util.props.ConfigurationManager; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Component; - -/** - * DOCUMENT ME! - * - * @author Holger Brandl - */ -public class ComponentPropertyTest implements Configurable { - - @S4Component(type = DummyProcessor.class, defaultClass = AnotherDummyProcessor.class) - public static final String PROP_DATA_PROC = "dataProc"; - private DummyProcessor dataProc; - - - public void newProperties(PropertySheet ps) throws PropertyException { - dataProc = (DummyProcessor) ps.getComponent(PROP_DATA_PROC); - } - - - public String getName() { - return this.getClass().getName(); - } - - - @Test - public void testDefInstance() throws PropertyException, InstantiationException { - ComponentPropertyTest cpt = ConfigurationManager.getInstance(ComponentPropertyTest.class); - - Assert.assertTrue(cpt != null); - Assert.assertTrue(cpt.dataProc instanceof AnotherDummyProcessor); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/ConfigurationManagerTest.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/ConfigurationManagerTest.java deleted file mode 100755 index 8936f61c..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/ConfigurationManagerTest.java +++ /dev/null @@ -1,140 +0,0 @@ -package edu.cmu.sphinx.util.props; - -import static java.lang.Double.MIN_VALUE; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.*; -import static org.testng.Assert.assertEquals; - -import java.io.File; -import java.io.IOException; -import java.net.URL; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; - -import org.hamcrest.Matchers; -import org.testng.annotations.Test; - - -/** - * Some unit tests, which ensure a proper implementation of configuration - * management. - * - * @author Holger Brandl - */ - -public class ConfigurationManagerTest { - - @Test - public void testDynamicConfCreation() throws PropertyException, - InstantiationException { - ConfigurationManager cm = new ConfigurationManager(); - - String instanceName = "docu"; - Map props = new HashMap(); - props.put(DummyComp.PROP_FRONTEND, new DummyFrontEnd()); - cm.addConfigurable(DummyComp.class, instanceName, props); - - assertThat(cm.getPropertySheet(instanceName), notNullValue()); - assertThat(cm.lookup(instanceName), notNullValue()); - assertThat(cm.lookup(instanceName), instanceOf(DummyComp.class)); - } - - @Test - public void testSerialization() throws IOException, PropertyException { - URL url = getClass() - .getResource("ConfigurationManagerTest.testconfig.sxl"); - ConfigurationManager cm = new ConfigurationManager(url); - - File tmpFile = File.createTempFile("ConfigurationManager", ".tmp.sxl"); - tmpFile.deleteOnExit(); - ConfigurationManagerUtils.save(cm, tmpFile); - - // Now reload it. - url = tmpFile.toURI().toURL(); - ConfigurationManager cmReloaded = new ConfigurationManager(url); - assertThat(cmReloaded, equalTo(cm)); - } - - @Test - public void testDynamicConfiguruationChange() throws IOException, - PropertyException, InstantiationException { - URL url = getClass() - .getResource("ConfigurationManagerTest.testconfig.sxl"); - ConfigurationManager cm = new ConfigurationManager(url); - - assertThat(cm.getInstanceNames(DummyFrontEndProcessor.class), empty()); - - PropertySheet propSheet = cm.getPropertySheet("duco"); - propSheet.setDouble("alpha", 11); - DummyComp duco = cm.lookup("duco"); - - assertThat(cm.getInstanceNames(DummyFrontEndProcessor.class), - hasSize(1)); - - // IMPORTANT because we assume the configurable to be instantiated - // first at lookup there is no need to call newProperties here - // duco.newProperties(propSheet); - assertThat(duco.getAlpha(), closeTo(11, MIN_VALUE)); - } - - @Test - public void testSerializeDynamicConfiguration() throws PropertyException, - InstantiationException { - ConfigurationManager cm = new ConfigurationManager(); - String frontEndName = "myFrontEnd"; - - cm.addConfigurable(DummyFrontEnd.class, frontEndName); - PropertySheet propSheet = cm.getPropertySheet(frontEndName); - propSheet - .setComponentList("dataProcs", Arrays.asList("fooBar"), Arrays - . asList(new AnotherDummyProcessor())); - - String xmlString = ConfigurationManagerUtils.toXML(cm); - - assertThat(xmlString, containsString(frontEndName)); - assertThat(xmlString, containsString("fooBar")); - - DummyFrontEnd frontEnd = (DummyFrontEnd) cm.lookup(frontEndName); - assertThat(frontEnd.getDataProcs(), hasSize(1)); - assertThat(frontEnd.getDataProcs().get(0), - instanceOf(AnotherDummyProcessor.class)); - } - - @Test - public void testXmlExtendedConfiguration() { - URL url = getClass().getResource("ConfigurationManagerTest.sxl"); - ConfigurationManager cm = new ConfigurationManager(url); - - String instanceName = "duco"; - assertThat(cm.getPropertySheet(instanceName), notNullValue()); - assertThat(cm.lookup(instanceName), notNullValue()); - assertThat(cm.lookup(instanceName), instanceOf(DummyComp.class)); - - DummyComp docu = (DummyComp) cm.lookup(instanceName); - - // Test the parameters were successfully overridden. - assertThat(docu.getFrontEnd().getDataProcs(), Matchers.empty()); - assertThat(docu.getBeamWidth(), equalTo(4711)); - - // Test the the non-overridden properties of the parent-configuration - // were preserved. - assertThat(cm.lookup("processor"), notNullValue()); - // Test the global properties: - assertThat(cm.getGlobalProperty("myalpha"), equalTo("-5")); - assertThat(cm.getGlobalProperty("hiddenproductad"), - equalTo("opencards")); - } - - @Test - public void testGetComponentClass() { - URL url = getClass().getResource("ConfigurationManagerTest.sxl"); - ConfigurationManager cm = new ConfigurationManager(url); - - String instanceName = "duco"; - PropertySheet ps = cm.getPropertySheet(instanceName); - assertEquals(ps.getComponentClass("frontend"), DummyFrontEnd.class); - assertEquals(ps.getComponentClass("anotherFrontend"), - DummyFrontEnd.class); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/DummyComp.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/DummyComp.java deleted file mode 100755 index d06b9524..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/DummyComp.java +++ /dev/null @@ -1,160 +0,0 @@ -package edu.cmu.sphinx.util.props; - -import java.io.File; -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; -import java.util.logging.Logger; - -import org.testng.Assert; -import org.testng.annotations.Test; - -import edu.cmu.sphinx.util.props.Configurable; -import edu.cmu.sphinx.util.props.ConfigurationManager; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Boolean; -import edu.cmu.sphinx.util.props.S4Component; -import edu.cmu.sphinx.util.props.S4Double; -import edu.cmu.sphinx.util.props.S4Integer; -import edu.cmu.sphinx.util.props.S4String; - - -public class DummyComp implements Configurable { - - /** doc of beamWidth. */ - @S4Integer(defaultValue = 4) - public static final String PROP_BEAM_WIDTH = "beamWidth"; - - @S4String(defaultValue = "salami&cheese") - public static final String PROP_BEST_PIZZA = "bestPizza"; - - @S4Boolean(defaultValue = true) - public static final String PROP_USE_FOOBAR = "useFooBar"; - - @S4Boolean(defaultValue = true) - public static final String PROP_USE_FOOBAZ = "useFooBaz"; - - /** doc of frontend. */ - @S4Component(type = DummyFrontEnd.class, defaultClass = AnotherDummyFrontEnd.class) - public static final String PROP_FRONTEND = "frontend"; - - @S4Double(defaultValue = 1.3, range = {-1, 15}) - public static final String PROP_ALPHA = "alpha"; - - /** doc of the string. */ - @S4String(defaultValue = "sphinx4", range = {"sphinx4", "htk"}) - public static final String PROP_BEST_ASR = "bestAsrSystem"; - - - private int beamWidth; - private DummyFrontEnd frontEnd; - private String bestAsr; - private double alpha; - private boolean useFooBaz; - - private Logger logger; - - - public int getBeamWidth() { - return beamWidth; - } - - - public DummyFrontEnd getFrontEnd() { - return frontEnd; - } - - - public String getBestASR() { - return bestAsr; - } - - - public double getAlpha() { - return alpha; - } - - - public Logger getLogger() { - return logger; - } - - - public void newProperties(PropertySheet ps) throws PropertyException { - frontEnd = (DummyFrontEnd) ps.getComponent(PROP_FRONTEND); - beamWidth = ps.getInt(PROP_BEAM_WIDTH); - bestAsr = ps.getString(PROP_BEST_ASR); - alpha = ps.getDouble(PROP_ALPHA); - useFooBaz = ps.getBoolean(PROP_USE_FOOBAZ); - - logger = ps.getLogger(); - } - - - public String getName() { - return "lalala"; - } - - - @Test - public void testGetDefaultInstance() throws PropertyException, InstantiationException { - DummyComp dc = ConfigurationManager.getInstance(DummyComp.class); - - Assert.assertEquals(4, dc.getBeamWidth()); - Assert.assertEquals(1.3, dc.getAlpha(), 1E-10); - Assert.assertEquals (false, useFooBaz); - - DummyFrontEnd fe = dc.getFrontEnd(); - Assert.assertTrue(fe != null); - Assert.assertTrue(fe instanceof AnotherDummyFrontEnd); - Assert.assertTrue(fe.getDataProcs().size() == 3); - Assert.assertTrue(fe.getDataProcs().get(0) instanceof DummyProcessor); - Assert.assertTrue(fe.getDataProcs().get(1) instanceof AnotherDummyProcessor); - Assert.assertTrue(fe.getDataProcs().get(2) instanceof DummyProcessor); - - Assert.assertTrue(dc.getBestASR().equals("sphinx4")); - Assert.assertTrue(dc.getLogger() != null); - } - - - /** Use the all defaults defined by the annotations to instantiate a Configurable. */ - @Test - public void testCustomizedDefaultInstance() throws PropertyException, InstantiationException { - Map defaultProps = new HashMap(); - defaultProps.put(DummyComp.PROP_FRONTEND, new DummyFrontEnd()); - - DummyComp dc = ConfigurationManager.getInstance(DummyComp.class, defaultProps); - - Assert.assertEquals(4, dc.getBeamWidth()); - Assert.assertEquals(1.3, dc.getAlpha(), 1E-10); - Assert.assertTrue(dc.getFrontEnd() != null); - Assert.assertTrue(dc.getBestASR().equals("sphinx4")); - Assert.assertTrue(dc.getLogger() != null); - } - - - @Test - public void testUseXmlConfig() throws IOException, PropertyException, InstantiationException { - // probably you need to adpat this path. testconfig is located in the same folder as test - File configFile = new File("src/test/resources/edu/cmu/sphinx/util/props/ConfigurationManagerTest.testconfig.sxl"); - if (!configFile.exists()) - Assert.fail("can not find configuration file to be used for test"); - - ConfigurationManager cm = new ConfigurationManager(configFile.toURI().toURL()); - - DummyComp dc = (DummyComp) cm.lookup("duco"); - - Assert.assertEquals(dc.getBeamWidth(), 123); - Assert.assertEquals(9.99, dc.getAlpha(), 1E-10); - - Assert.assertTrue(dc.getFrontEnd() != null); - Assert.assertTrue(dc.getFrontEnd().isUseMfccs()); - Assert.assertTrue(dc.getFrontEnd().getDataProcs().size() == 2); - - Assert.assertTrue(dc.getBestASR().equals("sphinx4")); - Assert.assertTrue(dc.getLogger() != null); - } -} - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/DummyFrontEnd.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/DummyFrontEnd.java deleted file mode 100755 index 72ca1092..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/DummyFrontEnd.java +++ /dev/null @@ -1,49 +0,0 @@ -package edu.cmu.sphinx.util.props; - -import java.util.List; - -import edu.cmu.sphinx.util.props.Configurable; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.S4Boolean; -import edu.cmu.sphinx.util.props.S4ComponentList; - -/** - * DOCUMENT ME! - * - * @author Holger Brandl - */ -public class DummyFrontEnd implements Configurable { - - @S4Boolean(defaultValue = true) - public static final String PROP_USE_MFFCS = "useMfccs"; - boolean useMfccs; - - @S4ComponentList( - type = Configurable.class, beTolerant = true, - defaultList = {DummyProcessor.class, AnotherDummyProcessor.class, DummyProcessor.class} - ) - public static final String DATA_PROCS = "dataProcs"; - List dataProcs; - - - public void newProperties(PropertySheet ps) throws PropertyException { - useMfccs = ps.getBoolean(PROP_USE_MFFCS); - dataProcs = ps.getComponentList(DATA_PROCS, Configurable.class); - } - - - public boolean isUseMfccs() { - return useMfccs; - } - - - public List getDataProcs() { - return dataProcs; - } - - - public String getName() { - return this.getClass().getName(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/DummyFrontEndProcessor.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/DummyFrontEndProcessor.java deleted file mode 100755 index 62930745..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/DummyFrontEndProcessor.java +++ /dev/null @@ -1,12 +0,0 @@ -package edu.cmu.sphinx.util.props; - -import edu.cmu.sphinx.util.props.Configurable; - -/** - * DOCUMENT ME! - * - * @author Holger Brandl - */ -public interface DummyFrontEndProcessor extends Configurable { - -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/DummyProcessor.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/DummyProcessor.java deleted file mode 100755 index 99e65867..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/DummyProcessor.java +++ /dev/null @@ -1,21 +0,0 @@ -package edu.cmu.sphinx.util.props; - -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; - -/** - * DOCUMENT ME! - * - * @author Holger Brandl - */ -public class DummyProcessor implements DummyFrontEndProcessor { - - - public void newProperties(PropertySheet ps) throws PropertyException { - } - - - public String getName() { - return this.getClass().getName(); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/TestConfigurable.java b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/TestConfigurable.java deleted file mode 100755 index f0bc977a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/java/edu/cmu/sphinx/util/props/TestConfigurable.java +++ /dev/null @@ -1,110 +0,0 @@ -package edu.cmu.sphinx.util.props; - -import java.util.HashMap; -import java.util.Map; - -import org.testng.Assert; -import org.testng.annotations.Test; - -import edu.cmu.sphinx.util.props.Configurable; -import edu.cmu.sphinx.util.props.ConfigurationManager; -import edu.cmu.sphinx.util.props.PropertyException; -import edu.cmu.sphinx.util.props.PropertySheet; -import edu.cmu.sphinx.util.props.RawPropertyData; -import edu.cmu.sphinx.util.props.S4Component; -import edu.cmu.sphinx.util.props.S4Double; -import edu.cmu.sphinx.util.props.S4String; - -/** - * DOCUMENT ME! - * - * @author Holger Brandl - */ -public class TestConfigurable implements Configurable { - - // note: no default component here - @S4Component(type = AnotherDummyProcessor.class) - public static final String PROP_DATA_PROC = "dataProc"; - private DummyProcessor dataProc; - - @S4String(mandatory = false) - public static final String PROP_ASTRING = "mystring"; - private String myString; - - @S4Double(defaultValue = 1.3) - public static final String PROP_GAMMA = "gamma"; - private double gamma; - - - public void newProperties(PropertySheet ps) throws PropertyException { - dataProc = (DummyProcessor) ps.getComponent(PROP_DATA_PROC); - myString = ps.getString(PROP_ASTRING); - gamma = ps.getDouble(PROP_GAMMA); - } - - - public String getName() { - return this.getClass().getName(); - } - - - public double getGamma() { - return gamma; - } - - - public DummyProcessor getDataProc() { - return dataProc; - } - - - @Test - // note: it is not a bug but a feature of this test to print a stacktrace - public void testDynamicConfCreationWithoutDefaultProperty() { - try { - ConfigurationManager cm = new ConfigurationManager(); - - String instanceName = "testconf"; - cm.addConfigurable(TestConfigurable.class, instanceName); - - cm.lookup(instanceName); - Assert.fail("add didn't fail without given default frontend"); - } catch (NullPointerException e) { - } catch (PropertyException e) { - } - } - - - @Test - public void testNullStringProperty() throws PropertyException, InstantiationException { - HashMap props = new HashMap(); - props.put("dataProc", new AnotherDummyProcessor()); - - TestConfigurable teco = ConfigurationManager.getInstance(TestConfigurable.class, props); - Assert.assertTrue(teco.myString == null); - } - - - @Test - public void testPropSheetFromConfigurableInstance() throws PropertyException, InstantiationException { - String testString = "test"; - - Map props = new HashMap(); - props.put(PROP_ASTRING, testString); - props.put(PROP_DATA_PROC, new DummyProcessor()); - TestConfigurable tc = ConfigurationManager.getInstance(TestConfigurable.class, props); - - // now create a property sheet in order to modify the configurable - PropertySheet propSheet = new PropertySheet(tc, null, new RawPropertyData("tt", tc.getClass().getName()), new ConfigurationManager()); - propSheet.setComponent(PROP_DATA_PROC, "tt", new AnotherDummyProcessor()); - tc.newProperties(propSheet); - - // test whether old props were preserved and new ones were applied - - // FIXME: Its by design not possible to preserve the old properties without have a CM - // probably we should remove the possibility to let the user create PropertySheet instances. - // Assert.assertTrue(tc.myString.equals(testString)); - // Assert.assertTrue(tc.gamma == testDouble); - Assert.assertTrue(tc.dataProc != null && tc.dataProc instanceof AnotherDummyProcessor); - } -} diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/alignment/transcription-small.txt b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/alignment/transcription-small.txt deleted file mode 100755 index 713672a8..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/alignment/transcription-small.txt +++ /dev/null @@ -1,7 +0,0 @@ -foo bar foo baz bar baz 42 qux - -how much wood could chuck woods woodchuck chuck if chuck woods woodchuck -could and would chuck wood if chuck woods woodchuck could and would chuck -wood how much wood could and would chuck woods woodchuck chuck chuck woods -woodchuck would chuck he would as much as he could and chuck as much wood -as any woodchuck would if a woodchuck could and would chuck wood \ No newline at end of file diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-cmn.dump b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-cmn.dump deleted file mode 100755 index 7d2af178..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-cmn.dump +++ /dev/null @@ -1,322 +0,0 @@ -Signal: DataStartSignal: creation time: 1424472828783 -Signal: SpeechStartSignal -Frame 13 -3.77485E00 -6.13085E-01 -1.05100E-01 1.81023E-01 -3.07806E-02 1.72977E-01 -7.57087E-02 9.55702E-02 2.96417E-01 -4.51243E-02 -3.25476E-02 1.18299E-01 1.04748E-01 -Frame 13 -3.76280E00 -5.60187E-01 -1.76795E-01 1.06969E-01 6.54967E-02 1.72887E-01 1.04430E-01 2.09324E-01 2.66446E-01 2.34154E-01 7.36240E-02 8.05494E-02 2.46591E-02 -Frame 13 -3.93403E00 -5.61577E-01 -4.57749E-02 1.77731E-01 1.18450E-01 2.77733E-01 1.07925E-01 2.71591E-03 2.02900E-01 9.03193E-02 2.62340E-02 2.31678E-02 -1.23278E-01 -Frame 13 -3.98499E00 -6.37290E-01 -4.79939E-03 9.06267E-02 -1.06167E-01 2.82784E-01 8.38770E-02 2.02240E-01 3.06857E-01 4.58613E-03 5.95756E-02 2.42569E-01 1.13218E-01 -Frame 13 -3.79505E00 -5.68509E-01 1.07899E-01 4.48120E-01 1.45727E-02 2.08055E-01 5.89268E-02 1.90636E-01 1.51124E-01 -5.49776E-02 8.79337E-02 2.71492E-01 7.02392E-02 -Frame 13 -2.81758E00 3.55663E-01 5.91115E-01 3.70215E-01 -5.11800E-02 -1.24123E-01 -7.19898E-02 -2.56920E-02 1.25714E-01 2.57525E-02 1.22992E-01 1.50408E-02 3.41616E-03 -Frame 13 -1.75151E00 7.10773E-01 6.57669E-01 2.97018E-01 -2.04949E-01 -2.94455E-01 -9.43631E-02 5.62625E-02 1.21936E-01 1.72440E-01 5.11161E-02 -1.09758E-02 -7.06065E-02 -Frame 13 -8.01100E-01 1.01633E00 6.72411E-01 1.69273E-01 -3.66617E-01 -3.87448E-01 -1.78033E-01 7.00096E-02 1.07546E-01 7.77027E-02 1.94516E-02 -8.13040E-02 -2.28762E-01 -Frame 13 5.90659E-01 1.32696E00 1.64561E-01 2.13206E-02 -4.04227E-01 -4.71439E-01 -1.19870E-01 2.62437E-02 1.78801E-01 -2.89488E-02 -1.11747E-01 7.73518E-02 -2.86425E-01 -Frame 13 1.91045E00 1.18962E00 4.46887E-02 -1.98161E-01 -4.77025E-01 -6.33924E-01 1.61571E-02 2.09568E-01 1.68862E-02 1.14777E-01 -2.21606E-01 6.74069E-02 -2.70314E-01 -Frame 13 2.69199E00 1.12019E00 -2.21500E-01 -2.69426E-01 -6.15825E-01 -4.92240E-01 1.20174E-01 2.25864E-01 -7.37224E-02 1.43472E-01 -1.74154E-01 8.78227E-02 -9.61733E-02 -Frame 13 3.34280E00 9.03879E-01 -3.72824E-01 -3.15564E-01 -6.24284E-01 -3.52067E-01 1.67080E-01 1.84982E-01 -1.75095E-01 8.00675E-02 -8.70549E-02 2.10030E-01 -3.87774E-02 -Frame 13 3.72469E00 6.91570E-01 -4.63762E-01 -3.53059E-01 -5.39009E-01 -2.28476E-01 1.69449E-01 6.15599E-02 -1.95619E-01 8.58562E-02 3.73467E-02 2.20343E-01 -2.00239E-02 -Frame 13 3.83169E00 5.84876E-01 -5.26394E-01 -3.29266E-01 -4.06211E-01 -1.93071E-01 7.39086E-02 -3.38536E-02 -1.89672E-01 2.31537E-01 7.18451E-02 1.05351E-01 -3.29020E-02 -Frame 13 3.89090E00 3.53562E-01 -4.21447E-01 -3.00772E-01 -3.28366E-01 -8.38953E-02 -1.00892E-01 -1.07448E-01 -1.47325E-01 3.74198E-01 7.86127E-02 -2.98073E-02 -3.57604E-02 -Frame 13 3.49453E00 3.23627E-01 -2.70774E-01 -2.53549E-01 -2.77315E-01 7.62164E-02 -3.44835E-01 -5.62856E-02 -1.55386E-01 4.22287E-01 -6.74386E-04 -7.35106E-02 -6.41487E-03 -Frame 13 2.29368E00 -3.56238E-04 8.47543E-02 -2.61151E-01 -1.71168E-01 2.77924E-01 -3.37551E-01 -1.29174E-01 -5.26077E-02 2.68241E-01 7.77802E-03 -1.22277E-02 2.97085E-03 -Frame 13 5.27922E-01 -3.55116E-01 -4.26245E-02 1.30577E-01 1.02671E-01 2.28802E-01 -5.30124E-02 5.81136E-02 -1.35861E-01 1.63879E-01 -1.15344E-01 -4.47872E-03 3.66535E-02 -Frame 13 -4.75905E-01 2.03088E-01 -3.78044E-01 3.49160E-01 1.88864E-01 7.65543E-02 1.28751E-01 6.25902E-02 -1.11017E-01 9.55907E-02 -2.10939E-01 -5.40617E-02 1.35339E-01 -Frame 13 -5.24512E-01 2.93680E-01 -3.60203E-01 3.34562E-01 1.63541E-01 -5.02126E-02 1.09274E-01 8.42484E-03 -1.12169E-01 1.33291E-01 -1.56750E-01 -2.41133E-02 1.34521E-01 -Frame 13 -8.19919E-01 2.59590E-01 -2.57685E-01 3.82113E-01 2.25770E-01 -6.30787E-02 1.19267E-01 1.06654E-01 -1.61620E-01 1.83080E-02 -2.47683E-01 4.00243E-03 3.18678E-01 -Frame 13 -9.38108E-01 1.39793E-01 -1.67328E-01 3.21650E-01 2.00491E-01 1.01991E-02 4.29896E-02 -3.87993E-02 -8.55475E-02 6.12767E-02 -1.47452E-01 -5.56324E-02 2.81735E-01 -Frame 13 -1.03067E00 6.73122E-02 -9.14816E-02 3.96867E-01 1.28784E-01 -1.26283E-01 3.11426E-02 -1.66477E-01 9.30401E-03 2.53551E-01 -9.17935E-02 1.37812E-02 9.55701E-02 -Frame 13 -1.39758E00 9.34927E-02 3.69440E-02 3.61905E-01 3.09675E-02 -4.72229E-02 1.05011E-01 -1.92464E-01 1.95188E-03 1.65102E-01 6.87324E-03 2.69312E-02 1.10271E-01 -Frame 13 -9.92432E-01 -5.32833E-01 2.45903E-01 2.65331E-01 9.87001E-02 9.54278E-02 1.97782E-02 -1.75756E-02 7.00395E-02 6.25468E-02 -3.46799E-02 -1.58263E-02 -1.68978E-02 -Frame 13 9.72237E-02 -9.98075E-01 4.02093E-01 1.32631E-01 9.75817E-02 -3.80674E-02 -6.73264E-02 -1.41937E-02 8.95953E-02 -1.12780E-01 1.83866E-02 -2.48111E-03 6.08531E-02 -Frame 13 -3.52387E-01 -1.26933E00 8.56391E-01 -2.81522E-01 3.59900E-01 6.55782E-02 -1.49136E-01 -9.74779E-02 2.51334E-01 -1.61073E-02 4.17678E-02 -7.07562E-02 -7.84596E-03 -Frame 13 2.11023E-01 -1.64415E00 9.86302E-01 -2.33345E-01 3.94516E-01 1.72044E-01 -4.94781E-02 5.62550E-02 1.04628E-01 -7.79108E-03 1.66606E-03 -3.37046E-03 -1.50075E-02 -Frame 13 1.58963E-01 -2.13199E00 8.37723E-01 -2.62406E-01 4.01535E-01 1.06054E-01 1.07558E-01 1.68485E-01 2.22399E-01 -1.79889E-02 1.38731E-01 2.88006E-02 -6.32575E-03 -Frame 13 2.28801E-01 -2.51362E00 7.47939E-01 -2.43109E-01 3.41669E-01 2.98051E-04 3.16936E-02 1.20513E-01 1.66641E-01 -1.54451E-03 7.54326E-03 9.73537E-02 3.41377E-03 -Frame 13 5.10782E-01 -2.43599E00 5.50820E-01 -4.37405E-01 3.28049E-01 -6.93662E-02 9.68221E-02 2.17717E-01 2.55510E-01 -6.40837E-02 7.91055E-02 1.35120E-01 1.23144E-01 -Frame 13 2.50769E-01 -2.42758E00 4.89084E-01 -3.65144E-01 2.68833E-01 -8.13010E-02 8.06223E-02 -1.94176E-02 1.89996E-01 -2.18738E-02 1.82569E-01 1.65491E-01 2.44738E-01 -Frame 13 -2.77783E-02 -2.51273E00 3.95448E-01 -3.22356E-01 3.67401E-01 6.92503E-02 -1.26054E-02 -3.81018E-02 6.45118E-02 1.34010E-01 2.80747E-01 1.14424E-01 6.95842E-02 -Frame 13 -1.80443E-01 -2.60364E00 2.95315E-01 -2.21918E-01 3.92578E-01 -7.41513E-02 -1.08447E-03 8.54917E-03 1.62103E-01 9.15245E-02 1.44147E-01 2.79064E-01 8.28532E-02 -Frame 13 -3.27370E-01 -2.62080E00 2.19357E-02 -2.25340E-01 3.10428E-01 -8.75824E-02 8.24980E-02 1.06525E-01 2.63204E-01 1.26165E-01 8.71869E-02 1.27667E-01 6.94395E-02 -Frame 13 -2.74201E-01 -2.43029E00 -1.94110E-02 -3.14603E-01 3.77747E-01 -1.09188E-01 1.63128E-01 2.02431E-01 1.99987E-01 1.26673E-01 9.46603E-02 2.72658E-02 9.94711E-02 -Frame 13 -9.95849E-02 -2.39424E00 1.59992E-01 -2.90802E-01 4.24012E-01 -1.60487E-01 1.74484E-01 1.91452E-01 1.10413E-01 7.14846E-03 3.37490E-02 1.21887E-01 1.04794E-01 -Frame 13 3.26140E-02 -2.59773E00 2.67258E-01 -3.57436E-01 3.84496E-01 -5.49899E-02 4.32289E-02 1.31718E-01 2.30781E-01 1.45338E-01 9.77098E-02 1.37125E-01 9.18306E-02 -Frame 13 2.22809E-01 -2.60577E00 4.13682E-01 -1.48301E-01 1.09872E-01 -8.34027E-02 1.53824E-01 1.33851E-01 1.10037E-01 1.17357E-01 2.87045E-01 4.77874E-02 1.65169E-01 -Frame 13 6.40632E-01 -2.47873E00 3.31794E-01 -1.01909E-01 1.38246E-01 1.32699E-01 -6.81606E-02 4.26285E-02 1.68070E-01 2.03604E-02 1.54140E-01 3.25427E-03 2.32052E-01 -Frame 13 1.44153E00 -2.12090E00 3.99249E-01 1.02654E-01 6.99096E-02 -3.12789E-02 -1.28239E-01 2.41824E-01 -6.81219E-02 3.60796E-02 1.48133E-02 -3.33221E-02 2.04208E-01 -Frame 13 2.19260E00 -1.21619E00 4.70359E-01 4.95241E-01 1.30980E-01 5.77723E-02 -3.59821E-01 9.89359E-02 -5.03402E-02 -4.61092E-03 -9.00856E-02 -2.43309E-01 6.14529E-02 -Frame 13 2.80832E00 -2.31451E-01 -8.04881E-02 6.36713E-01 5.14475E-02 -6.34117E-02 -3.25565E-01 -1.81575E-01 1.14241E-01 -9.24361E-02 -1.20893E-01 -2.32097E-01 -3.39272E-02 -Frame 13 2.88774E00 1.49995E-01 -3.43102E-01 6.07509E-01 1.39658E-01 -2.37755E-01 -2.89302E-01 -1.83877E-01 1.19988E-01 -8.03977E-02 -1.58312E-01 -2.03449E-01 -4.44877E-02 -Frame 13 2.89061E00 4.70745E-01 -6.76867E-01 5.80729E-01 3.04571E-01 -3.89886E-01 -1.78280E-01 -2.92398E-01 1.91217E-01 -5.07448E-02 -2.65280E-01 -1.40642E-01 -1.21519E-02 -Frame 13 2.84343E00 6.09152E-01 -7.95423E-01 5.31620E-01 3.56229E-01 -3.45558E-01 -1.79482E-01 -3.85558E-01 2.49766E-01 -5.68344E-02 -3.01390E-01 -1.00791E-01 -5.29538E-02 -Frame 13 2.66018E00 7.67996E-01 -8.17632E-01 3.39126E-01 4.84913E-01 -2.32659E-01 -2.80940E-01 -3.67162E-01 2.02740E-01 -6.90850E-02 -2.24762E-01 -1.61073E-01 -3.43224E-02 -Frame 13 2.41441E00 9.48364E-01 -8.35879E-01 1.50723E-01 5.56296E-01 -1.15595E-01 -2.60908E-01 -3.59670E-01 7.02208E-02 2.38660E-02 -2.32112E-01 -1.26232E-01 -9.75938E-02 -Frame 13 2.06795E00 1.15951E00 -8.53406E-01 -2.98630E-02 6.47185E-01 -6.93072E-02 -2.27978E-01 -2.90185E-01 -5.63290E-02 -6.22177E-03 -5.04379E-02 -2.21485E-01 -7.55397E-02 -Frame 13 1.60638E00 1.27756E00 -7.29768E-01 -1.74507E-01 6.61342E-01 -6.12947E-02 -1.75930E-01 -1.99429E-01 -1.63440E-01 -3.78228E-02 1.51357E-02 -1.81589E-01 -1.02206E-01 -Frame 13 1.33668E00 1.33324E00 -7.05287E-01 -2.27911E-01 5.94288E-01 -1.02045E-02 -9.42987E-02 -1.54518E-01 -1.76449E-01 -1.04380E-01 2.26609E-03 -1.22486E-01 -1.03242E-01 -Frame 13 9.77113E-01 1.39990E00 -6.46249E-01 -2.13958E-01 4.33935E-01 9.15398E-02 -1.13060E-01 -1.12539E-01 -2.00722E-01 -6.00066E-02 -3.43160E-02 -1.36333E-01 4.51037E-02 -Frame 13 9.68641E-01 1.33123E00 -5.37068E-01 -2.56004E-01 3.66314E-01 8.79496E-02 -9.63382E-02 -1.03415E-01 -1.64549E-01 -7.37901E-02 -9.35211E-02 -1.23890E-01 1.16016E-01 -Frame 13 9.94235E-01 1.33999E00 -5.18818E-01 -2.23213E-01 2.71358E-01 7.32027E-02 -3.78883E-02 -6.63698E-02 -1.44662E-01 -1.89359E-01 -1.20232E-01 -6.45260E-02 1.60848E-01 -Frame 13 9.20987E-01 1.49965E00 -5.78732E-01 -2.05456E-01 2.54681E-01 3.26495E-02 -8.72749E-02 3.89477E-02 -1.65258E-01 -2.01380E-01 -1.39000E-01 -4.23154E-02 1.52431E-01 -Frame 13 9.67191E-01 1.57175E00 -6.03717E-01 -1.67461E-01 2.79326E-01 -1.57056E-01 -3.68923E-03 4.44024E-02 -1.44957E-01 -2.55140E-01 -1.15718E-01 -1.01606E-01 1.79814E-01 -Frame 13 1.19983E00 1.53035E00 -6.23103E-01 -1.65888E-01 2.51575E-01 -3.41220E-01 7.30630E-02 1.43704E-01 -1.79549E-01 -3.56887E-01 -2.71417E-02 -1.65999E-01 2.33257E-01 -Frame 13 1.35391E00 1.48873E00 -5.51353E-01 -1.47634E-01 1.93608E-01 -4.91416E-01 1.99237E-01 1.63443E-01 -2.83249E-01 -2.94591E-01 -3.86946E-02 -1.61049E-01 2.43508E-01 -Frame 13 1.51128E00 1.41749E00 -4.71025E-01 -1.07006E-01 8.88831E-02 -6.10796E-01 4.01471E-01 4.01924E-02 -2.15668E-01 -3.29606E-01 -1.65123E-02 -1.71197E-01 1.93931E-01 -Frame 13 1.50441E00 1.37044E00 -3.63766E-01 -5.76883E-02 -1.49508E-01 -4.82039E-01 4.32387E-01 -1.16442E-02 -1.89847E-01 -3.48133E-01 -3.88047E-03 -1.73550E-01 1.39433E-01 -Frame 13 1.62240E00 1.14176E00 -1.60131E-01 -2.79717E-02 -2.68559E-01 -3.93351E-01 3.78622E-01 2.05353E-02 -1.71280E-01 -3.49791E-01 -5.26186E-03 -1.88515E-01 1.14158E-01 -Frame 13 1.30856E00 1.20492E00 -1.49563E-01 7.07604E-02 -3.38497E-01 -3.44337E-01 4.00834E-01 -7.93227E-02 -8.01137E-02 -2.70203E-01 -9.31681E-02 -1.69463E-01 8.40979E-02 -Frame 13 1.16367E00 1.06492E00 -3.00476E-02 1.28309E-01 -4.29529E-01 -2.12624E-01 3.36605E-01 6.03373E-03 -1.59667E-01 -2.19281E-01 -8.21243E-02 -1.61040E-01 4.35669E-02 -Frame 13 7.88052E-01 1.05520E00 1.40313E-03 1.77008E-01 -4.15135E-01 -1.72923E-01 3.15991E-01 6.83904E-02 -1.79589E-01 -1.72156E-01 -1.38055E-01 -1.49514E-01 3.12735E-02 -Frame 13 5.39140E-01 9.67778E-01 3.38047E-02 2.26474E-01 -3.73685E-01 -1.64784E-01 3.61442E-01 4.48682E-02 -1.02262E-01 -2.66005E-01 -1.86403E-01 -6.37347E-03 -3.24644E-02 -Frame 13 5.91835E-01 8.20990E-01 -9.69947E-03 1.64556E-01 -2.78908E-01 -1.22976E-02 3.91701E-01 -5.37682E-02 -1.62737E-01 -3.47441E-01 7.42530E-03 1.70635E-02 -8.05787E-02 -Frame 13 5.56694E-01 6.91381E-01 -9.85521E-03 1.24202E-01 -6.70087E-02 1.01156E-01 1.50372E-01 -4.22303E-02 -2.49844E-01 -1.97743E-01 1.63393E-01 1.12242E-03 -2.38843E-01 -Frame 13 4.10601E-01 5.86548E-01 3.81673E-04 1.50071E-01 1.52211E-02 3.24975E-01 -3.81992E-02 -7.52776E-02 -2.40257E-01 -4.52512E-02 1.54387E-01 -3.50195E-02 -3.48677E-01 -Frame 13 7.23974E-01 -5.22476E-02 2.26093E-01 2.81496E-01 2.39201E-02 5.43115E-01 -2.42622E-01 -1.17090E-01 -5.19309E-02 -3.87648E-02 1.81816E-01 -1.93482E-01 -3.16261E-01 -Frame 13 8.17528E-01 -1.20058E00 8.08916E-01 2.65164E-01 -1.06143E-01 7.50272E-01 -2.98416E-01 -6.78592E-02 -4.87683E-02 -5.84617E-02 4.04524E-02 -1.41234E-01 -2.72584E-01 -Frame 13 2.14220E-02 -2.04628E00 1.05809E00 1.24285E-01 4.59909E-02 6.96487E-01 -4.85875E-02 4.48015E-02 -5.94451E-02 -6.77763E-02 -1.11092E-01 -7.11093E-03 -1.69338E-01 -Frame 13 4.39253E-01 -2.35241E00 6.52538E-01 -2.58564E-01 8.81358E-02 4.07893E-01 -9.77144E-02 1.01033E-01 9.90759E-02 7.50191E-02 1.48327E-02 1.13009E-01 3.91632E-02 -Frame 13 3.09118E-01 -2.61161E00 8.23493E-01 -2.40737E-01 1.54889E-01 3.64987E-01 -1.08812E-01 1.56014E-01 1.75396E-02 5.81030E-02 -4.43185E-02 7.22442E-02 -2.31598E-02 -Frame 13 5.68486E-01 -2.73695E00 6.64492E-01 -3.66639E-01 3.00683E-01 4.23408E-01 -1.25669E-01 1.63047E-01 1.34083E-01 -9.68063E-03 -7.02380E-02 1.50566E-01 -6.61617E-02 -Frame 13 5.24748E-01 -2.79509E00 5.88369E-01 -5.35202E-01 8.84456E-02 1.70172E-01 -9.96475E-02 2.16928E-01 1.44703E-01 6.77917E-02 -8.18466E-02 1.37920E-01 1.01971E-01 -Frame 13 4.52557E-01 -2.64865E00 5.71921E-01 -4.19616E-01 1.82953E-01 1.33206E-01 1.58512E-02 1.64871E-01 1.47006E-01 7.93880E-02 9.81504E-02 1.59075E-02 8.04905E-02 -Frame 13 4.03505E-01 -2.53947E00 5.46725E-01 -3.05770E-01 3.68008E-01 3.28250E-01 -3.83930E-02 1.11269E-01 9.23164E-02 5.67948E-02 9.40851E-02 7.78121E-02 6.73022E-02 -Frame 13 2.11332E-01 -2.74775E00 4.76712E-01 -3.52095E-01 3.32267E-01 1.82365E-01 8.70191E-02 3.23223E-01 2.72491E-01 9.79828E-02 1.25261E-01 5.26201E-02 -2.87496E-02 -Frame 13 2.45627E-01 -2.48973E00 3.75482E-01 -3.15019E-01 3.29589E-01 1.28207E-01 -1.15844E-02 1.16578E-01 1.77268E-01 8.97974E-02 1.28954E-01 -8.99889E-04 7.78886E-04 -Frame 13 9.90549E-01 -2.03897E00 5.19401E-01 -2.23193E-01 9.68914E-02 -7.33393E-02 -2.15237E-01 6.64132E-02 2.22580E-01 1.42218E-01 8.89988E-02 -1.04671E-01 -4.57293E-02 -Frame 13 6.27043E-01 -1.72951E00 3.88250E-01 -5.78115E-02 9.32569E-02 3.91414E-02 -2.08564E-01 2.11645E-01 2.38802E-01 1.18001E-01 7.17931E-02 4.15797E-02 3.44181E-02 -Frame 13 1.60192E00 -6.86339E-01 4.87245E-01 1.64621E-01 1.89212E-01 3.21437E-01 -4.35423E-01 -8.60209E-02 -5.30098E-02 2.13843E-02 -6.98834E-02 -1.75554E-01 8.41133E-02 -Frame 13 1.67254E00 -5.11539E-02 3.30458E-01 3.73612E-01 5.19260E-02 1.56941E-01 -4.21937E-01 -2.29651E-01 -2.42609E-02 1.44069E-01 -6.46213E-02 -3.36526E-01 2.26810E-02 -Frame 13 2.17882E00 2.49969E-01 -1.00880E-01 5.25610E-01 2.14164E-01 -3.10517E-01 -1.88705E-01 -2.65786E-01 -8.00703E-02 1.40943E-01 -1.26974E-01 -1.06330E-01 -1.02875E-01 -Frame 13 2.47032E00 2.67285E-01 -2.60039E-01 5.92016E-01 3.48916E-01 -4.74691E-01 -2.24304E-01 -2.99096E-01 -2.99542E-02 1.83551E-01 -1.17020E-01 -1.63249E-01 -5.17753E-02 -Frame 13 2.16691E00 5.40586E-01 -3.56197E-01 5.70468E-01 2.37011E-01 -4.39246E-01 -1.26469E-01 -3.23963E-01 -5.08822E-02 1.77819E-01 -7.44643E-02 -2.10242E-01 -3.94190E-02 -Frame 13 1.93705E00 7.27604E-01 -4.20441E-01 4.30256E-01 3.22989E-01 -4.21263E-01 -7.40551E-02 -3.77799E-01 -1.90334E-02 2.52474E-01 -2.20187E-01 -1.79862E-01 1.04281E-02 -Frame 13 1.61636E00 9.60737E-01 -4.61159E-01 1.88479E-01 4.31462E-01 -2.55543E-01 -1.90718E-01 -2.48269E-01 -1.10407E-01 2.02424E-01 -1.71799E-01 -1.08806E-01 -3.40020E-02 -Frame 13 1.40775E00 1.19202E00 -5.71075E-01 -1.27069E-02 5.05525E-01 -7.64051E-02 -2.98424E-01 -2.91699E-01 -7.55853E-02 1.83804E-01 -1.12757E-01 -1.07998E-01 -4.88767E-02 -Frame 13 1.31299E00 1.27310E00 -5.76612E-01 -2.19322E-01 5.75212E-01 -3.38796E-02 -2.85745E-01 -2.25693E-01 -2.02039E-01 2.05848E-01 -3.49544E-02 -6.55771E-02 -1.75816E-01 -Frame 13 1.26013E00 1.39003E00 -6.86243E-01 -3.48203E-01 6.69129E-01 -1.09301E-02 -3.33975E-01 -1.64353E-01 -2.00344E-01 1.03272E-01 1.02887E-01 -1.27017E-01 -1.46323E-01 -Frame 13 1.27783E00 1.42767E00 -7.40499E-01 -3.36408E-01 5.78530E-01 6.99722E-02 -3.16431E-01 -1.76499E-01 -2.03254E-01 7.80316E-02 1.11427E-01 -1.15287E-01 -4.86819E-02 -Frame 13 1.37768E00 1.47348E00 -8.06725E-01 -3.17472E-01 5.50660E-01 1.83937E-02 -2.80680E-01 -1.27192E-01 -1.92415E-01 -6.54545E-03 9.89983E-02 -3.00518E-02 -6.17694E-02 -Frame 13 1.42092E00 1.48112E00 -7.49648E-01 -3.59883E-01 5.32022E-01 -9.23131E-02 -2.64588E-01 1.02244E-02 -2.20302E-01 -9.01153E-02 1.02946E-01 -5.69681E-03 3.88873E-02 -Frame 13 1.31442E00 1.55047E00 -6.93629E-01 -3.47842E-01 3.71753E-01 -7.67436E-02 -1.99006E-01 1.09879E-02 -2.12204E-01 -1.25578E-01 8.30659E-02 4.35652E-02 5.84328E-02 -Frame 13 1.30271E00 1.57007E00 -7.12511E-01 -2.70583E-01 2.69421E-01 -1.51983E-01 -1.66473E-01 1.55964E-01 -3.01205E-01 -1.29218E-01 6.03419E-02 6.13062E-02 1.44731E-01 -Frame 13 1.34618E00 1.53573E00 -6.90897E-01 -2.05157E-01 1.52098E-01 -2.38420E-01 -5.17636E-03 1.22521E-01 -2.48544E-01 -2.03047E-01 3.91637E-02 1.22425E-01 1.23620E-01 -Frame 13 1.37431E00 1.49178E00 -6.20942E-01 -1.34260E-01 -1.36400E-02 -2.66634E-01 1.08093E-01 1.25711E-01 -2.74155E-01 -2.15119E-01 4.59775E-02 4.22162E-02 2.05798E-01 -Frame 13 1.40899E00 1.42981E00 -5.91751E-01 -3.87181E-02 -1.31952E-01 -3.07896E-01 1.66570E-01 1.38370E-01 -2.70703E-01 -1.90731E-01 -2.30357E-02 6.58641E-02 1.76931E-01 -Frame 13 1.60753E00 1.22100E00 -4.64313E-01 -5.03376E-03 -2.41926E-01 -2.70702E-01 1.84549E-01 1.03323E-01 -1.77455E-01 -2.63104E-01 1.73250E-02 1.86456E-02 9.90778E-02 -Frame 13 1.62320E00 1.14504E00 -3.77083E-01 3.60484E-03 -2.91715E-01 -2.68052E-01 1.93079E-01 1.66331E-01 -2.17854E-01 -2.20527E-01 -4.14536E-02 -1.04076E-02 9.81717E-02 -Frame 13 1.57527E00 1.08935E00 -3.15447E-01 8.54215E-02 -4.29016E-01 -1.82300E-01 2.06582E-01 1.64526E-01 -1.79913E-01 -2.65172E-01 -3.94385E-02 -3.32612E-02 5.23725E-02 -Frame 13 1.26627E00 1.20668E00 -3.13075E-01 1.01432E-01 -4.06721E-01 -1.80065E-01 2.45315E-01 1.53430E-01 -2.25559E-01 -2.02558E-01 -9.33979E-02 -1.43642E-02 -3.53641E-02 -Frame 13 1.06270E00 1.17624E00 -2.65720E-01 1.50867E-01 -3.99835E-01 -1.47993E-01 2.60592E-01 1.02733E-01 -2.09871E-01 -1.65685E-01 -1.28159E-01 -2.96118E-02 -4.65737E-02 -Frame 13 9.31766E-01 1.08340E00 -1.95532E-01 2.16808E-01 -4.49818E-01 -7.02893E-02 2.77798E-01 3.90380E-02 -1.26730E-01 -2.31521E-01 -7.90880E-02 -9.72639E-02 -7.14740E-03 -Frame 13 7.74169E-01 1.06714E00 -1.76999E-01 2.25271E-01 -4.16366E-01 -6.45079E-02 3.35088E-01 3.99387E-02 -1.83892E-01 -2.18307E-01 -1.10188E-01 -6.72988E-02 -2.75939E-02 -Frame 13 6.38761E-01 1.11514E00 -2.86012E-01 3.01946E-01 -3.67542E-01 -1.29708E-01 4.17945E-01 -2.96418E-03 -2.09366E-01 -2.49938E-01 -5.07270E-02 -5.93583E-02 -3.50971E-02 -Frame 13 7.67854E-01 1.00786E00 -3.35542E-01 2.47092E-01 -2.59221E-01 -4.34971E-03 3.29123E-01 -3.01399E-02 -2.88909E-01 -2.66013E-01 5.01928E-02 4.45364E-02 -5.00007E-02 -Frame 13 1.12326E00 7.48030E-01 -3.80029E-01 2.68758E-01 -1.66347E-01 1.15423E-01 2.34980E-01 -1.61787E-01 -2.93794E-01 -1.85417E-01 1.38418E-01 9.07805E-02 -1.77518E-01 -Frame 13 1.22419E00 5.76209E-01 -4.16891E-01 3.35070E-01 -5.13959E-02 1.95977E-01 1.05358E-01 -3.00729E-01 -1.79004E-01 -1.29549E-01 2.20654E-01 -6.28616E-02 -2.29860E-01 -Frame 13 1.66608E00 -4.66300E-01 2.74771E-01 1.06348E-01 -3.37601E-03 4.72220E-01 -2.22502E-01 -1.43456E-01 -2.66395E-01 -4.58797E-02 2.46289E-01 -2.84441E-01 -1.99836E-01 -Frame 13 9.62828E-01 -1.36900E00 1.03449E00 -1.06458E-01 5.06261E-02 4.85864E-01 -1.11009E-01 2.43871E-03 -2.50073E-01 -1.87777E-04 1.54378E-01 -1.15135E-01 -2.38637E-01 -Frame 13 -2.82193E-01 -1.91550E00 1.14756E00 -1.66446E-01 2.56183E-01 5.66759E-01 -9.90558E-02 6.12411E-02 3.10510E-02 -1.31518E-03 -1.76581E-06 1.35518E-01 -9.49702E-02 -Frame 13 -3.17803E-01 -2.35683E00 9.88553E-01 -5.34942E-01 9.53733E-02 3.95185E-01 -1.59623E-01 2.93628E-01 9.73855E-02 -1.59780E-02 -1.23011E-01 1.63403E-01 -1.26772E-01 -Frame 13 3.05570E-02 -2.68601E00 9.01901E-01 -4.50243E-01 8.38689E-02 2.64751E-01 -3.14783E-01 2.10097E-01 1.24981E-01 7.58503E-02 -5.63545E-02 8.35982E-02 -9.86903E-02 -Frame 13 -4.31802E-02 -2.75780E00 8.10039E-01 -3.69572E-01 1.34844E-01 1.00406E-01 -2.67185E-01 1.71678E-01 1.58371E-01 1.18169E-01 8.50728E-02 1.59123E-01 -4.36991E-03 -Frame 13 2.93652E-01 -2.75827E00 7.39163E-01 -3.51599E-01 -3.97188E-03 1.56573E-01 -1.17581E-01 2.19734E-01 9.44476E-02 -6.99476E-02 1.70136E-01 2.51606E-01 -4.95060E-02 -Frame 13 4.57516E-01 -2.56832E00 7.78070E-01 -3.31694E-01 1.31805E-01 1.97710E-01 -1.12769E-01 1.25163E-01 -5.31563E-02 -7.49840E-02 1.17442E-01 9.30994E-02 1.11927E-02 -Frame 13 3.36197E-01 -2.72208E00 5.29902E-01 -2.57698E-01 2.17392E-01 2.36225E-01 -2.19448E-01 1.87954E-01 1.79512E-01 2.11220E-02 7.76847E-02 5.23135E-02 -2.11475E-02 -Frame 13 4.85689E-01 -2.10936E00 7.39175E-01 9.49063E-02 2.21599E-01 3.12641E-01 -2.87814E-01 1.67290E-01 1.96234E-02 -1.45517E-02 2.51036E-02 -2.13161E-01 -8.77226E-02 -Frame 13 1.24312E00 -9.06376E-01 5.35801E-01 1.39377E-01 9.51012E-02 3.45255E-01 -3.78399E-01 5.16827E-02 -7.09202E-02 -1.23985E-01 1.37669E-01 -1.46025E-01 -2.03911E-01 -Frame 13 1.12117E00 -1.62468E-01 2.68191E-01 2.23148E-01 9.56084E-02 1.52991E-01 -3.42561E-01 -1.21246E-01 -2.57544E-02 -6.04480E-02 1.00730E-01 -2.10441E-01 -1.55762E-01 -Frame 13 1.35059E00 1.82981E-01 1.24765E-01 3.33859E-01 8.10356E-02 -1.10028E-01 -1.32100E-01 -2.07101E-01 -1.58814E-01 1.23808E-01 4.45663E-02 -1.18898E-01 -2.52773E-01 -Frame 13 1.74823E00 2.40968E-01 -9.01168E-02 3.83025E-01 1.73892E-01 -2.25991E-01 -1.33320E-01 -2.99660E-01 -5.87481E-02 1.57079E-01 -4.34798E-02 -9.59108E-02 -1.87414E-01 -Frame 13 1.79389E00 4.05488E-01 -3.41073E-01 3.53222E-01 2.74350E-01 -2.65884E-01 -1.89609E-01 -3.11076E-01 -4.30576E-02 2.45949E-01 -1.69248E-01 -8.65593E-02 -2.98444E-02 -Frame 13 1.59864E00 6.24344E-01 -4.20994E-01 1.99964E-01 3.66265E-01 -2.44463E-01 -2.15349E-01 -3.41109E-01 -1.38257E-02 2.45857E-01 -1.73621E-01 -1.24741E-01 6.21796E-02 -Frame 13 1.34972E00 8.78287E-01 -4.21551E-01 -3.89257E-02 4.03907E-01 -1.14652E-01 -2.84136E-01 -2.75346E-01 -4.27361E-02 9.96146E-02 3.08160E-03 -1.03242E-01 -1.78499E-02 -Frame 13 1.02588E00 1.13917E00 -3.13772E-01 -3.65172E-01 4.21622E-01 2.93025E-02 -2.76507E-01 -3.06358E-01 -1.41370E-01 1.20061E-01 7.39580E-02 -8.51038E-02 -6.39784E-02 -Frame 13 1.12552E00 1.21243E00 -4.47280E-01 -3.94764E-01 4.26829E-01 5.51160E-02 -3.00404E-01 -2.41485E-01 -1.39843E-01 1.91450E-02 1.00032E-01 3.62774E-02 -1.78851E-01 -Frame 13 1.09471E00 1.30951E00 -5.03788E-01 -4.37371E-01 4.18097E-01 1.64609E-01 -3.76125E-01 -1.74001E-01 -1.94217E-01 9.94167E-03 9.75664E-02 -3.37153E-03 -7.27269E-02 -Frame 13 9.29988E-01 1.37425E00 -4.28669E-01 -4.69304E-01 3.15687E-01 2.35114E-01 -2.96684E-01 -2.82401E-01 -1.25228E-01 2.49901E-02 -1.84010E-02 1.53547E-02 3.78086E-02 -Frame 13 8.74275E-01 1.49216E00 -5.01996E-01 -4.77164E-01 3.16637E-01 2.38722E-01 -3.51170E-01 -1.41736E-01 -1.84588E-01 -6.25046E-02 9.44971E-02 -2.81179E-02 8.13233E-02 -Frame 13 8.49582E-01 1.58428E00 -5.43011E-01 -4.95918E-01 3.57975E-01 1.19651E-01 -3.40150E-01 -4.97004E-02 -1.76053E-01 -1.31675E-01 6.19682E-02 2.72279E-02 6.23741E-02 -Frame 13 9.50712E-01 1.56477E00 -5.54932E-01 -4.15673E-01 2.89425E-01 3.09344E-02 -3.03451E-01 2.03207E-02 -2.11381E-01 -1.47158E-01 4.18140E-02 8.32625E-02 8.12645E-02 -Frame 13 1.10974E00 1.48374E00 -5.38459E-01 -3.61003E-01 2.27445E-01 -1.00988E-01 -1.83915E-01 -8.14183E-03 -1.23015E-01 -2.40641E-01 -2.46605E-02 2.19593E-01 4.13096E-02 -Frame 13 1.17427E00 1.48085E00 -5.62539E-01 -2.46673E-01 9.03075E-02 -2.11668E-01 -2.38877E-02 7.84678E-03 -1.45331E-01 -3.02760E-01 6.78649E-02 1.52709E-01 6.93183E-02 -Frame 13 1.33017E00 1.34345E00 -4.75709E-01 -1.40606E-01 -7.71190E-02 -2.89463E-01 7.93418E-02 7.25638E-02 -2.26874E-01 -2.82007E-01 1.36621E-01 2.95468E-02 7.08622E-02 -Frame 13 1.15679E00 1.32469E00 -2.72685E-01 -1.16706E-01 -3.38960E-01 -1.51711E-01 6.37432E-02 7.05048E-02 -1.69135E-01 -2.97240E-01 5.68726E-02 6.24249E-02 6.04663E-02 -Frame 13 9.95904E-01 1.28508E00 -1.16636E-01 -7.38979E-02 -5.19228E-01 -1.10527E-01 9.02928E-02 7.53096E-02 -1.67490E-01 -2.92302E-01 4.00945E-02 1.68545E-02 1.54375E-02 -Frame 13 9.67550E-01 1.19909E00 -2.36769E-02 -8.27006E-03 -6.15265E-01 -1.51296E-01 1.43856E-01 7.92918E-02 -1.69988E-01 -2.67820E-01 1.06545E-02 -5.18517E-02 3.48945E-02 -Frame 13 7.25977E-01 1.21147E00 5.41030E-02 5.31018E-03 -5.83641E-01 -2.83877E-01 2.13997E-01 3.23999E-02 -1.32555E-01 -2.24184E-01 -8.34209E-02 -4.09701E-02 -2.88288E-02 -Frame 13 3.19123E-01 1.30833E00 2.13944E-01 -6.88688E-03 -6.07351E-01 -3.14810E-01 2.34925E-01 -2.75506E-02 -5.11773E-02 -1.84361E-01 -1.16978E-01 -1.14967E-01 -1.07994E-01 -Frame 13 3.27881E-01 1.21950E00 3.82157E-01 -1.71083E-02 -6.71042E-01 -3.36666E-01 2.38887E-01 -1.73081E-02 -2.34704E-02 -1.11053E-01 -1.32373E-01 -1.94295E-01 -1.52654E-01 -Frame 13 2.85781E-01 1.20112E00 3.69841E-01 1.30979E-01 -7.16362E-01 -3.18146E-01 1.55290E-01 -4.72506E-02 6.45407E-02 -7.06241E-02 -1.62707E-01 -1.56405E-01 -1.78714E-01 -Frame 13 1.04002E-01 1.23187E00 3.72792E-01 2.82236E-01 -6.89679E-01 -4.29465E-01 1.53212E-01 -3.00124E-02 3.23021E-02 -3.54616E-03 -8.02543E-02 -1.75839E-01 -2.05432E-01 -Frame 13 -2.60421E-01 1.23768E00 5.00208E-01 3.55156E-01 -7.54504E-01 -3.55422E-01 1.42744E-01 -7.02779E-02 -2.15937E-02 1.01569E-01 -5.97541E-02 -9.76508E-02 -2.43287E-01 -Frame 13 -7.75519E-01 1.14495E00 6.74157E-01 4.19034E-01 -5.94905E-01 -4.20755E-01 5.02901E-03 -1.03619E-01 1.32898E-01 7.53552E-02 -2.71839E-02 -1.44864E-01 -1.78741E-01 -Frame 13 -1.07601E00 1.09161E00 6.73345E-01 4.64259E-01 -4.77849E-01 -3.47266E-01 3.79672E-03 -1.94373E-01 1.13498E-01 1.59033E-01 -4.34039E-03 -1.08467E-01 -1.87584E-01 -Frame 13 -1.34213E00 1.00641E00 7.62372E-01 4.13875E-01 -3.45895E-01 -3.09842E-01 -3.87643E-03 -2.65685E-01 1.47559E-01 1.04704E-01 -7.14379E-03 -4.98400E-03 -1.66117E-01 -Frame 13 -1.49808E00 8.86617E-01 7.89816E-01 4.99751E-01 -3.06451E-01 -3.15616E-01 -5.03569E-02 -1.42286E-01 1.08662E-01 4.66966E-02 -1.61910E-02 8.26531E-03 -1.93570E-01 -Frame 13 -1.60236E00 8.27283E-01 7.48827E-01 5.90970E-01 -3.01085E-01 -1.67980E-01 -8.75647E-02 -2.07785E-01 7.86859E-02 9.05843E-02 -7.03914E-03 -4.47867E-02 -1.50621E-01 -Frame 13 -1.62873E00 9.23058E-01 7.40448E-01 5.10137E-01 -3.54903E-01 -1.91184E-01 -8.20419E-02 -9.72306E-02 2.00086E-01 -2.54134E-02 -1.52467E-01 -9.78593E-02 7.24800E-04 -Frame 13 -1.55086E00 1.02299E00 7.10981E-01 3.33203E-01 -2.28635E-01 -1.59939E-01 -1.10814E-01 -1.92792E-01 1.12680E-01 -2.55810E-02 -4.06462E-02 -3.59206E-02 -1.28722E-01 -Frame 13 -1.10511E00 1.11866E00 7.04827E-01 1.10437E-01 -3.62023E-01 -1.77859E-01 -7.22936E-02 -1.56553E-01 3.23928E-02 8.49624E-02 -2.73351E-02 -1.36507E-01 -1.45563E-01 -Frame 13 -6.62349E-01 1.14350E00 5.37524E-01 1.39746E-01 -6.08202E-01 -3.02593E-01 -1.19506E-02 -1.60792E-01 5.14424E-02 1.52003E-01 -8.49052E-02 -1.15310E-01 -1.52322E-01 -Frame 13 1.36426E-01 8.84256E-01 5.35980E-01 1.83748E-02 -8.32568E-01 -2.92124E-01 -6.28086E-02 -9.66282E-02 1.53828E-01 6.08561E-02 -5.78101E-02 -1.27867E-01 -1.15057E-01 -Frame 13 2.67761E-01 1.11447E00 3.26431E-01 -8.96994E-02 -9.17121E-01 -3.56393E-01 -1.63462E-02 -5.64501E-02 3.51522E-01 7.47439E-03 -1.28897E-01 9.84359E-03 -1.49928E-01 -Frame 13 2.55626E-01 1.28397E00 6.57927E-02 -2.14522E-01 -7.87039E-01 -3.99640E-01 1.87159E-01 -7.50333E-02 3.59399E-01 3.12471E-02 -2.13739E-01 8.92305E-02 -1.71016E-01 -Frame 13 -4.25981E-02 1.23828E00 1.76274E-01 -4.93033E-01 -6.74905E-01 -3.18160E-01 1.44642E-01 4.13619E-02 3.95265E-01 3.82123E-02 -2.58877E-01 5.98912E-02 -5.74393E-02 -Frame 13 -1.80542E-01 1.15519E00 1.73237E-01 -5.10341E-01 -7.27062E-01 -2.75946E-01 2.71928E-01 3.39865E-02 3.18854E-01 4.84423E-02 -2.45847E-01 9.27155E-02 -4.50976E-02 -Frame 13 1.84746E-02 9.29523E-01 1.90944E-01 -5.02440E-01 -7.82765E-01 -2.27931E-01 3.26888E-01 2.26405E-02 2.38781E-01 8.53416E-02 -2.70298E-01 1.86390E-01 -5.24540E-02 -Frame 13 1.97936E-01 1.04750E00 5.72369E-02 -4.77365E-01 -8.33998E-01 -1.64471E-01 3.79619E-01 3.52873E-02 2.12495E-01 2.64006E-02 -2.35072E-01 2.18128E-01 -1.05811E-02 -Frame 13 2.53863E-01 1.09058E00 1.39281E-01 -4.88155E-01 -8.49676E-01 -6.37710E-02 4.61210E-01 -7.52847E-02 1.23810E-01 4.04414E-02 -1.63930E-01 2.54482E-01 -3.45932E-02 -Frame 13 2.40056E-01 1.02241E00 1.71587E-01 -4.99702E-01 -8.42728E-01 1.40538E-01 3.53884E-01 -1.40003E-02 -9.58667E-02 1.57709E-01 -3.61449E-02 2.15265E-01 -1.01179E-01 -Frame 13 1.02845E-01 8.35929E-01 1.36118E-01 -5.56372E-01 -6.13176E-01 2.19993E-01 1.20258E-01 1.69249E-02 -5.22041E-02 2.12144E-01 -1.07919E-01 3.00943E-01 -2.19531E-02 -Frame 13 -2.33905E-02 9.01506E-01 1.44415E-01 -6.20617E-01 -5.88924E-01 4.00940E-01 -1.29277E-02 -7.91773E-02 2.20071E-02 2.74768E-01 -6.39187E-02 2.83699E-01 -2.34501E-02 -Frame 13 6.07964E-01 3.91788E-01 1.13274E-01 -1.70203E-01 -7.12740E-01 4.58602E-01 -1.45565E-02 -1.15794E-01 7.64304E-02 2.42964E-02 2.34631E-01 1.48466E-02 5.69791E-02 -Frame 13 -6.80522E-01 -4.10985E-01 1.86941E-01 2.58013E-01 -4.92586E-01 4.38983E-01 -2.91564E-02 -4.49169E-02 7.79629E-02 2.91955E-03 3.42833E-01 2.66595E-02 8.94449E-02 -Frame 13 -2.01996E00 -2.98600E-01 1.18926E-01 3.43356E-01 -1.01206E-01 2.75470E-01 1.99593E-01 8.00358E-02 1.31820E-01 -1.42061E-01 1.87008E-01 7.93130E-02 -1.71919E-02 -Frame 13 -2.47965E00 -1.04314E-01 4.42908E-02 2.07332E-01 1.54023E-01 1.40449E-01 2.68951E-01 2.26330E-01 -1.76571E-03 -8.16517E-02 9.60198E-02 4.55023E-02 2.41061E-02 -Frame 13 -2.80104E00 -1.66397E-01 -7.37484E-02 2.84344E-01 1.80848E-01 2.89637E-01 1.21900E-01 1.97639E-01 4.27073E-02 -3.53161E-02 7.26388E-02 9.75632E-02 1.06430E-02 -Frame 13 -2.97124E00 -1.31448E-01 -1.06162E-01 3.57635E-01 1.13412E-01 2.17120E-01 1.05105E-01 1.78815E-01 -6.20287E-03 1.71501E-01 3.36864E-02 -1.03563E-01 2.63400E-03 -Frame 13 -3.14629E00 -2.62623E-01 -1.21663E-03 3.12371E-01 4.09612E-02 2.44138E-01 1.96549E-01 1.05962E-01 6.89533E-02 6.68485E-03 1.50671E-01 8.19334E-02 5.23493E-02 -Frame 13 -2.75687E00 -1.33023E-01 -1.65950E-01 2.50612E-01 2.74310E-01 1.85367E-01 2.50804E-02 4.88729E-02 -3.40058E-03 5.89429E-02 2.08157E-01 -9.98023E-04 2.96190E-02 -Frame 13 -3.22058E00 -5.48527E-01 -4.65065E-01 3.09626E-02 1.51492E-01 1.22542E-01 5.17610E-02 1.26045E-01 3.91208E-02 1.53279E-01 2.17420E-01 8.71729E-02 5.68244E-02 -Frame 13 -3.46288E00 -4.09967E-01 -1.27619E-01 3.16509E-01 2.09853E-01 2.13162E-01 1.98948E-01 1.96567E-01 1.29540E-01 3.98870E-02 3.81239E-02 3.22589E-02 5.68185E-02 -Frame 13 -3.24970E00 -3.71403E-01 -4.28204E-02 4.03508E-01 2.65355E-01 1.59519E-01 2.69055E-01 6.87426E-02 1.67312E-02 -1.17513E-01 1.24451E-01 3.38944E-02 1.28775E-01 -Frame 13 -3.37046E00 -5.94689E-01 -2.43608E-01 7.42018E-02 2.47948E-02 1.81627E-01 1.77581E-01 1.89960E-02 5.07958E-02 4.71717E-02 9.17182E-02 -2.29540E-02 -3.43178E-02 -Frame 13 -3.85595E00 -8.31982E-01 -2.31727E-01 1.89837E-01 9.04195E-02 3.47348E-01 8.89805E-02 1.15806E-01 2.27742E-01 1.47575E-01 -3.40945E-02 5.09994E-02 1.74619E-01 -Frame 13 -3.85904E00 -7.04182E-01 -3.06021E-01 -1.35524E-02 1.25969E-01 3.09505E-01 1.88604E-01 4.44586E-02 1.51050E-01 8.22842E-02 1.06286E-01 1.02663E-01 1.34060E-01 -Frame 13 -4.21401E00 -9.13485E-01 -2.86187E-01 1.91017E-01 2.16691E-01 3.66868E-01 7.00353E-02 -2.70888E-02 -3.01948E-02 3.38278E-02 5.79062E-02 1.47411E-01 2.28789E-01 -Frame 13 -4.34124E00 -9.42211E-01 -3.57191E-01 1.36027E-01 1.57590E-01 3.79618E-01 1.43458E-01 5.56148E-02 3.83015E-02 -5.29103E-02 1.07631E-01 1.56489E-01 2.25184E-01 -Frame 13 -3.81041E00 -7.73037E-01 -2.79197E-01 1.45920E-01 6.69339E-02 3.10795E-01 2.55120E-01 1.55109E-01 1.25201E-01 4.18056E-02 6.00511E-02 6.31249E-02 6.58486E-02 -Frame 13 -4.19062E00 -9.05051E-01 -3.08049E-01 -4.16548E-02 -1.13131E-02 1.65851E-01 1.07330E-01 8.31231E-02 1.31859E-01 9.72293E-02 -1.84391E-02 2.55133E-02 5.47000E-02 -Frame 13 -4.05286E00 -8.80883E-01 -3.68171E-01 -1.96928E-02 7.04500E-02 2.64623E-01 9.98745E-02 1.84401E-01 2.62696E-01 1.55508E-01 1.84539E-01 1.35471E-01 7.05887E-02 -Frame 13 -4.04015E00 -7.73518E-01 -1.12386E-01 -2.82575E-03 1.93675E-01 3.24611E-01 9.77755E-02 1.13456E-01 2.57677E-01 1.68915E-01 2.07297E-01 1.17980E-01 1.29976E-01 -Frame 13 -4.21733E00 -9.09096E-01 -2.88319E-01 7.86348E-02 2.49963E-01 2.56750E-01 2.25012E-01 2.41218E-01 1.50406E-01 2.01434E-01 1.40547E-01 1.41675E-01 1.35923E-01 -Frame 13 -4.09491E00 -7.94264E-01 -1.62483E-01 1.20221E-01 2.45606E-01 4.20949E-01 1.64079E-01 1.88710E-01 7.85463E-02 2.45599E-02 -3.49019E-02 1.39363E-01 -5.80186E-02 -Frame 13 -4.33595E00 -9.21045E-01 -2.06025E-01 1.17370E-01 1.18612E-01 3.12258E-01 8.20342E-02 9.55804E-02 8.68412E-02 6.31578E-02 1.69003E-01 1.92046E-01 1.03767E-01 -Frame 13 -4.22540E00 -9.19340E-01 -3.01094E-01 1.19718E-01 1.06394E-01 3.48559E-01 1.43396E-01 -3.35620E-02 2.75195E-03 1.68993E-03 1.74540E-02 9.71605E-02 1.70970E-01 -Frame 13 -4.31370E00 -1.00888E00 -2.90209E-01 8.80080E-02 9.70795E-02 1.63682E-01 1.49236E-01 -6.58185E-02 -2.43105E-02 8.58416E-02 -5.70256E-02 1.94383E-01 3.03868E-01 -Frame 13 -4.30990E00 -7.82275E-01 -3.37629E-01 1.28511E-01 1.39292E-01 1.91713E-01 1.68391E-01 2.81423E-02 1.58441E-01 1.61695E-01 1.62864E-01 3.40154E-01 1.89105E-01 -Frame 13 -2.53119E00 -1.18065E00 6.32643E-02 1.29060E-01 2.77412E-02 2.60075E-01 -1.20322E-01 2.15906E-01 7.50533E-03 5.36531E-02 1.00350E-02 -2.00836E-02 3.50034E-02 -Frame 13 -1.05110E00 -1.88450E00 4.28021E-01 -6.55423E-02 -5.50553E-02 2.96023E-01 -8.64294E-02 1.65082E-01 2.45637E-02 5.24942E-02 -2.88399E-02 -1.42192E-02 -5.07762E-02 -Frame 13 -2.74256E00 -1.95414E00 4.95794E-01 -6.30613E-02 8.32724E-02 4.84541E-01 2.09926E-02 2.80014E-01 1.75528E-01 6.85236E-02 -4.28601E-02 1.18634E-01 1.39401E-01 -Frame 13 -3.83855E00 -8.47018E-01 8.54172E-03 1.07479E-01 2.16500E-01 2.47255E-01 1.15049E-01 6.16118E-02 1.76621E-01 1.04912E-01 4.97904E-02 8.39725E-02 2.59106E-01 -Frame 13 -3.60033E00 -6.47518E-01 -1.91699E-02 1.01241E-01 1.62127E-01 1.17535E-01 1.14647E-01 1.53949E-01 1.45036E-01 7.11339E-02 3.60868E-02 5.29545E-02 4.51118E-02 -Frame 13 -4.18750E00 -8.54879E-01 -2.49425E-01 1.49945E-01 1.77097E-02 2.43508E-01 8.86646E-02 1.91963E-01 2.36052E-01 1.22315E-01 2.88563E-02 5.64765E-02 1.75945E-01 -Frame 13 -4.07183E00 -7.32127E-01 -1.06789E-01 2.24980E-01 1.54791E-01 2.60489E-01 6.61936E-02 -2.93198E-03 2.01549E-01 3.76076E-02 6.73525E-02 1.28150E-01 1.35731E-01 -Signal: SpeechEndSignal -Signal: SpeechStartSignal -Frame 13 -4.28689E00 -7.86566E-01 -1.89425E-01 9.67291E-02 6.36960E-02 1.54906E-01 4.99937E-02 8.01478E-02 1.71029E-01 -8.16576E-04 2.98255E-02 1.44834E-01 6.05714E-02 -Frame 13 -4.21069E00 -7.95898E-01 -1.40224E-01 2.16595E-02 1.31173E-01 3.06791E-01 1.38421E-01 1.43415E-02 1.70608E-01 5.17181E-02 7.10317E-02 3.73015E-02 5.48861E-02 -Frame 13 -4.08838E00 -7.75164E-01 -1.78321E-01 3.37707E-02 1.24026E-02 2.38400E-01 2.26564E-01 2.36760E-03 1.13914E-01 1.44632E-01 2.31282E-01 2.19292E-01 4.40487E-02 -Frame 13 -4.40980E00 -1.02506E00 -2.23600E-01 1.54819E-02 7.69153E-02 3.31694E-01 2.16406E-01 1.04623E-01 2.10958E-01 7.07965E-02 2.04205E-01 2.08510E-01 8.14057E-02 -Frame 13 -4.36876E00 -7.76046E-01 -1.01251E-01 8.26997E-02 1.30405E-01 3.35145E-01 3.44430E-01 2.32987E-01 2.85306E-01 1.76229E-01 9.33241E-02 2.33744E-01 4.70795E-02 -Frame 13 -4.34125E00 -8.71602E-01 -1.30169E-01 9.10902E-02 9.19454E-02 3.34301E-01 1.42523E-01 1.56891E-01 1.93912E-01 5.95510E-02 7.54762E-02 2.38749E-01 8.66367E-02 -Frame 13 -3.80803E00 -5.61370E-01 1.78193E-02 2.16506E-01 2.37641E-01 3.38525E-01 3.36852E-01 1.63854E-01 1.39544E-01 -3.15324E-02 1.29714E-02 1.86513E-01 1.83427E-01 -Frame 13 -2.37162E00 1.13167E-01 -4.59669E-02 4.42706E-01 3.11866E-01 6.40115E-02 2.82820E-01 -9.32932E-03 -2.39925E-01 -1.63076E-01 1.46146E-01 4.09478E-02 9.57446E-02 -Frame 13 -3.08583E00 -2.41425E-01 9.86472E-02 3.14240E-01 2.49586E-01 2.79748E-01 3.02517E-01 9.32200E-02 -1.04168E-01 -3.10871E-02 1.09586E-01 -4.66436E-02 5.07789E-04 -Frame 13 -2.03831E00 -6.25690E-01 -3.15329E-03 4.43659E-01 3.67837E-01 1.84199E-01 -1.12624E-01 1.03022E-01 -9.27478E-03 7.96377E-02 -1.14913E-01 6.70700E-02 6.35015E-02 -Frame 13 1.82278E00 -1.37459E-03 -3.88482E-01 5.68742E-01 -8.55142E-02 -6.12218E-02 -2.84493E-01 -8.46350E-02 5.12153E-02 2.05674E-01 -6.72788E-02 -4.47317E-02 1.36628E-01 -Frame 13 2.39231E00 4.46825E-01 -6.12580E-01 3.54098E-01 -2.83672E-02 -2.76477E-01 -2.73310E-01 -6.57756E-02 1.16534E-01 2.53374E-01 -3.55131E-02 -9.50728E-02 1.90832E-01 -Frame 13 3.24147E00 5.31758E-01 -6.85324E-01 1.00825E-01 -5.92695E-02 -1.85400E-01 -1.88401E-01 -1.42611E-01 9.40095E-02 4.65512E-01 -1.65472E-01 1.77345E-02 1.45055E-02 -Frame 13 3.72075E00 5.69091E-01 -7.99098E-01 -5.29641E-02 -3.33805E-02 -2.08621E-01 -1.70504E-01 -1.78338E-02 5.87236E-02 4.53200E-01 -1.57471E-01 6.39470E-02 -8.99485E-02 -Frame 13 4.01678E00 5.65692E-01 -8.25324E-01 -2.07121E-01 -2.45110E-02 -1.20177E-01 -1.46334E-01 -4.37585E-02 1.27944E-01 4.27885E-01 -1.00135E-01 5.76013E-02 -1.80355E-01 -Frame 13 4.08981E00 6.05889E-01 -8.23130E-01 -2.91684E-01 -3.01541E-02 -1.18982E-01 -2.62613E-02 -7.31299E-02 1.23525E-02 5.88051E-01 -1.23411E-01 6.02530E-02 -2.55894E-01 -Frame 13 4.28310E00 4.69808E-01 -7.13020E-01 -3.91889E-01 -2.90802E-02 -5.21236E-02 -4.17537E-02 -5.27223E-02 -3.29663E-02 6.39171E-01 -1.18661E-01 -2.66769E-02 -1.80246E-01 -Frame 13 4.29566E00 4.64068E-01 -7.66119E-01 -3.02351E-01 -2.68527E-02 -4.96424E-02 -1.08205E-01 -9.22114E-03 -4.77071E-02 6.49284E-01 -1.20980E-01 -5.41445E-02 -1.63600E-01 -Frame 13 4.25974E00 4.41868E-01 -7.22514E-01 -3.28203E-01 4.18673E-02 -4.05169E-02 -2.23548E-01 3.30902E-02 3.90477E-02 5.83195E-01 -1.28994E-01 -3.20043E-02 -1.62834E-01 -Frame 13 4.17131E00 4.51991E-01 -7.40452E-01 -2.79991E-01 1.61903E-01 -1.05990E-01 -3.88798E-01 1.51307E-01 8.00072E-02 4.84634E-01 -5.40206E-02 -1.04889E-01 -1.01103E-01 -Frame 13 4.16090E00 3.36943E-01 -6.56063E-01 -2.08720E-01 1.61246E-01 -1.31101E-01 -4.16546E-01 1.02226E-01 1.42969E-01 4.76974E-01 -1.49984E-01 -8.35050E-02 -2.76680E-02 -Frame 13 4.02839E00 2.37760E-01 -5.98790E-01 -1.13393E-03 3.70024E-02 -5.87936E-02 -4.57905E-01 5.09874E-02 1.90740E-01 3.87601E-01 -8.24150E-02 -2.11633E-01 1.63646E-01 -Frame 13 2.87857E00 3.46444E-01 -5.24766E-01 9.36316E-03 1.28046E-01 -4.51148E-02 -4.35848E-01 -1.79419E-02 1.17253E-01 3.93715E-01 -1.90884E-02 -2.69764E-01 2.08444E-01 -Frame 13 3.35298E-01 2.86894E-01 -4.29965E-01 3.78955E-01 5.44894E-01 -1.99597E-01 3.81338E-02 -5.02578E-02 -1.52415E-01 2.30357E-01 -9.57362E-02 -1.21165E-01 5.36988E-02 -Frame 13 3.29278E-01 9.54165E-02 -4.00995E-01 5.14516E-01 4.23818E-01 -4.61317E-02 3.51601E-02 -2.17968E-01 8.84104E-02 5.95676E-02 -1.52611E-01 -1.25444E-01 -1.78858E-02 -Frame 13 1.86855E00 9.19933E-02 -7.18577E-01 5.81127E-01 6.05141E-02 5.11308E-02 -1.05763E-01 -5.98887E-01 2.62631E-01 1.15381E-01 -9.95114E-02 -1.56807E-01 1.57656E-02 -Frame 13 2.97830E00 6.13082E-01 -1.01953E00 4.28992E-01 2.74467E-02 -1.50016E-01 -1.21279E-01 -3.88178E-01 2.90572E-01 2.99226E-01 -2.32016E-01 -2.04436E-01 2.17592E-01 -Frame 13 3.19050E00 6.17838E-01 -1.02085E00 3.81439E-01 -1.32686E-02 -1.80493E-01 -1.60709E-01 -2.72682E-01 2.48761E-01 3.66367E-01 -2.62843E-01 -8.22797E-02 1.41085E-02 -Frame 13 3.05454E00 7.21751E-01 -9.64720E-01 1.73196E-01 2.74633E-02 -1.09925E-01 -1.10256E-01 -2.53566E-01 3.04607E-02 5.06356E-01 -1.92754E-01 -1.00838E-01 -9.98322E-02 -Frame 13 2.75856E00 8.25939E-01 -7.76662E-01 -6.81847E-02 3.41699E-03 4.77524E-02 -1.44359E-01 -1.18171E-01 -2.32175E-01 5.08335E-01 1.01002E-02 -1.67794E-01 1.38964E-02 -Frame 13 2.34892E00 9.60293E-01 -6.88041E-01 2.02113E-03 -1.96625E-01 9.66523E-02 -7.72223E-03 -1.50423E-01 -2.23685E-01 3.58116E-01 -2.32488E-02 5.68277E-02 -1.62007E-03 -Frame 13 1.99385E00 1.06238E00 -5.89807E-01 4.72312E-02 -3.87294E-01 2.09621E-01 6.57242E-02 -1.76644E-01 -1.83765E-01 1.28058E-01 -2.07419E-02 1.55217E-01 4.51898E-02 -Frame 13 1.60834E00 1.17383E00 -5.16939E-01 8.78602E-02 -4.06573E-01 1.19317E-01 2.08642E-01 -2.04315E-01 -1.17187E-01 -4.41330E-02 -8.87736E-02 1.53351E-01 1.00479E-01 -Frame 13 1.43880E00 1.13640E00 -3.49183E-01 7.40607E-02 -4.31677E-01 1.36154E-01 1.52920E-01 -1.14412E-01 -6.05807E-02 -2.58708E-01 -4.51663E-02 3.47147E-02 1.66051E-01 -Frame 13 1.28180E00 1.08573E00 -2.37512E-01 1.61546E-01 -3.86632E-01 5.77607E-02 1.25851E-01 -3.58120E-02 -1.13550E-01 -2.82903E-01 -1.16661E-01 5.14703E-03 6.03687E-02 -Frame 13 1.29080E00 1.02441E00 -2.48441E-01 2.15340E-01 -2.32859E-01 -2.13120E-02 2.54740E-01 -1.24177E-01 -1.63001E-01 -3.21115E-01 -1.07109E-01 4.66859E-02 -8.66546E-02 -Frame 13 1.51987E00 8.12432E-01 -3.67934E-01 4.39493E-01 -1.76252E-01 1.23552E-01 1.76791E-01 -1.94231E-01 -2.67634E-01 -2.03950E-01 4.27735E-02 5.32737E-02 -3.36997E-01 -Frame 13 1.66805E00 5.03621E-01 -3.53973E-01 4.57305E-01 1.23880E-01 2.01580E-01 6.55824E-02 -3.28052E-01 -1.13836E-01 -7.66033E-02 1.16577E-01 -8.88446E-02 -4.74052E-01 -Frame 13 1.14886E00 -5.77655E-02 8.86077E-03 4.50474E-01 1.31049E-01 4.61326E-01 -2.26604E-01 -2.62111E-01 -1.79934E-02 -4.12798E-02 3.90458E-02 -1.97913E-01 -4.16717E-01 -Frame 13 2.15065E-01 -5.50372E-01 -7.53274E-02 6.46522E-02 3.91532E-04 3.53877E-01 -4.02972E-01 4.10381E-01 2.35683E-01 -2.67160E-02 5.24774E-02 1.25417E-01 -2.99777E-01 -Frame 13 -2.08707E00 -3.08618E-01 -8.04750E-02 -6.65930E-03 -2.08731E-02 2.36969E-01 -2.31354E-02 3.70966E-01 1.98534E-01 8.09942E-02 5.40756E-02 1.76556E-02 -8.65434E-02 -Frame 13 -3.13328E00 -3.14447E-01 -2.81314E-01 -2.97009E-01 -6.87497E-02 1.41146E-01 1.36043E-01 6.65456E-02 1.45425E-01 4.13596E-02 -2.86001E-02 -1.22191E-03 -7.17405E-02 -Frame 13 -3.24671E00 -2.98300E-01 -3.16009E-01 -1.60945E-01 -4.64706E-02 2.07064E-01 7.50556E-02 6.24933E-02 1.30005E-01 1.09448E-01 2.79679E-02 3.14189E-02 3.42485E-02 -Frame 13 -3.41196E00 -4.92607E-01 -2.80567E-01 4.08073E-02 -3.72724E-02 2.15433E-01 7.61084E-02 9.32296E-02 1.30950E-01 5.46742E-03 2.70392E-02 -1.51117E-02 7.15678E-02 -Frame 13 -1.77807E00 -1.20302E00 -1.02205E-01 3.62045E-02 -9.19382E-02 3.29505E-01 -1.24800E-03 1.67209E-01 7.68536E-02 1.01037E-01 7.99415E-03 6.76620E-02 -2.19257E-02 -Frame 13 6.55512E-01 -1.91012E00 1.94869E-01 -2.34770E-01 -3.52030E-02 1.64509E-01 -1.08168E-01 4.91227E-02 -5.58247E-02 1.15818E-02 -8.31381E-02 7.25785E-02 -1.05748E-01 -Frame 13 1.54216E-01 -2.78282E00 8.00770E-01 -2.37531E-01 5.99562E-02 2.44356E-01 -1.90178E-01 9.82607E-02 3.66555E-02 -5.01855E-02 1.70193E-01 1.52865E-01 5.50333E-02 -Frame 13 5.13301E-01 -2.89500E00 7.50743E-01 -1.70764E-01 8.01829E-02 3.45233E-01 -1.14883E-01 1.72132E-01 -4.09642E-03 -1.18897E-01 2.20512E-01 -2.96265E-02 -9.47314E-03 -Frame 13 1.30963E00 -2.75870E00 5.14440E-01 9.02167E-02 -6.81011E-02 4.15304E-01 -6.37813E-02 1.27729E-01 1.96909E-01 -7.88888E-02 2.13730E-01 1.07654E-02 -1.38359E-01 -Frame 13 2.10616E00 -2.58926E00 2.15252E-01 2.40145E-01 -8.93176E-02 1.23153E-01 1.88105E-01 3.10734E-01 1.69777E-01 -1.84542E-01 1.64959E-01 6.39853E-02 -2.96296E-02 -Frame 13 2.41382E00 -2.24515E00 2.23786E-01 3.99879E-01 -2.59670E-01 1.04797E-02 3.60701E-02 1.11044E-01 5.78817E-02 -9.88370E-02 1.88959E-01 3.66452E-02 -3.42381E-02 -Frame 13 2.35137E00 -2.16950E00 2.16950E-03 5.52608E-01 -1.36162E-01 -1.91939E-01 -7.79761E-02 1.77721E-01 3.24115E-02 -2.88608E-01 2.15686E-02 -3.45791E-02 -3.27221E-02 -Frame 13 2.49623E00 -1.92378E00 1.68721E-02 6.79114E-01 -8.08723E-02 -2.49807E-01 7.85753E-02 4.18373E-01 2.53936E-02 -2.75357E-01 -1.05314E-01 9.28492E-03 -7.52987E-02 -Frame 13 1.84310E00 -1.70460E00 -2.34384E-01 8.76677E-01 2.80614E-01 -3.03235E-01 -2.31887E-02 3.72845E-01 9.19575E-02 -9.39768E-02 1.58358E-01 -2.17615E-02 -1.09959E-01 -Frame 13 1.80071E00 -8.59577E-01 -3.34186E-01 7.46405E-01 5.71252E-01 1.94233E-01 -1.83014E-01 -3.16698E-03 6.93578E-04 -6.05166E-02 8.36369E-02 -1.01185E-01 -1.86918E-01 -Frame 13 2.32094E00 8.18430E-02 -4.24853E-01 6.04966E-01 7.20358E-01 -1.31878E-01 -1.68539E-01 -1.52350E-01 -1.84828E-02 -1.85686E-01 1.91506E-02 -1.74539E-01 -3.34624E-01 -Frame 13 2.39719E00 3.46063E-01 -5.25355E-01 7.38238E-01 4.57441E-01 -1.70147E-01 -4.30376E-02 -3.69794E-01 -2.18745E-02 -1.21229E-01 2.83916E-02 -2.16860E-01 -3.81287E-01 -Frame 13 2.17439E00 6.44169E-01 -4.89930E-01 5.28269E-01 3.36346E-01 9.16191E-03 -3.17755E-02 -4.05419E-01 -7.00663E-02 -1.41638E-01 1.04828E-01 -1.95944E-01 -3.21803E-01 -Frame 13 1.88442E00 8.01026E-01 -3.06487E-01 2.61741E-01 2.06123E-01 1.37812E-01 8.46284E-02 -3.56919E-01 -2.12628E-01 -1.92394E-01 9.19447E-02 -1.19678E-02 -2.81906E-01 -Frame 13 1.54864E00 8.54858E-01 1.91795E-02 1.79027E-01 -7.07538E-02 1.38404E-01 1.27206E-01 -1.30702E-01 -2.40241E-01 -3.89621E-01 2.00149E-03 4.26336E-02 -1.28270E-01 -Frame 13 1.02453E00 1.06923E00 1.89749E-01 5.29675E-02 -1.44687E-01 -1.03356E-02 1.92700E-01 4.09662E-02 -1.49316E-01 -4.42845E-01 -1.63686E-01 -1.67213E-02 -1.64838E-01 -Frame 13 6.17639E-01 1.13646E00 3.35673E-01 4.56414E-02 -2.43961E-01 -1.47659E-01 1.09712E-01 1.58006E-01 -2.34975E-02 -3.13854E-01 -2.02943E-01 -1.85019E-01 -1.89564E-01 -Frame 13 2.10136E-01 1.12497E00 4.04586E-01 2.77196E-01 -4.00574E-01 -2.56643E-01 9.42399E-02 1.32309E-01 9.11187E-02 -2.04482E-01 -1.13125E-01 -2.23816E-01 -2.79284E-01 -Frame 13 2.40463E-01 1.02877E00 4.60342E-01 3.04360E-01 -3.42106E-01 -3.80494E-01 1.15492E-01 1.26505E-01 5.78125E-02 -5.79328E-02 -8.75879E-02 -2.34888E-01 -3.55099E-01 -Frame 13 6.71058E-01 1.04738E00 3.80992E-01 1.76290E-01 -4.24150E-01 -3.37155E-01 1.63541E-01 5.00341E-02 -9.54407E-03 -5.78154E-02 -4.92127E-02 -2.05144E-01 -2.70243E-01 -Frame 13 1.19816E00 1.07310E00 1.62197E-01 1.88468E-01 -5.90277E-01 -3.76588E-01 2.10542E-01 -6.59688E-02 9.00327E-02 -6.19813E-02 -1.12936E-01 -8.72195E-02 -2.14459E-01 -Frame 13 1.81023E00 1.00432E00 -4.60393E-03 4.98768E-02 -7.01456E-01 -3.38132E-01 2.88222E-01 -1.03294E-01 1.34683E-01 -5.13527E-02 -1.76244E-01 -5.66020E-02 -2.10318E-02 -Frame 13 2.38335E00 7.84385E-01 -1.04240E-01 -1.91994E-01 -6.84314E-01 -2.07041E-01 3.79176E-01 -1.16723E-01 1.28148E-01 -1.44116E-01 -1.19406E-01 1.14645E-01 1.60264E-01 -Frame 13 2.56235E00 9.13845E-01 -4.71640E-01 -2.50786E-01 -5.64819E-01 -5.60016E-02 4.59839E-01 -2.03148E-01 -1.07216E-01 -1.76447E-02 2.77525E-02 2.41740E-01 2.02475E-01 -Frame 13 2.73037E00 8.14136E-01 -6.46244E-01 -2.55048E-01 -3.27907E-01 -1.41970E-02 3.68139E-01 -2.86503E-01 -1.72432E-01 2.01243E-01 9.68836E-02 2.50949E-01 9.13910E-03 -Frame 13 2.72698E00 7.21153E-01 -7.33624E-01 -1.48801E-01 -1.54714E-01 -3.23495E-02 6.00507E-02 -2.14736E-01 -1.14748E-01 3.34629E-01 1.98697E-01 -1.08324E-03 -7.61086E-02 -Frame 13 2.62596E00 7.31644E-01 -8.40346E-01 -5.50304E-03 -3.28700E-02 -1.63864E-02 -1.36516E-01 -2.64659E-01 -2.17245E-02 4.44326E-01 9.85775E-02 -3.22752E-02 -7.00669E-02 -Frame 13 2.16993E00 6.78725E-01 -9.08972E-01 2.62372E-01 -7.40952E-02 3.49210E-02 -1.59409E-01 -3.73103E-01 1.29982E-01 3.81948E-01 -4.03948E-02 -6.82722E-02 9.11368E-02 -Frame 13 -3.29460E-01 3.16062E-01 -3.97930E-01 3.37157E-01 4.57893E-01 5.33536E-02 1.02886E-01 -2.91726E-01 -1.07289E-01 4.82973E-02 2.25503E-01 -9.13235E-02 1.09846E-01 -Frame 13 -9.53300E-01 3.71564E-01 -4.34045E-01 4.36320E-01 4.36676E-01 5.64456E-02 6.40845E-02 -1.72605E-01 -1.70636E-01 7.67497E-02 2.63054E-01 -1.65837E-01 1.42317E-01 -Frame 13 -4.50767E-01 2.11570E-01 -5.39084E-01 5.51035E-01 5.97693E-02 1.75349E-01 9.26326E-02 -2.70534E-01 1.92600E-02 8.98672E-02 4.74020E-02 -9.43510E-02 -5.39807E-02 -Frame 13 1.42453E00 2.38338E-01 -7.11084E-01 5.94860E-01 -1.61570E-01 1.95992E-01 -7.04920E-02 -5.63026E-01 2.03846E-01 2.84653E-01 1.32434E-01 -1.45979E-01 -7.38184E-02 -Frame 13 2.47197E00 5.55732E-01 -8.63884E-01 2.72171E-01 -1.53457E-01 5.40665E-02 -1.56061E-01 -3.28548E-01 1.51651E-01 3.15223E-01 7.01321E-02 -2.35464E-01 7.84326E-02 -Frame 13 2.73943E00 4.03408E-01 -7.85395E-01 1.34214E-01 -9.45655E-02 -1.00068E-03 -1.53749E-01 -3.37823E-01 1.30441E-01 3.88110E-01 5.43751E-02 -2.50342E-01 7.55638E-02 -Frame 13 2.36911E00 4.76812E-01 -6.67271E-01 -6.73553E-02 -1.33828E-01 5.51894E-02 -1.67977E-01 -2.61504E-01 3.77680E-02 4.32800E-01 4.17999E-02 -1.03036E-01 -4.22500E-02 -Frame 13 2.07679E00 5.90311E-01 -6.47298E-01 -1.98991E-01 -1.10011E-01 4.79720E-02 -5.91622E-02 -3.23321E-01 4.63320E-02 4.74182E-01 1.38291E-02 4.43331E-02 -2.39366E-01 -Frame 13 2.02559E00 6.27036E-01 -5.53358E-01 -2.54980E-01 -1.13102E-01 3.72616E-02 2.09900E-02 -3.55227E-01 4.82838E-02 4.15287E-01 6.10042E-02 1.07668E-01 -3.62968E-01 -Frame 13 1.76637E00 7.26808E-01 -4.08603E-01 -2.03465E-01 -2.81550E-01 1.07726E-01 4.74069E-02 -3.62110E-01 7.68456E-02 2.57086E-01 9.89112E-02 1.69656E-01 -3.13128E-01 -Frame 13 1.48873E00 7.90257E-01 -3.40118E-01 -2.21011E-01 -2.52658E-01 1.30094E-01 1.26807E-02 -2.82299E-01 -7.18520E-02 2.75236E-01 1.05913E-01 1.43043E-01 -1.97050E-01 -Frame 13 1.21959E00 6.10006E-01 -4.26330E-02 -2.94583E-01 -4.26672E-01 2.82632E-01 -2.37146E-02 -2.17241E-01 -1.27158E-01 2.27705E-01 1.29751E-01 1.38133E-01 -1.30257E-01 -Frame 13 1.00485E00 6.06170E-01 -1.16080E-01 -2.46817E-01 -4.20614E-01 2.12638E-01 2.72018E-02 -1.86231E-01 -1.82141E-01 2.25391E-01 1.65958E-01 1.75132E-01 -1.46709E-01 -Frame 13 9.60567E-01 6.58358E-01 -1.15735E-01 -2.69298E-01 -3.35119E-01 6.10328E-02 9.20498E-02 -2.22991E-01 -1.58323E-01 2.30999E-01 1.09092E-01 2.45806E-01 -1.57668E-01 -Frame 13 8.07411E-01 7.92225E-01 -4.93530E-02 -2.53654E-01 -4.16037E-01 6.27926E-02 1.83308E-01 -2.44718E-01 -2.48456E-01 1.89013E-01 1.42592E-01 2.67713E-01 -2.07545E-01 -Frame 13 3.40862E-01 8.69623E-01 3.55854E-02 -1.47684E-01 -5.48732E-01 1.61662E-01 1.08958E-01 -1.62885E-01 -2.94170E-01 1.52899E-01 1.96695E-01 2.04013E-01 -1.73827E-01 -Frame 13 -9.56604E-03 7.91722E-01 1.78991E-02 -2.51378E-01 -3.62855E-01 8.52389E-02 1.22870E-01 -1.30945E-01 -1.98627E-01 4.51046E-02 2.18997E-01 2.34752E-01 -1.09176E-01 -Frame 13 4.69491E-02 7.18788E-01 8.48633E-02 -2.99512E-01 -4.19308E-01 1.35383E-01 7.59130E-02 -1.51808E-02 -2.44409E-01 -3.22835E-02 2.40816E-01 2.43079E-01 -4.12822E-02 -Frame 13 -1.82383E-01 7.94825E-01 2.37638E-01 -2.16496E-01 -5.02992E-01 9.19781E-02 7.27442E-02 8.09596E-02 -1.98947E-01 -1.68480E-01 2.00994E-01 2.50807E-01 -3.45341E-02 -Frame 13 -4.89089E-01 8.14565E-01 1.63226E-01 -1.66461E-01 -4.73717E-01 1.05415E-01 9.80375E-02 6.60006E-02 -1.92284E-01 -2.00041E-01 1.81195E-01 2.22769E-01 1.77898E-02 -Frame 13 -8.95098E-01 8.29570E-01 9.67928E-02 -2.64522E-01 -3.95039E-01 1.28252E-01 6.99649E-03 1.09050E-01 -1.20210E-01 -2.31721E-01 2.20396E-01 1.91093E-01 6.38869E-02 -Frame 13 -7.38374E-01 8.31637E-01 2.26133E-01 -3.44059E-01 -4.11952E-01 1.81472E-01 -3.34426E-02 7.32125E-02 -9.56367E-02 -2.28617E-01 1.44643E-01 1.66517E-01 8.01598E-02 -Frame 13 -9.46987E-01 7.78742E-01 3.22649E-01 -1.82722E-01 -3.91288E-01 7.46010E-02 4.50707E-03 1.72619E-01 -1.74735E-01 -2.45407E-01 1.79911E-01 1.54589E-01 -2.11636E-02 -Frame 13 -1.51789E00 6.35642E-01 2.18088E-01 -3.06732E-01 -2.57294E-01 2.76267E-02 5.54874E-02 1.76697E-01 -9.59555E-02 -1.94274E-01 3.27741E-02 1.28166E-01 2.86107E-02 -Frame 13 -1.60803E00 6.01653E-01 1.63762E-01 -1.74530E-01 -3.08110E-01 7.66005E-02 8.37163E-02 1.11605E-01 3.86550E-02 -2.88909E-01 -5.07956E-02 2.06110E-01 8.76042E-02 -Frame 13 -1.92107E00 4.27209E-01 1.13826E-01 -1.29280E-01 -3.12792E-01 1.40754E-01 1.52826E-01 2.63710E-01 2.21328E-02 -1.88876E-01 6.01051E-03 1.80090E-01 8.09532E-02 -Frame 13 -1.69738E00 5.44194E-01 2.15965E-01 -4.60044E-02 -3.54674E-01 1.46074E-01 7.20250E-02 1.55433E-01 -2.47749E-02 -2.32129E-01 5.80982E-02 6.62341E-02 -5.07428E-03 -Frame 13 -2.24042E00 4.13780E-01 2.79406E-01 -7.43337E-02 -4.27952E-01 8.17253E-02 1.53395E-01 1.03995E-01 6.83430E-02 -2.32159E-01 -6.10607E-02 6.11096E-02 1.51125E-01 -Frame 13 -3.35034E00 -2.40919E-01 -5.20984E-02 -6.23148E-02 -1.69487E-01 3.06066E-01 1.36493E-01 1.85423E-01 2.43130E-01 4.23118E-02 4.56278E-02 7.08588E-02 1.13216E-01 -Frame 13 -2.70554E00 3.33366E-01 3.55645E-01 1.02358E-01 -2.58237E-01 1.09713E-01 2.07230E-01 5.16259E-02 1.91490E-02 -3.10057E-02 2.07937E-02 1.93065E-02 -2.72337E-02 -Frame 13 -2.87585E00 -7.49190E-02 2.56376E-01 1.45623E-01 -2.82299E-01 1.63519E-02 1.34351E-01 2.67994E-01 1.71388E-01 -1.18700E-01 -7.91579E-02 -4.68826E-02 1.96967E-02 -Frame 13 -3.53863E00 -4.57725E-01 1.56994E-01 5.58858E-02 -1.93273E-01 1.55923E-01 1.99230E-01 2.66174E-01 2.41749E-01 7.44243E-02 1.06374E-02 9.50720E-03 1.76113E-01 -Frame 13 -3.53194E00 -1.79864E-01 5.98747E-02 -6.22535E-02 1.18058E-01 2.27120E-01 1.58394E-01 1.13585E-01 2.02407E-01 9.29829E-02 5.06055E-02 -3.90864E-02 9.26163E-02 -Frame 13 -3.80216E00 -4.85639E-01 -8.53524E-02 -8.75485E-02 3.10341E-02 2.23415E-01 1.29957E-01 2.30148E-01 3.70753E-01 1.58397E-01 5.74322E-02 4.60942E-02 1.69331E-01 -Frame 13 -4.07366E00 -6.68995E-01 -1.33300E-01 -1.12175E-01 -1.06313E-01 1.07318E-02 6.23432E-02 2.13040E-01 3.39954E-01 1.33526E-01 7.25359E-02 1.01585E-01 1.15617E-01 -Frame 13 -3.83639E00 -5.82796E-01 -1.36949E-01 -1.94487E-02 -1.75886E-02 9.67059E-02 1.35574E-01 1.61879E-01 4.10095E-02 1.15670E-01 1.58105E-01 3.59982E-02 7.01896E-02 -Frame 13 -4.02997E00 -6.94261E-01 -1.03877E-01 -4.74954E-03 -7.43306E-02 1.33228E-01 1.51412E-01 2.12384E-01 8.23824E-02 7.65756E-02 -4.47513E-02 -2.16426E-02 7.28597E-02 -Frame 13 -4.31614E00 -7.40435E-01 5.44666E-02 -9.42117E-03 6.46300E-03 2.32919E-01 1.60436E-01 1.98079E-01 2.07763E-01 -1.26570E-02 -1.24298E-02 -3.21692E-04 1.45020E-01 -Frame 13 -4.50672E00 -8.18359E-01 -9.04503E-02 -1.18254E-02 -5.64226E-02 9.50501E-02 -3.80592E-02 1.50494E-01 5.65873E-02 5.44640E-02 3.65113E-02 1.67494E-01 1.44156E-01 -Frame 13 -4.39163E00 -9.16723E-01 -2.90100E-01 -3.54528E-02 7.05750E-02 2.59452E-01 2.17710E-01 1.93807E-01 1.84526E-01 8.00346E-03 2.72078E-02 1.70702E-01 1.65198E-01 -Frame 13 -4.33134E00 -8.54006E-01 -1.11622E-01 9.93593E-02 1.01943E-01 2.29500E-01 1.73836E-01 1.44768E-01 3.34424E-01 5.55910E-02 1.83520E-01 2.42456E-01 2.76702E-01 -Frame 13 -3.99673E00 -5.24868E-01 -1.31407E-01 -3.10080E-02 -8.67055E-03 1.14643E-01 7.21971E-02 -6.82462E-02 1.04487E-01 2.80632E-02 1.04043E-01 1.51261E-01 8.91924E-02 -Frame 13 -4.37894E00 -8.39015E-01 -5.04248E-02 8.57833E-02 8.74962E-02 3.03410E-01 1.13683E-01 1.75580E-02 1.84726E-01 1.81439E-01 1.33107E-01 3.64985E-02 6.36432E-03 -Signal: SpeechEndSignal -Signal: DataEndSignal: creation time: 1424472828998, duration: 5235ms -Data: null diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-dct.dump b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-dct.dump deleted file mode 100755 index 7121bd5a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-dct.dump +++ /dev/null @@ -1,321 +0,0 @@ -Signal: DataStartSignal: creation time: 1422745326991 -Signal: SpeechStartSignal -Frame 13 4.35044E00 -3.62124E-01 -5.57873E-02 5.28954E-04 -1.62325E-01 -3.29990E-02 -2.69022E-01 3.61039E-02 1.02191E-01 -1.22760E-01 -1.72807E-01 -1.59047E-02 3.64013E-02 -Frame 13 4.36248E00 -3.09225E-01 -1.27483E-01 -7.35245E-02 -6.60480E-02 -3.30893E-02 -8.88829E-02 1.49858E-01 7.22210E-02 1.56518E-01 -6.66357E-02 -5.36541E-02 -4.36872E-02 -Frame 13 4.19125E00 -3.10615E-01 3.53757E-03 -2.76253E-03 -1.30944E-02 7.17566E-02 -8.53887E-02 -5.67504E-02 8.67437E-03 1.26834E-02 -1.14026E-01 -1.11036E-01 -1.91624E-01 -Frame 13 4.14029E00 -3.86329E-01 4.45131E-02 -8.98670E-02 -2.37712E-01 7.68078E-02 -1.09436E-01 1.42774E-01 1.12632E-01 -7.30498E-02 -8.06841E-02 1.08366E-01 4.48720E-02 -Frame 13 4.33023E00 -3.17547E-01 1.57211E-01 2.67626E-01 -1.16972E-01 2.07867E-03 -1.34386E-01 1.31169E-01 -4.31010E-02 -1.32614E-01 -5.23259E-02 1.37288E-01 1.89288E-03 -Frame 13 5.30770E00 6.06625E-01 6.40427E-01 1.89722E-01 -1.82725E-01 -3.30100E-01 -2.65303E-01 -8.51583E-02 -6.85112E-02 -5.18835E-02 -1.72679E-02 -1.19163E-01 -6.49302E-02 -Frame 13 6.37377E00 9.61735E-01 7.06981E-01 1.16524E-01 -3.36494E-01 -5.00431E-01 -2.87676E-01 -3.20377E-03 -7.22889E-02 9.48041E-02 -8.91435E-02 -1.45179E-01 -1.38953E-01 -Frame 13 7.32419E00 1.26729E00 7.21723E-01 -1.12210E-02 -4.98162E-01 -5.93425E-01 -3.71346E-01 1.05433E-02 -8.66791E-02 6.67726E-05 -1.20808E-01 -2.15508E-01 -2.97108E-01 -Frame 13 8.71594E00 1.57792E00 2.13874E-01 -1.59173E-01 -5.35772E-01 -6.77416E-01 -3.13183E-01 -3.32226E-02 -1.54243E-02 -1.06585E-01 -2.52006E-01 -5.68518E-02 -3.54771E-01 -Frame 13 1.00357E01 1.44059E00 9.40012E-02 -3.78655E-01 -6.08570E-01 -8.39901E-01 -1.77156E-01 1.50101E-01 -1.77339E-01 3.71409E-02 -3.61866E-01 -6.67967E-02 -3.38660E-01 -Frame 13 1.08173E01 1.37116E00 -1.72188E-01 -4.49920E-01 -7.47369E-01 -6.98217E-01 -7.31388E-02 1.66398E-01 -2.67948E-01 6.58358E-02 -3.14414E-01 -4.63809E-02 -1.64520E-01 -Frame 13 1.14681E01 1.15484E00 -3.23511E-01 -4.96057E-01 -7.55829E-01 -5.58044E-01 -2.62330E-02 1.25516E-01 -3.69320E-01 2.43154E-03 -2.27315E-01 7.58266E-02 -1.07124E-01 -Frame 13 1.18500E01 9.42532E-01 -4.14449E-01 -5.33553E-01 -6.70553E-01 -4.34453E-01 -2.38645E-02 2.09362E-03 -3.89844E-01 8.22018E-03 -1.02913E-01 8.61397E-02 -8.83702E-02 -Frame 13 1.19570E01 8.35838E-01 -4.77081E-01 -5.09760E-01 -5.37755E-01 -3.99048E-01 -1.19405E-01 -9.33199E-02 -3.83898E-01 1.53901E-01 -6.84146E-02 -2.88529E-02 -1.01248E-01 -Frame 13 1.20162E01 6.04524E-01 -3.72135E-01 -4.81265E-01 -4.59911E-01 -2.89872E-01 -2.94205E-01 -1.66914E-01 -3.41551E-01 2.96562E-01 -6.16469E-02 -1.64011E-01 -1.04107E-01 -Frame 13 1.16198E01 5.74589E-01 -2.21462E-01 -4.34042E-01 -4.08860E-01 -1.29760E-01 -5.38148E-01 -1.15752E-01 -3.49612E-01 3.44651E-01 -1.40934E-01 -2.07714E-01 -7.47612E-02 -Frame 13 1.04190E01 2.50605E-01 1.34067E-01 -4.41645E-01 -3.02713E-01 7.19476E-02 -5.30864E-01 -1.88640E-01 -2.46833E-01 1.90605E-01 -1.32482E-01 -1.46431E-01 -6.53755E-02 -Frame 13 8.65321E00 -1.04154E-01 6.68800E-03 -4.99171E-02 -2.88736E-02 2.28254E-02 -2.46326E-01 -1.35266E-03 -3.30087E-01 8.62431E-02 -2.55603E-01 -1.38682E-01 -3.16929E-02 -Frame 13 7.64938E00 4.54050E-01 -3.28732E-01 1.68666E-01 5.73193E-02 -1.29422E-01 -6.45624E-02 3.12390E-03 -3.05242E-01 1.79547E-02 -3.51198E-01 -1.88265E-01 6.69929E-02 -Frame 13 7.60077E00 5.44641E-01 -3.10890E-01 1.54068E-01 3.19966E-02 -2.56189E-01 -8.40390E-02 -5.10415E-02 -3.06394E-01 5.56546E-02 -2.97010E-01 -1.58317E-01 6.61751E-02 -Frame 13 7.30537E00 5.10552E-01 -2.08373E-01 2.01619E-01 9.42251E-02 -2.69055E-01 -7.40461E-02 4.71880E-02 -3.55845E-01 -5.93280E-02 -3.87942E-01 -1.30201E-01 2.50332E-01 -Frame 13 7.18718E00 3.90754E-01 -1.18016E-01 1.41157E-01 6.89464E-02 -1.95777E-01 -1.50324E-01 -9.82656E-02 -2.79773E-01 -1.63593E-02 -2.87712E-01 -1.89836E-01 2.13388E-01 -Frame 13 7.09461E00 3.18274E-01 -4.21691E-02 2.16374E-01 -2.76096E-03 -3.32259E-01 -1.62171E-01 -2.25943E-01 -1.84921E-01 1.75915E-01 -2.32053E-01 -1.20422E-01 2.72238E-02 -Frame 13 6.72771E00 3.44454E-01 8.62565E-02 1.81412E-01 -1.00577E-01 -2.53199E-01 -8.83022E-02 -2.51930E-01 -1.92273E-01 8.74665E-02 -1.33386E-01 -1.07272E-01 4.19245E-02 -Frame 13 7.13285E00 -2.81871E-01 2.95215E-01 8.48372E-02 -3.28446E-02 -1.10549E-01 -1.73535E-01 -7.70419E-02 -1.24186E-01 -1.50891E-02 -1.74940E-01 -1.50030E-01 -8.52441E-02 -Frame 13 8.22251E00 -7.47113E-01 4.51405E-01 -4.78626E-02 -3.39630E-02 -2.44044E-01 -2.60640E-01 -7.36600E-02 -1.04630E-01 -1.90416E-01 -1.21873E-01 -1.36685E-01 -7.49321E-03 -Frame 13 7.77290E00 -1.01836E00 9.05703E-01 -4.62015E-01 2.28356E-01 -1.40398E-01 -3.42449E-01 -1.56944E-01 5.71085E-02 -9.37432E-02 -9.84918E-02 -2.04960E-01 -7.61923E-02 -Frame 13 8.33631E00 -1.39319E00 1.03561E00 -4.13838E-01 2.62971E-01 -3.39329E-02 -2.42791E-01 -3.21127E-03 -8.95977E-02 -8.54271E-02 -1.38594E-01 -1.37574E-01 -8.33538E-02 -Frame 13 8.28425E00 -1.88103E00 8.87036E-01 -4.42900E-01 2.69990E-01 -9.99223E-02 -8.57553E-02 1.09019E-01 2.81738E-02 -9.56249E-02 -1.52844E-03 -1.05403E-01 -7.46721E-02 -Frame 13 8.35409E00 -2.26265E00 7.97251E-01 -4.23603E-01 2.10124E-01 -2.05678E-01 -1.61620E-01 6.10464E-02 -2.75845E-02 -7.91805E-02 -1.32716E-01 -3.68499E-02 -6.49326E-02 -Frame 13 8.63607E00 -2.18503E00 6.00133E-01 -6.17899E-01 1.96504E-01 -2.75343E-01 -9.64911E-02 1.58251E-01 6.12846E-02 -1.41720E-01 -6.11542E-02 9.16654E-04 5.47978E-02 -Frame 13 8.37606E00 -2.17662E00 5.38396E-01 -5.45638E-01 1.37288E-01 -2.87278E-01 -1.12691E-01 -7.88839E-02 -4.22883E-03 -9.95097E-02 4.23090E-02 3.12871E-02 1.76391E-01 -Frame 13 8.09751E00 -2.26177E00 4.44760E-01 -5.02849E-01 2.35857E-01 -1.36726E-01 -2.05919E-01 -9.75681E-02 -1.29713E-01 5.63740E-02 1.40487E-01 -1.97793E-02 1.23789E-03 -Frame 13 7.94484E00 -2.35268E00 3.44628E-01 -4.02412E-01 2.61034E-01 -2.80128E-01 -1.94398E-01 -5.09171E-02 -3.21223E-02 1.38886E-02 3.88740E-03 1.44860E-01 1.45069E-02 -Frame 13 7.79792E00 -2.36984E00 7.12482E-02 -4.05834E-01 1.78883E-01 -2.93559E-01 -1.10815E-01 4.70588E-02 6.89791E-02 4.85285E-02 -5.30727E-02 -6.53702E-03 1.09318E-03 -Frame 13 7.85109E00 -2.17933E00 2.99015E-02 -4.95097E-01 2.46202E-01 -3.15164E-01 -3.01853E-02 1.42964E-01 5.76135E-03 4.90366E-02 -4.55994E-02 -1.06938E-01 3.11248E-02 -Frame 13 8.02570E00 -2.14327E00 2.09305E-01 -4.71295E-01 2.92467E-01 -3.66464E-01 -1.88288E-02 1.31986E-01 -8.38121E-02 -7.04875E-02 -1.06511E-01 -1.23165E-02 3.64472E-02 -Frame 13 8.15790E00 -2.34677E00 3.16570E-01 -5.37930E-01 2.52951E-01 -2.60966E-01 -1.50084E-01 7.22513E-02 3.65560E-02 6.77024E-02 -4.25499E-02 2.92180E-03 2.34842E-02 -Frame 13 8.34810E00 -2.35481E00 4.62994E-01 -3.28795E-01 -2.16732E-02 -2.89379E-01 -3.94897E-02 7.43848E-02 -8.41883E-02 3.97213E-02 1.46785E-01 -8.64162E-02 9.68225E-02 -Frame 13 8.76592E00 -2.22777E00 3.81107E-01 -2.82403E-01 6.70164E-03 -7.32777E-02 -2.61474E-01 -1.68378E-02 -2.61551E-02 -5.72756E-02 1.38801E-02 -1.30949E-01 1.63705E-01 -Frame 13 9.56681E00 -1.86994E00 4.48561E-01 -7.78401E-02 -6.16351E-02 -2.37255E-01 -3.21552E-01 1.82358E-01 -2.62347E-01 -4.15563E-02 -1.25446E-01 -1.67526E-01 1.35861E-01 -Frame 13 1.03179E01 -9.65228E-01 5.19671E-01 3.14747E-01 -5.64738E-04 -1.48204E-01 -5.53134E-01 3.94696E-02 -2.44566E-01 -8.22469E-02 -2.30345E-01 -3.77513E-01 -6.89346E-03 -Frame 13 1.09336E01 1.95104E-02 -3.11756E-02 4.56220E-01 -8.00972E-02 -2.69388E-01 -5.18878E-01 -2.41041E-01 -7.99842E-02 -1.70072E-01 -2.61152E-01 -3.66300E-01 -1.02274E-01 -Frame 13 1.10130E01 4.00956E-01 -2.93790E-01 4.27016E-01 8.11312E-03 -4.43731E-01 -4.82615E-01 -2.43343E-01 -7.42372E-02 -1.58034E-01 -2.98572E-01 -3.37653E-01 -1.12834E-01 -Frame 13 1.10159E01 7.21706E-01 -6.27554E-01 4.00235E-01 1.73026E-01 -5.95863E-01 -3.71593E-01 -3.51864E-01 -3.00876E-03 -1.28381E-01 -4.05540E-01 -2.74845E-01 -8.04982E-02 -Frame 13 1.09687E01 8.60114E-01 -7.46111E-01 3.51126E-01 2.24685E-01 -5.51534E-01 -3.72795E-01 -4.45024E-01 5.55407E-02 -1.34470E-01 -4.41650E-01 -2.34995E-01 -1.21300E-01 -Frame 13 1.07855E01 1.01896E00 -7.68319E-01 1.58633E-01 3.53368E-01 -4.38636E-01 -4.74253E-01 -4.26629E-01 8.51467E-03 -1.46721E-01 -3.65022E-01 -2.95277E-01 -1.02669E-01 -Frame 13 1.05397E01 1.19933E00 -7.86567E-01 -2.97712E-02 4.24751E-01 -3.21571E-01 -4.54221E-01 -4.19136E-01 -1.24005E-01 -5.37699E-02 -3.72371E-01 -2.60435E-01 -1.65940E-01 -Frame 13 1.01932E01 1.41047E00 -8.04094E-01 -2.10357E-01 5.15640E-01 -2.75284E-01 -4.21292E-01 -3.49651E-01 -2.50554E-01 -8.38577E-02 -1.90698E-01 -3.55688E-01 -1.43886E-01 -Frame 13 9.73167E00 1.52853E00 -6.80456E-01 -3.55001E-01 5.29797E-01 -2.67271E-01 -3.69243E-01 -2.58895E-01 -3.57665E-01 -1.15459E-01 -1.25124E-01 -3.15793E-01 -1.70552E-01 -Frame 13 9.46197E00 1.58420E00 -6.55974E-01 -4.08404E-01 4.62743E-01 -2.16181E-01 -2.87612E-01 -2.13985E-01 -3.70674E-01 -1.82016E-01 -1.37994E-01 -2.56690E-01 -1.71589E-01 -Frame 13 9.10240E00 1.65086E00 -5.96936E-01 -3.94452E-01 3.02390E-01 -1.14437E-01 -3.06373E-01 -1.72005E-01 -3.94948E-01 -1.37643E-01 -1.74576E-01 -2.70537E-01 -2.32426E-02 -Frame 13 9.09393E00 1.58220E00 -4.87755E-01 -4.36498E-01 2.34770E-01 -1.18027E-01 -2.89651E-01 -1.62881E-01 -3.58775E-01 -1.51426E-01 -2.33781E-01 -2.58093E-01 4.76700E-02 -Frame 13 9.11952E00 1.59095E00 -4.69505E-01 -4.03706E-01 1.39814E-01 -1.32774E-01 -2.31202E-01 -1.25836E-01 -3.38888E-01 -2.66995E-01 -2.60491E-01 -1.98730E-01 9.25015E-02 -Frame 13 9.04627E00 1.75061E00 -5.29420E-01 -3.85950E-01 1.23137E-01 -1.73327E-01 -2.80588E-01 -2.05186E-02 -3.59483E-01 -2.79016E-01 -2.79259E-01 -1.76519E-01 8.40846E-02 -Frame 13 9.09248E00 1.82271E00 -5.54404E-01 -3.47955E-01 1.47782E-01 -3.63032E-01 -1.97002E-01 -1.50639E-02 -3.39183E-01 -3.32776E-01 -2.55977E-01 -2.35809E-01 1.11467E-01 -Frame 13 9.32511E00 1.78131E00 -5.73791E-01 -3.46382E-01 1.20030E-01 -5.47196E-01 -1.20250E-01 8.42373E-02 -3.73775E-01 -4.34523E-01 -1.67401E-01 -3.00203E-01 1.64910E-01 -Frame 13 9.47919E00 1.73969E00 -5.02040E-01 -3.28128E-01 6.20629E-02 -6.97392E-01 5.92403E-03 1.03976E-01 -4.77474E-01 -3.72227E-01 -1.78954E-01 -2.95253E-01 1.75162E-01 -Frame 13 9.63656E00 1.66845E00 -4.21712E-01 -2.87499E-01 -4.26616E-02 -8.16773E-01 2.08158E-01 -1.92739E-02 -4.09894E-01 -4.07242E-01 -1.56772E-01 -3.05400E-01 1.25584E-01 -Frame 13 9.62970E00 1.62140E00 -3.14453E-01 -2.38182E-01 -2.81053E-01 -6.88015E-01 2.39073E-01 -7.11105E-02 -3.84073E-01 -4.25769E-01 -1.44140E-01 -3.07753E-01 7.10870E-02 -Frame 13 9.74769E00 1.39272E00 -1.10818E-01 -2.08465E-01 -4.00104E-01 -5.99327E-01 1.85309E-01 -3.89310E-02 -3.65505E-01 -4.27427E-01 -1.45522E-01 -3.22719E-01 4.58114E-02 -Frame 13 9.43385E00 1.45589E00 -1.00251E-01 -1.09733E-01 -4.70042E-01 -5.50313E-01 2.07521E-01 -1.38789E-01 -2.74339E-01 -3.47839E-01 -2.33428E-01 -3.03667E-01 1.57516E-02 -Frame 13 9.28895E00 1.31588E00 1.92649E-02 -5.21848E-02 -5.61074E-01 -4.18600E-01 1.43292E-01 -5.34326E-02 -3.53892E-01 -2.96917E-01 -2.22384E-01 -2.95243E-01 -2.47794E-02 -Frame 13 8.91334E00 1.30616E00 5.07156E-02 -3.48527E-03 -5.46679E-01 -3.78899E-01 1.22678E-01 8.92410E-03 -3.73815E-01 -2.49791E-01 -2.78315E-01 -2.83717E-01 -3.70729E-02 -Frame 13 8.66443E00 1.21874E00 8.31172E-02 4.59799E-02 -5.05230E-01 -3.70760E-01 1.68128E-01 -1.45981E-02 -2.96487E-01 -3.43641E-01 -3.26663E-01 -1.40577E-01 -1.00811E-01 -Frame 13 8.71712E00 1.07195E00 3.96130E-02 -1.59377E-02 -4.10453E-01 -2.18274E-01 1.98388E-01 -1.13234E-01 -3.56962E-01 -4.25077E-01 -1.32834E-01 -1.17140E-01 -1.48925E-01 -Frame 13 8.68198E00 9.42343E-01 3.94573E-02 -5.62922E-02 -1.98553E-01 -1.04821E-01 -4.29410E-02 -1.01697E-01 -4.44069E-01 -2.75379E-01 2.31331E-02 -1.33081E-01 -3.07189E-01 -Frame 13 8.53589E00 8.37509E-01 4.96942E-02 -3.04231E-02 -1.16324E-01 1.18998E-01 -2.31512E-01 -1.34744E-01 -4.34483E-01 -1.22887E-01 1.41270E-02 -1.69223E-01 -4.17024E-01 -Frame 13 8.84926E00 1.98714E-01 2.75406E-01 1.01002E-01 -1.07625E-01 3.37139E-01 -4.35935E-01 -1.76557E-01 -2.46156E-01 -1.16401E-01 4.15566E-02 -3.27686E-01 -3.84607E-01 -Frame 13 8.94281E00 -9.49614E-01 8.58228E-01 8.46702E-02 -2.37687E-01 5.44295E-01 -4.91729E-01 -1.27325E-01 -2.42994E-01 -1.36098E-01 -9.98072E-02 -2.75437E-01 -3.40930E-01 -Frame 13 8.14671E00 -1.79532E00 1.10740E00 -5.62089E-02 -8.55538E-02 4.90510E-01 -2.41901E-01 -1.46648E-02 -2.53670E-01 -1.45412E-01 -2.51351E-01 -1.41314E-01 -2.37684E-01 -Frame 13 8.56454E00 -2.10145E00 7.01850E-01 -4.39057E-01 -4.34089E-02 2.01917E-01 -2.91028E-01 4.15672E-02 -9.51495E-02 -2.61683E-03 -1.25427E-01 -2.11941E-02 -2.91832E-02 -Frame 13 8.43440E00 -2.36065E00 8.72805E-01 -4.21230E-01 2.33440E-02 1.59010E-01 -3.02125E-01 9.65477E-02 -1.76686E-01 -1.95330E-02 -1.84578E-01 -6.19594E-02 -9.15061E-02 -Frame 13 8.69377E00 -2.48599E00 7.13804E-01 -5.47133E-01 1.69138E-01 2.17432E-01 -3.18982E-01 1.03581E-01 -6.01421E-02 -8.73166E-02 -2.10498E-01 1.63628E-02 -1.34508E-01 -Frame 13 8.65003E00 -2.54413E00 6.37682E-01 -7.15696E-01 -4.30991E-02 -3.58049E-02 -2.92961E-01 1.57462E-01 -4.95223E-02 -9.84432E-03 -2.22106E-01 3.71600E-03 3.36247E-02 -Frame 13 8.57784E00 -2.39769E00 6.21234E-01 -6.00109E-01 5.14082E-02 -7.27700E-02 -1.77462E-01 1.05405E-01 -4.72197E-02 1.75206E-03 -4.21092E-02 -1.18296E-01 1.21442E-02 -Frame 13 8.52879E00 -2.28850E00 5.96037E-01 -4.86263E-01 2.36464E-01 1.22273E-01 -2.31706E-01 5.18030E-02 -1.01909E-01 -2.08411E-02 -4.61746E-02 -5.63914E-02 -1.04416E-03 -Frame 13 8.33662E00 -2.49679E00 5.26025E-01 -5.32588E-01 2.00722E-01 -2.36118E-02 -1.06294E-01 2.63757E-01 7.82655E-02 2.03469E-02 -1.49985E-02 -8.15834E-02 -9.70959E-02 -Frame 13 8.37091E00 -2.23877E00 4.24794E-01 -4.95512E-01 1.98045E-01 -7.77691E-02 -2.04898E-01 5.71114E-02 -1.69569E-02 1.21614E-02 -1.13058E-02 -1.35103E-01 -6.75674E-02 -Frame 13 9.11584E00 -1.78801E00 5.68713E-01 -4.03687E-01 -3.46533E-02 -2.79316E-01 -4.08551E-01 6.94688E-03 2.83545E-02 6.45817E-02 -5.12608E-02 -2.38875E-01 -1.14076E-01 -Frame 13 8.75233E00 -1.47855E00 4.37563E-01 -2.38305E-01 -3.82878E-02 -1.66835E-01 -4.01877E-01 1.52179E-01 4.45770E-02 4.03653E-02 -6.84665E-02 -9.26239E-02 -3.39282E-02 -Frame 13 9.72721E00 -4.35378E-01 5.36557E-01 -1.58731E-02 5.76678E-02 1.15460E-01 -6.28736E-01 -1.45487E-01 -2.47235E-01 -5.62516E-02 -2.10143E-01 -3.09757E-01 1.57670E-02 -Frame 13 9.79783E00 1.99808E-01 3.79771E-01 1.93118E-01 -7.96187E-02 -4.90359E-02 -6.15250E-01 -2.89118E-01 -2.18486E-01 6.64334E-02 -2.04881E-01 -4.70730E-01 -4.56653E-02 -Frame 13 1.03041E01 5.00930E-01 -5.15673E-02 3.45116E-01 8.26194E-02 -5.16494E-01 -3.82018E-01 -3.25253E-01 -2.74296E-01 6.33071E-02 -2.67234E-01 -2.40534E-01 -1.71221E-01 -Frame 13 1.05956E01 5.18246E-01 -2.10726E-01 4.11522E-01 2.17372E-01 -6.80667E-01 -4.17617E-01 -3.58562E-01 -2.24179E-01 1.05915E-01 -2.57279E-01 -2.97452E-01 -1.20122E-01 -Frame 13 1.02922E01 7.91548E-01 -3.06884E-01 3.89974E-01 1.05466E-01 -6.45222E-01 -3.19783E-01 -3.83430E-01 -2.45107E-01 1.00183E-01 -2.14724E-01 -3.44446E-01 -1.07765E-01 -Frame 13 1.00623E01 9.78566E-01 -3.71129E-01 2.49762E-01 1.91444E-01 -6.27239E-01 -2.67368E-01 -4.37265E-01 -2.13259E-01 1.74838E-01 -3.60447E-01 -3.14066E-01 -5.79182E-02 -Frame 13 9.74165E00 1.21170E00 -4.11847E-01 7.98570E-03 2.99917E-01 -4.61520E-01 -3.84031E-01 -3.07735E-01 -3.04633E-01 1.24788E-01 -3.12058E-01 -2.43009E-01 -1.02348E-01 -Frame 13 9.53304E00 1.44298E00 -5.21762E-01 -1.93201E-01 3.73981E-01 -2.82382E-01 -4.91737E-01 -3.51166E-01 -2.69811E-01 1.06168E-01 -2.53016E-01 -2.42202E-01 -1.17223E-01 -Frame 13 9.43828E00 1.52406E00 -5.27299E-01 -3.99816E-01 4.43667E-01 -2.39856E-01 -4.79058E-01 -2.85159E-01 -3.96265E-01 1.28212E-01 -1.75214E-01 -1.99781E-01 -2.44162E-01 -Frame 13 9.38542E00 1.64099E00 -6.36930E-01 -5.28696E-01 5.37584E-01 -2.16907E-01 -5.27288E-01 -2.23819E-01 -3.94570E-01 2.56359E-02 -3.73727E-02 -2.61220E-01 -2.14669E-01 -Frame 13 9.40312E00 1.67863E00 -6.91186E-01 -5.16902E-01 4.46985E-01 -1.36004E-01 -5.09744E-01 -2.35965E-01 -3.97479E-01 3.95638E-04 -2.88329E-02 -2.49490E-01 -1.17028E-01 -Frame 13 9.50297E00 1.72444E00 -7.57412E-01 -4.97966E-01 4.19116E-01 -1.87583E-01 -4.73994E-01 -1.86658E-01 -3.86640E-01 -8.41814E-02 -4.12614E-02 -1.64255E-01 -1.30116E-01 -Frame 13 9.54620E00 1.73208E00 -7.00336E-01 -5.40376E-01 4.00478E-01 -2.98290E-01 -4.57901E-01 -4.92419E-02 -4.14527E-01 -1.67751E-01 -3.73140E-02 -1.39900E-01 -2.94590E-02 -Frame 13 9.43970E00 1.80143E00 -6.44316E-01 -5.28336E-01 2.40208E-01 -2.82720E-01 -3.92319E-01 -4.84784E-02 -4.06430E-01 -2.03214E-01 -5.71937E-02 -9.06384E-02 -9.91358E-03 -Frame 13 9.42800E00 1.82103E00 -6.63198E-01 -4.51076E-01 1.37876E-01 -3.57959E-01 -3.59786E-01 9.64976E-02 -4.95430E-01 -2.06854E-01 -7.99178E-02 -7.28974E-02 7.63842E-02 -Frame 13 9.47146E00 1.78670E00 -6.41585E-01 -3.85651E-01 2.05535E-02 -4.44396E-01 -1.98490E-01 6.30542E-02 -4.42769E-01 -2.80683E-01 -1.01096E-01 -1.17787E-02 5.52739E-02 -Frame 13 9.49960E00 1.74275E00 -5.71629E-01 -3.14754E-01 -1.45185E-01 -4.72610E-01 -8.52206E-02 6.62450E-02 -4.68381E-01 -2.92755E-01 -9.42821E-02 -9.19874E-02 1.37452E-01 -Frame 13 9.53428E00 1.68078E00 -5.42438E-01 -2.19212E-01 -2.63496E-01 -5.13872E-01 -2.67437E-02 7.89033E-02 -4.64928E-01 -2.68367E-01 -1.63295E-01 -6.83394E-02 1.08584E-01 -Frame 13 9.73282E00 1.47196E00 -4.15000E-01 -1.85527E-01 -3.73471E-01 -4.76678E-01 -8.76404E-03 4.38571E-02 -3.71680E-01 -3.40739E-01 -1.22935E-01 -1.15558E-01 3.07315E-02 -Frame 13 9.74849E00 1.39601E00 -3.27771E-01 -1.76889E-01 -4.23260E-01 -4.74028E-01 -2.33962E-04 1.06865E-01 -4.12079E-01 -2.98163E-01 -1.81713E-01 -1.44611E-01 2.98254E-02 -Frame 13 9.70056E00 1.34031E00 -2.66135E-01 -9.50722E-02 -5.60561E-01 -3.88277E-01 1.32688E-02 1.05060E-01 -3.74139E-01 -3.42808E-01 -1.79698E-01 -1.67465E-01 -1.59739E-02 -Frame 13 9.39156E00 1.45764E00 -2.63762E-01 -7.90612E-02 -5.38266E-01 -3.86042E-01 5.20022E-02 9.39639E-02 -4.19785E-01 -2.80194E-01 -2.33658E-01 -1.48568E-01 -1.03710E-01 -Frame 13 9.18799E00 1.42721E00 -2.16407E-01 -2.96265E-02 -5.31380E-01 -3.53969E-01 6.72784E-02 4.32667E-02 -4.04096E-01 -2.43321E-01 -2.68419E-01 -1.63815E-01 -1.14920E-01 -Frame 13 9.05705E00 1.33436E00 -1.46220E-01 3.63139E-02 -5.81362E-01 -2.76266E-01 8.44843E-02 -2.04283E-02 -3.20955E-01 -3.09157E-01 -2.19348E-01 -2.31467E-01 -7.54937E-02 -Frame 13 8.89946E00 1.31810E00 -1.27686E-01 4.47774E-02 -5.47911E-01 -2.70484E-01 1.41775E-01 -1.95276E-02 -3.78117E-01 -2.95943E-01 -2.50448E-01 -2.01502E-01 -9.59402E-02 -Frame 13 8.76405E00 1.36610E00 -2.36699E-01 1.21452E-01 -4.99087E-01 -3.35684E-01 2.24632E-01 -6.24305E-02 -4.03591E-01 -3.27574E-01 -1.90987E-01 -1.93562E-01 -1.03443E-01 -Frame 13 8.89314E00 1.25882E00 -2.86229E-01 6.65987E-02 -3.90766E-01 -2.10326E-01 1.35810E-01 -8.96062E-02 -4.83134E-01 -3.43649E-01 -9.00668E-02 -8.96672E-02 -1.18347E-01 -Frame 13 9.24854E00 9.98992E-01 -3.30716E-01 8.82643E-02 -2.97892E-01 -9.05531E-02 4.16669E-02 -2.21254E-01 -4.88019E-01 -2.63053E-01 -1.84214E-03 -4.34231E-02 -2.45865E-01 -Frame 13 9.34948E00 8.27170E-01 -3.67579E-01 1.54577E-01 -1.82941E-01 -9.99905E-03 -8.79556E-02 -3.60196E-01 -3.73229E-01 -2.07185E-01 8.03940E-02 -1.97065E-01 -2.98206E-01 -Frame 13 9.79136E00 -2.15338E-01 3.24083E-01 -7.41458E-02 -1.34921E-01 2.66243E-01 -4.15816E-01 -2.02922E-01 -4.60620E-01 -1.23516E-01 1.06029E-01 -4.18645E-01 -2.68183E-01 -Frame 13 9.08811E00 -1.11804E00 1.08381E00 -2.86952E-01 -8.09186E-02 2.79887E-01 -3.04322E-01 -5.70276E-02 -4.44298E-01 -7.78238E-02 1.41179E-02 -2.49339E-01 -3.06983E-01 -Frame 13 7.84309E00 -1.66454E00 1.19687E00 -3.46940E-01 1.24638E-01 3.60782E-01 -2.92369E-01 1.77484E-03 -1.63174E-01 -7.89512E-02 -1.40261E-01 1.31480E-03 -1.63317E-01 -Frame 13 7.80748E00 -2.10587E00 1.03787E00 -7.15436E-01 -3.61714E-02 1.89208E-01 -3.52937E-01 2.34162E-01 -9.68398E-02 -9.36140E-02 -2.63271E-01 2.91994E-02 -1.95118E-01 -Frame 13 8.15584E00 -2.43505E00 9.51214E-01 -6.30737E-01 -4.76758E-02 5.87748E-02 -5.08096E-01 1.50631E-01 -6.92442E-02 -1.78566E-03 -1.96614E-01 -5.06054E-02 -1.67037E-01 -Frame 13 8.08211E00 -2.50684E00 8.59352E-01 -5.50065E-01 3.29916E-03 -1.05570E-01 -4.60499E-01 1.12212E-01 -3.58546E-02 4.05333E-02 -5.51868E-02 2.49199E-02 -7.27162E-02 -Frame 13 8.41894E00 -2.50731E00 7.88475E-01 -5.32093E-01 -1.35517E-01 -4.94037E-02 -3.10894E-01 1.60268E-01 -9.97777E-02 -1.47584E-01 2.98767E-02 1.17403E-01 -1.17852E-01 -Frame 13 8.58280E00 -2.31736E00 8.27382E-01 -5.12188E-01 2.60169E-04 -8.26660E-03 -3.06082E-01 6.56970E-02 -2.47382E-01 -1.52620E-01 -2.28181E-02 -4.11042E-02 -5.71537E-02 -Frame 13 8.46148E00 -2.47112E00 5.79214E-01 -4.38192E-01 8.58477E-02 3.02484E-02 -4.12761E-01 1.28488E-01 -1.47137E-02 -5.65139E-02 -6.25750E-02 -8.18901E-02 -8.94938E-02 -Frame 13 8.61097E00 -1.85840E00 7.88488E-01 -8.55875E-02 9.00544E-02 1.06664E-01 -4.81127E-01 1.07823E-01 -1.74602E-01 -9.21877E-02 -1.15156E-01 -3.47365E-01 -1.56069E-01 -Frame 13 9.36840E00 -6.55414E-01 5.85114E-01 -4.11170E-02 -3.64435E-02 1.39279E-01 -5.71713E-01 -7.78359E-03 -2.65145E-01 -2.01621E-01 -2.59094E-03 -2.80229E-01 -2.72258E-01 -Frame 13 9.24646E00 8.84939E-02 3.17503E-01 4.26540E-02 -3.59363E-02 -5.29857E-02 -5.35875E-01 -1.80712E-01 -2.19980E-01 -1.38084E-01 -3.95298E-02 -3.44645E-01 -2.24108E-01 -Frame 13 9.47588E00 4.33943E-01 1.74078E-01 1.53365E-01 -5.05091E-02 -3.16004E-01 -3.25413E-01 -2.66567E-01 -3.53039E-01 4.61723E-02 -9.56933E-02 -2.53101E-01 -3.21120E-01 -Frame 13 9.87352E00 4.91930E-01 -4.08043E-02 2.02531E-01 4.23468E-02 -4.31967E-01 -3.26634E-01 -3.59126E-01 -2.52973E-01 7.94427E-02 -1.83739E-01 -2.30114E-01 -2.55760E-01 -Frame 13 9.91918E00 6.56450E-01 -2.91760E-01 1.72728E-01 1.42805E-01 -4.71861E-01 -3.82923E-01 -3.70543E-01 -2.37283E-01 1.68313E-01 -3.09507E-01 -2.20763E-01 -9.81908E-02 -Frame 13 9.72392E00 8.75305E-01 -3.71681E-01 1.94703E-02 2.34720E-01 -4.50440E-01 -4.08662E-01 -4.00575E-01 -2.08051E-01 1.68221E-01 -3.13880E-01 -2.58944E-01 -6.16677E-03 -Frame 13 9.47501E00 1.12925E00 -3.72239E-01 -2.19419E-01 2.72363E-01 -3.20629E-01 -4.77449E-01 -3.34812E-01 -2.36961E-01 2.19787E-02 -1.37178E-01 -2.37446E-01 -8.61963E-02 -Frame 13 9.15117E00 1.39013E00 -2.64459E-01 -5.45666E-01 2.90077E-01 -1.76674E-01 -4.69820E-01 -3.65824E-01 -3.35595E-01 4.24247E-02 -6.63016E-02 -2.19307E-01 -1.32325E-01 -Frame 13 9.25081E00 1.46339E00 -3.97968E-01 -5.75258E-01 2.95284E-01 -1.50860E-01 -4.93717E-01 -3.00951E-01 -3.34068E-01 -5.84910E-02 -4.02277E-02 -9.79262E-02 -2.47198E-01 -Frame 13 9.22000E00 1.56047E00 -4.54475E-01 -6.17864E-01 2.86552E-01 -4.13670E-02 -5.69438E-01 -2.33468E-01 -3.88443E-01 -6.76943E-02 -4.26933E-02 -1.37575E-01 -1.41073E-01 -Frame 13 9.05527E00 1.62521E00 -3.79357E-01 -6.49798E-01 1.84142E-01 2.91375E-02 -4.89997E-01 -3.41868E-01 -3.19453E-01 -5.26459E-02 -1.58661E-01 -1.18849E-01 -3.05377E-02 -Frame 13 8.99956E00 1.74312E00 -4.52683E-01 -6.57658E-01 1.85092E-01 3.27460E-02 -5.44483E-01 -2.01203E-01 -3.78813E-01 -1.40141E-01 -4.57625E-02 -1.62321E-01 1.29769E-02 -Frame 13 8.97487E00 1.83524E00 -4.93698E-01 -6.76412E-01 2.26430E-01 -8.63253E-02 -5.33463E-01 -1.09167E-01 -3.70278E-01 -2.09310E-01 -7.82914E-02 -1.06976E-01 -5.97220E-03 -Frame 13 9.07600E00 1.81573E00 -5.05619E-01 -5.96167E-01 1.57880E-01 -1.75042E-01 -4.96764E-01 -3.91456E-02 -4.05607E-01 -2.24794E-01 -9.84457E-02 -5.09411E-02 1.29182E-02 -Frame 13 9.23503E00 1.73471E00 -4.89147E-01 -5.41497E-01 9.59003E-02 -3.06964E-01 -3.77228E-01 -6.76081E-02 -3.17240E-01 -3.18277E-01 -1.64920E-01 8.53897E-02 -2.70367E-02 -Frame 13 9.29955E00 1.73181E00 -5.13227E-01 -4.27167E-01 -4.12373E-02 -4.17645E-01 -2.17201E-01 -5.16195E-02 -3.39556E-01 -3.80396E-01 -7.23947E-02 1.85053E-02 9.71937E-04 -Frame 13 9.45545E00 1.59441E00 -4.26396E-01 -3.21100E-01 -2.08664E-01 -4.95439E-01 -1.13971E-01 1.30975E-02 -4.21099E-01 -3.59643E-01 -3.63892E-03 -1.04657E-01 2.51584E-03 -Frame 13 9.28208E00 1.57565E00 -2.23373E-01 -2.97200E-01 -4.70505E-01 -3.57688E-01 -1.29570E-01 1.10385E-02 -3.63360E-01 -3.74876E-01 -8.33871E-02 -7.17787E-02 -7.88006E-03 -Frame 13 9.12119E00 1.53604E00 -6.73238E-02 -2.54392E-01 -6.50772E-01 -3.16503E-01 -1.03020E-01 1.58433E-02 -3.61715E-01 -3.69938E-01 -1.00165E-01 -1.17349E-01 -5.29088E-02 -Frame 13 9.09284E00 1.45005E00 2.56356E-02 -1.88764E-01 -7.46810E-01 -3.57273E-01 -4.94568E-02 1.98255E-02 -3.64213E-01 -3.45456E-01 -1.29605E-01 -1.86055E-01 -3.34519E-02 -Frame 13 8.85126E00 1.46243E00 1.03415E-01 -1.75184E-01 -7.15186E-01 -4.89854E-01 2.06841E-02 -2.70664E-02 -3.26780E-01 -3.01820E-01 -2.23681E-01 -1.75174E-01 -9.71751E-02 -Frame 13 8.44441E00 1.55929E00 2.63256E-01 -1.87381E-01 -7.38895E-01 -5.20787E-01 4.16114E-02 -8.70169E-02 -2.45403E-01 -2.61997E-01 -2.57237E-01 -2.49171E-01 -1.76340E-01 -Frame 13 8.45317E00 1.47046E00 4.31470E-01 -1.97602E-01 -8.02587E-01 -5.42642E-01 4.55741E-02 -7.67744E-02 -2.17696E-01 -1.88689E-01 -2.72632E-01 -3.28499E-01 -2.21000E-01 -Frame 13 8.41107E00 1.45208E00 4.19153E-01 -4.95148E-02 -8.47906E-01 -5.24122E-01 -3.80234E-02 -1.06717E-01 -1.29685E-01 -1.48260E-01 -3.02967E-01 -2.90609E-01 -2.47061E-01 -Frame 13 8.22929E00 1.48283E00 4.22105E-01 1.01742E-01 -8.21224E-01 -6.35442E-01 -4.01017E-02 -8.94787E-02 -1.61923E-01 -8.11821E-02 -2.20514E-01 -3.10043E-01 -2.73778E-01 -Frame 13 7.86486E00 1.48864E00 5.49520E-01 1.74662E-01 -8.86048E-01 -5.61398E-01 -5.05689E-02 -1.29744E-01 -2.15819E-01 2.39332E-02 -2.00014E-01 -2.31854E-01 -3.11633E-01 -Frame 13 7.34977E00 1.39592E00 7.23469E-01 2.38540E-01 -7.26450E-01 -6.26731E-01 -1.88284E-01 -1.63086E-01 -6.13278E-02 -2.28073E-03 -1.67444E-01 -2.79068E-01 -2.47088E-01 -Frame 13 7.04927E00 1.34257E00 7.22658E-01 2.83766E-01 -6.09394E-01 -5.53242E-01 -1.89517E-01 -2.53839E-01 -8.07277E-02 8.13974E-02 -1.44600E-01 -2.42671E-01 -2.55931E-01 -Frame 13 6.78315E00 1.25737E00 8.11685E-01 2.33381E-01 -4.77440E-01 -5.15819E-01 -1.97190E-01 -3.25152E-01 -4.66663E-02 2.70680E-02 -1.47403E-01 -1.39188E-01 -2.34463E-01 -Frame 13 6.62721E00 1.13758E00 8.39128E-01 3.19257E-01 -4.37996E-01 -5.21592E-01 -2.43670E-01 -2.01752E-01 -8.55637E-02 -3.09394E-02 -1.56451E-01 -1.25938E-01 -2.61917E-01 -Frame 13 6.52292E00 1.07824E00 7.98140E-01 4.10477E-01 -4.32630E-01 -3.73957E-01 -2.80878E-01 -2.67251E-01 -1.15539E-01 1.29483E-02 -1.47299E-01 -1.78990E-01 -2.18967E-01 -Frame 13 6.49656E00 1.17402E00 7.89761E-01 3.29643E-01 -4.86448E-01 -3.97160E-01 -2.75355E-01 -1.56697E-01 5.86065E-03 -1.03049E-01 -2.92727E-01 -2.32063E-01 -6.76215E-02 -Frame 13 6.57443E00 1.27396E00 7.60293E-01 1.52709E-01 -3.60180E-01 -3.65916E-01 -3.04128E-01 -2.52258E-01 -8.15450E-02 -1.03217E-01 -1.80906E-01 -1.70124E-01 -1.97068E-01 -Frame 13 7.02018E00 1.36962E00 7.54139E-01 -7.00566E-02 -4.93568E-01 -3.83835E-01 -2.65607E-01 -2.16019E-01 -1.61833E-01 7.32641E-03 -1.67595E-01 -2.70711E-01 -2.13910E-01 -Frame 13 7.46294E00 1.39446E00 5.86837E-01 -4.07472E-02 -7.39747E-01 -5.08569E-01 -2.05264E-01 -2.20258E-01 -1.42783E-01 7.43665E-02 -2.25165E-01 -2.49513E-01 -2.20669E-01 -Frame 13 8.26171E00 1.13522E00 5.85293E-01 -1.62119E-01 -9.64113E-01 -4.98101E-01 -2.56122E-01 -1.56094E-01 -4.03970E-02 -1.67798E-02 -1.98070E-01 -2.62071E-01 -1.83403E-01 -Frame 13 8.39305E00 1.36543E00 3.75743E-01 -2.70193E-01 -1.04867E00 -5.62370E-01 -2.09659E-01 -1.15916E-01 1.57297E-01 -7.01616E-02 -2.69157E-01 -1.24360E-01 -2.18274E-01 -Frame 13 8.38091E00 1.53493E00 1.15105E-01 -3.95016E-01 -9.18584E-01 -6.05617E-01 -6.15425E-03 -1.34500E-01 1.65174E-01 -4.63888E-02 -3.53999E-01 -4.49731E-02 -2.39363E-01 -Frame 13 8.08269E00 1.48924E00 2.25586E-01 -6.73527E-01 -8.06450E-01 -5.24137E-01 -4.86713E-02 -1.81044E-02 2.01039E-01 -3.94237E-02 -3.99136E-01 -7.43124E-02 -1.25786E-01 -Frame 13 7.94474E00 1.40615E00 2.22549E-01 -6.90834E-01 -8.58607E-01 -4.81922E-01 7.86146E-02 -2.54798E-02 1.24628E-01 -2.91937E-02 -3.86107E-01 -4.14881E-02 -1.13444E-01 -Frame 13 8.14376E00 1.18049E00 2.40256E-01 -6.82934E-01 -9.14309E-01 -4.33907E-01 1.33575E-01 -3.68258E-02 4.45554E-02 7.70563E-03 -4.10558E-01 5.21864E-02 -1.20800E-01 -Frame 13 8.32322E00 1.29846E00 1.06549E-01 -6.57859E-01 -9.65542E-01 -3.70448E-01 1.86306E-01 -2.41790E-02 1.82696E-02 -5.12353E-02 -3.75331E-01 8.39245E-02 -7.89275E-02 -Frame 13 8.37915E00 1.34154E00 1.88593E-01 -6.68649E-01 -9.81221E-01 -2.69747E-01 2.67897E-01 -1.34751E-01 -7.04151E-02 -3.71946E-02 -3.04189E-01 1.20278E-01 -1.02939E-01 -Frame 13 8.36534E00 1.27337E00 2.20900E-01 -6.80195E-01 -9.74273E-01 -6.54383E-02 1.60570E-01 -7.34666E-02 -2.90092E-01 8.00730E-02 -1.76405E-01 8.10616E-02 -1.69525E-01 -Frame 13 8.22813E00 1.08689E00 1.85430E-01 -7.36866E-01 -7.44720E-01 1.40163E-02 -7.30552E-02 -4.25414E-02 -2.46429E-01 1.34508E-01 -2.48179E-01 1.66740E-01 -9.02995E-02 -Frame 13 8.10190E00 1.15247E00 1.93728E-01 -8.01110E-01 -7.20469E-01 1.94963E-01 -2.06241E-01 -1.38644E-01 -1.72218E-01 1.97132E-01 -2.04178E-01 1.49495E-01 -9.17964E-02 -Frame 13 8.73325E00 6.42750E-01 1.62586E-01 -3.50696E-01 -8.44285E-01 2.52625E-01 -2.07870E-01 -1.75260E-01 -1.17795E-01 -5.33396E-02 9.43714E-02 -1.19357E-01 -1.13672E-02 -Frame 13 7.44476E00 -1.60024E-01 2.36254E-01 7.75195E-02 -6.24131E-01 2.33006E-01 -2.22470E-01 -1.04383E-01 -1.16262E-01 -7.47164E-02 2.02573E-01 -1.07544E-01 2.10986E-02 -Frame 13 6.10532E00 -4.76385E-02 1.68238E-01 1.62862E-01 -2.32751E-01 6.94937E-02 6.27972E-03 2.05695E-02 -6.24056E-02 -2.19697E-01 4.67487E-02 -5.48905E-02 -8.55383E-02 -Frame 13 5.64564E00 1.46648E-01 9.36033E-02 2.68380E-02 2.24787E-02 -6.55273E-02 7.56373E-02 1.66863E-01 -1.95991E-01 -1.59288E-01 -4.42398E-02 -8.87013E-02 -4.42402E-02 -Frame 13 5.32425E00 8.45642E-02 -2.44360E-02 1.03850E-01 4.93035E-02 8.36607E-02 -7.14136E-02 1.38172E-01 -1.51518E-01 -1.12952E-01 -6.76209E-02 -3.66404E-02 -5.77033E-02 -Frame 13 5.15405E00 1.19514E-01 -5.68494E-02 1.77141E-01 -1.81323E-02 1.11437E-02 -8.82080E-02 1.19349E-01 -2.00428E-01 9.38651E-02 -1.06573E-01 -2.37767E-01 -6.57123E-02 -Frame 13 4.97900E00 -1.16614E-02 4.80959E-02 1.31877E-01 -9.05835E-02 3.81616E-02 3.23595E-03 4.64959E-02 -1.25272E-01 -7.09511E-02 1.04118E-02 -5.22702E-02 -1.59970E-02 -Frame 13 5.36842E00 1.17938E-01 -1.16638E-01 7.01181E-02 1.42765E-01 -2.06090E-02 -1.68233E-01 -1.05934E-02 -1.97626E-01 -1.86931E-02 6.78977E-02 -1.35202E-01 -3.87273E-02 -Frame 13 4.90470E00 -2.97565E-01 -4.15753E-01 -1.49531E-01 1.99475E-02 -8.34348E-02 -1.41552E-01 6.65792E-02 -1.55104E-01 7.56434E-02 7.71608E-02 -4.70307E-02 -1.15219E-02 -Frame 13 4.66241E00 -1.59005E-01 -7.83065E-02 1.36015E-01 7.83084E-02 7.18518E-03 5.63487E-03 1.37100E-01 -6.46857E-02 -3.77489E-02 -1.02136E-01 -1.01945E-01 -1.15278E-02 -Frame 13 4.87559E00 -1.20441E-01 6.49212E-03 2.23014E-01 1.33810E-01 -4.64571E-02 7.57417E-02 9.27625E-03 -1.77494E-01 -1.95149E-01 -1.58086E-02 -1.00309E-01 6.04284E-02 -Frame 13 4.75483E00 -3.43728E-01 -1.94296E-01 -1.06292E-01 -1.06750E-01 -2.43496E-02 -1.57322E-02 -4.04703E-02 -1.43429E-01 -3.04643E-02 -4.85414E-02 -1.57158E-01 -1.02664E-01 -Frame 13 4.26933E00 -5.81021E-01 -1.82414E-01 9.34352E-03 -4.11252E-02 1.41372E-01 -1.04333E-01 5.63394E-02 3.35169E-02 6.99385E-02 -1.74354E-01 -8.32041E-02 1.06273E-01 -Frame 13 4.26625E00 -4.53221E-01 -2.56709E-01 -1.94046E-01 -5.57530E-03 1.03528E-01 -4.70919E-03 -1.50077E-02 -4.31750E-02 4.64821E-03 -3.39738E-02 -3.15403E-02 6.57140E-02 -Frame 13 3.91128E00 -6.62524E-01 -2.36874E-01 1.05231E-02 8.51462E-02 1.60891E-01 -1.23278E-01 -8.65551E-02 -2.24420E-01 -4.38082E-02 -8.23534E-02 1.32075E-02 1.60443E-01 -Frame 13 3.78404E00 -6.91249E-01 -3.07878E-01 -4.44667E-02 2.60452E-02 1.73641E-01 -4.98553E-02 -3.85151E-03 -1.55924E-01 -1.30546E-01 -3.26285E-02 2.22858E-02 1.56837E-01 -Frame 13 4.31488E00 -5.22075E-01 -2.29884E-01 -3.45738E-02 -6.46108E-02 1.04819E-01 6.18071E-02 9.56426E-02 -6.90247E-02 -3.58304E-02 -8.02085E-02 -7.10787E-02 -2.49775E-03 -Frame 13 3.93466E00 -6.54089E-01 -2.58736E-01 -2.22149E-01 -1.42858E-01 -4.01252E-02 -8.59835E-02 2.36568E-02 -6.23665E-02 1.95933E-02 -1.58699E-01 -1.08690E-01 -1.36464E-02 -Frame 13 4.07242E00 -6.29921E-01 -3.18858E-01 -2.00186E-01 -6.10947E-02 5.86466E-02 -9.34388E-02 1.24935E-01 6.84704E-02 7.78715E-02 4.42792E-02 1.26715E-03 2.24241E-03 -Frame 13 4.08513E00 -5.22556E-01 -6.30736E-02 -1.83319E-01 6.21300E-02 1.18635E-01 -9.55377E-02 5.39897E-02 6.34514E-02 9.12789E-02 6.70378E-02 -1.62237E-02 6.16293E-02 -Frame 13 3.90795E00 -6.58134E-01 -2.39007E-01 -1.01859E-01 1.18419E-01 5.07736E-02 3.16986E-02 1.81751E-01 -4.38197E-02 1.23798E-01 2.86901E-04 7.47146E-03 6.75767E-02 -Frame 13 4.03038E00 -5.43302E-01 -1.13170E-01 -6.02725E-02 1.14062E-01 2.14973E-01 -2.92341E-02 1.29244E-01 -1.15679E-01 -5.30761E-02 -1.75162E-01 5.15979E-03 -1.26365E-01 -Frame 13 3.78934E00 -6.70083E-01 -1.56712E-01 -6.31233E-02 -1.29327E-02 1.06282E-01 -1.11279E-01 3.61141E-02 -1.07384E-01 -1.44782E-02 2.87431E-02 5.78424E-02 3.54208E-02 -Frame 13 3.89988E00 -6.68379E-01 -2.51782E-01 -6.07756E-02 -2.51510E-02 1.42583E-01 -4.99169E-02 -9.30283E-02 -1.91473E-01 -7.59460E-02 -1.22806E-01 -3.70430E-02 1.02624E-01 -Frame 13 3.81159E00 -7.57918E-01 -2.40897E-01 -9.24858E-02 -3.44653E-02 -4.22943E-02 -4.40778E-02 -1.25285E-01 -2.18536E-01 8.20560E-03 -1.97285E-01 6.01793E-02 2.35522E-01 -Frame 13 3.81539E00 -5.31313E-01 -2.88317E-01 -5.19827E-02 7.74703E-03 -1.42631E-02 -2.49219E-02 -3.13240E-02 -3.57841E-02 8.40587E-02 2.26048E-02 2.05951E-01 1.20759E-01 -Frame 13 5.59410E00 -9.29684E-01 1.12577E-01 -5.14338E-02 -1.03803E-01 5.40984E-02 -3.13635E-01 1.56439E-01 -1.86720E-01 -2.39829E-02 -1.30225E-01 -1.54287E-01 -3.33429E-02 -Frame 13 7.07419E00 -1.63354E00 4.77334E-01 -2.46036E-01 -1.86600E-01 9.00468E-02 -2.79743E-01 1.05616E-01 -1.69662E-01 -2.51418E-02 -1.69100E-01 -1.48423E-01 -1.19122E-01 -Frame 13 5.38273E00 -1.70317E00 5.45107E-01 -2.43555E-01 -4.82723E-02 2.78565E-01 -1.72321E-01 2.20548E-01 -1.86974E-02 -9.11237E-03 -1.83120E-01 -1.55696E-02 7.10551E-02 -Frame 13 4.28673E00 -5.96056E-01 5.78542E-02 -7.30146E-02 8.49553E-02 4.12789E-02 -7.82642E-02 2.14548E-03 -1.76039E-02 2.72764E-02 -9.04693E-02 -5.02311E-02 1.90760E-01 -Frame 13 4.52495E00 -3.96556E-01 3.01425E-02 -7.92526E-02 3.05828E-02 -8.84411E-02 -7.86662E-02 9.44826E-02 -4.91896E-02 -6.50207E-03 -1.04173E-01 -8.12491E-02 -2.32345E-02 -Frame 13 3.93779E00 -6.03917E-01 -2.00113E-01 -3.05490E-02 -1.13835E-01 3.75311E-02 -1.04649E-01 1.32497E-01 4.18269E-02 4.46794E-02 -1.11403E-01 -7.77271E-02 1.07599E-01 -Frame 13 4.05346E00 -4.81166E-01 -5.74762E-02 4.44863E-02 2.32467E-02 5.45122E-02 -1.27120E-01 -6.23983E-02 7.32335E-03 -4.00284E-02 -7.29072E-02 -6.05348E-03 6.73848E-02 -Signal: SpeechEndSignal -Signal: SpeechStartSignal -Frame 13 3.83839E00 -5.35605E-01 -1.40113E-01 -8.37646E-02 -6.78487E-02 -5.10704E-02 -1.43320E-01 2.06815E-02 -2.31961E-02 -7.84526E-02 -1.10434E-01 1.06301E-02 -7.77494E-03 -Frame 13 3.91459E00 -5.44936E-01 -9.09112E-02 -1.58834E-01 -3.71640E-04 1.00815E-01 -5.48921E-02 -4.51248E-02 -2.36175E-02 -2.59178E-02 -6.92279E-02 -9.69021E-02 -1.34603E-02 -Frame 13 4.03691E00 -5.24202E-01 -1.29008E-01 -1.46723E-01 -1.19142E-01 3.24236E-02 3.32507E-02 -5.70987E-02 -8.03110E-02 6.69955E-02 9.10220E-02 8.50882E-02 -2.42976E-02 -Frame 13 3.71549E00 -7.74099E-01 -1.74288E-01 -1.65012E-01 -5.46294E-02 1.25718E-01 2.30925E-02 4.51563E-02 1.67329E-02 -6.83949E-03 6.39451E-02 7.43063E-02 1.30594E-02 -Frame 13 3.70398E00 -5.35346E-01 -5.40288E-02 -9.68149E-02 -4.51951E-05 1.32391E-01 1.52857E-01 1.74015E-01 9.32459E-02 9.93507E-02 -4.54301E-02 1.01381E-01 -2.03276E-02 -Frame 13 3.73150E00 -6.30901E-01 -8.29471E-02 -8.84244E-02 -3.85046E-02 1.31547E-01 -4.90503E-02 9.79202E-02 1.85166E-03 -1.73270E-02 -6.32780E-02 1.06387E-01 1.92297E-02 -Frame 13 4.26471E00 -3.20670E-01 6.50411E-02 3.69913E-02 1.07191E-01 1.35772E-01 1.45279E-01 1.04883E-01 -5.25161E-02 -1.08410E-01 -1.25783E-01 5.41502E-02 1.16020E-01 -Frame 13 5.70113E00 3.53867E-01 1.25490E-03 2.63191E-01 1.81416E-01 -1.38742E-01 9.12466E-02 -6.83005E-02 -4.31986E-01 -2.39954E-01 7.39188E-03 -9.14151E-02 2.83375E-02 -Frame 13 4.98691E00 -7.24597E-04 1.45869E-01 1.34726E-01 1.19136E-01 7.69945E-02 1.10943E-01 3.42489E-02 -2.96229E-01 -1.07965E-01 -2.91681E-02 -1.79007E-01 -6.68993E-02 -Frame 13 6.03444E00 -3.84990E-01 4.40685E-02 2.64144E-01 2.37387E-01 -1.85545E-02 -3.04198E-01 4.40505E-02 -2.01335E-01 2.75969E-03 -2.53667E-01 -6.52930E-02 -3.90553E-03 -Frame 13 9.89552E00 2.39326E-01 -3.41260E-01 3.89227E-01 -2.15964E-01 -2.63976E-01 -4.76067E-01 -1.43606E-01 -1.40845E-01 1.28796E-01 -2.06033E-01 -1.77095E-01 6.92211E-02 -Frame 13 1.04651E01 6.87525E-01 -5.65359E-01 1.74583E-01 -1.58817E-01 -4.79230E-01 -4.64884E-01 -1.24747E-01 -7.55264E-02 1.76496E-01 -1.74267E-01 -2.27436E-01 1.23425E-01 -Frame 13 1.13142E01 7.72458E-01 -6.38102E-01 -7.86892E-02 -1.89719E-01 -3.88153E-01 -3.79974E-01 -2.01582E-01 -9.80511E-02 3.88634E-01 -3.04226E-01 -1.14628E-01 -5.29015E-02 -Frame 13 1.17935E01 8.09791E-01 -7.51876E-01 -2.32479E-01 -1.63831E-01 -4.11374E-01 -3.62077E-01 -7.68050E-02 -1.33337E-01 3.76322E-01 -2.96225E-01 -6.84160E-02 -1.57356E-01 -Frame 13 1.20895E01 8.06393E-01 -7.78102E-01 -3.86635E-01 -1.54961E-01 -3.22931E-01 -3.37908E-01 -1.02730E-01 -6.41170E-02 3.51007E-01 -2.38890E-01 -7.47616E-02 -2.47762E-01 -Frame 13 1.21626E01 8.46589E-01 -7.75908E-01 -4.71199E-01 -1.60604E-01 -3.21736E-01 -2.17835E-01 -1.32101E-01 -1.79708E-01 5.11173E-01 -2.62165E-01 -7.21100E-02 -3.23301E-01 -Frame 13 1.23559E01 7.10508E-01 -6.65798E-01 -5.71404E-01 -1.59530E-01 -2.54877E-01 -2.33327E-01 -1.11694E-01 -2.25027E-01 5.62293E-01 -2.57415E-01 -1.59040E-01 -2.47653E-01 -Frame 13 1.23684E01 7.04768E-01 -7.18897E-01 -4.81865E-01 -1.57303E-01 -2.52396E-01 -2.99779E-01 -6.81923E-02 -2.39768E-01 5.72406E-01 -2.59734E-01 -1.86507E-01 -2.31007E-01 -Frame 13 1.23325E01 6.82568E-01 -6.75292E-01 -5.07718E-01 -8.85827E-02 -2.43271E-01 -4.15121E-01 -2.58810E-02 -1.53013E-01 5.06317E-01 -2.67748E-01 -1.64367E-01 -2.30241E-01 -Frame 13 1.22441E01 6.92692E-01 -6.93231E-01 -4.59506E-01 3.14528E-02 -3.08743E-01 -5.80372E-01 9.23359E-02 -1.12053E-01 4.07756E-01 -1.92775E-01 -2.37252E-01 -1.68511E-01 -Frame 13 1.22336E01 5.77643E-01 -6.08841E-01 -3.88235E-01 3.07962E-02 -3.33855E-01 -6.08119E-01 4.32546E-02 -4.90911E-02 4.00096E-01 -2.88738E-01 -2.15868E-01 -9.50751E-02 -Frame 13 1.21011E01 4.78460E-01 -5.51568E-01 -1.80649E-01 -9.34476E-02 -2.61547E-01 -6.49479E-01 -7.98372E-03 -1.32015E-03 3.10723E-01 -2.21169E-01 -3.43996E-01 9.62387E-02 -Frame 13 1.09513E01 5.87145E-01 -4.77544E-01 -1.70151E-01 -2.40448E-03 -2.47869E-01 -6.27422E-01 -7.69131E-02 -7.48072E-02 3.16837E-01 -1.57843E-01 -4.02127E-01 1.41037E-01 -Frame 13 8.40805E00 5.27594E-01 -3.82743E-01 1.99440E-01 4.14444E-01 -4.02351E-01 -1.53440E-01 -1.09229E-01 -3.44476E-01 1.53479E-01 -2.34490E-01 -2.53528E-01 -1.37083E-02 -Frame 13 8.40203E00 3.36117E-01 -3.53773E-01 3.35001E-01 2.93368E-01 -2.48886E-01 -1.56414E-01 -2.76940E-01 -1.03650E-01 -1.73105E-02 -2.91365E-01 -2.57807E-01 -8.52929E-02 -Frame 13 9.94130E00 3.32694E-01 -6.71355E-01 4.01612E-01 -6.99359E-02 -1.51623E-01 -2.97337E-01 -6.57858E-01 7.05708E-02 3.85032E-02 -2.38266E-01 -2.89170E-01 -5.16415E-02 -Frame 13 1.10510E01 8.53782E-01 -9.72309E-01 2.49478E-01 -1.03003E-01 -3.52770E-01 -3.12853E-01 -4.47149E-01 9.85109E-02 2.22348E-01 -3.70770E-01 -3.36799E-01 1.50185E-01 -Frame 13 1.12632E01 8.58538E-01 -9.73624E-01 2.01924E-01 -1.43719E-01 -3.83247E-01 -3.52282E-01 -3.31653E-01 5.67006E-02 2.89489E-01 -4.01598E-01 -2.14643E-01 -5.32986E-02 -Frame 13 1.11273E01 9.62451E-01 -9.17498E-01 -6.31863E-03 -1.02987E-01 -3.12679E-01 -3.01829E-01 -3.12537E-01 -1.61600E-01 4.29478E-01 -3.31508E-01 -2.33201E-01 -1.67239E-01 -Frame 13 1.08313E01 1.06664E00 -7.29440E-01 -2.47699E-01 -1.27033E-01 -1.55001E-01 -3.35932E-01 -1.77143E-01 -4.24235E-01 4.31457E-01 -1.28654E-01 -3.00157E-01 -5.35107E-02 -Frame 13 1.04217E01 1.20099E00 -6.40819E-01 -1.77493E-01 -3.27075E-01 -1.06102E-01 -1.99296E-01 -2.09394E-01 -4.15745E-01 2.81238E-01 -1.62003E-01 -7.55352E-02 -6.90271E-02 -Frame 13 1.00666E01 1.30308E00 -5.42585E-01 -1.32283E-01 -5.17744E-01 6.86701E-03 -1.25849E-01 -2.35615E-01 -3.75826E-01 5.11805E-02 -1.59496E-01 2.28540E-02 -2.22173E-02 -Frame 13 9.68108E00 1.41453E00 -4.69718E-01 -9.16544E-02 -5.37023E-01 -8.34367E-02 1.70688E-02 -2.63287E-01 -3.09248E-01 -1.21011E-01 -2.27528E-01 2.09885E-02 3.30714E-02 -Frame 13 9.51155E00 1.37710E00 -3.01961E-01 -1.05454E-01 -5.62127E-01 -6.65997E-02 -3.86536E-02 -1.73383E-01 -2.52641E-01 -3.35586E-01 -1.83920E-01 -9.76482E-02 9.86440E-02 -Frame 13 9.35455E00 1.32643E00 -1.90290E-01 -1.79683E-02 -5.17082E-01 -1.44993E-01 -6.57229E-02 -9.47832E-02 -3.05611E-01 -3.59781E-01 -2.55416E-01 -1.27216E-01 -7.03841E-03 -Frame 13 9.36355E00 1.26511E00 -2.01220E-01 3.58255E-02 -3.63309E-01 -2.24066E-01 6.31667E-02 -1.83148E-01 -3.55061E-01 -3.97993E-01 -2.45863E-01 -8.56770E-02 -1.54062E-01 -Frame 13 9.59261E00 1.05313E00 -3.20712E-01 2.59978E-01 -3.06702E-01 -7.92018E-02 -1.47823E-02 -2.53202E-01 -4.59694E-01 -2.80828E-01 -9.59807E-02 -7.90893E-02 -4.04404E-01 -Frame 13 9.74080E00 7.44321E-01 -3.06752E-01 2.77790E-01 -6.56968E-03 -1.17382E-03 -1.25991E-01 -3.87023E-01 -3.05897E-01 -1.53481E-01 -2.21769E-02 -2.21208E-01 -5.41459E-01 -Frame 13 9.22161E00 1.82935E-01 5.60826E-02 2.70959E-01 5.99151E-04 2.58572E-01 -4.18178E-01 -3.21082E-01 -2.10054E-01 -1.18158E-01 -9.97084E-02 -3.30276E-01 -4.84124E-01 -Frame 13 8.28781E00 -3.09672E-01 -2.81056E-02 -1.14862E-01 -1.30058E-01 1.51123E-01 -5.94546E-01 3.51409E-01 4.36222E-02 -1.03594E-01 -8.62768E-02 -6.94615E-03 -3.67184E-01 -Frame 13 5.98568E00 -6.79176E-02 -3.32532E-02 -1.86174E-01 -1.51323E-01 3.42150E-02 -2.14709E-01 3.11995E-01 6.47363E-03 4.11620E-03 -8.46785E-02 -1.14707E-01 -1.53951E-01 -Frame 13 4.93947E00 -7.37466E-02 -2.34092E-01 -4.76524E-01 -1.99200E-01 -6.16076E-02 -5.55306E-02 7.57444E-03 -4.66359E-02 -3.55184E-02 -1.67354E-01 -1.33585E-01 -1.39148E-01 -Frame 13 4.82604E00 -5.75995E-02 -2.68787E-01 -3.40460E-01 -1.76921E-01 4.30994E-03 -1.16518E-01 3.52216E-03 -6.20551E-02 3.25698E-02 -1.10786E-01 -1.00944E-01 -3.31586E-02 -Frame 13 4.66079E00 -2.51906E-01 -2.33345E-01 -1.38707E-01 -1.67722E-01 1.26787E-02 -1.15465E-01 3.42584E-02 -6.11106E-02 -7.14106E-02 -1.11715E-01 -1.47475E-01 4.16075E-03 -Frame 13 6.29468E00 -9.62318E-01 -5.49831E-02 -1.43310E-01 -2.22388E-01 1.26751E-01 -1.92822E-01 1.08238E-01 -1.15207E-01 2.41590E-02 -1.30760E-01 -6.47010E-02 -8.93327E-02 -Frame 13 8.72826E00 -1.66942E00 2.42091E-01 -4.14285E-01 -1.65653E-01 -3.82452E-02 -2.99741E-01 -9.84850E-03 -2.47885E-01 -6.52962E-02 -2.21892E-01 -5.97844E-02 -1.73155E-01 -Frame 13 8.22696E00 -2.54212E00 8.47991E-01 -4.17045E-01 -7.04938E-02 4.16019E-02 -3.81751E-01 3.92895E-02 -1.55405E-01 -1.27064E-01 3.14383E-02 2.05022E-02 -1.23737E-02 -Frame 13 8.58605E00 -2.65430E00 7.97965E-01 -3.50278E-01 -5.02671E-02 1.42479E-01 -3.06457E-01 1.13161E-01 -1.96157E-01 -1.95775E-01 8.17575E-02 -1.61989E-01 -7.68802E-02 -Frame 13 9.38238E00 -2.51800E00 5.61661E-01 -8.92979E-02 -1.98551E-01 2.12550E-01 -2.55355E-01 6.87578E-02 4.84889E-03 -1.55767E-01 7.49754E-02 -1.21598E-01 -2.05766E-01 -Frame 13 1.01789E01 -2.34856E00 2.62473E-01 6.06304E-02 -2.19768E-01 -7.96004E-02 -3.46860E-03 2.51763E-01 -2.22834E-02 -2.61420E-01 2.62046E-02 -6.83777E-02 -9.70367E-02 -Frame 13 1.04866E01 -2.00445E00 2.71008E-01 2.20365E-01 -3.90120E-01 -1.92274E-01 -1.55504E-01 5.20729E-02 -1.34179E-01 -1.75715E-01 5.02043E-02 -9.57178E-02 -1.01645E-01 -Frame 13 1.04241E01 -1.92880E00 4.93913E-02 3.73093E-01 -2.66612E-01 -3.94693E-01 -2.69550E-01 1.18750E-01 -1.59649E-01 -3.65486E-01 -1.17186E-01 -1.66942E-01 -1.00129E-01 -Frame 13 1.05690E01 -1.68308E00 6.40939E-02 4.99600E-01 -2.11322E-01 -4.52561E-01 -1.12998E-01 3.59402E-01 -1.66667E-01 -3.52235E-01 -2.44068E-01 -1.23078E-01 -1.42706E-01 -Frame 13 9.91585E00 -1.46390E00 -1.87162E-01 6.97163E-01 1.50164E-01 -5.05988E-01 -2.14762E-01 3.13874E-01 -1.00103E-01 -1.70855E-01 1.96039E-02 -1.54124E-01 -1.77366E-01 -Frame 13 9.87346E00 -6.18877E-01 -2.86964E-01 5.66890E-01 4.40802E-01 -8.52087E-03 -3.74588E-01 -6.21381E-02 -1.91367E-01 -1.37395E-01 -5.51173E-02 -2.33548E-01 -2.54325E-01 -Frame 13 1.03937E01 3.22543E-01 -3.77631E-01 4.25451E-01 5.89908E-01 -3.34632E-01 -3.60112E-01 -2.11321E-01 -2.10543E-01 -2.62564E-01 -1.19604E-01 -3.06901E-01 -4.02031E-01 -Frame 13 1.04699E01 5.86763E-01 -4.78133E-01 5.58723E-01 3.26991E-01 -3.72901E-01 -2.34611E-01 -4.28766E-01 -2.13935E-01 -1.98107E-01 -1.10363E-01 -3.49223E-01 -4.48694E-01 -Frame 13 1.02471E01 8.84869E-01 -4.42708E-01 3.48754E-01 2.05896E-01 -1.93592E-01 -2.23349E-01 -4.64390E-01 -2.62127E-01 -2.18516E-01 -3.39257E-02 -3.28307E-01 -3.89210E-01 -Frame 13 9.95717E00 1.04173E00 -2.59266E-01 8.22262E-02 7.56733E-02 -6.49415E-02 -1.06945E-01 -4.15890E-01 -4.04689E-01 -2.69272E-01 -4.68095E-02 -1.44331E-01 -3.49313E-01 -Frame 13 9.62139E00 1.09556E00 6.64014E-02 -4.87736E-04 -2.01204E-01 -6.43495E-02 -6.43677E-02 -1.89674E-01 -4.32301E-01 -4.66499E-01 -1.36753E-01 -8.97294E-02 -1.95677E-01 -Frame 13 9.09728E00 1.30993E00 2.36970E-01 -1.26547E-01 -2.75137E-01 -2.13089E-01 1.12665E-03 -1.80050E-02 -3.41376E-01 -5.19723E-01 -3.02440E-01 -1.49084E-01 -2.32245E-01 -Frame 13 8.69039E00 1.37716E00 3.82895E-01 -1.33873E-01 -3.74411E-01 -3.50413E-01 -8.18616E-02 9.90351E-02 -2.15558E-01 -3.90732E-01 -3.41698E-01 -3.17382E-01 -2.56971E-01 -Frame 13 8.28288E00 1.36567E00 4.51808E-01 9.76811E-02 -5.31024E-01 -4.59397E-01 -9.73337E-02 7.33377E-02 -1.00942E-01 -2.81360E-01 -2.51880E-01 -3.56179E-01 -3.46691E-01 -Frame 13 8.31321E00 1.26947E00 5.07564E-01 1.24845E-01 -4.72556E-01 -5.83248E-01 -7.60818E-02 6.75335E-02 -1.34248E-01 -1.34811E-01 -2.26342E-01 -3.67251E-01 -4.22506E-01 -Frame 13 8.74381E00 1.28808E00 4.28214E-01 -3.22415E-03 -5.54600E-01 -5.39908E-01 -2.80329E-02 -8.93711E-03 -2.01605E-01 -1.34693E-01 -1.87967E-01 -3.37507E-01 -3.37650E-01 -Frame 13 9.27090E00 1.31380E00 2.09419E-01 8.95335E-03 -7.20727E-01 -5.79342E-01 1.89681E-02 -1.24940E-01 -1.02028E-01 -1.38859E-01 -2.51691E-01 -2.19582E-01 -2.81866E-01 -Frame 13 9.88298E00 1.24502E00 4.26179E-02 -1.29638E-01 -8.31906E-01 -5.40885E-01 9.66481E-02 -1.62265E-01 -5.73772E-02 -1.28231E-01 -3.14999E-01 -1.88965E-01 -8.84389E-02 -Frame 13 1.04561E01 1.02508E00 -5.70184E-02 -3.71509E-01 -8.14764E-01 -4.09795E-01 1.87602E-01 -1.75694E-01 -6.39122E-02 -2.20994E-01 -2.58160E-01 -1.77181E-02 9.28569E-02 -Frame 13 1.06351E01 1.15455E00 -4.24418E-01 -4.30301E-01 -6.95269E-01 -2.58755E-01 2.68265E-01 -2.62119E-01 -2.99276E-01 -9.45228E-02 -1.11002E-01 1.09378E-01 1.35067E-01 -Frame 13 1.08031E01 1.05484E00 -5.99022E-01 -4.34563E-01 -4.58357E-01 -2.16951E-01 1.76565E-01 -3.45474E-01 -3.64492E-01 1.24365E-01 -4.18705E-02 1.18586E-01 -5.82680E-02 -Frame 13 1.07997E01 9.61853E-01 -6.86402E-01 -3.28316E-01 -2.85164E-01 -2.35103E-01 -1.31523E-01 -2.73708E-01 -3.06809E-01 2.57751E-01 5.99431E-02 -1.33446E-01 -1.43516E-01 -Frame 13 1.06987E01 9.72345E-01 -7.93125E-01 -1.85018E-01 -1.63320E-01 -2.19140E-01 -3.28090E-01 -3.23630E-01 -2.13785E-01 3.67448E-01 -4.01767E-02 -1.64638E-01 -1.37474E-01 -Frame 13 1.02427E01 9.19425E-01 -8.61750E-01 8.28571E-02 -2.04545E-01 -1.67833E-01 -3.50983E-01 -4.32075E-01 -6.20790E-02 3.05070E-01 -1.79149E-01 -2.00635E-01 2.37297E-02 -Frame 13 7.74329E00 5.56762E-01 -3.50709E-01 1.57642E-01 3.27443E-01 -1.49400E-01 -8.86876E-02 -3.50697E-01 -2.99350E-01 -2.85808E-02 8.67484E-02 -2.23686E-01 4.24388E-02 -Frame 13 7.11945E00 6.12264E-01 -3.86823E-01 2.56805E-01 3.06226E-01 -1.46308E-01 -1.27489E-01 -2.31576E-01 -3.62696E-01 -1.28332E-04 1.24299E-01 -2.98200E-01 7.49104E-02 -Frame 13 7.62198E00 4.52270E-01 -4.91862E-01 3.71520E-01 -7.06807E-02 -2.74048E-02 -9.89411E-02 -3.29505E-01 -1.72801E-01 1.29892E-02 -9.13521E-02 -2.26714E-01 -1.21388E-01 -Frame 13 9.49728E00 4.79038E-01 -6.63862E-01 4.15346E-01 -2.92020E-01 -6.76227E-03 -2.62066E-01 -6.21997E-01 1.17854E-02 2.07775E-01 -6.32011E-03 -2.78342E-01 -1.41225E-01 -Frame 13 1.05447E01 7.96432E-01 -8.16662E-01 9.26569E-02 -2.83907E-01 -1.48687E-01 -3.47634E-01 -3.87520E-01 -4.04099E-02 2.38345E-01 -6.86221E-02 -3.67827E-01 1.10255E-02 -Frame 13 1.08122E01 6.44108E-01 -7.38173E-01 -4.53006E-02 -2.25015E-01 -2.03755E-01 -3.45322E-01 -3.96794E-01 -6.16200E-02 3.11232E-01 -8.43791E-02 -3.82705E-01 8.15677E-03 -Frame 13 1.04419E01 7.17512E-01 -6.20049E-01 -2.46870E-01 -2.64278E-01 -1.47564E-01 -3.59550E-01 -3.20475E-01 -1.54293E-01 3.55922E-01 -9.69543E-02 -2.35399E-01 -1.09657E-01 -Frame 13 1.01495E01 8.31011E-01 -6.00077E-01 -3.78505E-01 -2.40461E-01 -1.54782E-01 -2.50736E-01 -3.82292E-01 -1.45729E-01 3.97304E-01 -1.24925E-01 -8.80298E-02 -3.06773E-01 -Frame 13 1.00983E01 8.67736E-01 -5.06137E-01 -4.34495E-01 -2.43552E-01 -1.65492E-01 -1.70584E-01 -4.14198E-01 -1.43777E-01 3.38409E-01 -7.77500E-02 -2.46946E-02 -4.30375E-01 -Frame 13 9.83912E00 9.67508E-01 -3.61381E-01 -3.82980E-01 -4.12000E-01 -9.50277E-02 -1.44167E-01 -4.21081E-01 -1.15215E-01 1.80208E-01 -3.98430E-02 3.72931E-02 -3.80535E-01 -Frame 13 9.56148E00 1.03096E00 -2.92897E-01 -4.00526E-01 -3.83108E-01 -7.26598E-02 -1.78893E-01 -3.41270E-01 -2.63913E-01 1.98358E-01 -3.28414E-02 1.06805E-02 -2.64457E-01 -Frame 13 9.29234E00 8.50706E-01 4.58884E-03 -4.74097E-01 -5.57122E-01 7.98779E-02 -2.15288E-01 -2.76213E-01 -3.19219E-01 1.50827E-01 -9.00323E-03 5.76974E-03 -1.97665E-01 -Frame 13 9.07760E00 8.46870E-01 -6.88581E-02 -4.26332E-01 -5.51064E-01 9.88421E-03 -1.64372E-01 -2.45202E-01 -3.74201E-01 1.48513E-01 2.72034E-02 4.27687E-02 -2.14116E-01 -Frame 13 9.03331E00 8.99058E-01 -6.85136E-02 -4.48812E-01 -4.65569E-01 -1.41721E-01 -9.95238E-02 -2.81962E-01 -3.50383E-01 1.54121E-01 -2.96620E-02 1.13443E-01 -2.25075E-01 -Frame 13 8.88016E00 1.03293E00 -2.13114E-03 -4.33169E-01 -5.46487E-01 -1.39961E-01 -8.26608E-03 -3.03689E-01 -4.40516E-01 1.12135E-01 3.83739E-03 1.35350E-01 -2.74952E-01 -Frame 13 8.41361E00 1.11032E00 8.28073E-02 -3.27198E-01 -6.79182E-01 -4.10919E-02 -8.26157E-02 -2.21856E-01 -4.86230E-01 7.60208E-02 5.79410E-02 7.16499E-02 -2.41234E-01 -Frame 13 8.06318E00 1.03242E00 6.51209E-02 -4.30893E-01 -4.93305E-01 -1.17515E-01 -6.87039E-02 -1.89917E-01 -3.90688E-01 -3.17734E-02 8.02428E-02 1.02390E-01 -1.76583E-01 -Frame 13 8.11970E00 9.59488E-01 1.32085E-01 -4.79026E-01 -5.49758E-01 -6.73707E-02 -1.15661E-01 -7.41520E-02 -4.36470E-01 -1.09162E-01 1.02062E-01 1.10716E-01 -1.08689E-01 -Frame 13 7.89037E00 1.03553E00 2.84860E-01 -3.96011E-01 -6.33442E-01 -1.10776E-01 -1.18829E-01 2.19885E-02 -3.91007E-01 -2.45358E-01 6.22399E-02 1.18444E-01 -1.01941E-01 -Frame 13 7.58366E00 1.05527E00 2.10448E-01 -3.45976E-01 -6.04167E-01 -9.73386E-02 -9.35362E-02 7.02944E-03 -3.84345E-01 -2.76919E-01 4.24408E-02 9.04057E-02 -4.96172E-02 -Frame 13 7.17765E00 1.07027E00 1.44015E-01 -4.44037E-01 -5.25489E-01 -7.45018E-02 -1.84577E-01 5.00790E-02 -3.12270E-01 -3.08599E-01 8.16422E-02 5.87297E-02 -3.52017E-03 -Frame 13 7.33437E00 1.07234E00 2.73355E-01 -5.23573E-01 -5.42402E-01 -2.12822E-02 -2.25016E-01 1.42413E-02 -2.87697E-01 -3.05495E-01 5.88853E-03 3.41543E-02 1.27527E-02 -Frame 13 7.12576E00 1.01944E00 3.69871E-01 -3.62236E-01 -5.21738E-01 -1.28153E-01 -1.87067E-01 1.13648E-01 -3.66796E-01 -3.22285E-01 4.11570E-02 2.22260E-02 -8.85707E-02 -Frame 13 6.55486E00 8.76342E-01 2.65310E-01 -4.86247E-01 -3.87744E-01 -1.75127E-01 -1.36086E-01 1.17725E-01 -2.88016E-01 -2.71152E-01 -1.05980E-01 -4.19650E-03 -3.87964E-02 -Frame 13 6.46472E00 8.42354E-01 2.10984E-01 -3.54044E-01 -4.38560E-01 -1.26153E-01 -1.07857E-01 5.26334E-02 -1.53406E-01 -3.65787E-01 -1.89550E-01 7.37466E-02 2.01971E-02 -Frame 13 6.15168E00 6.67909E-01 1.61048E-01 -3.08795E-01 -4.43242E-01 -6.19999E-02 -3.87472E-02 2.04739E-01 -1.69928E-01 -2.65754E-01 -1.32744E-01 4.77266E-02 1.35462E-02 -Frame 13 6.37537E00 7.84894E-01 2.63187E-01 -2.25519E-01 -4.85124E-01 -5.66794E-02 -1.19549E-01 9.64623E-02 -2.16835E-01 -3.09007E-01 -8.06560E-02 -6.61288E-02 -7.24814E-02 -Frame 13 5.83233E00 6.54480E-01 3.26628E-01 -2.53848E-01 -5.58402E-01 -1.21029E-01 -3.81785E-02 4.50241E-02 -1.23718E-01 -3.09037E-01 -1.99815E-01 -7.12533E-02 8.37184E-02 -Frame 13 4.72241E00 -2.19182E-04 -4.87654E-03 -2.41829E-01 -2.99937E-01 1.03313E-01 -5.50804E-02 1.26452E-01 5.10690E-02 -3.45663E-02 -9.31264E-02 -6.15041E-02 4.58091E-02 -Frame 13 5.36721E00 5.74066E-01 4.02867E-01 -7.71566E-02 -3.88687E-01 -9.30404E-02 1.56565E-02 -7.34522E-03 -1.72912E-01 -1.07884E-01 -1.17960E-01 -1.13056E-01 -9.46408E-02 -Frame 13 5.19689E00 1.65781E-01 3.03598E-01 -3.38920E-02 -4.12749E-01 -1.86402E-01 -5.72225E-02 2.09022E-01 -2.06723E-02 -1.95578E-01 -2.17912E-01 -1.79246E-01 -4.77103E-02 -Frame 13 4.53412E00 -2.17025E-01 2.04216E-01 -1.23629E-01 -3.23723E-01 -4.68309E-02 7.65613E-03 2.07203E-01 4.96887E-02 -2.45372E-03 -1.28117E-01 -1.22856E-01 1.08706E-01 -Frame 13 4.75017E00 1.10449E-01 4.73402E-02 -2.21132E-01 -3.80281E-02 3.56307E-02 -2.92880E-02 4.19118E-02 1.09532E-02 3.44259E-02 -8.37199E-02 -1.68584E-01 1.15034E-02 -Frame 13 4.47995E00 -1.95326E-01 -9.78869E-02 -2.46427E-01 -1.25052E-01 3.19261E-02 -5.77252E-02 1.58475E-01 1.79298E-01 9.98398E-02 -7.68932E-02 -8.34037E-02 8.82184E-02 -Frame 13 4.20844E00 -3.78682E-01 -1.45834E-01 -2.71054E-01 -2.62399E-01 -1.80757E-01 -1.25339E-01 1.41367E-01 1.48499E-01 7.49690E-02 -6.17895E-02 -2.79129E-02 3.45039E-02 -Frame 13 4.44572E00 -2.92483E-01 -1.49483E-01 -1.78327E-01 -1.73674E-01 -9.47834E-02 -5.21082E-02 9.02061E-02 -1.50445E-01 5.71134E-02 2.37797E-02 -9.34998E-02 -1.09234E-02 -Frame 13 4.25214E00 -4.03948E-01 -1.16411E-01 -1.63628E-01 -2.30416E-01 -5.82616E-02 -3.62700E-02 1.40711E-01 -1.09072E-01 1.80185E-02 -1.79077E-01 -1.51141E-01 -8.25327E-03 -Frame 13 3.96597E00 -4.50123E-01 4.19321E-02 -1.68300E-01 -1.49623E-01 4.14298E-02 -2.72459E-02 1.26406E-01 1.63084E-02 -7.12140E-02 -1.46755E-01 -1.29820E-01 6.39071E-02 -Frame 13 3.77539E00 -5.28046E-01 -1.02985E-01 -1.70704E-01 -2.12508E-01 -9.64392E-02 -2.25741E-01 7.88206E-02 -1.34867E-01 -4.09302E-03 -9.78142E-02 3.79956E-02 6.30427E-02 -Frame 13 3.89048E00 -6.26410E-01 -3.02634E-01 -1.94332E-01 -8.55109E-02 6.79627E-02 3.00275E-02 1.22133E-01 -6.92822E-03 -5.05536E-02 -1.07118E-01 4.12042E-02 8.40851E-02 -Frame 13 3.95077E00 -5.63693E-01 -1.24156E-01 -5.95194E-02 -5.41429E-02 3.80104E-02 -1.38458E-02 7.30944E-02 1.42969E-01 -2.96605E-03 4.91942E-02 1.12958E-01 1.95589E-01 -Frame 13 4.28538E00 -2.34555E-01 -1.43942E-01 -1.89887E-01 -1.64756E-01 -7.68467E-02 -1.15485E-01 -1.39920E-01 -8.69673E-02 -3.04939E-02 -3.02828E-02 2.17627E-02 8.07937E-03 -Frame 13 3.90317E00 -5.48702E-01 -6.29592E-02 -7.30954E-02 -6.85897E-02 1.11920E-01 -7.39991E-02 -5.41154E-02 -6.72782E-03 1.22882E-01 -1.21859E-03 -9.29995E-02 -7.47487E-02 -Signal: SpeechEndSignal -Signal: DataEndSignal: creation time: 1422745327054, duration: 5235ms diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-feature.dump b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-feature.dump deleted file mode 100755 index ad85fe52..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-feature.dump +++ /dev/null @@ -1,325 +0,0 @@ -Signal: DataStartSignal: creation time: 1424472926267 -Signal: SpeechStartSignal -FloatFrame 39 -3.77485E00 -6.13085E-01 -1.05100E-01 1.81023E-01 -3.07806E-02 1.72977E-01 -7.57087E-02 9.55702E-02 2.96417E-01 -4.51243E-02 -3.25476E-02 1.18299E-01 1.04748E-01 -1.59180E-01 5.15082E-02 5.93249E-02 -3.29148E-03 1.49231E-01 1.04756E-01 1.83633E-01 -9.28542E-02 -9.35171E-02 1.35444E-01 5.87815E-02 -9.51312E-02 -2.28025E-01 -2.22187E-01 -7.71034E-02 1.71996E-01 -1.63426E-02 -1.71664E-01 1.09897E-01 -2.05534E-02 -7.08407E-03 4.04112E-02 -2.29568E-01 -1.40484E-02 1.62020E-01 8.85592E-02 -FloatFrame 39 -3.76280E00 -5.60187E-01 -1.76795E-01 1.06969E-01 6.54967E-02 1.72887E-01 1.04430E-01 2.09324E-01 2.66446E-01 2.34154E-01 7.36240E-02 8.05494E-02 2.46591E-02 -2.10141E-01 -2.42051E-02 1.00300E-01 -9.03960E-02 -7.53869E-02 1.09807E-01 1.59586E-01 1.06670E-01 1.04407E-02 4.97104E-02 9.21232E-02 1.24270E-01 8.47068E-03 1.38979E-01 -6.93172E-03 1.53674E-01 2.70388E-01 -1.03878E-01 -6.96779E-02 -4.89978E-02 1.87920E-01 -5.17753E-02 -1.45297E-01 6.16998E-02 2.48324E-01 1.93517E-01 -FloatFrame 39 -3.93403E00 -5.61577E-01 -4.57749E-02 1.77731E-01 1.18450E-01 2.77733E-01 1.07925E-01 2.71591E-03 2.02900E-01 9.03193E-02 2.62340E-02 2.31678E-02 -1.23278E-01 -2.02018E-02 4.45765E-02 2.12999E-01 2.67097E-01 4.53532E-02 3.50777E-02 1.34636E-01 9.50654E-02 -1.45292E-01 -9.85338E-03 1.20481E-01 1.53193E-01 -3.45084E-02 1.15536E00 9.40055E-01 6.67610E-01 3.53642E-01 -4.12898E-02 -4.06817E-01 -3.36006E-01 -3.41686E-01 -1.51173E-01 -2.58112E-01 -4.27554E-02 -1.89779E-01 -2.97136E-02 -FloatFrame 39 -3.98499E00 -6.37290E-01 -4.79939E-03 9.06267E-02 -1.06167E-01 2.82784E-01 8.38770E-02 2.02240E-01 3.06857E-01 4.58613E-03 5.95756E-02 2.42569E-01 1.13218E-01 9.45221E-01 9.15850E-01 7.67910E-01 2.63246E-01 -1.16677E-01 -2.97010E-01 -1.76420E-01 -2.35016E-01 -1.40732E-01 -2.08402E-01 4.93678E-02 -6.55087E-02 -2.12429E-02 2.20272E00 1.22777E00 4.90445E-01 -1.47811E-01 -3.68752E-01 -6.07266E-01 -3.36923E-01 -4.15188E-02 6.43291E-02 9.19741E-02 -9.55991E-02 -1.87337E-01 8.71796E-02 -FloatFrame 39 -3.79505E00 -5.68509E-01 1.07899E-01 4.48120E-01 1.45727E-02 2.08055E-01 5.89268E-02 1.90636E-01 1.51124E-01 -5.49776E-02 8.79337E-02 2.71492E-01 7.02392E-02 2.18252E00 1.27235E00 7.03444E-01 1.19286E-01 -3.23399E-01 -5.72188E-01 -2.02288E-01 5.35466E-02 -8.09633E-02 8.21207E-02 2.48822E-02 -3.41436E-02 5.26711E-02 2.23867E00 7.37768E-01 -9.07001E-02 -1.84600E-01 -1.43773E-01 -3.73222E-01 -8.54895E-02 1.02786E-01 -5.85791E-02 2.81518E-01 -8.94918E-02 -2.58365E-01 -3.20737E-01 -FloatFrame 39 -2.81758E00 3.55663E-01 5.91115E-01 3.70215E-01 -5.11800E-02 -1.24123E-01 -7.19898E-02 -2.56920E-02 1.25714E-01 2.57525E-02 1.22992E-01 1.50408E-02 3.41616E-03 3.18389E00 1.65362E00 6.77210E-01 7.86461E-02 -2.60450E-01 -6.70232E-01 -2.61910E-01 -1.32231E-01 -1.99311E-01 7.31166E-02 -4.01240E-02 -3.23873E-01 -3.41980E-01 2.20320E00 6.23115E-01 -6.46781E-01 -5.46085E-01 -9.54008E-02 -1.07307E-01 2.34912E-02 -2.17938E-01 1.08640E-01 -5.60918E-02 -2.24563E-01 -1.59997E-01 -4.09335E-01 -FloatFrame 39 -1.75151E00 7.10773E-01 6.57669E-01 2.97018E-01 -2.04949E-01 -2.94455E-01 -9.43631E-02 5.62625E-02 1.21936E-01 1.72440E-01 5.11161E-02 -1.09758E-02 -7.06065E-02 4.38571E00 1.89547E00 5.66624E-02 -4.26799E-01 -4.18800E-01 -6.79495E-01 -1.78797E-01 -1.64392E-01 2.76766E-02 2.60289E-02 -1.99680E-01 -1.94140E-01 -3.56664E-01 1.54414E00 -8.19659E-01 -1.22364E00 -6.47023E-01 -1.65396E-01 1.60431E-01 3.50057E-01 3.67490E-01 9.04833E-02 1.59077E-02 -3.04474E-01 3.76239E-01 6.82500E-02 -FloatFrame 39 -8.01100E-01 1.01633E00 6.72411E-01 1.69273E-01 -3.66617E-01 -3.87448E-01 -1.78033E-01 7.00096E-02 1.07546E-01 7.77027E-02 1.94516E-02 -8.13040E-02 -2.28762E-01 4.72803E00 8.33960E-01 -5.46426E-01 -5.68376E-01 -4.25845E-01 -5.09801E-01 8.81469E-02 2.35260E-01 -1.08828E-01 8.90243E-02 -3.44598E-01 5.23661E-02 -2.73730E-01 5.77944E-02 -1.48604E00 -9.35831E-01 -1.39644E-01 7.92431E-03 4.81709E-01 3.93334E-01 3.33993E-01 -2.23335E-01 -5.49972E-02 -2.55895E-02 2.92939E-01 3.31097E-01 -FloatFrame 39 5.90659E-01 1.32696E00 1.64561E-01 2.13206E-02 -4.04227E-01 -4.71439E-01 -1.19870E-01 2.62437E-02 1.78801E-01 -2.89488E-02 -1.11747E-01 7.73517E-02 -2.86425E-01 4.44351E00 4.09421E-01 -8.79169E-01 -5.66443E-01 -4.10876E-01 -1.97785E-01 2.14538E-01 1.69602E-01 -1.95659E-01 -2.89683E-02 -2.25270E-01 9.87985E-02 -2.55668E-02 -5.84135E-01 -9.46410E-01 -4.98808E-01 8.35401E-02 1.68179E-01 5.45182E-01 2.56966E-01 -1.20287E-01 -1.73813E-01 -8.66596E-02 2.38091E-01 2.38968E-01 4.63714E-01 -FloatFrame 39 1.91045E00 1.18962E00 4.46887E-02 -1.98161E-01 -4.77025E-01 -6.33924E-01 1.61571E-02 2.09568E-01 1.68862E-02 1.14777E-01 -2.21606E-01 6.74069E-02 -2.70314E-01 4.14390E00 -1.12450E-01 -1.04523E00 -4.84836E-01 -2.57667E-01 3.53809E-02 3.45113E-01 1.14972E-01 -2.82641E-01 2.36477E-03 -1.06506E-01 2.91334E-01 1.89984E-01 -1.30947E00 -1.04481E00 2.50846E-01 1.92064E-01 2.76094E-01 4.40749E-01 7.47809E-02 -1.34285E-01 -1.78761E-01 1.43773E-01 3.74363E-01 4.41930E-02 2.91967E-01 -FloatFrame 39 2.69199E00 1.12019E00 -2.21500E-01 -2.69426E-01 -6.15825E-01 -4.92240E-01 1.20174E-01 2.25864E-01 -7.37224E-02 1.43472E-01 -1.74154E-01 8.78227E-02 -9.61733E-02 3.13403E00 -6.35387E-01 -6.28323E-01 -3.74380E-01 -1.34781E-01 2.42963E-01 2.89318E-01 3.53162E-02 -3.74420E-01 1.14805E-01 1.49093E-01 1.42992E-01 2.66401E-01 -2.22266E00 -4.92298E-01 4.74152E-01 3.53731E-01 3.28482E-01 4.05472E-01 -2.87361E-01 -3.58394E-01 7.60826E-02 1.14395E-01 3.99958E-01 -2.53390E-01 4.74275E-02 -FloatFrame 39 3.34280E00 9.03879E-01 -3.72824E-01 -3.15564E-01 -6.24284E-01 -3.52067E-01 1.67080E-01 1.84982E-01 -1.75095E-01 8.00675E-02 -8.70549E-02 2.10030E-01 -3.87774E-02 1.92124E00 -6.04747E-01 -5.71083E-01 -1.31105E-01 7.08148E-02 4.40853E-01 5.77515E-02 -2.43421E-01 -2.06559E-01 1.16760E-01 2.93451E-01 3.79438E-02 2.37412E-01 -1.93513E00 -1.31245E-01 4.28376E-01 3.43034E-01 4.22240E-01 1.65382E-01 -5.10385E-01 -3.68628E-01 3.00816E-01 1.15922E-01 1.03673E-01 -2.60621E-01 -2.05988E-01 -FloatFrame 39 3.72469E00 6.91570E-01 -4.63762E-01 -3.53059E-01 -5.39008E-01 -2.28476E-01 1.69449E-01 6.15599E-02 -1.95619E-01 8.58562E-02 3.73467E-02 2.20343E-01 -2.00239E-02 1.19891E00 -7.66632E-01 -1.99947E-01 -3.13459E-02 2.87458E-01 4.08345E-01 -2.21067E-01 -3.33312E-01 -7.36030E-02 2.30727E-01 2.52767E-01 -1.17630E-01 6.04129E-02 -1.76951E00 2.44957E-02 6.73132E-01 1.93120E-01 2.76154E-01 -1.25691E-02 -5.69667E-01 2.15356E-03 2.26267E-01 2.25459E-01 -2.07071E-01 -3.21485E-01 -2.05049E-01 -FloatFrame 39 3.83169E00 5.84876E-01 -5.26394E-01 -3.29266E-01 -4.06211E-01 -1.93071E-01 7.39086E-02 -3.38536E-02 -1.89672E-01 2.31537E-01 7.18451E-02 1.05351E-01 -3.29020E-02 1.51728E-01 -5.80252E-01 1.02049E-01 6.20151E-02 3.46969E-01 4.28284E-01 -5.11915E-01 -2.41268E-01 1.97085E-02 3.42220E-01 8.63805E-02 -2.83541E-01 3.23626E-02 -2.62992E00 7.47057E-02 7.48464E-01 1.23254E-01 8.03821E-02 9.80550E-02 -2.85933E-01 1.42578E-01 2.16614E-01 -4.83418E-02 -2.82335E-01 -1.14941E-01 -3.74181E-02 -FloatFrame 39 3.89090E00 3.53562E-01 -4.21447E-01 -3.00772E-01 -3.28366E-01 -8.38953E-02 -1.00892E-01 -1.07448E-01 -1.47325E-01 3.74198E-01 7.86127E-02 -2.98073E-02 -3.57604E-02 -1.43102E00 -6.91926E-01 5.48516E-01 9.19081E-02 3.67840E-01 5.06400E-01 -5.07000E-01 -1.90734E-01 1.43011E-01 1.82385E-01 -2.95687E-02 -2.32571E-01 2.29947E-02 -3.45549E00 -3.59740E-01 3.81720E-01 3.97828E-01 1.61913E-01 -6.41030E-03 3.84994E-01 3.33235E-01 3.41026E-02 -4.09878E-01 -2.73569E-01 1.73711E-01 3.71930E-02 -FloatFrame 39 3.49453E00 3.23627E-01 -2.70774E-01 -2.53549E-01 -2.77315E-01 7.62164E-02 -3.44835E-01 -5.62856E-02 -1.55386E-01 4.22287E-01 -6.74386E-04 -7.35106E-02 -6.41487E-03 -3.30376E00 -9.39992E-01 4.83769E-01 4.59843E-01 5.08882E-01 4.21873E-01 -1.26921E-01 9.19672E-02 5.38111E-02 -6.76580E-02 -1.87189E-01 -1.09829E-01 6.95555E-02 -2.93579E00 5.41453E-01 -5.05113E-01 5.58024E-01 1.49390E-01 -3.45951E-01 7.36643E-01 3.60772E-01 -1.06702E-01 -4.60992E-01 -2.59983E-01 2.08316E-01 1.48105E-01 -FloatFrame 39 2.29368E00 -3.56238E-04 8.47543E-02 -2.61151E-01 -1.71168E-01 2.77924E-01 -3.37551E-01 -1.29174E-01 -5.26077E-02 2.68241E-01 7.77802E-03 -1.22277E-02 2.97085E-03 -4.36681E00 -1.50474E-01 4.34030E-02 6.49932E-01 5.17230E-01 1.60450E-01 2.29643E-01 1.70038E-01 3.63088E-02 -2.78608E-01 -2.89552E-01 -2.42545E-02 1.71100E-01 -7.15275E-01 9.10044E-01 -5.73198E-01 1.28268E-01 -6.80254E-02 -5.48302E-01 5.81030E-01 -2.72567E-02 -1.05936E-02 -2.21339E-01 3.11128E-02 1.59227E-01 7.13808E-02 -FloatFrame 39 5.27922E-01 -3.55116E-01 -4.26245E-02 1.30577E-01 1.02671E-01 2.28802E-01 -5.30124E-02 5.81136E-02 -1.35861E-01 1.63879E-01 -1.15344E-01 -4.47872E-03 3.66535E-02 -4.01904E00 -2.99476E-02 -8.94287E-02 5.88111E-01 4.40856E-01 -1.26429E-01 4.54109E-01 6.47104E-02 4.32175E-02 -2.88997E-01 -1.56076E-01 4.93974E-02 1.40936E-01 1.25321E00 4.10420E-01 -3.85842E-01 -6.66738E-03 -1.20292E-01 -5.01452E-01 2.27175E-01 6.57903E-02 -1.45321E-01 2.86747E-02 3.40909E-02 4.04846E-02 1.44608E-01 -FloatFrame 39 -4.75905E-01 2.03088E-01 -3.78044E-01 3.49160E-01 1.88864E-01 7.65543E-02 1.28751E-01 6.25902E-02 -1.11017E-01 9.55907E-02 -2.10939E-01 -5.40617E-02 1.35339E-01 -3.11360E00 2.59946E-01 -3.42439E-01 6.43264E-01 3.96938E-01 -3.41003E-01 4.56818E-01 2.35828E-01 -1.09012E-01 -2.49933E-01 -2.55461E-01 1.62301E-02 3.15708E-01 2.55301E00 5.24856E-01 -3.52753E-02 -3.97037E-01 -3.43036E-01 -9.21738E-02 -3.58107E-01 -1.61623E-01 7.09623E-03 1.86394E-01 1.23968E-01 -1.00551E-01 1.04145E-01 -FloatFrame 39 -5.24512E-01 2.93680E-01 -3.60203E-01 3.34562E-01 1.63541E-01 -5.02126E-02 1.09274E-01 8.42484E-03 -1.12169E-01 1.33291E-01 -1.56750E-01 -2.41133E-02 1.34521E-01 -1.46603E00 4.94908E-01 -1.24704E-01 1.91074E-01 9.78200E-02 -2.18603E-01 9.60020E-02 -9.69130E-02 5.03138E-02 -1.02602E-01 -3.21081E-02 -5.11537E-02 2.45081E-01 2.55883E00 -3.95722E-01 6.29002E-01 -5.95557E-01 -4.57018E-01 1.38166E-01 -5.54426E-01 -4.64895E-01 2.29333E-01 4.07893E-01 3.74606E-01 5.16128E-02 -3.55477E-01 -FloatFrame 39 -8.19919E-01 2.59590E-01 -2.57685E-01 3.82113E-01 2.25770E-01 -6.30787E-02 1.19267E-01 1.06654E-01 -1.61620E-01 1.83080E-02 -2.47683E-01 4.00243E-03 3.18678E-01 -5.54766E-01 -1.35776E-01 2.86563E-01 4.77075E-02 -6.00803E-02 -2.02837E-01 -9.76082E-02 -2.29067E-01 1.20321E-01 1.57960E-01 1.19145E-01 6.78429E-02 -3.97691E-02 5.92967E-01 -6.95095E-01 5.21851E-01 -1.63730E-01 -2.30394E-01 2.21593E-01 -1.00265E-01 -1.03976E-01 6.38070E-02 1.34414E-01 1.95732E-01 1.02198E-01 -2.69332E-01 -FloatFrame 39 -9.38109E-01 1.39793E-01 -1.67328E-01 3.21650E-01 2.00491E-01 1.01991E-02 4.29896E-02 -3.87993E-02 -8.55475E-02 6.12767E-02 -1.47452E-01 -5.56324E-02 2.81735E-01 -8.73064E-01 -2.00187E-01 3.97147E-01 2.73434E-02 -1.32574E-01 2.98974E-03 -4.26328E-03 -2.00889E-01 1.14121E-01 3.18119E-02 1.63624E-01 5.10445E-02 -2.42507E-02 3.82253E-01 -6.56646E-01 2.17025E-01 -1.64490E-01 -6.69895E-02 3.61343E-01 -1.88077E-03 1.04837E-01 1.11339E-01 -1.13721E-01 9.38575E-02 -8.76716E-02 -2.95807E-01 -FloatFrame 39 -1.03067E00 6.73122E-02 -9.14816E-02 3.96867E-01 1.28784E-01 -1.26283E-01 3.11426E-02 -1.66477E-01 9.30401E-03 2.53551E-01 -9.17935E-02 1.37812E-02 9.55701E-02 -1.72513E-01 -7.92423E-01 5.03588E-01 -1.16782E-01 -1.27070E-01 1.58506E-01 -9.94890E-02 -1.24230E-01 2.31660E-01 4.42388E-02 2.13003E-01 -1.98287E-02 -3.35576E-01 1.90840E00 -9.37681E-01 1.72275E-01 -2.16363E-01 2.96644E-02 -5.12563E-02 -1.06053E-01 2.25494E-01 6.10220E-02 -2.05869E-01 2.21476E-03 2.10683E-03 -1.96631E-01 -FloatFrame 39 -1.39758E00 9.34927E-02 3.69440E-02 3.61905E-01 3.09675E-02 -4.72229E-02 1.05011E-01 -1.92464E-01 1.95188E-03 1.65102E-01 6.87324E-03 2.69312E-02 1.10271E-01 1.03533E00 -1.13787E00 5.69421E-01 -1.89019E-01 -1.02909E-01 -4.82665E-02 -1.10316E-01 2.46056E-02 1.75143E-01 -1.74057E-01 1.65838E-01 5.31513E-02 -2.20882E-01 8.50797E-01 -5.44215E-01 4.44285E-01 -5.61607E-01 3.58186E-01 3.33544E-02 -8.07894E-02 1.93229E-01 1.03701E-02 -3.13897E-01 -7.94414E-02 -6.47086E-02 2.32160E-01 -FloatFrame 39 -9.92432E-01 -5.32833E-01 2.45903E-01 2.65331E-01 9.87001E-02 9.54278E-02 1.97782E-02 -1.75756E-02 7.00395E-02 6.25468E-02 -3.46799E-02 -1.58263E-02 -1.68978E-02 6.78284E-01 -1.33664E00 9.47872E-01 -6.78389E-01 2.31117E-01 1.91861E-01 -1.80278E-01 6.89989E-02 2.42030E-01 -2.69658E-01 1.33561E-01 -8.45373E-02 -1.03416E-01 5.73267E-01 -5.99773E-01 3.79937E-01 -4.06231E-01 4.66458E-01 2.67533E-01 -4.41732E-02 2.24113E-01 -7.24670E-02 1.16344E-03 -1.71046E-01 -8.34529E-02 9.56034E-02 -FloatFrame 39 9.72237E-02 -9.98075E-01 4.02093E-01 1.32631E-01 9.75817E-02 -3.80674E-02 -6.73264E-02 -1.41937E-02 8.95953E-02 -1.12780E-01 1.83866E-02 -2.48111E-03 6.08531E-02 1.60860E00 -1.73764E00 9.49358E-01 -5.95250E-01 3.63549E-01 2.19266E-01 -1.54489E-01 2.48719E-01 1.02676E-01 -1.72894E-01 -5.20718E-03 -3.03017E-02 -1.25278E-01 4.73111E-01 -2.62522E-01 -3.56052E-01 1.50652E-01 7.17183E-02 -1.81234E-01 2.68058E-01 1.17062E-01 -8.96702E-02 1.89122E-01 3.98497E-02 1.29164E-01 1.13988E-01 -FloatFrame 39 -3.52387E-01 -1.26933E00 8.56391E-01 -2.81522E-01 3.59900E-01 6.55782E-02 -1.49136E-01 -9.74779E-02 2.51334E-01 -1.61073E-02 4.17678E-02 -7.07562E-02 -7.84596E-03 1.15139E00 -1.59916E00 5.91821E-01 -5.27737E-01 3.02835E-01 1.06264E-02 8.77798E-02 1.86061E-01 1.52360E-01 -8.05357E-02 1.73411E-01 4.46268E-02 1.05720E-02 -1.47702E00 2.22101E-01 -6.03513E-01 2.19510E-01 -1.19462E-01 -1.80901E-01 2.53509E-01 -1.14013E-01 -2.56302E-02 2.84129E-01 -5.63614E-03 1.30136E-01 6.78390E-02 -FloatFrame 39 2.11023E-01 -1.64415E00 9.86302E-01 -2.33345E-01 3.94516E-01 1.72044E-01 -4.94781E-02 5.62550E-02 1.04628E-01 -7.79108E-03 1.66606E-03 -3.37046E-03 -1.50075E-02 1.31578E-01 -1.51554E00 3.45846E-01 -3.75740E-01 2.44087E-01 3.83655E-02 9.90199E-02 1.34706E-01 7.70456E-02 1.11236E-01 -1.08433E-02 9.98348E-02 -5.74393E-02 -2.88225E-01 4.32496E-01 -8.97391E-01 3.71853E-01 -3.34686E-01 -1.45571E-01 1.58178E-01 1.29134E-01 -1.48183E-01 3.25592E-02 -1.36073E-01 1.61250E-01 1.20418E-01 -FloatFrame 39 1.58963E-01 -2.13199E00 8.37723E-01 -2.62406E-01 4.01535E-01 1.06054E-01 1.07558E-01 1.68485E-01 2.22399E-01 -1.79889E-02 1.38731E-01 2.88006E-02 -6.32575E-03 8.63170E-01 -1.16666E00 -3.05571E-01 -1.55884E-01 -3.18515E-02 -1.34944E-01 2.45958E-01 3.15195E-01 4.17614E-03 -4.79765E-02 3.73376E-02 2.05876E-01 1.30990E-01 -9.18317E-02 7.32103E-01 -8.43064E-01 2.43941E-01 -3.69770E-01 -2.91710E-01 3.10805E-02 -2.10379E-01 8.32332E-03 -1.25318E-01 1.91746E-01 6.90264E-02 3.17185E-01 -FloatFrame 39 2.28801E-01 -2.51361E00 7.47939E-01 -2.43109E-01 3.41669E-01 2.98051E-04 3.16936E-02 1.20513E-01 1.66641E-01 -1.54451E-03 7.54326E-03 9.73537E-02 3.41377E-03 3.97460E-02 -7.83437E-01 -4.97219E-01 -1.31799E-01 -1.25683E-01 -2.53345E-01 1.30100E-01 -7.56726E-02 8.53689E-02 -1.40827E-02 1.80903E-01 1.68861E-01 2.59745E-01 -1.04991E00 7.85926E-01 -1.36705E-01 9.59339E-02 -2.28216E-03 9.81405E-02 -3.66121E-01 -5.21782E-01 -1.62063E-01 1.99975E-01 1.04678E-01 -1.20253E-01 -5.50801E-02 -FloatFrame 39 5.10782E-01 -2.43599E00 5.50820E-01 -4.37405E-01 3.28049E-01 -6.93662E-02 9.68221E-02 2.17717E-01 2.55510E-01 -6.40837E-02 7.91055E-02 1.35120E-01 1.23144E-01 -1.86741E-01 -3.80738E-01 -4.42276E-01 -5.99497E-02 -3.41336E-02 -3.68039E-02 -1.20163E-01 -2.06587E-01 -1.57887E-01 1.51999E-01 1.42016E-01 8.56237E-02 7.59100E-02 -4.48990E-01 6.93412E-01 4.45950E-02 1.52991E-01 1.76593E-01 1.78895E-01 -1.62878E-01 -3.62909E-02 -8.99067E-02 1.07152E-01 -4.42988E-02 1.28487E-02 -1.80306E-01 -FloatFrame 39 2.50769E-01 -2.42758E00 4.89084E-01 -3.65144E-01 2.68833E-01 -8.13010E-02 8.06223E-02 -1.94176E-02 1.89996E-01 -2.18738E-02 1.82569E-01 1.65491E-01 2.44738E-01 -4.09244E-01 -9.00248E-02 -4.52623E-01 2.11914E-02 5.09099E-02 -7.44494E-02 -3.27780E-02 -1.11964E-01 -4.53781E-03 9.30690E-02 1.36604E-01 1.81710E-01 7.94395E-02 -6.51411E-01 1.95928E-01 -8.66086E-02 2.72015E-01 1.65125E-02 1.85877E-02 1.05839E-01 9.53949E-02 1.65582E-01 3.82494E-02 -1.33934E-01 -9.30774E-02 -1.29615E-01 -FloatFrame 39 -2.77783E-02 -2.51273E00 3.95448E-01 -3.22356E-01 3.67401E-01 6.92503E-02 -1.26054E-02 -3.81018E-02 6.45118E-02 1.34010E-01 2.80747E-01 1.14424E-01 6.95842E-02 -8.38152E-01 -1.84810E-01 -5.28885E-01 2.12065E-01 -1.76211E-02 -1.82162E-02 -1.43241E-02 -1.11192E-01 7.69445E-03 1.90248E-01 8.08143E-03 -7.45367E-03 -5.37046E-02 -1.15726E-01 8.73204E-02 -5.58714E-02 2.93496E-02 5.80038E-02 4.65626E-02 1.15284E-01 3.33812E-01 1.45280E-02 5.54773E-02 -2.24512E-01 -3.19935E-01 -2.24706E-01 -FloatFrame 39 -1.80443E-01 -2.60364E00 2.95315E-01 -2.21918E-01 3.92578E-01 -7.41513E-02 -1.08447E-03 8.54917E-03 1.62103E-01 9.15245E-02 1.44147E-01 2.79064E-01 8.28532E-02 -5.24970E-01 -2.70434E-03 -5.08495E-01 5.05410E-02 1.08914E-01 -2.78867E-02 8.25057E-02 2.21848E-01 9.99018E-03 1.48546E-01 -8.79084E-02 -1.38225E-01 -1.45267E-01 7.66346E-01 3.03305E-01 2.93429E-01 -1.80511E-01 7.42317E-02 -2.11522E-01 2.01414E-01 3.40746E-01 3.82069E-02 -3.17110E-01 -2.55079E-01 1.49164E-02 8.89139E-02 -FloatFrame 39 -3.27370E-01 -2.62080E00 2.19357E-02 -2.25340E-01 3.10428E-01 -8.75824E-02 8.24980E-02 1.06525E-01 2.63204E-01 1.26165E-01 8.71869E-02 1.27667E-01 6.94395E-02 -7.18066E-02 1.18495E-01 -2.35455E-01 3.15541E-02 5.66106E-02 -2.29738E-01 1.87090E-01 2.29554E-01 4.59014E-02 -1.26862E-01 -2.46998E-01 7.46273E-03 3.52093E-02 7.38027E-01 8.61177E-03 4.80438E-01 -1.86059E-01 -1.16996E-01 4.70481E-02 -3.81923E-02 -9.86798E-02 5.86882E-02 -9.47325E-02 4.14711E-02 -3.71323E-03 1.54244E-01 -FloatFrame 39 -2.74201E-01 -2.43029E00 -1.94110E-02 -3.14603E-01 3.77747E-01 -1.09188E-01 1.63128E-01 2.02431E-01 1.99987E-01 1.26673E-01 9.46603E-02 2.72658E-02 9.94711E-02 2.13057E-01 5.90743E-03 -2.80572E-02 -1.35518E-01 -8.08241E-03 1.91614E-02 4.43134E-02 1.23168E-01 6.86784E-02 5.38139E-02 -4.64373E-02 -1.41938E-01 8.97734E-03 6.21986E-01 -1.03462E-01 6.27201E-01 4.54849E-02 -2.57167E-01 2.33917E-01 -1.15764E-01 -2.02228E-01 -1.99069E-01 1.18054E-01 4.46856E-01 -8.73419E-02 6.05200E-02 -FloatFrame 39 -9.95849E-02 -2.39424E00 1.59992E-01 -2.90802E-01 4.24012E-01 -1.60488E-01 1.74484E-01 1.91452E-01 1.10413E-01 7.14846E-03 3.37490E-02 1.21887E-01 1.04794E-01 5.50179E-01 1.50331E-02 3.91746E-01 7.70391E-02 -2.00556E-01 4.17963E-03 7.13255E-02 2.73261E-02 -1.53167E-01 -8.80726E-03 1.99858E-01 -7.98791E-02 9.57293E-02 7.01776E-01 -5.43499E-02 3.79263E-01 3.48213E-01 -2.31418E-01 2.22725E-01 -2.75602E-01 -2.82971E-01 -1.00595E-01 -1.60126E-01 1.05917E-01 1.17927E-01 1.23603E-01 -FloatFrame 39 3.26140E-02 -2.59773E00 2.67258E-01 -3.57436E-01 3.84496E-01 -5.49899E-02 4.32289E-02 1.31718E-01 2.30781E-01 1.45338E-01 9.77098E-02 1.37125E-01 9.18306E-02 9.14832E-01 -4.84424E-02 3.51205E-01 2.12694E-01 -2.39500E-01 2.41887E-01 -2.31289E-01 -1.59802E-01 -3.19165E-02 -1.06312E-01 5.94794E-02 -2.40115E-02 1.32581E-01 9.90933E-01 2.58300E-01 -1.52490E-01 3.16416E-01 -1.53546E-01 1.25029E-01 -3.74049E-01 2.30462E-02 -2.53678E-02 3.77384E-02 -2.18794E-01 -7.53300E-02 3.68475E-03 -FloatFrame 39 2.22809E-01 -2.60577E00 4.13682E-01 -1.48301E-01 1.09872E-01 -8.34027E-02 1.53824E-01 1.33851E-01 1.10037E-01 1.17357E-01 2.87045E-01 4.77874E-02 1.65169E-01 1.54111E00 2.73333E-01 2.39256E-01 3.93455E-01 -3.54102E-01 1.29209E-01 -3.02723E-01 5.03722E-02 -1.78535E-01 2.89312E-02 -1.89357E-02 -1.55209E-01 9.94141E-02 1.24516E00 1.42999E00 -1.48104E-01 6.39983E-01 -1.40158E-02 -1.29124E-01 -1.71762E-01 1.27020E-01 -2.49205E-01 -4.36371E-02 -2.47275E-01 -3.56423E-01 -1.62958E-01 -FloatFrame 39 6.40632E-01 -2.47873E00 3.31795E-01 -1.01909E-01 1.38246E-01 1.32699E-01 -6.81606E-02 4.26285E-02 1.68070E-01 2.03604E-02 1.54140E-01 3.25427E-03 2.32052E-01 2.15999E00 1.38154E00 2.03101E-01 8.52677E-01 -2.53516E-01 1.12762E-01 -4.03050E-01 -3.27817E-02 -2.81122E-01 -1.49949E-01 -1.87795E-01 -3.80435E-01 -3.03777E-02 1.04440E00 2.10098E00 -7.33426E-01 3.91559E-01 2.95678E-01 -1.09218E-01 -1.76665E-01 -3.65798E-01 1.82739E-01 -2.38725E-01 -3.89002E-01 -1.24675E-01 -2.98510E-01 -FloatFrame 39 1.44153E00 -2.12090E00 3.99249E-01 1.02654E-01 6.99096E-02 -3.12789E-02 -1.28239E-01 2.41824E-01 -6.81219E-02 3.60796E-02 1.48133E-02 -3.33221E-02 2.04208E-01 2.58551E00 2.37432E00 -4.94170E-01 7.85014E-01 -5.84240E-02 1.99910E-02 -4.79388E-01 -3.15426E-01 4.20403E-03 -2.09793E-01 -4.07938E-01 -2.79884E-01 -1.99096E-01 8.71216E-02 1.24718E00 -8.77998E-01 -1.43259E-01 2.54928E-01 -4.83216E-01 1.81909E-01 -1.93723E-01 2.33040E-01 4.91912E-02 -1.24656E-01 1.73731E-01 -2.46162E-01 -FloatFrame 39 2.19260E00 -1.21619E00 4.70359E-01 4.95241E-01 1.30980E-01 5.77723E-02 -3.59821E-01 9.89359E-02 -5.03402E-02 -4.61092E-03 -9.00856E-02 -2.43309E-01 6.14529E-02 2.24711E00 2.62873E00 -6.74897E-01 7.09418E-01 1.41148E-03 -3.70454E-01 -2.21141E-01 -2.26505E-01 -4.80820E-02 -1.00758E-01 -3.12452E-01 -2.06703E-01 -2.76539E-01 -1.13644E00 2.17332E-01 -5.81945E-01 -3.06939E-01 2.93085E-01 -3.78599E-01 4.29347E-01 -2.18796E-01 2.55134E-01 1.22969E-01 1.27844E-01 1.72564E-01 -1.72635E-02 -FloatFrame 39 2.80832E00 -2.31451E-01 -8.04881E-02 6.36713E-01 5.14475E-02 -6.34117E-02 -3.25565E-01 -1.81575E-01 1.14241E-01 -9.24361E-02 -1.20893E-01 -2.32097E-01 -3.39272E-02 1.44908E00 2.59165E00 -1.07612E00 4.78075E-01 2.34661E-01 -3.58608E-01 -5.00409E-02 -5.34222E-01 2.59338E-01 -8.68244E-02 -2.80093E-01 -1.07320E-01 -2.16360E-01 -1.59628E00 -8.03384E-01 -5.90885E-01 -6.73039E-01 2.23838E-01 -3.28764E-02 4.01480E-01 -2.57989E-01 3.48188E-01 4.85346E-02 1.01148E-01 3.49222E-01 1.62133E-01 -FloatFrame 39 2.88774E00 1.49995E-01 -3.43102E-01 6.07509E-01 1.39658E-01 -2.37755E-01 -2.89302E-01 -1.83877E-01 1.19988E-01 -8.03977E-02 -1.58312E-01 -2.03449E-01 -4.44877E-02 6.50829E-01 1.82534E00 -1.26578E00 3.63791E-02 2.25249E-01 -4.03330E-01 1.80339E-01 -4.84494E-01 3.00106E-01 -5.22235E-02 -2.11304E-01 1.42518E-01 -1.14407E-01 -1.59722E00 -1.59220E00 3.38972E-01 -7.75662E-01 1.98804E-01 1.89360E-01 9.46659E-02 3.48635E-01 -1.70840E-01 1.10175E-01 1.76224E-01 1.78343E-01 2.15964E-01 -FloatFrame 39 2.89061E00 4.70745E-01 -6.76867E-01 5.80729E-01 3.04571E-01 -3.89886E-01 -1.78280E-01 -2.92398E-01 1.91217E-01 -5.07448E-02 -2.65280E-01 -1.40642E-01 -1.21519E-02 -1.48140E-01 9.99447E-01 -7.37144E-01 -2.97587E-01 4.33465E-01 -1.69248E-01 4.46250E-02 -1.85587E-01 8.84989E-02 2.33511E-02 -1.03869E-01 7.10235E-02 -3.95190E-04 -1.12416E00 -1.02697E00 7.73005E-01 -4.93166E-01 1.91388E-01 5.25490E-01 -1.51946E-01 3.08701E-01 -3.49874E-01 1.56487E-01 1.37505E-01 -6.53006E-02 6.13006E-02 -FloatFrame 39 2.84343E00 6.09152E-01 -7.95423E-01 5.31620E-01 3.56229E-01 -3.45558E-01 -1.79482E-01 -3.85558E-01 2.49766E-01 -5.68344E-02 -3.01390E-01 -1.00791E-01 -5.29538E-02 -4.73332E-01 7.98369E-01 -4.92777E-01 -4.56787E-01 4.16638E-01 1.22160E-01 2.83936E-02 -1.75793E-01 -4.97674E-02 1.04264E-01 -7.37996E-02 7.72175E-02 -5.31061E-02 -6.74515E-01 -3.10682E-01 5.60604E-01 -3.13005E-01 -9.08519E-02 4.89827E-01 -9.43238E-02 1.87800E-01 -3.36044E-01 2.11719E-02 3.18711E-01 -1.51866E-01 -6.29926E-02 -FloatFrame 39 2.66018E00 7.67996E-01 -8.17632E-01 3.39126E-01 4.84913E-01 -2.32659E-01 -2.80940E-01 -3.67162E-01 2.02740E-01 -6.90850E-02 -2.24762E-01 -1.61073E-01 -3.43224E-02 -8.22655E-01 6.88766E-01 -1.76540E-01 -6.10592E-01 3.42613E-01 3.20579E-01 -4.96988E-02 2.21322E-03 -2.47546E-01 4.45230E-02 2.14842E-01 -8.08429E-02 -6.33878E-02 -7.63717E-01 -1.29958E-01 5.58432E-01 -2.49341E-01 -1.11525E-01 1.62103E-01 -2.48413E-02 3.61922E-01 -3.63439E-01 -8.52521E-02 3.90325E-01 -1.58016E-01 3.85413E-03 -FloatFrame 39 2.41441E00 9.48364E-01 -8.35879E-01 1.50723E-01 5.56296E-01 -1.15595E-01 -2.60908E-01 -3.59670E-01 7.02208E-02 2.38660E-02 -2.32112E-01 -1.26232E-01 -9.75938E-02 -1.23705E00 6.68411E-01 6.56553E-02 -7.06127E-01 3.05113E-01 2.84263E-01 3.55222E-03 1.86129E-01 -4.13206E-01 1.90117E-02 3.16526E-01 -8.07981E-02 -4.92520E-02 -5.00848E-01 -1.23523E-01 2.88884E-01 4.35547E-02 -2.33239E-01 -9.81243E-02 2.36340E-01 2.10431E-01 -1.31643E-01 -7.98179E-02 1.21860E-02 1.19430E-01 -5.53206E-03 -FloatFrame 39 2.06795E00 1.15951E00 -8.53406E-01 -2.98630E-02 6.47185E-01 -6.93072E-02 -2.27978E-01 -2.90185E-01 -5.63290E-02 -6.22177E-03 -5.04379E-02 -2.21485E-01 -7.55397E-02 -1.32350E00 5.65242E-01 1.12345E-01 -5.67037E-01 1.09375E-01 2.22455E-01 1.86641E-01 2.12644E-01 -3.79189E-01 -3.52949E-02 2.27028E-01 3.85866E-02 -6.89199E-02 -2.00249E-01 -2.16878E-01 1.23975E-01 3.41447E-01 -4.27474E-01 -7.71287E-02 1.44296E-01 6.10015E-02 1.42263E-01 -1.02884E-01 -1.18730E-01 7.06966E-02 1.91950E-01 -FloatFrame 39 1.60638E00 1.27756E00 -7.29768E-01 -1.74507E-01 6.61342E-01 -6.12947E-02 -1.75930E-01 -1.99429E-01 -1.63440E-01 -3.78228E-02 1.51357E-02 -1.81589E-01 -1.02206E-01 -1.43730E00 4.51533E-01 1.89630E-01 -3.64680E-01 -1.22361E-01 2.07134E-01 1.47848E-01 2.47131E-01 -2.70943E-01 -8.38727E-02 1.97796E-01 -1.01015E-02 1.42698E-01 2.24193E-01 -3.93518E-01 2.03994E-01 3.40896E-01 -3.90245E-01 -6.51981E-02 -5.50010E-02 -2.58742E-02 2.70968E-01 -3.22735E-02 -2.70111E-01 5.90084E-02 2.60476E-01 -FloatFrame 39 1.33668E00 1.33324E00 -7.05287E-01 -2.27911E-01 5.94288E-01 -1.02045E-02 -9.42987E-02 -1.54518E-01 -1.76449E-01 -1.04380E-01 2.26609E-03 -1.22486E-01 -1.03242E-01 -1.09931E00 1.71724E-01 3.16338E-01 -2.26141E-01 -2.80870E-01 1.57257E-01 1.31640E-01 1.86770E-01 -1.08220E-01 -6.75683E-02 -4.30832E-02 9.75951E-02 1.91556E-01 8.25150E-01 -3.89107E-01 2.13199E-02 3.15975E-01 -2.67623E-01 -7.26370E-02 -9.80653E-03 -1.14072E-01 2.89721E-01 -6.76635E-02 -3.33163E-01 1.27165E-01 1.20356E-01 -FloatFrame 39 9.77113E-01 1.39990E00 -6.46249E-01 -2.13958E-01 4.33935E-01 9.15398E-02 -1.13060E-01 -1.12539E-01 -2.00722E-01 -6.00066E-02 -3.43160E-02 -1.36333E-01 4.51037E-02 -6.12148E-01 6.24261E-02 2.10950E-01 -4.87053E-02 -3.89984E-01 1.34497E-01 1.38041E-01 1.33059E-01 1.87776E-02 -1.51536E-01 -1.35367E-01 1.17063E-01 2.63054E-01 6.83616E-01 -5.31238E-03 -1.89783E-01 2.48596E-01 -5.87366E-02 -1.14403E-01 -1.24616E-01 6.69620E-03 1.19411E-01 -2.94319E-02 -9.81825E-02 -1.74240E-02 6.41171E-02 -FloatFrame 39 9.68641E-01 1.33123E00 -5.37068E-01 -2.56004E-01 3.66315E-01 8.79496E-02 -9.63382E-02 -1.03415E-01 -1.64549E-01 -7.37901E-02 -9.35211E-02 -1.23890E-01 1.16016E-01 -4.15694E-01 1.66412E-01 1.26555E-01 2.24545E-02 -3.39607E-01 4.28540E-02 7.02380E-03 1.93466E-01 1.11906E-02 -9.70003E-02 -1.41266E-01 8.01710E-02 2.55673E-01 6.02226E-01 1.09428E-01 -1.68418E-01 9.52017E-02 2.35375E-01 -3.83093E-01 -2.86705E-02 2.38826E-02 3.69875E-02 -4.35969E-02 5.39657E-02 -8.23359E-02 -1.28344E-01 -FloatFrame 39 9.94235E-01 1.33999E00 -5.18818E-01 -2.23213E-01 2.71358E-01 7.32027E-02 -3.78883E-02 -6.63698E-02 -1.44662E-01 -1.89359E-01 -1.20232E-01 -6.45260E-02 1.60848E-01 -9.92262E-03 1.71854E-01 4.25323E-02 4.64964E-02 -1.54608E-01 -2.48595E-01 1.09371E-01 1.56942E-01 5.57651E-02 -1.95133E-01 -8.14017E-02 3.47272E-02 1.34710E-01 6.46878E-01 3.26993E-02 -2.12590E-01 6.76618E-02 2.24867E-01 -4.72023E-01 1.62377E-01 5.36525E-02 -2.61908E-02 -1.86096E-01 2.07645E-01 -1.22280E-01 -1.38433E-01 -FloatFrame 39 9.20987E-01 1.49965E00 -5.78732E-01 -2.05456E-01 2.54681E-01 3.26495E-02 -8.72749E-02 3.89477E-02 -1.65258E-01 -2.01380E-01 -1.39000E-01 -4.23154E-02 1.52431E-01 2.31184E-01 1.99111E-01 -8.60353E-02 9.01163E-02 -1.14740E-01 -4.29169E-01 1.69401E-01 2.47119E-01 -1.50001E-02 -2.83097E-01 6.63794E-02 -4.21095E-02 1.17240E-01 3.69594E-01 -2.31134E-02 -7.50674E-02 2.90821E-02 7.68576E-02 -3.16023E-01 1.27755E-01 7.28708E-02 -1.94352E-01 8.99009E-02 1.62939E-01 -1.31250E-01 -5.20497E-02 -FloatFrame 39 9.67191E-01 1.57175E00 -6.03717E-01 -1.67461E-01 2.79326E-01 -1.57056E-01 -3.68923E-03 4.44024E-02 -1.44957E-01 -2.55140E-01 -1.15718E-01 -1.01606E-01 1.79814E-01 3.59672E-01 1.48741E-01 -3.25352E-02 7.55785E-02 -7.77508E-02 -5.64618E-01 2.37126E-01 2.29812E-01 -1.38587E-01 -1.05232E-01 8.15370E-02 -9.65231E-02 8.26603E-02 3.59107E-01 -2.81269E-01 1.93742E-01 8.33422E-03 -5.10582E-02 -2.14277E-01 3.19345E-01 -2.45874E-01 -3.54101E-02 1.54871E-01 5.61079E-02 -8.67716E-02 -7.57406E-02 -FloatFrame 39 1.19983E00 1.53035E00 -6.23103E-01 -1.65888E-01 2.51574E-01 -3.41220E-01 7.30630E-02 1.43704E-01 -1.79549E-01 -3.56887E-01 -2.71417E-02 -1.65999E-01 2.33257E-01 5.90292E-01 -8.21578E-02 1.07707E-01 9.84505E-02 -1.65798E-01 -6.43446E-01 4.88746E-01 1.24464E-03 -5.04102E-02 -1.28226E-01 1.22487E-01 -1.28881E-01 4.14999E-02 1.77547E-01 -3.50053E-01 2.72486E-01 3.41947E-02 -3.51083E-01 2.39635E-01 1.98950E-01 -2.85859E-01 9.36966E-02 1.22388E-02 3.03001E-02 2.45794E-02 -1.23041E-01 -FloatFrame 39 1.35391E00 1.48873E00 -5.51353E-01 -1.47634E-01 1.93608E-01 -4.91416E-01 1.99237E-01 1.63443E-01 -2.83249E-01 -2.94591E-01 -3.86946E-02 -1.61049E-01 2.43508E-01 5.37219E-01 -2.01313E-01 2.39951E-01 1.09773E-01 -4.28834E-01 -3.24983E-01 4.36076E-01 -5.60466E-02 -4.48899E-02 -9.29934E-02 1.11837E-01 -7.19438E-02 -4.03804E-02 -1.67715E-01 -3.06428E-01 3.55265E-01 3.94658E-02 -3.54335E-01 5.91314E-01 -1.83187E-01 -1.24413E-01 5.86800E-02 1.35321E-01 -1.00607E-01 1.06365E-01 -1.60599E-01 -FloatFrame 39 1.51128E00 1.41749E00 -4.71025E-01 -1.07006E-01 8.88831E-02 -6.10796E-01 4.01471E-01 4.01924E-02 -2.15668E-01 -3.29606E-01 -1.65123E-02 -1.71197E-01 1.93931E-01 4.22577E-01 -3.88585E-01 4.62972E-01 1.37916E-01 -5.20134E-01 -5.21314E-02 3.05559E-01 -1.23168E-01 8.26977E-03 7.09551E-03 2.18798E-02 -2.25161E-02 -1.19099E-01 -5.82564E-01 -8.24937E-02 1.61839E-01 1.08622E-01 -1.03270E-01 4.72062E-01 -2.34479E-01 -1.86719E-01 2.48025E-01 1.17381E-01 -1.66311E-01 6.35297E-02 -1.19030E-01 -FloatFrame 39 1.50441E00 1.37044E00 -3.63766E-01 -5.76883E-02 -1.49508E-01 -4.82039E-01 4.32387E-01 -1.16442E-02 -1.89847E-01 -3.48133E-01 -3.88047E-03 -1.73550E-01 1.39433E-01 -4.53453E-02 -2.83806E-01 4.01789E-01 2.18395E-01 -5.32104E-01 1.47079E-01 2.01597E-01 -2.42765E-01 2.03135E-01 2.43880E-02 -5.44735E-02 -8.41410E-03 -1.59410E-01 -7.70187E-01 3.60089E-02 -2.19950E-02 9.73983E-02 1.72146E-03 4.50304E-01 -3.70425E-01 8.90097E-02 4.77314E-02 1.03230E-01 -8.74918E-02 3.26730E-02 -3.12648E-02 -FloatFrame 39 1.62240E00 1.14176E00 -1.60131E-01 -2.79717E-02 -2.68559E-01 -3.93351E-01 3.78622E-01 2.05353E-02 -1.71280E-01 -3.49791E-01 -5.26186E-03 -1.88515E-01 1.14158E-01 -3.47610E-01 -3.52576E-01 4.40977E-01 2.35315E-01 -5.18412E-01 3.98172E-01 -6.48660E-02 -3.41587E-02 5.60012E-02 1.10325E-01 -6.56120E-02 1.01570E-02 -1.50364E-01 -6.71012E-01 -3.14309E-02 -3.66205E-02 1.63021E-02 2.66478E-01 1.62037E-01 -3.17993E-01 3.22800E-01 -1.92877E-01 1.51589E-01 -7.97013E-02 3.24498E-02 5.12504E-02 -FloatFrame 39 1.30856E00 1.20492E00 -1.49563E-01 7.07604E-02 -3.38497E-01 -3.44337E-01 4.00834E-01 -7.93227E-02 -8.01137E-02 -2.70203E-01 -9.31681E-02 -1.69463E-01 8.40979E-02 -7.16358E-01 -3.15237E-01 3.65169E-01 2.34697E-01 -2.65627E-01 3.09116E-01 -1.16395E-01 8.00346E-02 1.02577E-02 1.75978E-01 -1.34175E-01 2.40357E-02 -1.08160E-01 -7.35653E-01 1.78594E-01 -2.47042E-01 1.91307E-02 4.13286E-01 -1.69605E-01 4.76855E-02 5.84916E-02 1.30168E-02 -2.65395E-02 -1.15529E-01 1.71985E-01 3.74173E-03 -FloatFrame 39 1.16367E00 1.06492E00 -3.00476E-02 1.28309E-01 -4.29529E-01 -2.12624E-01 3.36605E-01 6.03373E-03 -1.59667E-01 -2.19281E-01 -8.21243E-02 -1.61040E-01 4.35669E-02 -1.08326E00 -1.73982E-01 1.93935E-01 2.54445E-01 -1.05126E-01 2.28567E-01 -1.71805E-02 2.43329E-02 6.90180E-02 8.37859E-02 -1.81141E-01 1.82142E-01 -1.46622E-01 -3.69580E-04 -6.86965E-02 -2.25305E-01 -1.40901E-01 3.25216E-01 2.29232E-02 1.07262E-01 -5.44801E-02 -9.28811E-02 -2.53216E-01 2.34768E-01 1.62491E-01 -5.65168E-02 -FloatFrame 39 7.88052E-01 1.05520E00 1.40313E-03 1.77008E-01 -4.15135E-01 -1.72923E-01 3.15991E-01 6.83904E-02 -1.79589E-01 -1.72156E-01 -1.38055E-01 -1.49514E-01 3.12735E-02 -7.16727E-01 -3.83934E-01 1.39864E-01 9.37956E-02 5.95888E-02 3.32039E-01 -9.13359E-03 2.55545E-02 -8.26234E-02 -7.72383E-02 1.00593E-01 1.86527E-01 -1.64677E-01 4.76288E-01 -1.99553E-01 -1.73743E-01 -2.58553E-01 4.67647E-01 8.52122E-02 -1.69053E-01 -7.25969E-02 -1.59195E-01 -6.22479E-02 4.26658E-01 -1.99797E-02 -1.35788E-01 -FloatFrame 39 5.39140E-01 9.67778E-01 3.38047E-02 2.26474E-01 -3.73685E-01 -1.64784E-01 3.61442E-01 4.48682E-02 -1.02262E-01 -2.66005E-01 -1.86403E-01 -6.37347E-03 -3.24644E-02 -6.06974E-01 -3.73535E-01 2.01924E-02 -4.10742E-03 3.62520E-01 3.13779E-01 -1.86233E-01 -4.82640E-02 -9.01767E-02 2.15380E-02 2.45517E-01 1.62162E-01 -2.82410E-01 3.39276E-01 -8.47197E-02 -1.40885E-01 -1.20733E-01 3.70767E-01 1.65858E-01 -3.45057E-01 -1.69222E-01 2.19554E-02 2.04143E-01 1.91848E-01 -7.20323E-02 -2.15274E-01 -FloatFrame 39 5.91834E-01 8.20990E-01 -9.69947E-03 1.64556E-01 -2.78908E-01 -1.22976E-02 3.91701E-01 -5.37682E-02 -1.62737E-01 -3.47441E-01 7.42530E-03 1.70635E-02 -8.05787E-02 -3.77451E-01 -4.68653E-01 -1.02145E-03 -2.69379E-02 4.30356E-01 4.97897E-01 -3.54190E-01 -1.43668E-01 -6.06679E-02 1.26904E-01 2.92442E-01 1.14494E-01 -3.79951E-01 7.91809E-01 -6.46491E-01 1.72096E-01 5.91297E-02 3.50850E-02 3.94120E-01 -4.17831E-01 -1.13694E-01 1.40507E-01 2.05703E-01 1.22702E-01 -3.49271E-01 -1.38673E-03 -FloatFrame 39 5.56694E-01 6.91381E-01 -9.85521E-03 1.24202E-01 -6.70087E-02 1.01156E-01 1.50372E-01 -4.22303E-02 -2.49844E-01 -1.97743E-01 1.63393E-01 1.12242E-03 -2.38843E-01 1.84835E-01 -1.02003E00 1.92289E-01 5.50223E-02 3.97605E-01 7.07899E-01 -6.04064E-01 -1.61959E-01 5.03308E-02 2.27241E-01 3.68219E-01 -1.87109E-01 -2.83797E-01 6.03145E-01 -1.55291E00 8.19637E-01 1.27546E-01 -2.57590E-01 2.64672E-01 -3.35926E-01 1.29577E-01 1.74637E-01 1.62075E-01 -2.59415E-01 -2.72792E-01 1.87945E-01 -FloatFrame 39 4.10601E-01 5.86548E-01 3.81673E-04 1.50071E-01 1.52211E-02 3.24975E-01 -3.81992E-02 -7.52776E-02 -2.40257E-01 -4.52512E-02 1.54387E-01 -3.50195E-02 -3.48677E-01 2.25694E-01 -2.02157E00 8.18615E-01 1.00608E-01 1.72765E-01 7.62569E-01 -6.90116E-01 -1.40910E-02 1.13969E-01 2.88980E-01 3.30271E-02 -1.58297E-01 -1.92005E-01 -7.20106E-01 -1.71764E00 8.75655E-01 -5.49390E-02 -2.84606E-01 -1.12568E-01 4.05104E-01 2.48990E-01 1.40068E-01 -9.72741E-02 -6.42704E-01 1.78876E-01 3.53302E-01 -FloatFrame 39 7.23974E-01 -5.22476E-02 2.26093E-01 2.81496E-01 2.39201E-02 5.43115E-01 -2.42622E-01 -1.17090E-01 -5.19309E-02 -3.87648E-02 1.81816E-01 -1.93482E-01 -3.16261E-01 -5.35272E-01 -2.73766E00 1.06794E00 8.32813E-05 1.13000E-01 5.95331E-01 -1.98960E-01 8.70317E-02 1.90399E-01 1.29966E-01 -2.74485E-01 -8.23335E-03 6.95053E-02 -1.97041E-01 -9.17394E-01 -1.66459E-01 -5.09242E-01 -9.98506E-02 -6.79651E-01 6.30601E-01 1.90402E-01 2.25364E-01 -1.68709E-01 -1.72581E-01 3.06326E-01 5.79846E-01 -FloatFrame 39 8.17528E-01 -1.20058E00 8.08916E-01 2.65164E-01 -1.06143E-01 7.50272E-01 -2.98416E-01 -6.78592E-02 -4.87683E-02 -5.84617E-02 4.04524E-02 -1.41234E-01 -2.72584E-01 2.86523E-02 -2.93896E00 6.52156E-01 -4.08634E-01 7.29147E-02 8.29186E-02 -5.95152E-02 1.76311E-01 3.39333E-01 1.20270E-01 -1.39554E-01 1.48029E-01 3.87840E-01 1.20416E-01 1.78301E-01 -4.70545E-01 -5.22316E-01 1.79690E-02 -7.73459E-01 3.32770E-01 1.86073E-01 -1.20928E-01 -3.30987E-02 4.83497E-02 2.73960E-01 2.23596E-01 -FloatFrame 39 2.14220E-02 -2.04628E00 1.05809E00 1.24285E-01 4.59909E-02 6.96487E-01 -4.85875E-02 4.48015E-02 -5.94451E-02 -6.77763E-02 -1.11092E-01 -7.11093E-03 -1.69338E-01 -4.14856E-01 -2.55936E00 5.97399E-01 -5.22233E-01 1.30969E-01 -1.78128E-01 1.33810E-01 2.73104E-01 6.94705E-02 9.68678E-02 -2.26135E-01 2.65727E-01 2.93101E-01 -2.77694E-01 1.40259E00 -7.96580E-01 -2.23169E-01 3.33911E-01 -4.09782E-01 2.32262E-01 5.45950E-02 -1.56482E-01 -7.14893E-02 2.88636E-02 1.43771E-01 -1.81418E-01 -FloatFrame 39 4.39253E-01 -2.35241E00 6.52538E-01 -2.58564E-01 8.81358E-02 4.07893E-01 -9.77144E-02 1.01033E-01 9.90759E-02 7.50192E-02 1.48327E-02 1.13009E-01 3.91632E-02 -2.49042E-01 -1.53637E00 -1.44424E-01 -6.31803E-01 4.06826E-01 -3.26863E-01 1.72747E-01 2.30906E-01 1.82851E-01 4.87811E-02 -1.10690E-01 2.91800E-01 2.06422E-01 9.18182E-01 1.81056E00 -1.06712E00 -1.37255E-01 -8.85139E-02 -3.48187E-01 -1.84870E-01 -1.00978E-01 1.34678E-01 3.87001E-02 2.55380E-01 -1.20696E-01 -2.17925E-02 -FloatFrame 39 3.09118E-01 -2.61161E00 8.23493E-01 -2.40737E-01 1.54889E-01 3.64987E-01 -1.08812E-01 1.56014E-01 1.75396E-02 5.81030E-02 -4.43185E-02 7.22442E-02 -2.31598E-02 5.03326E-01 -7.48806E-01 -4.69719E-01 -6.59487E-01 4.24547E-02 -5.26315E-01 -5.10600E-02 1.72127E-01 2.04148E-01 1.35568E-01 2.92451E-02 1.45030E-01 2.71309E-01 2.62345E-01 1.24014E00 6.38080E-02 4.70751E-01 -3.12009E-01 5.21767E-02 -5.91809E-02 -1.67069E-01 -1.34922E-01 -4.44122E-02 1.94008E-01 -3.88902E-01 -1.65095E-01 -FloatFrame 39 5.68486E-01 -2.73695E00 6.64492E-01 -3.66639E-01 3.00683E-01 4.23408E-01 -1.25669E-01 1.63047E-01 1.34083E-01 -9.68063E-03 -7.02380E-02 1.50566E-01 -6.61617E-02 1.33034E-02 -2.96236E-01 -8.06163E-02 -1.61052E-01 9.48171E-02 -2.74687E-01 1.13566E-01 6.38374E-02 4.79298E-02 4.36888E-03 8.33178E-02 -9.71020E-02 4.13274E-02 -4.08939E-01 8.20951E-01 1.92951E-01 5.94454E-01 1.70665E-01 4.89578E-01 1.21479E-01 -2.16871E-01 -1.29371E-01 -1.36876E-01 1.09159E-01 -1.39463E-01 -1.80847E-01 -FloatFrame 39 5.24748E-01 -2.79509E00 5.88369E-01 -5.35202E-01 8.84456E-02 1.70172E-01 -9.96475E-02 2.16928E-01 1.44703E-01 6.77917E-02 -8.18466E-02 1.37920E-01 1.01971E-01 9.43868E-02 7.21449E-02 -2.76768E-01 -6.50331E-02 2.13120E-01 -3.67372E-02 7.04188E-02 -4.47447E-02 7.47768E-02 -1.30812E-03 1.38404E-01 5.56795E-03 9.04620E-02 -3.70457E-01 2.85439E-01 -1.07163E-01 1.75597E-01 -6.32331E-02 3.36432E-02 9.91225E-02 9.63387E-02 9.04779E-02 1.03295E-01 1.12181E-01 -8.44175E-04 -3.91530E-03 -FloatFrame 39 4.52557E-01 -2.64865E00 5.71921E-01 -4.19616E-01 1.82953E-01 1.33206E-01 1.58512E-02 1.64871E-01 1.47006E-01 7.93880E-02 9.81504E-02 1.59075E-02 8.04905E-02 -3.57154E-01 -1.07970E-02 -1.87780E-01 1.45449E-02 3.15840E-02 -2.41044E-01 2.12688E-01 1.60176E-01 1.38408E-01 1.07663E-01 1.95499E-01 -9.79462E-02 3.74121E-02 -3.73508E-01 2.33212E-01 6.38803E-02 2.85217E-01 2.80242E-02 -5.22702E-03 1.76443E-02 -5.56058E-02 -4.22113E-02 2.33138E-02 7.23968E-02 -1.44387E-01 -1.91654E-01 -FloatFrame 39 4.03505E-01 -2.53947E00 5.46725E-01 -3.05770E-01 3.68008E-01 3.28250E-01 -3.83930E-02 1.11269E-01 9.23164E-02 5.67948E-02 9.40851E-02 7.78121E-02 6.73022E-02 -2.79121E-01 3.05357E-01 -2.12887E-01 2.20184E-01 2.41144E-01 -4.19642E-02 8.80631E-02 -1.00350E-01 3.25655E-02 2.20057E-02 2.10800E-01 -1.38819E-01 -1.01192E-01 8.95146E-01 6.20474E-01 1.35259E-01 1.81878E-01 -1.17646E-01 3.44979E-02 -4.43777E-01 -2.58634E-01 -6.28335E-02 -4.48338E-02 -2.04651E-01 -2.26326E-02 -1.63632E-01 -FloatFrame 39 2.11332E-01 -2.74775E00 4.76712E-01 -3.52095E-01 3.32267E-01 1.82365E-01 8.70191E-02 3.23223E-01 2.72491E-01 9.79828E-02 1.25261E-01 5.26201E-02 -2.87496E-02 5.37993E-01 6.09676E-01 -5.25207E-02 1.96423E-01 -8.60615E-02 -2.06546E-01 -2.31089E-01 -9.84578E-02 7.55742E-02 6.28296E-02 -9.15161E-03 -1.20579E-01 -1.26220E-01 5.02659E-01 5.04594E-01 5.44127E-02 2.77743E-02 -5.15895E-01 -2.47144E-01 -2.58234E-01 2.00726E-01 1.13920E-01 3.92007E-02 -2.33092E-01 1.02587E-01 6.83081E-02 -FloatFrame 39 2.45627E-01 -2.48973E00 3.75482E-01 -3.15019E-01 3.29589E-01 1.28207E-01 -1.15844E-02 1.16578E-01 1.77268E-01 8.97974E-02 1.28954E-01 -8.99889E-04 7.78886E-04 2.23537E-01 8.09951E-01 -1.58475E-01 2.47958E-01 -2.74751E-01 -2.89108E-01 -1.70171E-01 1.00376E-01 1.46486E-01 6.12064E-02 -2.22920E-02 -3.62325E-02 -3.28840E-02 8.52597E-01 1.45173E00 6.30533E-02 3.20292E-01 -5.69932E-02 3.45618E-01 -2.91354E-01 -3.10786E-01 -4.01075E-01 -1.39428E-01 -1.85993E-01 -1.07595E-01 2.39083E-01 -FloatFrame 39 9.90549E-01 -2.03897E00 5.19401E-01 -2.23193E-01 9.68914E-02 -7.33393E-02 -2.15237E-01 6.64132E-02 2.22580E-01 1.42218E-01 8.89988E-02 -1.04671E-01 -4.57293E-02 1.39059E00 2.06141E00 1.05326E-02 5.16715E-01 -1.43055E-01 1.39072E-01 -5.22442E-01 -4.09244E-01 -3.25501E-01 -7.65985E-02 -1.95145E-01 -2.28174E-01 1.12863E-01 1.20338E00 1.62863E00 1.13451E-01 4.40672E-01 -2.91198E-03 3.17841E-01 -2.40182E-01 -4.46605E-01 -3.48015E-01 -6.93446E-03 -1.71283E-01 -2.99394E-01 5.47862E-02 -FloatFrame 39 6.27043E-01 -1.72951E00 3.88250E-01 -5.78115E-02 9.32569E-02 3.91414E-02 -2.08564E-01 2.11645E-01 2.38802E-01 1.18001E-01 7.17931E-02 4.15797E-02 3.44181E-02 1.42691E00 2.43858E00 -4.50239E-02 6.88630E-01 -2.77663E-01 2.87333E-02 -4.10353E-01 -3.46229E-01 -2.01529E-01 5.42720E-02 -1.93575E-01 -3.35626E-01 2.19021E-02 -2.02320E-01 2.27533E-01 -6.30813E-01 2.32087E-01 2.60327E-01 -3.76250E-01 5.48975E-01 7.70442E-02 2.28505E-02 7.53239E-02 -2.08282E-02 2.26515E-01 -1.70008E-01 -FloatFrame 39 1.60192E00 -6.86339E-01 4.87245E-01 1.64621E-01 1.89212E-01 3.21437E-01 -4.35423E-01 -8.60209E-02 -5.30098E-02 2.13843E-02 -6.98834E-02 -1.75554E-01 8.41133E-02 1.18827E00 2.28894E00 -6.20281E-01 7.48802E-01 1.17273E-01 -2.37178E-01 2.65326E-02 -3.32200E-01 -3.02650E-01 -1.27460E-03 -2.15973E-01 -1.65866E-03 -5.71455E-02 4.16364E-01 -4.41779E-01 -6.03265E-01 -3.88027E-02 5.33323E-01 -5.42566E-01 3.94613E-01 -1.64512E-01 -6.72271E-02 1.12780E-02 4.76244E-03 1.30798E-01 -1.08096E-01 -FloatFrame 39 1.67254E00 -5.11539E-02 3.30458E-01 3.73612E-01 5.19260E-02 1.56941E-01 -4.21937E-01 -2.29651E-01 -2.42609E-02 1.44069E-01 -6.46213E-02 -3.36526E-01 2.26810E-02 1.84328E00 1.99680E00 -6.48289E-01 6.49828E-01 2.55659E-01 -5.13832E-01 -1.57399E-02 -5.10741E-01 -2.68756E-01 6.55500E-02 -1.88813E-01 -2.04828E-01 -8.61935E-02 -6.23282E-01 -1.06202E00 -2.23161E-01 -3.42955E-01 -6.94745E-02 -5.23505E-01 2.82421E-01 9.42573E-02 3.04778E-01 1.57709E-01 2.11392E-01 -3.30297E-02 -6.63868E-02 -FloatFrame 39 2.17882E00 2.49969E-01 -1.00880E-01 5.25610E-01 2.14164E-01 -3.10517E-01 -1.88705E-01 -2.65786E-01 -8.00703E-02 1.40943E-01 -1.26974E-01 -1.06330E-01 -1.02875E-01 5.64986E-01 1.22693E00 -8.43441E-01 4.05847E-01 4.77982E-02 -7.60683E-01 3.08954E-01 -2.37942E-01 2.12758E-03 1.56435E-01 -4.58092E-03 -3.46883E-02 -1.23532E-01 -1.57877E00 -1.21804E00 -1.02611E-01 -5.93184E-01 1.54034E-02 -6.43709E-02 3.63622E-01 3.62593E-01 2.73984E-01 4.28548E-02 3.32471E-02 3.61493E-01 7.39406E-02 -FloatFrame 39 2.47032E00 2.67285E-01 -2.60039E-01 5.92016E-01 3.48916E-01 -4.74691E-01 -2.24304E-01 -2.99096E-01 -2.99542E-02 1.83551E-01 -1.17020E-01 -1.63249E-01 -5.17753E-02 2.64511E-01 7.78758E-01 -7.50899E-01 5.66437E-02 2.71063E-01 -5.78203E-01 3.47882E-01 -1.48148E-01 5.22747E-03 1.08405E-01 -1.55566E-01 1.56664E-01 -1.22529E-02 -1.12744E00 -5.16157E-01 4.83162E-01 -7.42977E-01 1.69500E-01 8.15657E-01 -3.10967E-01 2.55460E-01 -3.24646E-02 -9.49535E-02 -4.02440E-02 3.22126E-02 1.92405E-01 -FloatFrame 39 2.16691E00 5.40586E-01 -3.56197E-01 5.70468E-01 2.37011E-01 -4.39246E-01 -1.26469E-01 -3.23963E-01 -5.08822E-02 1.77819E-01 -7.44643E-02 -2.10242E-01 -3.94190E-02 -5.62455E-01 7.10768E-01 -3.60279E-01 -3.37130E-01 2.17298E-01 5.49742E-02 -2.01323E-03 1.75177E-02 -3.03371E-02 6.14813E-02 -4.48249E-02 -2.47577E-03 6.88728E-02 -1.32708E00 1.45977E-01 4.39863E-01 -6.61367E-01 -1.14454E-01 9.76489E-01 -4.22002E-01 1.55545E-01 -5.08586E-02 -1.08152E-01 1.59828E-01 -1.01414E-01 1.51515E-02 -FloatFrame 39 1.93705E00 7.27604E-01 -4.20441E-01 4.30256E-01 3.22989E-01 -4.21263E-01 -7.40551E-02 -3.77799E-01 -1.90334E-02 2.52474E-01 -2.20187E-01 -1.79862E-01 1.04281E-02 -1.06257E00 9.24735E-01 -3.11036E-01 -6.04723E-01 1.56609E-01 3.98286E-01 -7.41203E-02 7.39670E-03 -4.56311E-02 2.52749E-04 4.26275E-03 5.52505E-02 2.89860E-03 -2.91463E-01 2.17472E-02 1.39865E-01 -4.52660E-01 1.20903E-01 3.50392E-01 -1.57262E-01 8.07525E-02 -1.20820E-01 -3.34520E-02 8.43347E-02 1.47141E-01 -2.05270E-01 -FloatFrame 39 1.61636E00 9.60737E-01 -4.61159E-01 1.88479E-01 4.31462E-01 -2.55543E-01 -1.90718E-01 -2.48269E-01 -1.10407E-01 2.02424E-01 -1.71799E-01 -1.08806E-01 -3.40020E-02 -8.53918E-01 7.32515E-01 -2.20415E-01 -7.89790E-01 3.38201E-01 4.05366E-01 -1.59275E-01 9.82702E-02 -1.51157E-01 2.80293E-02 3.95099E-02 1.44665E-01 -1.36397E-01 3.85650E-01 -2.62310E-01 4.52346E-02 -1.73735E-01 1.89531E-01 1.20467E-02 -1.85799E-01 2.06050E-01 -1.35680E-01 -1.49455E-01 3.18811E-01 -2.40530E-03 -1.59650E-01 -FloatFrame 39 1.40775E00 1.19202E00 -5.71075E-01 -1.27069E-02 5.05525E-01 -7.64051E-02 -2.98424E-01 -2.91699E-01 -7.55853E-02 1.83804E-01 -1.12757E-01 -1.07998E-01 -4.88767E-02 -6.76920E-01 6.62425E-01 -2.65801E-01 -7.78458E-01 3.46140E-01 4.10333E-01 -2.59920E-01 2.13446E-01 -1.81311E-01 -1.49202E-01 3.23074E-01 5.28452E-02 -1.56751E-01 5.15389E-01 -2.65584E-01 -5.89247E-02 2.64903E-01 -1.91133E-01 -7.98510E-02 3.35623E-02 -2.65001E-02 5.83106E-02 -1.52422E-01 2.43716E-01 -1.51146E-01 1.21717E-01 -FloatFrame 39 1.31299E00 1.27310E00 -5.76612E-01 -2.19322E-01 5.75212E-01 -3.38796E-02 -2.85745E-01 -2.25693E-01 -2.02039E-01 2.05848E-01 -3.49544E-02 -6.55771E-02 -1.75816E-01 -3.38529E-01 4.66931E-01 -2.79339E-01 -5.24887E-01 1.47068E-01 3.25515E-01 -1.25713E-01 7.17701E-02 -9.28466E-02 -1.24393E-01 2.83226E-01 -6.48097E-03 -1.46799E-02 6.46854E-01 -3.80964E-01 3.01514E-02 4.73693E-01 -3.01005E-01 -3.15534E-01 2.77663E-01 -4.89385E-02 6.44813E-02 -4.11471E-02 -1.11319E-01 2.51014E-02 1.43858E-01 -FloatFrame 39 1.26013E00 1.39003E00 -6.86243E-01 -3.48203E-01 6.69129E-01 -1.09301E-02 -3.33975E-01 -1.64353E-01 -2.00344E-01 1.03272E-01 1.02887E-01 -1.27017E-01 -1.46323E-01 -3.00656E-02 2.81461E-01 -2.35650E-01 -3.04765E-01 4.51350E-02 9.47988E-02 1.77438E-02 1.64508E-01 -1.16830E-01 -1.90349E-01 2.11755E-01 7.79466E-02 -1.28927E-02 4.46457E-01 -2.58916E-01 1.06303E-01 3.84327E-01 -1.90257E-01 -3.83949E-01 1.46870E-01 1.64147E-01 7.45843E-02 -1.71571E-01 -1.45325E-01 6.63612E-02 2.29383E-01 -FloatFrame 39 1.27783E00 1.42767E00 -7.40499E-01 -3.36408E-01 5.78530E-01 6.99722E-02 -3.16431E-01 -1.76499E-01 -2.03254E-01 7.80316E-02 1.11427E-01 -1.15287E-01 -4.86819E-02 1.07928E-01 2.08015E-01 -1.73037E-01 -1.40560E-01 -4.31895E-02 -5.84335E-02 2.11567E-02 2.35917E-01 -1.82623E-02 -2.95964E-01 1.37900E-01 5.98802E-02 2.14703E-01 8.43534E-02 -1.21022E-01 2.28264E-01 3.05125E-01 -3.42511E-01 -1.60612E-01 1.17225E-01 1.08330E-02 1.04969E-01 -3.85009E-02 -2.31576E-01 9.26355E-02 2.17648E-01 -FloatFrame 39 1.37768E00 1.47348E00 -8.06725E-01 -3.17472E-01 5.50660E-01 1.83937E-02 -2.80680E-01 -1.27192E-01 -1.92415E-01 -6.54545E-03 9.89983E-02 -3.00518E-02 -6.17694E-02 5.42878E-02 1.60439E-01 -7.38615E-03 3.60569E-04 -2.97376E-01 -6.58135E-02 1.34969E-01 1.75341E-01 -1.18601E-02 -2.28850E-01 -1.98211E-02 1.70582E-01 2.04756E-01 -8.30462E-02 -6.56168E-02 2.01024E-01 2.06386E-01 -2.65919E-01 -1.63522E-01 1.28801E-01 9.65451E-02 -7.96890E-02 8.87146E-02 -1.88985E-01 1.16713E-01 -2.12907E-02 -FloatFrame 39 1.42092E00 1.48112E00 -7.49648E-01 -3.59883E-01 5.32022E-01 -9.23131E-02 -2.64588E-01 1.02244E-02 -2.20302E-01 -9.01153E-02 1.02946E-01 -5.69681E-03 3.88873E-02 2.48814E-02 1.42398E-01 2.79879E-02 6.58253E-02 -3.09109E-01 -2.21955E-01 1.49958E-01 3.32463E-01 -9.79512E-02 -2.07249E-01 -5.10849E-02 1.76593E-01 1.93412E-01 -8.57973E-02 -9.81861E-02 1.23213E-01 1.11954E-01 -1.01186E-01 -1.91000E-01 1.40535E-01 7.43713E-02 -4.42692E-02 3.23490E-02 -4.00135E-02 -1.81054E-02 -1.93660E-02 -FloatFrame 39 1.31442E00 1.55047E00 -6.93629E-01 -3.47842E-01 3.71753E-01 -7.67436E-02 -1.99006E-01 1.09879E-02 -2.12204E-01 -1.25578E-01 8.30659E-02 4.35652E-02 5.84328E-02 -3.15095E-02 6.22531E-02 1.15827E-01 1.12315E-01 -3.98562E-01 -2.56813E-01 2.75504E-01 2.49712E-01 -5.61293E-02 -1.96501E-01 -5.98346E-02 1.52477E-01 1.85390E-01 -7.14853E-02 -1.31730E-01 1.00719E-01 1.59797E-01 -2.36553E-01 4.76344E-02 2.22723E-01 -2.16976E-01 4.40974E-02 8.22450E-02 -5.88323E-03 -1.28680E-01 -2.65014E-02 -FloatFrame 39 1.30271E00 1.57007E00 -7.12511E-01 -2.70583E-01 2.69421E-01 -1.51983E-01 -1.66473E-01 1.55964E-01 -3.01205E-01 -1.29218E-01 6.03419E-02 6.13062E-02 1.44731E-01 -4.66039E-02 1.06680E-02 1.28707E-01 2.25623E-01 -5.45662E-01 -1.74321E-01 3.72681E-01 1.15487E-01 -5.38539E-02 -1.25004E-01 -5.69681E-02 4.79130E-02 1.66911E-01 1.26085E-01 -1.82908E-01 -1.39491E-02 1.96809E-01 -1.05142E-01 2.56609E-02 9.00715E-02 -1.22330E-01 -2.36930E-03 1.31349E-01 -4.62670E-02 -1.30178E-01 -6.68918E-02 -FloatFrame 39 1.34618E00 1.53573E00 -6.90897E-01 -2.05157E-01 1.52098E-01 -2.38420E-01 -5.17636E-03 1.22521E-01 -2.48544E-01 -2.03047E-01 3.91637E-02 1.22425E-01 1.23620E-01 9.45760E-02 -1.20655E-01 1.01878E-01 3.09124E-01 -5.03705E-01 -2.31152E-01 3.65575E-01 1.27382E-01 -5.84986E-02 -6.51528E-02 -1.06102E-01 2.22990E-02 1.18498E-01 3.51421E-01 -3.59735E-01 1.19491E-01 3.99264E-02 3.43150E-02 5.56022E-02 -2.16582E-02 -1.68127E-01 1.77604E-01 -8.88184E-03 1.39513E-02 -9.05736E-02 -2.12564E-01 -FloatFrame 39 1.37431E00 1.49178E00 -6.20942E-01 -1.34260E-01 -1.36400E-02 -2.66634E-01 1.08093E-01 1.25711E-01 -2.74155E-01 -2.15119E-01 4.59775E-02 4.22162E-02 2.05798E-01 3.04817E-01 -3.49067E-01 2.48198E-01 2.65549E-01 -5.11347E-01 -1.18719E-01 3.51022E-01 -5.26404E-02 1.23750E-01 -1.33886E-01 -4.30168E-02 -4.26606E-02 -4.56527E-02 1.82452E-01 -2.70035E-01 2.11936E-01 -1.00362E-01 5.98915E-02 2.01520E-01 -1.67320E-01 -8.35709E-02 8.91890E-02 4.76722E-02 2.54843E-02 -1.55131E-01 -1.43946E-01 -FloatFrame 39 1.40899E00 1.42981E00 -5.91751E-01 -3.87181E-02 -1.31952E-01 -3.07896E-01 1.66570E-01 1.38370E-01 -2.70703E-01 -1.90731E-01 -2.30357E-02 6.58641E-02 1.76931E-01 2.77028E-01 -3.90690E-01 3.13814E-01 2.08762E-01 -4.43813E-01 -2.96320E-02 1.98256E-01 4.38109E-02 3.06904E-02 -1.74805E-02 -8.06173E-02 -1.32832E-01 -2.54485E-02 -1.03856E-01 -5.33721E-02 5.72966E-02 -4.58673E-02 9.59715E-02 2.03052E-01 -2.52533E-01 9.14555E-02 -2.95079E-02 8.38336E-02 -4.23992E-02 -3.28168E-02 -1.07773E-01 -FloatFrame 39 1.60753E00 1.22100E00 -4.64313E-01 -5.03376E-03 -2.41926E-01 -2.70701E-01 1.84549E-01 1.03323E-01 -1.77455E-01 -2.63104E-01 1.73250E-02 1.86456E-02 9.90778E-02 2.00960E-01 -4.02439E-01 3.05494E-01 2.19682E-01 -4.15376E-01 8.43337E-02 9.84895E-02 3.88150E-02 9.42421E-02 -5.00524E-02 -8.54160E-02 -7.54774E-02 -1.53426E-01 -4.19748E-01 1.67556E-01 -3.51383E-02 -6.86111E-02 1.69044E-01 1.57463E-01 -1.19510E-01 -2.87503E-02 1.44530E-02 5.65356E-03 1.02550E-02 5.26041E-02 -1.86846E-01 -FloatFrame 39 1.62320E00 1.14504E00 -3.77083E-01 3.60484E-03 -2.91715E-01 -2.68052E-01 1.93079E-01 1.66331E-01 -2.17854E-01 -2.20527E-01 -4.14536E-02 -1.04076E-02 9.81717E-02 -1.42719E-01 -2.23134E-01 2.78676E-01 1.40151E-01 -2.74769E-01 1.27831E-01 7.87458E-02 1.50606E-02 4.51434E-02 -1.18270E-02 -7.03623E-02 -8.02283E-02 -2.12295E-01 -7.45789E-01 3.57684E-01 -1.06901E-01 -6.37807E-02 2.57467E-01 3.83750E-02 -2.24471E-02 -3.94055E-02 -1.26658E-01 1.47471E-01 -6.00683E-02 2.72200E-02 7.77422E-03 -FloatFrame 39 1.57527E00 1.08935E00 -3.15447E-01 8.54215E-02 -4.29016E-01 -1.82300E-01 2.06582E-01 1.64526E-01 -1.79913E-01 -2.65172E-01 -3.94385E-02 -3.32612E-02 5.23725E-02 -5.44828E-01 -4.47551E-02 1.98593E-01 1.55901E-01 -1.57909E-01 1.22709E-01 7.60424E-02 -5.90491E-04 -3.24160E-02 9.74188E-02 -1.45484E-01 -4.82574E-02 -1.45652E-01 -5.48718E-01 1.61489E-01 -9.71244E-02 7.30523E-02 1.16666E-01 6.99316E-02 5.97245E-03 -1.42354E-01 4.59806E-02 8.33694E-04 3.27278E-02 -6.62800E-03 1.06975E-01 -FloatFrame 39 1.26627E00 1.20668E00 -3.13075E-01 1.01432E-01 -4.06721E-01 -1.80065E-01 2.45315E-01 1.53430E-01 -2.25559E-01 -2.02558E-01 -9.33979E-02 -1.43642E-02 -3.53641E-02 -6.91437E-01 -6.16455E-02 1.81551E-01 2.13203E-01 -1.58103E-01 1.97762E-01 8.47183E-02 -1.27293E-01 9.11240E-02 -1.09933E-02 -3.76344E-02 -8.68563E-02 -1.05319E-01 -2.56276E-01 2.25533E-02 -6.01449E-02 -1.60514E-02 1.70559E-01 -4.91661E-03 5.24633E-02 -1.23997E-01 2.84373E-02 -5.05537E-02 7.47348E-02 1.42198E-02 6.56852E-02 -FloatFrame 39 1.06270E00 1.17624E00 -2.65720E-01 1.50867E-01 -3.99835E-01 -1.47993E-01 2.60592E-01 1.02733E-01 -2.09871E-01 -1.65685E-01 -1.28159E-01 -2.96118E-02 -4.65737E-02 -8.01104E-01 -2.22018E-02 1.38448E-01 1.39850E-01 1.26501E-02 1.17792E-01 1.28506E-01 -1.24588E-01 -3.97870E-03 4.68651E-02 -7.07495E-02 -3.40376E-02 -7.99664E-02 6.39240E-02 -2.98909E-02 -1.54488E-01 -1.26897E-02 1.97281E-01 -1.47405E-01 8.79111E-02 -2.91010E-02 -7.49307E-02 -3.63865E-02 8.03053E-02 4.18623E-02 1.05586E-01 -FloatFrame 39 9.31766E-01 1.08340E00 -1.95532E-01 2.16808E-01 -4.49818E-01 -7.02893E-02 2.77798E-01 3.90380E-02 -1.26730E-01 -2.31521E-01 -7.90880E-02 -9.72639E-02 -7.14740E-03 -6.27513E-01 -9.15363E-02 2.70629E-02 2.00513E-01 3.91783E-02 5.03572E-02 1.72629E-01 -1.56394E-01 1.61933E-02 -4.73797E-02 4.26709E-02 -4.49941E-02 2.66948E-04 5.06256E-01 -1.46184E-01 -2.08270E-01 -4.36243E-02 1.27964E-01 2.58509E-02 -5.99739E-02 -8.28525E-03 -7.50587E-02 -1.47193E-01 2.49102E-01 1.08186E-01 7.65394E-02 -FloatFrame 39 7.74169E-01 1.06714E00 -1.76999E-01 2.25271E-01 -4.16366E-01 -6.45079E-02 3.35088E-01 3.99387E-02 -1.83892E-01 -2.18307E-01 -1.10188E-01 -6.72988E-02 -2.75939E-02 -2.94848E-01 -1.68386E-01 -6.98219E-02 9.62253E-02 1.40614E-01 1.43643E-01 6.85318E-02 -1.32873E-01 -7.90374E-02 -1.00328E-01 1.78352E-01 7.41482E-02 -3.42697E-03 8.19004E-01 -2.43832E-01 -2.11560E-01 -1.48563E-01 2.44292E-01 1.35355E-01 -2.15447E-01 -4.44311E-02 -1.83258E-01 9.34830E-02 1.74835E-01 2.33038E-01 -1.70638E-01 -FloatFrame 39 6.38761E-01 1.11514E00 -2.86012E-01 3.01946E-01 -3.67542E-01 -1.29708E-01 4.17945E-01 -2.96418E-03 -2.09366E-01 -2.49938E-01 -5.07270E-02 -5.93583E-02 -3.50971E-02 1.91491E-01 -3.35369E-01 -1.84497E-01 5.19503E-02 2.83470E-01 1.85713E-01 -4.28174E-02 -2.00825E-01 -1.67064E-01 4.61033E-02 2.17506E-01 1.88044E-01 -1.70371E-01 7.44870E-01 -3.22549E-01 -1.70070E-01 1.35739E-02 2.24356E-01 1.16842E-01 -2.98262E-01 -2.07795E-01 8.39257E-02 1.89086E-01 1.52490E-01 -6.97110E-02 -1.98839E-01 -FloatFrame 39 7.67854E-01 1.00786E00 -3.35542E-01 2.47092E-01 -2.59221E-01 -4.34971E-03 3.29123E-01 -3.01399E-02 -2.88909E-01 -2.66013E-01 5.01928E-02 4.45364E-02 -5.00007E-02 4.50021E-01 -4.90935E-01 -2.39892E-01 1.09799E-01 3.64970E-01 2.60485E-01 -2.29730E-01 -3.40668E-01 4.88839E-03 8.87581E-02 3.30842E-01 4.43721E-03 -2.02266E-01 8.35827E-01 -1.24607E00 7.45279E-01 -2.47548E-01 8.06960E-02 4.16215E-01 -5.97630E-01 6.03336E-02 1.10036E-01 1.57955E-01 7.95101E-02 -4.13127E-01 5.63162E-03 -FloatFrame 39 1.12326E00 7.48030E-01 -3.80029E-01 2.68758E-01 -1.66347E-01 1.15423E-01 2.34980E-01 -1.61787E-01 -2.93794E-01 -1.85417E-01 1.38418E-01 9.07805E-02 -1.77518E-01 1.02732E00 -1.58144E00 5.60782E-01 -1.95598E-01 3.64166E-01 6.01928E-01 -6.40447E-01 -1.40492E-01 -5.70284E-02 2.04058E-01 2.97016E-01 -2.25083E-01 -1.64739E-01 -2.55047E-01 -1.88593E00 1.60993E00 -4.63350E-01 -5.51225E-02 2.29728E-01 -2.10402E-01 3.73247E-01 3.39469E-02 1.77067E-01 -2.26657E-01 -1.64109E-01 1.36300E-02 -FloatFrame 39 1.22419E00 5.76209E-01 -4.16891E-01 3.35070E-01 -5.13959E-02 1.95977E-01 1.05358E-01 -3.00729E-01 -1.79004E-01 -1.29549E-01 2.20654E-01 -6.28616E-02 -2.29860E-01 1.94974E-01 -2.37686E00 1.37004E00 -3.53551E-01 3.09847E-01 4.90213E-01 -4.40132E-01 3.25787E-02 3.88353E-02 2.65825E-01 1.04185E-01 -1.59672E-01 -1.88636E-01 -2.43277E00 -1.08209E00 9.66804E-01 -2.39607E-01 5.83638E-02 -1.50593E-01 3.06411E-01 3.63520E-01 3.81873E-01 -1.99561E-02 -4.35435E-01 2.69821E-01 2.47287E-01 -FloatFrame 39 1.66608E00 -4.66300E-01 2.74771E-01 1.06348E-01 -3.37601E-03 4.72220E-01 -2.22502E-01 -1.43456E-01 -2.66395E-01 -4.58797E-02 2.46289E-01 -2.84441E-01 -1.99836E-01 -1.40545E00 -2.66353E00 1.52759E00 -4.35204E-01 4.22530E-01 4.51335E-01 -3.34036E-01 2.23029E-01 3.24845E-01 1.84102E-01 -1.38419E-01 4.47379E-02 8.25480E-02 -1.73697E00 -5.56183E-01 3.54075E-02 -5.16462E-01 -1.63078E-01 -2.91006E-01 1.75151E-01 5.61779E-01 2.37554E-01 -1.52254E-01 -4.47849E-01 3.85936E-01 2.91724E-01 -FloatFrame 39 9.62828E-01 -1.36900E00 1.03449E00 -1.06458E-01 5.06261E-02 4.85864E-01 -1.11009E-01 2.43871E-03 -2.50073E-01 -1.87777E-04 1.54378E-01 -1.15135E-01 -2.38637E-01 -1.54199E00 -2.93304E00 1.40544E00 -8.70013E-01 1.46769E-01 1.99207E-01 -2.64981E-01 5.94358E-01 2.76389E-01 1.13571E-01 -3.43664E-01 2.26265E-01 1.03088E-01 -2.30073E-01 4.43819E-01 -9.00456E-01 -1.21387E-01 -3.35285E-01 -6.58804E-01 2.41756E-01 1.30525E-01 6.65308E-02 -6.23721E-02 -1.64224E-01 3.23302E-01 1.85980E-02 -FloatFrame 39 -2.82193E-01 -1.91550E00 1.14756E00 -1.66446E-01 2.56183E-01 5.66759E-01 -9.90558E-02 6.12411E-02 3.10510E-02 -1.31518E-03 -1.76581E-06 1.35518E-01 -9.49702E-02 -1.63552E00 -2.21971E00 6.27131E-01 -5.56591E-01 8.72449E-02 -2.07468E-01 -9.22803E-02 3.53553E-01 3.91376E-01 1.21730E-01 -3.02643E-01 3.68039E-01 1.01146E-01 5.35985E-01 1.54425E00 -1.62990E00 6.06899E-01 -6.25514E-02 -5.84665E-01 1.08804E-01 -4.25118E-01 1.32055E-01 4.78638E-03 2.74360E-01 4.79942E-02 1.31179E-01 -FloatFrame 39 -3.17803E-01 -2.35683E00 9.88553E-01 -5.34942E-01 9.53733E-02 3.95185E-01 -1.59623E-01 2.93628E-01 9.73855E-02 -1.59780E-02 -1.23011E-01 1.63403E-01 -1.26772E-01 -1.00601E00 -1.38880E00 -2.24456E-01 -2.63113E-01 8.42178E-02 -3.85457E-01 -1.56177E-01 1.69240E-01 4.08444E-01 1.18357E-01 -6.93048E-02 2.74259E-01 2.34267E-01 2.21137E00 1.37694E00 -1.03553E00 3.71438E-01 -3.47400E-01 -2.02717E-01 7.37553E-02 -1.95060E-01 -3.27979E-01 -1.90362E-01 4.72781E-01 -2.51951E-01 -5.56817E-02 -FloatFrame 39 3.05570E-02 -2.68601E00 9.01901E-01 -4.50243E-01 8.38689E-02 2.64751E-01 -3.14783E-01 2.10097E-01 1.24981E-01 7.58503E-02 -5.63545E-02 8.35982E-02 -9.86903E-02 5.75845E-01 -8.42771E-01 -4.08395E-01 -1.85153E-01 -2.60155E-01 -4.10186E-01 -1.85250E-02 1.58493E-01 6.33966E-02 -6.86324E-02 1.70138E-01 1.16088E-01 4.54642E-02 1.78133E00 1.17732E00 1.39727E-02 4.66361E-01 -4.77862E-02 1.87982E-01 2.03031E-01 -3.37705E-01 -5.58986E-01 -1.77363E-01 3.09757E-01 -3.44562E-01 -9.63024E-02 -FloatFrame 39 -4.31802E-02 -2.75780E00 8.10039E-01 -3.69572E-01 1.34844E-01 1.00406E-01 -2.67185E-01 1.71678E-01 1.58371E-01 1.18169E-01 8.50728E-02 1.59123E-01 -4.36991E-03 7.75320E-01 -2.11482E-01 -2.10483E-01 2.03248E-01 3.64316E-02 -1.97475E-01 4.68548E-02 -1.68465E-01 -1.50542E-01 -5.90060E-02 2.40452E-01 -7.03036E-02 1.37965E-01 -2.70204E-01 8.06698E-01 3.63954E-02 3.77698E-01 3.93678E-01 3.81659E-01 1.13860E-01 -1.80636E-01 -8.86607E-03 1.39041E-02 -3.60990E-02 -1.47373E-01 3.20786E-02 -FloatFrame 39 2.93652E-01 -2.75827E00 7.39163E-01 -3.51599E-01 -3.97188E-03 1.56573E-01 -1.17581E-01 2.19734E-01 9.44476E-02 -6.99476E-02 1.70136E-01 2.51606E-01 -4.95060E-02 3.05640E-01 -3.60722E-02 -3.72000E-01 1.92545E-01 1.33523E-01 -2.85264E-02 9.53350E-02 -2.21431E-02 5.45305E-02 -5.47283E-02 1.34039E-01 -3.12847E-02 7.75429E-02 -2.46451E-01 8.59925E-01 1.39619E-01 2.61230E-01 5.03236E-02 4.09709E-01 -6.74832E-02 1.64076E-01 1.17945E-02 -7.37150E-02 -3.00422E-01 -3.01981E-01 -2.21317E-01 -FloatFrame 39 4.57516E-01 -2.56832E00 7.78070E-01 -3.31694E-01 1.31805E-01 1.97710E-01 -1.12769E-01 1.25163E-01 -5.31563E-02 -7.49840E-02 1.17442E-01 9.30994E-02 1.11927E-02 5.28869E-01 6.48443E-01 -7.08636E-02 4.64478E-01 8.67552E-02 2.12234E-01 -2.06284E-02 -4.38874E-03 -1.38747E-01 -1.32721E-01 -5.99692E-02 -3.72285E-01 -8.33527E-02 6.43826E-01 1.88797E00 1.68638E-01 2.98431E-01 -3.44504E-02 2.17209E-01 -3.56154E-01 -1.45908E-01 -2.19898E-01 6.91059E-04 -1.66507E-01 -3.66347E-01 -2.31948E-01 -FloatFrame 39 3.36197E-01 -2.72208E00 5.29902E-01 -2.57698E-01 2.17392E-01 2.36225E-01 -2.19448E-01 1.87954E-01 1.79512E-01 2.11220E-02 7.76847E-02 5.23135E-02 -2.11475E-02 9.49466E-01 1.85189E00 -2.03361E-01 4.90976E-01 9.90731E-02 1.88683E-01 -2.60819E-01 -1.68052E-01 -1.65368E-01 -5.40372E-02 -3.24676E-02 -3.97631E-01 -1.54405E-01 1.34787E-01 1.75741E00 -4.39015E-01 9.03643E-02 -1.22952E-01 -2.56953E-01 -2.09164E-01 -2.42020E-01 1.66149E-01 1.47257E-01 4.32576E-02 6.87440E-02 -8.36016E-02 -FloatFrame 39 4.85689E-01 -2.10936E00 7.39175E-01 9.49063E-02 2.21599E-01 3.12641E-01 -2.87814E-01 1.67290E-01 1.96234E-02 -1.45517E-02 2.51036E-02 -2.13161E-01 -8.77226E-02 6.63656E-01 2.40585E00 -5.09879E-01 5.54842E-01 -3.61965E-02 -4.47191E-02 -2.29793E-01 -2.46409E-01 2.74019E-02 1.45360E-02 -1.67117E-02 -3.03541E-01 -1.66954E-01 6.49291E-02 1.05317E00 -2.01775E-01 1.00581E-01 -2.35430E-01 -5.34935E-01 3.48166E-01 -2.27003E-01 -1.72958E-01 1.56723E-01 -6.50701E-04 2.26420E-01 -7.72206E-02 -FloatFrame 39 1.24312E00 -9.06376E-01 5.35801E-01 1.39377E-01 9.51012E-02 3.45255E-01 -3.78399E-01 5.16827E-02 -7.09202E-02 -1.23985E-01 1.37669E-01 -1.46025E-01 -2.03911E-01 1.01440E00 2.90506E00 -4.05137E-01 5.91556E-01 -1.36357E-01 -3.46253E-01 8.73478E-02 -3.95055E-01 -3.38326E-01 1.02686E-01 -3.31183E-02 -1.71211E-01 -2.31626E-01 5.98887E-01 -5.55230E-02 -3.19413E-01 -2.66724E-01 -1.15111E-02 -4.93913E-01 3.84286E-01 -2.20541E-01 -1.05773E-01 1.57094E-01 -5.18717E-02 4.20791E-01 6.72633E-02 -FloatFrame 39 1.12117E00 -1.62468E-01 2.68191E-01 2.23148E-01 9.56084E-02 1.52991E-01 -3.42561E-01 -1.21246E-01 -2.57544E-02 -6.04480E-02 1.00730E-01 -2.10441E-01 -1.55762E-01 1.26254E00 2.35033E00 -8.29292E-01 2.88119E-01 -4.77076E-02 -5.38632E-01 1.54493E-01 -4.66950E-01 -7.83715E-02 1.71630E-01 -6.85834E-02 1.17251E-01 -9.96911E-02 -4.63620E-01 -1.59320E00 -4.71738E-01 -3.77712E-01 3.15605E-01 -2.64887E-01 1.01442E-01 3.22959E-02 3.66188E-01 2.67247E-01 -2.73798E-01 2.30677E-01 4.05693E-01 -FloatFrame 39 1.35059E00 1.82981E-01 1.24765E-01 3.33859E-01 8.10356E-02 -1.10028E-01 -1.32100E-01 -2.07101E-01 -1.58814E-01 1.23808E-01 4.45663E-02 -1.18898E-01 -2.52773E-01 5.50775E-01 1.31186E00 -8.76874E-01 2.13845E-01 1.79248E-01 -6.11139E-01 1.88790E-01 -3.62759E-01 2.78626E-02 3.69934E-01 -3.06916E-01 5.94658E-02 1.74067E-01 -7.85079E-01 -1.56351E00 1.40108E-01 -3.11302E-01 3.18364E-01 1.41178E-01 -2.72808E-02 2.47087E-01 9.03002E-02 1.34675E-01 -2.05767E-01 -3.15497E-02 3.17632E-01 -FloatFrame 39 1.74823E00 2.40968E-01 -9.01168E-02 3.83025E-01 1.73892E-01 -2.25991E-01 -1.33320E-01 -2.99660E-01 -5.87481E-02 1.57079E-01 -4.34798E-02 -9.59108E-02 -1.87414E-01 4.77464E-01 7.86811E-01 -6.89184E-01 -2.31837E-02 2.70657E-01 -3.97454E-01 1.27212E-01 -2.19863E-01 1.19287E-02 3.06305E-01 -2.74351E-01 8.57008E-02 2.17941E-01 -5.51648E-01 -6.16558E-01 3.30558E-01 -5.86629E-01 1.43623E-01 6.06515E-01 -3.40826E-01 2.94514E-01 8.82153E-02 -3.94127E-01 2.65432E-01 -4.38103E-02 6.08565E-02 -FloatFrame 39 1.79389E00 4.05488E-01 -3.41073E-01 3.53222E-01 2.74350E-01 -2.65884E-01 -1.89609E-01 -3.11076E-01 -4.30576E-02 2.45949E-01 -1.69248E-01 -8.65593E-02 -2.98444E-02 -8.72201E-04 6.95306E-01 -5.46317E-01 -3.72784E-01 3.22872E-01 -4.62443E-03 -1.52036E-01 -6.82450E-02 1.16078E-01 -2.41937E-02 -4.14847E-02 1.56555E-02 2.34923E-01 -1.19982E00 1.11386E-01 4.65529E-01 -7.25013E-01 -2.29264E-02 6.52747E-01 -2.70399E-01 2.13165E-01 -9.45505E-02 -3.43323E-01 3.91788E-01 -7.48939E-02 -9.45059E-02 -FloatFrame 39 1.59864E00 6.24344E-01 -4.20994E-01 1.99964E-01 3.66265E-01 -2.44463E-01 -2.15349E-01 -3.41109E-01 -1.38257E-02 2.45857E-01 -1.73621E-01 -1.24741E-01 6.21796E-02 -7.22353E-01 8.98198E-01 -2.23655E-01 -7.48197E-01 2.47730E-01 2.55293E-01 -1.43186E-01 -6.69775E-03 -8.26218E-02 -3.70180E-02 1.17438E-01 1.08069E-02 1.23435E-01 -6.67500E-01 1.11632E-01 4.40109E-01 -3.75202E-01 -1.70393E-01 3.25625E-01 4.12417E-02 1.37836E-01 -2.12863E-01 -2.02610E-01 3.10764E-01 1.07181E-01 -3.83930E-01 -FloatFrame 39 1.34972E00 8.78287E-01 -4.21551E-01 -3.89257E-02 4.03907E-01 -1.14652E-01 -2.84136E-01 -2.75346E-01 -4.27361E-02 9.96146E-02 3.08160E-03 -1.03242E-01 -1.78499E-02 -6.68373E-01 8.06938E-01 -1.06207E-01 -7.47986E-01 1.52479E-01 3.21000E-01 -1.10795E-01 6.95914E-02 -9.67853E-02 -2.26804E-01 2.69280E-01 1.22837E-01 -1.49007E-01 2.18426E-01 -2.13029E-01 1.40861E-01 1.10862E-01 -1.95899E-01 1.53779E-01 -1.75895E-02 1.73805E-01 -9.77700E-02 -1.98898E-01 1.53749E-01 1.10562E-01 -2.58342E-01 -FloatFrame 39 1.02588E00 1.13917E00 -3.13772E-01 -3.65172E-01 4.21622E-01 2.93025E-02 -2.76507E-01 -3.06358E-01 -1.41370E-01 1.20061E-01 7.39580E-02 -8.51038E-02 -6.39784E-02 -5.03927E-01 6.85169E-01 -8.27940E-02 -6.37335E-01 5.18317E-02 4.09073E-01 -1.60776E-01 1.67107E-01 -1.80392E-01 -2.35916E-01 2.71187E-01 1.21369E-01 -1.34907E-01 2.48640E-01 -3.10975E-01 9.90893E-02 3.17608E-01 -2.40699E-01 2.87662E-02 9.82470E-02 -7.66468E-02 1.42937E-02 1.52179E-01 -2.90762E-01 -4.23963E-03 2.04665E-01 -FloatFrame 39 1.12552E00 1.21243E00 -4.47280E-01 -3.94764E-01 4.26829E-01 5.51160E-02 -3.00404E-01 -2.41485E-01 -1.39843E-01 1.91450E-02 1.00032E-01 3.62774E-02 -1.78851E-01 -4.19733E-01 4.95963E-01 -7.11791E-03 -4.30379E-01 -8.82203E-02 3.49766E-01 -1.25476E-02 -7.05545E-03 -8.24916E-02 -7.46245E-02 -2.14826E-02 1.18597E-01 5.56585E-02 3.52323E-01 -3.32179E-01 -1.05430E-01 5.25342E-01 -1.56817E-01 -1.99653E-01 8.61124E-02 -2.48580E-03 1.37174E-01 5.33502E-02 -2.50648E-01 -6.43830E-02 2.80208E-01 -FloatFrame 39 1.09471E00 1.30951E00 -5.03788E-01 -4.37371E-01 4.18097E-01 1.64609E-01 -3.76125E-01 -1.74001E-01 -1.94217E-01 9.94167E-03 9.75664E-02 -3.37153E-03 -7.27269E-02 -1.51604E-01 3.52991E-01 -1.88224E-01 -1.11993E-01 -1.04985E-01 2.09420E-01 -7.46633E-02 1.64622E-01 -4.32181E-02 -1.82565E-01 2.05391E-02 5.69859E-02 1.45302E-01 1.43794E-01 -1.24108E-01 -8.86129E-02 3.29225E-01 1.93662E-02 -2.85231E-01 -2.71984E-02 1.98840E-01 4.62816E-02 -7.61950E-02 -1.65811E-02 -1.27647E-01 1.85567E-01 -FloatFrame 39 9.29988E-01 1.37425E00 -4.28669E-01 -4.69304E-01 3.15687E-01 2.35114E-01 -2.96684E-01 -2.82401E-01 -1.25228E-01 2.49901E-02 -1.84010E-02 1.53547E-02 3.78086E-02 -2.75939E-01 3.71855E-01 -9.57308E-02 -1.01153E-01 -6.88541E-02 6.45352E-02 -3.97460E-02 1.91785E-01 -3.62100E-02 -1.50819E-01 -3.80637E-02 -9.04949E-03 2.41225E-01 7.60557E-03 -9.77376E-02 1.37080E-01 1.33690E-01 -2.36867E-02 -3.43095E-01 1.47337E-01 2.97005E-02 2.60542E-02 2.54661E-02 -7.62915E-02 2.96481E-02 8.68977E-03 -FloatFrame 39 8.74276E-01 1.49216E00 -5.01996E-01 -4.77164E-01 3.16637E-01 2.38722E-01 -3.51170E-01 -1.41736E-01 -1.84588E-01 -6.25046E-02 9.44971E-02 -2.81179E-02 8.13233E-02 -1.43998E-01 2.55253E-01 -5.11439E-02 2.16978E-02 -1.28672E-01 -1.33675E-01 7.26741E-02 1.94322E-01 -1.71639E-02 -1.57099E-01 -5.57524E-02 8.66340E-02 1.53991E-01 4.55692E-01 -2.62362E-01 -1.40593E-02 2.09455E-01 -1.93878E-02 -4.00637E-01 1.52515E-01 8.24749E-02 3.84231E-02 -1.14812E-01 3.18042E-02 2.13288E-01 -2.37724E-01 -FloatFrame 39 8.49582E-01 1.58428E00 -5.43011E-01 -4.95918E-01 3.57975E-01 1.19651E-01 -3.40150E-01 -4.97004E-02 -1.76053E-01 -1.31674E-01 6.19682E-02 2.72279E-02 6.23741E-02 1.79753E-01 1.09493E-01 -1.09790E-01 1.08301E-01 -8.82419E-02 -3.36102E-01 1.12769E-01 2.74260E-01 2.21318E-03 -2.65631E-01 -6.25948E-03 2.04239E-01 3.50105E-03 4.43991E-01 -2.66556E-01 -9.39995E-03 2.08794E-01 -9.76574E-02 -3.16716E-01 2.54608E-01 -4.47389E-02 5.64214E-02 -8.31559E-02 2.91202E-02 9.41927E-02 -1.65996E-01 -FloatFrame 39 9.50712E-01 1.56477E00 -5.54932E-01 -4.15673E-01 2.89425E-01 3.09344E-02 -3.03451E-01 2.03207E-02 -2.11381E-01 -1.47158E-01 4.18140E-02 8.32625E-02 8.12645E-02 2.99993E-01 -1.13033E-02 -6.05438E-02 2.30491E-01 -2.26329E-01 -4.50391E-01 3.27282E-01 1.49583E-01 3.92575E-02 -2.40255E-01 -2.66322E-02 1.80827E-01 -1.20050E-02 3.00831E-01 -3.50321E-01 1.77092E-01 2.47010E-01 -3.46852E-01 -7.30121E-02 3.06723E-01 -1.51995E-01 -5.30345E-02 1.15299E-01 8.09120E-02 -2.01920E-01 4.98699E-03 -FloatFrame 39 1.10974E00 1.48374E00 -5.38459E-01 -3.61003E-01 2.27445E-01 -1.00988E-01 -1.83915E-01 -8.14183E-03 -1.23015E-01 -2.40641E-01 -2.46605E-02 2.19593E-01 4.13096E-02 4.80585E-01 -2.40828E-01 6.73021E-02 3.55312E-01 -4.35094E-01 -4.09114E-01 4.19492E-01 1.22264E-01 -5.08213E-02 -1.50332E-01 7.46525E-02 2.31888E-03 8.48805E-03 -9.39097E-02 -2.28776E-01 3.42790E-01 6.84751E-02 -4.02056E-01 2.67745E-01 3.99114E-02 -9.93991E-02 2.98928E-03 9.01729E-02 4.16908E-02 -2.01664E-01 -8.79325E-03 -FloatFrame 39 1.17427E00 1.48085E00 -5.62539E-01 -2.46673E-01 9.03075E-02 -2.11668E-01 -2.38877E-02 7.84678E-03 -1.45331E-01 -3.02760E-01 6.78649E-02 1.52709E-01 6.93183E-02 2.06083E-01 -2.40079E-01 2.82246E-01 2.98967E-01 -6.28385E-01 -1.82646E-01 3.67194E-01 5.01840E-02 4.22467E-02 -1.50082E-01 1.50586E-02 -2.08376E-02 -2.07983E-02 -5.94421E-01 4.21614E-02 3.54521E-01 -6.82065E-02 -3.11579E-01 3.99575E-01 -1.45284E-01 -3.88127E-02 6.34580E-03 9.86711E-02 -9.89749E-03 -2.05058E-01 -3.43602E-02 -FloatFrame 39 1.33017E00 1.34345E00 -4.75709E-01 -1.40606E-01 -7.71190E-02 -2.89463E-01 7.93418E-02 7.25638E-02 -2.26874E-01 -2.82007E-01 1.36621E-01 2.95468E-02 7.08622E-02 -1.13837E-01 -1.98667E-01 4.21823E-01 2.87105E-01 -7.46673E-01 -9.53895E-03 2.74208E-01 8.34514E-02 -4.44755E-02 -5.16610E-02 6.47550E-02 -2.02739E-01 -2.58722E-02 -4.12801E-01 -4.16847E-02 2.56616E-01 -6.05636E-02 -7.71877E-02 2.43018E-01 -1.99450E-01 2.12610E-02 -6.69038E-02 1.85022E-01 -7.22690E-02 -1.83723E-01 -1.36255E-02 -FloatFrame 39 1.15679E00 1.32469E00 -2.72685E-01 -1.16706E-01 -3.38960E-01 -1.51711E-01 6.37432E-02 7.05048E-02 -1.69135E-01 -2.97240E-01 5.68726E-02 6.24249E-02 6.04663E-02 -2.06718E-01 -2.81764E-01 5.38863E-01 2.38403E-01 -7.05573E-01 6.03718E-02 1.67744E-01 7.14450E-02 -2.46570E-02 3.49402E-02 -5.72104E-02 -2.04561E-01 -3.44238E-02 -4.90353E-01 6.66793E-02 1.07989E-01 -1.41189E-01 2.40151E-01 1.51243E-02 -1.39552E-01 -1.23615E-01 1.38795E-01 1.09484E-01 -2.84797E-01 1.32222E-01 -7.38188E-02 -FloatFrame 39 9.95904E-01 1.28508E00 -1.16636E-01 -7.38979E-02 -5.19228E-01 -1.10527E-01 9.02928E-02 7.53096E-02 -1.67490E-01 -2.92302E-01 4.00945E-02 1.68545E-02 1.54375E-02 -6.04190E-01 -1.31988E-01 5.29812E-01 1.45916E-01 -5.06522E-01 5.58534E-03 1.34656E-01 -4.01639E-02 9.43194E-02 5.78230E-02 -2.20042E-01 -7.05169E-02 -9.96910E-02 -6.30954E-01 2.65406E-01 -5.22333E-02 -1.28584E-01 4.37182E-01 -2.23471E-01 3.43740E-03 -1.69500E-01 1.42614E-01 7.79383E-02 -1.16640E-01 2.71683E-02 -1.34036E-01 -FloatFrame 39 9.67550E-01 1.19909E00 -2.36769E-02 -8.27006E-03 -6.15265E-01 -1.51296E-01 1.43856E-01 7.92918E-02 -1.69988E-01 -2.67820E-01 1.06545E-02 -5.18517E-02 3.48945E-02 -8.37672E-01 -1.63576E-02 4.86629E-01 1.09819E-01 -2.68390E-01 -1.63099E-01 1.71181E-01 -9.80554E-02 1.17957E-01 1.12879E-01 -1.73850E-01 -1.77392E-01 -1.68460E-01 -6.38327E-02 6.64069E-02 -3.10181E-02 -8.91267E-02 3.54708E-01 -2.31724E-01 1.39390E-02 -5.24538E-02 4.97003E-02 1.23427E-01 4.75744E-02 -1.40633E-01 -6.84002E-02 -FloatFrame 39 7.25977E-01 1.21147E00 5.41030E-02 5.31018E-03 -5.83641E-01 -2.83877E-01 2.13997E-01 3.23999E-02 -1.32555E-01 -2.24184E-01 -8.34209E-02 -4.09701E-02 -2.88288E-02 -6.68023E-01 -6.55808E-02 4.98794E-01 5.67896E-02 -1.51814E-01 -2.26139E-01 1.48595E-01 -9.26177E-02 1.44020E-01 1.81250E-01 -1.72467E-01 -2.11150E-01 -1.68091E-01 1.55902E-01 1.83837E-02 -9.31116E-02 2.94296E-02 1.67294E-01 -3.75080E-03 -1.59748E-01 -2.84870E-02 1.16571E-01 8.43169E-02 4.88318E-04 7.28384E-02 -4.51486E-02 -FloatFrame 39 3.19123E-01 1.30833E00 2.13944E-01 -6.88688E-03 -6.07351E-01 -3.14810E-01 2.34925E-01 -2.75506E-02 -5.11773E-02 -1.84361E-01 -1.16978E-01 -1.14967E-01 -1.07994E-01 -6.81770E-01 2.02607E-03 3.93518E-01 1.39249E-01 -1.01096E-01 -1.66850E-01 1.14334E-02 -1.26542E-01 2.34528E-01 1.97195E-01 -1.73362E-01 -1.04554E-01 -2.13609E-01 4.60473E-02 8.59880E-02 -1.80105E-01 2.20136E-01 4.57761E-02 8.05510E-02 -2.09380E-01 3.02054E-02 2.08371E-02 3.93879E-02 1.75634E-01 7.62807E-02 -8.51174E-03 -FloatFrame 39 3.27881E-01 1.21950E00 3.82157E-01 -1.71083E-02 -6.71042E-01 -3.36666E-01 2.38887E-01 -1.73081E-02 -2.34704E-02 -1.11053E-01 -1.32373E-01 -1.94295E-01 -1.52654E-01 -6.21975E-01 2.04072E-02 3.18689E-01 2.76926E-01 -1.06038E-01 -1.45588E-01 -6.07858E-02 -6.24123E-02 1.64857E-01 2.20638E-01 3.16652E-03 -1.34869E-01 -1.76603E-01 1.02225E-01 -7.26750E-02 -1.07254E-01 2.22794E-01 -4.60570E-02 1.26238E-01 -1.03614E-01 8.38151E-02 -2.04945E-01 8.87351E-02 2.30585E-01 1.21870E-01 7.83156E-02 -FloatFrame 39 2.85781E-01 1.20112E00 3.69841E-01 1.30979E-01 -7.16362E-01 -3.18146E-01 1.55290E-01 -4.72506E-02 6.45407E-02 -7.06241E-02 -1.62707E-01 -1.56405E-01 -1.78714E-01 -5.79544E-01 -7.06490E-02 2.86264E-01 3.62043E-01 -1.47153E-01 -4.06114E-02 -9.21803E-02 -4.27273E-02 2.95836E-02 2.85931E-01 5.72234E-02 1.73165E-02 -1.35293E-01 -4.81426E-01 -9.49491E-02 -2.66896E-02 1.59216E-01 1.82175E-01 6.14990E-02 -1.73073E-01 -2.38990E-02 -8.48891E-03 -3.42295E-02 1.02022E-01 1.84301E-01 1.50515E-01 -FloatFrame 39 1.04002E-01 1.23187E00 3.72792E-01 2.82236E-01 -6.89679E-01 -4.29465E-01 1.53212E-01 -3.00124E-02 3.23021E-02 -3.54616E-03 -8.02543E-02 -1.75839E-01 -2.05432E-01 -1.10340E00 -7.45419E-02 2.92000E-01 4.36142E-01 7.61371E-02 -8.40890E-02 -2.33858E-01 -8.63113E-02 1.56368E-01 1.86408E-01 1.05189E-01 4.94313E-02 -2.60877E-02 -7.82248E-01 -3.88550E-02 1.72407E-02 -2.87625E-02 3.85666E-01 1.14913E-02 -5.93129E-02 -1.04395E-01 1.93733E-02 -5.62730E-02 1.01143E-01 3.06218E-02 1.26423E-01 -FloatFrame 39 -2.60421E-01 1.23768E00 5.00208E-01 3.55156E-01 -7.54504E-01 -3.55422E-01 1.42744E-01 -7.02779E-02 -2.15937E-02 1.01569E-01 -5.97541E-02 -9.76508E-02 -2.43287E-01 -1.36179E00 -1.09504E-01 3.03505E-01 3.33281E-01 2.38513E-01 -2.91201E-02 -1.51493E-01 -1.47122E-01 4.89569E-02 2.29658E-01 1.58367E-01 4.79383E-02 -8.86992E-03 -3.42734E-01 -1.50922E-01 9.75807E-02 -3.04503E-01 2.67647E-01 2.03712E-01 7.67704E-02 -1.49362E-01 -4.11110E-02 -7.81579E-02 -3.20783E-02 1.21424E-01 6.54028E-02 -FloatFrame 39 -7.75519E-01 1.14495E00 6.74157E-01 4.19034E-01 -5.94905E-01 -4.20755E-01 5.02901E-03 -1.03619E-01 1.32898E-01 7.53552E-02 -2.71839E-02 -1.44864E-01 -1.78741E-01 -1.44614E00 -2.25464E-01 3.89580E-01 1.31639E-01 3.43784E-01 1.19623E-01 -1.57088E-01 -2.35673E-01 1.15257E-01 1.08250E-01 7.31106E-02 1.70855E-01 3.93151E-02 1.24137E-01 -2.41559E-01 -1.38962E-02 -1.88686E-01 2.09540E-01 6.89259E-02 -4.16082E-02 7.51142E-02 8.12984E-02 -2.84530E-01 -1.14804E-01 5.79778E-02 5.85867E-02 -FloatFrame 39 -1.07601E00 1.09161E00 6.73345E-01 4.64259E-01 -4.77849E-01 -3.47266E-01 3.79672E-03 -1.94373E-01 1.13498E-01 1.59033E-01 -4.34039E-03 -1.08467E-01 -1.87584E-01 -1.23766E00 -3.51063E-01 2.89608E-01 1.44595E-01 4.48053E-01 3.98058E-02 -1.93101E-01 -7.20083E-02 1.30255E-01 -5.48726E-02 4.35630E-02 1.05916E-01 4.97168E-02 6.19292E-01 -9.22062E-02 -3.14910E-01 4.02978E-02 -4.99640E-02 1.33151E-01 6.44943E-02 1.31508E-01 -1.69469E-01 -9.30211E-02 -5.29658E-02 -7.07779E-02 -1.11947E-02 -FloatFrame 39 -1.34213E00 1.00641E00 7.62372E-01 4.13875E-01 -3.45895E-01 -3.09842E-01 -3.87643E-03 -2.65685E-01 1.47559E-01 1.04704E-01 -7.14379E-03 -4.98400E-03 -1.66117E-01 -8.26843E-01 -3.17670E-01 7.46705E-02 1.71936E-01 2.93820E-01 2.52774E-01 -9.25937E-02 -1.04165E-01 -5.42116E-02 1.52290E-02 2.01447E-02 1.00077E-01 2.81204E-02 6.84941E-01 1.82509E-01 -2.22505E-01 -9.87174E-02 -3.25107E-01 1.16276E-01 1.07263E-01 1.69151E-01 -4.36669E-02 -1.29574E-01 -1.91690E-01 -9.53083E-02 1.38592E-01 -FloatFrame 39 -1.49808E00 8.86617E-01 7.89816E-01 4.99751E-01 -3.06451E-01 -3.15616E-01 -5.03569E-02 -1.42286E-01 1.08662E-01 4.66966E-02 -1.61910E-02 8.26531E-03 -1.93570E-01 -5.52715E-01 -1.68553E-01 6.71029E-02 4.58772E-02 1.22946E-01 1.56082E-01 -8.58386E-02 9.71424E-02 8.65884E-02 -1.84447E-01 -1.48126E-01 1.06078E-02 1.88309E-01 6.18120E-01 3.34256E-01 -1.26062E-01 -2.52609E-01 -1.76560E-01 -1.02872E-01 -1.43442E-02 1.77059E-01 1.93329E-02 -1.45514E-01 -5.36472E-02 -1.31014E-01 9.27452E-03 -FloatFrame 39 -1.60236E00 8.27283E-01 7.48827E-01 5.90970E-01 -3.01085E-01 -1.67980E-01 -8.75647E-02 -2.07785E-01 7.86859E-02 9.05843E-02 -7.03914E-03 -4.47867E-02 -1.50621E-01 -2.08723E-01 1.65857E-02 -5.13918E-02 -8.06721E-02 1.17260E-01 1.49903E-01 -1.06938E-01 7.28935E-02 -3.48787E-02 -1.30285E-01 -3.35024E-02 -3.09366E-02 3.73949E-02 9.45687E-01 4.00594E-01 -1.52092E-01 -4.35191E-01 -1.78518E-01 -1.83250E-02 6.39019E-02 -1.11409E-01 -1.62857E-01 2.22713E-01 1.36982E-01 -1.55380E-01 -1.40302E-01 -FloatFrame 39 -1.62873E00 9.23058E-01 7.40448E-01 5.10137E-01 -3.54903E-01 -1.91184E-01 -8.20419E-02 -9.72306E-02 2.00086E-01 -2.54134E-02 -1.52467E-01 -9.78593E-02 7.24800E-04 3.92972E-01 2.32041E-01 -8.49892E-02 -3.89314E-01 -5.55722E-02 1.37757E-01 -2.19367E-02 -1.42670E-02 -7.62689E-02 3.82658E-02 -1.11441E-02 -1.44773E-01 4.80068E-02 1.14874E00 2.99632E-01 -1.59912E-01 -3.70552E-01 -4.24377E-01 -2.84515E-01 1.82552E-01 -2.59006E-02 7.63529E-03 1.91703E-01 -4.43636E-02 -3.95864E-02 -3.90961E-02 -FloatFrame 39 -1.55086E00 1.02299E00 7.10981E-01 3.33203E-01 -2.28635E-01 -1.59939E-01 -1.10814E-01 -1.92792E-01 1.12680E-01 -2.55810E-02 -4.06462E-02 -3.59206E-02 -1.28722E-01 9.40014E-01 3.16217E-01 -2.11303E-01 -4.51224E-01 -3.07117E-01 -1.34612E-01 7.56140E-02 4.69928E-02 -2.72435E-02 6.14182E-02 -7.78661E-02 -7.05230E-02 -1.70124E-03 1.37218E00 -2.70842E-01 -1.19479E-01 -1.02448E-01 -4.22093E-01 -2.38698E-01 4.11699E-02 1.48695E-02 3.00112E-02 4.80038E-02 1.05801E-01 1.14765E-01 -1.63789E-01 -FloatFrame 39 -1.10511E00 1.11866E00 7.04827E-01 1.10437E-01 -3.62023E-01 -1.77859E-01 -7.22936E-02 -1.56553E-01 3.23928E-02 8.49624E-02 -2.73351E-02 -1.36507E-01 -1.45563E-01 1.76515E00 -3.88015E-02 -2.04468E-01 -4.91762E-01 -4.77665E-01 -1.00941E-01 1.92333E-02 6.02460E-04 -4.62576E-02 8.62696E-02 9.46567E-02 -3.00078E-02 -1.15782E-01 8.78604E-01 -2.24739E-01 -1.73246E-01 2.83218E-02 -3.81369E-01 -6.18414E-02 1.88540E-02 8.93490E-02 2.66085E-01 -2.83628E-02 -1.03852E-02 1.16287E-01 -1.95048E-02 -FloatFrame 39 -6.62349E-01 1.14350E00 5.37524E-01 1.39747E-01 -6.08202E-01 -3.02593E-01 -1.19506E-02 -1.60792E-01 5.14424E-02 1.52003E-01 -8.49052E-02 -1.15310E-01 -1.52322E-01 1.81862E00 9.14780E-02 -3.84550E-01 -4.22902E-01 -6.88486E-01 -1.96454E-01 9.44680E-02 1.36342E-01 2.38842E-01 3.30554E-02 -8.82513E-02 4.57642E-02 -2.12061E-02 -4.04421E-01 2.04109E-01 -4.34566E-01 1.66802E-01 5.26492E-02 -1.20841E-01 2.40219E-01 8.09174E-02 3.73264E-01 -1.39985E-01 -2.81060E-01 2.55746E-01 9.03290E-02 -FloatFrame 39 1.36426E-01 8.84256E-01 5.35980E-01 1.83748E-02 -8.32568E-01 -2.92124E-01 -6.28086E-02 -9.66282E-02 1.53828E-01 6.08561E-02 -5.78101E-02 -1.27867E-01 -1.15057E-01 1.36073E00 1.65308E-01 -6.39034E-01 -3.24959E-01 -4.25016E-01 -2.21782E-01 2.59453E-01 8.15198E-02 3.27006E-01 -5.37152E-02 -1.86404E-01 2.25738E-01 -2.54528E-02 -1.19887E00 3.29957E-03 2.32992E-02 -2.09877E-01 6.21782E-01 1.80886E-01 6.21245E-02 6.58120E-02 1.04981E-01 -1.46846E-01 -8.57202E-02 1.29437E-01 1.16089E-01 -FloatFrame 39 2.67761E-01 1.11447E00 3.26431E-01 -8.96994E-02 -9.17121E-01 -3.56393E-01 -1.63462E-02 -5.64501E-02 3.51522E-01 7.47439E-03 -1.28897E-01 9.84359E-03 -1.49928E-01 6.19750E-01 9.47776E-02 -3.61250E-01 -6.32779E-01 -6.67035E-02 -1.55677E-02 1.56593E-01 2.02154E-01 3.43822E-01 -1.13790E-01 -1.73971E-01 1.75201E-01 9.48829E-02 -1.67770E00 1.05627E-01 2.76291E-01 -2.03756E-01 5.30522E-01 2.37961E-01 7.52839E-02 4.90948E-02 -1.61981E-01 4.13014E-02 -1.63341E-03 -5.15508E-03 9.54122E-02 -FloatFrame 39 2.55626E-01 1.28397E00 6.57927E-02 -2.14522E-01 -7.87039E-01 -3.99640E-01 1.87159E-01 -7.50333E-02 3.59399E-01 3.12472E-02 -2.13739E-01 8.92305E-02 -1.71016E-01 -3.16967E-01 2.70935E-01 -3.62743E-01 -5.28715E-01 1.05506E-01 1.61789E-02 3.34736E-01 1.30615E-01 1.65025E-01 -1.24138E-02 -1.88037E-01 2.20583E-01 6.99594E-02 -8.69037E-01 -2.79726E-01 2.25763E-01 2.20039E-01 2.01060E-01 1.44030E-01 1.86642E-01 -1.23063E-01 -4.56563E-01 1.91657E-01 3.25707E-02 1.34541E-03 2.59089E-03 -FloatFrame 39 -4.25981E-02 1.23828E00 1.76274E-01 -4.93033E-01 -6.74905E-01 -3.18160E-01 1.44642E-01 4.13619E-02 3.95265E-01 3.82123E-02 -2.58877E-01 5.98912E-02 -5.74393E-02 -2.49286E-01 -1.84948E-01 -1.35487E-01 -4.12740E-01 1.34356E-01 1.28463E-01 3.43234E-01 7.90906E-02 -1.12741E-01 7.78672E-02 -1.41401E-01 1.76546E-01 9.74738E-02 2.59277E-01 -5.07401E-01 3.54188E-01 2.65873E-01 -1.52465E-01 2.18990E-01 -1.42276E-01 -2.02941E-02 -3.11929E-01 7.56732E-03 1.66704E-01 -9.16850E-02 9.04757E-02 -FloatFrame 39 -1.80542E-01 1.15519E00 1.73237E-01 -5.10341E-01 -7.27062E-01 -2.75946E-01 2.71928E-01 3.39865E-02 3.18854E-01 4.84423E-02 -2.45847E-01 9.27155E-02 -4.50976E-02 -5.76904E-02 -2.36466E-01 -8.55572E-03 -2.62843E-01 -4.69585E-02 2.35169E-01 1.92460E-01 1.10321E-01 -1.46904E-01 -4.84651E-03 -2.13327E-02 1.28898E-01 1.60435E-01 5.45747E-01 3.72483E-02 9.84942E-02 4.17618E-01 -3.09127E-01 1.25927E-01 -2.66663E-02 -1.95737E-01 -1.58713E-01 -7.56381E-02 2.36348E-01 1.80441E-02 -7.46276E-02 -FloatFrame 39 1.84746E-02 9.29524E-01 1.90944E-01 -5.02440E-01 -7.82765E-01 -2.27931E-01 3.26888E-01 2.26405E-02 2.38781E-01 8.53416E-02 -2.70298E-01 1.86390E-01 -5.24540E-02 2.96461E-01 -1.47700E-01 -3.69929E-02 4.87754E-03 -1.74771E-01 2.54389E-01 3.16568E-01 -1.16647E-01 -2.71455E-01 2.22908E-03 9.49469E-02 1.94590E-01 2.28462E-02 4.78288E-01 1.03688E-01 6.90611E-03 2.73482E-01 -6.87076E-02 1.81314E-01 -1.10505E-01 -1.58307E-01 -2.67816E-01 1.14113E-01 2.31035E-01 -6.34792E-03 -2.16516E-01 -FloatFrame 39 1.97936E-01 1.04750E00 5.72369E-02 -4.77365E-01 -8.33998E-01 -1.64471E-01 3.79619E-01 3.52873E-02 2.12495E-01 2.64006E-02 -2.35072E-01 2.18128E-01 -1.05811E-02 4.20598E-01 -1.32778E-01 -1.64960E-03 1.06390E-02 -1.15666E-01 4.16484E-01 8.19559E-02 -4.79868E-02 -4.14720E-01 1.09267E-01 2.09702E-01 1.22550E-01 -5.60813E-02 -2.12091E-01 5.41056E-02 -1.78333E-02 -5.88101E-02 3.44360E-01 1.93534E-01 -5.23198E-01 1.10931E-01 -1.95304E-02 1.24573E-01 6.74319E-02 -8.00373E-02 7.65473E-03 -FloatFrame 39 2.53863E-01 1.09058E00 1.39281E-01 -4.88155E-01 -8.49676E-01 -6.37710E-02 4.61210E-01 -7.52847E-02 1.23810E-01 4.04414E-02 -1.63930E-01 2.54482E-01 -3.45932E-02 8.43701E-02 -9.35943E-02 -5.48263E-02 -5.39326E-02 1.69589E-01 4.47923E-01 -2.06630E-01 -5.71557E-03 -2.90985E-01 1.26802E-01 1.62379E-01 1.14553E-01 3.05009E-02 -6.41924E-01 -1.32153E-02 8.88281E-02 -1.53891E-01 3.60739E-01 1.48927E-01 -4.74503E-01 -6.64778E-02 2.24232E-01 1.39101E-01 -3.85495E-02 -5.69787E-02 4.32124E-02 -FloatFrame 39 2.40056E-01 1.02241E00 1.71587E-01 -4.99702E-01 -8.42728E-01 1.40538E-01 3.53884E-01 -1.40003E-02 -9.58667E-02 1.57709E-01 -3.61449E-02 2.15265E-01 -1.01179E-01 -2.21326E-01 -1.45994E-01 8.71785E-02 -1.43252E-01 2.45073E-01 5.65411E-01 -3.92547E-01 -1.14465E-01 -1.90488E-01 2.48367E-01 1.71153E-01 6.55710E-02 -1.28689E-02 2.69731E-01 -6.05196E-01 2.88194E-02 3.71885E-01 -3.26529E-02 7.44493E-02 -2.69136E-01 -3.47938E-02 2.43605E-01 -1.42947E-01 2.36182E-01 -3.54188E-01 6.10714E-02 -FloatFrame 39 1.02845E-01 8.35929E-01 1.36118E-01 -5.56372E-01 -6.13176E-01 2.19993E-01 1.20258E-01 1.69249E-02 -5.22041E-02 2.12144E-01 -1.07919E-01 3.00943E-01 -2.19531E-02 3.54101E-01 -6.98790E-01 -2.60068E-02 3.17953E-01 1.36936E-01 5.22373E-01 -4.75767E-01 -4.05094E-02 -4.73798E-02 -1.61450E-02 3.98561E-01 -2.39635E-01 9.15723E-02 -6.99253E-01 -1.28740E00 -7.18243E-02 9.00967E-01 1.05069E-01 -2.66966E-01 9.50701E-03 8.35481E-02 3.64317E-01 -4.03157E-01 2.07825E-01 -2.54177E-01 2.03493E-01 -FloatFrame 39 -2.33904E-02 9.01506E-01 1.44415E-01 -6.20617E-01 -5.88924E-01 4.00940E-01 -1.29277E-02 -7.91773E-02 2.20071E-02 2.74768E-01 -6.39187E-02 2.83699E-01 -2.34501E-02 -9.20579E-01 -1.43340E00 1.53542E-02 7.57715E-01 3.50142E-01 2.98445E-01 -3.83040E-01 -3.09165E-02 1.73830E-01 -1.54789E-01 3.78978E-01 -1.88606E-01 1.90624E-01 -2.47691E00 -4.35739E-01 8.81501E-03 5.81775E-01 3.75034E-01 -4.66895E-01 5.55101E-01 1.03620E-01 2.31404E-01 -3.38059E-01 -1.03633E-01 1.80050E-02 -8.68111E-02 -FloatFrame 39 6.07964E-01 3.91788E-01 1.13274E-01 -1.70203E-01 -7.12740E-01 4.58602E-01 -1.45565E-02 -1.15794E-01 7.64304E-02 2.42964E-02 2.34631E-01 1.48466E-02 5.69791E-02 -2.12281E00 -1.13453E00 -1.71918E-02 8.99728E-01 5.11970E-01 5.54774E-02 7.93349E-02 6.31109E-02 1.84024E-01 -3.54204E-01 2.94928E-01 -2.21630E-01 4.76120E-03 -1.53568E00 4.27579E-01 -1.15479E-01 7.02335E-02 3.92806E-01 -5.58935E-01 6.64918E-01 3.36423E-01 -1.97602E-01 -2.01630E-01 -2.19039E-01 -4.95911E-02 -1.43068E-01 -FloatFrame 39 -6.80522E-01 -4.10985E-01 1.86941E-01 2.58013E-01 -4.92586E-01 4.38983E-01 -2.91564E-02 -4.49169E-02 7.79629E-02 2.91955E-03 3.42833E-01 2.66595E-02 8.94449E-02 -2.45626E00 -1.00582E00 -1.00125E-01 8.27948E-01 7.42948E-01 -2.60491E-01 2.81878E-01 3.05507E-01 -2.37728E-02 -3.56420E-01 1.59938E-01 -2.38197E-01 4.75562E-02 -1.28619E00 5.76344E-01 -1.69831E-01 -4.45182E-01 3.81619E-01 -2.24442E-01 5.71213E-02 2.50322E-01 -2.17747E-01 2.94592E-01 -4.56920E-01 3.04347E-01 -5.10973E-02 -FloatFrame 39 -2.01996E00 -2.98600E-01 1.18926E-01 3.43356E-01 -1.01206E-01 2.75470E-01 1.99593E-01 8.00358E-02 1.31820E-01 -1.42061E-01 1.87008E-01 7.93130E-02 -1.71919E-02 -3.40900E00 -5.58186E-01 -1.87022E-01 4.54546E-01 8.93589E-01 -1.68965E-01 1.36456E-01 3.13433E-01 -3.37230E-02 -5.96124E-02 -1.61992E-01 8.27165E-02 -4.63361E-02 1.65539E-01 1.28536E00 -1.92979E-01 -7.28327E-01 -1.36949E-01 3.86280E-02 -1.47617E-01 -8.17752E-02 -6.03930E-02 5.25001E-01 -4.69085E-01 1.07974E-01 -1.34367E-01 -FloatFrame 39 -2.47965E00 -1.04314E-01 4.42908E-02 2.07332E-01 1.54023E-01 1.40449E-01 2.68951E-01 2.26330E-01 -1.76571E-03 -8.16517E-02 9.60198E-02 4.55023E-02 2.41061E-02 -2.29072E00 2.79537E-01 -2.93103E-01 9.96214E-02 6.05999E-01 -2.21863E-01 1.34262E-01 2.23732E-01 -8.41657E-02 1.68582E-01 -3.09146E-01 -1.30223E-01 -8.68109E-02 2.28268E00 5.94163E-01 6.68800E-02 -4.85531E-01 -7.51422E-01 1.37632E-01 -1.39500E-01 -2.87506E-01 -2.91433E-02 2.08358E-01 1.25655E-01 -8.00962E-02 1.15877E-01 -FloatFrame 39 -2.80104E00 -1.66397E-01 -7.37484E-02 2.84344E-01 1.80848E-01 2.89637E-01 1.21900E-01 1.97639E-01 4.27073E-02 -3.53161E-02 7.26388E-02 9.75632E-02 1.06430E-02 -1.12632E00 3.59772E-02 -1.20142E-01 -3.09846E-02 1.42167E-01 -3.13321E-02 -3.04377E-03 2.59263E-02 -6.28663E-02 1.48746E-01 -3.63369E-02 2.62037E-03 6.95412E-02 2.01350E00 -3.08247E-01 8.28620E-02 -5.63414E-02 -4.85712E-01 2.66781E-01 -3.78132E-01 -4.01188E-01 8.25309E-02 -2.79870E-02 4.21284E-01 8.37222E-02 9.23238E-02 -FloatFrame 39 -2.97124E00 -1.31448E-01 -1.06162E-01 3.57635E-01 1.13412E-01 2.17120E-01 1.05105E-01 1.78815E-01 -6.20287E-03 1.71501E-01 3.36864E-02 -1.03563E-01 2.63400E-03 -2.77222E-01 -2.87096E-02 -2.10241E-01 4.32801E-02 1.20286E-01 4.49183E-02 -2.43870E-01 -1.77457E-01 -1.63487E-03 1.40595E-01 1.12138E-01 -4.65003E-02 5.51288E-03 7.06779E-01 -4.18106E-01 -2.71174E-01 -2.22396E-01 -1.71523E-01 -1.35763E-01 -6.70949E-02 -9.75195E-02 5.92799E-02 3.98498E-02 1.81118E-01 -1.30107E-02 -2.33598E-02 -FloatFrame 39 -3.14629E00 -2.62623E-01 -1.21663E-03 3.12371E-01 4.09612E-02 2.44138E-01 1.96549E-01 1.05962E-01 6.89533E-02 6.68485E-03 1.50671E-01 8.19334E-02 5.23493E-02 -4.19544E-01 -3.82129E-01 -3.91317E-01 -2.53381E-01 -2.93560E-02 -1.67095E-01 -7.01386E-02 -7.15932E-02 -3.58649E-03 1.88595E-01 1.44782E-01 -1.03903E-02 4.61814E-02 -2.14415E-01 -2.49809E-01 1.88784E-01 -8.44059E-02 -2.38456E-02 -4.88768E-02 3.37713E-01 1.95209E-01 1.37377E-01 -2.72209E-01 -1.07700E-01 1.82322E-01 4.86716E-02 -FloatFrame 39 -2.75687E00 -1.33023E-01 -1.65950E-01 2.50612E-01 2.74310E-01 1.85367E-01 2.50804E-02 4.88729E-02 -3.40058E-03 5.89429E-02 2.08157E-01 -9.98023E-04 2.96190E-02 -4.91637E-01 -2.78519E-01 -2.14571E-02 -4.11258E-02 9.64407E-02 -3.95853E-03 9.38429E-02 1.77519E-02 1.35742E-01 -1.31614E-01 4.43757E-03 1.35822E-01 5.41845E-02 3.16134E-01 2.73349E-01 3.49713E-01 3.44518E-01 2.53750E-01 8.24768E-02 1.42644E-01 3.43736E-02 -4.86356E-02 -3.12794E-01 -1.71002E-01 -3.76487E-02 3.02441E-02 -FloatFrame 39 -3.22058E00 -5.48527E-01 -4.65065E-01 3.09626E-02 1.51492E-01 1.22542E-01 5.17610E-02 1.26045E-01 3.91208E-02 1.53279E-01 2.17420E-01 8.71729E-02 5.68244E-02 -1.03411E-01 -1.08780E-01 -4.16037E-02 9.11366E-02 2.24394E-01 -8.46187E-02 7.25058E-02 -3.72196E-02 -5.22221E-02 -1.24198E-01 -2.62205E-02 -4.80390E-02 7.64254E-02 -1.21954E-01 -1.83148E-01 -5.62005E-02 -1.35284E-01 -3.45956E-01 2.17933E-04 5.86577E-02 -4.76288E-02 -8.15461E-02 1.19843E-01 -1.20877E-01 -1.57778E-01 -1.18121E-01 -FloatFrame 39 -3.46288E00 -4.09967E-01 -1.27619E-01 3.16509E-01 2.09853E-01 2.13162E-01 1.98948E-01 1.96567E-01 1.29540E-01 3.98870E-02 3.81239E-02 3.22589E-02 5.68185E-02 -6.13592E-01 -4.61666E-01 -7.76576E-02 -1.76410E-01 -2.49515E-01 -3.74060E-03 1.52501E-01 -2.98768E-02 5.41964E-02 -1.17712E-02 -1.16439E-01 -2.19560E-02 -6.39367E-02 -5.31962E-01 -1.74676E-01 2.74942E-01 6.77380E-02 -2.85466E-01 3.09425E-01 -3.52863E-02 2.69798E-02 2.40843E-01 1.18493E-01 -2.25294E-01 1.18656E-02 4.13692E-02 -FloatFrame 39 -3.24970E00 -3.71403E-01 -4.28204E-02 4.03508E-01 2.65355E-01 1.59519E-01 2.69055E-01 6.87426E-02 1.67312E-02 -1.17513E-01 1.24451E-01 3.38944E-02 1.28775E-01 -6.35373E-01 -2.83456E-01 2.33338E-01 1.58875E-01 -6.10727E-02 2.24806E-01 3.72195E-02 -1.02398E-02 1.88621E-01 -5.70489E-03 -2.51515E-01 -3.61734E-02 1.17795E-01 2.17431E-01 1.67451E-01 -1.00745E-01 -1.53651E-01 1.65631E-01 1.00084E-01 -1.62845E-01 -1.22231E-01 -3.26857E-02 5.41684E-02 1.84601E-01 9.23604E-02 1.41179E-01 -FloatFrame 39 -3.37046E00 -5.94689E-01 -2.43608E-01 7.42017E-02 2.47948E-02 1.81627E-01 1.77581E-01 1.89960E-02 5.07958E-02 4.71717E-02 9.17182E-02 -2.29540E-02 -3.43178E-02 -3.96160E-01 -2.94216E-01 -1.78402E-01 -3.30061E-01 -8.38837E-02 9.63431E-02 -1.03441E-02 -1.52108E-01 2.15107E-02 4.23972E-02 6.81619E-02 7.04045E-02 7.72418E-02 -3.28939E-01 -2.58627E-01 -4.76705E-01 -3.71365E-01 1.24086E-02 -1.74581E-02 -2.36239E-01 -8.55916E-02 -2.35547E-01 1.57046E-01 1.84970E-01 1.49690E-01 -1.77802E-02 -FloatFrame 39 -3.85595E00 -8.31982E-01 -2.31727E-01 1.89837E-01 9.04195E-02 3.47348E-01 8.89805E-02 1.15806E-01 2.27742E-01 1.47575E-01 -3.40945E-02 5.09994E-02 1.74619E-01 -9.64312E-01 -5.42083E-01 -2.43366E-01 -2.12491E-01 -4.86641E-02 2.07348E-01 -1.99020E-01 -9.58314E-02 -4.69260E-02 1.51341E-01 -6.65448E-02 1.13517E-01 1.00014E-01 -5.74623E-01 -5.33059E-02 6.48197E-02 3.91887E-01 2.16679E-01 1.01648E-01 -2.37790E-02 1.88727E-01 -3.40051E-02 -1.42479E-01 -5.22490E-02 1.09039E-01 1.82260E-01 -FloatFrame 39 -3.85904E00 -7.04182E-01 -3.06021E-01 -1.35524E-02 1.25969E-01 3.09505E-01 1.88604E-01 4.44587E-02 1.51050E-01 8.22842E-02 1.06286E-01 1.02663E-01 1.34060E-01 -9.70784E-01 -3.47521E-01 -1.13583E-01 6.18253E-02 1.32795E-01 1.97991E-01 -3.41231E-02 3.66188E-02 -1.24944E-02 -1.00082E-01 1.59129E-02 1.79443E-01 2.59501E-01 1.00986E00 6.01028E-01 1.95896E-01 1.68574E-01 2.51785E-02 -2.43901E-01 3.65160E-01 1.35135E-01 -5.56156E-02 -2.57110E-01 1.60690E-01 -1.01391E-01 -2.08785E-01 -FloatFrame 39 -4.21401E00 -9.13485E-01 -2.86187E-01 1.91017E-01 2.16691E-01 3.66868E-01 7.00353E-02 -2.70888E-02 -3.01948E-02 3.38278E-02 5.79062E-02 1.47411E-01 2.28789E-01 4.55441E-02 5.89453E-02 -4.74699E-02 -4.39173E-02 -2.34857E-02 -3.65530E-02 1.66140E-01 3.93032E-02 -1.02542E-01 -1.05769E-01 9.41456E-02 1.21254E-02 -1.08770E-01 6.39198E-01 1.46653E-01 1.11555E-01 -8.99278E-02 -2.70078E-01 -3.41645E-01 -4.71512E-02 2.04565E-03 -6.69711E-03 1.15027E-01 -1.40638E-01 -2.56593E-01 -3.38862E-01 -FloatFrame 39 -4.34124E00 -9.42211E-01 -3.57191E-01 1.36027E-01 1.57590E-01 3.79618E-01 1.43458E-01 5.56148E-02 3.83014E-02 -5.29103E-02 1.07631E-01 1.56489E-01 2.25184E-01 -3.31585E-01 -2.00869E-01 -2.02725E-03 -2.81025E-02 -1.37283E-01 -1.43654E-01 -8.12743E-02 3.86644E-02 -1.91915E-02 1.49451E-02 -1.24725E-01 -7.71500E-02 -7.93603E-02 1.15602E-01 -2.63427E-02 -3.45142E-02 -1.66792E-01 -1.22755E-01 -6.56916E-02 -1.36301E-01 1.72187E-01 3.95432E-01 2.27449E-01 3.24870E-02 -2.40658E-02 -4.94299E-02 -FloatFrame 39 -3.81041E00 -7.73037E-01 -2.79197E-01 1.45920E-01 6.69339E-02 3.10795E-01 2.55120E-01 1.55109E-01 1.25201E-01 4.18056E-02 6.00511E-02 6.31249E-02 6.58486E-02 1.61147E-01 3.26027E-02 -8.19842E-02 -2.10710E-01 -1.46241E-01 -1.02245E-01 2.98392E-02 2.11490E-01 2.92890E-01 1.21680E-01 1.26633E-01 -1.19404E-02 -1.58200E-01 6.32676E-01 3.69562E-01 2.46832E-01 -1.10750E-01 1.73367E-01 8.86471E-02 3.55919E-02 1.91768E-02 2.38567E-01 2.06880E-01 2.24391E-01 3.86406E-02 -1.58478E-02 -FloatFrame 39 -4.19062E00 -9.05051E-01 -3.08049E-01 -4.16548E-02 -1.13131E-02 1.65851E-01 1.07330E-01 8.31231E-02 1.31859E-01 9.72293E-02 -1.84391E-02 2.55133E-02 5.47000E-02 3.01091E-01 1.68693E-01 2.44805E-01 -1.38853E-01 3.60849E-02 -5.50065E-02 -4.56824E-02 5.78412E-02 2.19375E-01 2.21825E-01 9.96663E-02 -3.85095E-02 -9.52081E-02 -5.68069E-01 -1.68661E-01 7.28618E-02 1.43424E-01 3.29270E-01 4.81995E-02 -5.99477E-02 -1.25381E-01 -2.67685E-01 3.79485E-02 -4.61372E-02 9.04906E-02 2.28275E-01 -FloatFrame 39 -4.05286E00 -8.80883E-01 -3.68171E-01 -1.96928E-02 7.04500E-02 2.64623E-01 9.98745E-02 1.84401E-01 2.62696E-01 1.55508E-01 1.84539E-01 1.35471E-01 7.05887E-02 -4.06922E-01 -1.36059E-01 -9.12241E-03 -6.72851E-02 1.83030E-01 -5.40451E-02 -3.01085E-02 8.61089E-02 2.52050E-02 1.59628E-01 8.04954E-02 7.85502E-02 7.00745E-02 -2.05376E-01 -5.79060E-02 -9.92389E-02 3.00729E-01 2.20835E-01 3.10104E-01 1.02432E-01 4.77455E-02 -2.72688E-01 -2.94495E-01 -1.16129E-01 1.52360E-01 -1.75105E-02 -FloatFrame 39 -4.04015E00 -7.73518E-01 -1.12386E-01 -2.82575E-03 1.93675E-01 3.24611E-01 9.77755E-02 1.13456E-01 2.57677E-01 1.68915E-01 2.07297E-01 1.17980E-01 1.29976E-01 9.57154E-02 1.10787E-01 1.45566E-01 1.61876E-01 2.56920E-01 2.55098E-01 5.67494E-02 1.05587E-01 -5.33125E-02 -7.26694E-02 -1.64629E-02 1.13850E-01 -1.12719E-01 1.23834E-01 9.58967E-02 1.71268E-01 2.04348E-01 -1.34868E-01 1.01680E-01 1.22683E-02 -1.74930E-01 -2.01060E-01 -2.51978E-01 -9.60316E-02 -2.19749E-02 -3.68961E-02 -FloatFrame 39 -4.21733E00 -9.09096E-01 -2.88319E-01 7.86348E-02 2.49963E-01 2.56750E-01 2.25012E-01 2.41218E-01 1.50406E-01 2.01434E-01 1.40547E-01 1.41675E-01 1.35923E-01 -2.83089E-01 -4.01619E-02 1.62146E-01 1.37063E-01 4.81619E-02 4.76350E-02 -1.78403E-02 -8.88207E-02 -1.75855E-01 -9.23497E-02 -1.55361E-02 5.65752E-02 3.31784E-02 -2.80967E-01 -2.56609E-01 -3.34274E-01 -3.93322E-02 -3.44201E-01 -2.31150E-01 -1.11286E-02 -2.52605E-01 -2.01612E-01 -9.45555E-02 -1.73381E-01 -1.34669E-01 1.53713E-01 -FloatFrame 39 -4.09491E00 -7.94264E-01 -1.62483E-01 1.20221E-01 2.45606E-01 4.20949E-01 1.64079E-01 1.88710E-01 7.85464E-02 2.45599E-02 -3.49019E-02 1.39363E-01 -5.80186E-02 -1.85252E-01 -1.45823E-01 -1.88708E-01 1.22544E-01 -8.72810E-02 2.39480E-02 4.56208E-02 -1.47018E-01 -2.54925E-01 -1.67225E-01 -1.89844E-01 -2.08193E-02 4.09944E-02 1.86724E-01 -5.96216E-02 -1.64036E-01 -1.27690E-01 -2.01046E-01 -1.40703E-01 -5.79361E-02 -2.18216E-01 1.13845E-03 -2.32425E-02 -1.82036E-01 -3.86734E-03 1.34767E-01 -FloatFrame 39 -4.33595E00 -9.21045E-01 -2.06025E-01 1.17370E-01 1.18612E-01 3.12258E-01 8.20342E-02 9.55804E-02 8.68412E-02 6.31578E-02 1.69003E-01 1.92046E-01 1.03767E-01 -9.63650E-02 -9.97835E-02 -1.89029E-03 9.37313E-03 -1.52884E-01 -9.30679E-02 -7.57763E-02 -3.07036E-01 -1.74716E-01 -1.15592E-01 -1.97572E-01 5.27079E-02 1.67945E-01 -2.97364E-02 1.57812E-01 1.35621E-02 -1.14254E-01 -1.90337E-02 -2.53184E-01 -4.13086E-02 -1.35496E-02 3.34820E-01 3.04360E-01 3.87610E-01 2.21610E-01 2.06129E-01 -FloatFrame 39 -4.22540E00 -9.19340E-01 -3.01094E-01 1.19718E-01 1.06394E-01 3.48559E-01 1.43396E-01 -3.35620E-02 2.75195E-03 1.68993E-03 1.74540E-02 9.71605E-02 1.70970E-01 -2.14988E-01 1.19892E-02 -1.75146E-01 8.28981E-03 -1.06315E-01 -2.29236E-01 4.31218E-03 -1.60568E-01 7.98949E-02 1.37135E-01 1.97766E-01 2.00791E-01 2.47124E-01 1.90113E00 -1.59818E-01 2.71179E-01 2.31637E-03 6.20132E-02 4.08846E-02 -1.26580E-01 4.27361E-01 9.53803E-02 1.06088E-01 3.86045E-02 -2.64837E-01 -2.36709E-01 -FloatFrame 39 -4.31370E00 -1.00888E00 -2.90209E-01 8.80080E-02 9.70794E-02 1.63682E-01 1.49236E-01 -6.58185E-02 -2.43105E-02 8.58416E-02 -5.70256E-02 1.94383E-01 3.03868E-01 1.80476E00 -2.59601E-01 2.69289E-01 1.16895E-02 -9.08707E-02 -5.21833E-02 -2.02356E-01 1.20325E-01 -7.93358E-02 -9.50465E-03 -1.58968E-01 -2.12130E-01 -6.87637E-02 3.38929E00 -9.77150E-01 9.04262E-01 -1.93550E-01 -5.51343E-02 1.76699E-01 -2.34138E-01 3.59212E-01 -5.80831E-02 -8.63305E-02 -2.44060E-01 -3.12170E-01 -4.68870E-01 -FloatFrame 39 -4.30990E00 -7.82275E-01 -3.37629E-01 1.28511E-01 1.39292E-01 1.91713E-01 1.68391E-01 2.81423E-02 1.58441E-01 1.61695E-01 1.62864E-01 3.40154E-01 1.89105E-01 3.17430E00 -9.65161E-01 7.29116E-01 -1.85260E-01 -1.61449E-01 -5.25361E-02 -2.29826E-01 1.98644E-01 2.18118E-02 5.08043E-02 -4.62939E-02 -1.11380E-01 -2.21746E-01 -2.33622E-01 -6.85655E-01 5.16714E-01 -1.62759E-01 7.70637E-02 3.73042E-01 7.41130E-02 2.25508E-01 2.79174E-01 -7.81332E-03 1.73133E-01 1.36381E-01 -9.57032E-02 -FloatFrame 39 -2.53119E00 -1.18065E00 6.32643E-02 1.29060E-01 2.77412E-02 2.60075E-01 -1.20322E-01 2.15906E-01 7.50533E-03 5.36531E-02 1.00350E-02 -2.00836E-02 3.50034E-02 1.57114E00 -9.45256E-01 7.86004E-01 -1.51069E-01 -1.38070E-02 3.20859E-01 -1.28243E-01 3.45833E-01 1.99838E-01 -1.73180E-02 1.41655E-02 -7.57489E-02 -1.64467E-01 -2.70296E00 9.00418E-01 -3.82945E-01 1.64228E-01 2.38657E-01 1.08078E-01 1.76483E-01 -1.65175E-01 -3.63161E-03 -1.07587E-01 -6.67803E-02 -1.44802E-01 2.91747E-01 -FloatFrame 39 -1.05110E00 -1.88450E00 4.28021E-01 -6.55423E-02 -5.50553E-02 2.96023E-01 -8.64294E-02 1.65082E-01 2.45637E-02 5.24942E-02 -2.88399E-02 -1.42192E-02 -5.07762E-02 4.71344E-01 -6.47429E-02 3.46171E-01 -2.10319E-02 7.72083E-02 5.55419E-02 -5.33423E-02 3.34695E-02 1.81802E-02 -5.67823E-02 -1.13074E-01 -2.56182E-01 7.00012E-02 -2.64029E00 1.47838E00 -8.68438E-01 1.23250E-01 1.48193E-01 -4.63399E-01 3.63212E-01 -4.07789E-01 -6.23080E-02 3.47988E-02 1.18863E-02 1.48787E-01 1.74575E-01 -FloatFrame 39 -2.74256E00 -1.95414E00 4.95794E-01 -6.30613E-02 8.32724E-02 4.84541E-01 2.09926E-02 2.80014E-01 1.75528E-01 6.85236E-02 -4.28601E-02 1.18634E-01 1.39401E-01 -1.06915E00 5.33128E-01 -8.24343E-02 -2.78188E-02 1.34386E-01 -1.42539E-01 2.34969E-01 -6.19566E-02 1.37530E-01 1.74808E-02 2.60518E-02 7.30381E-02 1.01084E-02 -3.60774E00 1.09437E00 -1.02362E00 2.36519E-01 -4.44326E-03 -1.08058E-01 2.28436E-01 -6.58835E-03 1.93308E-01 1.26604E-01 1.70770E-01 3.26877E-01 1.56720E-01 -FloatFrame 39 -3.83855E00 -8.47018E-01 8.54172E-03 1.07479E-01 2.16500E-01 2.47255E-01 1.15049E-01 6.16118E-02 1.76621E-01 1.04912E-01 4.97904E-02 8.39725E-02 2.59106E-01 -3.13640E00 1.02962E00 -6.77446E-01 2.15487E-01 7.27650E-02 -5.25158E-02 1.75094E-01 2.68812E-02 2.11488E-01 6.98212E-02 5.76962E-02 7.06957E-02 2.26721E-01 -2.60128E-01 6.88880E-01 -5.20149E-01 3.15860E-01 -6.28673E-02 -8.15131E-02 -1.89768E-01 -2.20990E-01 -1.11510E-01 -4.83968E-02 8.41607E-02 -6.35220E-02 -1.37787E-02 -FloatFrame 39 -3.60033E00 -6.47518E-01 -1.91699E-02 1.01241E-01 1.62127E-01 1.17535E-01 1.14647E-01 1.53949E-01 1.45036E-01 7.11339E-02 3.60868E-02 5.29545E-02 4.51118E-02 -1.32927E00 1.22201E00 -6.02583E-01 2.88041E-01 7.15190E-02 -2.24053E-01 4.52011E-02 -2.82946E-01 2.60208E-02 -3.09160E-02 1.10213E-01 9.51608E-03 -3.67029E-03 2.90312E00 -9.14732E-01 5.62116E-01 -9.79860E-02 -1.34474E-01 6.57491E-02 -2.23949E-01 -9.14249E-02 -1.86561E-01 -1.37126E-01 -4.01341E-02 -2.65182E-02 -3.50096E-01 -FloatFrame 39 -4.18750E00 -8.54879E-01 -2.49425E-01 1.49945E-01 1.77097E-02 2.43508E-01 8.86646E-02 1.91963E-01 2.36052E-01 1.22315E-01 2.88563E-02 5.64765E-02 1.75945E-01 -2.33280E-01 1.14890E-01 -1.15330E-01 1.17501E-01 -6.17086E-02 1.32334E-02 -4.88555E-02 -6.45438E-02 2.49272E-02 -6.73048E-02 1.75621E-02 4.41776E-02 -1.23375E-01 8.57777E-01 -1.30662E00 5.14964E-01 -1.64302E-01 -7.88550E-02 3.67006E-01 -9.36545E-02 1.26065E-01 3.04921E-02 -2.61031E-03 -7.89469E-02 6.56795E-02 9.42896E-02 -FloatFrame 39 -4.07183E00 -7.32127E-01 -1.06789E-01 2.24980E-01 1.54791E-01 2.60489E-01 6.61936E-02 -2.93198E-03 2.01549E-01 3.76076E-02 6.73525E-02 1.28150E-01 1.35731E-01 -4.71498E-01 -8.46096E-02 -8.76188E-02 1.23739E-01 -7.33607E-03 1.42953E-01 -4.84535E-02 -1.56881E-01 5.65129E-02 -3.35263E-02 3.12656E-02 7.51956E-02 9.06193E-02 3.48944E-01 7.86116E-03 2.57967E-01 -4.24656E-02 1.98790E-01 3.74778E-03 2.63845E-02 -1.30352E-01 -5.94308E-02 -1.74030E-02 2.09341E-02 2.74960E-02 8.31616E-02 -Signal: SpeechEndSignal -Signal: SpeechStartSignal -FloatFrame 39 -4.07183E00 -7.32127E-01 -1.06789E-01 2.24980E-01 1.54791E-01 2.60489E-01 6.61936E-02 -2.93198E-03 2.01549E-01 3.76076E-02 6.73525E-02 1.28150E-01 1.35731E-01 1.15664E-01 1.22751E-01 1.42637E-01 7.50354E-02 1.37082E-01 1.69811E-02 -2.24710E-02 -1.94895E-01 -3.45036E-02 -8.47078E-02 3.84962E-02 7.16736E-02 -4.02137E-02 2.56435E-01 3.01708E-02 4.98204E-03 -2.51990E-01 -8.37593E-02 -2.48536E-01 3.22535E-02 2.39961E-01 -8.70324E-02 -4.89779E-03 -6.87926E-02 -5.85120E-02 -1.65779E-01 -FloatFrame 39 -4.07183E00 -7.32127E-01 -1.06789E-01 2.24980E-01 1.54791E-01 2.60489E-01 6.61936E-02 -2.93198E-03 2.01549E-01 3.76076E-02 6.73525E-02 1.28150E-01 1.35731E-01 -2.15063E-01 -5.44388E-02 -8.26368E-02 -1.28251E-01 -9.10954E-02 -1.05583E-01 -1.61999E-02 8.30798E-02 -3.05195E-02 -3.84241E-02 -3.75270E-02 1.66836E-02 -7.51597E-02 -2.54527E-01 -1.86522E-01 -1.76072E-01 -2.78356E-01 -1.60700E-01 2.93216E-02 9.46985E-02 2.12169E-01 3.56269E-03 9.88184E-02 -3.48170E-02 -1.62522E-01 -4.06314E-02 -FloatFrame 39 -4.07183E00 -7.32127E-01 -1.06789E-01 2.24980E-01 1.54791E-01 2.60489E-01 6.61936E-02 -2.93198E-03 2.01549E-01 3.76076E-02 6.73525E-02 1.28150E-01 1.35731E-01 -1.38863E-01 -6.37705E-02 -3.34350E-02 -2.03321E-01 -2.36183E-02 4.63028E-02 7.22275E-02 1.72735E-02 -3.09409E-02 1.41106E-02 3.67923E-03 -9.08486E-02 -8.08451E-02 1.98518E-01 1.14021E-02 1.11047E-02 -6.29584E-02 -5.12935E-02 8.34940E-02 1.76570E-01 -7.77802E-02 -5.71148E-02 1.45448E-01 2.01456E-01 7.44581E-02 -1.65227E-02 -FloatFrame 39 -4.28689E00 -7.86566E-01 -1.89425E-01 9.67291E-02 6.36960E-02 1.54906E-01 4.99937E-02 8.01478E-02 1.71029E-01 -8.16576E-04 2.98255E-02 1.44834E-01 6.05714E-02 -1.65456E-02 -4.30366E-02 -7.15320E-02 -1.91209E-01 -1.42389E-01 -2.20886E-02 1.60370E-01 5.29958E-03 -8.76343E-02 1.07024E-01 1.63929E-01 9.11417E-02 -9.16824E-02 -1.99103E-01 -2.29163E-01 -8.33766E-02 -6.17762E-03 -5.42578E-02 2.49027E-02 7.79846E-02 9.02811E-02 4.03504E-02 1.90784E-02 1.33173E-01 1.71208E-01 2.65197E-02 -FloatFrame 39 -4.21069E00 -7.95898E-01 -1.40224E-01 2.16595E-02 1.31173E-01 3.06791E-01 1.38421E-01 1.43415E-02 1.70608E-01 5.17181E-02 7.10317E-02 3.73015E-02 5.48861E-02 -3.37965E-01 -2.92933E-01 -1.16812E-01 -2.09498E-01 -7.78761E-02 7.12055E-02 1.50212E-01 1.07555E-01 9.40955E-03 3.31889E-02 1.36852E-01 8.03598E-02 -5.43254E-02 -6.53241E-02 5.35567E-02 1.59707E-01 1.77180E-01 2.09098E-01 2.02328E-01 1.34066E-01 1.47539E-01 2.01912E-01 7.00214E-02 -1.00431E-01 -2.23130E-03 7.81905E-02 -FloatFrame 39 -4.08838E00 -7.75164E-01 -1.78321E-01 3.37707E-02 1.24026E-02 2.38400E-01 2.26564E-01 2.36760E-03 1.13914E-01 1.44632E-01 2.31282E-01 2.19292E-01 4.40487E-02 -8.18697E-02 1.05201E-02 8.81749E-02 -1.40294E-02 6.67088E-02 1.80239E-01 2.94437E-01 1.52839E-01 1.14277E-01 1.77045E-01 6.34986E-02 8.89104E-02 -1.34919E-02 2.07406E-01 2.17230E-01 1.26866E-01 2.78929E-01 3.86485E-02 -4.36961E-02 -1.46110E-01 3.49952E-02 1.38949E-02 -2.53560E-02 -1.32408E-01 1.21088E-01 8.60761E-02 -FloatFrame 39 -4.40980E00 -1.02506E00 -2.23600E-01 1.54819E-02 7.69153E-02 3.31694E-01 2.16406E-01 1.04623E-01 2.10958E-01 7.07965E-02 2.04205E-01 2.08510E-01 8.14057E-02 -1.30559E-01 -7.57037E-02 1.00548E-02 6.94307E-02 -3.92276E-02 2.75094E-02 4.10219E-03 1.42550E-01 2.33044E-02 7.83291E-03 4.44450E-03 2.01448E-01 3.17507E-02 3.62213E-01 2.03274E-01 1.07965E-01 1.96765E-01 1.58530E-01 -8.01135E-02 -1.84148E-01 8.64775E-03 -8.86472E-02 -3.53209E-01 -2.81809E-01 -1.21689E-01 1.52870E-01 -FloatFrame 39 -4.36876E00 -7.76046E-01 -1.01251E-01 8.26997E-02 1.30405E-01 3.35145E-01 3.44430E-01 2.32987E-01 2.85306E-01 1.76229E-01 9.33241E-02 2.33744E-01 4.70795E-02 2.80343E-01 2.13794E-01 1.96140E-01 1.82735E-01 2.25239E-01 1.00125E-01 1.10288E-01 1.61486E-01 2.56301E-02 -1.76164E-01 -2.18310E-01 -3.27786E-02 1.39379E-01 2.16874E00 1.21393E00 1.67579E-01 3.57793E-01 2.74178E-01 -2.95192E-01 6.23123E-02 -2.56502E-01 -4.74188E-01 -2.41706E-01 -6.25032E-02 -3.69010E-01 -1.74118E-02 -FloatFrame 39 -4.34125E00 -8.71602E-01 -1.30169E-01 9.10902E-02 9.19454E-02 3.34301E-01 1.42523E-01 1.56891E-01 1.93912E-01 5.95510E-02 7.54762E-02 2.38749E-01 8.66367E-02 2.03818E00 1.13823E00 1.77633E-01 4.27224E-01 2.34951E-01 -2.67683E-01 6.64145E-02 -1.13952E-01 -4.50884E-01 -2.33873E-01 -5.80587E-02 -1.67562E-01 1.43388E-02 1.00259E00 3.20828E-01 3.75775E-03 4.88054E-02 -1.06058E-01 -1.55522E-01 -1.52202E-01 -3.01253E-01 -4.15105E-01 -3.11520E-02 2.34572E-01 -2.47609E-01 -1.85950E-01 -FloatFrame 39 -3.80803E00 -5.61370E-01 1.78193E-02 2.16506E-01 2.37641E-01 3.38525E-01 3.36852E-01 1.63854E-01 1.39544E-01 -3.15324E-02 1.29714E-02 1.86513E-01 1.83427E-01 1.28293E00 5.34621E-01 1.99898E-01 2.31541E-01 1.19181E-01 -5.53967E-02 -4.19135E-02 -1.39767E-01 -3.89475E-01 -2.07316E-01 1.62620E-02 -2.80388E-01 -4.65717E-02 2.64767E-01 -8.92317E-01 -5.06178E-02 -7.46553E-02 4.09411E-02 1.17581E-01 -3.21562E-01 6.00823E-02 2.47696E-01 2.53960E-01 -1.32330E-01 -4.11741E-03 -3.74740E-02 -FloatFrame 39 -2.37162E00 1.13167E-01 -4.59669E-02 4.42706E-01 3.11866E-01 6.40115E-02 2.82820E-01 -9.32932E-03 -2.39925E-01 -1.63076E-01 1.46146E-01 4.09478E-02 9.57446E-02 2.30294E00 2.45911E-01 1.27016E-01 3.52569E-01 2.75892E-01 -1.50102E-01 -2.55148E-01 -5.38696E-02 -2.03187E-01 2.00867E-02 -1.90389E-01 -1.71680E-01 -2.31352E-02 4.34788E00 2.53744E-02 -6.06199E-01 1.20695E-01 -4.42336E-01 -3.44351E-01 -5.79432E-01 -1.08723E-01 3.01146E-01 4.44522E-01 -9.65122E-02 4.91429E-02 -2.27448E-04 -FloatFrame 39 -3.08583E00 -2.41425E-01 9.86472E-02 3.14240E-01 2.49586E-01 2.79748E-01 3.02517E-01 9.32200E-02 -1.04168E-01 -3.10871E-02 1.09586E-01 -4.66436E-02 5.07789E-04 5.63081E00 5.59996E-01 -4.06301E-01 3.52236E-01 -3.23155E-01 -3.99747E-01 -6.21346E-01 -2.48489E-01 -8.83292E-02 2.37206E-01 -8.02502E-02 -2.31245E-01 -4.67991E-02 2.46099E00 8.77465E-02 -6.93629E-01 -4.41177E-01 -6.16125E-01 -1.90386E-01 -3.00983E-01 -2.57660E-03 5.59646E-01 3.96364E-01 8.72992E-03 3.56589E-02 1.18223E-01 -FloatFrame 39 -2.03831E00 -6.25690E-01 -3.15329E-03 4.43659E-01 3.67837E-01 1.84199E-01 -1.12624E-01 1.03022E-01 -9.27478E-03 7.96377E-02 -1.14913E-01 6.70700E-02 6.35015E-02 4.76393E00 3.33658E-01 -5.66613E-01 -8.86079E-02 -3.40233E-01 -3.40488E-01 -5.56131E-01 -5.64462E-02 3.56459E-01 4.16450E-01 -1.81659E-01 -1.36021E-01 9.50874E-02 6.96489E-01 2.13187E-01 -3.77669E-01 -5.65651E-01 1.43001E-02 -6.54006E-02 1.30428E-01 1.26586E-02 2.86507E-01 2.59393E-01 -1.94808E-01 2.95623E-01 6.07969E-02 -FloatFrame 39 1.82278E00 -1.37459E-03 -3.88482E-01 5.68742E-01 -8.55142E-02 -6.12218E-02 -2.84493E-01 -8.46350E-02 5.12153E-02 2.05674E-01 -6.72788E-02 -4.47317E-02 1.36628E-01 6.32730E00 7.73183E-01 -7.83971E-01 -2.13415E-01 -3.08855E-01 -4.65148E-01 -4.90918E-01 -2.35831E-01 1.98178E-01 4.96599E-01 -2.75058E-01 6.43781E-02 1.39977E-02 9.95131E-01 8.61124E-01 -2.29332E-01 -4.08015E-01 -6.09845E-02 -5.23319E-02 4.98251E-01 -6.44093E-02 -2.88461E-01 -4.28886E-02 1.39101E-01 1.32898E-01 -2.48537E-01 -FloatFrame 39 2.39231E00 4.46825E-01 -6.12580E-01 3.54098E-01 -2.83672E-02 -2.76477E-01 -2.73310E-01 -6.57756E-02 1.16534E-01 2.53374E-01 -3.55131E-02 -9.50728E-02 1.90832E-01 5.75906E00 1.19478E00 -7.95945E-01 -4.96623E-01 -4.01218E-01 -3.92820E-01 -5.78793E-02 -1.20856E-01 6.79983E-02 3.73562E-01 -4.25583E-02 -3.12296E-03 -1.53450E-01 -4.13330E00 -2.06116E-01 3.47129E-01 -5.62447E-01 3.69858E-01 4.06193E-01 6.29077E-01 2.76707E-01 -1.21450E-01 -2.74388E-01 2.42202E-01 3.79549E-02 -3.30981E-01 -FloatFrame 39 3.24147E00 5.31758E-01 -6.85324E-01 1.00825E-01 -5.92695E-02 -1.85400E-01 -1.88401E-01 -1.42611E-01 9.40095E-02 4.65512E-01 -1.65472E-01 1.77345E-02 1.45055E-02 2.19400E00 5.67067E-01 -4.36841E-01 -7.75862E-01 6.10033E-02 -5.89549E-02 1.38159E-01 4.08765E-02 7.67283E-02 2.22211E-01 -3.28566E-02 1.02333E-01 -3.16983E-01 -4.06157E00 -1.03572E00 5.85395E-01 -1.49159E-01 3.99431E-01 5.50314E-01 3.04928E-01 1.13501E-01 -1.72180E-01 -3.88845E-02 -4.53395E-02 1.58449E-01 -2.93276E-01 -FloatFrame 39 3.72075E00 5.69091E-01 -7.99098E-01 -5.29641E-02 -3.33805E-02 -2.08621E-01 -1.70504E-01 -1.78338E-02 5.87236E-02 4.53200E-01 -1.57471E-01 6.39470E-02 -8.99485E-02 1.69749E00 1.59064E-01 -2.10550E-01 -6.45782E-01 -1.78687E-03 1.57494E-01 2.47049E-01 -7.35437E-03 -1.04182E-01 3.34677E-01 -8.78978E-02 1.55326E-01 -4.46726E-01 -1.15237E00 -6.29017E-01 4.09145E-01 2.83148E-01 -3.08140E-02 1.92231E-01 8.48817E-03 4.90116E-02 -2.03704E-01 -4.85530E-02 7.96683E-02 -1.46744E-01 1.22231E-01 -FloatFrame 39 4.01678E00 5.65692E-01 -8.25324E-01 -2.07121E-01 -2.45110E-02 -1.20177E-01 -1.46334E-01 -4.37585E-02 1.27944E-01 4.27885E-01 -1.00135E-01 5.76013E-02 -1.80355E-01 1.04164E00 -6.19502E-02 -2.76961E-02 -4.92715E-01 3.01892E-02 1.33276E-01 1.46647E-01 8.98882E-02 -1.26976E-01 1.73658E-01 4.68117E-02 -4.44115E-02 -1.94752E-01 -1.12259E00 -2.64087E-01 2.43529E-01 3.96395E-01 8.31472E-03 1.48384E-03 -1.84750E-01 1.59670E-02 -2.24898E-03 -1.38593E-01 1.24389E-01 -2.73417E-01 3.73075E-01 -FloatFrame 39 4.08981E00 6.05889E-01 -8.23130E-01 -2.91684E-01 -3.01541E-02 -1.18982E-01 -2.62613E-02 -7.31299E-02 1.23525E-02 5.88051E-01 -1.23411E-01 6.02530E-02 -2.55894E-01 5.74905E-01 -1.05023E-01 3.29791E-02 -2.49386E-01 6.52785E-03 1.58978E-01 6.22987E-02 8.61267E-03 -1.06431E-01 1.96085E-01 3.64912E-02 -1.18091E-01 -7.36511E-02 -7.98673E-01 -6.18745E-02 1.30506E-01 3.71632E-01 3.61890E-02 -5.36161E-02 -2.23860E-01 -1.30395E-02 3.80799E-02 -1.83488E-02 -7.56702E-02 -4.51942E-02 2.12272E-01 -FloatFrame 39 4.28310E00 4.69808E-01 -7.13020E-01 -3.91889E-01 -2.90802E-02 -5.21236E-02 -4.17537E-02 -5.27223E-02 -3.29663E-02 6.39171E-01 -1.18661E-01 -2.66769E-02 -1.80246E-01 2.42964E-01 -1.23825E-01 1.02809E-01 -1.21082E-01 6.63783E-02 7.96598E-02 -7.72134E-02 7.68486E-02 -8.88959E-02 1.55310E-01 -2.88585E-02 -8.96056E-02 1.75209E-02 -4.93405E-01 -4.88738E-02 4.96987E-02 2.61080E-01 1.85529E-01 -1.45986E-01 -4.24836E-01 2.15824E-01 1.74085E-01 -2.99502E-01 3.28992E-02 -4.70503E-02 2.28442E-01 -FloatFrame 39 4.29566E00 4.64068E-01 -7.66119E-01 -3.02351E-01 -2.68527E-02 -4.96424E-02 -1.08205E-01 -9.22114E-03 -4.77071E-02 6.49284E-01 -1.20980E-01 -5.41445E-02 -1.63600E-01 8.14999E-02 -1.53897E-01 8.26778E-02 1.16930E-02 1.92057E-01 1.29926E-02 -3.62537E-01 2.24437E-01 6.76546E-02 -1.03418E-01 6.93903E-02 -1.65142E-01 1.54790E-01 -3.65170E-01 -9.04061E-03 -4.58524E-02 3.04252E-01 1.23948E-01 -1.58637E-01 -2.97578E-01 7.80994E-02 2.64832E-01 -3.17506E-01 -2.46528E-03 3.27775E-02 1.35057E-01 -FloatFrame 39 4.25974E00 4.41868E-01 -7.22514E-01 -3.28203E-01 4.18673E-02 -4.05169E-02 -2.23548E-01 3.30902E-02 3.90477E-02 5.83195E-01 -1.28994E-01 -3.20043E-02 -1.62834E-01 -1.22207E-01 -1.32865E-01 5.69570E-02 1.83169E-01 1.90326E-01 -7.89774E-02 -3.74792E-01 1.54948E-01 1.75936E-01 -1.62196E-01 -3.13238E-02 -5.68281E-02 1.52578E-01 -3.48769E-01 -7.24106E-02 8.46518E-02 2.89524E-01 -1.28202E-01 -2.21437E-02 1.28369E-02 -1.64228E-01 1.70793E-01 -1.58266E-01 -3.08253E-02 7.65361E-03 1.72455E-01 -FloatFrame 39 4.17131E00 4.51991E-01 -7.40452E-01 -2.79991E-01 1.61903E-01 -1.05990E-01 -3.88798E-01 1.51307E-01 8.00072E-02 4.84634E-01 -5.40206E-02 -1.04889E-01 -1.01103E-01 -2.67270E-01 -2.26308E-01 1.67330E-01 3.01217E-01 6.38551E-02 -9.15118E-03 -3.49700E-01 6.02086E-02 2.38448E-01 -2.61683E-01 3.85650E-02 -1.57488E-01 3.27245E-01 -1.25897E00 3.74419E-02 1.40791E-01 1.54397E-01 -1.04148E-01 7.43795E-02 1.62491E-01 -2.05980E-01 -9.77301E-02 -2.72831E-02 1.41229E-01 -1.80932E-01 2.18700E-01 -FloatFrame 39 4.16090E00 3.36943E-01 -6.56063E-01 -2.08720E-01 1.61246E-01 -1.31101E-01 -4.16546E-01 1.02226E-01 1.42969E-01 4.76974E-01 -1.49984E-01 -8.35050E-02 -2.76680E-02 -1.38117E00 -9.54233E-02 1.97748E-01 3.37566E-01 8.61782E-02 -4.59787E-03 -2.12300E-01 -5.10321E-02 7.82056E-02 -1.89480E-01 1.09905E-01 -2.37760E-01 3.71278E-01 -3.56874E00 6.12101E-02 1.43158E-01 3.57729E-01 3.19136E-01 -8.44561E-02 7.76632E-01 -2.61773E-01 -4.70870E-01 7.40685E-03 -8.02806E-02 1.41212E-01 -1.72443E-01 -FloatFrame 39 4.02839E00 2.37760E-01 -5.98790E-01 -1.13393E-03 3.70024E-02 -5.87936E-02 -4.57905E-01 5.09874E-02 1.90740E-01 3.87601E-01 -8.24150E-02 -2.11633E-01 1.63646E-01 -3.83601E00 -1.65098E-01 3.10488E-01 6.58946E-01 3.82991E-01 -9.36073E-02 4.26932E-01 -2.01565E-01 -2.32423E-01 -2.54277E-01 -4.17156E-02 -1.62765E-02 1.54802E-01 -2.45044E00 -1.46103E-01 5.73198E-02 3.85670E-01 1.76394E-01 8.95672E-02 6.64006E-01 -2.69162E-01 -1.32765E-01 -2.27927E-01 -1.12532E-01 1.95822E-01 -3.61496E-01 -FloatFrame 39 2.87857E00 3.46444E-01 -5.24766E-01 9.36316E-03 1.28046E-01 -4.51148E-02 -4.35848E-01 -1.79419E-02 1.17253E-01 3.93715E-01 -1.90884E-02 -2.69764E-01 2.08444E-01 -3.83162E00 -2.41526E-01 2.55068E-01 7.23236E-01 2.62572E-01 8.49693E-02 4.51706E-01 -3.20194E-01 -5.45591E-02 -4.17407E-01 -2.62643E-03 -4.19386E-02 9.78224E-03 1.67617E00 1.93310E-02 -4.30275E-01 -7.66850E-02 -3.59479E-01 2.03532E-01 -7.47904E-02 -4.48309E-01 3.04313E-01 -1.79430E-02 2.46191E-02 7.11021E-02 -3.02682E-01 -FloatFrame 39 3.35298E-01 2.86894E-01 -4.29965E-01 3.78955E-01 5.44894E-01 -1.99597E-01 3.81338E-02 -5.02578E-02 -1.52415E-01 2.30357E-01 -9.57362E-02 -1.21165E-01 5.36988E-02 -2.15984E00 -1.45767E-01 -1.19788E-01 5.82261E-01 2.35117E-02 1.09924E-01 3.52142E-01 -6.49874E-01 7.18909E-02 -2.72220E-01 -1.70964E-02 5.48256E-02 -1.47880E-01 3.93135E00 5.08164E-01 -7.49833E-01 -3.03607E-01 -3.63171E-01 -1.89870E-01 -1.37137E-01 -5.00418E-02 2.27877E-01 3.22917E-01 -2.10301E-01 1.07267E-01 -6.34555E-04 -FloatFrame 39 3.29278E-01 9.54165E-02 -4.00995E-01 5.14516E-01 4.23818E-01 -4.61317E-02 3.51601E-02 -2.17968E-01 8.84104E-02 5.95676E-02 -1.52611E-01 -1.25444E-01 -1.78858E-02 9.97307E-02 2.66637E-01 -4.94765E-01 4.19629E-01 -1.00599E-01 -1.04901E-01 3.14569E-01 -3.70236E-01 1.73318E-01 -9.44891E-02 -2.12927E-01 6.53288E-02 9.14769E-03 5.01504E00 4.76711E-01 -4.71094E-01 -5.79777E-01 -5.81674E-01 -9.08202E-02 -5.50984E-01 4.27450E-01 3.29286E-01 4.08229E-01 -1.50011E-01 -1.59399E-02 1.08290E-01 -FloatFrame 39 1.86855E00 9.19933E-02 -7.18577E-01 5.81127E-01 6.05141E-02 5.11308E-02 -1.05763E-01 -5.98887E-01 2.62631E-01 1.15381E-01 -9.95114E-02 -1.56807E-01 1.57656E-02 2.85520E00 3.30944E-01 -5.90882E-01 2.48362E-03 -5.58162E-01 1.91041E-02 -1.98842E-01 -2.22424E-01 4.01177E-01 1.36010E-01 -1.67107E-01 3.88856E-02 -3.95903E-02 2.62553E00 3.59697E-01 -6.89600E-02 -7.60949E-01 -2.95756E-01 4.11078E-02 -4.59985E-01 3.34638E-01 -2.31268E-01 5.41277E-01 1.72784E-01 -4.07231E-02 -9.10941E-02 -FloatFrame 39 2.97830E00 6.13082E-01 -1.01953E00 4.28992E-01 2.74467E-02 -1.50016E-01 -1.21279E-01 -3.88178E-01 2.90572E-01 2.99226E-01 -2.32016E-01 -2.04436E-01 2.17592E-01 2.72526E00 6.26334E-01 -5.63725E-01 -3.41320E-01 -3.96355E-01 -6.37931E-02 -1.45416E-01 -3.55978E-02 -5.79497E-02 4.46788E-01 -4.01435E-02 2.46057E-02 -8.19465E-02 -1.96519E00 4.03001E-01 5.32797E-01 -6.51795E-01 5.01065E-01 -2.24825E-02 1.60247E-01 7.03139E-01 -8.95983E-01 2.56944E-01 2.76719E-01 -4.98726E-02 3.77211E-02 -FloatFrame 39 3.19050E00 6.17838E-01 -1.02085E00 3.81439E-01 -1.32686E-02 -1.80493E-01 -1.60709E-01 -2.72682E-01 2.48761E-01 3.66367E-01 -2.62843E-01 -8.22797E-02 1.41085E-02 8.90009E-01 7.33945E-01 -5.80846E-02 -6.49312E-01 -5.70971E-02 -3.37839E-03 -3.85953E-02 4.80715E-01 -4.94806E-01 3.92954E-01 1.09612E-01 -1.09870E-02 -1.86920E-03 -3.35465E00 -2.79123E-01 8.95216E-01 -8.56512E-02 1.72284E-01 3.10461E-01 2.58973E-01 2.73353E-01 -4.56306E-01 -3.87898E-01 2.48910E-01 2.36658E-01 -1.37265E-01 -FloatFrame 39 3.05454E00 7.21751E-01 -9.64720E-01 1.73196E-01 2.74633E-02 -1.09925E-01 -1.10256E-01 -2.53566E-01 3.04607E-02 5.06356E-01 -1.92754E-01 -1.00838E-01 -9.98322E-02 -6.29382E-01 3.47211E-01 3.31490E-01 -4.26971E-01 -2.24071E-01 2.46668E-01 1.13557E-01 2.37755E-01 -5.14256E-01 5.88903E-02 2.08767E-01 2.61263E-01 -2.19212E-01 -2.08666E00 -2.89399E-01 4.89124E-01 3.15104E-01 -3.16928E-01 3.93492E-01 2.65028E-01 -3.84677E-01 6.22798E-02 -6.31262E-01 1.32490E-01 2.48484E-01 3.29505E-02 -FloatFrame 39 2.75856E00 8.25939E-01 -7.76662E-01 -6.81847E-02 3.41699E-03 4.77524E-02 -1.44359E-01 -1.18171E-01 -2.32175E-01 5.08335E-01 1.01002E-02 -1.67794E-01 1.38964E-02 -1.19665E00 4.44546E-01 4.31040E-01 -3.34207E-01 -3.74026E-01 3.90114E-01 2.26433E-01 9.60382E-02 -4.32526E-01 -2.38309E-01 2.42102E-01 2.37497E-01 3.10813E-02 -8.16825E-01 1.04865E-01 1.16290E-01 3.41635E-01 -2.09965E-01 -1.74260E-02 2.05341E-01 -1.88504E-01 3.66608E-01 -6.09379E-01 -1.04786E-01 -7.07399E-03 4.19523E-01 -FloatFrame 39 2.34892E00 9.60293E-01 -6.88041E-01 2.02113E-03 -1.96625E-01 9.66523E-02 -7.72223E-03 -1.50423E-01 -2.23685E-01 3.58116E-01 -2.32488E-02 5.68277E-02 -1.62007E-03 -1.44621E00 4.52076E-01 4.47781E-01 -8.53358E-02 -4.34036E-01 2.29242E-01 3.18898E-01 4.92508E-02 -1.47648E-01 -5.50489E-01 1.03981E-01 2.54189E-01 2.00311E-01 -1.23115E-01 -1.34083E-01 -3.56114E-03 4.76453E-01 -6.10683E-02 -3.01712E-01 7.08460E-02 -9.22789E-02 6.04120E-01 -5.28734E-01 -2.97368E-01 -3.49878E-02 1.21073E-01 -FloatFrame 39 1.99385E00 1.06238E00 -5.89806E-01 4.72312E-02 -3.87294E-01 2.09621E-01 6.57242E-02 -1.76644E-01 -1.83765E-01 1.28058E-01 -2.07419E-02 1.55217E-01 4.51898E-02 -1.31977E00 3.10463E-01 4.27479E-01 1.42245E-01 -4.35094E-01 8.84018E-02 2.97279E-01 3.75928E-03 1.71594E-01 -7.67043E-01 -5.52665E-02 2.02509E-01 1.52155E-01 3.79087E-01 -3.26643E-01 2.74818E-03 2.44861E-01 2.44029E-01 -2.68134E-01 -1.85325E-01 6.53598E-02 2.57782E-01 -9.05306E-02 -1.97393E-01 -3.05870E-01 -1.38322E-01 -FloatFrame 39 1.60834E00 1.17383E00 -5.16939E-01 8.78602E-02 -4.06573E-01 1.19317E-01 2.08642E-01 -2.04315E-01 -1.17187E-01 -4.41330E-02 -8.87736E-02 1.53351E-01 1.00479E-01 -1.06712E00 1.25433E-01 4.50529E-01 1.59525E-01 -1.90007E-01 -3.88916E-02 1.33573E-01 1.14611E-01 1.10134E-01 -6.41019E-01 -9.34126E-02 -5.16807E-02 6.19887E-02 6.16712E-01 -3.48440E-01 -8.61135E-02 2.58635E-02 5.89529E-01 -3.19335E-01 -1.08263E-01 4.87075E-02 -1.50829E-01 3.17870E-01 -3.11009E-02 -3.11040E-01 -2.83999E-01 -FloatFrame 39 1.43880E00 1.13640E00 -3.49183E-01 7.40607E-02 -4.31677E-01 1.36154E-01 1.52920E-01 -1.14412E-01 -6.05807E-02 -2.58708E-01 -4.51663E-02 3.47147E-02 1.66051E-01 -7.03053E-01 -3.79775E-02 3.41365E-01 1.68109E-01 1.54435E-01 -2.30933E-01 1.89016E-01 5.24668E-02 2.07645E-02 -4.49173E-01 -8.63674E-02 -1.08531E-01 -1.31844E-01 9.78649E-01 -4.86827E-01 -3.01523E-01 1.92108E-01 4.20328E-01 4.31264E-02 -1.65424E-01 -1.04526E-01 -2.60581E-01 4.81202E-01 2.24960E-01 -4.83971E-02 -4.99464E-01 -FloatFrame 39 1.28180E00 1.08573E00 -2.37512E-01 1.61546E-01 -3.86632E-01 5.77607E-02 1.25851E-01 -3.58120E-02 -1.13550E-01 -2.82903E-01 -1.16661E-01 5.14703E-03 6.03687E-02 -8.84708E-02 -3.61394E-01 1.49006E-01 3.51633E-01 2.30321E-01 4.23486E-03 -3.18511E-02 1.00849E-02 -1.50446E-01 -1.59817E-01 1.31547E-01 -1.00078E-01 -4.37475E-01 9.32306E-01 -5.94803E-01 -3.46155E-01 2.15135E-01 4.01122E-01 2.96359E-01 -2.76354E-01 -2.66106E-01 -7.40200E-02 6.31278E-01 2.48111E-01 -1.50284E-02 -5.08259E-01 -FloatFrame 39 1.29080E00 1.02441E00 -2.48441E-01 2.15340E-01 -2.32859E-01 -2.13120E-02 2.54740E-01 -1.24177E-01 -1.63001E-01 -3.21115E-01 -1.07109E-01 4.66859E-02 -8.66546E-02 2.29253E-01 -6.32780E-01 -4.79026E-03 3.83244E-01 5.55557E-01 6.54259E-02 -8.73377E-02 -2.13640E-01 -5.32555E-02 1.82105E-01 1.61744E-01 -1.23559E-01 -6.40103E-01 -4.44639E-02 -7.82097E-01 9.73670E-02 -6.27052E-02 2.87360E-01 3.99330E-01 -3.20604E-01 -2.36384E-01 2.46003E-01 4.01440E-01 2.41601E-02 -1.02982E-01 -3.96102E-02 -FloatFrame 39 1.51987E00 8.12432E-01 -3.67934E-01 4.39493E-01 -1.76252E-01 1.23552E-01 1.76791E-01 -1.94230E-01 -2.67634E-01 -2.03950E-01 4.27735E-02 5.32737E-02 -3.36997E-01 -1.32935E-01 -1.14349E00 2.46373E-01 2.88928E-01 5.17681E-01 4.03565E-01 -3.52455E-01 -2.26299E-01 9.55570E-02 2.41623E-01 1.55707E-01 -2.03060E-01 -4.77086E-01 -1.30498E00 -9.41999E-01 1.77904E-01 -5.33932E-01 -3.22307E-01 3.09763E-01 -5.70375E-01 7.48197E-01 4.51939E-01 1.12294E-01 -2.15689E-03 2.02290E-01 4.26981E-01 -FloatFrame 39 1.66805E00 5.03621E-01 -3.53973E-01 4.57305E-01 1.23880E-01 2.01580E-01 6.55824E-02 -3.28052E-01 -1.13836E-01 -7.66033E-02 1.16577E-01 -8.88446E-02 -4.74052E-01 -1.07573E00 -1.57478E00 1.73114E-01 -1.50688E-01 2.33250E-01 3.75189E-01 -6.57713E-01 5.34557E-01 3.98683E-01 2.94399E-01 1.59587E-01 7.87309E-02 -2.13122E-01 -3.47400E00 2.24410E-02 4.10860E-02 -7.35080E-01 -3.62302E-01 -2.90148E-01 1.52528E-01 7.91496E-01 3.70611E-01 4.33211E-02 -1.44405E-01 1.67442E-01 7.27539E-01 -FloatFrame 39 1.14886E00 -5.77655E-02 8.86077E-03 4.50474E-01 1.31049E-01 4.61326E-01 -2.26604E-01 -2.62111E-01 -1.79934E-02 -4.12798E-02 3.90458E-02 -1.97913E-01 -4.16717E-01 -3.60693E00 -1.12105E00 2.87459E-01 -4.46152E-01 1.55379E-01 1.13417E-01 -1.99927E-01 5.65197E-01 4.66168E-01 2.84944E-01 1.13022E-02 -3.56181E-02 2.50453E-01 -3.72560E00 7.56711E-01 -1.00454E-01 -6.03626E-01 -4.25880E-01 -4.35623E-01 7.28173E-01 -1.39960E-01 -1.39422E-01 -1.76436E-01 -3.04764E-01 8.89185E-03 6.15434E-01 -FloatFrame 39 2.15065E-01 -5.50372E-01 -7.53274E-02 6.46522E-02 3.91532E-04 3.53877E-01 -4.02972E-01 4.10381E-01 2.35683E-01 -2.67160E-02 5.24774E-02 1.25417E-01 -2.99777E-01 -4.80133E00 -8.18068E-01 7.26596E-02 -7.54314E-01 -1.92630E-01 -6.04338E-02 7.04607E-02 3.94597E-01 2.59261E-01 1.17963E-01 -1.45177E-01 8.76227E-02 4.02312E-01 -7.88645E-01 8.80516E-01 -6.12329E-01 -1.65267E-01 -3.32899E-01 -3.67679E-01 5.01586E-01 -2.40592E-01 -3.18169E-01 -1.34217E-01 -2.23801E-02 2.64950E-01 2.00512E-01 -FloatFrame 39 -2.08707E00 -3.08618E-01 -8.04750E-02 -6.65930E-03 -2.08731E-02 2.36969E-01 -2.31354E-02 3.70966E-01 1.98534E-01 8.09942E-02 5.40756E-02 1.76556E-02 -8.65434E-02 -4.39558E00 -2.40534E-01 -3.24870E-01 -6.11419E-01 -1.77520E-01 -2.54262E-01 3.01659E-01 3.24604E-01 1.47999E-01 1.50728E-01 -1.10779E-02 2.29332E-01 4.50965E-01 1.17431E00 8.75834E-01 -2.77899E-01 7.30469E-01 1.54966E-01 -7.80109E-02 4.08620E-01 -7.11748E-01 -3.63994E-01 -8.57794E-02 1.19739E-01 -2.28151E-01 -3.09672E-02 -FloatFrame 39 -3.13328E00 -3.14447E-01 -2.81314E-01 -2.97009E-01 -6.87497E-02 1.41146E-01 1.36043E-01 6.65456E-02 1.45425E-01 4.13596E-02 -2.86001E-02 -1.22191E-03 -7.17405E-02 -3.62702E00 5.77658E-02 -2.05240E-01 -2.38448E-02 -3.76639E-02 -1.38445E-01 4.79081E-01 -3.17151E-01 -1.04733E-01 3.21834E-02 -2.54381E-02 -1.40528E-01 3.71345E-01 4.70457E00 -6.53867E-01 3.03140E-01 6.54283E-01 1.06455E-01 3.46799E-01 -2.79772E-01 -5.28361E-01 -2.69680E-01 -1.30685E-01 -3.50036E-02 -1.79326E-01 -3.86348E-01 -FloatFrame 39 -3.24671E00 -2.98300E-01 -3.16009E-01 -1.60945E-01 -4.64706E-02 2.07064E-01 7.50556E-02 6.24933E-02 1.30005E-01 1.09448E-01 2.79679E-02 3.14189E-02 3.42485E-02 3.08995E-01 -8.94401E-01 -2.17299E-02 4.28638E-02 -7.10652E-02 9.25365E-02 2.18874E-02 -2.03757E-01 -1.21681E-01 2.00428E-02 -4.60815E-02 5.00064E-02 6.46178E-02 7.41582E00 -1.65344E00 6.81423E-01 8.60836E-02 7.12106E-02 1.61807E-01 -7.23291E-01 2.99728E-01 -9.65167E-02 -6.19612E-02 -2.90999E-02 2.14329E-01 -4.05352E-01 -FloatFrame 39 -3.41196E00 -4.92607E-01 -2.80567E-01 4.08073E-02 -3.72724E-02 2.15433E-01 7.61084E-02 9.32296E-02 1.30950E-01 5.46742E-03 2.70392E-02 -1.51117E-02 7.15678E-02 3.78879E00 -1.59568E00 4.76183E-01 6.22388E-02 3.35467E-02 2.33624E-02 -2.44211E-01 -1.74229E-02 -2.01249E-01 -2.97778E-02 -5.45381E-02 7.38004E-02 -3.40072E-02 3.09193E00 -1.59012E00 1.13851E00 -1.19449E-01 1.77492E-01 -5.52446E-02 -2.87121E-01 2.39524E-01 2.83307E-02 -1.79676E-01 1.88306E-01 7.14399E-02 -4.38330E-02 -FloatFrame 39 -1.77807E00 -1.20302E00 -1.02205E-01 3.62045E-02 -9.19382E-02 3.29505E-01 -1.24800E-03 1.67209E-01 7.68536E-02 1.01037E-01 7.99415E-03 6.76620E-02 -2.19257E-02 3.40093E00 -2.48452E00 1.11678E00 -7.65857E-02 1.06427E-01 3.72920E-02 -2.65233E-01 3.57673E-02 -9.33500E-02 -1.59633E-01 1.42225E-01 1.21446E-01 2.07848E-02 1.36463E-01 -8.06718E-01 5.55127E-01 -2.73810E-01 8.39085E-02 1.06438E-01 5.32195E-02 9.63258E-02 6.62030E-02 -9.45870E-02 2.48010E-01 -8.83153E-02 -4.70338E-02 -FloatFrame 39 6.55512E-01 -1.91012E00 1.94869E-01 -2.34770E-01 -3.52030E-02 1.64509E-01 -1.08168E-01 4.91227E-02 -5.58247E-02 1.15818E-02 -8.31381E-02 7.25785E-02 -1.05748E-01 3.92526E00 -2.40239E00 1.03131E00 -2.11571E-01 1.17455E-01 1.29801E-01 -1.90991E-01 7.89028E-02 -1.35046E-01 -1.24365E-01 1.93472E-01 -1.45148E-02 -8.10410E-02 -3.13227E-01 9.28839E-01 -5.00134E-01 1.30598E-01 -8.25896E-02 4.85065E-02 2.02700E-01 -7.52478E-02 2.13406E-01 -2.02925E-02 6.35107E-02 -1.78343E-01 -1.37218E-01 -FloatFrame 39 1.54216E-01 -2.78282E00 8.00770E-01 -2.37531E-01 5.99562E-02 2.44356E-01 -1.90178E-01 9.82607E-02 3.66555E-02 -5.01856E-02 1.70193E-01 1.52865E-01 5.50333E-02 3.08770E00 -1.55568E00 6.16644E-01 5.40122E-02 2.38371E-02 8.57985E-02 -6.25333E-02 -3.94804E-02 1.20056E-01 -1.79926E-01 2.05735E-01 -5.68965E-02 -1.16434E-01 -2.47461E00 1.72326E00 -1.01093E00 6.86486E-01 -1.71570E-01 -1.71156E-01 4.87264E-01 1.82708E-01 3.60648E-01 -7.17587E-02 5.46244E-02 5.92160E-03 1.57159E-01 -FloatFrame 39 5.13301E-01 -2.89500E00 7.50743E-01 -1.70764E-01 8.01829E-02 3.45233E-01 -1.14883E-01 1.72132E-01 -4.09642E-03 -1.18897E-01 2.20512E-01 -2.96265E-02 -9.47315E-03 1.45065E00 -6.79134E-01 2.03823E-02 4.74915E-01 -5.41147E-02 -4.13552E-02 2.96273E-01 2.61611E-01 2.25602E-01 -1.96123E-01 2.48097E-01 -8.59323E-03 7.61181E-02 -8.28098E-01 2.09335E00 -1.19363E00 5.83398E-01 -3.43463E-01 -3.19674E-01 2.88781E-01 5.22639E-02 -9.88297E-02 1.31274E-01 -1.86969E-01 -5.93235E-02 2.71622E-02 -FloatFrame 39 1.30963E00 -2.75870E00 5.14440E-01 9.02167E-02 -6.81011E-02 4.15304E-01 -6.37813E-02 1.27729E-01 1.96909E-01 -7.88888E-02 2.13730E-01 1.07654E-02 -1.38359E-01 2.25960E00 5.37669E-01 -5.76984E-01 6.37410E-01 -3.19626E-01 -2.33876E-01 2.26248E-01 1.27835E-02 2.12261E-02 -4.86515E-02 1.87660E-02 -1.16220E-01 -8.92714E-02 3.87421E-01 1.40464E00 -7.68956E-01 2.48456E-01 -1.62231E-01 -4.95817E-01 -2.59366E-01 -2.56022E-01 -1.89094E-01 2.64131E-02 -4.47040E-01 3.64064E-03 -9.93670E-02 -FloatFrame 39 2.10616E00 -2.58926E00 2.15252E-01 2.40145E-01 -8.93176E-02 1.23153E-01 1.88105E-01 3.10734E-01 1.69777E-01 -1.84542E-01 1.64959E-01 6.39853E-02 -2.96296E-02 1.83807E00 7.25503E-01 -7.48573E-01 7.23371E-01 -2.16345E-01 -5.37172E-01 3.69067E-02 5.58872E-03 3.65079E-02 -1.69710E-01 -1.98943E-01 -4.95259E-03 -2.32489E-02 -1.07301E00 2.97254E-01 7.94161E-02 -4.85124E-02 3.06855E-01 -4.31235E-01 -8.38913E-02 2.77860E-01 -1.92742E-01 -1.47816E-01 -3.37809E-01 1.14739E-01 1.52332E-01 -FloatFrame 39 2.41382E00 -2.24515E00 2.23786E-01 3.99879E-01 -2.59670E-01 1.04797E-02 3.60701E-02 1.11044E-01 5.78817E-02 -9.88370E-02 1.88958E-01 3.66452E-02 -3.42381E-02 1.18660E00 8.34923E-01 -4.97567E-01 5.88898E-01 -1.27712E-02 -6.65111E-01 1.42357E-01 2.90644E-01 -1.71516E-01 -1.96468E-01 -3.19043E-01 -1.48052E-03 6.30605E-02 -2.10113E00 1.59154E-01 2.98938E-01 -8.68391E-02 5.86277E-01 1.10784E-01 -2.48200E-01 5.65227E-02 -1.14328E-01 2.60275E-01 1.92342E-01 -8.07942E-02 -5.70807E-02 -FloatFrame 39 2.35137E00 -2.16950E00 2.16950E-03 5.52608E-01 -1.36162E-01 -1.91939E-01 -7.79761E-02 1.77721E-01 3.24115E-02 -2.88608E-01 2.15686E-02 -3.45791E-02 -3.27221E-02 -2.63059E-01 8.84657E-01 -4.49635E-01 6.36532E-01 3.69931E-01 -4.26388E-01 -2.11294E-01 6.21114E-02 -7.78196E-02 9.05649E-02 -6.60068E-03 -8.57468E-02 -8.03296E-02 -1.79971E00 5.50650E-01 -6.04042E-02 -2.42372E-01 8.43693E-01 8.48864E-01 -3.61441E-01 -4.04855E-01 1.14328E-01 2.34788E-01 2.13722E-01 -1.36350E-01 -2.15741E-01 -FloatFrame 39 2.49623E00 -1.92378E00 1.68721E-02 6.79114E-01 -8.08723E-02 -2.49807E-01 7.85753E-02 4.18373E-01 2.53936E-02 -2.75357E-01 -1.05314E-01 9.28492E-03 -7.52987E-02 -6.13111E-01 1.38557E00 -5.57972E-01 3.46525E-01 8.30922E-01 1.83753E-01 -2.19084E-01 -1.14211E-01 -5.71881E-02 3.83205E-02 -1.05322E-01 -1.37830E-01 -1.52680E-01 2.32631E-01 1.36668E00 2.26130E-02 -5.84174E-01 4.86589E-01 4.86449E-01 1.20731E-01 -3.92183E-01 2.69253E-02 1.23571E-02 4.18263E-03 -5.42126E-02 -2.21572E-01 -FloatFrame 39 1.84310E00 -1.70460E00 -2.34384E-01 8.76677E-01 2.80614E-01 -3.03235E-01 -2.31887E-02 3.72845E-01 9.19575E-02 -9.39768E-02 1.58358E-01 -2.17615E-02 -1.09959E-01 -3.04284E-02 2.25134E00 -4.27022E-01 5.23581E-02 8.56520E-01 6.00613E-02 -9.05626E-02 -3.30071E-01 -5.08943E-02 1.02922E-01 -2.41805E-03 -1.39959E-01 -3.01902E-01 5.14073E-01 8.84265E-01 1.57449E-02 -2.87402E-01 -2.92609E-01 -1.04093E-01 9.74711E-02 -6.73956E-01 9.91999E-03 1.15807E-01 2.39027E-01 -8.83152E-02 -1.53308E-01 -FloatFrame 39 1.80071E00 -8.59577E-01 -3.34186E-01 7.46405E-01 5.71252E-01 1.94233E-01 -1.83014E-01 -3.16698E-03 6.93578E-04 -6.05166E-02 8.36369E-02 -1.01185E-01 -1.86918E-01 -9.90371E-02 2.26984E00 -5.42227E-01 5.91233E-02 5.38313E-01 7.96602E-02 -1.21613E-01 -7.88167E-01 -4.72681E-02 1.54128E-01 1.33705E-01 -2.26145E-01 -3.05988E-01 3.61715E-01 9.74295E-02 1.71477E-01 -4.00767E-01 -8.00788E-01 2.52335E-01 8.19758E-02 -4.48192E-01 -1.11129E-01 -1.50584E-01 -5.11115E-02 -3.42234E-02 9.00583E-02 -FloatFrame 39 2.32094E00 8.18430E-02 -4.24853E-01 6.04966E-01 7.20358E-01 -1.31878E-01 -1.68539E-01 -1.52350E-01 -1.84828E-02 -1.85686E-01 1.91506E-02 -1.74539E-01 -3.34624E-01 3.31286E-01 2.34877E00 -2.55546E-01 -3.48409E-01 5.57325E-02 3.12397E-01 -8.58683E-03 -7.78264E-01 -1.62024E-01 -4.76615E-02 -5.35296E-02 -1.74183E-01 -2.11843E-01 1.82750E-01 -6.09235E-01 5.69925E-01 -5.43787E-01 -9.03442E-01 -1.36081E-01 3.89255E-01 4.34415E-01 -1.66054E-01 -2.86005E-01 -1.25397E-01 3.15362E-01 2.11000E-01 -FloatFrame 39 2.39719E00 3.46063E-01 -5.25355E-01 7.38238E-01 4.57441E-01 -1.70147E-01 -4.30376E-02 -3.69794E-01 -2.18745E-02 -1.21229E-01 2.83916E-02 -2.16860E-01 -3.81287E-01 8.37134E-02 1.66060E00 2.76982E-02 -4.84664E-01 -3.65129E-01 -5.64207E-02 2.67642E-01 -3.53752E-01 -2.13322E-01 -1.31877E-01 8.30785E-03 8.92172E-02 -9.49876E-02 -1.10359E00 -1.57575E00 6.99578E-01 -7.75304E-02 -8.46844E-01 -4.21142E-02 3.04331E-01 7.99912E-01 -5.97341E-02 -1.56274E-01 3.63805E-02 3.91355E-01 4.18198E-01 -FloatFrame 39 2.17439E00 6.44169E-01 -4.89929E-01 5.28269E-01 3.36346E-01 9.16191E-03 -3.17755E-02 -4.05419E-01 -7.00663E-02 -1.41638E-01 1.04828E-01 -1.95944E-01 -3.21803E-01 -7.72305E-01 7.73015E-01 4.44032E-01 -4.25939E-01 -7.91112E-01 2.70282E-01 2.95745E-01 2.16479E-02 -2.21758E-01 -2.03936E-01 -1.71491E-02 2.17172E-01 2.06354E-01 -1.45638E00 -9.37436E-01 6.87405E-01 -2.00606E-01 -2.36999E-01 2.16232E-01 -3.19044E-02 7.64512E-01 8.58808E-02 -1.89739E-01 -2.00385E-01 1.10922E-01 3.11437E-01 -FloatFrame 39 1.88442E00 8.01026E-01 -3.06487E-01 2.61741E-01 2.06123E-01 1.37812E-01 8.46284E-02 -3.56919E-01 -2.12628E-01 -1.92394E-01 9.19447E-02 -1.19678E-02 -2.81906E-01 -1.37266E00 7.23167E-01 7.15103E-01 -6.85270E-01 -6.02128E-01 1.59811E-01 2.35738E-01 4.10761E-01 -1.27441E-01 -3.21616E-01 -1.92077E-01 2.00139E-01 2.16449E-01 -7.84445E-01 -2.80729E-01 3.81570E-01 -5.66884E-02 2.10804E-01 -4.27103E-01 -1.54257E-01 5.41777E-01 2.68327E-01 3.17201E-02 -2.90623E-01 -2.06246E-01 -7.41158E-02 -FloatFrame 39 1.54864E00 8.54858E-01 1.91795E-02 1.79027E-01 -7.07539E-02 1.38404E-01 1.27206E-01 -1.30702E-01 -2.40241E-01 -3.89621E-01 2.00149E-03 4.26336E-02 -1.28270E-01 -1.55675E00 4.92286E-01 8.25603E-01 -4.82627E-01 -5.80307E-01 -1.56821E-01 1.41488E-01 5.63425E-01 4.65687E-02 -1.72216E-01 -3.07772E-01 1.09257E-02 1.32238E-01 -3.01624E-01 -3.99228E-01 -4.02990E-03 7.00725E-01 -4.56959E-03 -5.54267E-01 -2.26126E-01 7.84670E-02 4.31188E-01 3.09527E-01 -1.29929E-02 -4.11988E-01 -2.13827E-01 -FloatFrame 39 1.02453E00 1.06923E00 1.89749E-01 5.29675E-02 -1.44687E-01 -1.03356E-02 1.92700E-01 4.09662E-02 -1.49316E-01 -4.42845E-01 -1.63686E-01 -1.67213E-02 -1.64838E-01 -1.67429E00 3.23939E-01 7.11073E-01 1.54548E-02 -6.06697E-01 -3.94455E-01 9.61156E-03 4.89228E-01 3.03747E-01 -1.20887E-02 -2.05070E-01 -2.11849E-01 2.62181E-03 2.48573E-01 -3.18378E-01 -3.84440E-01 6.07960E-01 3.08955E-01 -3.62078E-01 -1.53202E-01 -3.06218E-01 2.51485E-01 5.03904E-01 2.18182E-01 -2.88447E-01 -3.59068E-01 -FloatFrame 39 6.17639E-01 1.13646E00 3.35673E-01 4.56414E-02 -2.43961E-01 -1.47659E-01 1.09712E-01 1.58006E-01 -2.34975E-02 -3.13854E-01 -2.02943E-01 -1.85019E-01 -1.89564E-01 -1.30818E00 1.73909E-01 4.41162E-01 1.25333E-01 -2.71352E-01 -5.18899E-01 -1.17141E-02 2.57207E-01 2.98053E-01 3.31689E-01 -8.95894E-02 -2.77521E-01 -2.26829E-01 1.32082E00 -3.45792E-01 -5.19830E-01 1.07868E-01 3.27234E-01 6.76365E-02 -3.87711E-02 -4.80160E-01 -1.63975E-01 3.97118E-01 3.19543E-01 2.34256E-02 -1.08027E-01 -FloatFrame 39 2.10136E-01 1.12497E00 4.04586E-01 2.77196E-01 -4.00574E-01 -2.56643E-01 9.42399E-02 1.32309E-01 9.11187E-02 -2.04482E-01 -1.13125E-01 -2.23816E-01 -2.79284E-01 -3.53469E-01 -2.18531E-02 1.91244E-01 1.23323E-01 -2.79463E-01 -3.26819E-01 -2.91595E-02 9.06787E-03 1.39772E-01 3.85030E-01 1.14473E-01 -1.88423E-01 -1.05405E-01 1.88869E00 -2.37261E-01 -6.14638E-01 1.74938E-02 -7.49636E-02 2.89970E-01 1.12544E-01 -4.81182E-01 -1.84523E-01 -7.98160E-02 1.79596E-01 3.75320E-01 2.01935E-01 -FloatFrame 39 2.40463E-01 1.02877E00 4.60342E-01 3.04360E-01 -3.42106E-01 -3.80494E-01 1.15492E-01 1.26505E-01 5.78125E-02 -5.79328E-02 -8.75879E-02 -2.34888E-01 -3.55099E-01 5.80516E-01 -6.33520E-02 -1.73476E-01 1.42827E-01 -3.46316E-01 -2.28929E-01 1.00830E-01 -2.23975E-01 1.13530E-01 2.51873E-01 9.00070E-02 9.77991E-02 -2.48945E-02 1.95356E00 -9.87880E-02 -6.00434E-01 -3.50642E-01 -2.14188E-02 2.45331E-01 2.23141E-01 -2.44671E-01 -9.62070E-02 -2.31900E-01 -1.77592E-01 3.55638E-01 3.63658E-01 -FloatFrame 39 6.71058E-01 1.04738E00 3.80992E-01 1.76290E-01 -4.24150E-01 -3.37155E-01 1.63541E-01 5.00341E-02 -9.54407E-03 -5.78154E-02 -4.92127E-02 -2.05144E-01 -2.70243E-01 1.60009E00 -1.20641E-01 -4.09190E-01 -2.27319E-01 -3.00882E-01 -8.14884E-02 1.93982E-01 -2.35603E-01 4.35647E-02 1.53130E-01 -6.31189E-02 1.67214E-01 2.58252E-01 1.56237E00 -1.81030E-01 -3.91106E-01 -6.39180E-01 4.10728E-03 4.02382E-01 1.62854E-01 -1.92526E-02 -4.31943E-02 -3.38055E-01 -1.21825E-01 2.51734E-01 5.40258E-01 -FloatFrame 39 1.19816E00 1.07310E00 1.62197E-01 1.88468E-01 -5.90277E-01 -3.76588E-01 2.10542E-01 -6.59688E-02 9.00327E-02 -6.19813E-02 -1.12936E-01 -8.72195E-02 -2.14459E-01 2.14289E00 -2.44382E-01 -5.64582E-01 -4.96354E-01 -3.42208E-01 1.73453E-01 2.63684E-01 -2.43228E-01 7.03359E-02 -8.61828E-02 -3.18176E-02 3.49533E-01 5.15363E-01 2.91203E-01 -1.28904E-02 -4.43442E-01 -1.99758E-01 1.60213E-01 3.62641E-01 1.02316E-01 -1.75793E-02 -1.41236E-01 -1.12959E-01 1.40084E-01 2.79670E-01 2.14465E-01 -FloatFrame 39 1.81023E00 1.00432E00 -4.60393E-03 4.98768E-02 -7.01456E-01 -3.38132E-01 2.88222E-01 -1.03294E-01 1.34683E-01 -5.13527E-02 -1.76244E-01 -5.66020E-02 -2.10318E-02 1.89130E00 -1.33532E-01 -8.52632E-01 -4.27076E-01 -1.40669E-01 2.81153E-01 2.96298E-01 -2.53182E-01 -9.76718E-02 4.01707E-02 7.69651E-02 4.46885E-01 4.72718E-01 -6.10672E-01 -1.45856E-02 -2.43859E-01 5.28376E-02 6.04578E-01 1.88938E-01 -1.06087E-01 2.26932E-02 -3.32800E-01 3.49407E-01 2.41638E-01 -1.13640E-02 -2.91765E-01 -FloatFrame 39 2.38335E00 7.84385E-01 -1.04240E-01 -1.91994E-01 -6.84314E-01 -2.07041E-01 3.79176E-01 -1.16723E-01 1.28148E-01 -1.44116E-01 -1.19406E-01 1.14645E-01 1.60264E-01 1.53222E00 -2.58968E-01 -8.08441E-01 -4.43516E-01 2.62370E-01 3.62391E-01 1.57597E-01 -2.20534E-01 -2.62464E-01 2.63224E-01 2.09820E-01 3.38169E-01 2.23598E-01 -9.74543E-01 -1.49640E-01 1.23612E-01 2.28398E-01 6.87411E-01 2.46290E-02 -5.24469E-01 1.41740E-01 -1.51760E-01 3.45811E-01 2.97976E-01 -3.91366E-01 -5.27795E-01 -FloatFrame 39 2.56235E00 9.13845E-01 -4.71640E-01 -2.50786E-01 -5.64819E-01 -5.60016E-02 4.59839E-01 -2.03148E-01 -1.07216E-01 -1.76447E-02 2.77525E-02 2.41740E-01 2.02475E-01 9.16753E-01 -2.83171E-01 -7.29020E-01 -1.98678E-01 5.46742E-01 3.05782E-01 -2.28171E-01 -1.11442E-01 -2.49432E-01 3.85982E-01 3.74942E-01 5.55188E-02 -5.50768E-02 -1.28960E00 2.06227E-01 7.23349E-02 6.30007E-01 3.89074E-01 -1.71736E-01 -6.73289E-01 7.25986E-02 1.12591E-01 3.25218E-01 8.16296E-03 -4.85089E-01 -4.53929E-01 -FloatFrame 39 2.73037E00 8.14136E-01 -6.46244E-01 -2.55048E-01 -3.27907E-01 -1.41970E-02 3.68139E-01 -2.86503E-01 -1.72432E-01 2.01243E-01 9.68836E-02 2.50949E-01 9.13910E-03 2.42611E-01 -5.27402E-02 -7.36106E-01 1.86491E-01 6.51444E-01 1.90655E-01 -5.15692E-01 -1.47936E-01 -1.49873E-01 5.88442E-01 2.17983E-01 -1.46920E-01 -2.30331E-01 -1.30918E00 4.80513E-02 2.91688E-01 7.11836E-01 -5.60182E-02 -2.14859E-01 -3.91077E-01 -5.85128E-02 4.86629E-01 1.36107E-02 -4.43089E-01 -3.65531E-01 -5.62609E-02 -FloatFrame 39 2.72698E00 7.21153E-01 -7.33624E-01 -1.48801E-01 -1.54714E-01 -3.23495E-02 6.00507E-02 -2.14736E-01 -1.14748E-01 3.34629E-01 1.98697E-01 -1.08324E-03 -7.61086E-02 -3.92422E-01 -2.35120E-01 -4.37332E-01 5.13158E-01 4.90724E-01 9.09226E-02 -6.19248E-01 -1.69955E-01 2.37197E-01 3.99593E-01 -6.81473E-02 -3.10013E-01 -1.11338E-01 -3.30244E00 -4.45334E-01 9.84420E-01 4.05714E-01 1.34355E-01 -1.23104E-01 2.50439E-01 1.42714E-01 2.15015E-01 -7.41387E-01 -8.93641E-02 -1.95353E-01 3.31038E-01 -FloatFrame 39 2.62596E00 7.31644E-01 -8.40346E-01 -5.50304E-03 -3.28700E-02 -1.63864E-02 -1.36516E-01 -2.64659E-01 -2.17245E-02 4.44326E-01 9.85775E-02 -3.22752E-02 -7.00669E-02 -3.05983E00 -4.98074E-01 2.48314E-01 5.92205E-01 7.85799E-01 6.75506E-02 -2.65253E-01 -5.22228E-03 6.51422E-02 -1.52946E-01 1.28619E-01 -3.42273E-01 1.00707E-01 -3.28786E00 -1.14468E-01 7.36911E-01 7.19634E-02 1.00667E-01 -2.12752E-03 6.23282E-01 2.12087E-01 -2.93085E-01 -6.57473E-01 1.32503E-01 1.45259E-01 3.29764E-01 -FloatFrame 39 2.16993E00 6.78725E-01 -9.08972E-01 2.62372E-01 -7.40952E-02 3.49210E-02 -1.59409E-01 -3.73103E-01 1.29982E-01 3.81948E-01 -4.03948E-02 -6.82722E-02 9.11368E-02 -3.68028E00 -3.49588E-01 2.99580E-01 5.85121E-01 5.91391E-01 8.87951E-02 4.03379E-03 4.21317E-02 -5.58875E-02 -2.57880E-01 6.43562E-02 -1.64753E-01 2.18426E-01 -1.68963E-02 -2.20002E-02 5.29485E-02 -3.56674E-02 -6.93160E-01 1.24185E-01 4.94401E-01 -6.52493E-04 -2.41577E-02 -2.01514E-01 -1.79794E-01 2.80197E-01 -8.46206E-02 -FloatFrame 39 -3.29460E-01 3.16062E-01 -3.97930E-01 3.37157E-01 4.57893E-01 5.33536E-02 1.02886E-01 -2.91726E-01 -1.07289E-01 4.82973E-02 2.25503E-01 -9.13235E-02 1.09846E-01 -3.07673E00 -5.20074E-01 3.01262E-01 5.56538E-01 9.26393E-02 1.91736E-01 2.29149E-01 -5.87477E-03 4.09846E-02 -3.54459E-01 -5.11754E-02 -6.20758E-02 1.60862E-02 2.93488E00 -9.07988E-02 -1.01691E-01 -2.52633E-01 -6.78865E-01 7.22755E-02 8.48833E-02 -2.32054E-01 1.29752E-01 1.60585E-01 1.08473E-01 8.70464E-02 -3.83381E-01 -FloatFrame 39 -9.53300E-01 3.71564E-01 -4.34045E-01 4.36320E-01 4.36676E-01 5.64456E-02 6.40845E-02 -1.72605E-01 -1.70636E-01 7.67497E-02 2.63054E-01 -1.65837E-01 1.42317E-01 -7.45404E-01 -4.40387E-01 1.97888E-01 3.32489E-01 -8.74743E-02 1.61071E-01 8.89171E-02 -1.89923E-01 7.38644E-02 -9.72947E-02 1.72829E-01 -7.77070E-02 -1.64955E-01 5.87815E00 7.59744E-01 -7.67216E-01 -6.21523E-01 -7.03989E-01 -1.91023E-01 -4.88095E-01 -3.09482E-02 2.17955E-01 6.21385E-01 -1.04195E-01 -8.20649E-02 -4.74995E-02 -FloatFrame 39 -4.50767E-01 2.11570E-01 -5.39084E-01 5.51035E-01 5.97693E-02 1.75349E-01 9.26326E-02 -2.70534E-01 1.92601E-02 8.98672E-02 4.74020E-02 -9.43510E-02 -5.39807E-02 2.80143E00 2.39670E-01 -4.65954E-01 -6.49856E-02 -6.11350E-01 7.12892E-04 -2.58947E-01 -3.68229E-02 2.58940E-01 2.66926E-01 -1.55370E-01 -1.44141E-01 -3.14133E-02 4.43813E00 4.72231E-01 -5.49238E-01 -6.34594E-01 -4.43768E-01 -2.18517E-01 -3.06750E-01 2.47041E-02 2.27212E-01 4.08655E-01 -3.81507E-01 -6.79795E-03 9.82015E-02 -FloatFrame 39 1.42453E00 2.38338E-01 -7.11084E-01 5.94860E-01 -1.61570E-01 1.95992E-01 -7.04920E-02 -5.63026E-01 2.03846E-01 2.84653E-01 1.32434E-01 -1.45979E-01 -7.38184E-02 3.69273E00 3.18437E-02 -3.51350E-01 -3.02106E-01 -5.31242E-01 -5.74463E-02 -2.17833E-01 -1.65219E-01 3.01076E-01 3.11360E-01 -2.08678E-01 -8.45049E-02 -6.67536E-02 1.84532E-02 2.55719E-02 3.37767E-01 -5.53404E-01 4.17753E-01 -1.20873E-01 -1.66243E-03 4.58525E-02 -2.40432E-01 7.60075E-02 1.49768E-01 1.35456E-01 4.31440E-02 -FloatFrame 39 2.47197E00 5.55732E-01 -8.63884E-01 2.72171E-01 -1.53457E-01 5.40665E-02 -1.56061E-01 -3.28548E-01 1.51651E-01 3.15223E-01 7.01321E-02 -2.35464E-01 7.84326E-02 2.81988E00 2.65242E-01 -1.28187E-01 -6.18390E-01 -1.93597E-01 -1.20160E-01 -2.60609E-01 9.02959E-03 1.85080E-02 3.42933E-01 -5.60212E-03 -8.68493E-03 1.17307E-02 -3.04046E00 3.20129E-01 4.15135E-01 -4.91745E-01 5.82800E-01 -9.05733E-02 2.29163E-01 4.04924E-01 -4.58590E-01 -1.21832E-01 9.00735E-02 2.74817E-01 -9.87938E-02 -FloatFrame 39 2.73943E00 4.03408E-01 -7.85395E-01 1.34214E-01 -9.45655E-02 -1.00068E-03 -1.53749E-01 -3.37823E-01 1.30441E-01 3.88110E-01 5.43751E-02 -2.50342E-01 7.55638E-02 6.52266E-01 3.51973E-01 6.37851E-02 -7.93851E-01 5.15580E-02 -1.48020E-01 1.13298E-02 2.39705E-01 -1.57514E-01 1.89528E-01 -1.18605E-01 1.90312E-01 -1.65547E-01 -3.26625E00 -1.93938E-01 4.38712E-01 9.12380E-02 2.33952E-01 1.03355E-01 4.37660E-01 -3.57083E-02 -1.21875E-01 -2.42869E-01 -3.52577E-03 3.51817E-01 -4.53132E-01 -FloatFrame 39 2.36911E00 4.76812E-01 -6.67271E-01 -6.73553E-02 -1.33828E-01 5.51894E-02 -1.67977E-01 -2.61504E-01 3.77680E-02 4.32800E-01 4.17999E-02 -1.03036E-01 -4.22500E-02 -4.46373E-01 7.13037E-02 3.10525E-01 -5.27152E-01 4.03551E-02 -1.68048E-02 1.77051E-01 -2.66787E-02 -1.03367E-01 1.00064E-01 -9.12789E-03 3.43133E-01 -4.41401E-01 -1.62532E00 -2.85730E-02 3.13006E-01 4.56172E-01 -2.38543E-01 2.56746E-01 1.89826E-01 -2.63992E-01 1.03919E-01 -3.20552E-01 1.63141E-01 2.29685E-01 -2.23144E-01 -FloatFrame 39 2.07679E00 5.90311E-01 -6.47298E-01 -1.98991E-01 -1.10011E-01 4.79720E-02 -5.91622E-02 -3.23321E-01 4.63320E-02 4.74182E-01 1.38291E-02 4.43331E-02 -2.39366E-01 -9.73055E-01 3.23400E-01 3.76792E-01 -3.37679E-01 -1.86985E-01 1.08727E-01 2.01155E-01 -2.42869E-02 -5.35951E-02 -1.31024E-01 4.45361E-02 4.19998E-01 -3.88692E-01 -4.34011E-01 2.42141E-01 1.66274E-02 3.73496E-01 -1.59185E-01 9.17094E-02 3.60669E-03 5.88417E-03 -6.25321E-03 -2.57629E-01 7.32407E-02 -9.70531E-02 2.86601E-01 -FloatFrame 39 2.02559E00 6.27036E-01 -5.53358E-01 -2.54980E-01 -1.13102E-01 3.72616E-02 2.09900E-02 -3.55227E-01 4.82838E-02 4.15287E-01 6.10042E-02 1.07668E-01 -3.62968E-01 -8.80384E-01 3.13445E-01 3.27153E-01 -1.53656E-01 -1.18830E-01 7.49046E-02 1.80657E-01 -2.07945E-02 -1.09620E-01 -1.57565E-01 6.41128E-02 2.46079E-01 -1.54800E-01 1.15848E-01 -3.03704E-01 2.27874E-01 2.42087E-01 -1.29676E-01 1.25933E-01 -1.65708E-01 1.30366E-01 -1.19895E-01 -1.15453E-01 7.13857E-02 -3.26198E-01 4.97800E-01 -FloatFrame 39 1.76637E00 7.26808E-01 -4.08603E-01 -2.03465E-01 -2.81550E-01 1.07726E-01 4.74069E-02 -3.62110E-01 7.68456E-02 2.57086E-01 9.89112E-02 1.69656E-01 -3.13128E-01 -8.57207E-01 1.96957E-02 6.04665E-01 -9.55919E-02 -3.16661E-01 2.34660E-01 3.54476E-02 1.06079E-01 -1.73490E-01 -2.46477E-01 1.15922E-01 9.37996E-02 1.09108E-01 -1.40362E-01 -3.34310E-01 1.10126E-01 1.61819E-01 -1.88682E-01 1.00472E-01 -1.74446E-01 1.89791E-01 -1.20804E-01 -3.23313E-02 4.08405E-02 -1.78616E-01 3.71059E-01 -FloatFrame 39 1.48873E00 7.90257E-01 -3.40118E-01 -2.21011E-01 -2.52658E-01 1.30094E-01 1.26807E-02 -2.82299E-01 -7.18520E-02 2.75236E-01 1.05913E-01 1.43043E-01 -1.97050E-01 -1.02075E00 -2.08657E-02 4.37279E-01 8.16296E-03 -3.07512E-01 1.75376E-01 6.21172E-03 1.68996E-01 -2.30424E-01 -1.89896E-01 1.04953E-01 6.74633E-02 2.16259E-01 5.14010E-02 -8.81453E-02 -3.11798E-01 2.97596E-02 2.63092E-01 -2.81353E-01 9.19527E-03 3.30397E-02 -6.16781E-02 2.20389E-01 -1.05741E-01 -1.76494E-02 4.63516E-02 -FloatFrame 39 1.21959E00 6.10006E-01 -4.26330E-02 -2.94583E-01 -4.26672E-01 2.82632E-01 -2.37146E-02 -2.17241E-01 -1.27158E-01 2.27705E-01 1.29751E-01 1.38133E-01 -1.30257E-01 -8.05806E-01 -6.84496E-02 2.92868E-01 -6.58323E-02 -5.35688E-02 -4.66933E-02 4.46429E-02 1.39119E-01 -2.35168E-01 -2.60875E-02 1.01809E-02 7.61502E-02 1.55460E-01 3.39426E-01 2.28346E-02 -1.46513E-01 -4.08061E-02 1.44133E-01 -2.42678E-01 1.64415E-01 -1.31416E-01 5.38209E-02 1.03674E-01 -6.82745E-02 5.72059E-02 -2.26755E-01 -FloatFrame 39 1.00485E00 6.06170E-01 -1.16080E-01 -2.46817E-01 -4.20614E-01 2.12638E-01 2.72018E-02 -1.86231E-01 -1.82141E-01 2.25391E-01 1.65958E-01 1.75132E-01 -1.46709E-01 -6.81320E-01 1.96895E-03 2.90765E-01 -3.26431E-02 -1.63379E-01 -6.73015E-02 1.70627E-01 3.75804E-02 -1.76604E-01 -8.62226E-02 3.66788E-02 1.24669E-01 -1.04954E-02 -7.29193E-02 3.28067E-01 -2.14649E-01 2.12731E-01 -6.84911E-02 -7.42765E-02 8.80297E-02 -8.47629E-02 6.81568E-02 -4.87183E-02 5.67633E-02 -1.02700E-02 -1.99029E-01 -FloatFrame 39 9.60567E-01 6.58358E-01 -1.15735E-01 -2.69298E-01 -3.35119E-01 6.10328E-02 9.20498E-02 -2.22991E-01 -1.58323E-01 2.30999E-01 1.09092E-01 2.45806E-01 -1.57668E-01 -8.78725E-01 2.59617E-01 7.82184E-02 1.46899E-01 -1.22060E-01 -1.20970E-01 1.32673E-01 5.43563E-02 -1.67011E-01 -7.48058E-02 6.69442E-02 6.58802E-02 -4.35692E-02 -3.33095E-01 1.83583E-01 -1.56787E-01 2.80822E-02 2.21137E-01 -6.00976E-02 -7.49588E-02 1.77052E-02 1.60117E-01 -9.40639E-02 1.63606E-02 -6.50484E-02 4.80282E-02 -FloatFrame 39 8.07411E-01 7.92225E-01 -4.93530E-02 -2.53654E-01 -4.16037E-01 6.27926E-02 1.83308E-01 -2.44718E-01 -2.48456E-01 1.89013E-01 1.42592E-01 2.67713E-01 -2.07545E-01 -1.01441E00 1.85552E-01 1.33979E-01 -4.56089E-03 5.77588E-02 -1.27399E-01 9.56680E-02 5.52856E-02 -1.64863E-02 -1.80286E-01 5.30395E-02 5.96208E-02 3.75328E-02 -3.48922E-02 -1.99187E-01 1.22380E-01 -1.77113E-01 3.78714E-02 1.95320E-01 -1.48809E-01 1.53454E-01 8.09249E-02 -1.88476E-01 6.47799E-02 -6.86078E-02 1.59955E-01 -FloatFrame 39 3.40862E-01 8.69623E-01 3.55854E-02 -1.47684E-01 -5.48732E-01 1.61662E-01 1.08958E-01 -1.62885E-01 -2.94170E-01 1.52899E-01 1.96695E-01 2.04013E-01 -1.73827E-01 -9.13618E-01 6.04299E-02 2.00599E-01 -3.02139E-02 -8.41885E-02 7.43503E-02 -1.61368E-02 2.07810E-01 -8.60865E-02 -2.63282E-01 1.31724E-01 -2.72759E-03 1.16386E-01 2.46213E-02 -1.82953E-01 1.53012E-01 4.17192E-02 -1.44714E-01 1.56585E-01 -2.06231E-01 2.70392E-01 6.59951E-02 -1.77206E-01 5.36304E-03 -7.65268E-02 1.35478E-01 -FloatFrame 39 -9.56604E-03 7.91722E-01 1.78991E-02 -2.51378E-01 -3.62855E-01 8.52389E-02 1.22870E-01 -1.30945E-01 -1.98627E-01 4.51046E-02 2.18997E-01 2.34752E-01 -1.09176E-01 -9.89794E-01 2.59946E-03 2.86991E-01 3.71583E-02 -8.69556E-02 2.91855E-02 -1.10563E-01 3.25678E-01 4.95088E-02 -3.57493E-01 5.84025E-02 -1.69060E-02 1.73011E-01 8.36666E-02 -1.15488E-01 -7.29583E-02 1.14364E-02 1.59203E-01 -1.30597E-01 5.21635E-03 2.10755E-02 1.87972E-01 -8.96581E-02 -1.47224E-01 2.14834E-02 7.52309E-02 -FloatFrame 39 4.69491E-02 7.18788E-01 8.48633E-02 -2.99512E-01 -4.19308E-01 1.35383E-01 7.59130E-02 -1.51808E-02 -2.44409E-01 -3.22835E-02 2.40816E-01 2.43079E-01 -4.12822E-02 -8.29951E-01 -5.50580E-02 1.27640E-01 -1.87775E-02 7.50146E-02 -5.62468E-02 -1.09205E-02 2.28886E-01 1.01886E-01 -3.52940E-01 -1.55001E-02 1.87558E-02 1.91617E-01 1.04261E-01 3.52485E-02 -2.08098E-01 -5.03022E-02 5.47722E-02 1.38276E-02 -5.30996E-03 -8.56823E-02 2.89083E-02 8.06669E-02 -5.70032E-02 -2.67538E-02 5.17698E-05 -FloatFrame 39 -1.82383E-01 7.94825E-01 2.37638E-01 -2.16496E-01 -5.02992E-01 9.19781E-02 7.27442E-02 8.09596E-02 -1.98947E-01 -1.68480E-01 2.00994E-01 2.50807E-01 -3.45341E-02 -8.85532E-01 3.78480E-02 7.88937E-02 -1.31439E-02 -3.21834E-02 4.30131E-02 -1.15873E-01 2.39996E-01 7.84172E-02 -2.76826E-01 1.39933E-03 -4.36598E-02 1.73063E-01 4.46281E-02 1.67907E-01 1.36293E-02 -2.57694E-02 -6.76591E-02 1.02335E-01 -9.84351E-02 -1.40492E-01 4.68869E-02 1.56606E-01 -8.06734E-02 -9.53172E-02 -7.01746E-02 -FloatFrame 39 -4.89089E-01 8.14565E-01 1.63226E-01 -1.66461E-01 -4.73717E-01 1.05415E-01 9.80375E-02 6.60006E-02 -1.92284E-01 -2.00041E-01 1.81195E-01 2.22769E-01 1.77898E-02 -7.85323E-01 1.12849E-01 1.41270E-01 -4.45469E-02 7.35550E-03 4.60884E-02 -1.09356E-01 8.83933E-02 1.48772E-01 -1.96334E-01 -9.61735E-02 -7.65614E-02 1.21442E-01 1.20928E-01 -5.39313E-02 6.11690E-03 4.69181E-02 1.43888E-01 -6.03902E-02 4.76361E-02 -1.48336E-01 -5.42056E-02 1.99898E-01 -2.24822E-02 -5.25579E-02 -1.59693E-01 -FloatFrame 39 -8.95098E-01 8.29570E-01 9.67928E-02 -2.64522E-01 -3.95039E-01 1.28252E-01 6.99649E-03 1.09050E-01 -1.20210E-01 -2.31721E-01 2.20396E-01 1.91093E-01 6.38869E-02 -7.64604E-01 -1.60833E-02 8.50106E-02 3.37742E-02 1.11705E-01 -1.73771E-02 -6.82372E-02 9.16591E-02 2.42115E-02 -7.69276E-02 -2.10829E-02 -9.62178E-02 1.33704E-02 -2.43477E-01 -2.91772E-01 -8.64073E-02 -9.57241E-02 2.09068E-01 -1.23877E-01 6.68055E-02 2.23026E-02 -5.24439E-02 2.02101E-01 -5.22474E-02 -1.80408E-02 -1.10621E-01 -FloatFrame 39 -7.38374E-01 8.31637E-01 2.26133E-01 -3.44059E-01 -4.11952E-01 1.81472E-01 -3.34426E-02 7.32125E-02 -9.56367E-02 -2.28617E-01 1.44643E-01 1.66517E-01 8.01598E-02 -1.02880E00 -1.78923E-01 5.48624E-02 -1.40271E-01 2.16424E-01 -7.77885E-02 -4.25501E-02 1.10696E-01 9.63286E-02 5.76752E-03 -1.48421E-01 -9.46022E-02 1.08208E-02 5.16715E-02 -2.11834E-01 -1.80411E-02 5.62183E-02 -2.47757E-02 -3.42745E-02 1.44957E-01 -8.91047E-02 1.34653E-01 1.97394E-02 -2.50109E-01 1.11235E-01 1.03468E-02 -FloatFrame 39 -9.46987E-01 7.78742E-01 3.22649E-01 -1.82722E-01 -3.91288E-01 7.46010E-02 4.50707E-03 1.72619E-01 -1.74735E-01 -2.45407E-01 1.79911E-01 1.54589E-01 -2.11636E-02 -7.12933E-01 -2.27917E-01 6.69695E-02 8.99925E-02 8.69289E-02 -5.16516E-02 7.67198E-02 2.55442E-03 1.58865E-01 -5.71883E-02 -2.71192E-01 1.50168E-02 2.37173E-02 -1.53893E-01 -2.25505E-01 -1.67170E-01 3.55049E-01 -1.17264E-01 3.70708E-02 2.28819E-01 7.98018E-02 2.14410E-02 3.39743E-02 9.78871E-03 1.08174E-01 -1.00273E-02 -FloatFrame 39 -1.51789E00 6.35642E-01 2.18088E-01 -3.06732E-01 -2.57294E-01 2.76267E-02 5.54874E-02 1.76697E-01 -9.59555E-02 -1.94274E-01 3.27741E-02 1.28166E-01 2.86107E-02 -1.18269E00 -4.04428E-01 -1.12307E-01 2.14778E-01 9.91596E-02 -4.07177E-02 1.86269E-01 1.90498E-01 1.17770E-01 3.97418E-02 -1.38632E-01 1.35723E-02 7.93494E-04 -3.74597E-02 -6.63105E-03 -1.73654E-01 4.67250E-02 -5.03158E-02 1.23125E-01 -9.20190E-03 -1.97397E-02 -8.90451E-03 7.04661E-02 1.49379E-01 -1.03372E-01 -7.62794E-03 -FloatFrame 39 -1.60803E00 6.01653E-01 1.63762E-01 -1.74530E-01 -3.08110E-01 7.66005E-02 8.37163E-02 1.11605E-01 3.86550E-02 -2.88909E-01 -5.07956E-02 2.06110E-01 8.76042E-02 -7.50392E-01 -2.34548E-01 -1.06684E-01 1.36717E-01 3.66131E-02 7.14734E-02 6.75179E-02 -1.71853E-02 1.49960E-01 1.32778E-02 -1.21813E-01 -8.83548E-02 1.60894E-02 4.60159E-01 1.82566E-01 1.73625E-01 1.76203E-02 -2.69817E-01 9.48163E-02 -8.83612E-02 -2.63199E-01 4.65290E-02 -7.76271E-02 4.47973E-02 -8.06291E-02 1.21721E-01 -FloatFrame 39 -1.92107E00 4.27209E-01 1.13826E-01 -1.29280E-01 -3.12792E-01 1.40754E-01 1.52826E-01 2.63710E-01 2.21328E-02 -1.88876E-01 6.01051E-03 1.80090E-01 8.09532E-02 -7.22534E-01 -2.21862E-01 6.13174E-02 2.32398E-01 -1.70658E-01 5.40986E-02 9.79078E-02 -7.27013E-02 1.64299E-01 -3.78853E-02 -9.38348E-02 -6.70568E-02 1.22515E-01 -9.91920E-01 -6.08025E-01 -1.09177E-01 -2.45025E-02 1.02010E-01 1.57993E-01 -1.47410E-02 9.10037E-02 5.45142E-02 3.17943E-01 2.18236E-01 -4.68959E-02 9.52262E-03 -FloatFrame 39 -1.69738E00 5.44194E-01 2.15965E-01 -4.60044E-02 -3.54674E-01 1.46074E-01 7.20250E-02 1.55433E-01 -2.47749E-02 -2.32129E-01 5.80982E-02 6.62341E-02 -5.07428E-03 -1.74231E00 -8.42573E-01 -2.15861E-01 1.12215E-01 1.38623E-01 2.29466E-01 5.27769E-02 7.38184E-02 2.04475E-01 3.31221E-01 9.64234E-02 -1.35251E-01 2.56120E-02 -6.19416E-02 1.28019E-01 1.80502E-01 -7.59901E-04 2.25213E-01 -8.51391E-02 -4.35040E-02 -1.39383E-01 -1.67282E-01 1.95755E-01 1.08618E-01 -9.37262E-02 -2.30702E-01 -FloatFrame 39 -2.24042E00 4.13780E-01 2.79406E-01 -7.43337E-02 -4.27952E-01 8.17253E-02 1.53395E-01 1.03995E-01 6.83430E-02 -2.32159E-01 -6.10607E-02 6.11096E-02 1.51125E-01 -7.84475E-01 -9.38431E-02 2.41819E-01 2.31638E-01 5.45552E-02 -3.10405E-02 5.44037E-02 -2.12084E-01 -2.98381E-03 1.57870E-01 1.47832E-02 -1.60783E-01 -1.08187E-01 5.63837E-01 2.23460E-01 2.56272E-01 7.94121E-02 -6.62477E-02 -3.59188E-01 9.54926E-03 3.87418E-02 -8.31131E-03 -2.17792E-01 -2.33679E-01 2.21339E-02 -8.40962E-04 -FloatFrame 39 -3.35034E00 -2.40919E-01 -5.20984E-02 -6.23148E-02 -1.69487E-01 3.06066E-01 1.36493E-01 1.85423E-01 2.43130E-01 4.23118E-02 4.56278E-02 7.08588E-02 1.13216E-01 -1.17848E00 -6.19113E-01 4.04116E-02 1.91627E-01 7.23751E-02 -1.29723E-01 6.23262E-02 1.12560E-01 1.96163E-01 1.13429E-01 -1.37256E-01 -1.13117E-01 2.47710E-02 -5.13731E-01 -7.77662E-01 -3.64231E-01 -1.01419E-01 1.80123E-01 1.05238E-01 -8.56915E-03 3.74263E-01 1.76390E-01 1.48714E-01 5.69149E-02 1.09181E-01 1.33174E-01 -FloatFrame 39 -2.70554E00 3.33366E-01 3.55645E-01 1.02358E-01 -2.58237E-01 1.09713E-01 2.07230E-01 5.16259E-02 1.91490E-02 -3.10057E-02 2.07937E-02 1.93065E-02 -2.72337E-02 -1.29821E00 -8.71505E-01 -1.22412E-01 1.30219E-01 2.34678E-01 7.41977E-02 4.58346E-02 1.62178E-01 1.73406E-01 3.06584E-01 7.16982E-02 -5.16024E-02 2.49875E-02 9.96881E-01 6.80168E-01 7.15614E-02 -1.91566E-01 2.15170E-01 5.07761E-02 -4.04253E-02 -1.84398E-01 -2.36885E-01 -6.27581E-02 1.42234E-01 3.17160E-03 -4.53708E-02 -FloatFrame 39 -2.87585E00 -7.49190E-02 2.56376E-01 1.45623E-01 -2.82299E-01 1.63519E-02 1.34351E-01 2.67994E-01 1.71388E-01 -1.18700E-01 -7.91579E-02 -4.68826E-02 1.96967E-02 -1.81594E-01 6.10559E-02 1.11973E-01 6.13720E-05 2.87545E-01 -7.89464E-02 2.19009E-02 -7.18379E-02 -4.07221E-02 5.06712E-02 4.97774E-03 -1.09945E-01 -2.05998E-02 2.01590E-01 5.25005E-02 -3.18585E-01 -3.20126E-01 5.45932E-02 3.95043E-02 -1.23108E-01 1.63437E-02 1.78197E-01 -1.17181E-01 -3.50597E-02 7.83901E-02 1.71578E-01 -FloatFrame 39 -3.53863E00 -4.57725E-01 1.56994E-01 5.58858E-02 -1.93273E-01 1.55923E-01 1.99230E-01 2.66174E-01 2.41749E-01 7.44243E-02 1.06375E-02 9.50720E-03 1.76113E-01 -1.09662E00 -8.19005E-01 -4.40997E-01 -1.89906E-01 2.89271E-01 1.13702E-01 -7.72732E-02 1.78522E-01 3.51604E-01 1.89403E-01 3.66385E-02 2.67877E-02 1.96565E-01 -1.01622E00 -6.55132E-01 -5.01649E-01 -2.57859E-01 -1.11559E-01 7.33264E-02 -9.39089E-02 1.68841E-02 2.09287E-01 2.01555E-01 1.46716E-01 2.58413E-01 1.16520E-01 -FloatFrame 39 -3.53194E00 -1.79864E-01 5.98747E-02 -6.22535E-02 1.18058E-01 2.27120E-01 1.58394E-01 1.13585E-01 2.02407E-01 9.29829E-02 5.06055E-02 -3.90864E-02 9.26163E-02 -1.19781E00 -5.94076E-01 -3.89676E-01 -2.57798E-01 1.75986E-01 -5.62007E-03 -7.20080E-02 -5.49537E-02 1.68565E-01 2.52226E-01 1.51694E-01 1.48468E-01 9.59201E-02 7.98856E-01 6.93934E-01 1.47055E-01 1.14572E-01 -1.13587E-01 -1.72919E-01 1.36173E-02 -2.82816E-01 -5.52343E-01 -1.48156E-01 1.10829E-01 -2.96690E-04 -3.02488E-01 -FloatFrame 39 -3.80216E00 -4.85639E-01 -8.53524E-02 -8.75485E-02 3.10341E-02 2.23415E-01 1.29957E-01 2.30148E-01 3.70753E-01 1.58397E-01 5.74322E-02 4.60942E-02 1.69331E-01 -2.97761E-01 -1.25071E-01 -2.93943E-01 -7.53345E-02 1.75685E-01 -5.92171E-02 -6.36559E-02 -1.04294E-01 -2.00740E-01 4.12462E-02 1.47468E-01 2.64910E-02 -1.05923E-01 6.99775E-01 7.96785E-02 2.25925E-01 3.15302E-01 -3.68374E-01 -8.82722E-02 6.50260E-02 1.53753E-01 -2.88590E-01 -2.68633E-01 -2.47051E-01 -1.31024E-01 -1.15677E-01 -FloatFrame 39 -4.07366E00 -6.68995E-01 -1.33300E-01 -1.12175E-01 -1.06313E-01 1.07318E-02 6.23432E-02 2.13040E-01 3.39954E-01 1.33526E-01 7.25359E-02 1.01585E-01 1.15617E-01 -4.98035E-01 -5.14397E-01 -1.63751E-01 5.75039E-02 -1.92388E-01 -9.38923E-02 -6.98199E-03 9.87994E-02 -1.20025E-01 -1.64074E-02 -9.53567E-02 1.74437E-02 -1.97566E-02 -2.16217E-01 -1.29726E-01 4.33762E-01 1.53462E-01 -2.00256E-01 6.87207E-02 9.41352E-02 7.22256E-02 3.77498E-02 -2.12300E-01 -2.17330E-01 -7.29068E-02 8.16120E-02 -FloatFrame 39 -3.83639E00 -5.82796E-01 -1.36949E-01 -1.94487E-02 -1.75886E-02 9.67059E-02 1.35574E-01 1.61879E-01 4.10095E-02 1.15670E-01 1.58105E-01 3.59982E-02 7.01896E-02 -5.13978E-01 -2.54797E-01 1.39819E-01 7.81273E-02 -2.45711E-02 9.50367E-03 3.04793E-02 -3.20687E-02 -1.62990E-01 -1.71054E-01 -6.98620E-02 -4.64159E-02 -2.43113E-02 6.49773E-02 3.65033E-01 2.06601E-01 4.28461E-02 2.42279E-01 1.78211E-01 -9.34203E-02 -1.61345E-01 -1.63341E-01 -6.26546E-02 5.93321E-02 4.84647E-02 4.82954E-02 -FloatFrame 39 -4.02997E00 -6.94261E-01 -1.03877E-01 -4.74954E-03 -7.43306E-02 1.33228E-01 1.51412E-01 2.12384E-01 8.23824E-02 7.65756E-02 -4.47512E-02 -2.16426E-02 7.28597E-02 -4.33058E-01 -1.49364E-01 4.28495E-02 1.00350E-01 4.98908E-02 8.43183E-02 -1.00402E-01 -6.25460E-02 -2.83366E-01 -7.90620E-02 -3.60246E-02 6.59084E-02 2.85388E-02 -4.12569E-02 -7.91300E-02 -2.92970E-01 -9.41315E-02 1.12735E-01 1.53242E-01 5.16565E-02 6.39961E-02 3.06506E-01 6.33868E-02 -6.10353E-02 1.81120E-01 1.19320E-01 -FloatFrame 39 -4.31614E00 -7.40435E-01 5.44666E-02 -9.42117E-03 6.46300E-03 2.32919E-01 1.60436E-01 1.98079E-01 2.07763E-01 -1.26570E-02 -1.24298E-02 -3.21692E-04 1.45020E-01 -5.55235E-01 -3.33926E-01 -1.53151E-01 -1.60042E-02 8.81636E-02 1.62746E-01 8.21358E-02 3.19274E-02 1.43517E-01 -1.07667E-01 -1.30897E-01 1.34704E-01 9.50085E-02 1.31692E-01 -1.03805E-02 -5.05945E-02 3.75884E-03 1.26383E-01 1.19537E-02 1.22826E-01 -5.07084E-03 5.35408E-01 5.80774E-02 2.64296E-01 1.98190E-01 1.75304E-01 -FloatFrame 39 -4.50672E00 -8.18359E-01 -9.04503E-02 -1.18254E-02 -5.64226E-02 9.50501E-02 -3.80591E-02 1.50494E-01 5.65873E-02 5.44640E-02 3.65113E-02 1.67494E-01 1.44156E-01 -3.01366E-01 -1.59745E-01 -7.74503E-03 1.04109E-01 1.76274E-01 9.62719E-02 2.24241E-02 -6.76168E-02 2.52041E-01 -2.09846E-02 2.28271E-01 2.64099E-01 2.03843E-01 8.74647E-01 5.49494E-01 -3.27228E-02 -5.58269E-03 -1.03297E-01 -2.81023E-01 -1.70375E-01 -2.98253E-01 -2.46792E-01 1.48387E-01 2.47370E-01 1.68784E-02 -1.50836E-01 -FloatFrame 39 -4.39163E00 -9.16723E-01 -2.90100E-01 -3.54528E-02 7.05750E-02 2.59452E-01 2.17710E-01 1.93807E-01 1.84526E-01 8.00346E-03 2.72078E-02 1.70702E-01 1.65198E-01 3.19411E-01 2.15568E-01 -1.85874E-01 -2.15869E-02 -1.51336E-02 -1.18276E-01 -8.82391E-02 -2.66326E-01 -1.03276E-01 4.07201E-02 1.16472E-01 1.51582E-01 -5.58277E-02 4.29145E-01 1.39089E-01 4.77706E-02 -6.50012E-03 -3.23548E-02 1.12088E-01 1.29318E-01 -6.53191E-02 -1.23902E-01 1.47959E-01 -1.31675E-01 -3.95094E-01 -3.41634E-01 -FloatFrame 39 -4.33134E00 -8.54006E-01 -1.11622E-01 9.93593E-02 1.01943E-01 2.29500E-01 1.73836E-01 1.44768E-01 3.34424E-01 5.55910E-02 1.83520E-01 2.42456E-01 2.76702E-01 1.27779E-01 -2.06555E-02 4.00256E-02 9.76087E-02 1.43919E-01 2.08360E-01 1.51742E-01 -1.32936E-01 1.28139E-01 1.26975E-01 9.65956E-02 -1.30995E-01 -1.37791E-01 -3.06729E-01 -1.37860E-01 4.25549E-01 1.42823E-01 3.20548E-02 1.62234E-01 -1.57876E-02 9.00767E-02 1.03476E-01 1.32715E-01 -1.05734E-02 -2.85786E-01 -1.03006E-01 -FloatFrame 39 -3.99673E00 -5.24868E-01 -1.31407E-01 -3.10080E-02 -8.67055E-03 1.14643E-01 7.21971E-02 -6.82462E-02 1.04487E-01 2.80632E-02 1.04043E-01 1.51261E-01 8.91924E-02 1.26826E-02 7.77080E-02 2.39675E-01 1.21236E-01 1.69212E-02 4.39577E-02 -1.04027E-01 -1.76249E-01 2.00395E-04 1.73435E-01 1.05899E-01 -1.34204E-01 -1.58834E-01 -1.75384E-01 3.56465E-02 2.11713E-02 -1.11185E-01 -1.58366E-01 -1.34450E-01 -2.11895E-01 5.72626E-03 -2.77836E-01 -1.12697E-03 -1.47008E-01 -7.49626E-02 -1.32547E-01 -FloatFrame 39 -4.37894E00 -8.39015E-01 -5.04248E-02 8.57833E-02 8.74962E-02 3.03410E-01 1.13683E-01 1.75580E-02 1.84726E-01 1.81439E-01 1.33107E-01 3.64985E-02 6.36432E-03 -4.76049E-02 1.49910E-02 6.11969E-02 -1.35760E-02 -1.44467E-02 7.39101E-02 -6.01533E-02 -1.27210E-01 -1.49697E-01 1.25848E-01 -5.04128E-02 -2.05958E-01 -2.70338E-01 -3.94899E-01 -3.91855E-01 -1.58693E-01 -4.44481E-03 7.92455E-02 1.44809E-01 1.45513E-01 2.62053E-01 8.00391E-02 -2.00597E-02 -7.68349E-02 1.94415E-02 7.60057E-02 -Signal: SpeechEndSignal -Signal: DataEndSignal: creation time: 1424472926655, duration: 5235ms -Data: null diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-fft.dump b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-fft.dump deleted file mode 100755 index f8e2cde2..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-fft.dump +++ /dev/null @@ -1,321 +0,0 @@ -Signal: DataStartSignal: creation time: 1422745325823 -Signal: SpeechStartSignal -Frame 257 2.03757E04 3.67140E03 1.64282E04 5.56934E03 6.08696E02 1.10905E03 5.21105E02 4.72547E02 1.64238E03 1.35803E03 1.67341E03 8.97907E02 1.74697E03 1.69577E03 4.58518E02 6.78317E02 1.08609E03 7.52388E03 6.46355E03 3.01316E03 8.75519E02 3.07216E03 8.75700E02 6.20193E02 1.13391E03 1.72985E03 8.51864E02 6.77294E02 3.76860E03 6.21666E03 3.45170E03 3.31255E03 1.22321E04 1.08465E03 6.53076E02 3.30064E02 4.16184E02 1.16052E03 1.47806E03 5.78383E01 1.13450E02 2.93839E02 2.16487E02 1.54981E03 7.90604E01 9.45847E02 9.97054E02 2.63209E03 3.81174E03 1.10102E03 1.54133E02 3.32039E01 3.23890E03 1.33129E04 2.11909E04 6.47680E03 3.16901E03 2.45067E03 1.13343E03 3.81980E03 3.93412E03 1.99295E03 6.31880E02 3.92319E03 8.97699E03 1.17952E04 6.15608E03 5.60246E03 3.70233E03 2.47421E03 1.94054E02 5.75080E01 6.05337E02 2.95438E03 3.85351E03 6.29110E03 4.64819E03 1.48740E03 8.51428E02 1.25701E03 1.64163E03 2.76219E03 1.13016E03 2.01853E03 2.65661E03 1.28133E03 8.53845E02 1.16747E03 8.80747E02 2.44527E02 1.17772E03 3.59314E03 4.31266E03 1.86080E03 1.07441E03 1.10333E03 1.62707E03 1.83065E02 3.43825E03 8.12163E03 4.81843E03 3.53780E02 1.06560E03 7.76553E03 5.45961E03 8.41377E02 3.29705E03 7.03683E03 1.13097E04 8.22953E03 8.05687E03 1.57725E04 1.43068E04 3.39602E03 2.47134E03 9.23501E03 9.33037E03 4.12103E03 1.07634E03 3.99502E03 2.35035E03 6.89115E03 8.93273E03 1.77083E03 4.07412E03 8.84247E03 4.81316E03 6.89106E03 9.87174E03 5.24080E03 9.96530E03 2.09605E04 2.31274E04 1.94775E04 1.06631E04 1.01282E04 9.74714E03 7.49937E03 4.12688E03 1.31515E04 7.88232E03 9.76541E03 3.14164E03 5.51877E01 9.51268E02 7.21101E03 1.02619E04 5.51888E03 6.14273E03 1.42756E04 3.17299E03 1.53113E03 5.30280E03 5.48049E02 3.51888E03 1.92237E03 2.21189E03 1.36883E03 5.92712E02 1.11634E03 7.40630E02 1.14630E02 1.86908E03 5.60356E03 9.94804E03 9.02726E03 1.48468E04 1.60731E04 5.02820E03 1.35118E03 1.63211E03 1.54555E02 1.27026E03 1.75266E02 7.28952E02 9.74345E01 5.51951E03 1.65958E04 4.59507E03 1.53411E03 3.46168E03 2.04782E03 3.45961E03 8.32131E03 1.87932E03 1.10386E03 2.80798E03 4.60078E02 8.75589E02 6.23023E03 1.50367E04 1.12242E04 1.13660E04 3.31653E03 1.42830E03 1.71205E03 1.69583E03 1.49690E02 8.19324E02 1.69247E03 1.05482E03 3.74037E01 1.30644E03 1.04611E02 1.38197E03 2.23403E03 2.14759E03 1.31181E03 1.30568E03 8.57420E02 1.16834E03 8.02413E02 1.48805E01 5.70221E02 1.43876E03 3.90258E03 3.30281E03 2.97680E02 1.93335E03 3.72277E03 5.54987E03 1.10458E03 1.40020E03 6.62192E03 8.52853E03 1.12562E03 1.34320E02 6.74429E02 4.29634E03 1.61473E03 1.93334E03 1.35334E03 6.06731E02 4.55006E02 5.89249E02 6.63215E01 2.93691E03 2.52871E03 4.53668E02 8.24741E02 3.91125E02 4.57701E02 5.06222E02 6.24673E02 6.79337E00 1.47461E03 2.32373E03 2.45749E03 1.60371E03 3.23249E03 4.45588E03 6.67578E03 8.86738E02 3.10219E01 6.75951E02 5.84898E03 7.66637E03 -Frame 257 2.31967E05 1.45934E05 4.23452E04 1.49205E04 7.87295E03 5.94822E03 3.64449E03 1.71207E03 1.02581E03 2.80466E03 1.25592E03 9.74622E02 5.66790E02 5.98716E02 1.84793E02 7.34798E02 2.95378E02 1.50711E03 1.68344E03 4.24514E02 3.15209E03 4.23846E03 5.03600E03 1.25961E04 1.25121E04 3.80081E03 1.78722E03 2.23070E02 7.77275E02 6.17964E02 8.23505E01 4.43985E03 1.32310E04 7.84387E03 1.08701E03 2.28796E02 5.51587E02 1.17990E03 1.94435E03 1.17914E03 4.85333E01 1.58266E02 8.46413E00 9.09380E01 1.21063E03 8.26298E03 1.24294E04 3.91737E03 3.00745E03 2.15368E03 9.41481E02 1.02322E03 3.51619E03 5.62815E03 9.03209E03 1.23652E03 3.54056E03 2.86850E03 1.09852E03 2.25820E03 3.10545E03 2.47984E03 2.09302E03 4.21284E03 1.54039E04 4.75222E03 2.06098E03 5.90333E03 3.07737E03 1.34369E03 7.25718E02 1.66062E03 3.41097E03 5.18602E03 3.33032E03 4.90536E03 6.72950E03 2.51188E03 1.23515E03 2.17169E03 5.29998E03 4.36035E03 5.43596E02 1.26837E02 1.29064E02 2.15718E03 8.38916E02 1.06880E03 2.54140E03 2.38132E03 4.34405E03 7.40298E03 4.99146E03 5.42263E02 1.76002E03 8.27021E03 2.28004E04 2.10975E04 3.16563E03 2.18296E03 2.79155E03 8.71557E02 2.92893E03 4.74508E03 2.17043E03 4.36504E02 1.07785E03 1.88874E03 4.12934E01 1.91911E03 5.29337E03 3.30264E02 3.60282E03 4.07120E03 6.46828E02 1.42700E03 2.96942E02 2.32251E03 3.91753E03 3.69160E03 1.80402E03 4.26647E03 4.23957E03 5.67335E03 4.22651E03 1.39390E02 5.68919E02 1.05445E03 6.15756E03 5.21964E03 4.25816E03 1.33154E03 2.21652E03 4.48642E03 1.19907E03 2.80720E03 7.18104E03 7.58172E03 3.70568E03 2.81990E03 6.11432E03 6.57982E03 3.32501E03 3.44940E02 1.37708E02 3.98526E03 1.75688E04 2.33290E04 1.64762E04 9.91097E03 1.28396E03 6.28939E03 5.58741E03 4.55283E03 1.27408E04 1.00752E04 4.76999E03 9.77075E03 1.74212E04 6.80502E03 3.65614E00 1.79884E03 2.36760E03 4.50962E03 6.00723E03 3.56255E03 1.53446E03 1.24250E03 3.76378E03 4.92989E03 3.86047E03 1.37186E03 1.87296E03 6.38859E03 3.89332E03 1.34470E02 4.84782E03 1.10742E04 1.17512E04 9.76944E03 4.60684E02 6.38392E02 2.21820E02 3.12609E03 2.53019E03 8.16273E02 1.05737E03 7.22430E02 4.58469E02 8.28938E03 1.50756E04 9.96904E03 7.55131E03 1.64659E03 1.01763E03 2.45462E03 2.92906E03 1.46044E03 2.27807E03 8.22760E02 1.59736E02 1.58498E03 3.92891E03 2.31251E03 1.64234E02 1.99280E03 2.16177E03 9.03928E02 4.31138E02 1.14512E03 1.98179E03 1.28681E03 9.92850E02 5.53825E02 2.20591E02 2.14000E01 1.43810E03 5.49479E02 8.88092E01 5.81643E02 3.24755E03 2.12287E03 2.44093E02 6.21632E03 1.26862E04 6.64629E03 6.22860E03 8.43641E03 6.93746E03 3.37456E03 7.76680E02 8.43350E02 7.99574E02 9.39526E02 8.42887E02 4.86476E02 1.72161E03 3.00647E03 3.61059E02 5.68622E02 1.04146E03 1.63379E03 1.58942E03 2.95210E02 6.01187E01 2.81777E02 7.78970E02 2.13749E03 5.03735E03 2.50281E03 5.18261E02 9.66399E02 1.64297E02 5.97169E02 6.64127E02 5.10507E03 9.28915E03 -Frame 257 1.49815E05 5.51341E04 6.80598E02 3.09213E03 4.35464E03 8.14684E01 3.75400E03 1.23091E03 9.41303E02 3.44450E03 2.25699E03 1.97938E03 4.23322E03 2.77186E03 2.44730E02 2.34606E02 1.08590E03 3.45872E02 1.34775E02 1.11919E03 1.58601E02 5.57367E02 1.38775E03 1.14304E04 1.06579E04 2.43492E03 1.44658E03 1.37396E03 1.27429E02 9.50491E00 3.87311E01 1.68710E03 3.36538E03 1.11819E03 1.80739E03 8.50323E02 3.08226E01 5.24022E02 6.75221E02 3.25222E03 1.61161E03 6.94051E02 1.44949E03 1.91862E03 3.94553E03 5.74560E03 6.09629E03 6.03480E03 3.40057E03 8.46577E02 1.20920E03 1.47063E03 8.85197E01 7.46529E02 6.16036E03 8.76748E03 2.70665E03 1.22722E03 1.48721E02 1.64706E01 5.65426E02 5.75687E02 1.06635E02 4.55776E03 1.86167E04 9.85654E03 1.14108E03 9.80120E02 2.96261E02 2.71333E02 1.16897E02 1.45603E03 4.07080E03 6.69743E03 1.62122E03 1.46739E03 1.21739E03 1.13588E03 9.63516E02 3.80859E02 1.50880E03 9.31847E02 2.10940E02 5.87313E01 1.47351E03 4.18440E03 3.33300E03 5.04061E02 5.15153E02 2.16747E03 2.11187E02 1.00324E03 9.30895E02 6.81921E02 2.57724E02 9.27764E03 1.86710E04 1.52197E04 1.53436E04 9.26961E03 2.34879E03 8.04215E02 1.19144E03 2.31401E02 8.49595E02 4.69711E02 2.40026E03 5.75998E03 4.45530E03 4.12878E03 1.45373E03 2.10605E02 1.08976E03 3.83166E03 4.58302E03 3.61769E03 1.23900E03 4.82684E02 3.28884E03 9.09018E03 5.48694E03 4.65985E03 1.08690E03 6.14350E03 1.58536E04 1.07171E04 5.24879E03 7.80698E03 5.24084E03 3.47460E01 3.97207E03 7.28894E03 1.96427E03 2.31614E02 1.97660E03 4.27859E03 1.51440E03 1.30860E03 1.51298E02 2.00118E02 4.39667E02 4.06958E02 2.02366E03 1.61161E03 4.15088E02 6.25537E02 1.13471E04 1.51038E04 8.67242E03 4.74741E03 1.15355E03 9.75871E03 1.31806E04 9.19319E03 6.34001E03 3.39413E03 6.92976E02 2.58160E03 2.30921E04 2.61601E04 5.49897E03 1.60447E02 7.16822E02 1.25901E03 1.51997E03 9.81036E02 1.15307E03 4.48677E02 1.12946E03 2.06175E02 1.19257E03 1.07152E02 6.23161E03 6.25970E03 1.32205E03 1.75013E03 3.41803E03 3.35323E03 3.08315E03 7.94065E03 7.52781E03 5.26500E03 3.75257E03 1.25329E03 4.07180E03 2.76769E03 1.38540E03 5.21908E02 1.66952E03 4.44377E03 6.42997E01 6.06884E03 1.15252E04 7.92629E03 3.13735E03 3.08411E03 3.12634E03 1.31553E03 2.23401E02 5.88119E02 2.47893E02 5.21275E02 5.33560E03 9.08221E03 1.64368E03 8.51484E02 2.85647E03 1.73327E03 2.08548E02 3.02380E03 5.55222E03 2.69810E03 4.04608E02 1.76194E03 4.04832E03 3.15482E03 2.52182E03 2.99912E03 2.47334E03 2.02217E03 1.13988E03 8.68589E02 2.71763E03 5.85233E03 2.36708E03 2.22576E03 2.96106E03 6.38512E02 1.25453E03 1.15257E03 2.34414E03 2.52870E03 1.43774E03 2.81698E02 2.81348E02 8.06344E02 1.75904E03 1.31581E03 1.54876E03 1.21480E03 7.18904E02 1.19701E03 1.21191E03 3.48913E01 3.15499E01 3.56560E01 8.42262E00 8.94148E01 6.09705E02 1.47236E03 5.69469E02 5.88179E02 1.87509E03 2.76819E03 2.87178E03 1.87476E03 2.25148E01 -Frame 257 2.74389E04 1.20540E05 7.22623E04 2.66289E03 9.73760E03 1.14046E04 6.99765E02 1.46085E03 4.97371E02 4.86888E02 1.00347E03 1.29351E03 1.14832E03 5.55835E02 2.56818E02 6.07437E01 1.15798E03 1.89999E03 2.86591E02 4.48377E02 2.94349E03 4.11573E03 6.22606E03 4.35385E03 3.05238E02 1.73168E03 3.20769E03 2.37245E03 7.73550E02 5.79690E02 8.51324E02 2.90629E03 4.78814E03 2.28362E03 8.61122E02 2.86451E03 3.05264E03 4.05131E02 2.70021E03 6.67080E03 4.66841E03 2.20750E03 4.01282E02 1.44983E01 4.30361E02 3.18372E02 1.98404E02 9.98814E01 2.43847E02 1.58682E02 3.48824E02 1.54794E02 1.17274E03 5.42102E03 9.41323E03 4.46730E03 1.51537E03 2.02651E03 2.25139E03 2.07297E03 1.14616E03 3.90943E02 7.27076E02 2.68378E03 7.62191E03 2.60207E03 2.35533E03 1.54842E03 7.87044E02 4.93765E03 3.55909E03 8.92869E02 7.71190E02 3.29987E03 3.89516E03 1.33139E03 8.53378E02 2.13616E02 1.09839E03 6.16846E02 5.26216E01 8.67831E01 1.10145E02 3.38969E02 2.52815E02 1.16596E03 8.64044E02 1.92634E02 1.57274E03 1.01057E03 6.42893E02 3.65595E03 4.27645E03 6.78291E03 7.49053E03 4.53048E02 3.13650E03 3.54622E03 6.08781E03 5.43462E03 2.12417E03 4.12640E03 5.29381E02 1.75159E03 4.55175E03 3.06037E03 2.17884E03 4.05394E03 2.53249E03 2.49626E03 9.98356E03 6.06721E03 3.84495E03 6.18631E02 1.65383E02 3.71437E02 9.46936E02 6.68634E03 1.39206E04 4.38425E03 9.96927E03 1.89488E04 9.19430E03 5.18722E03 8.21037E03 1.64711E03 2.11477E03 1.08638E04 1.21822E04 8.49812E03 1.99726E04 1.24951E04 2.70728E03 5.24683E03 1.03446E04 1.19662E04 1.19829E03 1.26324E03 8.92727E02 1.15731E02 1.29007E03 6.02698E03 7.60851E03 1.32039E03 3.77253E02 1.64971E03 5.70903E03 1.85756E04 3.33643E04 1.82268E04 8.66078E03 7.93727E03 2.61616E02 7.55647E03 7.64859E03 7.40933E03 3.88343E03 1.24176E03 1.33036E04 2.31117E04 1.26274E04 1.98943E03 1.65072E02 1.44337E03 3.36683E03 2.09573E03 5.33491E03 4.51829E03 2.68060E02 1.66218E02 9.07750E02 9.46611E03 1.03253E04 1.85930E03 2.64571E02 8.36517E02 2.69520E02 1.60192E03 2.74336E03 2.09651E03 4.31752E03 2.37507E03 7.98269E03 9.26996E03 4.30276E03 1.39738E03 2.48258E02 1.78788E03 1.24685E03 2.35735E03 3.68670E03 8.82124E02 1.96769E03 2.20131E03 1.86608E03 4.38042E02 2.59645E02 3.60230E02 1.65676E03 2.27351E03 2.36310E03 3.67898E03 7.33443E03 1.24560E04 4.94492E03 2.28083E02 1.33784E03 1.52912E03 2.67905E02 1.87547E03 4.58275E02 2.57762E02 2.58324E01 1.37698E03 7.57567E02 1.27869E03 1.39334E03 2.07230E03 1.33274E02 3.41407E02 1.11298E02 1.26225E03 7.21438E03 6.14649E03 1.93627E03 3.60222E03 3.81998E03 4.90534E02 5.87785E03 4.46030E03 5.49787E02 1.31860E-01 2.01284E02 1.06787E02 1.26263E01 4.72830E02 2.09386E03 1.95223E03 1.41855E03 3.91626E02 3.47464E02 1.81349E03 7.10691E02 6.84062E02 7.36467E02 1.58211E02 8.79704E00 1.13192E02 7.35748E02 1.91228E03 6.37099E02 2.75984E02 5.04385E02 5.45659E02 2.04250E02 7.27906E02 2.77811E01 -Frame 257 5.06837E05 1.90505E05 4.88687E03 3.90462E04 1.56423E05 1.04604E05 1.29559E04 3.44669E02 3.33205E03 1.25704E04 4.64416E03 1.33374E03 1.23230E03 2.21090E03 5.86510E02 2.25256E03 6.38276E03 3.29025E02 1.27152E03 2.84665E02 4.56737E03 8.66486E02 2.35952E03 2.28492E03 1.09789E03 3.00422E00 1.19070E03 1.78407E03 4.27752E01 3.24218E02 2.22110E01 9.02278E02 3.20333E03 8.38091E02 3.86598E02 3.68505E03 4.60442E03 1.50352E03 2.31562E02 9.77597E02 1.38064E03 1.10815E03 6.47500E01 3.38904E01 8.45306E01 1.02450E02 5.28504E02 5.13312E02 1.57538E03 1.52539E03 5.25320E02 3.00647E02 1.80197E03 3.14133E02 1.09465E03 1.19868E03 1.01097E03 1.60529E03 1.85211E02 1.69865E02 1.27992E03 2.70448E03 4.19018E03 7.48997E03 9.49509E03 5.92387E03 5.08297E03 3.04879E03 4.23063E03 1.11140E04 9.69025E03 5.75703E03 4.22147E03 4.61456E02 3.55957E03 3.86601E03 5.69789E03 4.27723E03 1.60296E03 3.04001E03 2.13302E03 9.76119E02 1.17511E03 1.94673E03 1.22637E03 1.09577E03 1.18517E03 2.94634E03 2.01089E03 1.25843E03 2.56683E03 3.99436E03 5.19613E02 1.03675E03 4.48962E03 1.48587E04 1.06040E04 2.12884E03 3.34503E03 5.29784E03 8.18941E02 6.71073E03 5.15010E03 6.28306E02 1.84778E03 7.79796E03 6.33365E03 5.56086E03 8.19955E03 1.09815E04 1.21117E04 6.86002E03 2.13030E03 2.30136E03 9.63807E02 1.78530E03 4.02174E03 6.93983E03 7.08610E03 7.18876E03 7.25861E03 1.05751E04 1.35350E04 7.11121E03 1.76775E03 2.64310E03 3.60192E03 1.14890E03 9.88016E03 1.45007E04 1.18992E04 1.41587E04 1.05564E04 5.88464E03 2.86262E03 1.81480E04 1.87858E04 4.87611E03 4.21832E02 1.13058E03 4.84909E03 1.71624E04 1.23834E04 3.43362E03 3.11975E03 2.01093E03 2.05015E03 1.08487E03 1.44752E04 2.36150E04 1.21572E04 6.83441E03 9.93072E02 2.93433E03 1.25558E04 1.40567E04 1.07374E04 6.99918E03 2.48353E03 1.40317E02 5.12590E03 6.90702E03 1.84947E03 1.60144E03 1.12601E03 1.62619E03 2.36371E03 4.54220E03 5.52233E03 7.43984E03 1.26940E04 1.62106E04 5.47142E03 3.60448E01 1.02136E03 4.34976E03 2.06885E03 1.38598E03 6.00855E03 9.51189E03 3.43452E03 6.31166E02 5.57600E03 1.76252E03 1.71336E03 2.35679E03 5.55694E03 4.54958E03 1.31742E03 2.33638E02 1.15641E03 1.37901E03 3.16002E03 1.93097E03 7.67587E02 3.01254E02 1.52879E03 1.82699E03 5.24185E02 1.06170E03 7.54951E02 2.05247E03 3.60286E03 3.93744E03 4.67921E02 1.02734E03 1.46532E03 3.23620E03 1.40760E03 3.73694E02 6.11128E02 2.54923E02 5.51227E02 1.61703E03 3.01473E03 3.39027E03 7.21241E02 4.80713E03 8.52741E03 3.73028E03 7.68979E02 5.83293E00 3.45715E03 5.76209E03 2.43463E03 3.54213E03 5.04808E03 5.84786E03 5.12404E03 1.70817E03 2.09238E02 1.16041E02 2.00054E02 3.81823E01 3.40441E01 3.80102E02 9.61716E02 8.66888E02 1.56483E03 9.00133E02 1.97085E03 3.45572E03 2.03904E03 1.31089E03 9.82720E02 6.75890E02 7.70755E02 2.90084E02 4.33547E02 1.78350E03 5.31202E02 4.95715E01 5.91491E01 5.96391E01 1.94795E02 1.94383E03 3.27921E03 -Frame 257 3.13934E05 2.14313E05 1.10238E05 2.58485E05 7.21548E05 5.97036E05 6.42811E04 1.62969E04 1.47275E05 2.40197E05 9.52169E04 1.71506E04 1.65355E05 3.03040E05 1.84158E05 1.32797E04 4.16936E04 1.15841E05 1.13036E05 4.90664E04 9.93975E03 1.20997E05 1.30256E05 5.40412E04 3.87456E03 7.93038E03 2.66515E04 2.30973E04 2.39319E03 1.31033E03 2.22507E03 2.31431E02 1.39884E03 2.66705E03 4.29908E03 1.50687E03 9.49746E02 3.81525E03 1.15372E03 8.67006E02 1.80748E03 2.43031E03 1.33904E03 5.79550E02 1.27244E02 7.65339E02 1.74605E03 3.68835E02 1.02095E03 7.11437E02 3.71597E02 1.03745E03 3.77198E02 5.33923E03 7.85140E03 3.96784E03 2.73347E03 5.11305E02 2.87743E02 3.58827E02 1.61848E02 1.61263E03 2.92249E03 1.32026E03 5.68959E03 3.89502E02 1.07946E03 1.12544E03 4.83411E03 2.38614E03 1.46570E03 4.64965E02 7.10623E03 1.06717E04 2.18545E03 1.81303E03 3.51362E03 1.21664E03 2.14752E03 4.75589E03 1.34280E03 6.53649E01 2.05909E03 5.47927E03 1.15527E03 3.55778E01 5.05162E03 7.89562E03 2.28274E03 9.89668E02 6.74158E02 1.24717E03 4.26727E03 5.66729E03 3.43449E03 1.13496E03 7.27574E03 1.37644E03 6.43686E02 2.56767E03 1.07328E04 1.32372E04 1.11170E03 1.66368E03 6.20427E01 4.42925E03 3.10294E03 4.47145E02 2.25582E02 1.34055E03 1.18493E03 3.09780E03 1.40237E03 6.88217E02 3.47880E03 1.35735E03 5.26073E02 1.81319E02 2.07631E02 2.63153E02 1.92475E03 5.17118E03 1.18717E04 8.91626E03 3.41776E03 3.66579E03 6.91485E03 2.70556E03 1.03874E04 8.70149E03 6.72952E03 2.15318E03 5.17043E03 7.05228E03 2.42913E02 6.65510E03 1.27224E04 1.39539E03 1.57032E03 3.75594E03 7.86335E03 1.06798E04 2.72558E03 1.75094E02 2.37625E03 2.84373E03 4.31793E02 5.40040E03 2.81707E04 2.00802E04 1.58339E03 6.89374E01 1.05861E03 7.40978E02 1.19738E03 1.97787E02 1.09541E03 3.78618E03 4.47554E03 3.17710E03 1.20732E03 1.08564E03 4.95443E03 3.35886E03 9.78133E02 1.42875E03 2.00310E03 3.06986E03 2.28446E03 1.22825E03 5.31947E03 6.49211E02 4.50078E03 7.68473E03 1.14633E04 1.97466E04 1.18958E04 1.38907E03 1.69577E03 9.70357E02 1.27453E03 9.89518E01 4.93099E03 3.44445E03 5.13196E02 5.11449E03 2.69516E03 3.16549E03 1.76088E03 1.23943E03 6.76676E03 1.01748E04 1.29382E04 6.43013E03 1.08360E02 5.23339E03 5.30953E03 4.29890E03 5.08940E03 4.57654E03 2.41511E03 1.89340E02 3.70507E03 9.57452E03 6.46974E03 5.68406E03 3.39823E03 2.28721E02 2.44679E03 3.02662E03 3.17056E03 3.11689E03 4.01879E03 7.06179E03 4.03064E03 1.22554E03 9.13143E03 1.15175E04 2.51865E03 2.76535E03 4.81525E03 1.56442E03 1.21230E03 3.89515E03 7.52694E02 6.15360E02 1.33220E03 1.77091E03 3.23759E03 1.52536E03 1.26160E03 7.40929E02 4.46322E02 1.14628E02 6.37960E02 4.68725E02 6.30195E02 1.46180E03 1.06304E03 2.68897E02 8.16198E02 3.20744E03 7.44196E02 2.72437E02 1.27712E02 1.50859E02 8.77568E02 1.15389E03 1.03220E03 1.98972E03 1.10353E03 2.84984E02 3.86062E01 4.54364E02 1.14073E03 1.11041E02 7.26599E02 -Frame 257 4.68913E03 4.43557E04 3.15930E04 4.74215E05 3.65258E05 1.24070E05 9.50324E05 9.60529E05 2.45871E05 2.23012E05 7.72172E05 3.00990E05 9.21843E04 1.50910E06 1.24122E06 5.03701E04 3.63603E05 8.47249E05 8.81104E04 6.47302E05 1.60132E06 8.84252E05 3.17618E05 1.10633E06 7.66951E05 8.61759E04 1.24126E05 3.19830E05 1.05630E05 1.08560E04 7.89253E03 3.97098E03 3.05728E03 2.37617E03 1.09652E03 1.03254E03 9.65572E03 1.35030E04 3.13598E03 9.50841E03 9.43763E03 1.27422E03 7.14006E02 9.48517E02 2.73377E02 2.92624E03 3.63828E03 1.07053E03 1.97673E03 2.69322E03 2.43748E03 4.59928E03 3.83503E03 3.52552E03 8.34663E03 6.00742E03 1.47282E03 1.88220E02 1.88739E02 1.31936E03 6.86796E03 6.25315E03 1.27921E03 6.16374E03 4.94977E03 2.34727E03 6.32346E03 8.46712E03 8.11425E03 4.80994E03 8.78668E03 1.29050E04 6.98257E03 2.66666E03 1.71367E03 8.80420E02 1.91375E03 3.29510E03 8.33342E02 4.36534E03 1.07363E04 9.23049E03 1.76935E04 2.20293E04 7.60514E03 4.30791E03 1.64721E04 2.44499E04 8.77047E03 1.11053E03 2.33353E02 1.84852E03 8.35027E03 1.33875E04 5.47134E03 2.55789E03 1.00092E04 4.62673E03 8.74386E02 7.28701E02 7.38874E03 2.46804E04 2.47153E04 6.48099E03 8.19067E02 2.39334E03 6.54731E03 7.35298E03 1.18129E03 4.30598E03 3.82981E03 1.77458E02 1.99199E03 4.27630E03 3.12788E03 1.08399E03 8.29829E02 2.12016E02 5.40143E01 1.27050E02 5.45131E03 1.24890E04 4.14019E03 2.56306E03 2.48323E03 7.28518E02 8.95693E03 1.65069E04 1.00176E04 2.94551E03 1.20591E04 5.83445E03 1.13735E03 3.07594E03 5.83136E02 1.68705E03 3.68770E03 9.39870E03 5.80780E03 7.21025E03 1.22432E04 2.30891E03 4.28274E03 1.34800E04 2.36083E04 1.27720E04 7.28266E03 5.05393E02 2.10630E04 1.78646E04 2.24467E03 4.98885E03 1.05445E04 1.46533E04 1.49862E04 1.69137E04 7.50508E03 5.51190E03 4.31250E04 3.32320E04 1.08141E04 3.52632E03 3.35097E03 1.08985E04 9.82812E03 1.07787E04 5.39705E03 3.35979E03 4.99497E03 7.32062E03 1.94088E03 6.44571E03 1.10155E04 5.42994E03 9.16657E02 5.48406E03 9.16979E03 2.10122E03 2.82037E02 1.41532E03 2.09048E03 4.68781E03 1.15409E04 3.31904E03 1.11177E04 3.03323E04 2.18424E04 1.08844E04 1.26579E04 1.04455E04 2.65446E02 1.83813E04 1.47628E04 1.87665E02 1.20932E04 1.76675E04 8.24820E03 6.70562E03 5.06348E03 6.13426E02 1.44075E03 2.48584E03 3.04042E03 4.98364E03 2.38051E03 2.14580E03 4.10415E03 4.57782E03 2.02604E03 2.95076E03 5.75506E03 2.15983E02 4.08422E03 6.17991E03 3.70359E03 5.67118E02 2.42177E03 1.27936E03 8.72844E02 1.19717E03 1.35919E03 1.38727E03 1.79275E03 3.83514E03 2.59160E03 1.27177E03 5.05078E02 1.90839E02 2.98763E03 2.16555E03 3.27105E02 3.91351E03 3.41887E03 3.08108E03 4.35314E03 2.89005E03 3.39416E03 4.83711E03 2.26329E03 1.07505E03 1.19699E03 1.42582E03 1.16912E03 6.08456E02 6.53956E01 2.71163E02 1.87578E03 1.55723E03 4.15256E02 2.43294E02 1.10515E03 2.02489E02 1.53825E02 1.29684E03 2.69575E03 4.02825E03 4.78130E03 -Frame 257 8.84676E04 4.22432E04 1.86634E05 1.73708E06 2.29489E06 7.29018E05 1.25828E05 2.32867E06 2.94264E06 7.01408E05 3.61806E05 3.70318E06 5.76297E06 1.95353E06 1.09529E06 7.00296E06 6.29218E06 5.92434E05 3.24191E06 7.50835E06 4.98948E06 1.44575E05 2.35062E06 7.63508E06 4.15803E06 7.20601E04 2.36026E06 3.38471E06 1.09047E06 2.20224E05 8.67361E04 6.34864E04 2.25630E04 1.84406E03 7.13195E03 3.68494E03 1.68566E03 7.57258E03 1.43919E04 1.70093E04 2.20721E03 4.66756E03 1.27161E04 1.17278E04 2.05662E03 1.71942E04 3.18435E04 2.29634E04 9.61815E03 1.43131E03 1.70954E02 4.54633E03 8.21393E03 2.81681E03 4.34706E02 1.88938E03 2.93166E03 2.00967E03 1.69368E03 7.15617E02 7.67549E03 2.80222E04 2.05359E04 5.81539E03 4.00725E03 1.46276E04 1.48785E04 1.42793E03 1.12277E04 1.85249E04 1.98163E04 4.06174E03 1.59875E04 3.50636E04 4.04297E04 3.85706E04 3.69388E04 2.43075E04 1.90720E03 1.14556E04 1.60107E04 1.04242E04 1.96928E04 3.69962E03 1.60729E03 7.22583E03 8.92050E03 3.18509E03 3.84895E03 2.12475E03 4.66844E03 5.27057E03 5.39936E02 6.27366E03 1.01142E04 1.45786E03 6.98223E03 2.06467E04 1.34916E04 5.67857E03 1.36068E04 5.23526E03 5.52531E04 8.20002E04 4.26269E04 1.12489E04 1.17136E03 3.23099E04 2.77051E04 3.65821E03 7.34579E02 9.34576E02 5.85083E02 1.51019E03 2.00089E03 5.32477E02 8.82598E02 1.90969E03 3.81055E03 2.83256E03 8.50445E02 1.03535E04 5.86762E03 2.91814E02 3.61874E03 1.88428E04 2.36779E04 5.04035E03 5.62295E03 1.91361E03 7.75695E03 1.30626E04 7.64713E03 4.48195E03 1.41623E04 1.63491E04 1.55259E04 2.57727E04 1.37661E04 2.97196E03 8.07407E03 7.87114E02 7.37341E03 3.75826E04 5.69971E04 3.77642E04 3.16982E04 3.08643E04 3.84454E04 9.43352E03 8.45314E03 4.29313E04 3.38574E04 1.88665E03 3.03268E03 9.74045E02 2.58921E04 5.17532E04 6.37783E04 5.78630E04 2.76470E04 2.97943E03 5.25973E02 1.08997E04 2.60958E04 1.02662E04 6.88513E02 8.44963E02 2.73452E03 8.02652E03 6.42878E03 3.91431E03 9.94886E02 4.56137E02 3.67303E02 1.56185E03 2.48062E03 1.61208E02 1.76738E03 7.08513E01 9.31548E02 2.18195E03 2.06080E04 5.41097E04 3.59973E04 3.68701E04 9.78211E04 3.60761E04 2.89627E03 3.49299E04 1.65643E04 4.80629E03 2.52012E04 1.45095E03 1.28540E04 1.14650E04 2.00080E03 4.85284E03 1.58820E04 1.48930E04 1.03525E04 8.25512E03 3.61159E03 3.06445E03 2.71116E03 5.81731E02 3.51535E02 2.12505E02 4.86271E03 8.50339E03 6.68751E03 1.04618E03 4.76894E02 1.37242E03 6.61716E02 1.60340E03 3.08087E03 3.97857E03 2.74757E03 1.65946E03 1.16719E03 6.66752E02 6.52148E02 3.20493E03 6.07052E03 3.43724E03 3.97784E02 2.81662E02 2.27158E03 2.69366E03 1.80682E03 2.95324E03 8.49717E02 1.50466E03 2.00746E03 8.91146E02 1.27007E03 7.40890E02 3.83213E02 3.96981E01 6.08095E02 1.15031E03 1.01262E03 1.02655E03 7.54681E02 1.46843E03 4.64923E03 2.92277E03 2.63577E02 3.86376E03 2.16656E03 1.71395E02 1.18535E02 8.80537E02 4.52983E02 1.33057E03 1.48863E03 -Frame 257 1.05983E05 1.60899E05 2.53696E05 2.72704E06 4.79739E06 9.16741E05 3.37333E05 4.67698E06 7.38112E06 8.05719E05 7.89362E05 1.01267E07 1.15583E07 5.25183E05 9.30592E06 5.27529E07 5.35255E07 7.32567E06 8.12675E06 2.14171E07 9.19138E06 4.72032E06 2.49922E07 6.68348E07 4.52942E07 9.34286E06 2.31071E07 2.70181E07 1.00209E07 3.55444E06 1.34360E06 3.65312E04 1.78807E05 4.97076E05 8.19045E04 1.44173E05 3.07970E05 1.35610E05 5.28038E03 5.21527E04 1.30026E05 1.44825E04 8.99527E04 8.01841E04 1.38454E05 8.03347E04 1.66552E05 3.71742E04 3.50469E04 7.84305E04 6.79438E04 7.31081E03 3.02083E04 9.95701E04 4.71766E04 2.05330E04 1.03364E05 7.98288E04 1.00795E04 2.98607E04 1.39344E05 4.45494E04 1.63844E04 1.19010E05 2.93760E05 6.88818E04 2.94986E04 7.88715E04 1.05086E05 4.46430E04 9.80591E04 3.85265E05 2.34583E05 4.83268E04 3.80853E05 9.39830E05 3.90240E05 2.72714E04 1.46133E04 4.95376E04 1.34688E04 4.02310E02 3.50652E04 4.71692E04 3.49544E03 9.14091E02 1.35570E04 9.69318E03 5.77630E03 1.62316E03 2.56653E03 8.17559E03 4.17005E03 1.20135E04 3.66034E04 5.25298E04 1.01190E04 1.15155E04 5.32593E04 3.90062E04 1.71827E04 7.28975E04 1.21334E05 4.06169E04 4.15153E05 6.57164E05 5.49148E05 2.43762E05 2.94111E03 1.90023E04 1.02321E04 1.92388E04 8.34920E03 1.10186E03 4.79537E03 6.54411E03 1.31869E03 5.99324E02 3.36949E03 6.29789E03 5.87554E03 7.68078E03 5.77414E03 7.02583E03 2.76868E03 1.20362E04 1.37524E04 1.18776E04 2.44947E03 3.18001E03 2.85073E03 4.90023E01 1.65526E04 1.29461E04 1.46461E04 6.31477E03 1.31398E03 2.30700E04 5.80487E04 4.21358E04 4.39950E04 1.65457E04 2.29666E03 1.50572E04 2.92064E03 1.05280E04 1.81497E04 3.40634E03 7.90322E03 3.74742E04 1.64817E04 3.12433E03 1.81016E04 5.77122E03 1.76099E04 1.22820E04 1.03814E04 6.97723E01 1.21336E04 1.33230E04 3.92980E03 4.17954E03 1.75421E04 1.20132E04 1.70897E03 9.84023E03 4.96145E04 4.08949E04 3.25780E03 8.63080E02 1.15247E04 1.30401E04 3.58605E03 3.80613E03 3.24909E03 1.26454E04 1.62384E04 1.48226E04 5.91493E03 3.02361E02 1.29400E01 1.74795E03 3.36881E03 8.65181E03 7.19098E04 1.81085E05 1.40612E05 2.77791E04 1.21955E05 3.43079E04 9.55269E03 5.07970E04 1.07205E05 5.30341E04 1.90045E04 1.82564E03 9.19214E02 2.36772E03 4.63788E03 1.03319E04 6.86202E03 9.52318E01 4.64779E02 3.90510E03 1.84548E03 4.02520E02 3.61138E03 2.72119E02 5.81474E02 2.27414E03 1.46399E03 2.44906E03 2.57482E03 1.26374E03 6.28446E02 1.68283E03 2.47090E03 1.42939E03 3.10142E03 2.41249E03 8.84341E02 3.52520E02 3.54434E03 2.85004E02 8.74156E02 5.93611E03 1.36834E03 6.01852E01 5.32680E02 1.25396E03 4.47441E03 6.92325E02 1.26600E03 1.41270E02 7.65684E01 1.30289E03 5.40988E03 1.86281E03 2.36604E03 3.45061E03 1.75879E02 3.09909E03 1.55068E03 2.68554E03 9.03407E02 1.92573E03 1.34293E03 6.54705E03 2.87149E03 5.19301E03 1.54759E03 8.63628E03 4.99487E03 2.43233E03 2.96964E03 1.77832E02 1.18135E03 -Frame 257 2.78468E05 9.55148E04 2.02921E05 3.15034E06 7.21960E06 2.41143E06 2.69733E05 4.12354E06 1.28918E07 4.79789E06 7.69075E05 7.51374E06 2.54693E07 1.35254E07 1.56549E06 4.47433E07 1.99241E08 1.43099E08 1.84128E07 2.72930E07 8.00274E07 4.78911E07 1.24663E07 5.68973E07 2.74147E08 2.85578E08 5.23189E07 3.76903E07 1.12281E08 1.18805E08 4.54898E07 1.19424E07 3.36161E06 2.85252E06 1.02816E06 9.09433E04 1.12153E06 5.61321E05 9.08177E04 1.33194E05 1.77082E05 2.87053E05 2.18273E05 8.02399E04 7.53049E05 5.43073E05 2.04098E05 2.24407E05 2.67292E05 2.11894E05 2.06173E05 1.15255E05 2.30881E05 2.71409E05 2.00597E05 1.67399E05 1.53113E05 7.12637E04 7.72088E04 1.63375E05 7.33825E04 1.03186E05 3.46402E05 3.91764E05 4.58716E05 2.78023E05 1.41049E05 2.27750E05 1.45436E05 8.76326E04 6.30290E05 1.10269E06 1.31476E06 1.65875E06 8.59010E05 2.68650E06 3.10589E06 1.83400E06 1.35695E06 9.96863E05 1.18146E05 6.99739E04 3.50072E05 4.16505E05 7.88797E04 3.90316E04 6.82239E04 5.53305E04 2.71238E04 1.41635E04 3.39916E04 5.98278E04 1.56447E04 6.26320E04 2.85481E05 3.06035E05 1.13220E05 7.80888E04 2.53451E05 3.24520E05 1.25627E05 4.12333E04 3.08987E05 8.21703E05 5.00773E05 8.73724E04 5.02796E05 1.19725E06 3.76796E05 1.12620E05 9.38739E04 8.09284E04 3.14141E04 2.36757E04 7.01549E03 1.34804E03 6.26179E02 6.41605E03 7.84224E03 4.99465E03 1.71283E03 1.32131E03 3.58834E03 2.29976E03 4.66775E03 3.94059E03 1.77667E03 9.21088E01 1.50657E03 1.85482E04 5.70254E04 6.39540E04 2.64270E04 2.90397E03 1.34017E04 2.89117E04 3.58844E04 2.72946E04 4.24921E04 1.39443E05 5.09347E04 1.14412E04 1.13886E05 3.51707E05 3.46440E05 1.27900E05 1.61659E03 1.54508E04 3.98974E03 2.17196E03 1.36258E03 4.25094E04 6.47669E04 6.10534E04 5.17564E04 1.93073E04 1.86950E04 2.88804E04 4.28881E04 9.76521E04 7.19638E04 5.42034E04 5.79053E04 1.27734E05 1.69458E05 1.79994E05 3.63069E05 5.68890E05 5.87370E05 4.08366E05 3.29501E05 2.49435E05 1.68541E05 1.32732E05 1.36413E05 1.02293E05 4.63996E04 4.76108E04 5.82127E04 2.18889E04 2.12940E04 2.58013E04 1.63330E04 6.98565E03 2.94943E04 2.65262E05 9.44903E05 1.39583E06 9.36386E05 3.81267E05 4.24935E05 2.68230E05 4.02270E04 4.61913E04 4.61192E04 7.40070E03 1.43583E04 1.38004E04 1.70497E04 1.44530E04 4.06254E03 2.04068E03 1.77488E03 2.28960E03 7.34024E03 7.02456E03 3.21325E02 2.13414E03 2.54821E03 1.53658E03 5.48719E03 5.67924E03 4.24016E03 3.40322E03 1.91029E03 3.46381E03 4.92266E03 3.65564E03 2.76984E03 5.10647E03 1.63913E03 4.90443E02 1.25432E03 5.58251E03 1.29893E03 2.77421E02 2.52254E03 1.71053E03 5.30597E02 9.74145E-01 1.31013E03 2.08539E03 6.02235E03 3.12712E03 2.44509E03 2.00402E03 1.07456E03 4.96517E02 6.06329E03 1.37744E03 2.17227E02 1.15635E03 1.01873E03 4.15633E03 1.71697E03 1.00076E03 1.11001E03 3.83721E02 7.22528E02 5.48263E02 4.58748E03 4.47548E03 3.16601E03 1.19114E02 1.32824E03 9.27263E01 6.79313E02 -Frame 257 2.01572E04 2.05447E04 2.40930E04 2.13494E06 8.60506E06 5.01665E06 2.78463E05 2.58192E06 1.61142E07 1.19280E07 1.11843E06 2.51074E06 2.71602E07 3.00459E07 4.53153E06 8.97409E06 1.70418E08 3.50341E08 9.47098E07 1.38627E07 8.68822E07 2.56307E08 1.16268E08 3.46820E07 1.18915E08 4.40257E08 2.50434E08 1.47680E07 3.58874E07 2.78227E08 3.74940E08 1.01642E08 1.37861E07 1.42546E07 3.44813E07 1.96293E07 3.34046E06 1.57698E06 1.98708E06 9.19525E05 2.40842E05 5.54170E05 1.65195E06 1.20268E06 6.83184E05 5.85725E05 1.31370E06 6.17091E05 2.06190E05 4.66124E05 1.23429E06 9.11377E05 4.34230E05 1.25926E05 1.05204E06 8.59268E05 3.87846E05 5.16210E04 5.59330E05 7.00883E05 5.39487E05 8.17467E04 3.52403E05 6.93741E05 5.43918E05 2.96937E05 1.75932E05 3.43431E05 3.29675E05 2.89600E05 3.34870E05 1.05463E06 1.32659E06 2.33543E06 2.87486E06 3.55239E06 9.20990E05 4.43440E06 2.59503E06 7.50983E06 1.17480E07 7.39546E06 1.07747E06 3.30307E05 4.33485E05 2.22489E05 2.03109E04 2.45496E05 4.12625E05 2.77328E05 7.81256E04 8.28375E03 3.62919E04 1.03055E05 3.16306E05 8.61884E05 7.00116E05 7.90925E05 6.76748E05 1.29861E05 7.93983E04 2.14559E05 2.65630E05 1.14003E05 4.43797E05 7.64713E05 2.99203E06 3.02161E06 1.47207E06 1.15011E06 6.48148E05 4.26294E05 4.02862E02 1.66850E05 7.71108E04 2.77076E04 5.74309E03 2.01018E04 2.13274E04 1.03471E04 1.70701E02 7.14437E03 1.39879E04 3.66547E03 3.79613E02 1.57931E04 2.82601E04 1.27935E04 2.45561E03 1.42683E04 4.08946E04 4.15222E04 2.84681E03 1.28286E04 4.40555E04 1.35580E05 1.83975E05 1.85823E04 1.17223E05 2.16494E05 3.34737E04 7.44580E04 5.20138E05 1.41623E06 1.23291E06 8.58709E05 4.97803E05 1.55808E05 4.33715E03 2.06771E04 5.51154E04 1.19908E05 1.49594E05 2.31758E04 1.79805E05 2.05290E05 2.60219E05 2.07646E05 1.19279E05 9.43609E04 2.32316E05 8.58854E04 6.60695E03 7.62532E03 4.39503E05 7.17142E05 1.01522E05 1.74190E05 6.35164E05 7.91226E05 1.31341E05 6.66083E05 2.37662E05 3.48678E05 5.06237E04 8.12379E03 1.27971E05 2.89533E05 7.44268E04 6.54290E04 2.68297E04 3.72420E04 4.29377E03 1.37951E04 1.14346E04 4.52015E04 2.31965E04 4.00631E05 6.49145E05 1.55146E06 9.72913E05 4.11431E04 6.03933E04 4.34675E03 3.60357E04 2.32046E04 3.65744E04 4.95612E04 1.36484E04 1.60723E03 7.59909E02 6.07726E03 3.86728E03 1.18864E03 3.88878E03 1.17433E04 1.59239E04 1.77062E04 5.45652E03 3.17840E03 5.70965E02 3.03812E03 9.01774E02 8.53582E03 2.27753E04 6.20545E03 3.74345E01 2.08667E02 7.65377E02 1.26016E03 4.50174E03 4.02452E03 3.64245E03 1.65463E03 7.95237E02 1.14910E03 3.05638E02 2.85547E03 2.25458E03 8.53180E02 7.88029E02 5.26460E03 2.81290E03 1.08918E02 2.47724E03 1.96724E03 2.92863E03 5.23262E03 1.77272E03 3.86346E03 2.44369E02 3.64790E02 1.50799E03 7.42044E02 2.84907E03 4.40593E03 3.26671E03 6.95467E02 3.13671E03 5.72779E02 7.28656E02 1.29841E03 1.90015E02 1.01399E03 7.37043E02 2.96190E03 4.31385E03 -Frame 257 1.50882E04 8.08072E03 4.83458E03 1.71393E06 1.07097E07 7.51505E06 4.80291E05 1.32968E06 1.49733E07 1.94182E07 2.66009E06 3.49640E05 1.71676E07 4.49191E07 1.40893E07 1.68522E06 6.12844E07 3.72361E08 2.58379E08 2.78499E07 2.24388E07 3.03507E08 3.81632E08 8.42552E07 5.77269E06 1.26853E08 2.43565E08 4.89513E07 6.72924E06 7.69925E07 3.91048E08 2.92230E08 3.46025E07 1.23894E07 1.20082E08 2.67093E08 1.27809E08 1.31918E07 8.22995E06 6.20203E06 1.40428E06 1.32273E05 1.14853E06 4.54156E06 2.15452E06 5.56293E04 5.75966E05 2.19163E06 1.62966E06 1.50782E05 1.04653E05 3.01508E06 4.37943E06 8.60809E05 5.41596E04 1.33544E06 2.35399E06 1.07301E06 1.86940E05 5.32051E05 2.83572E06 2.21688E06 4.04352E05 3.07070E05 8.13750E05 7.82357E05 3.22684E05 3.01384E04 8.03337E05 1.53280E06 1.02861E06 6.07596E04 1.29143E06 2.07934E06 2.18642E06 7.83746E05 1.71505E06 1.88336E07 3.20941E07 2.71373E07 9.08765E06 1.48088E07 1.55482E07 7.39217E06 8.84386E05 1.29561E06 3.01557E06 3.41414E06 3.48926E05 3.28526E05 4.92143E05 6.56143E05 1.18041E05 2.55852E04 3.26196E04 8.18743E05 8.16947E05 1.98264E05 2.48649E05 7.24293E05 6.50220E05 7.87990E04 2.68104E05 1.42808E06 2.03047E06 1.69291E05 1.87933E06 6.39857E06 6.77996E06 6.02064E06 7.85163E05 1.20067E06 2.12072E06 9.30673E05 7.63480E04 1.93672E04 5.66420E04 2.27016E04 1.73903E03 2.49718E04 3.52472E04 5.42724E04 2.98193E04 4.58651E03 2.38255E04 7.07102E04 1.18341E05 2.25789E04 3.08369E04 7.59967E04 1.51440E05 1.61389E05 1.05698E05 1.55853E05 1.32838E05 4.92769E04 8.65077E04 5.91157E05 3.98870E05 1.03682E05 4.97324E05 1.21389E06 2.25929E06 4.90204E05 7.83644E05 6.86170E05 1.63286E06 7.97041E05 2.36342E05 1.69326E05 1.19102E05 1.65846E05 1.36532E05 4.19086E05 1.64868E05 3.79756E05 2.75806E05 9.90820E04 5.58911E05 4.30970E05 2.74113E05 1.51576E05 5.61567E04 1.95562E05 8.57434E05 5.18040E05 2.73683E05 1.06709E06 2.41303E06 4.02769E06 3.66659E06 1.11568E06 5.26219E05 1.56084E06 7.52329E05 1.43344E05 6.97065E04 6.21522E05 4.74410E05 6.44076E04 8.62708E04 7.84746E04 9.44280E04 1.68136E05 1.97310E05 2.39761E05 5.32689E05 1.51915E05 8.99342E03 5.49808E05 2.27111E06 1.68430E06 3.96920E05 2.45520E04 5.84408E04 1.12445E05 1.44621E05 7.35105E04 9.43048E03 2.52063E04 6.76034E04 1.37253E04 7.81697E03 2.61361E02 5.10123E03 1.36075E03 6.89307E03 5.37905E03 1.47257E04 2.89257E03 1.03733E04 1.36075E04 1.13182E03 2.74154E03 6.40135E03 1.87059E03 1.05209E04 1.72401E03 7.79117E02 1.70346E03 2.10219E03 5.15849E03 1.51295E04 7.47697E03 3.70005E02 6.49702E01 9.89745E03 5.89072E03 1.84604E03 9.52648E02 9.48168E03 9.01534E03 2.82479E03 2.22804E03 2.52008E03 4.29205E03 2.10439E03 5.42596E03 4.94924E03 6.16929E02 2.73465E03 1.95546E03 2.25828E03 6.30158E03 8.31429E03 8.20099E03 8.64276E03 5.85791E03 9.41604E03 1.48794E04 9.71629E02 4.85391E03 1.52319E03 4.45611E03 5.60781E03 2.72904E04 2.15153E04 -Frame 257 2.80658E04 2.69597E05 5.03033E04 2.02849E06 1.25663E07 7.84928E06 8.60241E05 5.51469E05 1.39816E07 1.93733E07 2.70729E06 1.76505E05 1.10908E07 4.00888E07 1.42452E07 1.78861E05 2.51052E07 2.92995E08 3.05912E08 2.89639E07 9.75882E06 2.20193E08 4.42014E08 1.02474E08 9.09324E05 3.96008E07 1.71525E08 7.98237E07 2.50200E06 1.60658E07 1.64012E08 1.96474E08 2.44440E07 3.00212E05 5.33326E07 3.56066E08 4.01019E08 1.20934E08 7.96167E06 1.46421E07 2.68216E07 1.20593E07 4.39827E06 5.77918E06 1.08374E07 2.66704E06 3.86320E05 2.45811E06 4.20537E06 1.17170E06 3.94542E05 2.22422E06 1.09711E07 6.97385E06 6.11091E05 1.74556E05 2.62456E06 2.95225E06 2.61975E05 2.44201E05 1.95800E06 6.60710E06 2.65958E06 3.18498E05 7.22965E04 7.84914E05 7.84042E05 9.94118E04 4.30622E05 2.28952E06 3.33553E06 8.47217E05 2.24381E05 1.37520E06 2.94803E06 8.74250E05 1.03697E06 1.51939E07 5.96845E07 4.73534E07 6.90804E06 2.07270E06 1.26383E07 1.92003E07 5.88410E06 4.97834E05 1.25122E06 7.86636E06 7.04910E06 1.48139E06 1.06855E06 3.27880E05 2.24858E05 4.65285E04 5.99033E04 4.17573E05 1.22367E06 5.64849E05 3.41079E05 9.51660E05 1.57666E06 7.57344E05 3.69762E04 7.63475E05 3.02453E06 3.76298E06 7.74512E05 1.77450E06 1.36169E07 1.86872E07 7.19668E06 5.08407E05 9.86886E05 1.70057E06 7.41046E05 3.51975E05 2.03402E05 7.93459E04 9.40665E04 6.34758E04 6.10646E04 1.06009E05 1.42802E05 1.56869E05 1.51473E05 8.29391E04 1.98131E05 1.56222E05 4.10436E04 1.56530E05 2.26607E05 2.05921E05 1.08097E05 2.45625E05 2.96789E05 3.77836E05 1.11295E05 7.87639E05 1.11786E06 7.52893E05 3.90328E05 6.49445E05 2.47039E06 4.18825E06 2.30048E06 2.57919E05 2.30606E06 1.67782E06 7.59320E05 1.81726E06 3.29604E06 3.51451E06 3.32643E06 1.86016E06 4.37381E05 3.28547E05 5.10251E05 8.77457E05 1.33126E06 2.94596E05 2.61283E04 1.61239E05 5.96420E05 3.10832E05 1.86038E05 3.34037E05 3.78067E05 6.89697E05 3.24707E05 2.61287E05 4.06866E05 7.81207E05 8.94624E05 1.05061E06 7.11240E05 9.61416E05 2.59329E05 4.07662E05 6.96229E05 8.65121E05 1.71774E06 2.17280E06 2.12843E06 1.89579E06 3.37616E06 5.04337E06 3.56713E06 7.16215E05 2.65752E05 1.60278E06 3.28514E06 1.44605E06 1.78026E05 4.55892E04 8.35058E05 1.02222E06 2.61492E05 4.78222E04 5.66763E04 8.77306E04 2.05511E04 1.62309E04 2.47207E03 1.34990E04 1.52353E04 6.78908E03 4.24780E03 5.22994E03 1.35763E04 4.49044E03 2.13999E03 1.18443E04 1.59204E04 1.09356E03 7.31903E02 1.66525E03 2.36646E03 1.24271E03 1.59983E03 6.20598E03 1.44234E04 2.23701E04 3.65297E04 1.20552E04 1.09023E04 4.93636E03 2.53067E04 7.53553E03 2.07500E03 2.55098E03 1.24167E04 1.25440E04 8.37553E03 1.28168E03 1.38200E03 1.08199E03 7.18181E02 2.77647E03 3.93436E03 1.01624E04 1.12088E04 6.95227E03 6.02615E03 1.48349E04 9.67283E03 5.14311E03 5.28501E02 7.17465E03 1.57167E04 1.47232E04 1.36533E03 6.33376E03 1.44355E04 1.74643E04 1.65225E03 5.72983E03 7.53199E03 -Frame 257 6.63228E05 1.76383E05 6.79481E04 2.23676E06 1.20580E07 9.71658E06 8.07267E05 4.14622E05 1.04715E07 1.91036E07 3.43068E06 1.62670E05 7.98594E06 3.13181E07 1.78095E07 3.72934E05 2.07425E07 2.51990E08 3.06112E08 4.16917E07 3.86226E06 1.37194E08 3.51656E08 1.23731E08 3.21415E06 2.21938E07 1.39112E08 1.07461E08 8.90298E06 4.33398E06 7.02204E07 9.75538E07 1.83442E07 9.44868E04 1.64611E07 1.17833E08 8.86884E07 7.20868E06 1.89870E06 2.93524E07 1.11095E08 1.00224E08 2.01191E07 6.23061E06 2.51292E07 1.35391E07 6.93156E05 7.03482E05 8.07055E06 6.12924E06 8.77410E05 2.22588E05 1.18216E07 1.77766E07 4.43346E06 1.44464E05 2.82535E06 1.03649E07 4.98746E06 6.55048E05 1.06371E06 8.77282E06 9.55646E06 1.20264E06 8.60413E04 1.43667E06 2.12092E06 5.66353E05 1.91031E03 3.65530E05 2.57970E06 1.85605E06 1.08912E05 2.46946E05 1.60441E06 3.25324E06 5.31471E05 3.71336E05 1.78918E07 5.04706E07 2.79564E07 4.14709E06 2.86835E06 1.72829E07 4.93591E07 2.33633E07 3.99338E06 1.39956E07 2.76856E07 8.14725E06 5.45275E04 2.55449E06 3.35927E06 1.86208E06 2.07087E05 7.03864E05 2.47506E06 1.37921E06 5.56531E04 1.85357E05 3.00535E05 1.73063E06 7.66193E05 1.86583E05 6.88566E05 2.03796E06 6.71268E05 2.71992E05 2.15794E06 2.32012E06 4.38459E06 1.81304E06 8.50685E05 1.17431E06 1.01537E06 2.32502E06 6.41676E05 6.63943E04 1.63027E05 3.61992E05 6.58504E04 1.07619E05 3.54773E05 8.88825E05 2.87405E05 2.81882E04 5.43668E05 1.48367E06 8.29557E05 4.35994E04 7.82852E04 6.42360E05 7.73077E05 1.39547E05 9.12802E03 1.78534E05 5.49739E05 4.09352E05 5.68220E04 1.06414E05 4.67517E05 2.91557E05 3.79549E05 9.14478E04 1.37808E06 2.55546E06 6.67273E05 4.73865E05 1.39224E06 4.14187E06 5.08232E06 1.37006E06 1.53322E06 7.80290E05 5.72751E06 2.60129E06 8.11950E03 5.35427E05 3.34689E06 2.80059E06 6.34779E05 1.46979E06 1.94291E06 1.70112E05 7.54941E04 3.96527E05 5.80366E05 7.75507E05 1.12573E05 8.39531E03 7.86589E04 1.87971E04 1.07633E05 2.27911E04 4.53765E05 2.50239E06 4.36968E06 1.66107E06 5.65984E05 2.45625E06 6.73057E06 4.12878E06 1.50640E06 1.93685E06 2.52987E05 2.22601E06 1.03195E06 7.89205E05 3.26485E05 6.98281E05 1.33116E06 1.62267E05 1.74737E05 1.27933E06 2.51660E06 4.63484E05 7.45982E04 1.89727E05 5.48206E05 3.15906E05 8.67788E04 4.27198E04 4.47637E04 3.19075E04 3.54742E02 1.48590E04 1.23345E04 4.58126E03 3.10389E02 1.49738E03 1.99841E03 8.89402E03 4.80502E03 8.08852E03 9.74253E03 1.31891E04 1.35212E04 1.83862E04 2.93479E04 1.20770E04 6.61187E03 9.60971E03 5.95605E04 1.63954E05 1.28095E05 1.00514E05 1.66163E05 2.43513E05 1.33806E05 3.49052E04 1.82791E04 4.54177E04 1.37591E04 1.26625E04 5.94778E03 2.05936E03 1.26633E04 1.56271E04 7.68624E03 1.69854E04 1.13245E04 7.67641E03 5.23087E03 5.35142E03 2.87164E04 2.87595E04 3.17053E04 1.62384E04 2.90034E04 4.51830E04 4.12473E04 1.59953E04 1.47947E04 2.46603E04 1.55949E04 1.03581E04 1.10530E04 -Frame 257 5.34613E05 2.75784E05 9.90269E04 1.55658E06 1.16276E07 9.09532E06 5.48716E05 6.41913E05 9.72696E06 1.73685E07 3.16554E06 7.75458E04 6.93137E06 2.87458E07 1.21803E07 6.57522E04 2.89608E07 2.43678E08 2.32278E08 1.93637E07 7.80323E06 1.07590E08 2.17531E08 5.12349E07 1.07302E06 3.05287E07 1.25454E08 7.76105E07 3.75308E06 2.27611E06 2.81920E07 3.99529E07 5.74128E06 7.88416E05 1.25246E07 3.41370E07 1.46355E07 2.53401E05 1.87384E06 1.81521E07 4.56516E07 2.11503E07 1.99473E07 4.49062E07 9.99146E07 6.61375E07 5.51129E06 2.27639E06 1.49460E07 9.62527E06 5.45328E05 5.77611E06 2.20891E07 2.72588E07 3.43093E06 1.24839E06 6.50318E06 1.56286E07 5.76312E06 2.48582E04 2.62058E06 9.12258E06 7.14169E06 2.31626E05 5.57155E05 1.71547E06 2.71343E06 6.19587E05 8.50181E03 3.31031E05 9.49262E05 4.38797E05 5.41121E04 2.33959E05 1.57020E06 2.51247E06 5.24892E05 1.70910E05 5.89615E06 1.08785E07 3.07511E06 5.29703E05 7.54166E06 4.52997E07 6.44726E07 2.05096E07 9.46357E06 1.97745E07 2.81366E07 7.57063E06 4.63326E05 5.21521E06 1.25048E07 8.14621E06 1.00708E06 1.68813E05 1.52536E06 8.52963E05 1.74972E04 2.18746E05 1.07245E06 2.13019E06 7.80915E05 8.88718E03 4.51419E05 1.49533E06 6.49232E05 3.71664E05 7.11801E05 6.91049E05 9.55341E05 2.60614E05 3.06186E05 1.64747E06 3.41608E06 1.95433E06 3.86326E05 1.18004E06 2.21742E06 2.03364E06 7.22548E05 4.84037E04 1.19374E06 1.30427E06 7.98592E05 8.28018E04 5.12547E05 2.62967E06 4.31178E06 1.18183E06 1.29026E06 2.99972E06 1.58021E06 4.22345E05 1.03773E05 3.90812E05 7.05221E05 6.32835E05 7.78688E04 3.03889E05 4.03035E05 1.59911E06 1.20504E06 1.50730E05 9.86487E05 3.03475E06 1.41423E06 1.09071E05 3.41909E06 8.27635E06 9.27510E06 2.02473E06 1.32850E06 5.45859E06 1.43527E07 9.50834E06 1.15612E06 1.42189E06 3.14377E06 4.85921E06 3.83236E06 7.74460E06 3.95363E06 7.52558E05 2.07156E05 1.72819E06 8.66876E05 8.47513E04 1.35362E06 3.58066E06 3.33770E06 1.72071E06 8.50893E05 1.93601E06 6.65685E06 5.52907E06 1.30279E05 2.75505E06 6.33157E06 7.21951E06 1.26024E06 3.32729E05 1.46684E06 2.41864E06 9.48712E05 2.00635E05 5.94473E05 1.01556E06 5.68640E05 2.21477E05 6.18053E05 8.68073E05 9.99638E05 8.07730E05 1.11853E06 2.01772E06 2.32748E06 1.54850E06 3.07454E05 3.78138E04 4.89438E03 2.11965E03 2.84716E03 4.76772E03 5.36975E04 9.68934E04 6.24142E04 1.36038E04 4.83146E03 4.49712E03 3.47752E03 1.30745E03 2.20653E03 1.04739E03 4.98430E03 3.46681E03 2.42735E03 3.16403E02 6.29838E03 2.97151E02 9.30545E02 1.95853E03 3.39833E04 6.85033E03 3.19576E04 2.66054E04 5.55115E04 4.15354E05 4.92614E05 2.31431E05 7.58099E04 8.33192E04 8.71922E04 4.53499E04 6.36364E03 7.92572E03 3.44689E04 3.12011E04 2.92004E03 2.05413E04 1.88366E04 4.45748E03 7.03151E02 3.46682E04 2.42220E05 3.16613E05 1.06512E05 1.14445E05 1.76777E05 1.68065E05 2.34158E05 1.36835E05 1.77860E05 2.07659E05 1.31031E05 1.00923E05 5.87438E04 -Frame 257 7.24983E03 2.92631E05 7.24119E03 1.23224E06 8.86749E06 9.36431E06 9.56564E05 8.19873E05 8.12832E06 1.14752E07 4.16086E06 5.08745E05 8.45820E06 1.92943E07 1.18888E07 5.16216E06 4.05970E07 1.88593E08 1.51125E08 2.76507E07 3.28100E05 4.05497E07 8.21119E07 3.57412E07 3.36735E06 7.20010E06 5.25397E07 5.00310E07 9.44705E06 1.13818E05 5.33929E06 1.44452E07 7.82181E06 8.65638E05 2.86906E06 1.02442E07 6.59342E06 1.33329E06 9.61272E04 4.01656E06 6.63210E06 5.85761E06 1.20023E06 1.98165E07 9.40304E07 8.54245E07 2.11474E07 5.05273E05 8.54841E06 1.20106E07 6.22035E06 1.23203E06 8.67924E06 2.07494E07 1.07788E07 2.53941E06 2.57052E06 8.99183E06 8.12777E06 3.21617E06 8.01846E05 4.32441E06 5.76771E06 3.17969E06 6.83904E05 1.00869E06 1.36742E06 8.28664E05 3.81124E05 6.27427E03 1.61974E05 2.04329E05 4.00193E05 1.03151E05 7.72617E05 8.62495E05 4.59626E05 5.16493E05 1.28441E06 8.18163E05 1.45370E05 3.08096E05 1.06161E06 9.20661E06 1.24439E07 5.59331E06 1.88355E06 2.68570E05 4.34551E06 8.79597E06 4.80782E06 1.64033E06 7.40347E06 1.17889E07 4.60185E06 1.09710E06 4.26200E05 4.18772E04 2.54438E05 8.98454E04 1.77327E05 6.80100E05 7.07828E05 3.60429E05 1.48934E05 1.74724E05 6.33636E05 6.90773E05 3.75510E05 2.94078E05 2.87902E05 2.04436E05 2.22457E05 5.74378E04 6.57976E04 3.27705E05 4.99736E05 2.99919E05 3.61906E03 3.25771E05 7.42533E05 8.51449E05 4.21607E05 7.54823E04 8.44979E04 9.22897E05 1.49024E06 7.35375E05 6.21343E06 1.91103E07 2.02157E07 7.96559E06 2.47573E06 2.46076E06 2.60107E06 2.66193E06 3.73533E06 4.99959E06 4.27191E06 1.12324E06 2.26004E05 1.07528E06 1.85895E06 1.15834E06 1.77580E05 1.50117E06 1.69723E06 2.18798E06 6.07535E05 5.59420E05 2.73580E06 2.92325E06 1.91591E06 2.81774E06 9.52242E06 1.06262E07 5.29540E06 2.03832E06 1.91747E06 2.83170E06 3.81796E06 9.07472E06 7.88763E06 4.53098E06 8.90911E06 7.81328E06 2.14640E06 3.02010E04 3.95173E05 3.57845E06 7.43872E06 2.58105E06 5.90489E06 1.36305E07 9.10473E06 6.37378E05 1.20271E06 4.80627E06 6.82475E06 5.40904E06 1.52002E06 3.67324E05 1.21282E06 1.64055E06 3.52121E05 1.00022E04 1.60256E05 4.59298E05 6.09297E05 3.45922E05 1.79638E05 4.48509E05 5.16195E05 6.59658E04 5.47021E04 2.37034E05 4.72576E05 3.99280E05 1.66196E05 3.20383E04 2.97200E04 8.14344E03 6.55834E02 1.51988E04 2.44457E04 2.25001E04 9.54425E03 2.80353E04 8.95649E03 1.44927E04 1.48952E04 1.86110E04 1.08812E04 4.03060E04 6.87172E02 1.07375E04 1.21239E05 1.42568E05 1.94876E05 8.39329E04 8.89218E04 5.24807E04 2.14426E04 4.91146E04 2.36618E04 3.70984E04 1.28000E05 1.47011E05 4.37941E03 6.55731E04 4.52873E03 6.22505E02 9.61476E03 5.78150E03 2.22297E04 2.47918E04 1.25657E04 6.51799E03 1.98071E04 3.74251E04 3.97336E04 5.18278E04 1.96359E04 1.71693E05 2.54146E05 4.95713E04 8.38215E04 2.09295E05 3.07647E05 2.41774E05 2.07595E05 6.36369E04 5.66538E04 1.95937E05 1.32593E05 9.25366E04 9.53694E02 -Frame 257 1.33997E06 5.95145E05 1.54775E05 9.30562E05 4.44675E06 2.90184E06 4.31550E05 8.99908E05 3.47990E06 2.35265E06 5.21934E05 1.00997E06 5.04498E06 4.36842E06 4.32422E05 3.02580E06 1.60699E07 2.52516E07 1.51485E07 3.20220E06 1.39341E06 5.21279E06 7.05104E06 1.66014E06 1.08171E03 2.35015E06 9.76719E06 6.18366E06 7.08431E05 2.44886E05 1.17374E06 1.12892E06 5.92792E05 2.25182E05 2.42614E06 2.10688E06 3.37342E05 1.87774E05 6.15431E05 7.60089E05 2.23793E05 4.03901E05 6.28958E06 1.44412E07 7.43115E06 1.81438E06 4.37233E06 3.42928E06 1.08827E06 5.46265E05 3.20828E05 3.12448E06 5.81152E06 1.58642E06 2.52381E05 5.81096E05 2.13086E06 1.35382E06 2.94144E05 1.42758E05 1.44650E06 1.47781E06 3.96460E05 8.55523E04 5.58468E05 6.71110E05 6.24487E04 2.31112E04 1.22184E05 4.90857E04 7.77326E03 9.17458E03 1.63086E05 2.35019E05 3.59270E04 5.27263E04 2.35721E04 7.49440E04 1.68776E05 2.20151E05 3.47375E05 4.95098E05 1.31141E05 2.93821E05 1.37952E05 3.09513E05 3.67250E05 1.08826E05 3.55115E05 1.33821E05 1.03583E06 9.06223E04 1.86487E06 1.32104E06 3.90083E05 2.26945E04 2.85074E04 3.47374E04 2.04737E05 7.98264E04 1.31427E05 3.09513E05 1.55437E05 1.57566E05 1.73919E05 1.13595E05 2.06449E05 2.54739E05 4.69855E05 1.19625E06 9.04077E05 6.13607E05 4.80963E05 3.48564E05 4.50355E05 3.70695E05 4.15835E05 6.06079E05 3.12372E05 2.11273E05 2.67491E05 2.24352E05 4.27732E05 2.60983E05 3.52250E05 5.90028E04 4.15453E05 1.96071E06 1.03525E06 1.50178E06 6.85937E06 4.84245E06 8.44215E05 3.59118E05 4.16638E05 2.62502E06 4.14941E06 8.81343E05 1.31033E06 4.30841E06 4.03802E06 2.99807E06 7.22345E05 2.06117E06 5.32841E06 5.12229E06 4.01736E06 4.39107E06 2.76703E06 4.45488E06 4.24288E06 3.59565E06 8.05918E06 5.88181E06 1.11091E06 3.63028E06 1.62917E06 9.51877E05 4.57271E06 2.08790E06 3.47327E06 3.35735E06 2.68696E05 4.19591E06 4.79486E06 3.66427E04 2.93097E06 4.33355E06 3.63836E06 2.27384E06 1.58425E05 4.26155E06 4.89250E06 2.44024E05 2.05639E06 3.72805E06 1.11368E06 1.69475E06 1.75638E06 1.28576E06 3.02406E06 1.45535E06 6.79561E05 1.61710E06 9.11379E05 2.90049E05 2.78683E05 1.17139E05 2.01422E05 1.72779E05 1.03792E04 3.17866E05 5.70175E05 3.46835E05 1.28153E05 2.48793E05 1.66047E05 1.32435E05 7.80259E04 1.90761E05 2.30035E05 1.19454E05 6.12142E04 7.95119E04 8.89449E04 1.43022E05 1.80962E05 1.39203E05 8.57646E04 1.87937E05 3.97749E05 4.14342E05 4.41979E05 5.98773E05 5.81316E05 3.93414E05 1.06534E05 2.45649E05 6.60111E05 4.37350E05 3.18148E05 5.73361E05 5.97442E05 5.80106E05 4.18877E05 3.45811E05 5.02156E05 3.01443E05 7.12378E04 1.18829E05 3.00762E05 3.32143E05 2.94235E05 2.55348E05 2.82760E05 2.14897E05 8.88197E04 6.13912E04 7.90472E04 1.06299E05 1.58845E05 9.99202E04 1.44299E05 1.16629E05 1.64644E03 6.06714E04 1.32463E05 1.41424E05 2.26439E05 1.74021E05 1.02960E05 4.86866E04 1.18738E03 3.92137E04 1.07050E05 1.91479E05 3.08287E05 -Frame 257 1.52420E06 4.87840E05 9.63303E04 4.31224E05 1.96759E06 1.26845E06 1.03020E05 1.28929E04 7.55517E05 8.02895E05 1.48038E05 2.65322E04 9.89567E05 1.89262E06 4.10232E05 1.22627E05 2.47116E04 1.26948E05 6.03024E04 3.25953E04 1.32196E04 3.07972E05 5.55277E05 4.95453E04 1.05430E04 3.52514E05 7.80521E05 1.00174E05 1.15115E04 4.28638E03 6.94037E04 5.80758E04 5.66372E04 8.46026E02 6.66599E05 9.98527E05 2.70338E05 2.39329E04 7.07257E04 9.93534E04 1.18723E04 1.04467E05 3.10014E05 6.57549E05 1.22597E05 1.67865E05 1.86129E05 3.67081E03 4.42876E04 7.39750E04 6.27941E04 2.95565E05 1.32286E06 6.75199E05 2.22262E05 2.64251E04 2.21330E05 1.55327E05 2.77924E04 2.15370E03 3.51841E05 4.45747E05 1.35358E05 6.21739E04 1.39618E05 7.04112E05 3.97890E05 1.55229E05 2.69624E04 5.17546E04 1.40404E05 4.42303E04 1.49302E04 2.44348E04 4.93335E04 3.15426E04 9.18238E02 6.08276E04 1.58316E05 1.20751E05 1.24793E05 3.67629E03 3.62567E05 7.68152E05 5.39932E05 8.77940E04 1.54246E05 4.99132E05 4.57837E05 3.18547E05 2.10873E05 1.45714E06 1.25719E06 4.59948E05 2.66915E05 4.88101E04 1.04139E05 1.00560E05 1.02206E05 5.98662E04 6.72204E04 1.30724E00 3.24843E04 4.38558E04 2.29291E04 1.04541E05 1.13233E05 9.91884E04 2.02428E05 9.88869E04 1.05278E05 1.51021E05 1.37543E05 1.42581E05 4.42932E04 1.07615E05 1.21849E05 1.09245E05 6.87621E04 7.85689E04 6.99537E04 7.12228E04 1.16375E05 1.23581E05 7.07397E04 8.64317E04 3.30581E04 8.73270E04 2.35435E05 2.49673E05 1.28100E05 1.61586E05 1.32348E05 9.80746E04 8.23468E04 1.79437E04 1.99603E05 6.90644E05 4.53277E05 3.49459E05 8.42334E05 1.09615E06 4.68393E05 3.68797E05 3.72709E05 1.09196E06 1.29165E06 7.22141E05 1.30638E06 1.38620E06 1.07217E06 8.50788E05 7.00987E05 6.31778E05 1.09275E06 5.50230E05 3.02016E05 8.98309E05 1.52681E06 1.03679E06 6.27475E05 3.59378E05 1.00778E05 7.33335E05 7.27649E05 5.36145E05 7.00092E05 1.03859E06 9.26754E05 6.71301E05 4.33261E05 2.51697E05 4.25234E05 2.95352E05 2.89135E05 5.29720E05 6.67342E05 5.59403E05 3.33854E05 3.21262E05 5.16037E05 3.52147E05 1.75662E05 3.20195E05 1.48636E05 6.04739E04 7.19983E04 1.04615E04 1.05147E05 6.73714E04 1.47634E03 1.96431E04 2.33358E04 1.52345E04 7.63233E04 9.29702E04 1.20112E05 9.92253E04 3.33770E04 3.79460E04 1.87932E04 3.35373E04 3.65206E04 4.35930E04 4.98563E04 5.64437E04 1.21997E04 5.67842E04 3.78408E04 9.71356E04 1.65473E05 1.23577E05 9.04050E04 9.32172E04 7.18169E04 7.70870E04 6.06435E04 1.27568E05 1.15674E05 4.79079E04 1.73032E05 1.52823E05 9.16334E04 1.55641E05 1.15795E05 1.30567E05 7.29753E04 3.60986E04 3.35549E04 6.67914E04 6.88754E04 1.15802E05 8.84247E04 6.60078E04 1.06178E05 8.36019E04 4.08573E04 1.86325E04 6.30757E04 5.28594E03 5.12203E04 3.97378E04 2.63389E04 3.31297E04 1.54788E04 3.91458E03 2.64915E04 7.42172E04 5.82072E04 7.82240E04 2.15141E04 4.61521E03 1.79815E03 2.49134E04 2.39057E04 7.56417E04 1.71536E05 -Frame 257 2.46063E06 1.20448E06 2.26357E05 2.78011E05 1.44658E06 9.13330E05 4.10368E04 6.70587E04 6.96804E05 8.02440E05 9.84783E04 3.73870E04 8.45733E05 2.03119E06 7.03156E05 2.66257E04 2.56223E04 4.15883E04 9.62404E03 1.98591E03 8.63560E03 2.11333E05 2.89867E05 5.53770E04 3.75658E04 3.87378E05 4.34141E05 2.75764E04 5.25524E03 7.43629E03 6.25809E04 5.06677E04 6.90201E03 1.28484E05 7.53166E05 7.91543E05 2.27674E05 6.02321E03 5.37274E04 3.30861E04 2.76756E03 1.04387E04 2.71669E04 2.09870E05 3.57956E05 1.00938E05 1.35049E03 2.86125E04 4.13523E04 9.24318E03 2.51842E04 3.09528E05 5.29348E05 1.27961E05 3.55571E02 1.04789E05 2.58015E05 5.15795E04 4.31949E03 1.11622E05 4.91301E05 3.08579E05 2.04751E04 1.10091E05 9.16000E05 9.89020E05 1.63392E05 8.12114E03 9.83108E04 1.20821E05 4.57728E04 2.93280E04 2.20135E04 2.23827E04 1.53827E04 2.03620E04 4.62219E03 6.34089E04 6.97563E04 2.06511E04 4.23175E03 2.18234E05 4.39827E05 8.55828E04 1.40879E04 1.14817E05 4.78190E05 2.01465E05 5.47962E04 3.00619E05 1.37592E06 2.01383E06 8.71773E05 8.31612E04 2.13605E05 3.90365E05 6.91236E04 1.03836E04 6.00103E04 8.42318E04 4.66411E04 9.18218E03 3.18875E03 2.32275E04 3.69494E04 2.04840E04 1.22714E04 3.78610E04 5.97980E04 2.70421E04 1.08872E04 5.46201E03 1.76935E04 2.64039E04 9.05516E03 6.95691E02 3.68803E02 2.82909E03 8.68740E03 6.46742E03 2.18845E03 3.07560E03 5.42712E02 4.73921E03 1.38625E04 1.82612E04 1.15058E04 3.22683E03 7.70350E03 1.46759E04 1.37196E04 1.84974E04 2.81743E04 2.78053E04 1.91129E04 8.49930E03 3.34670E03 5.11651E04 3.71765E04 9.83991E02 6.38034E03 8.96328E04 1.05024E05 4.82435E04 1.50673E04 8.00660E02 1.95409E04 6.66317E04 7.43807E04 4.28805E04 4.13714E04 2.50831E04 4.34257E03 1.64784E04 7.48723E04 5.56949E04 9.44876E03 7.25731E03 6.44187E04 1.10781E05 3.54860E04 4.37134E04 5.55607E04 4.92072E04 2.78787E04 7.95247E02 8.48875E03 5.04706E04 5.48430E04 1.79671E04 1.04301E03 7.82609E03 2.65986E04 1.76483E04 5.32256E03 1.72522E03 5.07606E03 9.84399E02 8.33365E03 1.22298E03 9.09051E03 1.41092E04 1.58563E04 3.92777E03 1.04000E04 4.09704E04 2.82617E04 1.44041E04 3.00615E03 9.85103E03 1.38872E04 5.24658E03 1.98876E03 6.52340E03 7.57123E03 1.69853E03 1.15556E03 9.71605E02 5.53417E03 4.25859E03 1.17077E04 1.34016E04 8.21063E03 3.47732E03 1.74895E03 3.65882E03 9.33137E03 1.08433E04 1.21281E04 1.64811E04 1.97664E03 4.76503E02 5.00900E02 3.60331E03 9.89977E03 1.03124E04 5.35711E03 3.00621E03 4.65057E03 6.23600E03 7.90444E03 1.57729E02 5.58303E03 8.50638E03 1.18880E04 8.53035E03 1.03035E03 2.36814E03 1.37748E04 1.59824E04 6.31639E03 1.25514E03 7.76242E03 2.32856E04 1.49674E04 1.80603E04 6.39393E04 6.18550E04 1.59216E04 2.54590E03 1.83492E04 2.74974E04 1.47455E04 6.65363E03 1.15280E04 1.03448E04 1.96749E04 5.88177E03 5.31749E03 3.06430E04 3.71809E04 2.39861E04 5.24679E03 1.91783E03 3.02959E03 5.45553E03 1.61494E04 -Frame 257 4.88183E05 8.36342E05 2.20135E05 1.22391E05 1.20751E06 7.37411E05 3.51520E04 5.11828E04 6.46796E05 8.26637E05 7.70351E04 3.78338E04 8.00800E05 1.67698E06 4.19714E05 1.20532E04 8.30493E04 2.25115E05 1.12510E05 6.83342E03 2.56045E04 1.23776E05 1.37421E05 2.73098E04 5.33260E04 4.16153E05 5.75359E05 9.68936E04 4.61282E03 4.57698E04 6.45836E04 1.21135E04 2.21651E03 1.55795E05 5.26758E05 1.12752E05 8.82202E04 3.12772E04 8.39420E04 1.15941E05 4.26553E04 1.21178E04 1.99555E04 1.31133E05 1.66591E05 1.19227E05 5.58274E04 8.98017E04 6.44377E04 2.00905E04 6.27304E04 1.82978E05 5.80829E04 2.82233E04 5.63887E04 2.17875E05 2.56207E05 5.11278E04 9.44258E03 1.45311E05 2.57456E05 7.16754E04 6.37982E04 4.09055E05 1.46550E06 8.29831E05 3.14087E04 1.26508E03 7.55809E04 7.06000E04 6.44830E03 1.17597E04 6.12212E04 4.95955E04 1.91725E04 7.51782E03 1.36727E04 2.55375E04 2.15625E04 3.80693E04 1.88041E05 5.58523E05 2.71056E05 5.13173E03 4.86826E04 2.49473E05 2.93681E05 6.16644E04 2.91801E04 6.90182E05 1.84911E06 5.37598E05 1.54785E04 1.06783E05 5.51349E05 3.74547E05 2.88894E04 3.64902E04 1.45976E05 1.10620E05 9.90936E03 2.38887E03 1.02800E04 1.30609E04 1.72413E04 5.54557E03 1.91547E04 6.44624E04 3.47094E04 2.40894E03 1.99187E03 1.15291E04 2.22496E04 7.56435E03 1.34658E03 1.89703E03 3.94496E03 5.00006E03 9.27632E03 8.27342E03 5.73765E03 1.61788E03 8.22621E02 1.07320E03 1.11535E03 2.97065E03 1.01207E03 6.77441E02 1.69044E03 7.47122E03 1.30997E04 2.18399E04 5.81445E04 5.35839E04 1.80677E03 1.26583E03 2.12004E03 1.79306E04 2.46340E04 1.45034E04 2.08939E04 2.81303E04 2.41176E04 2.86511E04 3.77302E03 4.18079E03 1.39175E04 7.76975E03 2.56292E04 2.73801E04 4.87495E04 2.77434E04 5.57652E03 8.69887E03 3.11766E04 1.94339E04 3.78910E03 1.16599E04 1.01295E05 6.90260E04 4.61754E03 2.46979E04 5.30492E04 5.31968E04 2.72070E04 7.69895E03 4.96485E04 6.22321E04 2.09142E04 1.78723E04 2.65186E03 5.78357E03 5.33051E03 1.41342E03 5.82788E03 1.70491E04 1.70610E04 5.25944E03 1.52454E04 2.59558E04 8.41175E03 2.02289E03 7.63767E02 3.23461E03 1.67473E04 1.44893E04 6.35821E03 5.48493E03 1.14971E04 6.90908E03 2.15948E04 1.96396E04 5.59992E03 3.42924E03 1.34177E04 1.01192E04 7.53150E03 7.27995E03 4.53043E03 3.79985E03 5.37516E03 3.90022E03 1.40669E04 1.26264E04 1.07845E04 8.32161E03 3.14520E03 5.70062E02 2.21364E03 9.19377E03 6.47222E03 1.63621E02 2.17887E03 2.41767E03 2.16270E03 9.23091E03 4.50058E03 4.79050E03 6.15831E03 5.72883E03 5.30473E03 7.79110E03 4.86670E03 3.51003E03 4.35956E02 5.82492E03 6.34577E03 4.85153E03 6.80075E03 1.23725E04 3.84256E03 1.95130E03 3.62607E03 1.91956E04 1.72845E04 1.65438E04 2.64988E04 1.40106E04 2.26757E03 1.56923E03 1.55698E04 1.29684E04 2.87406E03 3.92017E04 2.15917E04 3.85881E03 2.35501E04 3.79172E03 3.12153E04 3.65271E04 2.56670E03 8.72649E03 2.99697E04 1.81443E04 3.72868E03 1.11686E03 5.53066E03 -Frame 257 4.01474E06 2.38130E06 4.31730E05 3.42144E05 1.03196E06 5.98850E05 4.83330E04 9.50371E04 7.30484E05 7.61360E05 1.05204E05 1.88234E04 6.16854E05 1.21971E06 2.39313E05 1.67254E03 1.10831E05 4.17031E05 1.81095E05 5.93173E03 5.94475E03 2.42154E03 1.84526E04 8.05400E03 5.23143E04 2.88558E05 2.98879E05 4.97275E04 9.47775E03 4.68848E04 1.83826E04 1.23737E03 1.28400E03 1.32310E05 7.91650E05 7.96936E05 1.71716E05 1.34114E04 7.96376E04 3.28878E04 3.44086E02 3.42494E03 2.25852E03 1.25391E04 1.43710E03 5.51555E03 3.58313E04 5.94032E04 3.12895E02 5.70885E03 2.69734E04 1.93701E05 1.86547E05 4.25239E04 3.25023E04 2.06368E05 2.19471E05 3.59619E04 4.44284E01 9.28484E04 2.27845E05 8.38364E04 1.67343E04 3.49546E05 1.03877E06 4.85505E05 9.89302E04 6.78019E04 5.77893E04 1.20824E04 2.30552E03 1.34799E04 3.51333E04 1.47527E04 1.74581E04 1.87748E04 3.27608E04 5.52162E04 5.18398E04 3.62062E04 1.56630E05 5.20847E05 2.44076E05 2.46207E04 2.51016E04 1.62657E05 9.00818E04 3.53128E03 1.27872E05 6.56186E05 7.81621E05 2.93719E05 5.92998E04 1.70221E05 3.52407E05 7.21219E04 4.81831E04 1.16666E05 1.10404E05 3.22111E04 3.84117E03 3.66754E03 1.71908E04 1.45579E04 1.80205E04 9.61914E03 1.73634E04 9.48736E03 4.23152E03 6.94687E03 1.37333E04 3.43520E04 2.17260E04 1.23879E03 3.33133E02 3.16863E03 1.77191E03 4.83721E02 9.74207E02 3.57626E02 6.34045E02 2.11988E03 1.14005E03 9.82327E02 1.05004E03 1.02186E03 2.60249E03 1.99005E03 9.10663E02 2.06082E03 1.17394E04 3.16694E04 5.66984E04 4.28983E04 1.59480E04 7.50563E03 4.88943E03 4.12483E02 1.14046E03 7.32886E03 1.74255E04 3.66091E04 3.52159E04 4.09636E04 2.20723E04 6.53563E03 5.43828E03 8.62260E03 4.41474E04 5.23035E04 2.30290E04 7.81839E03 1.20648E04 3.37451E02 8.75144E03 2.17306E03 7.01981E03 7.35822E04 1.26058E05 5.02837E04 3.70860E03 1.39884E04 8.38035E04 5.23111E04 1.52073E03 1.63643E04 7.05824E04 4.93732E04 1.14062E04 3.43137E03 2.01039E03 1.50971E04 1.36323E04 1.08105E04 1.46821E04 7.54415E03 5.94397E03 2.31853E03 6.53890E03 3.11749E03 1.15877E04 7.35854E03 3.99717E03 1.06840E04 5.87318E03 6.75126E02 7.24506E02 1.69931E03 2.57400E04 3.23563E04 4.03152E03 5.99793E03 4.93915E03 3.35984E03 1.04666E04 1.25685E04 3.50290E03 8.35457E02 1.57889E03 5.65507E03 1.45481E03 2.37558E03 5.23425E03 3.64878E03 1.19645E04 3.24045E04 1.68537E04 5.03394E03 2.69491E01 1.48787E03 3.58096E03 3.72822E03 1.31999E02 3.43608E03 5.78760E03 4.91713E03 5.20950E02 1.73464E03 7.22179E03 4.04674E03 1.51871E03 4.04628E03 2.00697E04 1.41603E04 1.00193E03 2.99107E03 2.82313E03 2.89296E03 4.37552E03 2.59244E03 1.93541E04 2.57558E04 1.29970E04 8.09185E01 1.78982E04 3.44396E04 4.70215E04 8.28018E04 7.99536E04 6.86877E04 1.94750E04 4.03632E04 6.15933E04 2.97513E04 3.74221E03 1.11882E04 7.52570E04 1.20709E05 6.88419E04 4.05410E03 8.54088E03 1.62054E03 1.86000E04 3.67096E04 2.29681E04 5.51022E03 2.51035E01 -Frame 257 1.72461E07 8.95251E06 9.93896E05 2.33012E05 7.81875E05 3.61683E05 1.03065E03 4.32321E04 4.93777E05 5.20640E05 6.02531E04 3.01939E04 5.87901E05 8.29489E05 1.49081E05 6.26704E02 7.48760E04 3.37536E05 1.54824E05 2.26784E03 7.26506E03 3.99439E04 5.18556E04 1.99719E04 9.24852E03 1.06640E05 5.38716E04 6.07274E02 1.36867E04 3.87407E04 5.69045E04 1.90059E04 3.09652E03 8.71916E04 3.61036E05 2.79310E05 4.67274E04 1.10110E04 2.36377E04 8.38844E03 1.21243E04 5.59036E03 1.51637E03 1.66753E03 2.54628E04 3.54464E04 7.43794E04 6.82733E04 7.92795E03 2.37704E04 1.18618E05 3.75473E05 2.26570E05 3.57991E04 1.20184E04 9.16216E04 7.01661E04 1.60824E04 2.61307E04 1.74581E05 1.60001E05 2.98393E04 1.35532E03 1.12141E05 2.75839E05 1.97674E05 4.73046E04 2.06127E04 3.35118E04 4.47861E03 1.61953E03 1.13297E03 4.58808E03 1.02399E04 3.17486E04 4.77516E04 9.55859E04 8.07994E04 3.81589E02 2.01655E04 7.08764E04 1.81154E05 1.22386E05 1.59290E04 5.93551E04 1.00805E05 3.09104E04 1.04796E03 6.52449E04 7.21699E04 7.98261E04 6.24833E04 2.60431E05 6.18024E05 3.68399E05 1.04113E04 8.83916E04 3.37088E04 5.91659E03 2.12441E03 1.00154E04 3.54931E04 2.25784E04 3.52683E03 1.04335E04 1.79652E04 5.12381E03 5.55713E03 3.00152E04 3.20219E04 4.02234E04 1.14606E04 4.49752E03 1.39712E04 1.00518E04 9.90933E03 5.44283E03 2.55621E03 2.61280E03 1.19625E03 2.53177E03 2.55230E03 3.00106E02 4.86744E02 2.30868E03 6.73017E02 4.71527E02 5.47775E03 4.73213E03 5.27934E03 1.49692E04 4.35401E04 3.73016E04 1.53413E04 1.04913E04 1.15229E04 1.90424E04 1.93196E04 7.06182E03 1.10237E04 6.03908E04 5.97073E04 1.68954E04 4.97325E04 6.34267E04 1.57414E04 2.24276E03 3.85188E03 6.02508E04 1.19383E05 6.08750E04 2.68467E04 7.50005E04 6.62317E04 1.67812E04 1.39398E03 1.77977E04 5.48482E04 3.16321E04 1.14791E04 2.36576E04 6.11561E04 1.35821E04 9.04275E03 1.03120E03 2.29481E04 5.62179E04 4.28707E04 8.81544E03 1.01935E04 2.13823E02 1.42978E04 4.72523E03 5.36459E02 7.94849E03 7.60071E03 6.83847E03 1.70285E04 1.33705E04 2.73220E03 1.10331E04 1.47041E04 6.42291E01 4.81209E03 1.77583E03 5.31278E02 2.04029E03 1.62679E03 2.49356E04 1.31409E04 3.71307E03 2.06660E04 1.30747E04 6.68497E03 5.14520E03 4.00462E03 5.35621E03 1.35077E03 2.17745E04 5.97709E04 6.21088E04 3.20435E04 1.06539E04 1.00412E04 1.60180E04 1.58292E04 3.00340E03 5.69635E03 9.79838E03 5.88254E03 9.11071E03 1.53464E04 8.58697E03 2.67588E02 2.86887E02 3.77292E03 7.33425E03 4.19307E03 2.53960E02 5.91731E03 1.55994E04 7.96632E03 4.55210E03 4.92554E03 1.27780E04 2.83507E04 1.77684E04 9.76204E03 1.35980E04 5.54829E03 1.25009E04 3.84296E04 6.21579E03 1.74414E04 2.29879E04 2.14016E03 6.85809E04 1.16548E05 2.25740E04 5.66101E04 1.04784E05 4.74055E04 2.35380E03 1.48151E04 1.20874E04 7.21292E04 7.51259E04 1.53272E04 5.82946E04 2.42685E04 1.73619E03 2.19519E04 1.71411E04 4.41351E02 8.48041E03 3.30095E02 3.41367E03 -Frame 257 2.48098E05 5.23780E06 2.17682E06 3.65603E05 6.94718E05 3.97389E05 4.30202E04 4.24865E04 3.24974E05 2.71985E05 2.54039E04 3.30156E04 5.05550E05 7.00689E05 9.96817E04 8.55148E02 1.08981E05 3.16320E05 1.36057E05 9.04023E03 2.24355E04 1.90759E05 2.37217E05 6.07803E04 3.08735E03 5.61159E04 5.68715E04 9.59135E03 7.35288E02 6.08434E03 5.58766E04 3.22175E04 7.20097E03 3.42263E04 5.40015E04 1.14400E02 1.42277E04 2.24101E02 1.34726E04 2.05579E04 1.55429E04 5.88171E03 2.30532E03 1.39008E04 3.52169E04 1.58377E04 6.61681E04 1.43651E05 8.20104E04 4.11458E04 1.03815E05 1.86855E05 4.20591E04 6.16374E03 5.20132E04 7.91648E04 1.17564E04 8.14155E02 2.19247E04 6.60908E04 8.49500E04 4.47299E04 5.37567E04 3.75522E04 2.32679E04 6.01020E04 3.47412E04 1.14870E05 7.54577E04 1.90341E04 1.28906E04 1.43389E04 1.78401E04 1.86181E04 5.53381E02 2.00441E04 4.90064E04 1.16929E05 1.29068E05 7.75154E04 1.91774E04 7.89272E03 3.14442E04 2.10149E02 1.68773E04 1.10122E04 3.85997E04 3.02118E04 6.70451E04 1.18556E05 1.49178E05 8.73296E04 3.68358E05 7.68789E05 9.18137E05 1.04990E06 4.90478E05 9.90354E04 4.17363E04 2.56498E04 1.35913E04 1.79113E04 2.44435E03 5.31681E03 1.98989E04 1.10534E04 6.69082E03 2.58527E04 3.29863E04 4.77391E04 4.89324E04 8.98133E03 1.80192E04 1.48403E04 1.18076E04 1.51377E04 7.42138E03 6.44104E03 1.03660E03 1.63474E03 2.16578E02 1.44213E03 1.05313E03 1.69779E02 3.81638E03 1.31498E04 2.36931E04 2.95606E04 1.07856E04 3.26375E02 4.97822E02 4.75109E03 3.18183E03 6.97737E03 1.35017E04 9.95363E03 6.54219E03 9.18096E03 2.92343E04 4.01268E04 2.64198E04 1.11402E03 1.21994E03 2.52732E04 2.23677E04 3.13546E04 1.84236E04 6.15479E03 2.22791E04 1.35610E04 5.57023E03 1.76265E04 4.13708E04 1.75435E04 1.98017E04 2.06845E04 2.38413E04 1.46790E04 4.77029E03 1.26393E04 4.82153E04 6.09178E04 2.21436E04 1.41971E04 1.79073E04 3.41073E03 3.32805E02 9.40956E03 3.39679E04 3.67089E04 4.10904E04 6.16988E04 6.66169E04 4.96597E04 3.22060E04 9.12367E03 5.84122E03 1.25501E04 1.88645E04 3.95824E04 3.82657E04 1.44332E04 7.04701E02 5.04670E03 2.94215E03 9.73123E02 4.86405E03 1.49886E04 2.87079E04 2.64883E04 4.90902E04 4.36626E04 1.43338E04 2.69420E03 8.14160E03 2.10703E03 1.69339E04 2.60273E04 8.82417E03 7.06970E03 3.60756E04 2.95938E03 1.48608E04 1.68407E04 5.21394E03 5.04118E03 8.23308E03 6.60164E03 5.58960E03 1.81761E03 3.43895E03 1.56433E04 5.75056E03 4.35317E03 1.31229E04 2.01350E04 5.92303E03 4.87588E02 9.77114E02 1.90722E03 6.13090E03 5.24855E03 8.75605E03 9.62274E03 1.44302E04 5.20736E04 4.84669E04 1.19047E04 5.55607E03 1.12124E03 1.76566E04 1.74268E04 2.06469E04 1.13004E05 1.42023E05 3.92576E04 8.41605E04 8.94521E04 7.22231E03 8.45742E03 2.52530E03 1.00963E05 1.26568E05 3.49015E04 8.06672E04 1.40374E05 5.83856E04 2.96876E04 1.82981E04 5.49170E02 2.01368E04 2.16148E04 2.12411E03 1.21990E04 2.21667E04 1.16296E04 1.84392E03 -Frame 257 1.22964E07 7.39221E06 7.85824E05 1.78956E05 6.57417E05 3.84433E05 6.80341E03 4.80476E04 2.76091E05 2.20611E05 1.27098E04 3.42146E04 4.38568E05 4.79034E05 3.51962E04 2.10687E04 1.27816E05 2.05474E05 5.82849E04 8.34081E02 4.96553E04 2.82715E05 2.27730E05 1.49251E04 1.95623E04 2.75358E04 4.31901E03 2.53641E03 5.55079E03 4.04861E04 3.28946E04 6.05437E03 3.29551E02 9.64786E03 3.58959E04 4.36910E04 2.06524E04 2.12218E04 1.36912E04 5.39048E02 1.67733E04 7.92051E03 5.34705E02 4.97172E03 1.21216E04 2.01639E03 8.73288E04 8.13379E04 4.88354E02 1.77562E04 3.27883E04 2.60331E04 2.80911E04 1.34558E04 2.99213E04 6.21863E04 2.62841E04 1.70226E03 3.57037E03 2.58506E03 8.04291E03 4.57482E03 1.75901E03 3.84274E04 4.38903E04 2.41271E04 2.29024E04 6.08222E04 2.42496E04 1.70238E03 2.39642E02 9.60754E02 1.02672E04 2.71461E04 2.51162E04 1.05540E04 1.04323E04 8.95121E03 9.40609E03 3.30800E04 4.42381E04 3.15303E03 8.81929E03 3.19887E04 6.77424E04 5.41154E04 2.29891E04 4.63856E03 1.61473E04 2.75594E04 1.56910E04 1.44858E05 4.20033E05 4.04693E05 4.59753E05 3.88696E05 9.91444E04 5.89948E04 2.87982E04 1.52392E04 3.04614E03 4.10146E03 7.59628E02 2.79851E03 1.83024E03 5.59994E03 8.61014E03 1.60738E04 1.47704E04 1.94743E04 3.19342E04 1.30094E04 6.30913E02 7.76832E03 2.36691E04 6.46580E04 6.17370E04 2.04724E04 1.90808E03 3.74907E03 2.69685E03 3.11889E03 2.46827E03 1.00053E03 5.81173E03 4.73033E03 2.83590E02 1.20962E04 2.11145E04 7.02371E03 3.31566E03 6.21857E02 2.90064E03 6.28420E03 3.33652E03 5.65128E03 1.83719E04 1.89448E04 1.90062E03 5.73573E03 7.30098E03 2.35331E04 3.56033E04 3.49790E04 2.88411E04 4.66689E04 4.01010E04 1.09302E04 6.04310E03 8.11396E03 9.76911E03 1.90416E04 1.23466E04 1.10952E03 3.47891E03 4.76412E03 5.08820E03 6.09759E03 1.68735E04 1.54095E04 5.66447E03 4.47764E03 1.38897E04 2.00966E04 4.47667E04 3.84080E04 2.70306E04 1.72154E04 8.52850E03 1.69020E04 1.12669E04 4.62690E03 1.09643E04 3.38373E02 1.48605E04 1.15587E03 1.89291E03 7.37589E02 1.23642E03 3.73246E02 1.41700E04 9.67577E03 1.39505E04 3.13305E04 3.26727E04 1.99857E04 8.26056E03 1.41030E04 1.49151E04 9.18907E03 1.86395E04 1.38351E04 2.89033E03 4.34905E03 5.43991E03 2.87224E04 4.51606E04 1.85433E04 9.33087E02 1.48323E04 4.51503E04 2.94645E04 1.87782E03 1.29890E03 8.82942E02 1.36516E04 1.27588E04 4.82635E03 3.75073E03 4.31718E03 7.24640E03 9.40229E03 8.63259E03 5.81547E03 4.71969E03 2.02275E03 6.79135E03 1.12835E04 7.91167E03 5.20870E03 3.62266E03 1.99946E03 4.32754E03 8.96307E03 1.05812E04 1.28182E04 3.58092E04 6.73602E04 1.77139E04 2.75324E03 3.15509E04 6.37851E04 6.94325E04 4.52544E04 3.61426E04 1.84176E05 1.02126E05 1.12095E03 7.36768E04 1.39083E05 1.67405E05 1.64222E05 5.84050E04 8.52446E04 2.08799E05 3.68580E04 1.52159E04 3.55489E04 6.31767E04 1.38179E04 7.47951E03 4.05600E03 1.37052E04 1.25155E04 5.25583E02 1.83888E04 4.42132E04 -Frame 257 1.52363E06 1.94298E06 7.09046E05 1.40668E06 1.62557E06 3.52502E05 1.88013E03 2.62667E04 1.80112E05 1.36743E05 5.40011E03 3.01287E04 3.65796E05 3.72237E05 1.64326E04 8.71819E03 1.80926E04 2.40649E04 7.50834E03 1.70204E04 3.50246E04 2.26337E05 8.11297E04 1.46722E04 2.65256E03 9.63191E03 1.96051E04 1.17067E04 3.28924E02 4.84422E04 7.30496E04 1.59159E04 3.83593E03 2.96171E03 2.24586E03 8.19918E03 1.94258E04 2.19375E04 5.12655E03 6.47633E03 8.16695E03 4.55127E03 1.51264E04 2.51796E04 1.99133E04 1.27967E03 3.72062E04 4.23267E04 3.18699E04 5.60799E01 2.76209E04 3.33937E04 1.97480E04 2.03903E02 2.69644E04 3.23515E04 4.23071E03 4.94154E04 5.20994E04 9.84627E03 8.37546E03 2.46713E04 4.24353E04 9.43386E03 1.69592E02 1.40585E04 8.35058E04 1.32854E05 2.90058E04 1.22379E04 1.11398E04 1.21437E04 9.47235E03 8.59190E03 1.65144E04 2.86685E04 4.50338E04 3.55867E04 1.18044E04 3.64625E03 2.42901E04 7.07070E04 2.47913E04 1.89497E04 2.02077E04 1.14707E05 3.86348E04 1.80584E04 7.67438E03 5.30344E04 2.19122E04 8.63849E04 1.90561E05 3.99347E04 1.87039E05 1.54329E05 1.03868E05 1.16784E05 9.80949E04 3.35939E04 3.30748E03 8.80981E03 2.93041E04 1.20104E04 6.50685E03 3.44123E04 5.51369E04 4.91580E04 4.08788E04 1.79657E04 5.93877E04 3.21322E04 2.49040E04 6.52147E04 7.92337E04 3.11114E04 2.53906E04 3.12711E04 3.12371E04 4.90445E04 4.60925E04 6.46649E04 9.22416E04 6.20637E04 8.38192E04 6.14341E04 5.01924E04 3.20178E04 8.06117E04 1.31754E05 1.53519E05 1.22578E05 7.46895E04 3.54200E04 2.80833E04 8.42368E04 1.45753E05 2.99589E04 8.15361E04 1.52204E05 1.14054E05 7.87941E04 2.13216E05 8.92812E04 6.65870E04 7.62043E04 1.75916E05 4.97706E04 5.69518E04 1.14636E05 8.10823E04 1.14094E05 6.95470E04 1.21426E05 1.50836E05 4.22856E04 3.80262E04 2.30576E05 2.44950E05 3.27801E04 1.68234E05 1.83026E05 1.21135E05 9.96100E04 1.02046E05 1.61972E05 7.47807E04 1.24038E05 4.36274E04 2.51175E05 1.82517E05 1.59910E04 9.45303E04 2.41332E05 1.40136E05 1.01436E05 1.76077E05 1.44126E05 9.50835E04 5.78712E04 2.00109E05 1.92571E05 4.37745E04 1.69127E05 8.89087E04 1.52403E05 1.13344E05 1.22218E05 6.39908E04 1.07220E05 1.23851E05 8.43661E04 4.21814E04 9.50902E04 4.98141E04 7.71397E04 2.01270E05 8.68250E04 9.17802E04 4.40396E04 1.44005E05 5.14866E04 7.90519E04 8.64778E04 3.17155E04 7.23175E04 4.84463E04 9.67503E03 2.35961E04 6.69412E04 5.96148E04 3.35531E04 7.00768E03 1.69482E04 2.32559E04 2.14127E04 2.36657E04 5.95973E04 3.09833E04 1.77038E04 9.76775E03 2.03593E04 2.35394E04 1.64130E04 4.91233E04 2.48682E04 1.18664E04 8.92657E04 5.86176E04 9.53876E03 3.31069E04 7.17574E03 1.77278E04 1.43808E04 9.14021E04 7.27889E04 1.71749E04 5.04368E04 1.08974E03 5.91430E04 3.06149E04 7.81586E03 7.53185E04 2.57785E05 1.98211E05 2.04770E04 1.62123E04 3.63704E04 2.50834E05 2.32887E05 6.60214E04 1.27673E04 2.66071E04 1.24203E04 8.72640E03 3.65738E04 6.51664E04 -Frame 257 4.99631E05 1.21966E06 1.56147E06 5.03730E05 4.67084E05 4.59867E05 5.98407E04 5.14609E03 1.00824E05 1.04840E05 3.47124E04 5.47711E04 3.82025E05 4.50865E05 1.52832E05 7.15141E04 8.99549E04 6.36586E04 1.88914E04 6.95164E04 2.01605E05 2.71734E05 6.44045E04 7.67337E03 1.82331E04 1.15170E04 5.48299E03 5.81910E04 8.10680E04 8.60147E04 8.53770E04 3.48266E04 2.21794E04 2.08218E04 4.03038E04 1.04021E04 9.41413E03 3.59125E04 3.53753E04 4.80487E03 1.14279E04 6.91103E03 6.08054E01 9.16243E03 1.84048E04 3.36307E04 4.74379E04 2.04640E04 2.19877E04 4.37799E04 7.00581E04 5.33984E04 1.30617E04 2.72693E04 1.12325E05 1.24829E05 1.56739E04 4.68733E04 1.00953E05 1.12551E05 5.52775E04 1.14008E05 1.08157E05 2.90948E04 3.08125E03 5.42141E04 1.54422E05 2.04826E05 1.68160E05 1.12360E05 6.83988E04 1.82832E04 7.29544E04 1.06060E05 1.19822E05 9.30550E04 1.72593E05 8.52976E04 3.16176E04 6.24103E04 1.45889E05 1.22532E05 1.78666E05 1.91073E05 1.87402E05 1.90234E05 1.72674E05 1.34794E05 8.37918E04 1.51452E05 1.90648E05 2.23023E05 1.59316E05 1.11716E05 1.80450E04 5.95055E03 9.73250E02 8.48033E04 1.41804E05 1.11267E05 5.12400E04 9.91484E04 1.29255E05 6.23275E04 6.54875E04 1.11458E05 2.05195E05 1.94736E05 2.47360E05 2.62212E05 2.70641E05 1.96183E05 2.55348E05 1.31463E05 2.76648E05 9.73801E04 8.62226E04 3.19793E05 5.67677E05 6.35861E05 1.76102E05 1.20047E05 5.94675E05 8.63012E05 3.63247E05 2.31037E05 4.64454E05 4.59076E05 3.02291E05 5.53269E05 6.28240E05 4.20436E05 3.22055E05 6.62837E05 6.18490E05 1.79523E05 1.16805E05 1.62604E06 2.61773E06 1.51267E06 4.42396E05 1.36133E05 9.10615E05 1.32636E06 1.46848E06 7.44689E05 1.37558E05 4.57594E05 7.99435E05 5.83915E05 2.66043E05 5.53656E05 6.08349E05 1.86678E05 4.52365E05 1.75102E06 1.69040E06 4.28803E05 2.53959E05 1.14683E06 1.09317E06 3.93707E05 8.50432E05 1.78007E06 1.13006E06 2.78408E05 1.75794E05 1.68722E06 1.86456E06 7.56351E05 1.62771E05 2.90116E05 4.57522E05 1.14025E06 2.30610E06 1.58149E06 1.04603E06 2.55147E04 1.56325E06 1.95530E06 2.43915E06 7.65483E05 4.60918E05 1.28216E06 5.76388E05 6.16727E05 5.32223E05 3.87190E06 2.28972E06 1.05785E06 7.40704E05 4.25946E06 4.95195E06 2.04944E06 1.31973E06 9.06649E05 2.74945E06 1.22568E06 1.24492E06 4.11649E05 3.24415E05 6.65252E04 1.35295E06 2.59420E06 7.97692E05 1.35270E05 1.36273E06 3.05670E06 1.96621E06 5.76228E05 1.40460E06 2.96749E06 1.90052E06 3.63329E05 2.38730E05 7.03243E05 4.69074E05 3.21168E04 6.03707E05 1.03176E06 5.84346E05 3.85115E05 8.77463E05 1.57441E06 2.06534E06 1.10413E06 5.04073E05 6.46952E05 1.55587E06 1.19095E06 3.97152E05 3.21563E05 6.81514E05 1.03355E06 4.42999E05 2.20277E05 6.23703E05 9.22450E05 3.80240E05 7.13106E04 3.16392E05 6.45175E05 6.28136E05 3.16203E05 1.46782E05 6.06613E04 1.65545E05 2.59742E05 6.76843E05 3.51154E05 4.92028E03 4.53481E04 2.35565E05 4.80931E05 2.81159E05 2.58633E05 4.24157E05 -Frame 257 1.39865E06 2.32633E06 2.13563E06 1.04802E06 6.92096E05 2.09237E05 3.48367E03 4.21377E04 8.43464E04 1.15700E04 6.35893E03 6.32283E04 2.88533E05 1.67762E05 4.91338E03 5.33211E03 5.58003E04 3.52978E04 1.01170E04 6.54501E03 8.61468E04 1.25917E05 1.88330E04 1.27726E04 2.76854E04 4.76042E04 5.56210E04 7.34867E03 1.30257E04 8.84166E03 1.26532E04 5.96445E03 9.89255E02 1.91697E03 1.77610E04 3.77856E04 1.90681E04 5.95215E03 1.73861E03 4.54141E03 8.64393E03 1.09271E03 1.27378E04 9.66433E03 5.97559E03 2.59244E03 1.12389E04 2.67939E04 4.29763E04 7.06018E04 8.65382E04 5.36276E04 1.08546E05 2.30169E05 2.00824E05 1.84119E04 3.80798E03 6.17602E03 1.73816E04 7.76542E02 1.35915E04 3.55120E04 8.55470E04 4.72787E04 2.46370E04 8.56136E02 2.38521E04 1.35630E03 2.68181E03 2.13974E03 2.92093E04 1.82939E04 2.03592E03 2.88231E04 1.12558E04 5.95759E03 8.13173E03 1.95328E04 5.66998E04 4.40013E04 6.89782E03 3.63946E02 1.15283E03 4.02827E04 2.56223E04 1.73634E04 8.75084E03 8.46947E03 3.47045E03 1.73649E04 3.53648E04 5.82664E03 1.62043E04 1.82280E02 2.29336E04 3.34673E02 3.72993E04 3.03147E04 4.77481E03 4.41060E03 8.95139E03 3.02603E04 5.54650E04 3.00559E04 1.56991E04 8.08087E03 9.36352E03 5.04074E03 1.06042E04 2.20876E04 1.14873E05 1.00222E05 2.23167E05 2.85559E05 3.35495E05 1.72801E05 9.91213E04 7.39945E04 1.95380E04 3.73097E05 5.75901E05 1.80962E05 1.09003E05 3.42509E04 7.04316E05 8.57583E05 4.25514E05 6.97394E04 1.15869E05 2.14641E05 6.35962E04 1.67369E05 3.38567E05 4.51692E04 5.29483E05 3.97249E05 4.35104E05 3.29436E06 2.26041E06 4.04325E05 4.27668E05 9.26001E05 4.56077E05 1.78138E05 8.33672E05 8.37408E03 5.66344E05 7.98607E04 1.19861E06 1.93634E06 4.70028E06 6.56161E06 2.22239E06 1.04343E05 7.36002E05 8.75800E06 7.99907E06 8.52974E05 5.68867E05 1.14206E06 1.05882E06 6.14924E04 1.00894E06 3.21983E06 1.88270E06 2.76162E06 6.26086E06 5.19149E06 4.99744E05 8.78138E05 8.21561E05 1.14102E06 1.08376E06 2.03948E06 6.10687E05 1.68887E06 8.55352E05 5.62616E06 9.89465E05 2.03851E06 4.88276E06 1.47233E07 8.90839E06 7.73312E06 1.27474E07 2.01888E07 2.30638E07 2.03197E07 1.74626E07 2.40414E07 5.56577E07 6.09357E07 3.08455E07 2.26347E07 4.26988E07 4.73082E07 3.05749E07 2.47500E07 2.63650E07 1.48940E07 7.89696E06 1.34491E07 1.67024E07 4.90283E06 2.41988E05 1.72680E06 6.38995E06 4.96617E06 3.52840E06 3.07937E04 4.30638E06 6.57973E06 3.23393E06 1.06703E06 4.04743E05 3.19879E06 1.00395E06 3.86950E04 7.59404E05 4.72105E06 5.17387E06 1.38556E06 1.42324E05 1.70814E06 5.16338E06 2.32018E06 4.72983E05 3.66928E04 2.49683E06 2.29464E06 6.32875E05 2.91758E05 2.90615E06 2.16739E06 2.39684E05 6.69955E05 3.72861E06 4.30619E06 4.21134E05 6.78692E05 5.55115E04 2.60540E06 9.67782E05 9.27438E05 2.49933E06 4.18045E06 2.92717E06 2.62132E06 5.10185E06 5.80505E06 2.67044E06 1.86116E06 1.56941E06 1.92604E06 1.03694E06 1.25427E06 5.01529E05 -Frame 257 2.50315E04 4.38953E05 1.35018E05 1.28756E05 5.47678E05 2.23595E05 3.35030E04 1.04621E05 1.65677E05 7.50668E04 2.33765E04 9.53110E04 1.52015E05 6.18708E04 8.72917E03 1.55538E04 4.80489E04 3.26892E04 4.84754E03 2.76519E04 6.85494E04 2.32932E04 4.34331E03 1.47494E04 1.15068E04 1.50665E04 2.89476E04 2.92286E04 3.21750E04 4.67458E03 9.05300E03 1.04549E04 1.44923E03 7.21804E03 3.85616E04 6.81745E04 2.82779E04 6.70707E03 4.39645E03 8.36285E03 1.44068E04 2.25198E04 1.42667E04 2.71607E02 5.20764E03 1.35432E03 1.12605E04 2.23113E04 4.82663E04 9.75343E04 4.99961E04 1.31823E04 1.22190E05 2.43452E05 1.29473E05 1.41509E04 6.16946E02 9.03982E02 7.26052E03 3.22756E04 2.98339E04 8.86048E02 7.27728E03 7.62048E03 1.66702E04 1.03247E05 1.27715E05 6.14471E04 3.00853E04 4.73786E04 6.93821E04 4.25689E04 3.40023E03 2.25872E04 3.45786E04 1.58394E04 6.05466E03 2.19976E04 9.66618E04 6.58375E04 9.03113E03 2.51317E03 3.61886E04 4.04179E04 2.21689E04 7.25354E04 1.49971E04 2.82083E04 5.88385E04 8.06358E04 5.38320E04 2.23117E04 3.01104E04 1.05789E05 9.94367E04 4.01032E04 5.96732E04 3.86779E04 1.19253E04 9.24984E03 4.05118E03 1.44836E03 1.25801E04 7.91067E02 5.24078E04 3.47059E04 2.98427E04 1.00948E05 2.54560E05 4.91209E05 4.91184E05 1.15722E05 1.32045E05 2.96806E05 2.20115E05 1.57705E05 4.64316E05 5.92707E05 3.67404E05 1.32654E05 1.91624E05 4.50828E05 1.03076E06 1.30883E06 2.85870E05 1.47130E06 1.02613E06 1.05064E06 8.73751E05 1.52399E05 1.83123E06 2.54576E06 1.76304E06 1.43000E06 7.65534E04 1.07022E06 3.61929E06 5.37934E06 1.43386E06 7.25164E05 7.84279E05 1.53532E06 3.70278E05 6.34634E05 3.21666E06 6.46832E06 8.81795E06 1.03784E07 1.93119E07 2.75184E07 1.32607E07 2.32904E07 4.77116E07 4.06116E07 2.81653E07 1.69637E07 4.71837E07 3.95665E07 1.05013E07 3.95949E06 7.15197E06 6.46164E06 4.26050E06 1.40835E07 4.60008E06 3.02312E06 8.01602E06 1.71130E06 1.33906E07 2.26373E07 2.79755E07 2.35749E07 1.62400E07 2.32714E07 1.42576E07 1.00866E07 5.07318E07 8.18409E07 5.16260E07 1.92977E07 2.46938E07 8.75288E07 8.54822E07 6.92890E07 5.69873E07 8.43526E06 7.11432E06 2.99820E06 9.04152E05 3.58468E07 1.43121E08 4.10189E07 6.87484E05 2.20526E07 7.90386E07 3.82118E07 5.75024E06 1.59036E07 6.12718E07 1.24405E08 9.82504E07 8.55397E07 2.54856E06 2.03371E07 2.19571E07 2.67105E07 8.50783E06 5.33010E04 4.22489E06 1.76463E07 3.59785E06 1.60807E07 4.00567E07 5.98526E07 3.20275E07 1.66379E07 3.73185E07 1.81474E07 4.95643E06 7.96685E05 9.82899E06 4.39922E06 1.36210E06 1.60239E06 1.04295E06 5.31579E05 1.55208E06 3.58218E06 5.95190E06 1.74375E06 1.12044E06 1.06369E07 1.40043E07 2.20647E06 1.95801E06 2.30098E06 1.81668E06 1.14411E07 2.71121E07 1.17666E07 9.71781E06 2.34664E07 2.63626E07 2.51170E07 1.65319E07 4.61273E06 1.12126E06 4.14543E06 1.93219E06 8.17107E06 3.71300E06 5.55580E06 4.85897E06 5.11500E06 1.43896E06 8.89044E06 1.20179E07 -Frame 257 1.44471E06 1.32774E06 1.02346E06 7.25125E05 4.53179E05 2.03481E05 1.40567E04 2.03132E04 4.93379E04 3.45515E04 8.39356E03 9.69020E03 2.49290E04 2.06483E03 7.22725E02 1.18539E04 6.50639E03 1.99117E03 3.73232E03 1.54432E04 4.11371E04 1.77360E04 2.48781E03 3.17343E03 1.53978E04 2.07332E04 1.05003E04 9.49646E03 1.06613E04 9.49917E03 1.27005E04 1.95831E04 1.74129E04 4.97306E03 2.12358E04 4.76590E04 3.54322E04 2.24645E03 6.65019E02 1.59746E03 1.45270E03 5.58330E03 8.46888E03 2.87237E03 2.06862E04 5.18422E04 3.37687E04 4.12739E04 3.95710E04 1.08023E04 1.87242E04 2.47119E04 6.61010E03 5.99656E04 2.44741E04 6.03240E03 1.87938E04 4.23206E04 9.25903E04 8.93538E04 9.75969E03 1.52640E04 1.61694E04 6.92995E03 4.36826E04 2.04635E05 1.53587E05 7.19152E04 1.78640E05 2.69194E04 1.51905E04 1.25175E04 6.82119E04 6.88736E04 6.98465E03 6.10108E04 1.22324E05 1.59251E05 2.16019E04 5.90222E04 8.06848E04 9.11018E04 1.69622E05 9.52782E04 3.08045E04 1.33400E05 1.87761E04 7.10721E04 2.61808E05 1.27582E05 1.66712E04 4.33705E03 5.09774E04 1.34078E05 5.55078E04 9.98685E04 2.24595E05 1.36992E05 1.35582E04 5.12756E03 6.32465E03 1.93648E04 7.16001E04 1.50351E05 1.07120E05 4.66206E04 6.16797E04 1.80978E05 1.15441E04 2.02571E05 1.35315E05 4.61472E05 2.07198E05 2.22647E05 1.08830E05 1.09152E05 7.42528E05 1.98805E06 6.64127E05 4.53868E05 8.90065E05 2.52466E06 3.97341E06 9.06358E05 1.32245E06 4.83903E06 3.49666E06 6.48248E05 7.25320E06 7.16362E06 3.08075E06 7.02491E05 1.75784E05 1.07432E06 2.94722E06 3.23563E06 2.99781E06 1.01186E07 8.97757E06 3.51397E06 9.86289E05 1.42586E06 9.28662E05 1.24731E06 8.95863E05 2.62538E06 3.30174E06 1.78783E06 3.97132E05 2.04087E07 2.16279E07 1.73200E07 2.93252E06 6.04680E07 5.52185E07 2.63923E07 2.56397E07 4.98373E07 4.04820E07 1.14197E07 1.85939E07 2.19895E07 6.74102E06 3.23882E07 4.65649E07 9.19607E06 1.00540E06 1.31059E07 7.71878E07 7.26253E07 4.58188E07 6.71777E07 2.28701E05 1.56300E07 1.64556E06 2.95106E07 1.39869E08 9.52619E07 5.32152E06 6.87630E07 8.29192E07 6.98655E07 1.11666E07 4.16223E07 8.49254E07 1.95689E07 3.86897E07 5.70432E07 7.39649E07 1.99662E08 3.07130E08 1.17211E08 1.30153E07 4.90165E07 1.63462E08 7.76543E07 1.02899E08 1.35338E08 1.26557E08 8.56264E07 1.65387E08 2.65079E08 2.45142E08 1.96575E08 4.72200E07 1.43064E07 1.04455E08 1.47715E08 8.88796E07 1.75544E07 2.06759E08 3.13236E08 1.83751E08 2.19970E08 2.71542E08 1.81095E08 1.29018E08 1.06249E08 1.11918E08 8.65725E07 1.52709E07 2.51696E07 6.69221E07 7.39552E07 5.37449E07 4.54190E07 8.02335E07 9.45700E07 1.19890E08 2.08412E08 2.33150E08 1.85537E08 2.11985E07 3.79383E07 1.49439E08 1.87199E08 1.01724E08 2.12840E06 7.45154E07 8.25566E07 4.34280E07 2.14713E06 5.10665E07 4.22693E07 1.58969E07 2.88747E07 3.49125E07 7.90390E07 9.89138E07 5.20805E07 4.56062E06 3.41305E06 1.18795E06 2.83241E07 8.52018E07 7.43190E07 5.22871E06 -Frame 257 2.05574E04 1.87054E05 6.73658E05 2.55171E05 1.17644E05 2.99642E04 5.83490E03 3.87472E03 3.42689E03 6.99783E03 2.87566E03 2.54225E04 4.80510E03 2.34498E03 5.53177E03 3.50563E03 5.53597E03 2.00533E04 2.00374E04 8.26290E02 7.03008E03 4.92268E03 5.72912E03 6.98817E03 3.10443E03 2.60487E03 1.74318E04 2.57923E04 1.07283E04 3.51141E03 5.28896E03 7.68421E03 2.62105E04 4.43575E03 6.41084E02 3.19120E03 2.65780E04 7.57886E03 2.30971E02 4.95194E03 3.16502E03 1.09848E04 7.94605E03 1.52237E04 2.50078E04 1.61085E04 2.66948E03 1.30813E04 1.18180E04 9.15726E01 2.23840E04 6.13286E04 1.02628E04 6.92800E04 9.73303E04 1.10244E04 5.20438E04 1.31447E04 6.81600E04 1.82652E05 7.56408E04 2.10994E04 1.43439E04 5.62847E04 6.24946E04 1.40435E05 4.74273E05 2.08191E05 3.39409E04 1.47912E05 1.19168E05 2.43536E04 1.38922E05 1.86576E04 3.02408E04 1.28945E04 5.67127E04 1.12926E05 2.08549E05 9.20574E04 9.64604E04 6.78099E04 2.53261E05 2.07352E05 1.08747E05 2.02599E05 2.94447E05 4.95400E05 3.49690E05 1.08165E04 6.27151E04 1.05290E04 1.47553E05 1.75433E05 7.50875E04 2.98579E05 4.11813E05 2.89887E05 6.70830E04 2.34982E04 4.51021E04 8.56354E03 5.62733E04 5.08575E04 2.00827E04 2.56578E05 4.71179E05 9.91107E05 1.08071E06 1.06932E06 7.37585E05 2.94804E05 1.43781E05 4.15197E05 7.70944E05 9.55907E05 1.76473E06 1.26060E06 3.96879E05 2.10655E04 6.60826E05 1.59022E06 1.83734E06 3.52853E05 1.28235E06 7.27920E06 8.91880E06 4.14264E06 8.20682E06 8.62960E06 1.55263E06 4.60297E05 5.22260E05 2.33615E06 1.46707E06 1.09218E07 1.40079E07 5.94486E04 5.48889E06 1.97792E06 5.74281E06 1.54168E07 2.28208E07 9.50645E06 9.99600E05 1.95833E07 4.94841E07 5.65922E07 2.65105E07 1.50421E06 1.76998E06 9.08116E06 3.26401E07 2.73284E07 4.47363E06 1.01463E07 4.39805E06 1.06715E07 5.58097E07 4.34097E07 4.39600E07 3.43400E07 1.94726E07 6.24346E06 1.93002E07 4.62213E07 3.98737E07 7.94749E07 2.18691E08 2.46279E08 2.27146E08 3.34926E08 3.84900E08 2.28124E08 9.93442E07 1.09266E08 4.19566E08 6.12749E08 3.57813E08 1.84877E08 4.77616E08 3.36534E08 2.52936E08 2.67513E08 5.63187E07 5.78130E07 4.66176E07 3.77102E07 2.48029E07 1.29728E08 1.89289E08 1.22562E06 2.82571E08 2.54511E08 3.16254E07 4.09253E08 2.71113E08 1.43329E07 1.46707E08 5.67278E07 3.06846E06 4.82974E07 7.10085E06 1.22768E08 2.46792E08 7.66555E07 9.11040E07 2.65963E08 1.57266E08 1.91476E08 4.65299E08 3.16645E08 1.04303E08 9.74979E07 1.84491E07 1.76335E07 1.32918E07 2.14093E07 6.27461E07 9.42715E07 8.26968E07 1.33975E08 2.86220E08 2.58959E08 1.82630E08 9.31458E07 4.21025E07 2.58815E08 2.95402E08 2.14227E08 5.23577E08 3.91230E08 1.06267E08 6.79365E07 4.22327E07 1.42658E08 1.79794E08 1.17547E08 1.29372E08 6.81422E07 4.75933E07 5.93814E07 1.26892E08 1.06405E08 4.30747E07 1.53991E08 5.80133E07 7.92799E07 3.06623E08 3.71487E08 1.98854E08 7.14556E07 6.17810E07 1.03179E08 1.38283E08 2.08792E08 2.25434E08 -Frame 257 8.77701E04 1.89888E05 7.00166E04 9.39588E04 1.67627E04 6.27091E03 1.32649E04 1.00923E04 1.18483E02 3.43741E03 4.80374E03 4.81868E03 1.80772E03 4.24538E03 9.84492E03 1.38780E03 1.34961E03 2.49591E04 4.69625E04 1.88759E03 1.17990E04 3.80636E03 6.19373E03 1.44078E04 1.50240E03 5.28475E04 5.42150E04 6.00353E04 1.18301E04 2.73751E04 1.38817E04 4.37227E03 2.90424E04 2.92548E04 8.71083E04 7.04141E04 1.30678E04 2.40256E04 4.58738E04 3.96983E03 1.22526E04 1.08606E04 2.57544E04 1.55138E04 8.70715E02 1.61575E02 2.98869E04 3.52585E04 2.26810E04 1.37306E04 2.86406E04 1.52748E04 9.82345E04 3.22806E02 7.50044E04 1.67346E05 1.61080E05 3.92411E04 1.69886E04 2.79075E05 4.17050E05 2.56602E05 3.92382E05 3.94181E05 1.84132E05 1.10307E05 2.27603E05 7.41929E04 2.24481E04 2.19005E05 2.12725E05 1.09955E05 2.91066E05 3.99255E05 3.66233E05 1.53746E05 4.05955E04 1.62890E05 3.32841E05 2.38287E05 2.91308E05 1.42480E05 6.67810E03 7.47387E04 8.49332E04 9.43146E03 1.01808E05 8.59536E03 1.28282E05 5.76254E05 4.69820E05 3.98024E05 2.04270E05 8.21928E04 2.48776E05 1.89900E05 7.16725E04 1.06200E04 4.03151E03 2.69388E03 1.25208E05 6.95074E04 2.79844E05 1.98681E05 2.58566E05 1.02751E06 1.26072E06 4.52732E05 8.87889E05 1.06905E06 4.59065E04 3.75904E04 3.22705E04 2.00555E05 5.62631E05 2.82948E05 1.16750E06 5.23518E05 2.26292E06 2.86085E06 1.53159E06 8.89826E05 3.09266E05 5.71190E05 2.46260E06 3.35297E06 1.44908E05 6.96597E05 1.84513E06 2.16180E06 8.44730E05 4.73548E05 1.73313E05 1.76122E06 1.32147E07 2.48975E07 1.80079E07 6.61047E06 4.92323E06 9.51321E05 1.70967E07 3.63039E07 2.83011E07 1.32890E07 1.26341E07 4.16049E06 5.39046E06 7.17059E07 7.32795E07 2.05629E07 1.89478E06 1.09700E07 1.60798E07 8.38107E05 2.09891E07 5.04647E07 4.94778E07 1.30786E07 1.84370E07 1.40773E07 2.45866E07 2.25791E07 7.25889E06 1.29938E07 1.24490E07 2.41740E06 5.04841E06 2.12448E07 4.70732E07 5.68532E06 1.59269E07 4.04981E07 1.69327E08 2.08614E08 1.22127E08 3.89500E07 1.26686E08 2.48941E07 3.22238E08 1.09550E09 8.28905E08 7.19912E07 2.54094E08 4.97085E08 3.69435E08 1.81598E08 6.28147E07 2.73274E07 2.05073E06 7.93269E06 9.75871E07 1.20381E08 3.35169E08 5.81440E08 4.08098E08 2.77689E08 7.44960E07 1.44538E08 7.49802E08 6.57943E08 1.81547E08 3.34828E08 4.20393E08 1.42028E08 3.29057E08 6.12320E08 1.82282E08 2.75489E06 1.33514E07 5.40050E07 1.03580E08 1.30831E08 1.02297E08 1.25961E08 8.66491E06 1.18887E08 2.55510E08 2.78780E08 1.40113E08 4.79524E07 1.98031E07 2.14851E07 3.94719E07 4.79795E07 1.53570E07 1.81144E07 9.45842E07 1.40423E08 3.16725E07 8.91869E07 3.47283E08 2.29622E08 6.40392E07 4.22768E07 8.12404E06 2.01539E07 5.24236E07 9.85760E07 1.75395E08 1.18157E08 3.59594E07 2.33473E07 3.66291E07 2.96775E07 3.08559E07 2.02466E08 3.52874E08 2.75884E08 1.39951E08 4.12780E08 4.46197E07 5.41776E07 6.66272E07 7.79494E07 3.04842E07 6.14151E06 5.21518E06 -Frame 257 9.60880E04 1.54304E05 4.78952E04 1.78528E04 2.80662E02 1.71349E03 3.44419E03 4.48596E03 7.83323E03 2.19825E01 5.16959E02 7.10146E02 7.82889E03 2.59990E02 7.61346E03 1.48049E04 2.55785E04 4.88071E04 9.04731E03 3.36634E03 1.44360E03 1.46571E04 1.56776E04 7.36991E03 5.75316E03 1.51533E04 1.82765E04 7.78847E03 9.82327E02 4.39235E03 1.93281E04 1.57620E04 7.61696E03 4.00150E04 3.57062E04 7.70604E03 1.08357E04 6.11967E04 4.13466E04 8.89211E03 4.54585E04 2.38537E04 1.08182E04 7.36673E03 1.07803E03 1.82348E04 1.40963E04 4.33981E03 2.04087E04 1.58036E04 2.67319E04 4.96089E04 6.71307E04 1.56720E05 2.64802E05 1.56937E05 3.63178E04 2.91804E05 1.76119E05 1.56124E04 5.46954E04 5.48700E04 6.47151E02 1.01050E05 3.05524E04 1.03366E04 5.70520E04 2.12089E05 2.89760E05 5.47825E04 5.41224E04 1.32495E05 1.94306E05 3.21047E05 1.42506E05 1.12703E05 1.16483E05 2.27212E05 9.44364E03 1.81654E05 2.90861E05 5.59441E04 3.87903E04 1.59914E05 1.08981E05 2.06287E05 2.31037E05 1.64408E05 6.12859E04 3.65458E05 1.55436E05 1.07533E05 2.82147E05 3.69167E05 5.76558E05 5.94431E05 3.32411E05 1.15061E05 3.68696E04 9.86977E04 1.95252E05 1.44867E05 3.63098E05 4.79815E05 1.16994E05 2.83388E05 1.83810E05 1.87903E05 8.35391E05 7.27835E05 1.79220E05 1.25742E05 4.25021E05 3.86474E05 1.12979E06 1.75390E06 3.42805E05 9.15908E05 1.34867E06 2.44576E06 4.85286E06 3.36945E06 4.45992E05 5.10840E05 1.07669E06 1.48594E06 1.57581E05 1.65415E06 1.82888E06 2.50159E05 2.08790E06 2.48699E06 6.57125E05 1.22207E06 4.43521E06 1.31759E06 9.42703E05 2.04989E06 6.19416E06 1.74816E07 9.04894E06 1.91179E06 8.75332E06 1.37358E07 1.71694E07 1.58015E07 3.87204E07 3.56032E07 5.47282E06 1.26565E07 5.26081E06 1.81524E07 4.09292E07 2.10743E07 4.40348E05 2.59752E07 1.85905E07 1.61770E06 2.23331E07 1.86182E07 6.80142E06 1.07023E07 1.59664E07 3.32858E06 9.70645E04 6.29662E06 1.44479E07 1.23981E07 1.03345E07 3.31447E07 5.45212E07 5.65381E07 3.38673E07 2.23470E07 3.19514E07 9.10131E07 3.98052E07 3.23911E07 1.09357E08 7.29949E07 2.05530E08 8.55705E07 1.57281E07 5.22167E07 1.70016E07 1.20971E08 1.93457E07 1.33209E07 3.87459E07 6.23142E07 1.07842E08 1.74528E08 3.37630E08 2.81760E08 5.25478E07 4.82483E07 2.93578E06 2.47290E08 1.16824E09 1.43042E09 4.42651E08 6.03714E07 3.31035E08 1.85406E08 1.24278E08 4.60591E08 2.35575E08 3.02228E07 2.32673E07 6.63279E07 4.32428E07 1.12014E08 2.20530E08 2.66309E08 2.64246E08 3.92654E07 1.67640E08 1.56398E08 9.43408E07 2.37437E08 8.65396E07 8.09099E06 2.35705E06 5.92766E07 1.14518E08 4.88127E07 2.09928E06 4.89401E07 1.80770E08 3.69593E08 2.96119E08 2.98156E07 8.07284E05 5.29837E07 2.24020E08 1.80264E08 1.55733E08 3.47004E08 2.58984E08 6.52932E07 5.43819E05 3.07745E07 6.45063E07 1.12725E08 1.31465E08 1.26687E08 1.06150E07 7.37650E07 4.05870E08 9.39885E08 7.94194E08 4.19450E08 4.53710E07 8.58060E07 1.82067E08 4.56204E07 4.28957E05 -Frame 257 1.22026E05 1.68005E05 6.92171E04 1.36029E04 1.20285E03 3.85193E02 4.57958E03 3.98760E02 4.49507E03 1.10251E02 1.92876E03 8.02463E02 3.17302E03 3.70396E03 1.55610E03 4.88579E03 8.01506E02 1.63359E04 7.13453E03 6.32264E03 5.17350E03 1.65734E04 1.98767E04 3.00619E03 6.61246E03 3.19621E03 8.52732E02 1.94673E03 3.22867E03 1.03341E03 4.34540E03 1.02182E04 3.69410E03 1.48506E04 3.19333E03 2.48127E03 1.14855E04 1.35705E04 7.57327E03 5.13470E04 1.04946E05 1.01015E05 9.42060E03 3.33645E03 4.05648E04 5.74728E04 2.27350E04 2.86294E04 4.87429E04 2.89079E04 2.59464E04 1.33094E04 8.65966E04 1.21283E05 3.82673E05 2.00512E05 1.75053E04 1.26652E05 1.15652E05 6.10227E04 2.78016E04 2.00370E04 7.64138E03 8.59857E04 2.77063E04 1.60686E04 8.88935E04 3.59993E03 7.93180E04 1.80708E05 2.98982E04 1.27393E05 1.73142E05 1.02154E04 6.38691E04 3.32997E05 4.52927E05 2.82274E05 2.41166E04 3.84298E05 3.19780E05 1.79921E05 2.30953E05 2.15489E05 1.13401E05 2.74167E05 1.56991E05 3.13744E03 1.79547E05 3.07179E05 3.72600E04 7.57946E04 3.80153E04 1.24761E04 1.59339E05 4.39009E04 1.28682E05 3.59772E05 2.43668E05 5.43720E04 5.18037E05 3.93743E05 2.74194E05 7.18658E05 6.24210E04 2.75336E05 5.44135E05 2.44615E05 6.69901E04 1.59999E05 2.61147E04 6.56308E03 2.16226E05 2.42192E05 1.18478E05 8.83502E05 1.15833E06 2.89139E05 4.72158E05 8.03327E05 9.91912E03 1.42427E06 1.13253E06 9.74647E04 2.42274E05 1.52379E06 3.96715E06 4.01048E06 3.45078E06 5.33692E06 8.99155E06 7.43644E06 2.64546E06 2.33222E06 2.73275E05 2.67715E06 4.57744E06 3.91042E06 1.10448E07 7.95276E06 1.51822E06 1.39611E06 8.66445E05 1.16032E06 9.18827E06 2.99902E07 1.37682E07 1.45631E07 9.95667E06 7.41109E06 7.24911E06 3.56231E06 2.37862E07 3.08788E07 3.47569E06 4.02491E06 2.74554E07 7.03978E07 6.87724E07 2.29038E07 7.25553E06 5.52673E06 1.51569E07 3.79603E07 2.81695E07 2.45136E07 5.12225E07 4.63284E07 9.27515E06 1.01175E07 3.07261E07 1.51085E07 6.69853E06 3.15163E07 1.15667E08 2.13821E08 1.17896E08 5.96021E07 2.56956E07 2.04599E07 3.16686E07 2.00042E07 2.14409E07 2.88274E07 9.42394E07 8.49043E07 1.16296E07 5.97766E06 4.08835E07 5.62039E07 7.03879E06 3.35164E07 8.00541E07 1.04025E07 8.86032E07 8.36033E07 1.67625E06 3.77879E07 2.44640E08 3.18104E08 1.47613E07 5.30048E07 2.11066E08 2.80911E08 8.57923E07 2.37495E07 2.00429E08 1.38720E08 1.12004E08 1.61515E08 1.75902E07 1.45294E07 2.58889E05 3.90838E06 4.64830E07 1.88141E08 2.05075E08 1.52773E07 2.93853E08 5.66746E08 2.28285E08 9.85109E07 1.21510E08 1.86099E08 1.67955E08 7.61286E07 9.86704E06 1.53635E07 1.52323E07 1.02830E08 8.58851E07 9.40703E06 1.10892E08 2.08732E08 1.66777E08 8.96183E07 4.50368E06 1.09039E08 1.16055E08 6.95716E07 1.20662E08 1.14669E08 1.64107E08 6.37493E07 2.43412E06 6.52549E07 1.76404E08 9.54803E07 1.64397E08 7.69133E07 2.93197E07 2.01946E07 2.83046E08 2.12173E08 6.53736E07 3.74496E07 1.89931E07 -Frame 257 4.45943E04 2.18897E04 7.62803E03 7.81902E03 4.43785E02 1.57724E02 1.58091E03 5.13635E03 5.94092E01 1.29440E03 2.42221E01 1.87263E02 2.32801E03 8.75089E03 3.32565E03 2.96991E03 7.40782E03 1.10273E04 1.40481E03 1.46727E03 1.72474E03 4.53119E03 5.76759E03 6.13709E03 1.15306E04 4.05502E03 4.67933E03 1.62616E03 7.01088E02 6.78751E03 6.24427E02 7.06004E03 2.58251E02 2.21550E03 3.07437E03 3.33600E03 6.29085E03 1.54100E04 5.18146E04 3.72064E04 3.29906E03 1.89315E04 1.87588E04 1.37684E04 1.10604E04 6.36132E03 1.73552E04 3.24878E04 1.24255E04 5.68573E03 5.52465E03 2.82892E04 1.73017E05 7.89368E04 8.19395E04 1.68141E05 1.95684E05 1.30159E05 1.19777E05 6.45802E04 8.82363E03 6.42292E04 1.27517E05 2.15966E05 1.10179E05 4.47783E04 2.40719E05 3.01744E05 1.29803E05 2.96633E05 7.04095E05 3.70016E05 8.43337E04 1.50443E05 2.33523E05 1.39225E05 6.85348E04 9.37977E04 6.34542E05 5.28064E05 1.56878E04 9.60027E04 1.08781E05 1.41432E03 6.53115E04 4.77728E03 1.10674E05 2.52608E04 1.13239E05 2.88376E05 4.02183E05 1.53592E05 5.16199E04 1.91074E05 3.75632E05 3.93234E05 8.66414E04 3.23724E04 2.92207E05 7.69160E05 9.27825E05 7.39404E04 2.31661E05 2.66354E05 5.78942E05 8.42839E05 3.80314E05 5.02067E05 6.47774E05 2.69308E05 2.95718E04 6.52110E04 8.89233E05 1.09222E06 8.76548E05 1.09314E06 2.58781E05 2.76753E04 5.71785E05 1.12655E06 6.96842E05 1.17524E06 1.55103E06 6.44432E05 2.00155E05 1.42099E06 4.76163E04 6.82394E05 6.01176E05 3.62219E05 5.02311E04 2.75667E06 2.11230E06 2.90336E05 3.67436E06 6.65457E06 5.25671E06 2.59062E06 6.48099E05 2.15020E06 5.25454E05 2.59790E05 1.58962E06 4.02599E06 1.40701E07 1.92103E07 1.07786E07 2.88879E06 1.26025E06 3.67219E06 9.13226E06 6.25576E06 2.12499E06 1.72623E07 1.85732E07 6.11497E06 1.80685E07 9.12992E06 9.96746E06 3.03965E07 1.49221E07 7.28999E06 2.51405E07 3.73984E07 2.63269E07 2.64586E07 6.15394E07 9.52871E07 6.75850E07 7.88248E07 8.80083E07 6.63963E07 3.88842E07 3.72019E07 8.60568E07 1.01935E08 3.79262E07 3.20076E07 6.42048E07 4.92935E07 6.24431E06 1.07896E07 4.40563E07 7.24563E07 3.51682E07 3.68917E06 7.56082E06 6.31806E06 6.19385E06 3.29478E07 9.35915E07 1.27435E08 1.58973E08 1.49770E08 7.71735E07 3.62953E07 4.70971E07 5.46957E07 1.36639E08 1.98242E08 7.80807E07 4.15653E07 9.81862E07 6.73134E06 5.31167E07 4.49114E07 4.00731E07 2.89641E07 2.08178E06 9.51744E07 3.02806E08 1.92879E08 6.99786E07 4.81136E07 6.28276E07 1.00642E08 2.47726E07 7.11067E07 1.81697E08 9.48484E07 7.53287E07 3.90814E07 1.52973E07 1.45039E07 8.01990E06 2.88517E05 9.50409E06 3.46495E07 8.10954E07 1.12712E08 1.56220E08 7.19835E07 3.31164E07 8.47634E07 1.15052E08 8.28681E07 2.52292E07 5.49884E07 3.97821E07 1.74540E08 1.42177E08 4.24752E07 1.09482E08 1.66013E08 1.12161E08 1.34938E08 1.40725E08 9.27644E07 1.53771E08 3.37244E08 2.74667E08 1.83493E08 7.05841E07 4.60239E07 1.28960E07 3.16369E06 2.98846E06 -Frame 257 1.07943E05 5.94700E04 1.47391E04 7.53145E03 2.33902E03 3.01135E03 2.35778E01 2.14467E02 8.24880E02 3.42357E02 1.07118E03 5.91141E01 9.59081E01 1.00258E03 1.79594E03 2.63578E03 4.02177E02 2.12147E03 6.49156E03 7.07188E03 2.54587E03 1.75999E03 1.35614E03 1.79522E02 9.89897E03 1.22418E04 9.72906E03 9.73662E03 3.68491E03 4.99315E03 1.22270E04 5.12381E03 5.99317E03 1.28264E04 1.63563E04 7.30150E03 1.58316E03 5.12231E02 6.13085E03 3.05301E03 2.78134E04 3.12047E03 1.28553E04 5.13857E04 4.57887E04 2.21279E04 8.06951E03 2.30205E04 3.17183E04 9.92601E03 4.51777E02 4.99818E04 1.82646E05 1.67010E05 1.05202E05 1.68469E05 1.16272E05 1.51656E05 9.35609E04 1.51762E05 2.03103E05 1.05487E05 1.18706E05 3.09876E05 3.68232E05 2.40228E05 2.83728E04 3.61612E05 3.28343E05 6.13325E04 6.67207E05 3.86855E05 3.84307E03 1.21448E05 1.21642E05 1.04225E05 4.45402E04 1.69351E05 7.16649E05 3.54335E05 5.46985E04 1.90687E04 5.43616E04 6.83788E04 2.09030E05 2.31267E05 5.44855E03 6.26477E05 1.06622E06 1.50148E06 9.02899E05 1.22196E05 6.34085E04 1.20202E05 8.45697E04 1.34977E05 2.90956E05 4.77355E04 2.99332E04 2.67809E05 7.24447E05 4.14129E05 1.46263E05 8.68158E04 6.22187E04 6.03723E04 6.06770E05 9.99693E05 8.15561E05 1.80932E05 4.77064E05 1.30420E06 1.59949E06 7.33838E05 1.29165E05 6.14313E05 6.66892E05 2.28798E05 1.76004E05 3.57109E05 1.76402E05 3.05374E05 3.04467E05 1.12147E05 1.49514E06 3.88902E06 4.51377E06 2.09794E06 2.90406E05 9.57545E04 8.32826E05 1.28232E06 2.31753E05 9.55620E05 3.40795E06 2.04163E05 9.15991E05 1.41841E06 3.45700E06 3.88074E06 2.18358E06 9.50003E05 3.70875E06 4.50996E06 3.07355E06 1.97982E05 6.61864E06 4.33479E06 2.12644E06 4.99866E05 2.53365E06 4.54564E06 6.56558E06 4.53171E06 3.32426E06 8.22658E06 6.69696E05 9.40503E06 3.37174E07 4.99182E07 2.87040E07 1.25496E07 9.19935E06 1.00974E05 1.72732E06 1.18491E07 4.20042E07 1.56181E07 1.84617E06 9.33980E06 2.47794E05 3.13452E06 9.94200E05 1.14993E07 2.19216E07 3.57503E06 2.95348E06 1.04840E07 9.51616E07 1.41004E08 7.26776E07 3.35969E07 9.33402E07 1.37875E08 3.54610E07 7.53455E06 9.87843E06 8.42754E06 3.61122E06 2.13813E06 1.83670E07 3.09895E07 4.13086E07 3.49420E07 7.61680E06 2.14035E07 2.05660E07 4.21020E06 7.00266E06 2.54678E07 4.69366E06 7.32964E06 6.74899E07 5.36487E07 2.99331E07 5.65063E07 5.86833E07 4.31605E07 3.55752E07 2.73870E07 1.62589E08 1.77463E08 5.26578E07 7.67835E07 9.19894E06 7.81910E07 8.83543E07 4.58797E06 1.08240E08 1.28755E08 1.05590E08 7.05745E07 5.04804E07 6.17125E07 6.90338E07 8.55854E07 5.16493E07 3.03703E07 1.59367E06 1.02200E06 3.22548E07 6.31983E07 4.11959E07 7.77469E07 2.62791E08 3.65341E08 2.38363E08 1.35663E08 7.66573E07 1.63845E08 1.67280E08 4.62087E07 9.71760E06 1.21771E08 2.76555E07 6.04143E07 6.62235E07 9.82741E07 3.32863E07 2.90899E08 1.48723E08 2.93252E06 2.61023E07 2.38564E07 7.86730E06 5.54029E07 7.52320E07 -Frame 257 6.79942E05 2.23806E05 7.30169E04 1.39410E04 8.69415E03 2.27664E01 1.66112E03 6.97167E02 2.22430E03 3.93658E02 3.70004E01 4.92795E02 1.79467E03 3.94032E02 1.58740E03 2.64323E02 6.90680E03 1.95966E03 8.56565E02 6.81818E02 1.95414E03 8.83934E02 1.18866E04 1.30345E04 2.67382E04 1.10826E04 6.15404E03 3.09945E03 2.67230E04 3.05637E04 1.87473E04 1.86985E03 1.10147E04 7.80578E03 4.59722E03 1.59827E04 6.15358E03 1.45534E04 2.56122E03 2.05907E04 6.45727E04 4.22209E04 2.45446E04 1.27462E04 2.31867E04 3.20951E04 3.20495E04 1.49979E04 5.49178E03 1.99457E04 1.20662E04 1.49672E04 1.72139E05 3.13673E05 7.84153E04 5.55895E04 3.89901E05 4.19157E05 1.21524E05 7.75480E03 8.36475E04 2.26067E05 2.26754E04 7.46372E04 8.81988E04 2.86942E05 7.69289E05 6.08341E05 3.46151E05 1.29305E05 1.70536E05 1.19371E05 1.11431E05 1.06583E05 1.47017E05 4.20437E05 1.57416E05 2.57068E05 5.21835E05 2.90653E04 8.76147E04 1.27783E05 1.43215E05 4.34683E04 1.13266E05 8.24673E05 1.21535E06 5.67344E05 8.46266E05 1.64186E06 1.01896E06 3.32478E04 1.66057E05 1.30360E05 3.37790E05 6.57961E05 3.86883E05 1.67993E05 2.64767E05 4.04896E04 8.61470E04 3.30473E04 3.51284E03 1.04622E04 6.23277E04 3.05805E04 7.69728E04 4.24559E04 3.35399E05 1.98113E05 3.65852E04 8.14319E05 5.41594E05 2.74288E05 2.91039E05 9.43486E04 2.31295E05 2.20662E04 2.00430E05 4.39561E05 2.73729E05 2.60865E05 4.39278E04 1.20002E05 8.34043E05 8.92413E05 1.17687E05 1.11372E06 7.66774E05 4.82459E05 5.06435E05 1.29508E05 1.02126E06 7.88429E04 2.39902E06 7.22364E06 7.36487E06 2.98959E06 2.57104E05 1.01761E05 7.87380E05 7.21800E05 7.80819E05 2.02114E06 1.49187E06 1.16855E06 6.57695E06 6.09230E06 3.63717E06 6.71240E06 3.19110E06 1.26466E06 2.05956E06 4.99781E06 5.11702E06 5.02134E05 6.65822E06 7.64956E06 1.64683E06 7.49749E06 4.11139E06 4.11733E06 1.01274E07 1.60553E07 1.02209E07 5.01563E06 2.88723E07 5.62456E07 3.14368E07 1.22677E07 2.96939E06 5.94398E06 4.49302E06 8.90846E06 1.76714E07 3.42434E06 7.85016E06 2.99958E07 4.32249E06 7.94845E07 5.07803E07 9.39559E06 5.45769E07 1.35303E08 6.46373E07 8.99046E06 1.47493E07 4.20490E06 1.45843E06 2.14132E06 1.37446E07 4.60787E07 5.26560E07 1.30677E07 2.30180E07 1.64726E07 2.09244E07 1.30366E07 1.63497E07 8.69927E06 1.50377E06 4.41187E06 2.23980E07 3.07503E07 1.92626E07 4.19254E06 5.29564E07 4.90274E07 3.37384E06 8.78286E07 2.18173E08 7.20931E07 7.65733E07 1.21717E08 4.51594E07 2.06105E08 8.60339E07 7.30987E07 2.68342E08 3.74664E07 3.96525E07 6.49650E07 5.40534E07 1.58686E08 8.24676E07 4.58644E07 1.84282E08 1.56678E08 4.45334E07 3.08299E06 8.42128E06 1.29665E08 8.79785E07 4.37628E07 1.87720E08 4.06208E07 2.77296E08 1.99647E08 4.07724E07 4.29368E07 1.94536E08 3.32905E08 3.18027E08 1.23637E08 1.40019E08 3.75093E08 2.41324E08 1.32625E08 2.09662E08 1.39482E08 6.45747E06 6.25232E07 2.74769E08 4.74577E08 4.76870E08 4.55565E08 4.41305E08 -Frame 257 2.47057E06 1.42168E06 2.24165E05 2.25942E04 5.48906E03 8.42182E02 9.78701E02 2.03111E03 4.87501E03 6.69886E02 5.41243E02 5.16114E02 4.60036E03 2.64787E03 2.24803E03 5.19726E03 1.85677E03 5.83222E03 3.25353E03 1.49557E03 1.01979E03 8.54482E03 5.03394E03 1.10767E04 9.28853E03 3.08107E03 1.38220E03 1.11620E04 2.59137E03 3.37594E04 3.00725E04 1.48723E04 1.71165E04 5.68762E04 1.60532E04 5.83376E03 3.76985E02 2.04891E04 6.17366E03 1.81772E04 1.53728E04 3.38956E04 1.81952E04 8.17746E03 1.05140E04 6.92232E03 5.02533E04 9.95913E03 1.33576E04 3.24595E04 2.18645E04 1.29187E04 4.34064E04 9.79950E04 1.33625E05 7.46271E04 2.79559E05 2.50167E05 9.49136E04 5.36741E04 1.04499E05 8.17040E04 1.19025E05 9.98806E04 3.43910E05 5.07720E05 6.26088E05 2.50604E05 2.21941E05 4.51989E05 3.97282E05 2.54196E05 1.43269E05 1.75415E05 2.87068E05 1.74888E05 8.34949E04 2.92069E05 8.53671E05 7.77866E05 6.34726E05 1.53868E05 8.98712E04 2.97034E05 3.96990E05 6.58265E05 6.14778E05 4.53117E05 2.89781E05 2.67243E04 1.29004E05 2.47334E05 2.69146E05 1.63364E05 3.93161E04 7.79633E04 8.74172E04 2.21714E03 2.69976E04 5.15900E05 6.05484E05 3.43619E05 1.20217E05 1.99279E05 1.88023E05 3.13995E05 1.35194E05 5.83550E04 3.51588E05 6.10568E04 2.92909E05 5.77104E05 4.46045E05 5.79524E05 2.91874E05 1.34309E05 5.77610E04 2.38592E05 2.28729E05 4.71250E05 3.36670E05 2.55480E05 5.22854E05 6.45465E04 8.83216E04 1.07256E05 2.11753E05 2.69121E05 1.95762E05 9.16167E04 2.04674E05 1.43102E06 2.45935E06 2.02145E06 1.77483E06 1.28849E06 5.57422E05 1.05985E06 1.29076E05 7.72964E05 1.72898E06 1.84424E06 3.11711E06 6.63428E06 5.31243E06 2.91490E05 6.29931E06 2.12990E07 9.28576E06 1.26178E06 1.11541E06 3.77129E05 7.47010E05 1.58149E05 2.43628E06 1.78134E07 1.27050E07 3.85668E06 3.20857E07 1.87630E07 1.49651E07 6.20704E06 1.23168E07 6.30810E06 2.99459E07 1.47013E07 3.08529E07 1.08550E08 7.81701E07 4.51276E06 3.26974E06 8.92905E06 9.22261E06 3.33331E06 8.46508E06 1.90399E07 1.29205E07 5.27959E07 6.01051E07 2.25188E07 2.59225E07 4.54805E07 1.31230E08 6.69860E07 1.82644E07 3.34645E07 2.21074E07 4.07056E07 1.28425E07 3.82498E06 3.57420E07 8.34761E07 7.08764E07 5.09425E07 4.49736E07 2.73188E07 3.79283E07 4.77620E07 5.66340E06 1.26083E06 2.01112E07 4.49403E07 4.35377E07 8.89527E07 1.55451E08 6.56270E07 6.01711E07 1.21250E08 1.23113E07 1.24960E08 1.82610E08 5.31248E07 9.92517E07 2.68956E07 8.71286E07 3.23327E08 6.37495E08 8.66686E08 7.70001E08 3.13783E08 1.13324E07 1.94498E06 1.14194E08 2.53644E08 5.99547E07 4.58778E07 3.74983E07 1.08646E08 2.48156E08 1.04016E08 8.52366E07 2.27001E08 3.28129E08 8.41600E07 4.94358E07 3.13043E08 6.39602E08 3.19002E08 9.93377E06 1.19677E08 7.28626E07 2.01178E08 1.59935E08 1.22198E08 2.59734E08 1.61378E08 2.14341E07 2.34768E07 8.20110E07 8.54038E07 3.37249E06 5.56413E06 1.67868E08 2.34584E08 1.75606E07 3.40185E07 1.24914E07 -Frame 257 3.41556E05 4.00645E05 1.45143E04 5.00445E03 5.38791E02 7.78116E02 2.79348E03 3.32780E02 2.99550E03 1.17823E03 9.71909E02 1.18796E03 9.54277E02 6.81736E02 1.02175E03 1.93076E03 9.81816E03 3.75708E03 3.35714E03 7.46809E03 4.16262E03 2.47746E03 7.28595E03 1.64411E04 3.85198E04 1.49448E04 3.91349E03 2.30320E03 2.90936E03 1.89454E03 5.94526E03 1.22897E04 1.13218E04 4.80489E04 3.59052E04 2.05478E03 1.84974E03 1.38617E03 8.72000E03 5.43044E03 8.03755E03 1.85884E04 8.74594E04 5.34823E04 1.41352E04 1.09540E04 4.60670E04 3.96924E04 9.05220E03 2.46167E04 1.71727E04 3.52222E04 3.71579E04 8.29356E04 3.02870E05 2.95451E05 1.15399E05 1.47624E05 1.94952E05 1.34786E05 9.16309E04 1.82394E05 3.68317E05 4.56218E05 1.04400E05 7.66793E04 2.45019E05 7.55047E04 2.95057E05 4.41289E05 2.12364E05 1.86959E05 4.05689E04 2.85297E05 5.21112E04 2.47573E04 1.52471E05 1.66010E05 6.52138E04 9.72419E04 4.55533E05 2.44156E05 9.72635E04 4.32530E05 1.84804E05 2.47977E05 4.16778E05 5.29616E05 1.88109E04 2.53763E05 1.51350E05 3.12176E04 7.48415E04 1.93008E04 1.53767E05 3.97233E05 2.44217E05 2.07182E04 1.06107E04 3.37396E05 1.47388E06 6.88530E05 1.52796E05 4.78112E05 1.67673E05 1.26671E05 6.52664E05 7.53388E05 5.21511E05 1.58197E05 1.30483E05 3.11142E05 1.47995E05 1.08592E05 5.55838E04 4.12969E04 4.67179E04 2.74446E05 7.62806E05 1.58287E06 3.45973E06 1.98235E06 2.51653E05 7.04085E05 1.47101E06 7.49388E05 6.98138E05 1.57495E06 2.00084E06 4.23447E05 9.20194E04 4.84080E05 8.40136E05 1.06362E06 2.41077E06 3.74263E06 6.49637E06 6.38867E06 1.71564E06 2.64884E06 1.13242E06 7.16418E05 1.35320E06 2.29315E05 7.73995E06 2.18451E07 3.38736E07 1.90317E07 2.91591E06 5.70998E05 6.72424E05 3.48967E06 1.75797E06 5.17327E05 5.06918E05 7.28711E06 6.07644E07 1.27098E08 1.40045E08 4.17646E07 5.13866E06 5.78277E07 9.91500E07 8.53961E07 9.54139E07 5.66701E07 1.89436E07 6.87176E07 1.12131E08 3.50806E07 7.31913E06 3.33542E07 8.63581E06 5.73824E07 1.10343E08 5.20030E07 1.17765E07 8.30253E06 1.93999E07 6.72954E06 1.81530E05 8.65595E06 5.05558E07 7.48275E07 8.57171E07 9.12991E07 7.80218E07 2.34877E07 7.55129E07 1.35869E08 3.58945E07 1.74827E05 4.34588E06 5.87817E06 3.39984E07 2.03339E07 4.06233E07 1.59422E08 1.66827E08 1.37044E08 1.97523E08 3.03561E08 2.31619E08 1.89346E07 1.72836E08 2.23644E08 3.50047E08 2.46776E08 1.76500E08 2.74555E08 2.69193E08 8.71627E07 2.43962E05 7.68631E07 1.91244E08 8.17325E07 3.95633E08 3.93100E08 1.09303E08 6.18568E08 4.02470E08 1.08324E08 3.14731E07 2.04035E08 3.01414E08 2.04730E08 1.62426E08 2.62486E08 3.22685E08 1.83234E08 8.00888E07 2.02830E07 1.98521E08 2.24364E08 4.03168E07 1.27169E07 7.01300E07 2.90077E08 8.51603E07 1.88142E07 2.43761E08 3.16604E08 2.59224E08 3.36961E08 1.78906E08 4.59755E05 3.53053E07 5.01018E07 6.01847E07 2.03480E08 1.45391E08 1.79868E08 5.90290E08 7.36239E08 2.75812E08 2.60052E08 4.14707E08 -Frame 257 1.13502E06 7.32012E05 1.57854E05 7.69209E03 4.92077E03 1.59336E03 1.79653E03 2.17959E03 7.79004E03 1.32083E02 2.22344E03 8.24446E02 1.39406E03 1.52666E02 2.73105E03 2.70059E03 9.37861E03 2.86401E04 1.27623E04 2.88701E01 1.64130E04 1.56564E04 5.56961E02 1.24099E04 1.76115E04 1.38423E04 1.85559E04 9.05699E03 3.04517E03 2.28967E03 1.13698E02 2.90420E04 1.28078E04 8.36943E03 2.49531E04 2.55233E04 8.16316E03 1.56339E04 1.75650E04 1.17191E04 9.78594E03 2.91245E03 9.07164E03 1.34045E03 4.12695E04 6.59243E03 4.44554E04 1.64855E04 1.38071E03 3.16726E04 1.13492E04 4.50186E03 3.63500E04 1.34293E04 1.17141E05 2.09084E03 2.65765E04 1.45778E04 1.08402E05 6.87097E04 6.99225E04 4.04682E03 8.20921E04 2.04434E04 1.92260E05 3.59811E04 7.36576E04 8.23388E04 6.60515E04 1.52750E05 1.78883E05 2.67644E05 1.96426E05 1.55412E05 1.08446E05 5.60540E04 3.70483E05 5.97485E05 6.38191E05 5.02650E05 1.73232E05 5.24181E04 1.18886E05 5.78089E05 7.22011E05 1.78352E05 2.73479E06 3.47586E06 2.40429E06 2.04369E06 9.52886E05 3.71444E05 2.41184E05 1.19201E05 2.35922E05 1.06591E06 4.67353E05 2.30076E05 2.46810E05 1.76321E05 2.65442E05 1.53051E06 5.15028E05 1.05078E04 1.69875E05 1.01442E06 4.07699E05 1.04623E05 1.72073E05 6.91635E04 1.31272E05 2.00878E05 1.09518E06 1.05674E06 1.12621E06 1.48166E06 1.95747E05 2.55528E05 5.19796E05 1.67899E05 6.37052E05 3.02297E06 1.77099E06 1.79148E05 9.51399E05 1.61089E05 2.01918E06 1.75296E07 3.64031E07 1.93116E07 4.84957E06 5.48760E05 6.99199E05 1.03653E07 1.22861E07 1.09290E07 3.55423E07 3.46396E07 1.14709E07 4.23188E06 4.34631E06 4.86696E06 1.47775E06 1.90757E06 9.53230E06 2.20960E06 2.64124E07 2.89273E07 1.18788E07 6.29606E06 7.64452E05 1.05521E07 1.46685E07 1.19182E07 2.02390E07 3.14590E07 2.54767E07 7.78373E06 6.59750E07 3.27050E07 5.54151E05 1.12963E07 5.35043E07 3.92045E07 3.98797E07 5.56342E06 4.66343E05 2.93271E06 1.90685E07 4.24052E07 2.40250E07 6.06190E07 1.10365E08 8.52976E07 6.13208E07 3.60374E07 8.89028E06 7.91021E06 3.89120E07 1.18892E08 1.01706E08 2.99679E07 3.23165E07 2.70743E07 2.05882E07 1.28674E07 3.46383E07 5.73414E07 8.78566E07 1.46676E08 1.38684E08 8.90355E07 1.28640E08 1.55562E08 9.14816E07 5.73069E07 8.78134E07 9.18792E07 1.53590E08 1.77600E07 3.04272E07 2.45912E07 3.40319E08 4.04930E08 1.25666E08 2.90868E07 2.97522E07 2.81362E07 8.36510E06 3.02426E07 9.46448E07 6.12324E07 4.13575E07 9.59259E07 1.39371E08 7.64093E07 4.14356E08 4.70713E08 6.74632E07 1.30990E08 1.85414E08 3.60546E07 2.82539E06 4.39425E07 9.12478E07 4.72817E07 1.66114E07 8.73154E06 1.34287E06 6.68637E07 2.17058E08 1.61904E08 2.79771E07 3.42638E07 7.17403E06 1.52932E07 4.56723E07 1.73473E08 2.51695E08 6.51712E07 1.79445E08 2.82100E08 3.22615E08 6.47848E08 3.92720E08 5.39012E07 5.42183E07 1.76269E08 3.00857E08 1.62391E08 9.30154E06 2.91317E07 3.62055E08 6.52140E08 2.89395E08 1.52563E08 1.32686E08 -Frame 257 2.76777E06 1.30378E06 2.13672E05 5.01966E04 2.18387E04 2.00357E03 8.27361E03 7.10078E03 4.58560E03 1.12817E03 1.12547E03 6.36432E03 2.25212E03 9.21045E03 1.50348E04 1.57640E04 5.73392E03 1.54579E04 6.21886E03 5.43726E03 2.11642E04 2.12924E04 1.43155E04 1.52525E03 3.01018E04 1.94797E04 1.18264E04 8.34282E03 3.26050E02 4.99943E02 7.50210E03 4.55005E04 6.78797E04 3.57647E04 9.31207E03 1.73649E04 9.59463E03 2.23130E04 4.67364E04 1.56425E04 2.26893E04 1.52039E04 1.84100E04 3.28602E04 3.31740E04 2.32496E04 2.09682E04 4.25167E04 6.42647E04 1.08258E04 2.73061E04 3.49947E04 8.10868E04 2.33964E05 4.21010E05 5.92923E05 5.42438E05 3.25373E05 1.32008E05 1.75069E05 2.66124E05 8.36299E04 3.16327E04 1.75794E05 3.66717E05 6.05531E05 2.56639E05 5.28602E04 1.11596E05 2.29514E05 8.41884E03 5.45285E04 2.77355E04 1.23496E04 1.51587E04 4.00832E04 1.44823E05 3.84203E05 4.82250E05 2.66847E05 2.61534E05 2.31506E05 1.54813E04 8.03274E04 1.58689E06 3.19678E06 4.56302E06 9.89053E05 9.10763E04 5.90451E05 6.43037E05 9.60970E03 2.63936E05 9.12453E05 1.07789E06 8.58386E05 3.12026E05 1.51914E05 8.89628E04 6.73359E05 5.03678E05 2.39101E05 5.35331E05 7.08735E05 1.02983E06 9.73225E05 4.43206E05 2.66956E05 6.96080E05 4.37105E05 7.89420E05 8.17867E05 1.74818E05 1.24686E06 2.63743E06 2.34593E06 3.59881E06 2.11508E06 7.82867E05 1.07637E06 1.18251E06 3.64687E05 2.78850E06 2.61596E06 3.58120E05 4.27494E06 1.76573E07 4.99598E07 7.93118E07 6.17512E07 1.69529E07 3.54679E06 1.92454E07 7.45682E07 1.23096E08 4.78698E07 5.56694E07 1.01963E08 2.45376E07 3.58398E06 4.24573E05 3.36147E06 2.19525E06 5.49690E06 2.27107E07 1.16146E07 2.63478E06 1.74069E07 5.98010E06 1.16858E07 1.93439E07 5.14462E06 9.35563E06 1.07942E07 4.63224E07 1.78670E07 3.01520E07 4.63015E06 2.33441E07 2.92732E05 2.83432E06 1.39803E06 3.42061E07 1.01984E08 8.60939E07 5.61892E07 4.33196E07 4.08883E07 3.94789E07 1.51570E07 1.19672E06 2.03633E07 4.73637E07 1.08583E07 1.56063E06 1.30094E06 4.59914E06 4.46546E06 8.95357E07 1.32688E08 1.73240E08 1.88918E08 3.95783E07 3.51845E06 2.14327E07 1.04422E07 1.77902E06 2.21913E07 2.45606E07 5.45180E07 6.72469E06 5.80926E07 2.35046E07 4.05806E07 5.21923E07 8.79737E06 2.73790E07 3.41493E07 6.59832E07 1.14067E08 7.43666E07 1.13529E08 1.85187E08 8.60802E07 1.09890E08 4.91350E07 2.43704E07 1.32095E07 5.37129E06 1.08421E07 5.15333E07 4.33144E07 2.59022E07 4.62682E07 7.04755E07 3.96064E07 3.42047E07 8.01112E07 4.68117E07 1.25868E07 2.28875E07 1.05740E07 7.36487E05 4.26868E06 7.44246E05 6.78082E05 5.02506E06 3.87729E06 2.26119E06 2.31294E06 2.97903E07 3.76169E07 6.78709E06 1.13201E07 1.85677E07 1.08358E07 3.00986E06 4.57401E07 1.71291E08 1.25696E08 1.08945E07 9.10262E07 9.05198E07 1.01745E08 6.09508E07 6.20508E07 1.65549E07 1.51417E06 1.53910E07 7.31616E07 6.70807E07 4.11252E07 8.06724E07 6.75738E07 3.48166E07 1.03387E07 1.50508E06 -Frame 257 1.66402E06 4.48526E05 6.86134E04 1.15364E02 1.26261E05 1.50859E05 3.27795E03 1.37121E04 3.09642E04 9.73777E01 3.87517E04 4.09217E04 3.26867E04 1.87082E05 3.77000E04 3.12583E04 5.39878E04 6.96646E04 2.79850E04 5.42914E03 2.41775E04 1.45741E04 9.81954E04 1.53260E05 1.95524E05 1.08431E05 9.39215E04 2.42650E04 2.76654E03 3.18406E03 1.35549E04 8.53462E04 3.12080E04 2.50431E04 7.64818E04 9.49657E04 3.82891E04 3.42644E04 5.93816E04 8.44094E04 5.91937E04 1.42523E04 3.66071E04 3.39700E04 1.41691E04 3.29125E03 7.27735E02 1.99037E04 7.06937E04 8.34416E04 8.45687E04 2.40054E04 6.34958E04 1.38751E04 4.13910E03 2.59769E05 7.21300E05 4.75953E04 8.38160E03 7.20482E05 6.97985E05 6.73794E05 1.46327E06 1.68028E06 1.56374E06 2.24418E06 1.47432E06 6.15349E05 4.21610E05 7.07237E05 6.32082E05 2.41045E05 8.36160E04 1.72064E04 2.98879E04 6.54520E03 7.75511E04 3.15436E05 1.86843E05 1.40010E05 4.12805E05 3.82145E05 4.72995E05 3.20665E06 8.99851E06 9.36333E06 1.77069E07 3.25520E07 2.42807E07 1.27759E07 6.68109E06 4.74234E06 1.69885E06 1.84513E05 2.67110E05 2.71683E04 2.61855E05 7.83643E05 3.09728E05 3.79010E05 4.61507E05 3.79889E04 1.08169E05 4.16501E05 4.77052E05 2.33096E05 2.20474E05 6.06683E05 1.62449E06 1.58666E06 2.37934E06 1.13768E06 4.63905E05 1.47637E06 1.47880E06 1.22536E06 2.80893E06 4.98491E05 8.06499E05 1.11494E05 1.05485E06 4.22682E06 1.63650E06 2.99410E06 6.52866E06 5.01328E06 1.33721E07 5.64659E06 1.98902E07 5.91719E06 4.53068E07 9.62424E07 3.63628E07 1.68540E07 9.92407E07 3.15049E07 1.37126E08 8.15451E07 9.40470E06 6.41593E06 1.69674E04 3.20882E06 9.03106E06 1.34592E07 2.14394E07 2.00336E07 3.62852E06 8.35066E06 3.32234E07 5.89646E07 4.81639E07 3.84830E07 8.33945E07 1.85669E08 2.14398E08 1.51638E08 1.86434E08 2.19760E08 2.08470E08 1.81919E08 1.50799E08 1.28995E08 1.09475E08 2.62585E07 2.89718E07 3.13032E07 3.70743E06 5.11584E07 2.09999E07 9.21555E06 3.87379E07 3.22521E07 2.15955E06 4.58924E07 6.31995E07 4.76987E07 5.76757E07 9.09519E07 4.25340E07 2.88660E06 1.02151E07 6.82894E07 4.68238E07 6.68207E05 7.73360E06 6.66170E06 6.58041E06 5.26741E06 2.54362E07 5.69489E07 7.60914E07 7.86213E07 5.39665E07 2.01287E07 1.45336E07 4.60886E06 7.01207E06 1.26211E07 9.06330E06 2.40140E07 1.80049E07 1.93977E07 3.41217E07 4.21330E07 2.98415E07 2.64234E06 6.61247E06 2.28875E06 7.43880E06 3.99318E07 7.61953E07 5.46599E07 1.76595E07 9.59498E06 2.02115E06 1.38350E07 9.38103E06 4.42138E06 9.61442E05 1.00183E07 2.65945E06 3.13063E06 6.01163E06 2.19977E06 1.11887E05 5.29588E05 3.73170E06 8.12268E06 7.24122E06 1.85622E06 1.30958E06 1.00670E07 1.34865E07 1.01511E07 7.48709E06 2.32579E06 1.76350E06 8.74450E06 1.31799E07 1.29601E07 3.10498E07 1.98198E07 8.18372E06 5.37710E06 5.92633E06 1.84393E06 2.88634E05 4.18581E05 1.56884E06 8.61305E06 1.03628E07 5.96786E06 1.44618E06 2.10544E05 1.29938E06 4.80442E06 8.63827E06 -Frame 257 1.42549E06 5.62585E05 1.08376E04 4.63993E05 1.87721E06 2.41059E06 1.13379E06 2.08017E05 8.59477E05 2.32754E06 3.30846E06 1.99560E06 4.83667E05 1.80568E06 4.75614E06 2.97179E06 1.02035E06 2.18839E05 1.98295E05 1.97549E05 3.87030E04 5.99638E04 4.19377E04 5.78622E05 4.74829E05 5.77113E05 5.69364E05 1.10863E05 7.03590E04 5.40990E04 2.05923E03 6.26738E04 1.05899E04 5.43601E04 1.12897E05 2.94756E04 1.85994E04 4.31583E04 7.55728E04 1.65560E04 2.14440E04 2.07302E04 4.10835E04 1.99843E05 1.60304E05 8.54262E04 1.27443E05 5.41214E04 9.57817E04 7.26974E04 2.18925E05 3.21665E05 5.75723E05 3.74186E05 2.69340E04 2.37112E06 5.40776E06 1.38209E06 3.54509E05 3.99277E06 2.87382E06 5.77537E05 2.05658E06 2.67114E05 1.50431E06 9.02482E04 1.28057E06 6.08439E05 8.74264E04 2.69119E05 1.14460E06 5.26412E05 6.18020E05 8.69654E05 6.87432E05 2.98788E05 2.56069E05 7.01288E05 2.11355E05 3.11445E05 8.30850E05 5.56837E05 3.07071E05 5.87533E06 7.95872E06 1.39541E06 1.63298E07 2.32095E07 1.78694E07 2.65767E06 9.76726E05 6.84112E06 4.09190E06 4.37255E05 1.33080E06 1.42376E06 1.21672E06 2.82591E05 2.96321E05 4.28303E05 3.80722E05 3.79087E05 7.34503E05 2.20999E05 1.49708E05 4.42041E05 4.64419E05 1.31338E04 2.21891E05 1.22604E06 2.58107E06 1.90022E05 2.52957E06 1.26553E06 7.27113E04 2.38427E05 2.81357E06 3.49170E06 2.95361E06 9.46408E05 1.36024E04 9.13718E05 1.07626E07 1.35952E07 5.93997E06 1.62733E07 4.52722E07 3.99516E07 4.26337E06 1.76524E07 4.39111E07 1.52554E07 1.66429E07 7.09566E07 9.95580E07 1.05626E08 9.57983E07 5.33951E07 2.01493E07 8.76279E06 1.82116E06 1.15205E06 3.94355E06 1.27156E06 2.55540E06 5.46069E06 5.45643E06 3.07070E06 2.72698E06 2.45770E07 1.38589E07 4.35128E06 1.42236E07 4.22306E07 4.89680E07 2.25064E07 4.78860E07 5.45538E07 6.35275E06 3.18240E07 8.40959E07 6.47598E07 3.67186E07 9.71449E06 3.61892E06 6.26474E06 2.12575E07 2.29640E07 9.60912E06 1.82340E06 5.32695E06 1.28311E07 1.15264E07 1.50915E07 1.59867E07 9.37431E06 2.16029E07 1.59496E07 5.19900E06 3.57191E06 1.13962E07 2.24263E07 1.60622E07 1.34052E07 6.17699E06 2.08797E06 1.33106E06 8.58455E05 7.33017E05 8.75617E05 1.01777E06 1.24269E06 2.75832E06 5.10745E06 3.35944E06 3.77206E06 5.80814E06 5.83948E06 4.94615E06 5.90581E05 4.20526E05 1.59681E05 5.59387E05 2.20206E06 5.39603E06 8.63430E06 3.31604E06 1.84534E06 4.25706E05 1.68919E06 1.91381E06 6.23168E06 6.29069E06 6.08696E06 7.84904E06 6.52700E06 3.26482E06 5.21576E06 1.28814E07 1.75858E07 1.38360E07 8.18898E06 2.04346E06 9.04795E05 2.20409E06 1.26701E06 3.04839E04 5.72096E05 1.30958E06 9.42454E05 3.92095E05 2.73599E05 1.44509E06 5.70576E05 1.55677E05 1.33583E06 3.25127E06 3.63461E06 2.70174E06 2.70508E06 2.53661E06 1.62002E06 5.48972E05 1.02496E05 1.39663E06 1.23190E06 4.92240E05 6.51084E05 1.07662E06 1.92087E06 9.63726E05 4.02085E05 1.22341E06 9.16158E05 8.87846E04 4.45274E05 5.41048E05 -Frame 257 2.36945E05 2.23352E05 6.92250E04 1.05057E06 4.11009E06 1.70387E06 2.12957E05 6.11160E06 1.46925E07 7.93683E06 8.42078E05 1.27552E07 2.01174E07 1.95338E07 6.49785E06 1.46002E07 1.94340E07 6.30816E06 2.72023E05 1.13896E06 1.76973E06 9.66268E05 2.25328E05 2.51075E06 4.02171E06 6.41341E05 4.68746E05 1.97786E06 1.68025E06 3.80467E05 9.58465E03 2.20308E05 3.60467E05 8.90776E04 7.36866E04 3.49314E05 3.91975E05 1.36609E05 2.41936E04 1.79652E05 1.00552E05 4.00697E04 3.35504E05 1.12057E06 9.12664E05 5.45071E04 6.23344E05 1.54872E06 1.11340E06 1.56840E05 8.46446E05 5.07412E06 4.99968E06 4.26803E05 2.20182E06 1.69444E07 3.16529E07 1.71422E07 8.20900E06 1.17351E07 6.70082E06 9.71646E05 1.98304E06 4.54885E06 4.61858E06 1.11826E06 7.10856E05 3.23695E06 2.78899E06 9.06157E05 6.90655E05 1.25092E06 1.08844E06 7.79540E03 3.17056E06 6.43023E06 3.86869E06 1.83444E05 4.95432E05 1.71448E06 1.60788E06 2.35719E04 4.38807E06 1.78245E07 1.37515E07 7.00590E06 1.29327E07 1.47254E07 1.61705E07 7.24602E06 4.37621E06 4.18185E06 1.81253E06 8.32632E04 2.63070E06 4.47417E06 1.87367E06 2.57218E05 1.27168E04 2.95454E05 1.47856E05 2.96600E05 1.41861E06 1.72898E06 1.08617E06 6.49081E05 1.87328E06 3.42817E06 3.33965E06 3.22253E06 4.29186E06 5.28941E06 1.87579E06 4.27697E05 4.35013E06 4.32791E06 1.61691E06 2.19473E06 5.05277E06 7.92021E06 3.63179E06 2.65277E06 3.55488E06 6.04446E06 5.45067E06 1.07489E07 1.75488E07 9.90471E06 2.43092E06 2.09541E06 5.35210E06 4.79081E06 1.62199E06 4.31689E06 1.26086E06 3.81614E06 2.99111E06 6.08946E05 3.30584E05 8.32524E05 1.02639E06 1.79481E06 7.89877E05 2.68969E05 1.64334E06 4.26302E05 4.09928E04 6.07068E05 2.25168E06 7.96883E06 3.46217E06 1.34968E05 1.62299E06 8.94869E05 5.06672E05 1.70673E06 1.07280E06 1.03346E05 4.60849E06 1.97562E06 7.04747E05 4.97251E05 9.57085E05 1.06824E06 4.44249E05 8.72159E05 8.81028E05 2.94781E05 1.37043E05 7.24690E04 8.78665E05 4.04948E05 1.44327E05 3.88432E05 7.58351E05 8.21597E05 4.83531E05 1.39161E05 2.02478E04 4.68240E03 1.68062E06 3.48647E06 1.56509E06 1.23032E06 2.23018E06 9.49795E05 7.90693E05 7.67677E05 2.89235E05 7.44768E05 6.23072E05 4.40293E05 4.94103E05 9.07212E05 2.66372E05 1.07774E05 3.57092E05 3.43101E05 3.60084E05 2.07760E05 2.52974E05 1.60892E05 2.43882E04 3.15082E05 1.18409E06 2.05129E06 7.41858E05 1.38629E05 2.71193E05 2.19949E05 3.13702E05 1.15843E06 5.88496E05 7.31345E03 3.61134E04 2.84586E05 3.99677E05 3.01483E05 8.89760E04 8.14209E05 4.60341E05 2.50172E05 9.89978E05 2.53757E05 1.78475E05 4.05494E05 1.57607E05 2.58721E05 4.08477E05 3.23851E05 2.42774E05 9.23323E04 4.11439E05 2.76129E05 1.54538E05 1.53569E05 3.55407E05 9.61219E05 4.99562E05 2.29719E05 1.45014E05 1.03198E05 1.57869E05 2.84606E05 6.09028E05 2.43638E05 1.59550E05 1.81962E05 8.93987E04 1.64882E05 4.59623E05 3.20479E05 4.27053E04 1.19408E05 5.07209E05 1.97604E05 1.48340E04 -Frame 257 2.78222E05 1.99584E05 1.13714E05 1.36586E06 5.03149E06 2.19039E06 1.43310E05 6.27742E06 2.39229E07 1.15694E07 3.42271E05 1.19007E07 5.83880E07 3.67587E07 2.36466E06 6.41862E06 3.94267E07 2.42543E07 1.53939E06 4.70998E05 3.98255E06 2.52856E06 2.42404E05 8.60126E05 7.35654E06 4.68849E06 3.94523E05 3.10396E05 3.90371E06 2.56642E06 4.44198E05 5.88465E04 7.67034E05 4.67613E05 1.80025E05 4.25328E04 6.22650E05 8.66657E05 2.02966E05 8.77920E03 5.22715E04 2.94823E05 2.29048E05 2.12274E04 2.15880E06 3.19846E06 6.36419E05 1.47199E04 2.22655E06 3.31567E06 1.10851E06 2.11212E06 2.13966E07 1.90079E07 4.36994E06 5.08622E06 6.75243E07 5.24067E07 1.83475E07 2.62088E06 1.15450E07 1.39418E07 5.76329E06 5.30456E05 6.44845E06 1.03500E07 2.09679E06 1.57241E05 1.89537E06 2.03187E06 7.73884E05 1.36006E05 5.17422E06 1.08216E07 3.86203E06 4.97454E05 1.11333E07 1.33989E07 4.66452E06 2.11945E06 1.50490E07 2.18541E07 2.84619E06 1.17302E07 3.29000E07 2.89725E07 1.50657E07 3.32427E06 3.25550E06 3.58141E06 9.54304E04 1.89107E05 1.85868E06 3.39830E06 2.34574E06 3.15256E05 4.50603E05 1.08483E06 6.52587E04 5.70532E05 7.08059E05 1.01413E06 1.41906E06 3.16999E05 1.12990E06 4.70555E06 1.29639E06 6.24202E05 8.28790E05 3.30288E05 7.53608E05 8.95209E04 3.48623E06 8.86624E06 5.34622E06 2.37712E06 2.01073E06 5.12503E06 8.80663E06 6.38657E06 2.58428E06 9.19751E05 8.10743E05 4.54950E05 4.74181E04 3.05290E05 3.76830E05 1.06527E05 4.42943E04 9.23562E04 1.45743E05 4.37408E05 6.59523E05 5.47973E05 2.50337E05 1.10889E04 1.73266E05 1.74279E05 1.17164E05 1.20524E05 1.97778E05 5.18532E05 8.20125E05 5.29859E04 7.12739E05 2.30426E06 2.30585E06 1.00006E06 7.22306E05 2.36899E06 3.34334E06 9.71790E05 7.56317E05 6.28773E05 7.01324E05 5.85430E05 5.35031E05 7.33618E05 8.22763E05 2.54866E05 7.46049E03 5.72330E04 3.14106E05 2.51275E05 7.68714E04 6.22009E04 7.61518E03 7.79795E03 1.23853E05 3.50747E05 3.55618E05 2.33434E05 1.55028E05 1.10570E05 3.53226E04 5.69875E04 1.22610E05 1.01987E05 3.15155E05 3.86697E05 3.14417E05 5.01472E05 3.50139E05 2.66615E05 6.59969E05 7.52792E05 7.80450E05 1.25630E06 7.17529E05 1.38483E05 6.76281E04 2.54002E04 1.03810E04 1.67816E05 3.54181E05 4.51919E05 6.62470E05 2.42276E05 1.04037E04 8.05965E02 1.03131E05 3.04176E05 2.51397E05 7.91813E05 7.83867E05 8.63596E04 4.35430E05 1.59224E05 2.09929E05 3.82413E05 2.44790E05 1.01811E05 1.86525E05 2.08750E04 4.94296E04 1.03712E05 1.09474E05 5.31480E04 3.67441E04 1.38842E05 2.07282E05 1.07047E05 3.60862E04 3.50965E04 1.21241E05 3.32400E04 2.29084E05 2.39139E05 2.72291E03 4.71953E05 9.52115E05 7.17236E05 1.08103E05 1.86295E04 1.55727E04 1.26191E05 1.95865E05 1.39495E03 1.82886E05 9.29774E04 3.02226E04 3.32660E04 6.12625E04 2.83245E05 1.04514E05 5.00801E04 3.30486E04 1.98385E05 3.59577E05 2.15036E05 1.28327E05 1.03516E05 6.77833E05 1.33623E06 7.02901E05 6.20081E04 9.57410E03 -Frame 257 3.71939E06 1.99144E06 7.54508E05 2.23530E06 5.79263E06 2.09596E06 3.25591E05 7.88070E06 2.48939E07 1.00087E07 6.46951E05 1.66757E07 6.40298E07 2.89748E07 4.19020E05 1.74802E07 6.32221E07 3.06300E07 1.56603E06 1.24380E06 4.61074E06 2.48629E06 1.33849E05 2.54242E06 1.00836E07 5.81482E06 6.66780E05 1.66201E06 6.36852E06 3.11012E06 2.81890E05 2.28212E05 1.34695E06 6.69600E05 1.39111E05 5.58407E05 1.84752E06 1.06188E06 1.04081E05 6.88175E04 1.67815E05 1.06443E05 3.79865E04 1.54805E06 5.94558E06 3.97604E06 9.75992E05 1.11410E06 4.98046E06 3.14085E06 1.24523E06 1.10234E07 5.26946E07 3.18073E07 2.30762E07 9.15670E07 2.73292E08 1.72817E08 3.86960E07 1.66929E06 1.80120E07 2.07471E07 7.79983E06 5.52804E06 2.39393E07 2.14292E07 5.28039E06 1.30341E06 4.03906E06 2.66169E06 6.04410E05 5.49934E06 1.16063E07 4.73666E06 4.50218E06 8.36265E05 1.13757E07 1.57212E07 8.85441E06 5.58018E06 4.28178E07 5.41907E07 2.99377E07 4.69823E06 9.28714E06 1.84461E07 4.57014E06 1.02247E06 3.16869E06 5.06336E06 3.35693E06 1.33034E06 8.18650E02 5.78527E05 1.55405E05 5.24777E04 1.31108E06 2.82134E06 2.95257E06 2.27482E06 5.13564E05 2.61765E05 5.46916E05 6.13333E05 5.56055E06 9.16399E06 3.85956E06 1.71735E06 7.79695E05 1.03574E06 5.19298E05 1.59567E06 8.10269E06 6.66047E06 8.97379E05 2.70911E05 3.53660E05 1.02831E06 1.84050E05 8.20203E04 2.10642E05 9.76158E04 3.61459E04 4.09825E03 7.06026E03 2.01411E04 2.36098E04 1.45787E04 1.58337E04 2.34289E04 7.20665E04 1.72039E05 5.16664E04 6.31644E04 2.10827E04 7.31055E04 5.54706E04 1.71659E04 5.01505E04 1.10400E05 1.04525E05 7.43763E04 1.09957E05 3.33362E05 2.76179E04 3.76682E05 6.19838E05 1.83801E05 9.82599E04 3.92675E05 6.01780E05 3.62482E05 1.66910E05 1.21946E05 1.15145E05 3.92537E04 5.66421E04 5.85965E04 1.38366E05 3.67887E04 3.04054E03 6.48203E01 7.51543E04 7.59516E04 6.90298E04 1.56735E05 2.09965E05 1.70353E05 5.53334E04 1.56977E04 3.80070E04 6.62204E03 8.24021E03 1.83141E04 2.96784E04 4.06480E04 7.77121E04 5.36043E04 4.01771E05 3.02381E05 5.53455E04 8.56219E03 3.20558E03 4.04401E04 1.92965E05 3.26968E05 2.63890E05 7.16517E05 6.29922E05 2.27518E04 3.66453E05 1.87603E05 2.14119E04 3.59533E04 1.80279E03 1.28469E05 1.65017E04 1.34464E05 1.25178E05 1.58877E05 3.90289E05 3.90674E05 2.33822E05 2.80576E05 2.62226E05 4.20789E05 4.84081E05 2.27887E05 1.54766E05 3.16390E05 5.24442E05 3.17049E05 1.11072E05 2.33676E04 1.13094E05 4.36296E04 1.02751E05 1.15832E05 2.25328E05 3.34327E05 1.11556E05 9.33288E03 2.39382E04 2.10513E05 1.99835E05 2.11798E04 2.37406E04 1.74308E04 9.48842E04 9.37788E04 1.85468E04 1.18421E05 6.93698E04 1.37113E04 1.94753E04 3.00559E04 1.07978E05 2.26175E05 1.19179E05 1.25372E05 7.83071E04 1.45585E05 1.99775E04 1.37877E05 2.81090E05 9.29386E04 9.30915E03 4.38042E04 7.29651E04 4.56872E04 1.60327E04 1.03648E05 4.77130E05 3.06619E05 1.43214E05 2.18346E05 8.90823E04 -Frame 257 1.58449E06 6.49241E05 6.58653E04 1.80876E06 5.24240E06 1.91486E06 2.33035E05 9.06791E06 2.45507E07 7.39104E06 1.19836E06 2.32105E07 5.79391E07 1.71945E07 1.74325E06 3.33074E07 7.60310E07 2.17437E07 7.15497E05 2.19888E06 5.88326E06 1.53364E06 3.90764E05 5.25512E06 1.13093E07 3.09312E06 2.48992E05 3.57139E06 7.91863E06 1.82185E06 1.65275E05 6.55982E05 1.54663E06 4.58609E05 1.04860E05 1.66309E06 2.41674E06 4.94019E05 4.66382E02 1.18676E05 2.28183E05 4.04772E04 3.45645E05 4.19832E06 6.83379E06 1.07539E06 4.83358E05 5.77143E06 8.43625E06 3.84550E06 1.84461E07 9.09286E07 7.72906E07 1.31004E07 7.09381E07 3.69693E08 3.00610E08 3.36955E07 2.08146E06 1.46916E07 1.37464E07 3.62739E06 6.90649E06 3.56801E07 4.26442E07 5.85324E06 3.33598E05 3.49523E06 4.76636E06 5.54140E06 6.66954E06 2.46280E07 2.27693E07 5.92846E06 2.40272E06 7.22501E06 2.64515E06 6.08276E04 4.54534E06 1.53019E07 8.05586E06 3.28641E06 4.41823E04 6.92311E06 1.18780E07 7.82257E06 2.74544E06 3.22397E06 2.92334E06 8.25683E05 2.66407E05 1.36589E06 2.17390E06 1.35240E06 8.51057E05 1.48018E06 9.58772E05 7.81277E05 7.59759E05 3.12736E06 4.75158E06 2.98979E06 4.83828E06 1.01127E07 8.44091E06 6.37893E06 2.58713E06 3.32463E06 2.43314E06 7.85310E04 8.75543E05 3.25193E06 3.52316E06 2.22804E06 3.57216E05 7.42975E04 5.23219E05 1.93434E05 4.45151E03 8.68182E04 6.82584E04 1.19153E04 6.17886E03 1.96132E04 3.00087E02 3.81464E03 2.51410E04 2.42665E04 4.94641E03 8.24337E03 1.30181E04 1.73356E05 1.47861E05 1.57850E04 1.19436E05 2.28205E05 8.35609E04 1.81904E04 6.39445E04 2.50077E05 8.91144E04 3.67896E04 2.82622E05 3.44133E05 2.59887E04 4.66235E04 1.55472E05 6.54579E04 8.66842E02 4.93167E04 2.42239E04 1.20469E04 2.42936E03 5.12609E03 2.68516E04 3.21117E03 5.43279E04 9.81245E04 7.82773E04 7.32350E03 6.69177E03 2.75468E04 6.01285E04 7.00267E04 1.10729E04 2.49133E03 2.37474E04 6.56336E04 1.14384E05 2.15470E04 2.96033E03 1.09996E04 1.97213E03 6.84548E04 6.57574E04 3.32058E04 4.65073E04 6.29009E04 2.79249E05 2.43123E05 1.19869E04 3.30744E03 4.65813E03 4.62210E04 6.32405E04 4.25349E05 9.48967E05 1.57287E06 1.00027E06 1.46103E05 8.78737E04 2.05357E05 2.87097E04 5.40223E04 2.35233E05 2.93615E05 7.34103E04 9.38725E04 1.17980E05 1.14031E05 1.39257E05 1.76463E04 2.53124E04 1.18120E05 5.87915E04 2.27872E03 1.50668E05 1.24669E05 3.28719E04 9.37812E04 1.47769E05 1.00647E05 7.57206E03 9.72376E04 5.46210E04 2.36633E04 7.39650E04 5.98764E04 5.43804E04 1.65389E05 2.74037E04 2.19131E04 1.22877E05 1.25226E05 7.15227E04 7.69691E03 2.38287E03 1.45373E04 2.23388E04 3.98572E04 5.59533E04 5.45241E03 3.14287E03 8.94201E03 2.59570E03 5.84954E04 2.55404E05 3.87531E05 2.70416E05 1.94116E05 2.77896E05 2.49947E05 1.10251E04 3.22345E05 4.43820E05 8.70857E04 1.87866E04 6.43002E04 6.87913E04 9.93766E04 1.05729E05 5.95836E04 3.63413E05 6.73290E05 5.09724E05 2.04944E05 3.82504E04 -Frame 257 3.16910E04 1.80292E05 1.60509E05 2.26915E06 5.45215E06 1.62157E06 2.22167E05 1.09575E07 2.25194E07 5.12602E06 1.68630E06 2.98722E07 5.18579E07 1.05318E07 4.18010E06 4.71577E07 6.54408E07 1.04776E07 5.58200E05 4.73229E06 5.61441E06 8.58562E05 7.86378E05 6.56406E06 6.81812E06 4.12284E05 1.90968E06 8.36435E06 7.09525E06 4.29934E05 1.64823E05 8.85436E05 1.00056E06 5.94987E04 9.04863E05 2.87715E06 1.99013E06 3.28966E04 3.78047E05 6.96024E05 4.57857E05 2.84155E04 2.04285E06 7.44192E06 2.52130E06 2.04818E06 1.94473E07 2.93684E07 4.85348E06 9.38981E06 7.24099E07 1.04471E08 3.68859E07 6.79407E07 2.37259E08 2.72841E08 3.72938E07 1.48476E07 1.19257E07 1.72891E07 6.88256E06 7.61525E06 3.82465E07 4.30564E07 2.14804E06 1.32185E07 1.56391E07 1.35311E07 5.27362E06 8.06624E06 1.83718E07 1.00818E07 8.82507E06 1.78595E07 1.43357E07 8.80635E06 9.31026E05 5.99999E04 1.44231E06 1.54275E06 7.36780E05 1.74227E06 3.12920E06 8.23060E05 4.21198E05 7.20072E05 1.30556E05 8.74493E05 7.65728E05 7.29755E05 8.87255E05 1.88071E05 7.07210E05 5.34234E05 4.59067E05 7.42789E05 7.67012E05 7.54364E05 5.66449E05 6.99805E05 4.27956E06 3.09433E06 6.87112E06 3.55330E06 1.85055E05 2.41751E05 9.56878E05 1.56153E06 1.70557E06 2.76771E05 2.49599E05 2.04584E05 6.67164E03 1.94567E04 3.87521E03 1.00908E05 2.26286E05 3.79266E04 1.58357E04 1.14708E04 1.69563E03 1.48228E04 4.59394E03 1.51278E03 4.73395E03 1.30387E04 6.18819E04 8.61425E04 3.26079E04 2.07271E04 7.61945E04 8.06074E04 6.55947E03 6.33099E04 1.50106E05 1.20350E05 5.43803E04 6.60003E03 2.45855E05 3.51558E05 2.74586E04 2.83506E05 6.72885E05 4.41933E05 4.31763E04 4.63676E04 5.35591E04 2.08665E04 4.20174E04 6.95526E04 5.44924E04 4.10122E04 1.97721E04 5.03857E04 3.84410E04 2.55699E04 6.38183E03 1.76189E04 6.04662E03 7.11850E03 4.56053E03 3.55698E03 1.54389E04 7.21427E04 3.67046E04 2.30950E04 2.43309E04 1.07825E04 2.02459E04 1.02785E04 1.07464E04 5.52017E03 1.87867E04 3.73575E04 9.27554E03 9.37591E04 5.37862E04 1.17675E04 1.59740E05 1.63479E05 2.71102E02 1.04262E05 1.17843E05 3.59775E03 5.62993E04 9.66537E04 7.52822E05 8.20913E05 1.59040E05 5.60218E04 5.24439E01 7.06237E04 1.68880E05 2.07218E05 5.51510E04 9.99782E04 1.61986E05 1.48599E05 2.43371E05 3.07300E05 1.11183E05 4.22520E04 1.03906E05 9.33218E04 1.47484E04 7.88950E04 1.99312E05 1.29490E05 7.24911E04 3.07215E04 3.13527E04 9.60889E02 8.11446E04 1.18517E05 2.69292E04 2.39699E04 8.64765E04 7.92945E04 1.12977E03 1.10590E05 1.40198E05 2.72714E04 7.07965E04 3.72668E04 4.52775E03 1.75570E02 3.98642E04 6.59580E04 4.59720E04 5.62975E04 1.96528E05 1.51579E05 6.40203E04 7.48246E04 6.68323E04 6.94483E04 2.20091E05 5.41298E04 1.62762E05 8.85515E04 3.59055E04 1.04756E05 2.60397E05 2.50789E05 1.71938E05 2.83060E04 7.02378E04 1.19822E05 4.41926E03 5.38837E04 3.28329E04 1.22656E04 3.26346E04 9.99498E04 4.18060E04 4.65139E04 2.41132E03 -Frame 257 1.80934E05 5.46611E04 4.92749E04 2.32480E06 4.92779E06 1.53620E06 4.02045E05 1.20431E07 2.00502E07 4.62645E06 2.00506E06 3.27029E07 4.14579E07 5.48569E06 6.05442E06 5.19205E07 5.02286E07 4.97990E06 5.51444E05 5.10971E06 4.08093E06 1.01087E05 1.25170E06 7.29954E06 4.88624E06 2.46300E05 2.06377E06 1.03008E07 4.70658E06 8.13862E04 4.85807E05 1.81522E06 7.50604E05 6.37053E04 1.42661E06 3.77821E06 1.18711E06 1.08780E05 8.85720E05 1.65091E06 4.55568E05 9.89735E05 7.72188E06 1.53599E07 4.81641E06 2.15561E07 8.27796E07 4.46678E07 1.01614E07 4.78345E07 9.16139E07 4.10663E07 3.59892E06 1.81469E07 1.22525E08 7.68291E07 5.05802E06 1.11540E07 2.65428E07 9.50234E06 8.07631E05 1.57774E07 5.01186E07 2.36559E07 2.27234E06 1.90568E07 2.81373E07 2.90729E06 1.31939E06 2.67336E06 4.56843E06 1.93982E06 2.53123E05 4.35592E06 7.32681E06 1.50847E06 1.11202E06 1.09466E06 1.09312E06 3.28206E05 3.16216E03 8.02940E05 1.60898E06 1.83426E05 2.14150E05 1.07533E06 8.21819E05 8.93481E04 1.72411E05 9.80296E05 1.15303E06 5.93872E04 9.88569E04 3.33639E05 6.11148E03 6.06990E04 6.42608E03 6.81617E04 1.54797E05 4.74518E05 1.68708E06 3.91666E06 2.10749E06 6.33906E05 5.14748E05 3.64775E05 9.78712E04 4.08032E04 9.97591E04 3.21521E05 6.04385E04 2.01641E04 2.77313E04 2.36709E04 3.18764E04 1.72278E04 2.26077E04 7.26650E04 4.83623E03 2.19415E03 1.65790E04 2.58916E04 1.82288E03 2.25992E03 8.17628E03 1.72144E04 2.72638E04 4.62884E03 5.05809E04 2.40618E04 5.61571E03 7.77066E03 2.36010E04 1.23187E04 1.98609E04 2.18675E04 1.16243E04 6.09044E04 4.09929E04 3.50829E05 3.45743E05 1.65425E05 3.51439E04 5.12826E04 8.24693E04 1.50341E04 9.37710E02 4.42142E04 6.28153E04 1.60082E04 1.45724E04 4.83778E03 2.69232E04 4.42826E04 3.09586E04 4.11651E04 2.68666E04 1.21777E04 1.19209E04 7.51233E04 4.90063E04 3.28238E04 2.44257E04 4.41363E04 2.66114E04 3.72063E03 7.07709E03 8.00674E03 1.88136E04 1.04740E04 3.76488E03 6.10711E03 7.82678E03 1.79563E04 3.40706E04 1.20094E05 9.58004E04 1.19527E05 1.26179E05 1.21451E05 1.50788E05 3.95373E05 3.49998E05 1.23873E05 1.54906E04 8.58047E04 2.70274E05 4.96769E04 3.49417E04 1.19140E05 1.91925E05 4.97215E04 6.94795E04 1.35330E05 2.35126E04 1.44486E04 5.87184E04 5.04786E04 6.20413E04 5.31399E04 7.12349E03 3.42279E04 5.76322E04 3.18033E04 8.12936E03 9.72650E03 4.95042E04 5.77011E04 1.23190E03 6.25265E04 6.35101E04 3.51892E04 1.27610E05 7.45754E04 9.16577E03 1.23672E04 1.65397E04 5.36776E04 1.20315E05 4.43254E04 7.10995E04 8.24215E04 3.63819E04 3.10195E04 1.51917E05 1.04895E05 3.12145E03 1.34099E05 4.25413E05 3.73848E05 2.78350E05 1.02634E05 3.48255E04 2.11961E04 8.14881E04 1.42604E05 2.56871E05 1.99139E05 1.83030E05 5.27115E04 2.29387E04 1.76673E04 6.72879E03 1.15790E03 7.63991E03 5.69626E04 3.74062E04 4.21553E04 5.43544E04 4.55926E04 3.71356E04 2.33003E04 2.84918E03 1.29827E04 1.77597E04 2.59127E04 1.05691E02 -Frame 257 4.23687E05 2.36182E05 3.00414E04 1.80755E06 4.38590E06 1.14694E06 8.83524E05 1.22894E07 1.66842E07 3.02864E06 3.34225E06 3.24661E07 3.12793E07 2.59988E06 9.13484E06 4.74541E07 3.21806E07 1.93754E06 1.18375E06 4.98361E06 2.29320E06 9.16339E04 2.48507E06 6.15552E06 2.47500E06 3.32475E05 5.62513E06 9.70121E06 2.72306E06 1.64973E05 1.06156E06 1.63367E06 2.13195E05 3.61233E05 3.57758E06 3.53685E06 3.75355E05 6.76780E05 2.41115E06 1.66504E06 6.04292E05 9.57252E06 2.45668E07 1.07440E07 2.63330E07 1.45915E08 1.34314E08 2.58882E07 2.80701E06 1.58522E07 2.36178E07 3.58191E06 5.02986E06 4.05184E07 4.45975E07 1.36827E07 7.48111E05 1.40414E07 1.00656E07 1.24745E06 9.14964E06 4.29966E07 2.90639E07 1.47941E06 1.06546E07 2.06378E07 9.16779E06 2.62819E06 2.79343E06 4.00051E06 1.47915E06 1.39780E05 1.64196E06 2.15446E06 7.84344E05 2.41510E04 3.70676E05 4.00586E05 1.36899E05 4.78239E05 1.66276E06 1.32162E06 2.85737E05 1.74995E05 7.47078E05 2.86384E05 3.43411E04 1.24748E06 2.52321E06 1.02494E06 5.62602E04 8.49229E05 4.44928E05 4.03335E04 1.60166E04 2.72530E04 7.16986E03 1.06377E04 1.38794E04 3.47669E04 4.46871E04 2.88337E04 1.24242E05 1.30477E05 1.22279E05 1.16272E05 5.18621E04 2.02713E04 1.64318E04 3.36282E04 2.43034E04 2.16188E04 9.75684E03 3.13340E03 2.20814E03 1.46457E04 2.52170E04 1.54567E04 1.71909E03 4.45191E03 1.49514E04 2.24396E03 1.37562E03 2.79556E03 1.59968E03 3.45849E03 6.34232E03 3.71505E03 2.94541E04 3.10115E04 2.22787E04 2.42885E04 3.36147E04 3.98708E04 5.22254E04 2.05504E04 8.86371E03 2.30753E04 4.05047E04 7.22553E04 1.07753E05 6.70570E04 2.61279E04 1.48756E04 4.52171E03 2.85556E03 2.07939E03 3.88283E04 8.75845E04 4.75350E04 7.90910E03 4.82611E03 4.65164E03 5.05178E04 4.20215E04 1.42357E04 5.94529E04 3.75929E04 7.52771E03 1.31402E04 3.88522E04 1.68929E04 1.11311E04 6.54206E03 1.44165E04 1.04877E04 9.69198E03 8.70818E03 1.61957E04 1.49973E04 7.80001E03 1.05540E04 1.12356E04 4.73148E02 6.83150E03 5.43024E04 1.16169E04 1.11267E04 1.38043E03 3.21232E04 7.72242E04 9.69887E04 5.19951E04 1.79367E04 1.17589E05 1.18302E05 3.05776E04 1.08118E05 1.43075E05 8.87558E04 3.01937E04 3.04346E04 3.76521E04 1.12610E04 1.62123E04 5.78239E04 3.40731E04 8.35638E03 6.25318E04 9.79790E04 6.47260E04 4.56653E04 7.46485E04 6.40932E04 2.44676E04 1.46707E04 1.41955E04 9.21574E03 1.11826E04 7.01292E04 9.51740E04 6.21608E04 5.35777E04 2.32877E04 4.05725E03 6.96703E03 2.64613E04 1.56986E04 4.97516E03 4.44293E04 2.44135E04 2.29551E03 4.27033E03 8.30770E04 1.49389E05 1.10129E05 1.39155E05 1.03690E05 1.64749E04 6.35517E03 3.43592E03 8.45846E03 1.12724E04 1.05066E04 4.05367E03 7.74852E04 2.99899E04 5.03086E03 8.23756E03 1.74765E04 1.38761E04 9.56686E03 5.30005E03 2.94214E03 2.75015E04 6.74981E04 3.19920E04 5.71207E03 1.78583E03 1.22763E03 9.35814E03 3.62725E04 3.23915E04 2.33751E04 1.76340E04 5.06942E04 4.43743E04 -Frame 257 3.84665E05 1.03776E05 9.49065E04 1.82897E06 3.22452E06 6.60709E05 1.03199E06 1.06074E07 1.37007E07 1.85388E06 4.27768E06 2.81362E07 2.01400E07 4.56787E05 1.09593E07 3.95641E07 1.90558E07 9.14116E05 1.36613E06 4.07081E06 1.37055E06 2.46301E05 2.73337E06 5.29208E06 9.55521E05 3.14357E05 5.46626E06 7.19245E06 8.54037E05 1.43919E05 1.37579E06 1.14262E06 1.80766E05 1.37534E06 5.50865E06 2.79756E06 1.43816E05 1.00223E06 3.00341E06 1.22120E06 5.20604E06 3.03427E07 1.84115E07 1.81934E06 2.96218E07 8.04785E07 4.99397E07 2.36200E06 2.32922E06 6.43586E06 3.49552E06 3.04297E05 3.42850E06 1.73400E07 4.75617E06 3.18470E05 3.61125E06 1.05839E07 3.82007E06 3.15761E06 2.45290E07 2.18874E07 6.08365E05 4.73746E06 9.63673E06 6.35979E06 4.38207E05 8.62755E05 1.82174E06 9.01743E05 1.14751E05 1.37143E05 1.59848E06 1.15735E06 1.65802E05 2.71809E05 1.80977E05 7.04571E04 1.58492E04 4.84209E05 9.79328E05 8.24540E04 8.18931E03 3.93019E05 1.10333E06 5.13605E05 5.46820E05 1.10348E06 2.40938E05 4.85748E05 4.09014E05 5.72672E05 2.83085E05 3.03167E04 4.38196E03 5.48008E03 3.85751E03 1.03975E02 3.34684E03 5.42120E03 1.13972E02 6.49058E03 1.04819E04 9.24099E02 8.57037E02 5.42642E03 1.50487E04 4.55510E03 3.03605E02 3.83272E03 1.23141E04 1.33465E04 1.09554E04 9.33330E03 3.07666E03 2.20377E03 2.60600E03 2.57017E03 5.02374E03 2.16486E03 1.62565E04 1.82141E04 8.05884E03 2.70488E03 4.94262E03 3.33913E03 9.01520E03 1.97421E04 2.46119E04 8.79890E03 7.78028E03 8.56114E03 5.20869E02 5.16427E03 2.95322E04 1.20915E04 6.27659E03 2.51839E04 2.14281E04 3.08174E04 3.09576E04 2.96989E04 2.47213E04 1.29498E04 7.49511E03 1.83008E03 1.14056E03 1.63818E03 2.49637E04 2.00549E04 3.09380E03 1.61925E04 1.85613E04 8.91038E03 4.21586E04 3.88803E04 1.66891E04 2.59412E03 2.40728E03 3.64652E03 1.51176E04 1.67150E04 1.03463E03 1.36889E04 6.87100E03 4.91256E03 1.98010E04 1.11333E04 2.19259E04 5.37425E04 3.20524E04 2.59293E03 4.59884E04 5.31822E04 8.00229E04 6.01510E04 1.48013E04 1.43405E04 2.52250E04 3.51174E04 2.41470E03 3.90156E03 3.50695E04 1.13050E05 4.81971E04 5.51886E03 1.08071E05 1.82536E05 8.61148E04 4.09224E04 9.22799E04 5.90952E04 7.57764E03 1.81000E03 9.33904E03 2.74829E04 7.69587E03 7.25855E03 2.95402E04 2.65470E04 1.82780E03 8.60575E03 2.84800E04 4.17776E04 5.88629E04 4.88979E04 2.60259E04 3.65725E03 4.84329E03 7.40392E03 1.91084E04 1.38982E04 6.03642E03 1.68504E04 4.90146E03 1.33081E02 1.15342E04 3.26644E04 3.67669E04 4.18285E04 1.22504E04 1.26526E03 9.27855E03 1.14023E04 3.71461E04 2.36669E04 1.32292E04 3.92564E02 2.89495E04 2.84496E04 3.17060E04 1.73240E04 2.60666E03 1.09069E03 1.46974E04 1.82687E04 3.39895E04 3.30156E04 2.96987E04 1.12008E04 1.47505E03 9.76116E03 5.27382E03 1.27649E04 3.23902E04 3.34170E04 2.98316E04 2.61242E04 2.24454E04 3.39844E04 1.89789E04 5.13955E03 3.65747E03 6.36818E04 9.31278E04 3.13715E04 8.98459E03 -Frame 257 1.83418E05 1.62470E05 7.22693E04 1.27510E06 2.42165E06 4.01239E05 9.68032E05 9.56106E06 1.07834E07 1.53386E06 4.23773E06 2.29951E07 1.49759E07 1.55681E06 7.51919E06 2.89888E07 1.17639E07 5.32171E05 1.30605E06 2.63346E06 6.01361E05 2.01994E05 2.67700E06 3.90998E06 5.85058E05 1.12193E06 6.48339E06 6.24607E06 1.02721E06 7.30407E05 1.67586E06 4.87232E05 3.55388E05 2.71030E06 6.36598E06 2.11569E06 1.24976E06 3.53791E06 3.18783E06 1.99458E06 1.54188E07 5.48682E07 3.73771E07 6.46037E06 3.46561E06 1.47165E07 1.15349E07 2.82969E06 9.80746E05 4.37498E06 1.33194E06 1.50739E05 3.02746E06 7.48921E06 4.35418E06 4.36439E06 7.32587E06 3.74282E06 8.52053E05 2.35086E06 2.10000E07 1.76222E07 4.35308E06 9.23413E05 1.34887E06 9.12876E05 8.45817E05 2.75419E04 7.21416E05 5.61920E05 2.22475E05 6.02040E05 8.57380E05 7.38407E05 5.85315E05 8.80351E04 5.31465E04 1.09515E03 6.02478E04 3.92964E05 3.60435E05 3.35353E05 4.80961E05 5.05350E05 2.09534E05 7.14095E04 4.50271E05 1.05636E06 4.63432E05 2.29166E05 1.68010E05 1.10101E05 4.38710E04 2.42010E04 8.92408E02 3.09745E02 8.46971E02 3.35892E03 2.86484E03 1.03575E02 3.44374E03 1.92667E03 1.42104E03 7.94396E03 1.34973E04 1.02487E04 1.13934E04 6.71438E03 2.72255E03 2.33471E03 5.18455E03 1.90365E04 1.90982E04 1.00726E04 5.20597E03 2.11340E03 2.42648E03 1.26878E03 2.80373E03 2.65965E03 1.57116E03 1.46620E04 7.90793E03 3.94932E00 2.73614E03 1.08409E04 1.25944E04 4.85619E03 9.77532E03 7.96404E02 6.18336E03 1.25120E03 6.86809E03 1.24925E04 1.11312E04 8.48200E03 1.26690E04 3.78075E04 4.14222E04 6.65969E03 8.17806E03 6.36252E03 1.32375E03 7.71416E02 2.79065E03 3.54846E03 9.30548E02 7.91426E03 2.50696E04 4.36947E04 2.21988E04 5.29262E03 2.43977E04 2.89160E04 8.44491E03 6.94017E02 3.73276E03 3.40360E03 9.26576E03 8.69747E03 1.53976E04 6.32758E03 2.36980E03 2.47448E02 7.92378E03 1.54486E04 4.94712E03 1.05535E02 8.96181E03 2.06671E04 1.57427E04 3.21846E04 4.88744E04 9.59265E03 3.46900E04 4.12430E04 2.53872E04 2.28978E04 2.83142E04 3.58892E04 3.54694E04 2.68199E04 2.05081E04 2.31445E04 3.13239E03 1.31251E04 5.75678E04 1.26057E05 6.76637E04 4.83024E04 1.03147E05 1.12767E05 6.26954E04 3.03711E04 2.81192E04 1.38253E04 4.69653E03 9.82184E02 3.66521E03 5.70034E03 3.22042E02 8.03890E03 1.79050E04 1.00517E04 1.35900E04 2.67367E04 8.77664E03 1.35370E03 4.36612E03 1.65071E04 2.48774E04 1.05087E04 7.60788E01 8.56815E03 1.05730E04 1.45048E03 9.65080E02 6.37760E03 4.47022E03 2.66124E04 1.85426E04 1.05053E04 3.17702E03 4.33967E03 1.58425E04 2.55430E04 1.08546E04 7.30812E03 3.85914E04 1.55659E04 8.04311E01 3.88511E03 2.27052E03 8.51209E03 1.45959E04 8.21348E03 1.55432E04 1.24776E04 2.26586E03 1.93268E04 2.66731E04 3.20397E04 1.77190E04 5.75531E03 2.94391E03 7.48715E02 8.72155E02 1.31981E04 3.37204E04 9.10217E03 1.22026E04 1.43754E04 1.79299E04 1.87568E04 9.97837E03 2.12244E03 3.14254E02 -Frame 257 7.57159E03 2.00270E04 4.36437E04 1.43022E06 2.05631E06 3.28339E05 9.66632E05 8.39289E06 6.99882E06 6.98376E05 5.28294E06 1.83043E07 7.32216E06 1.11608E06 1.21234E07 2.62682E07 6.10256E06 1.73432E05 1.61562E06 1.70483E06 2.11449E05 8.24954E05 4.05070E06 2.16802E06 7.35443E04 2.24151E06 6.41522E06 2.04270E06 2.46278E05 1.00041E06 1.28474E06 1.20641E05 1.21544E06 7.19885E06 5.27380E06 1.15404E05 2.12712E06 6.00827E06 3.14598E06 4.01706E06 2.34263E07 2.66606E07 4.84736E06 1.55478E06 2.95678E06 3.60716E06 5.95333E05 7.40109E05 3.94787E06 2.26208E06 1.80465E05 2.27909E06 3.99372E06 6.17000E05 8.48328E05 4.43635E06 6.56945E06 3.10923E06 8.68175E06 2.08667E07 1.04306E07 1.08003E06 1.45882E05 8.62898E05 6.63613E05 7.61621E04 2.15945E05 3.95866E05 9.85276E04 8.50117E04 1.80226E05 1.39286E05 3.21540E04 8.92740E04 2.53272E05 1.65860E05 8.76563E04 1.96396E05 2.68661E05 4.89573E04 3.88275E04 1.53462E05 1.82702E05 1.48872E05 4.34849E05 8.69210E05 9.39223E05 4.43017E05 1.12201E05 8.05688E04 4.16256E04 2.02146E04 1.91717E04 1.05432E04 1.61408E03 6.63354E03 1.00067E04 4.45081E03 3.66670E03 9.12476E03 6.03946E03 3.54767E03 5.07297E03 4.59151E02 8.61788E03 5.78847E03 4.71697E03 1.44511E03 5.19073E02 1.49558E01 4.22823E02 5.76721E03 1.06192E04 7.03402E03 7.78132E03 2.46530E03 1.88076E03 3.17534E03 3.44090E03 5.68977E03 3.63300E03 7.61251E02 6.61924E03 6.31239E03 4.02481E03 9.61839E02 1.12245E04 4.18731E04 3.27830E04 1.13298E04 3.08525E03 4.14104E03 1.10746E04 9.63735E03 2.18391E03 1.73160E03 2.45771E03 1.68221E03 3.26541E03 1.09055E04 8.97389E03 3.52592E03 1.35497E02 1.54226E02 1.47682E04 3.46563E04 4.09310E04 2.45912E04 2.91408E04 1.97818E04 2.69606E03 1.28299E04 2.47246E04 1.33301E04 1.54552E04 3.88386E03 1.75846E04 2.04406E04 1.71257E04 1.04223E04 3.07834E04 1.78012E04 2.45936E03 4.65301E02 1.37026E03 5.01887E03 1.47192E03 5.47439E03 7.92824E03 1.38064E03 1.79054E03 2.88183E02 1.47532E04 2.59720E04 1.24742E04 3.02602E03 6.96728E03 8.66289E03 4.37972E03 1.00754E04 1.90440E04 3.72852E04 2.52466E04 1.15808E04 2.40105E03 6.74543E03 5.19255E03 2.77972E04 5.11982E04 1.47378E04 5.78506E02 5.21882E03 1.78547E04 7.59555E03 6.85613E03 4.76858E03 9.45247E03 8.95516E03 3.70031E03 1.89340E03 3.98454E02 7.07193E02 2.96680E03 4.78859E03 3.84574E03 1.30125E04 6.32347E03 5.34502E02 5.49369E02 1.66139E04 2.33910E04 9.95897E02 2.07867E03 4.64600E02 1.68150E03 1.03804E04 3.67776E03 2.23971E03 2.78113E04 8.68731E04 5.47694E04 1.67639E03 6.43771E03 1.61106E04 1.41878E04 1.82752E04 3.95028E04 4.93703E04 3.08277E04 4.18448E03 1.34609E04 7.76547E03 5.80685E03 6.58037E03 7.21578E02 3.88819E03 1.45301E04 3.09514E04 7.25515E03 8.16478E02 1.21280E03 7.33545E03 2.97969E03 5.84874E03 4.17024E03 1.45833E03 2.09095E02 8.43115E03 1.39372E03 4.29057E04 9.64731E04 6.66412E04 1.98361E04 4.34092E03 4.65311E03 2.03646E03 2.94450E02 -Frame 257 3.26674E05 1.98600E05 1.42427E05 1.45463E06 2.02897E06 2.94516E05 9.91793E05 7.48035E06 6.38651E06 2.85465E05 4.63022E06 1.61466E07 6.46137E06 6.75784E05 1.43973E07 2.74213E07 6.29696E06 3.20337E04 1.69767E06 1.43932E06 1.00209E05 1.15767E06 4.84203E06 2.34797E06 5.20159E04 2.47963E06 5.76675E06 1.73392E06 5.09166E04 9.80870E05 1.03090E06 2.13739E04 2.80552E06 1.23829E07 7.28988E06 1.41213E05 7.20425E06 8.48385E06 5.19345E05 7.06395E05 9.49834E06 1.04702E07 1.50331E06 1.04924E05 2.14267E06 1.91916E06 3.43043E05 9.43875E05 2.53416E06 5.56235E05 4.41756E05 4.21064E06 5.49298E06 1.39488E06 6.32977E05 3.75363E06 2.74558E06 2.80585E05 8.51213E06 2.35939E07 8.67785E06 6.60882E05 1.64097E05 7.01277E05 1.91435E05 8.93590E04 2.05577E05 1.01368E05 3.68864E03 7.59995E04 1.82637E05 8.49217E04 9.19216E03 5.68783E04 2.06444E05 6.91636E04 4.11128E03 1.35437E05 2.92575E05 1.37136E05 1.25840E04 7.11178E04 8.35440E04 9.43339E03 5.84684E05 1.64969E06 6.39927E05 2.39225E05 4.52793E04 2.18486E04 9.19918E03 4.25614E03 1.99117E04 2.75988E04 1.10085E04 4.00774E03 1.15703E04 9.57238E03 4.83200E03 6.45350E02 2.56720E03 7.59605E03 1.61495E04 6.57626E03 2.52185E03 6.35334E03 4.62778E02 1.87117E03 3.16176E03 5.65135E00 2.48909E03 6.91386E02 1.31326E04 1.65184E04 4.73491E03 1.84544E03 5.03714E03 1.26062E04 5.58747E03 8.78069E03 1.11935E04 1.99787E03 4.61173E02 1.86096E03 2.19477E04 2.45660E04 5.16187E03 5.06182E03 1.90833E04 6.70645E03 2.17446E02 3.26552E02 4.26688E03 4.73998E03 5.10844E03 1.72760E04 1.86666E04 9.88032E03 8.43868E03 1.57847E04 8.55464E03 6.44688E03 2.01911E04 3.65731E04 3.50712E04 2.35840E03 1.77350E04 1.37838E04 8.20531E03 1.85965E03 9.98406E03 3.25386E03 1.97548E04 4.47089E04 5.52868E04 2.56486E04 8.18020E03 2.28670E03 5.34312E03 2.82695E04 6.49224E04 6.26462E04 2.71953E04 7.91871E03 2.19377E03 3.29301E03 1.26747E04 7.04747E03 7.66321E03 8.58842E03 7.25165E03 3.97871E03 8.77495E02 1.38245E03 2.64788E02 1.97650E02 9.12319E03 4.82776E04 5.35238E04 1.97017E04 1.34679E03 2.29202E04 1.96194E04 2.86102E03 9.03995E02 2.96016E03 2.17859E04 1.45085E04 3.82818E04 2.25871E04 1.95168E03 1.21382E03 2.04109E04 2.70523E04 8.06014E03 8.00713E03 1.94931E04 1.01590E04 1.31829E03 4.58072E02 6.41976E02 1.13206E03 1.37818E03 1.62408E03 4.24676E02 9.97483E03 2.93113E04 2.34777E04 6.23101E03 7.82982E03 4.03732E04 2.19566E04 4.02397E03 4.53047E03 7.17639E03 1.04050E04 1.63672E04 1.57122E04 4.27342E04 4.80437E04 3.55369E03 1.90085E04 1.83871E04 7.10790E03 3.22482E03 1.00360E04 1.22438E02 8.53678E02 7.02632E03 1.21852E04 2.97431E03 2.31131E04 2.36107E04 3.86260E03 9.06232E02 2.29448E03 1.46656E04 1.59050E04 7.04439E03 1.29710E03 1.16846E03 3.12211E02 3.52128E03 9.00935E03 4.25115E03 1.41850E03 5.82167E03 1.97327E04 3.82609E04 2.67018E04 7.88289E03 1.19766E04 1.25243E03 8.40657E03 7.05101E03 1.32039E03 2.25545E03 -Frame 257 5.96622E05 1.41894E05 2.34889E02 1.25094E06 1.98082E06 3.19240E05 1.14586E06 7.49390E06 5.82788E06 3.33540E05 4.74682E06 1.66271E07 8.89591E06 3.77156E05 1.46239E07 2.76414E07 5.81757E06 1.89248E05 1.61688E06 1.54582E06 1.10188E05 1.37955E06 4.86809E06 2.93905E06 1.05397E05 2.81747E06 5.18855E06 1.32462E06 1.17015E05 1.47033E06 1.76121E06 5.37806E05 4.27285E06 1.80748E07 8.41802E06 9.41583E05 1.90725E07 1.96733E07 4.21901E06 1.25627E05 4.43208E06 4.65555E06 4.94251E05 7.52956E05 2.06370E06 7.79034E05 1.26035E04 4.21924E05 1.25134E06 9.34912E05 8.14980E04 1.64048E06 2.66395E06 8.46324E05 4.58676E04 2.75226E06 5.40572E06 1.92750E06 2.87847E06 1.55323E07 9.28530E06 1.42562E04 1.74203E06 1.62897E06 4.06422E05 3.32930E04 3.05862E04 1.84546E05 7.61887E04 2.88336E04 7.97028E04 5.66116E04 7.56541E03 1.05269E05 2.75378E05 2.41782E05 6.65306E03 6.81041E04 1.00072E05 3.81837E03 6.37428E04 2.27309E05 2.28544E05 5.15016E04 2.34605E05 8.43521E05 6.26842E05 1.89001E05 2.69220E05 1.53687E05 4.99318E04 5.74945E03 3.33929E03 2.72738E04 2.30663E04 8.27782E03 1.31178E04 2.49871E02 5.81094E03 9.79830E03 6.57719E03 5.18375E03 4.30185E03 6.81275E03 5.82580E03 8.45283E02 1.79551E03 3.34376E03 1.17561E04 1.79113E04 2.36357E04 4.50836E03 4.28746E03 6.69593E03 4.57280E03 3.57330E03 3.26521E03 3.76044E03 7.13158E03 2.02164E03 1.51430E04 1.73331E04 1.93748E04 1.32159E04 6.30162E03 1.03574E04 2.05686E04 5.17245E03 2.25397E04 2.67940E04 1.34663E04 4.01311E03 1.97196E03 7.44746E02 2.53069E03 2.69603E04 2.07242E04 6.08304E03 1.01460E04 3.39689E04 1.26330E04 3.29739E03 8.45216E03 1.49921E04 5.10357E03 1.06122E04 2.91355E03 1.57838E04 2.13997E04 1.95229E04 1.19810E04 5.11904E03 2.69042E04 5.37409E04 5.84464E04 2.60964E04 1.73517E04 1.24519E04 1.02310E04 4.67179E03 1.34830E04 4.81272E02 7.71650E03 5.01089E03 2.04471E03 8.12789E03 3.13993E04 2.06056E04 1.48331E04 2.49133E03 1.79481E03 7.43206E02 6.50320E02 1.27873E03 4.27173E03 4.68638E03 5.36862E03 2.71009E04 2.42236E04 4.29502E03 7.75725E03 2.62715E04 4.83326E03 6.12102E03 8.10050E03 1.06793E04 1.03941E04 4.66043E04 7.47615E04 5.62528E04 1.61510E04 1.55458E04 3.79280E04 1.05558E04 1.71280E03 2.48492E03 4.92015E03 3.31263E03 2.25910E03 1.78000E03 7.72336E02 2.87121E03 1.60371E03 5.07664E02 6.72624E02 4.00923E03 1.06188E04 1.87387E03 9.69391E03 4.43652E04 3.43593E04 9.01040E03 2.15785E02 2.76896E03 3.62721E03 4.75489E03 8.89271E02 3.82512E03 2.28136E04 5.14389E04 3.82712E04 3.94804E03 3.25566E02 9.63271E02 9.08130E03 9.42129E03 1.33763E03 1.85316E03 1.20022E03 3.16936E03 5.84383E03 6.83371E03 1.06270E04 1.02656E04 5.05568E03 6.57962E03 1.32307E04 5.96105E03 6.53792E03 6.03496E03 2.52577E03 8.66877E02 9.40428E03 1.91169E04 1.24476E04 3.75115E03 8.18101E00 4.92897E02 3.83224E03 2.77220E03 4.02706E03 5.07712E03 2.26948E02 3.09519E03 9.08464E02 7.69468E03 9.03126E03 -Frame 257 1.90077E04 9.03604E04 1.66916E05 1.46426E06 2.32434E06 4.22081E05 1.28774E06 8.62775E06 6.31757E06 4.63446E05 5.27242E06 1.87111E07 8.81061E06 1.76539E05 1.85995E07 3.48353E07 8.06541E06 3.42332E05 1.77139E06 1.97387E06 1.62331E05 1.47562E06 6.05540E06 2.57502E06 6.18875E05 4.65596E06 8.36165E06 1.48658E06 2.36338E05 1.85738E06 1.93012E06 1.56656E05 7.38062E06 2.51178E07 1.00171E07 9.34957E05 1.68166E07 2.06378E07 4.14464E06 6.79711E04 1.93045E06 2.84028E06 4.16217E05 5.44300E05 2.42445E06 1.73745E06 2.16071E05 3.37759E05 1.11707E06 4.79460E05 1.01996E05 1.09269E06 1.43171E06 3.14687E05 1.43435E06 6.12581E06 4.10715E06 1.01032E05 2.54847E06 1.17476E07 8.40830E06 1.19336E05 2.59026E06 3.03743E06 4.82662E05 6.85191E04 2.29678E05 2.44111E05 1.35879E04 9.14801E04 2.69407E05 1.23664E05 3.20505E04 1.61306E05 2.60860E05 5.26285E03 3.86304E04 1.55024E05 1.31116E05 3.06724E04 1.81526E05 3.44063E05 1.01575E05 6.73653E03 1.83749E05 3.48442E05 4.99335E04 1.61947E05 4.03969E05 2.51654E05 2.87838E04 8.21081E03 2.17787E04 3.64579E03 9.81651E03 5.29691E03 1.07092E04 8.31326E03 8.96168E02 2.20769E03 2.07082E03 2.24899E03 5.77907E03 8.22582E03 1.03550E04 1.02766E04 3.52429E03 5.11084E02 1.05212E04 6.88248E03 2.78065E03 4.52899E03 5.26253E03 1.19389E03 1.43666E03 5.19403E02 5.24744E01 2.31755E03 8.58758E03 4.75031E03 6.88967E02 9.30672E03 2.81819E03 4.59677E03 7.16197E03 5.94796E03 4.09580E02 1.56189E04 4.93009E04 2.00181E04 4.53056E02 9.44671E02 2.95364E03 1.33731E04 2.58176E04 2.08952E04 5.43801E03 1.00157E04 1.69629E03 2.14050E04 2.74101E04 4.03159E03 2.24115E03 1.09313E04 7.97695E03 5.55193E03 6.98836E03 1.71218E04 3.32696E04 9.52601E03 3.06613E02 6.53178E03 7.21253E03 1.10549E02 1.20769E03 1.83489E03 2.52654E04 1.59286E04 3.62118E03 1.08032E04 4.18238E04 2.78620E04 9.51151E03 8.43546E03 6.65609E03 8.48539E03 8.62728E03 8.89570E03 7.15163E03 3.83846E03 7.77607E02 2.91199E03 2.60568E03 2.05049E03 5.39240E02 1.86380E03 6.25244E03 1.43091E04 8.90364E03 1.26528E04 3.66915E04 4.12396E04 1.20405E04 4.53921E03 5.17994E03 3.35893E03 6.19299E02 1.93919E03 6.83422E03 1.22462E03 4.83228E03 2.21813E04 2.39134E04 1.05385E04 1.83589E03 1.72759E03 2.40373E03 8.67830E02 2.28978E03 1.72507E03 1.67928E03 5.71995E02 1.10152E03 1.10763E03 5.76305E02 1.45850E03 5.16464E03 4.51339E03 4.88230E03 5.86969E03 8.47164E03 1.34905E03 6.33800E02 1.49270E03 7.47117E02 1.12514E04 2.26814E04 3.24842E04 1.94833E04 2.04162E01 1.75430E04 1.98364E04 4.55479E03 4.45893E02 6.24540E03 1.05005E04 1.12645E04 7.62483E03 3.96078E03 5.36977E02 2.01839E03 3.19048E03 1.68888E03 3.29111E03 3.27112E02 9.14465E02 4.59241E03 7.22229E03 1.24477E03 1.22241E03 2.77846E03 3.09992E03 7.59862E02 5.39169E03 3.71611E03 1.04489E04 8.88175E03 5.82456E03 7.03046E02 2.25176E03 1.07994E04 1.54219E04 1.41029E04 7.27210E03 1.56879E03 7.09161E03 2.31773E04 -Frame 257 2.25058E05 2.30985E05 2.23996E04 1.34044E06 2.13226E06 4.79185E05 1.21900E06 8.89046E06 7.81694E06 8.54326E05 4.99073E06 2.05895E07 1.12187E07 5.12219E05 2.20809E07 4.88026E07 1.36729E07 4.31886E05 2.01710E06 2.79930E06 3.26474E05 1.41621E06 6.50064E06 3.71068E06 4.96223E05 4.41249E06 1.26741E07 3.86926E06 2.71523E05 1.80664E06 4.08103E06 8.79305E05 6.36112E06 3.46783E07 2.54182E07 8.15730E05 2.67557E06 9.14580E06 3.81770E06 1.13496E05 9.57383E05 2.28206E06 7.02840E05 3.86754E05 2.10243E06 1.93487E06 1.80201E05 2.26192E05 1.14119E06 8.71985E05 1.38235E05 5.05064E05 1.20281E06 2.99757E05 5.23015E05 2.93392E06 4.11033E06 4.89580E05 5.54040E05 5.28827E06 1.05388E07 2.06887E06 8.74335E05 5.04879E06 3.40569E06 3.91858E05 1.50469E05 8.55378E05 2.92614E05 5.47762E04 6.87234E04 1.62488E05 5.34551E04 2.10330E05 5.63746E05 3.56257E05 8.81820E04 4.40297E04 1.93274E05 7.49226E04 7.89711E04 2.56777E05 3.43866E05 6.62463E04 9.88154E04 8.96268E05 1.10737E06 6.91148E04 1.71373E05 2.03880E05 6.74417E04 1.82833E04 3.12344E04 4.36982E04 3.13341E03 9.36739E03 1.81745E04 1.13453E04 1.11233E04 4.90947E03 1.55597E01 1.11970E03 1.26635E03 6.42328E03 7.67911E03 6.23999E03 5.71863E02 6.13633E03 1.15094E04 4.01709E03 1.31082E03 5.72640E02 4.76789E01 1.79719E03 9.69700E02 1.13501E03 3.91364E03 3.01173E03 3.18770E02 1.99511E03 1.68798E02 5.06544E03 1.49971E04 6.95868E03 1.14509E03 6.34565E02 3.44149E03 7.42285E03 8.20212E03 4.06766E03 1.52231E04 1.31661E04 5.16819E03 7.55239E03 2.83639E03 8.41654E03 1.70919E04 1.21088E04 7.09056E03 3.34356E03 3.18669E03 6.53812E03 1.23213E04 1.66522E04 8.92825E03 2.71886E03 3.05626E03 1.68756E03 4.65706E03 7.59463E03 5.76940E03 5.77906E03 3.23023E03 2.20874E03 1.64897E03 7.81497E03 2.13347E04 5.44959E03 2.96262E03 7.19450E03 1.12537E04 1.42465E04 8.61897E03 1.66587E03 1.64122E03 1.94306E03 7.17930E02 9.42753E02 2.32021E03 4.69881E03 1.31650E04 2.07454E04 1.77223E04 1.04613E04 2.61243E03 5.28033E02 1.85816E03 1.01075E04 1.12812E04 3.88130E02 8.23343E03 1.27122E04 2.36656E03 3.35945E03 3.31730E03 5.72473E02 3.64256E02 1.25504E03 3.49780E03 4.00955E02 2.50486E03 2.92162E03 8.76659E03 1.04586E04 4.05197E03 9.00001E03 1.64443E04 1.61505E04 1.61076E04 1.06877E04 1.92381E03 2.37079E03 7.45882E03 8.29835E03 8.80909E02 6.64950E03 8.52073E03 1.18916E03 6.70434E03 1.80461E04 9.32768E03 2.60163E04 5.55223E04 4.05761E04 7.56626E03 7.16130E02 2.46394E04 3.01286E04 3.12675E03 3.08101E03 1.48788E04 7.60507E03 7.64979E03 7.75659E03 1.31013E03 3.51538E03 3.87464E02 6.21966E03 1.17858E04 8.46059E03 8.16065E03 2.41518E03 3.47816E02 2.37111E02 3.06820E03 4.80701E03 9.03178E03 7.82616E03 1.93829E03 2.81744E03 2.10501E03 1.13821E03 6.43018E03 5.56001E03 3.78617E03 1.26382E03 2.51570E03 5.24428E03 9.29096E03 1.13070E04 1.38417E04 2.60369E03 2.94615E03 4.38532E03 3.89793E01 7.40743E03 1.74805E04 -Frame 257 4.12348E05 1.25910E05 1.37073E05 1.55076E06 2.61619E06 4.55094E05 8.71508E05 8.79161E06 8.16152E06 9.41222E05 3.84527E06 2.06947E07 1.19181E07 1.04589E06 2.03505E07 6.45146E07 2.39477E07 8.57248E05 3.00429E06 4.32625E06 8.20060E05 8.78259E05 6.63905E06 6.89361E06 8.85727E05 4.85225E06 1.90932E07 9.49657E06 1.08509E06 3.41738E06 7.48212E06 1.94001E06 6.10221E06 5.26413E07 5.69140E07 8.50060E06 2.03625E06 6.42849E06 4.21755E06 4.52427E05 5.22334E05 1.86755E06 6.72694E05 3.68604E04 8.26480E05 1.89316E06 4.83949E05 1.38582E05 8.62110E05 1.00635E06 8.98501E04 9.95326E04 7.64264E05 6.53647E05 1.64532E05 8.15508E05 2.90038E06 1.40378E06 2.87400E05 2.45556E06 6.06820E06 3.05332E06 9.42424E04 2.22937E06 8.12610E06 5.30736E06 1.59524E06 2.99147E06 3.04724E06 3.95343E05 2.90479E04 3.43716E05 1.24228E05 7.54413E04 7.29392E05 9.33132E05 8.49724E04 1.21389E05 5.41525E05 4.21909E05 6.28472E04 1.04588E05 4.46560E05 2.76334E05 1.59889E05 1.39893E06 3.54696E06 1.79339E06 1.51436E05 2.85765E04 1.12432E05 5.28471E04 7.22148E03 7.12547E04 7.33145E04 4.00109E03 6.23143E03 5.63090E03 4.08753E03 1.24000E03 4.03725E03 3.63386E03 5.82559E03 1.04954E03 2.57342E03 3.38549E03 2.62695E02 8.44992E02 3.29685E03 1.27935E02 1.14775E02 3.24705E01 1.67763E03 7.66555E03 6.90382E03 9.87106E02 2.39411E03 3.59462E03 2.25424E03 5.57562E02 2.41973E03 5.86126E03 7.68508E03 9.39116E03 3.27511E03 1.95418E03 7.80625E03 5.93241E03 1.12248E04 1.53955E04 1.81322E04 1.46049E04 2.70627E03 9.43643E03 2.24374E04 1.22109E04 1.61923E03 1.63917E03 4.66966E03 8.40459E03 1.26724E04 2.13440E04 8.48077E03 2.59712E03 4.52835E03 1.19077E03 1.96649E03 2.14853E03 1.81934E04 1.32643E04 3.73888E03 9.80585E02 4.38304E03 1.41294E04 1.92292E04 1.62513E04 1.28309E04 9.53129E03 7.25745E03 3.87131E03 3.58965E03 5.17496E03 3.28569E03 1.97297E03 1.00863E04 2.22621E04 1.77572E04 1.28036E04 3.87031E03 7.73212E02 2.11722E03 3.29041E03 1.34277E01 1.77478E03 1.56705E03 2.67620E02 8.89041E01 4.99792E03 1.29051E04 3.06853E03 4.86395E03 1.83476E03 2.08657E03 1.52066E04 9.40359E03 1.73904E03 1.12785E02 2.68290E03 5.12499E03 4.62086E03 1.55736E03 3.52894E03 4.29855E03 1.32306E03 2.29027E04 3.36351E04 4.07551E03 1.10580E04 3.09932E04 1.76466E04 8.98379E02 4.36000E02 2.52942E03 1.82119E03 3.90030E04 6.89345E04 5.04334E04 7.40734E04 1.50432E05 1.19192E05 3.58236E04 7.68755E04 1.70371E05 8.80273E04 1.84674E04 1.86632E04 3.95848E04 2.11291E04 5.86875E03 8.78836E03 2.62067E04 2.16282E04 1.45653E04 9.04205E03 1.05045E04 8.24047E03 1.62518E02 2.46531E03 1.01728E03 2.15082E02 4.83281E02 5.96085E02 2.03035E02 1.75383E03 1.09161E03 6.39597E03 7.02236E03 3.04861E03 2.24412E03 8.33026E02 5.87060E03 4.80137E03 3.43042E03 5.99104E03 1.98039E03 1.33055E03 2.68350E03 1.06019E03 2.07913E03 1.64769E03 1.41323E03 1.12317E03 4.88437E03 6.08895E03 1.97178E02 5.59229E03 1.25372E04 -Frame 257 1.12812E05 1.22890E05 8.34151E04 1.66814E06 2.65444E06 4.38111E05 9.72862E05 9.43846E06 9.07738E06 8.17147E05 3.91141E06 2.13665E07 1.35954E07 2.08516E06 2.56016E07 8.70320E07 3.51618E07 6.97560E05 3.75114E06 6.73317E06 1.36086E06 1.09672E06 8.83295E06 6.90673E06 3.47513E05 6.77414E06 2.78865E07 1.42005E07 4.17458E05 3.79793E06 1.06799E07 3.53849E06 9.08599E06 7.92201E07 7.88992E07 7.53091E06 4.78816E05 3.92832E06 3.76834E06 5.51522E05 4.26635E05 1.61088E06 6.04468E05 1.15658E05 5.60993E05 1.77500E06 6.17278E05 6.83716E04 4.81489E05 8.08523E05 2.09291E05 1.17131E05 7.86834E05 4.30459E05 2.61218E04 3.01931E05 1.49847E06 6.62454E05 1.31838E05 7.62627E05 1.61970E06 1.87024E05 3.52012E04 6.59903E05 3.47486E06 2.83997E06 1.54527E06 5.11416E06 1.16868E07 6.67277E06 1.35730E06 6.65317E05 9.58621E05 5.56585E05 1.54219E05 1.53861E06 8.04952E05 3.11010E04 6.41259E05 8.25416E05 1.14986E05 5.78702E03 3.73731E05 3.63906E05 1.82867E05 5.51145E05 2.22800E06 1.71614E06 4.45453E05 5.43424E05 1.29380E06 1.53587E06 7.22552E05 1.06036E05 1.23812E05 9.22726E04 1.76491E03 4.58078E04 2.87642E04 2.58474E03 4.18977E02 1.40490E03 6.74485E03 4.42941E03 3.73366E03 5.54990E03 1.59358E02 9.96956E02 9.10034E02 1.60255E03 1.04241E03 8.68311E02 1.18431E03 9.90517E03 4.66316E03 1.55687E02 1.81816E03 3.92269E02 2.41165E03 3.89235E02 1.35843E03 9.02627E02 1.60331E03 2.10906E03 2.59104E03 3.81276E03 3.33707E03 2.87768E03 9.90646E03 1.69258E03 1.36764E03 3.10133E02 1.28994E03 2.22397E03 8.49959E03 1.94077E04 2.24311E04 4.00617E04 4.24218E04 1.24681E04 6.23365E03 1.72401E04 4.42321E03 8.88814E03 9.84681E03 4.89764E03 2.93627E03 1.09728E04 2.13083E04 1.95846E04 6.07013E03 1.23942E03 1.58159E04 3.12585E04 1.10470E04 2.81654E03 6.57149E03 5.88820E03 4.51759E03 5.97705E03 1.98340E04 1.48813E04 6.29000E03 1.21615E04 1.65681E04 1.03959E04 7.21228E03 1.02872E04 1.28134E04 6.23011E03 1.30408E03 1.32111E02 1.27030E03 2.55756E03 3.59688E03 5.47104E03 3.37280E03 1.40176E04 3.33516E04 1.86974E04 1.07498E03 4.28848E03 2.53004E02 6.79784E03 2.12163E04 6.28207E03 2.53976E03 4.73650E03 5.08657E03 1.63197E04 1.52340E04 8.08904E03 7.97384E03 1.26897E04 3.43379E03 7.78358E03 1.38825E04 2.22868E04 1.47780E04 3.14411E04 2.82639E04 5.03397E03 2.54038E04 5.04895E04 5.07624E04 2.06324E05 2.23411E05 2.84256E05 1.07498E05 1.02460E05 1.13460E05 1.18472E05 8.67760E04 2.58787E04 7.02699E03 5.65325E03 8.34984E03 2.74848E04 1.65253E04 1.19341E04 7.02207E03 1.43583E03 1.06629E03 6.30441E03 4.35364E03 4.88438E03 1.20295E04 8.72191E03 5.72201E03 5.37779E03 3.12426E03 1.35337E03 7.40463E03 1.84462E04 1.90733E04 2.94062E03 5.16156E03 1.16536E04 8.61752E03 1.71432E03 7.34927E02 6.20893E03 5.13731E03 7.07457E02 8.76986E02 1.76762E03 4.18058E03 5.15163E03 4.76226E03 1.53874E04 1.05311E04 3.51909E03 1.21473E04 1.43183E04 1.56216E03 8.04261E02 1.21243E03 -Frame 257 5.22945E04 3.82259E04 7.79889E04 1.68151E06 2.78951E06 5.33725E05 1.11025E06 9.59135E06 9.80537E06 4.55379E05 5.15890E06 2.29916E07 1.33452E07 1.48734E06 3.77270E07 1.10857E08 4.07272E07 2.19361E05 5.52050E06 7.02131E06 1.07554E06 1.30631E06 1.15306E07 1.03665E07 5.42380E05 8.00525E06 3.64947E07 2.02994E07 2.74837E05 6.64387E06 1.16158E07 1.74358E06 1.49674E07 1.14380E08 1.04811E08 1.06046E07 1.77806E05 2.94240E06 2.63628E06 1.82484E05 3.98238E05 1.20867E06 4.65155E05 2.92956E03 5.77775E05 1.28309E06 4.63865E05 8.31841E04 4.60437E05 4.56666E05 3.73659E04 1.75397E05 8.72295E05 7.23448E05 8.38825E04 1.02288E05 7.75845E05 3.88533E05 3.73951E04 3.57374E05 8.00213E05 1.97632E05 4.70883E04 4.55921E05 5.87823E05 4.83932E04 2.42031E05 2.68884E06 4.89489E06 2.49761E06 2.49187E06 2.95844E06 3.00235E06 1.03649E06 3.03356E06 7.49196E06 3.96149E06 3.50051E05 1.04333E06 1.54108E06 3.70610E05 9.42680E04 5.46197E05 2.52581E05 2.24582E04 1.52304E05 7.39953E05 4.68712E05 9.06079E04 4.74490E05 1.57146E06 1.35721E06 6.88556E05 1.14453E06 1.62350E06 1.34411E06 4.75252E05 3.87100E04 2.72920E04 2.09200E04 1.69559E04 3.49656E04 9.56436E03 4.28021E03 6.48530E03 3.45449E03 5.83899E02 8.39656E02 2.70796E02 8.32356E02 2.60391E03 3.10189E03 1.45841E02 3.94264E03 1.28761E04 1.41959E04 9.23754E03 6.87634E03 2.17784E03 4.78109E01 4.73980E02 1.04640E01 8.26233E02 2.22079E02 1.59522E03 2.91176E03 1.97892E02 5.92738E03 7.34036E03 2.28845E03 8.67138E03 1.37568E04 1.15135E04 6.97291E03 3.94458E03 6.06414E03 5.56253E03 1.15547E04 2.13741E03 1.59846E04 2.44818E04 1.99999E04 1.24402E04 7.70071E03 7.63289E03 8.92091E03 1.36943E04 1.09919E04 9.66664E03 3.51076E03 1.31942E01 1.46062E03 5.03444E03 3.70937E03 3.57332E03 1.33025E03 6.77639E03 5.37265E03 1.20376E03 5.40849E01 8.72188E03 1.87303E04 1.42781E04 1.66582E04 1.26633E04 5.76246E03 4.34117E03 6.26388E03 7.66081E03 1.89057E03 1.97822E03 3.96099E03 2.62346E03 9.26782E03 1.95277E04 2.19365E04 6.81788E03 1.37007E03 1.92419E04 3.38403E04 1.60530E04 2.89253E02 8.05570E03 9.98246E03 2.49118E02 9.96857E03 1.48867E04 1.12470E04 8.65289E02 1.85994E04 4.90428E04 2.26679E04 8.14536E02 5.70117E03 8.83010E03 4.98408E03 5.43554E03 1.41522E04 7.54015E04 5.64717E04 6.26106E04 3.08128E05 6.13306E05 4.95727E05 3.77260E05 7.16915E05 6.78031E05 1.00352E05 3.50699E04 1.84258E05 1.74750E05 8.41754E03 1.49743E03 5.08960E03 3.09192E01 1.72740E04 5.45583E04 4.72308E04 9.36683E03 2.93720E03 3.35032E03 3.07395E03 2.95461E03 4.13374E03 1.70576E04 2.24989E04 1.70228E04 5.81814E03 2.38744E04 1.96669E04 1.23042E04 1.27664E04 2.41977E04 1.33139E04 2.02808E03 1.50590E04 1.85114E04 6.32275E03 3.34388E03 9.21983E02 1.12690E03 2.49159E03 8.01936E03 5.21440E03 2.40624E03 2.14644E03 6.77379E02 1.82146E03 9.69276E03 1.64674E04 9.07294E03 2.99562E03 2.90004E03 1.46947E04 1.39978E04 3.25999E03 8.66753E02 -Frame 257 5.13800E05 3.52849E05 8.39868E04 2.14544E06 2.69850E06 5.75215E05 8.65401E05 1.05018E07 9.29507E06 9.49696E05 4.75756E06 2.35413E07 1.33898E07 5.92510E05 4.62830E07 1.21912E08 4.04715E07 1.86802E05 4.25441E06 6.40992E06 1.21135E06 1.29602E06 1.40303E07 1.45696E07 1.41769E06 7.52948E06 3.74494E07 2.35492E07 2.76903E05 7.27287E06 1.72292E07 6.37587E06 1.00941E07 1.13058E08 1.22840E08 1.65233E07 1.12964E05 1.85819E06 2.57588E06 1.18613E05 1.29468E05 9.13256E05 9.80600E05 3.04813E03 2.43832E05 1.02488E06 4.25009E05 2.57209E02 6.97410E04 4.74908E05 5.91305E04 1.10480E05 3.89907E05 5.23162E05 1.81585E04 1.74155E05 6.00179E05 3.60797E05 2.37977E04 6.33144E04 3.25178E05 1.78459E05 7.34942E03 2.08008E05 3.01264E05 4.94700E04 4.38924E04 5.60465E05 4.95418E05 3.38604E04 2.57487E05 1.41486E06 1.33113E06 4.20200E05 1.15808E06 1.12984E07 1.36257E07 2.02660E06 3.93648E05 1.56679E06 2.73660E05 5.43452E04 5.94422E05 7.21540E05 9.60225E03 6.36750E04 3.73909E05 3.69555E05 1.02645E04 3.90157E04 1.88925E05 1.81953E04 1.08645E05 3.53420E05 1.32868E06 6.30836E05 2.02489E05 2.80904E05 3.86100E05 1.52746E05 1.03018E05 1.83257E05 3.17402E05 2.63996E05 9.87298E04 5.53723E04 1.70317E03 4.43535E03 1.57616E03 1.12275E04 8.21077E03 4.99923E03 4.18208E03 1.02532E04 4.41696E03 1.80108E02 3.24188E03 6.31726E03 1.24902E04 2.54018E03 7.62908E03 1.32677E03 3.28500E03 1.95149E04 2.01260E03 1.24309E04 2.65603E04 6.45064E03 1.58155E04 1.06253E04 3.06869E03 6.72270E03 6.52229E03 2.92554E04 6.84935E03 9.59827E02 1.96565E03 4.02743E04 4.22874E04 3.20586E04 1.68741E04 1.78568E03 8.29845E02 3.04000E04 4.08043E03 8.12570E02 6.13945E03 2.51387E04 3.50550E04 2.49207E04 1.84073E04 7.87599E03 9.55137E03 1.00692E03 4.77589E03 2.16278E03 6.54681E02 1.55401E03 4.55525E03 3.97067E02 1.78870E04 9.08452E03 1.55306E03 6.01696E02 8.99364E02 6.03707E02 1.56407E03 3.63776E02 5.31690E03 2.10693E03 7.02211E02 7.73127E02 1.25624E04 3.64646E04 2.59701E03 1.67822E04 1.35044E04 6.72827E03 7.79322E03 1.09509E04 3.90441E04 1.38041E04 8.89127E03 1.02700E04 2.37938E04 6.50923E03 7.35345E02 5.59130E03 2.21739E04 2.84995E03 1.27418E04 2.86560E04 1.37668E04 3.82995E03 1.33657E04 2.49538E03 1.28049E03 3.64338E03 9.69812E04 1.64002E05 1.77330E04 3.34021E05 3.51187E05 7.62607E04 1.03203E04 1.76147E05 4.65295E05 8.61263E04 2.97739E05 4.33674E05 1.91295E05 1.03979E04 5.65562E03 2.62599E04 3.56215E04 1.57359E04 2.52682E03 8.72108E03 8.56406E03 2.99784E03 1.91712E03 1.89277E03 4.91346E02 1.00736E04 1.29927E04 4.49123E04 6.63885E03 2.26327E04 2.86211E04 2.45520E04 9.86175E03 5.99782E03 2.31765E04 7.53750E04 1.75429E04 1.79530E04 4.76420E04 3.39047E04 1.05819E04 1.91153E03 3.88494E03 5.15138E03 1.93134E04 4.99526E03 8.85222E03 5.95703E03 1.53629E02 3.36701E03 1.31904E02 6.05305E03 4.88074E03 2.49114E03 3.77543E03 2.60457E04 5.21806E03 3.76097E03 6.93837E03 -Frame 257 1.88589E05 7.39242E04 2.95688E04 1.39476E06 2.88767E06 5.33033E05 1.05911E06 9.77527E06 9.17819E06 1.12112E06 4.99327E06 2.32115E07 1.34298E07 8.15086E04 4.43898E07 1.13911E08 3.74068E07 6.96489E05 3.05248E06 5.05498E06 9.22860E05 1.37508E06 1.42964E07 1.47421E07 2.02556E06 7.53046E06 3.60938E07 2.02693E07 1.05193E06 7.77484E06 1.93607E07 6.29068E06 5.79123E06 7.19820E07 8.24500E07 1.13550E07 1.72741E05 2.18170E06 1.71601E06 1.89117E05 1.23351E05 6.64946E05 3.60523E05 1.54915E04 3.12695E05 5.05135E05 1.39561E05 2.04893E04 2.92849E05 4.02689E05 7.56599E04 2.03729E03 1.55208E05 2.12102E05 1.20896E04 1.42211E05 5.29524E05 2.66041E05 4.95601E04 8.47249E04 1.74856E05 8.33074E04 1.16121E04 1.79842E05 2.22397E05 9.19464E04 8.76359E04 4.64641E05 4.98863E05 1.60654E05 1.79300E03 2.29185E05 1.86550E05 2.05776E04 1.45556E06 7.15154E06 7.16078E06 1.81643E06 6.06144E05 2.10876E06 8.63725E05 4.94920E05 1.93901E06 1.79046E06 4.37106E05 2.52234E05 5.19373E05 1.65216E05 3.25988E03 1.40711E05 2.77191E05 1.11088E05 4.68903E04 1.29467E05 2.91456E05 1.00970E05 3.29901E03 1.27456E05 1.57350E05 4.02619E04 1.45382E05 3.99543E05 1.07437E06 1.17836E06 3.00592E05 1.33022E04 5.69707E04 2.78938E04 7.99989E04 5.26281E04 2.64944E04 1.59538E04 9.49349E03 4.42450E03 6.23579E03 4.06913E03 1.27548E04 1.02152E04 2.35735E03 5.13662E03 1.69813E04 1.52440E04 1.98531E04 3.34199E04 9.09464E03 9.98320E03 1.21499E04 3.50265E03 9.16977E03 1.14235E04 3.89416E04 6.40277E04 2.82701E04 4.68575E04 5.15692E04 2.74867E04 5.66358E04 1.27924E05 2.19490E05 2.91439E05 2.42897E05 1.49456E05 5.85966E04 6.89548E03 3.75639E03 1.75990E03 2.66584E03 6.31280E03 5.30370E04 8.40598E04 1.91898E04 5.39006E03 1.35032E04 3.07134E03 2.53957E02 8.42524E02 3.88407E03 1.11938E04 8.75722E03 7.76396E03 9.44106E03 2.77143E03 4.92281E03 1.27028E03 4.40243E02 3.65962E03 1.01182E04 1.23610E04 1.72862E04 4.76562E03 3.06324E03 5.50603E03 3.22833E04 3.70464E04 2.31185E04 1.04403E04 3.17778E04 1.56512E04 1.43224E04 1.42825E05 2.35924E05 1.47156E05 6.54560E04 1.40016E04 1.27183E04 3.50258E03 4.39327E03 2.10981E03 2.61523E03 1.68606E04 9.85802E03 3.13731E03 1.37709E04 1.30347E04 5.07743E03 2.29283E03 2.58524E03 2.30155E04 9.90005E04 1.13367E05 1.46928E05 2.04573E05 1.99734E05 1.41712E05 1.64524E05 2.39847E05 8.18872E05 8.13173E05 4.29206E05 5.46479E04 6.75282E04 5.02710E04 5.26644E03 7.14045E03 3.65461E04 4.22285E04 1.79451E04 5.25278E03 1.23053E03 3.01989E03 2.31056E01 2.18599E03 1.50639E03 3.94596E03 2.35427E02 1.73286E04 2.11908E04 5.70928E03 7.00011E03 1.10310E04 1.73163E03 1.77997E04 7.63153E04 8.02097E04 5.24288E04 6.05953E03 1.96406E04 2.06185E04 1.39889E03 1.27792E04 2.35662E04 4.68134E04 3.19739E04 9.17575E03 1.80226E04 8.27344E03 8.87342E02 1.28762E03 1.09753E03 7.02980E03 3.67231E03 4.91105E03 1.68482E04 1.34642E04 7.52871E03 1.34138E03 2.69158E03 -Frame 257 3.22641E03 4.38774E04 2.40677E05 2.01844E06 2.74562E06 5.65000E05 1.33029E06 9.06122E06 7.61596E06 9.47834E05 5.88192E06 2.16604E07 1.02417E07 1.27825E06 4.63759E07 8.46262E07 1.84973E07 5.52628E05 3.38590E06 3.37594E06 7.13424E05 2.54822E06 1.33344E07 8.15906E06 1.16736E06 9.36585E06 2.85475E07 1.08865E07 6.11788E05 1.03267E07 1.68252E07 5.16795E06 3.48983E06 4.43946E07 3.58069E07 3.62741E06 3.98335E05 2.00556E06 7.77604E05 8.84116E04 1.84970E05 4.59275E05 1.14602E05 5.98456E03 1.87078E05 2.86292E05 7.03383E04 8.23660E04 3.88203E05 2.22990E05 6.74153E04 1.22626E05 2.96052E05 1.48834E05 3.29738E04 2.32036E05 2.93093E05 7.73640E04 4.58704E04 1.50262E05 1.06874E05 2.29642E04 2.71374E04 1.37901E05 1.03968E05 4.58215E04 1.63513E05 2.84172E05 5.55946E04 4.41381E03 8.89138E04 1.10770E05 5.14950E04 1.32846E05 1.24264E06 9.24566E05 3.04111E05 2.76646E05 2.31259E06 3.14653E06 1.27565E06 6.95660E05 3.10054E06 9.86782E05 2.38351E05 4.49056E05 4.37512E05 6.49677E04 2.65471E04 1.46148E05 1.72203E05 1.09023E05 1.12443E05 1.91626E05 4.87116E04 1.33485E04 1.52752E05 1.53910E05 8.05723E04 8.64519E04 4.42009E05 3.53402E05 3.93892E04 3.20556E05 9.45825E05 3.78280E05 1.42862E05 2.05470E05 3.43219E05 1.72490E05 1.11418E05 1.68176E05 7.17762E04 2.71471E04 3.75684E04 4.40775E04 5.51298E03 2.28313E03 8.14735E03 9.89650E03 9.68124E03 7.11981E03 1.83398E04 2.86170E03 1.91493E03 1.64430E03 2.31036E03 1.31654E03 1.74915E03 7.85603E03 2.30919E04 2.25740E04 1.04630E04 2.82589E04 5.33405E04 6.69858E03 2.28761E03 2.14785E04 7.33107E03 6.39172E04 6.29371E03 2.70045E05 1.62314E05 6.02429E03 8.70177E03 1.21725E04 9.34515E03 7.18160E03 4.05132E04 2.45954E04 1.24231E03 1.10727E04 7.14806E03 2.72415E03 3.01276E03 1.10703E03 2.61911E02 1.20479E04 9.68246E03 9.27669E02 8.77926E03 1.62433E03 1.37689E03 6.13802E03 3.44155E03 5.34482E03 5.65742E03 1.86106E04 1.25412E04 6.25183E03 5.90112E02 4.25172E03 7.27447E03 2.31591E02 1.28193E04 7.33382E03 4.43204E03 9.68530E03 3.28906E04 7.11780E04 1.06005E05 2.70294E03 5.41701E04 4.69968E04 4.90374E03 1.07985E04 6.11293E03 6.63658E03 5.55932E03 2.88936E03 1.20881E03 2.62655E03 9.13379E03 2.18313E03 1.30561E03 4.60969E01 2.71179E01 1.16540E04 5.00417E04 3.96822E04 3.13520E04 2.31410E04 9.85158E04 8.94873E04 1.93583E04 5.42176E05 7.49685E05 1.52216E05 1.31839E05 1.23819E05 4.63320E04 1.74006E04 3.31079E03 8.17057E03 2.84213E03 1.18989E04 1.39132E04 1.17317E04 1.07392E04 9.31461E03 1.36118E04 1.23253E04 7.63951E03 4.30536E03 8.98202E03 3.95610E03 3.16294E03 1.62025E04 1.85772E04 8.94196E03 8.44310E03 3.18591E04 3.66565E04 9.71543E03 1.10521E04 1.50259E04 4.25136E03 4.46211E02 2.95062E03 8.30826E03 7.70137E02 9.11723E03 2.89986E04 3.40196E04 1.78654E04 3.39198E03 3.02714E02 1.12158E03 2.14078E03 5.52347E03 6.89385E03 5.57965E03 7.95601E02 3.23746E01 3.51222E03 4.98645E03 3.61291E03 -Frame 257 1.53732E05 6.92299E04 4.71417E04 1.45795E06 2.78756E06 4.55553E05 1.30019E06 8.33248E06 5.81049E06 1.11612E06 7.23413E06 1.86517E07 5.82442E06 3.29847E06 4.17399E07 5.31900E07 8.07032E06 6.85850E05 2.83074E06 1.90639E06 2.34472E05 2.75930E06 9.92737E06 4.29566E06 1.25568E06 9.51456E06 1.64595E07 4.19235E06 1.81492E06 9.74452E06 6.22386E06 1.07662E05 1.08151E07 3.60408E07 1.39335E07 9.39799E05 9.36565E05 1.50583E06 2.58124E05 3.34045E04 2.63108E05 2.49703E05 9.41471E04 1.48378E05 2.78192E05 1.32540E05 2.54497E04 1.36013E05 2.47918E05 3.58117E04 3.05754E04 1.58107E05 1.47121E05 2.97963E04 1.90866E04 1.56302E05 6.74803E04 1.25808E04 4.55793E04 7.39569E04 2.59432E04 2.59536E04 1.15704E05 8.19973E04 2.37231E04 5.88968E04 1.53502E05 8.69318E04 2.32724E04 4.64491E04 6.04977E04 5.93064E03 3.05522E04 3.58420E05 4.44471E05 1.20929E05 2.63276E05 9.75483E05 5.30185E05 3.18889E04 1.82990E06 6.03251E06 3.06720E06 5.62954E05 4.48865E05 4.10178E05 1.73243E05 5.75367E04 9.98161E04 2.45874E04 1.18963E03 3.84359E04 1.33400E05 4.78464E04 2.44696E04 8.19960E04 1.14738E05 7.02469E04 1.09959E05 3.22789E05 2.90886E05 1.46961E05 2.40059E05 6.30705E05 3.59289E05 2.19717E05 1.59143E05 4.24367E05 4.35452E05 1.93412E05 3.95708E05 3.13642E05 3.81990E04 1.83597E04 7.09224E04 4.07199E04 4.53226E03 4.06426E03 1.02462E04 6.87811E03 4.05960E03 1.57057E03 9.96623E03 2.03692E04 2.21261E04 2.43215E04 6.89494E03 5.76237E02 8.32877E02 4.51679E03 1.14073E03 1.58938E04 3.34653E04 5.35938E04 1.84449E04 1.57325E04 5.75283E04 8.87727E04 9.63819E03 1.23269E05 5.15530E05 4.25280E05 3.73543E04 5.42900E04 8.68307E04 3.01193E04 1.43418E04 5.14547E04 6.48944E04 2.08032E04 2.31305E03 4.76971E03 3.87403E04 3.92376E04 7.59449E03 8.04211E02 6.04998E02 7.01893E03 2.50259E04 3.24845E04 2.19441E04 5.62269E03 2.83754E03 1.85484E03 7.68090E03 2.17286E04 2.20246E04 8.54634E03 6.56484E02 3.23233E03 8.36545E03 2.42989E03 3.13271E03 9.89774E03 7.17169E03 3.15103E03 1.21796E03 5.54890E03 2.26955E04 7.42995E04 1.47691E05 6.34254E04 7.19188E03 4.77563E03 2.42526E04 2.30605E04 2.73286E04 3.08140E04 1.87499E04 8.19268E03 8.71699E03 1.11613E04 1.20569E03 4.38078E03 3.00629E03 2.33707E02 1.44334E02 9.26445E03 2.27283E04 8.87057E03 8.85117E03 6.27709E04 4.00004E04 5.37727E03 1.56866E04 1.75670E05 2.52857E05 7.87662E04 1.19200E04 2.68270E03 2.30601E03 1.69339E03 6.81552E03 1.11098E04 5.38166E03 2.43299E03 5.62802E03 8.38681E03 8.83372E03 1.36408E03 3.13869E03 1.11107E04 5.53246E03 2.48443E03 7.58936E03 5.84178E03 6.56554E02 2.01395E04 4.37230E04 6.78991E03 9.77664E02 3.86486E03 1.23283E04 3.16820E03 4.96723E02 2.39206E03 1.01904E03 2.68228E03 1.00028E04 2.05179E04 6.07115E03 2.31476E03 1.20333E03 3.38540E02 2.58384E03 9.10160E02 9.56289E02 4.90531E03 4.90198E03 3.49902E03 2.00289E03 2.00241E03 5.04691E02 4.96843E02 4.17880E03 6.86260E03 3.88338E03 -Frame 257 2.29940E05 1.29894E05 2.61757E05 2.16052E06 2.63409E06 3.91624E05 1.26096E06 7.25220E06 4.59060E06 7.87633E05 6.42199E06 1.46689E07 3.56086E06 2.95434E06 2.84484E07 3.06849E07 3.76432E06 6.24221E05 1.72160E06 8.82016E05 2.18951E05 2.95301E06 6.61639E06 1.63787E06 8.69745E05 5.77631E06 5.71677E06 1.06641E06 2.40758E06 9.06745E06 4.19824E06 7.42782E05 1.02011E07 2.57492E07 7.41176E06 2.85935E05 6.93133E05 7.42460E05 1.15630E05 6.57229E04 1.62210E05 1.53120E04 1.72902E04 1.13526E05 1.50441E05 3.77517E04 4.97886E04 1.44390E05 1.06032E05 5.97016E04 8.60765E04 1.40846E05 1.10612E04 5.31240E03 6.72922E04 1.30068E05 3.39919E04 2.13613E04 4.65339E04 1.20397E04 2.21341E03 4.36008E04 1.46157E05 4.85795E04 7.82181E03 2.62865E04 1.37120E04 7.45236E03 3.59448E04 9.81916E04 2.21358E04 9.79136E03 1.06434E05 2.29142E05 1.00059E05 1.63723E05 4.07366E05 2.78234E05 9.06854E04 4.53930E05 2.86947E06 3.25297E06 1.67866E06 6.08751E05 6.65588E05 6.69810E04 7.52599E03 1.21659E05 1.62509E05 4.36248E04 9.32747E04 1.17687E05 2.49144E04 8.83880E03 4.80757E04 8.73904E04 3.43385E04 2.19794E04 1.14012E05 4.58020E04 1.60568E04 3.44540E04 2.50721E05 1.65473E05 6.02272E04 1.50839E05 1.23411E05 9.12861E04 7.91565E04 6.53300E05 8.04535E05 2.47804E05 1.03955E05 8.82999E04 1.32276E04 1.59487E04 1.39637E04 1.55464E04 4.46889E02 3.34381E03 2.74846E02 4.79410E03 3.94460E03 1.76670E02 7.31761E03 1.38673E03 2.64096E03 2.57507E03 3.13709E03 4.44095E03 4.54897E03 6.79710E03 4.21700E04 4.38034E04 5.52457E03 1.03523E04 5.28109E04 9.09368E04 1.19093E05 1.16955E05 2.37297E05 1.87339E05 1.04217E05 8.29576E04 5.92987E04 6.54330E04 2.24193E04 4.26744E04 7.99334E04 2.96075E04 5.82655E03 9.00187E03 2.15373E04 2.47574E04 1.30878E04 4.12320E03 2.17567E03 4.47754E03 4.47190E03 3.52499E02 6.44001E03 7.19896E03 6.22003E03 1.28751E04 2.97515E04 3.39019E04 5.45011E03 1.57227E04 2.69121E04 2.26471E04 2.68975E03 5.74615E02 1.31441E03 1.05615E03 2.97646E01 5.33310E03 2.80525E03 3.74590E03 2.49471E04 5.56124E04 3.91910E04 2.41774E04 3.78720E03 9.38120E01 2.82244E04 4.53683E04 7.10409E04 2.06358E04 6.92785E03 3.00897E02 5.72644E02 7.96380E03 2.15031E04 1.29150E04 6.62070E03 1.86514E04 2.41863E04 1.61045E04 4.26040E03 4.59797E03 2.76676E04 3.40600E04 1.04021E04 1.87472E03 7.29210E03 2.07377E04 1.04225E04 6.40530E03 2.55699E03 2.72422E03 3.00351E02 1.25545E03 1.36560E03 1.31382E03 9.86875E02 2.58708E03 2.05945E03 9.37670E02 4.52015E02 6.31402E02 2.77262E02 9.92455E03 1.28172E04 1.46536E04 1.54201E04 6.00823E03 5.09993E03 1.30178E04 4.43813E04 6.47302E04 3.12936E04 1.34770E04 2.77853E03 3.02004E03 1.43860E03 5.41498E02 8.15118E03 1.04421E04 1.47743E03 2.21259E04 1.46899E04 1.78095E03 9.81820E02 5.62686E02 3.81788E02 1.29222E03 1.90884E03 4.63340E03 1.45832E03 1.54616E03 3.39385E03 1.64035E03 1.05446E03 1.27959E03 4.34329E01 1.74130E03 3.22169E02 -Frame 257 9.37158E02 5.22376E04 4.72454E04 1.60313E06 2.53942E06 2.66140E05 1.28817E06 6.11927E06 3.47072E06 4.43128E05 6.04209E06 1.04451E07 2.11118E06 2.98108E06 2.20479E07 1.84550E07 1.41781E06 5.35502E05 9.82622E05 2.33147E05 2.99343E05 2.98827E06 3.54880E06 4.56704E05 9.88549E05 2.87037E06 1.22804E06 3.78797E05 2.50116E06 5.73722E06 1.89872E06 1.23649E06 1.18939E07 2.38365E07 5.88291E06 1.23317E05 5.57024E05 1.06666E05 5.16725E04 9.38966E04 8.12005E04 3.24164E02 6.86926E04 2.25012E05 1.20808E05 3.43302E03 2.62481E04 3.49932E04 9.92394E03 8.18096E03 7.39342E04 6.97119E04 8.63135E03 2.14463E04 5.89179E04 2.82423E04 2.99952E04 4.53756E04 3.33336E04 8.51555E02 7.35751E04 1.53528E05 9.23501E04 7.49705E03 1.99741E04 2.62115E04 1.34558E03 2.79139E04 1.25369E05 9.64411E04 9.38467E03 9.63376E04 1.42072E05 1.56950E04 4.34729E04 2.24783E05 2.66845E05 6.06728E04 3.98140E05 1.25053E06 2.93643E05 3.07864E05 4.53687E05 1.44527E06 4.95638E05 1.92379E05 2.59809E05 6.21999E04 4.69486E04 1.02203E05 1.16033E05 1.41132E04 4.74992E04 9.56202E04 2.37536E04 2.10733E04 6.57079E04 6.21384E04 4.50570E04 5.09635E04 8.47769E04 4.34013E04 2.09879E04 1.41699E05 1.71246E05 1.23794E05 6.82019E04 2.28584E05 4.71169E05 2.30219E05 1.64183E05 1.22422E05 1.55937E05 7.05949E04 2.76603E04 1.40247E05 4.17084E04 6.58980E04 1.45332E05 5.28403E04 4.92136E02 1.42581E04 1.07291E04 3.09532E03 1.22068E04 1.28085E04 4.81116E03 3.12685E03 5.63787E03 3.93856E03 4.03686E03 5.08556E03 1.15348E04 1.44932E04 1.39162E03 2.07245E04 5.59151E03 1.86972E03 2.14637E03 2.88815E04 9.46253E04 1.09922E05 8.71308E04 7.49737E04 4.43873E04 1.46559E04 2.44749E02 3.02693E03 1.08591E04 3.86623E04 1.50511E04 8.98847E03 5.73446E03 6.65712E03 7.89904E03 9.86818E03 1.29299E04 8.24428E03 1.99641E03 3.97624E03 1.65957E04 1.91822E04 5.73113E03 5.57674E03 7.62990E03 3.40846E03 8.08366E02 9.21105E03 3.98389E04 3.21009E04 2.96994E03 1.90279E03 2.21554E03 3.71771E03 3.56223E03 2.42474E04 4.81700E04 1.48076E04 8.44646E03 2.46229E04 7.65105E03 1.86061E03 6.85607E04 1.52364E05 1.38808E05 4.14654E04 8.26730E04 3.74044E04 5.52051E03 7.98090E02 9.41702E03 1.62439E04 1.65628E03 1.13894E04 1.41046E04 1.04669E04 9.19832E03 1.97941E04 9.13620E03 1.80971E02 2.08434E04 1.13830E04 9.10341E02 1.93875E03 7.60793E01 7.88901E03 1.47982E04 9.57371E03 1.47669E03 4.17902E03 7.85137E03 6.13475E03 3.68034E03 1.55445E03 1.54288E03 1.15705E03 1.46438E03 1.67616E03 1.08495E03 2.16121E03 9.76563E03 3.94765E04 2.97248E04 4.31305E03 5.37251E03 1.52137E03 1.88368E03 4.67515E03 1.88260E04 4.64652E04 8.30602E03 1.30234E02 1.90751E03 6.14031E03 3.83440E02 1.73583E04 3.90178E04 1.30307E04 9.81812E03 3.42258E04 2.46794E04 6.18355E03 5.51972E02 1.13170E01 9.77693E01 1.36465E03 6.42914E03 7.77617E03 6.39820E03 6.32501E03 1.01169E04 9.24502E03 3.75330E03 2.46404E03 3.62566E03 2.60816E03 2.24130E03 -Frame 257 3.68691E04 3.00921E04 2.41900E05 2.36425E06 2.47394E06 2.48458E05 1.27616E06 5.31153E06 2.43476E06 2.09543E05 5.66972E06 7.58150E06 1.11951E06 3.11467E06 1.78611E07 1.20685E07 5.91743E05 5.06218E05 6.15726E05 4.57637E04 2.63141E05 2.34699E06 2.41424E06 1.12670E05 5.76317E05 1.38278E06 2.92308E05 2.01358E05 1.73779E06 1.95704E06 1.16961E05 1.05647E06 7.17073E06 9.83349E06 5.95128E06 4.53576E06 3.49547E06 1.10868E06 2.20263E05 4.17841E05 2.55198E05 2.08278E04 8.35140E04 1.63042E05 2.39654E04 5.65241E04 1.21160E05 7.46045E04 7.90637E04 8.47610E04 1.26602E05 3.96092E04 1.24699E04 3.60623E04 1.83357E04 5.96893E03 2.18004E04 8.55278E04 6.63575E04 1.07131E04 4.51364E04 1.73899E04 2.11431E04 4.68748E04 8.21367E04 3.87239E04 2.20927E03 5.59053E04 7.46101E04 7.51784E03 5.88806E04 1.47146E05 1.01988E05 2.58122E03 1.48948E05 2.17164E05 5.45366E03 2.02160E05 7.66367E05 8.31304E05 5.87920E05 1.80219E06 2.43990E06 3.24717E05 9.53138E04 2.03330E05 1.85854E05 6.25950E04 1.46076E04 6.84220E04 3.56506E04 3.93870E04 9.97663E04 1.12713E05 5.56342E04 1.39780E04 5.49990E04 1.86478E04 3.01200E03 1.80708E04 4.34359E04 1.95426E04 1.05220E04 7.49724E04 6.16357E04 3.84253E04 9.03780E04 1.69655E05 1.07547E05 3.26839E04 6.28403E04 6.70349E04 1.65734E04 2.37084E05 3.69461E05 2.72543E05 2.82403E05 9.14336E05 8.54184E05 1.34694E05 4.61736E04 5.18265E04 4.16793E03 7.28353E03 1.43020E04 6.60890E03 2.94638E03 3.01629E03 1.82203E04 2.74755E04 1.57138E04 2.00725E03 9.00713E02 1.17662E04 1.70795E04 1.69634E04 1.64310E03 1.43962E04 4.63338E04 6.28631E04 4.60545E03 1.64488E05 4.96645E04 1.06541E05 2.46843E04 2.67512E04 3.99749E04 2.59699E04 3.08860E04 7.38710E03 2.16353E03 9.97912E02 8.84690E03 2.57937E04 9.34637E03 2.75010E03 1.38347E04 2.83184E03 2.14040E03 4.47455E01 5.42172E03 3.44892E03 1.89834E02 9.68451E03 1.77659E04 9.77374E03 9.59955E02 3.22915E03 4.99087E03 4.93710E02 2.30728E04 3.22695E04 8.64481E03 7.23620E03 3.45770E04 2.70872E04 2.71627E03 6.21108E04 1.12451E05 2.10110E04 1.95216E04 6.84368E04 5.66759E04 1.54571E04 2.28388E05 2.52114E05 1.15639E05 1.13639E04 2.73967E04 1.63263E04 4.78723E03 4.52053E04 7.99755E04 2.87911E04 8.66962E03 4.22605E04 3.66319E04 4.96034E03 2.16035E04 4.46144E04 2.95958E04 6.33795E03 5.13449E03 4.56609E03 9.69554E03 1.08841E04 6.80838E03 2.05855E03 1.32109E03 2.40433E03 6.57167E03 5.09183E03 1.39142E03 4.40922E03 5.48459E02 2.39293E03 1.35171E04 1.92648E04 9.90874E03 1.42516E03 3.94321E04 5.81221E04 2.41741E02 7.56634E04 8.79763E04 3.97416E04 3.41479E03 2.41066E04 5.53783E04 1.00373E04 1.64683E04 3.09534E04 2.11673E04 7.92718E02 1.18724E04 4.57110E04 3.40718E04 1.17941E04 2.52367E04 2.44264E04 3.02675E03 1.51924E03 6.46421E02 1.01113E02 7.37834E02 3.35985E03 4.11023E03 9.73866E02 1.12511E03 3.30264E03 4.78203E03 1.09446E03 1.42773E03 1.14207E03 3.29346E02 2.96795E02 3.25798E01 -Frame 257 4.63258E04 6.86578E04 6.95189E04 2.14715E06 3.04868E06 4.18927E05 1.15576E06 4.61201E06 2.41741E06 7.36770E04 4.91493E06 6.69025E06 1.17088E06 1.92132E06 1.15444E07 8.68573E06 4.66610E05 3.80693E05 6.51949E05 1.95434E05 1.64513E05 1.28717E06 1.70003E06 2.58149E05 5.26559E05 9.03564E05 3.69679E05 1.73931E04 7.42431E05 1.18692E06 3.76703E05 2.62910E05 1.09234E06 3.45651E05 2.83074E04 2.43877E05 2.39964E06 2.87545E06 5.57951E05 4.84779E05 8.93125E05 2.15632E05 3.65478E05 7.61384E05 5.15357E05 1.84777E05 3.05909E05 4.26809E05 1.23886E05 1.00119E04 9.43850E04 3.32916E04 1.01318E04 9.15384E04 1.10136E05 5.42570E04 1.21189E04 6.27475E04 4.49901E04 1.71753E03 1.98777E04 8.16730E04 5.70252E04 3.14946E04 9.48949E04 7.17433E04 3.91480E03 5.71099E04 1.64977E05 1.34923E05 3.63279E04 1.28010E05 1.27813E05 5.04859E03 1.55704E05 4.34186E05 2.83840E05 1.91953E04 4.28158E05 2.17909E05 6.20224E04 1.09048E06 2.44091E06 1.36552E06 2.36199E05 1.20534E04 3.38466E04 1.02440E04 4.27320E04 5.95829E04 5.82624E04 1.23919E04 4.61560E03 9.34996E03 2.61242E03 1.88727E04 3.15552E04 2.58406E04 4.35492E03 5.62001E03 1.08916E04 1.68748E03 2.34886E04 5.38770E04 2.01787E04 1.29111E03 2.10825E04 4.58152E04 1.38485E04 2.58025E04 1.14648E05 1.77279E05 6.32721E04 2.07564E04 1.32581E05 3.61267E04 2.44552E05 9.87967E05 7.89385E05 1.61963E05 4.25047E04 3.35402E04 1.86698E04 5.62451E03 3.63013E02 1.58221E03 4.88234E03 9.76154E03 3.24136E03 1.75828E04 2.46717E04 9.09114E03 2.40687E03 3.71604E03 5.30096E03 5.50852E03 2.72716E04 3.53241E04 2.10233E03 4.87539E04 5.57076E04 4.47893E05 1.15230E06 8.23692E05 2.13617E05 5.66971E03 2.75069E04 2.31289E04 2.98072E04 5.04123E04 2.70152E04 8.33606E03 1.01290E03 9.84668E03 1.68714E03 2.67592E03 1.70643E04 1.58623E04 1.70896E03 3.51045E03 2.44089E03 1.26514E03 2.01105E03 1.10059E04 3.14923E04 1.68907E04 1.56713E03 4.42298E03 1.54420E04 5.80295E03 3.87065E04 7.38261E04 3.42842E04 4.98289E02 1.07940E04 2.33329E04 1.95933E04 2.18844E05 3.57614E05 1.31970E05 5.17836E03 2.63993E04 6.34413E04 1.35457E03 1.96302E05 4.52010E05 2.19958E05 2.83973E04 8.01773E02 2.26951E04 1.46260E04 1.11422E04 6.61833E04 5.16580E04 7.34091E03 2.95437E04 7.36517E04 4.98761E04 1.92666E04 9.49241E03 1.13576E03 3.69261E03 2.70265E03 6.51609E02 2.92831E02 8.14784E02 1.10399E02 8.10069E02 8.38326E01 4.57349E02 3.72090E03 8.07247E03 2.47568E03 7.24409E02 5.07452E03 1.90128E03 1.81249E03 1.11406E04 1.11091E04 4.36483E02 2.85228E04 5.87068E04 5.95092E04 1.01328E05 7.44157E04 3.41883E04 5.21061E03 1.43252E04 4.46356E04 2.19593E04 1.05153E04 1.97862E04 2.74652E04 1.76219E04 5.55463E03 1.14742E04 1.20464E04 4.08177E03 9.89294E02 1.47761E04 2.36936E04 6.35234E03 1.50361E03 1.06443E03 1.61381E03 7.81283E03 1.22779E04 4.83716E03 4.85033E02 2.13228E03 1.97597E03 2.36618E03 2.08674E03 2.55865E02 2.46119E01 6.99417E02 1.11476E03 -Frame 257 1.22077E04 2.56671E04 3.62484E05 3.10791E06 3.37399E06 5.00685E05 1.25883E06 4.40086E06 2.32753E06 8.44746E04 4.69686E06 6.25144E06 6.71636E05 1.68567E06 7.41573E06 4.35789E06 1.46202E05 3.29024E05 7.20459E05 2.37327E05 9.30718E04 6.25163E05 4.74624E05 7.93769E04 2.47350E05 9.54886E05 3.00833E05 4.34564E04 3.92243E05 4.71444E05 1.20558E05 7.74306E04 4.57407E05 2.40925E05 8.92258E03 3.43573E05 4.84252E05 1.43731E05 1.30650E05 8.49537E05 1.17560E06 6.65862E05 4.83382E04 1.56243E06 1.92771E06 6.00525E05 5.62075E05 1.22603E06 3.69238E05 1.86484E05 3.36789E05 1.99805E05 4.21917E04 8.34265E04 6.75874E04 1.05038E03 5.09256E04 5.00938E04 8.61111E03 1.19525E04 1.02156E05 5.88814E04 1.12283E04 1.04345E04 1.01248E05 4.92564E04 1.80370E03 8.57046E04 1.09749E05 3.25593E04 2.18403E04 1.39563E05 1.25664E05 2.20179E04 6.49516E04 1.76967E05 1.78495E05 1.76191E05 2.26648E05 4.14218E05 5.01465E05 6.03702E04 4.66236E05 2.67836E05 7.69869E04 1.76944E05 6.49168E04 5.86961E04 3.75372E04 9.46780E04 3.45659E04 3.62465E03 1.57514E04 2.96943E03 2.21232E03 1.17075E03 2.60042E04 1.15948E04 4.55112E03 2.20889E04 1.02530E04 7.20278E03 4.65763E03 2.47352E04 3.07044E04 6.71774E03 2.19919E04 3.00042E04 1.25522E04 2.16795E04 8.67422E04 7.51297E04 3.96922E03 1.57779E05 2.50646E05 1.58891E05 6.71085E02 7.09405E05 7.31444E05 1.45843E05 1.09236E05 8.30859E04 6.57091E04 4.10390E04 9.98302E03 1.50564E04 3.93531E04 7.93042E03 1.31881E04 8.75757E03 3.00806E04 4.46188E04 8.46712E03 8.21062E03 7.29146E03 5.86197E04 7.08115E04 1.50771E05 2.72025E05 9.20203E04 1.38637E05 1.03110E05 3.81925E05 7.43363E05 1.02752E05 1.03052E05 1.67935E05 1.56476E04 3.71120E04 1.47704E03 3.90995E04 3.10797E04 1.85073E03 1.77317E04 1.23165E04 6.09905E03 1.98233E04 2.49035E04 3.77355E04 4.78859E04 2.97574E04 2.04520E04 4.42489E03 2.67112E04 2.68723E04 2.07397E04 2.69152E04 6.02704E04 6.59884E04 2.50851E04 8.44783E03 4.92537E04 6.45109E04 6.95466E04 1.04999E05 2.85960E05 1.69692E05 4.80075E04 4.34403E05 2.48383E05 3.28752E04 9.09594E04 2.19490E05 1.59365E05 4.44697E04 5.43177E04 4.74320E04 1.14648E04 5.89548E03 4.72376E03 9.34371E03 9.52814E03 4.04640E03 5.83042E03 1.18116E03 8.95509E03 8.04673E03 7.17047E03 1.26529E03 9.31555E02 3.26580E03 5.37486E03 1.77380E03 2.91552E03 1.61286E03 2.92084E03 2.39042E03 2.86984E03 2.89747E03 4.06732E03 8.03624E03 8.52821E03 5.76593E03 4.47950E02 5.14735E03 1.50533E04 8.07947E03 1.19427E04 5.23327E03 4.25233E03 2.18942E04 1.14341E04 6.93417E03 1.09394E04 7.20492E03 5.23882E03 1.79834E04 3.40312E04 2.45337E04 5.70021E03 4.90700E02 1.59741E03 1.29579E03 2.97507E02 2.00071E03 7.36286E03 1.95523E03 3.34030E03 5.45943E03 1.95745E03 1.03035E04 1.38038E04 6.38662E03 1.99624E03 5.04214E02 8.72513E02 2.36499E03 1.18219E03 1.71183E03 8.09167E02 8.87700E02 1.52520E03 4.64224E02 2.86354E03 3.89082E03 4.42970E03 1.14619E02 -Frame 257 1.52751E03 4.06539E02 2.34635E05 2.27912E06 2.63546E06 6.33060E05 1.26731E06 2.94767E06 1.32070E06 4.50242E05 5.40440E06 5.22238E06 3.96086E05 1.33905E06 3.38347E06 1.27676E06 1.14564E04 3.37636E05 4.26679E05 1.43515E05 3.89302E04 1.73402E05 4.26059E04 3.78987E04 4.02005E05 8.32500E05 3.80899E05 3.83321E04 1.02920E05 3.48859E04 1.22648E03 5.30313E04 1.58314E05 7.99233E04 1.63561E04 9.89975E04 6.41974E04 5.55756E03 1.13003E05 2.79998E05 1.82328E05 4.61229E04 9.27114E05 1.22405E06 1.83762E05 6.53126E05 2.36418E06 1.95916E06 3.80770E05 1.09736E05 4.26834E05 1.11663E05 4.82184E04 1.66222E05 1.40912E05 2.86534E04 2.86981E04 7.65061E04 5.31939E04 1.48121E05 2.11399E05 1.67488E05 1.04180E05 1.22621E05 9.42495E04 2.79144E04 4.48431E04 1.04300E05 6.25288E04 1.77968E04 2.40000E04 3.61348E04 4.01445E03 2.94827E04 6.86042E04 5.85507E04 2.67483E04 9.33720E03 1.71709E04 2.48057E04 8.83748E04 5.30002E05 1.10437E06 7.15119E05 1.29925E05 4.79935E04 5.34110E04 1.17254E05 1.99333E05 1.21614E05 7.22482E04 6.57024E03 1.63137E04 1.73312E04 4.82420E03 1.24638E04 1.16223E04 1.20054E04 3.41816E04 4.51622E03 5.19817E04 5.50977E04 2.95389E04 1.06604E04 4.45289E03 2.52573E04 1.10662E05 8.11984E04 1.19757E05 4.30002E04 1.93785E04 1.08230E05 4.61124E05 5.42940E05 1.33596E05 3.94977E04 9.28368E05 2.44997E06 1.41327E06 1.29538E06 8.81345E05 1.83704E06 1.36407E06 3.16941E04 1.12319E06 3.09480E06 3.18057E06 1.89547E06 2.20499E06 1.53098E06 2.65953E06 3.09897E06 1.56205E06 1.72643E06 7.20663E05 3.22343E05 3.93056E05 3.83319E05 1.73032E06 7.30716E05 5.36237E05 1.45848E06 1.18368E06 1.19077E05 6.91481E05 7.72834E04 7.10412E05 5.59140E05 4.26897E04 1.18469E05 5.07799E04 1.51756E05 6.06144E04 1.33257E05 2.13348E05 3.20971E05 2.39430E05 6.14560E04 4.93473E04 2.02365E05 9.30353E04 1.53139E05 3.98554E04 3.47238E05 2.59647E05 1.84091E05 2.92103E05 6.35007E05 2.58115E05 7.00788E04 1.91077E05 5.87403E05 4.19132E05 6.99894E04 3.19673E05 4.74929E04 1.30667E06 5.23615E05 1.44589E05 1.96751E05 1.81268E05 1.28568E05 6.30461E05 2.34762E05 4.99561E04 5.60630E04 6.46284E04 1.33389E05 1.18393E05 5.83753E04 1.90117E04 9.04678E03 1.60490E04 8.59602E04 1.17783E05 3.86028E04 1.19995E04 3.97050E04 4.52042E04 4.67020E04 5.32507E04 1.95826E04 2.73251E04 4.53985E04 2.60495E04 1.79167E04 9.13232E03 7.88708E03 6.14595E03 6.92126E03 7.82571E03 3.31590E03 7.16535E03 1.19790E03 1.48084E04 1.58136E04 2.01230E04 9.67552E04 1.56465E04 4.02232E04 8.70361E04 5.30661E04 4.75414E04 4.46009E04 3.88635E04 4.53721E04 5.21351E04 2.61487E04 8.86174E04 6.21070E04 5.16314E04 1.58618E04 1.30570E04 2.04328E04 1.17576E04 2.35408E04 3.57885E04 8.87799E03 8.04363E03 1.05744E04 3.05459E04 4.27866E04 1.20166E04 8.41087E03 3.31695E04 2.98503E04 1.60160E04 2.36947E04 3.64111E04 2.65774E04 1.60566E04 1.35272E04 3.72726E04 1.22427E04 7.81239E03 1.57215E04 5.21347E04 -Frame 257 6.34971E04 9.26967E04 3.48637E05 8.27908E05 4.69152E05 4.32005E04 3.73432E05 5.11213E05 9.59807E03 1.07067E06 2.48249E06 8.68819E05 2.16784E05 8.28510E05 4.28440E05 1.19241E04 8.22481E04 1.27207E05 1.97391E04 1.16321E04 5.16722E04 3.16407E04 8.26772E03 2.95897E04 9.70990E04 8.30872E04 9.14030E04 4.41929E04 1.45171E04 2.08763E03 1.45737E04 1.74914E04 9.61493E03 3.07148E04 5.29255E04 2.85778E04 1.48105E04 3.79829E04 3.41458E04 2.32017E03 3.25010E04 1.59632E05 1.98694E05 3.51432E04 1.76911E05 2.97866E05 1.25167E05 9.87882E04 1.39431E05 3.45272E04 1.61920E05 1.36370E05 2.13712E04 2.18424E03 2.60900E04 2.32396E04 3.80408E02 4.80081E04 9.22373E04 1.05990E05 1.50831E04 3.97896E04 9.16224E04 4.38707E03 1.06261E04 2.98511E04 1.85925E04 2.60877E02 2.73957E04 1.96045E04 8.24989E03 3.53903E04 2.34909E04 6.26491E03 1.37017E04 7.29617E04 5.92051E04 1.46633E04 6.27667E03 1.06115E04 1.49270E04 1.45387E05 3.91808E05 1.55523E05 4.29774E04 2.28515E03 1.57640E04 1.34455E04 1.81317E04 3.83960E03 2.03238E04 6.64252E04 1.37523E05 1.47273E05 8.57063E04 5.92257E04 8.94589E04 2.84880E05 3.76971E05 2.57990E05 3.51627E05 5.40962E05 2.52489E05 2.54048E04 2.03129E05 2.27894E05 1.72568E04 6.85351E05 1.90881E06 1.03682E06 2.66610E04 7.09883E05 1.00300E06 1.07193E05 3.24097E05 1.12104E06 1.03999E06 8.04252E05 3.01664E06 4.01144E06 7.36501E06 1.05304E07 1.22528E07 1.78969E07 2.76486E07 4.34236E07 7.04441E07 8.01605E07 5.87368E07 6.52604E07 1.11830E08 1.13200E08 7.21759E07 5.09787E07 3.17449E07 1.18213E07 6.71422E06 1.02291E07 9.92547E06 3.26458E06 1.77485E06 5.77330E06 9.87684E06 1.12636E07 6.74092E06 1.50541E06 6.97746E06 1.96955E07 1.73777E07 1.12615E07 5.24612E06 2.06324E05 2.84061E06 8.13501E06 1.24532E07 1.98264E07 1.20510E07 3.25065E06 1.30311E07 1.44422E07 1.69425E06 1.49216E06 3.13499E06 6.57814E06 9.73500E06 3.00596E06 2.62532E06 9.25802E06 1.31837E07 8.82598E06 1.31872E06 6.83300E06 1.55425E07 9.98583E06 3.42105E06 2.30705E06 1.02941E07 1.77980E07 1.21517E07 1.97395E06 2.46302E06 1.18951E07 1.10565E07 1.76385E06 1.08546E06 5.15544E06 4.12786E06 4.76968E05 8.85451E05 9.01104E05 1.01247E05 3.34118E05 1.03341E06 3.71607E05 5.80288E05 1.09129E06 1.06886E05 3.99715E05 1.02771E06 4.81004E05 3.17663E05 5.21332E05 2.80376E05 2.49606E05 3.60908E05 2.39663E05 7.82474E03 1.59193E05 2.13120E05 2.19595E02 1.71676E05 1.83376E05 2.59087E05 6.49296E04 1.13366E05 4.25269E05 2.02208E05 3.81026E05 8.14031E05 3.17098E05 6.36525E05 7.31514E05 5.97688E05 1.74335E06 1.03725E06 5.71478E05 2.01146E06 1.78832E06 7.86008E05 1.21523E06 1.67581E06 9.66576E05 1.47106E05 2.12906E05 6.79305E05 5.65985E05 9.10455E04 8.31059E03 1.10098E04 5.27341E04 3.42825E05 4.44694E05 2.27505E05 3.08319E05 1.13688E06 1.55722E06 7.74246E05 3.58957E05 6.30510E05 9.60080E05 1.20948E06 9.15605E05 3.20394E05 4.23156E05 7.27442E05 6.08460E05 4.04923E05 -Frame 257 1.22790E05 3.11131E04 2.39523E04 1.06073E05 5.08339E04 5.77345E04 1.11793E05 1.95906E04 4.04324E04 2.02189E05 2.01880E05 9.29991E04 8.65462E04 5.07777E04 6.16769E03 1.04128E04 6.53686E03 8.53718E02 7.20301E03 4.45549E03 2.09330E02 1.99860E03 3.23322E03 1.64041E04 1.32140E04 2.30388E02 5.82455E02 5.11332E02 6.35550E02 4.85045E03 1.71649E04 2.27254E04 4.16382E04 2.70272E04 3.07323E04 6.01223E03 1.04971E03 1.82216E03 1.83714E03 6.75927E03 1.79036E04 6.12293E03 3.36634E04 7.02596E04 5.63490E03 9.57587E03 7.25600E01 1.53043E04 1.59734E04 1.15060E04 5.42932E04 1.28247E04 7.90400E03 1.41379E04 1.08799E04 1.64920E04 6.87933E02 1.46503E04 1.35363E04 1.18825E04 4.12443E03 3.97581E03 2.21816E04 1.07565E04 1.38799E04 1.04415E04 9.54547E03 8.21136E02 2.81122E03 6.97445E03 1.01177E04 4.96358E04 1.05719E04 2.89552E03 2.40085E04 4.52595E04 1.09286E02 2.51075E04 5.83393E03 7.76753E03 2.06639E04 1.07386E04 8.95626E04 1.21528E05 8.85966E04 8.82935E04 8.24195E04 5.51810E04 2.54120E04 1.18184E04 5.78161E02 1.71315E04 1.56895E03 2.54387E04 1.59704E04 7.95814E04 1.04847E05 7.51854E03 5.29868E05 3.98362E05 2.32171E05 3.24758E05 2.53896E05 1.89900E05 4.78227E05 4.82608E05 1.50540E04 1.40912E06 2.90883E06 2.31315E06 2.00876E06 2.26454E06 1.39978E06 1.12793E06 3.01912E06 4.71723E06 2.06637E06 1.05719E06 5.13632E06 4.34524E06 2.10678E06 1.27275E06 3.20327E05 2.84378E06 9.74383E06 2.52510E06 1.43981E07 1.59579E07 1.17441E07 1.73943E07 5.96415E07 3.90458E07 6.53457E05 2.59644E06 1.75373E07 2.08415E07 1.21802E07 3.13127E06 1.30882E06 3.72738E06 5.35032E06 6.94103E06 2.48915E05 1.59419E06 1.81870E07 4.49868E07 5.88445E07 1.97598E07 7.08614E06 1.99534E07 4.90420E05 2.89830E07 3.30760E07 5.44587E05 1.18547E07 4.96844E07 3.38910E08 4.83647E08 2.08203E08 9.54322E06 5.96440E07 6.42179E07 3.60896E07 3.93184E07 3.24397E07 7.32835E06 5.91557E06 2.97814E06 5.55688E05 2.03503E07 5.01726E07 6.30655E07 3.58341E07 1.28293E06 1.13665E07 1.67773E07 5.36120E06 9.70533E06 3.57196E07 1.69508E07 1.90574E07 2.53898E07 4.87469E06 4.51442E06 2.31544E07 3.85962E07 5.16540E06 1.18371E07 2.21158E07 4.12914E06 3.85156E06 4.15740E06 3.01290E06 2.46076E06 4.47558E06 9.22610E06 3.97637E06 1.70392E06 4.98117E06 1.83911E06 1.74330E06 5.72395E06 7.10837E06 6.35467E06 5.33585E06 6.40203E06 2.10165E06 4.82970E05 3.67543E06 7.63970E06 1.06775E07 5.35002E06 4.22915E05 4.47962E06 4.09491E06 2.85624E05 2.30125E06 5.09587E06 3.15811E06 6.53045E05 2.67114E06 4.00481E06 3.04439E06 4.18847E06 3.55716E06 2.98858E06 8.19219E06 7.88346E06 2.82866E06 8.62500E05 3.68556E06 3.81713E06 6.04561E05 1.48239E05 1.58573E06 1.12474E06 3.65125E05 3.83465E05 7.88357E04 6.76645E05 3.74897E06 3.65996E06 3.42842E06 4.58774E06 3.33097E06 5.60723E05 1.28785E06 3.87579E05 2.48751E03 1.50362E05 2.60316E05 1.98896E06 8.21482E05 1.19304E04 1.63488E06 9.01038E05 1.90967E05 -Frame 257 5.74938E04 1.38454E05 6.49806E04 8.67106E04 3.85634E04 2.75088E04 6.25885E03 1.19890E04 9.60150E03 1.80600E03 1.33600E04 4.48214E03 3.84169E03 2.29997E04 6.65561E02 6.33928E03 1.59749E04 4.19752E03 5.02549E02 2.23577E04 1.30679E04 2.23007E02 2.43960E04 1.28500E04 1.42785E04 6.56234E03 9.10113E03 1.45162E04 6.25434E02 6.86781E03 3.20592E04 1.12894E03 4.32635E04 7.15220E04 3.58171E04 1.35318E04 3.39524E03 1.90699E04 2.67150E04 2.39414E04 7.16741E04 2.41281E03 1.39014E04 4.06269E04 2.75548E04 2.16786E04 5.19802E03 6.34276E04 8.81531E04 3.82353E04 2.79359E04 1.30734E05 9.21716E04 5.69633E03 3.15855E04 7.51976E04 1.03989E05 2.40894E05 8.99158E04 4.34211E04 3.24465E04 1.72071E04 8.23427E04 3.60692E04 3.33313E03 2.03751E03 8.39046E04 7.51916E04 1.67392E04 3.44505E04 1.68051E04 1.62808E05 5.03537E04 2.39864E04 6.49457E04 2.99389E04 1.06321E05 6.07720E04 1.42632E05 5.42209E04 3.97428E03 7.00527E04 2.63127E04 3.77054E04 2.66836E05 9.11277E04 5.65147E04 1.65604E04 1.69404E04 9.95955E04 1.35370E04 5.43561E04 3.27879E03 1.28331E05 2.11526E05 2.64314E05 4.46592E05 5.88093E05 1.16492E06 2.70071E05 1.85445E04 1.62942E05 5.81794E05 6.06325E05 3.81064E05 3.89981E05 4.44470E05 3.83808E05 3.04662E05 7.82870E05 9.83734E05 1.16867E06 5.01513E05 1.05753E06 3.51577E06 2.53147E06 3.92073E05 2.34136E06 1.19189E05 6.22830E06 1.70442E07 2.01491E07 1.09537E07 3.53670E06 4.58977E06 1.20239E07 4.49093E06 1.58150E06 2.43040E06 6.61575E06 1.29325E06 1.53571E06 2.24006E06 5.37542E06 3.34016E07 3.87375E07 1.05251E06 6.65670E06 5.26336E06 1.60605E06 1.16754E07 4.76983E07 5.01794E07 3.45841E07 9.41245E06 9.99449E06 1.38415E07 7.40993E06 4.06573E07 9.98731E07 4.48905E07 2.92789E07 1.65253E08 9.00101E07 1.12914E08 2.20402E08 2.06620E08 5.68080E08 5.94309E08 2.73858E08 1.48279E08 2.01964E07 3.56380E07 1.00456E08 5.52799E07 2.46988E07 3.06700E07 2.81027E07 1.22377E07 4.20403E07 1.31101E08 6.77065E06 3.68988E07 4.83574E06 1.64193E07 3.79531E07 1.87451E07 2.56077E07 1.97952E07 2.43491E06 1.29338E07 1.32795E07 2.22448E07 2.55171E07 5.18938E07 1.22834E08 1.38250E08 1.00082E08 8.96993E07 3.34149E07 9.26157E06 2.16972E07 1.89329E07 2.59165E07 3.32390E07 4.64194E07 1.65203E07 1.13432E07 1.81931E07 2.17429E07 2.25888E07 5.12054E06 1.72570E07 5.23297E07 2.94611E07 1.48930E07 2.81200E07 4.94517E06 2.31840E07 1.97903E07 1.69727E07 7.61929E07 7.88703E07 4.26669E07 1.68160E06 7.38981E06 3.03543E07 4.42148E07 1.26404E07 3.94714E04 4.88810E06 1.28804E06 3.34372E06 3.41878E06 7.96508E06 7.10991E06 1.69269E07 2.26277E07 5.83310E06 1.79146E06 8.89472E06 4.75548E06 1.86239E05 1.21786E06 4.19424E05 9.26707E05 6.17883E06 2.04530E07 2.74040E07 6.43406E06 1.02654E07 3.04127E07 1.37059E07 2.85538E07 2.59470E07 5.08726E06 3.89946E06 1.43642E07 1.15264E07 7.70986E06 1.28680E07 2.44890E07 1.10888E07 2.89231E06 2.63202E07 2.29981E07 4.45583E06 -Frame 257 7.15143E05 2.74563E05 7.25318E04 4.34847E04 1.77203E04 7.30496E03 3.63944E03 2.28790E03 8.07350E03 1.69759E04 3.77287E03 1.82762E04 5.97465E03 6.34621E03 1.96768E03 2.15409E03 1.97021E04 4.68636E03 1.54490E03 5.55739E03 1.78195E03 2.39883E04 3.07300E03 7.44389E03 2.07878E02 1.01169E04 3.18540E03 6.38440E02 2.35600E01 1.58475E04 7.09212E03 1.10278E04 2.01527E04 4.91377E04 6.64641E04 9.03355E03 1.70736E04 2.07942E03 1.05845E04 2.93715E03 1.74301E03 2.69172E04 7.55939E03 1.39328E04 4.49344E02 6.54085E03 6.23738E03 1.75977E04 5.19572E04 1.45720E04 3.65776E04 2.07597E05 1.61609E05 1.27237E05 7.91025E04 2.57633E04 1.00476E04 8.74534E04 5.36635E04 1.87197E02 2.75714E02 3.14836E04 1.72741E04 1.52094E04 2.87612E03 1.39240E04 3.53968E04 1.31227E05 1.74246E04 1.78542E04 3.92140E04 1.32214E05 6.34960E04 5.21558E04 4.43514E04 2.68284E04 1.07185E04 5.51211E03 3.71706E04 1.99315E05 1.80539E05 4.03539E04 6.99785E04 3.71435E05 5.72234E05 2.40209E05 1.44943E05 5.89897E02 7.29227E03 1.07620E04 3.85047E03 3.17063E04 2.77830E04 8.73134E04 1.56090E05 1.41677E05 2.99783E04 1.24437E04 1.30982E05 3.35911E05 2.03214E05 5.43740E05 9.18872E05 1.88472E05 3.82018E05 3.36836E05 5.45618E04 4.57112E04 3.53267E05 1.20835E06 1.37414E06 2.61835E05 2.54580E05 3.84586E06 4.30938E06 1.34588E06 8.81125E06 7.56387E06 3.40202E06 6.63485E06 3.66135E05 4.00964E06 6.95664E06 4.63155E06 7.58331E05 1.65213E06 1.51938E07 1.83664E07 2.27276E06 4.99903E06 4.20029E06 5.81603E06 1.28859E07 2.96546E07 4.34960E07 2.79475E07 1.19633E07 1.30472E07 1.49437E07 1.19888E07 2.45655E07 4.26006E07 1.44636E07 4.85846E07 1.24180E08 2.17972E07 1.03861E06 4.85373E05 2.53920E07 1.67387E08 1.32336E08 1.92399E08 2.97398E08 1.17930E08 1.68692E08 4.04713E08 3.38580E08 4.55886E07 5.72610E07 2.95611E07 2.97528E06 1.02132E08 8.61164E07 3.08367E07 2.39661E08 8.41805E08 9.96039E08 5.39966E08 2.70338E08 5.76326E08 9.26748E08 6.58841E08 1.53658E08 1.00042E07 4.28744E07 1.04957E06 6.46599E07 2.05638E08 1.64097E08 2.54958E07 2.56729E07 1.28491E08 2.34575E08 2.45363E08 6.17395E07 2.12768E07 7.31673E07 1.87994E07 2.86543E07 3.40428E07 3.73214E07 1.91792E07 7.85242E06 3.92057E07 1.83918E07 4.77263E07 5.78475E06 1.18444E07 3.79131E07 2.64136E07 3.11073E07 6.25922E06 1.41918E07 1.86932E07 1.13994E07 8.27882E07 1.60069E08 1.02319E08 8.08237E07 1.76507E08 1.50645E08 3.85797E06 8.96397E07 9.73881E07 9.96061E06 2.46605E07 8.02920E06 1.15301E08 2.30856E08 1.46531E08 9.78283E07 6.08902E07 1.76148E07 7.21097E05 1.60610E07 2.81150E07 1.07220E07 3.28385E07 5.88975E07 3.79151E07 2.40662E07 3.41018E07 2.14432E07 1.13722E07 6.98051E06 1.06267E07 2.57313E07 4.87254E07 7.59727E07 7.18878E07 4.64835E07 1.56137E07 2.57985E07 5.06648E07 6.46881E07 6.35107E07 3.50685E07 8.95109E06 5.40484E06 1.49086E07 2.84961E07 2.24940E07 5.60521E07 4.90894E07 7.52192E07 1.55993E08 1.90322E08 -Frame 257 3.02555E05 2.34419E05 2.46793E04 3.24484E03 5.62570E03 2.01301E04 2.27798E02 2.48425E03 4.07976E03 1.04683E03 1.89128E04 1.39701E04 4.19278E03 2.24365E03 3.15059E03 5.91730E03 9.13398E02 2.80760E03 4.47948E03 1.01628E02 5.76709E03 2.01522E04 7.12674E03 2.17965E03 4.12702E03 2.81154E03 5.53929E03 6.29313E03 3.09775E03 1.87387E04 4.38483E04 6.99843E03 1.47196E04 1.92106E03 2.17615E04 2.48287E04 4.70554E04 3.84968E04 1.21963E04 6.37587E03 1.38269E04 1.40308E04 6.52676E04 3.72016E04 1.07695E04 2.93666E04 1.17308E04 4.34347E04 8.98687E04 1.64096E05 7.25400E04 1.08456E04 5.61218E03 6.55376E03 3.67621E04 2.66039E05 2.08096E05 2.46885E05 3.81101E05 5.30489E05 2.30349E05 6.61057E04 5.17475E03 1.22513E04 7.70744E03 3.29181E04 2.04229E05 3.13474E05 1.19199E05 6.63386E03 4.82352E04 6.41784E03 5.77021E04 2.20552E05 1.65812E05 4.32251E04 1.00112E04 1.96231E04 1.13034E05 1.08812E05 1.72135E04 1.10009E05 1.63151E05 8.88911E04 1.61458E03 4.27108E03 3.25213E04 1.46769E05 1.35083E05 1.91616E05 1.91660E05 8.06072E04 3.28207E03 2.44663E04 1.91294E04 8.30101E04 1.27402E04 1.06466E05 1.23237E05 8.56384E04 1.33981E05 3.53168E05 6.15930E05 8.93484E05 1.08518E06 5.67563E05 2.70983E05 3.70677E05 2.00720E05 4.90001E05 3.49563E05 7.13042E04 3.04208E05 1.51328E06 2.54307E06 6.92679E06 2.06450E07 2.05290E07 1.20700E07 1.27185E07 8.67134E06 2.93370E06 4.09853E06 5.26728E06 1.09253E06 3.68472E06 1.25670E06 2.30317E07 2.85677E07 4.86849E06 4.68546E06 1.59268E07 1.09126E07 4.44710E06 1.83117E07 2.87504E06 3.64174E06 4.54061E06 1.75771E06 3.00277E07 1.96482E07 2.70298E07 1.42711E08 2.16832E08 1.43945E08 1.62524E08 7.63363E07 3.30414E07 1.24948E08 2.53450E08 2.05108E08 2.66400E08 3.59404E08 1.84564E08 1.18515E08 1.40608E08 3.35400E08 3.54979E08 3.88191E08 2.32401E08 1.71085E08 5.16930E07 6.31069E07 2.89023E07 1.18191E08 1.60783E08 7.69812E08 4.02737E08 3.40875E06 5.78562E07 3.52811E08 1.36774E08 2.95280E08 1.14491E08 4.66537E07 7.11337E08 1.48057E09 8.50973E08 3.10077E07 3.99021E08 6.16315E08 3.49980E08 2.27043E08 1.16304E08 2.74355E07 1.78813E08 6.55717E07 7.43411E07 1.89623E08 1.72605E08 6.77631E07 5.35428E07 2.01935E08 1.88082E08 8.87923E07 7.99872E07 9.13571E07 5.27644E07 4.33703E07 8.68808E07 9.71294E07 3.36588E07 2.48277E06 4.63839E07 8.15113E07 1.35506E08 1.63663E08 7.39806E07 1.24999E07 3.58628E07 1.54241E08 5.12393E07 5.52460E07 3.42781E07 2.61183E07 4.99006E07 1.50203E08 3.92034E08 3.13838E08 1.10956E08 2.10846E08 3.66019E08 1.15687E08 7.59241E07 7.91044E07 2.16526E06 2.68791E07 2.54097E06 4.14910E07 1.40429E07 1.15779E08 1.11143E08 1.51576E07 1.33550E07 3.94291E07 4.69899E07 8.18004E07 1.36219E08 1.85360E08 1.48929E08 5.46253E07 9.23850E07 9.35998E07 8.41735E07 6.99972E07 1.13362E08 1.97357E07 8.13745E07 1.74620E08 1.95494E08 6.95317E07 2.46053E06 1.00652E08 1.68771E08 1.38225E08 2.38295E07 1.03083E08 -Frame 257 6.02730E04 1.55590E05 6.91879E04 8.06561E03 3.51168E03 4.00926E01 3.77573E03 9.08554E02 8.04186E01 2.74140E03 1.00397E03 3.67645E03 1.40003E03 1.58707E03 7.85978E03 3.99061E03 2.32873E03 9.56042E03 1.03303E04 5.68733E03 2.46745E04 1.47393E04 4.12927E03 8.07484E03 7.73289E03 4.07602E03 7.08337E03 2.52981E04 2.79554E04 7.89582E04 5.60649E04 1.49517E04 5.89244E04 9.38104E04 3.77259E04 3.43332E03 2.54170E04 6.56888E03 9.86830E03 9.44518E03 3.32457E03 1.57931E03 2.60113E04 3.08224E04 4.04238E04 3.05091E04 2.50250E03 3.43173E03 4.50143E04 1.13305E05 7.41132E04 1.57391E03 3.21318E02 7.14670E02 2.71431E04 1.18508E05 5.95091E04 2.75452E05 5.99238E05 3.04136E05 1.26359E05 1.11329E05 5.61205E04 5.14620E04 1.39902E05 1.21945E05 5.52952E04 9.54212E04 5.72488E04 1.40033E04 2.27699E04 5.06758E03 4.58563E03 2.06263E05 2.73615E05 8.28256E04 1.73254E04 2.02999E03 1.83127E04 6.22311E04 1.95113E05 2.39833E05 1.13791E05 1.80267E05 1.61439E05 1.17977E05 1.71006E04 3.70082E04 2.75250E04 6.98562E04 5.31094E05 3.75544E05 9.75363E04 3.41788E04 1.73525E04 9.09338E04 3.10977E05 5.72619E05 3.63815E05 9.81920E04 1.09823E05 6.47578E04 3.26960E04 5.39277E04 7.41343E05 1.70889E06 1.85819E06 1.67048E06 6.85070E05 9.60506E05 1.15894E06 1.64888E05 5.12402E04 7.59302E04 1.63560E05 2.45325E06 5.10888E06 3.88539E06 7.64025E05 1.68218E06 2.44288E06 2.86098E05 6.79743E05 9.34344E06 1.03561E07 9.03938E06 8.48315E06 2.95604E06 8.97576E06 8.52343E06 2.40834E06 1.19144E06 2.67103E07 8.24147E07 4.60521E07 4.81722E05 1.61627E07 4.70325E06 9.86353E06 5.25084E07 4.78500E07 3.90327E07 9.56050E07 1.70137E08 1.48154E08 1.66612E08 7.62164E07 8.93786E07 9.59784E07 2.85864E07 4.31937E06 5.51061E07 1.54034E06 1.72032E08 2.31369E08 1.31149E08 3.86629E07 3.00671E07 1.55707E08 2.00751E08 1.38796E08 1.50303E08 2.08994E08 2.85157E08 1.89603E08 1.22949E08 4.02624E08 7.40042E08 3.18236E08 5.22244E07 1.18217E08 5.19692E08 7.45623E08 8.07753E08 1.31098E09 1.31809E09 8.81135E08 7.33840E08 3.99348E08 2.35108E08 2.68482E08 8.42539E07 7.99697E07 1.61523E08 7.18793E07 2.55237E06 3.35523E08 8.14195E08 3.06542E08 4.37523E08 5.18707E08 5.64572E07 1.12546E08 2.08637E08 7.84235E07 9.64390E07 1.52777E08 6.96980E07 4.43351E07 5.14106E07 9.95113E07 2.11078E07 1.16597E08 7.91234E07 4.82025E06 7.63822E06 2.14167E07 7.70061E06 5.63094E07 8.36593E07 1.17413E08 1.91079E08 1.52598E08 6.05231E07 3.36319E07 2.35432E07 5.19286E07 1.05533E08 2.53725E07 7.31107E07 4.37155E08 4.11767E08 1.54018E07 1.43848E08 1.64784E08 2.87755E07 1.39700E08 1.94845E08 7.79347E07 6.40998E07 9.53081E07 8.09825E07 1.85828E07 2.54449E07 7.84538E07 7.40092E07 7.95806E07 1.93148E08 2.56418E08 1.80302E08 2.71312E08 2.53361E08 5.60627E07 6.96746E07 1.64830E08 1.69799E08 2.15903E08 4.90584E08 7.02698E08 2.81353E08 8.21118E07 2.86148E07 2.67019E08 7.50757E08 7.02732E08 3.78535E08 1.95814E08 -Frame 257 5.44327E05 1.42449E05 1.10353E04 1.71147E04 4.09864E03 4.29687E02 5.74803E03 3.08235E02 8.61768E03 4.55398E03 5.88681E02 8.14134E02 2.72136E03 3.21239E03 5.15562E03 1.48637E04 1.37942E03 1.63257E04 3.95318E03 3.16063E03 1.69021E03 1.51813E04 2.47154E03 1.03302E04 7.38547E03 1.85947E04 2.46430E04 2.83411E04 1.23737E04 4.13034E04 2.17855E03 4.75297E03 2.08846E04 4.30435E04 5.19646E04 9.37483E03 4.36069E04 1.99401E04 2.05188E04 8.69559E03 7.95355E02 1.57695E04 1.11875E04 2.01017E04 1.40247E04 1.60979E03 8.55303E03 3.81433E04 4.99601E04 1.33493E05 2.28203E05 8.69562E04 7.70342E04 5.38859E04 4.29625E04 1.77315E05 3.27341E05 5.35013E04 7.14929E04 1.16214E04 4.02384E03 4.80850E04 2.59711E04 2.72997E04 8.29449E04 4.78768E04 9.38266E04 9.88830E04 8.95491E04 1.99791E04 2.20391E03 2.79519E03 4.49612E04 2.64323E05 2.32665E05 2.08565E05 1.14502E05 1.06049E05 2.70950E05 1.98411E05 3.93930E05 7.20335E05 2.76181E05 3.23396E04 2.06439E05 1.96621E05 9.04865E04 2.08974E05 4.48324E05 1.76233E05 3.21488E04 3.87248E05 3.77051E05 8.66256E04 9.23438E04 8.33556E04 9.10200E04 1.59735E05 2.49849E04 8.09464E03 1.50637E05 4.05727E05 6.28449E05 2.08578E05 7.32218E04 2.23371E05 2.36216E05 6.61836E05 5.92203E05 4.33716E05 2.20862E06 1.13529E06 7.06323E05 3.64097E05 1.08996E06 2.75180E06 3.56157E06 2.61077E06 1.25587E06 1.82992E04 1.30230E06 1.14100E06 2.87927E06 4.46822E06 3.51429E06 2.94277E06 1.70207E06 2.91018E06 5.43836E06 1.36207E06 3.68534E06 5.56457E06 2.84059E07 5.10299E07 7.81978E07 4.92724E07 1.97686E07 6.24330E06 1.37777E07 4.82810E07 1.13799E07 2.01134E07 2.89496E07 9.97167E07 7.64550E07 3.41829E07 2.70809E07 1.29835E07 1.13838E07 1.56194E07 2.70532E06 1.42461E07 4.52548E07 1.25751E08 1.05009E08 1.81864E06 4.40887E07 3.08252E07 2.43753E07 1.76121E06 1.16547E06 1.01842E07 2.49948E06 3.17291E07 1.91208E07 5.41918E07 1.39928E08 9.03839E07 2.75097E08 5.64715E08 5.07118E08 2.07240E08 1.41980E08 1.35728E08 5.16189E08 4.16289E08 1.21622E08 3.07288E07 1.09672E08 5.12210E07 3.31130E07 1.07713E08 1.65060E08 1.78985E08 1.09537E08 2.38782E08 6.80138E08 1.02860E09 6.27040E08 2.54856E08 1.28227E08 1.26835E08 2.45087E08 1.03838E08 3.20900E07 5.38657E07 2.42786E07 1.44322E07 9.46004E07 2.28014E08 2.66915E08 1.56835E08 1.30124E08 1.02872E08 6.65356E07 6.79158E07 3.68283E07 6.19546E06 1.70426E07 6.30323E07 9.90229E07 1.09645E08 8.62598E07 6.31800E07 4.84985E07 6.79184E07 4.49787E07 1.07594E08 3.96791E07 3.02239E07 3.82472E07 1.21370E08 1.34109E08 2.50867E07 9.61715E07 1.47982E08 2.81865E08 1.85649E08 3.89986E06 1.68466E07 6.13865E07 4.14239E07 1.11015E08 1.22071E08 1.68871E08 1.31985E08 7.96341E07 4.25922E07 7.22434E07 4.73574E07 1.94055E07 3.22643E07 5.24816E07 2.81758E06 5.79112E07 2.87529E07 3.30314E07 3.61026E07 1.99190E08 2.64173E08 1.30106E08 1.17844E08 1.43620E08 7.46630E07 5.65809E06 2.87470E07 2.40517E07 -Frame 257 8.43614E05 5.69511E05 9.40843E04 6.38575E03 2.57207E03 4.48447E02 8.34936E03 1.02029E04 1.18394E04 5.16245E03 7.08642E03 1.62104E03 6.25582E03 4.50948E03 1.42190E03 3.94572E03 5.53389E03 4.50582E03 1.23334E04 1.49373E04 5.32786E01 7.30000E03 8.24385E02 1.44539E03 1.78686E03 1.39997E04 7.22081E03 7.18288E03 1.21845E03 1.46501E04 1.36048E04 5.30846E03 6.76338E01 2.00800E04 6.26800E04 3.32493E04 4.55169E04 1.61589E04 3.61188E03 1.34378E04 4.92426E04 3.72296E04 2.64113E04 3.82773E03 6.95696E03 5.07539E04 4.81695E04 7.37416E04 1.81855E05 1.51399E05 1.19503E05 2.06672E05 1.44599E05 3.10914E04 3.63859E04 4.45807E04 3.70320E04 1.12097E05 2.37139E05 1.73897E05 8.47472E03 3.43806E04 1.46974E05 1.58887E05 5.94420E04 9.14527E04 1.34937E05 2.61651E05 1.13913E05 8.15388E04 6.79689E04 2.44106E04 1.91670E04 1.43335E05 4.61659E04 7.18340E04 1.40226E05 8.19168E04 4.49476E04 6.77688E04 1.49562E05 1.29574E05 1.73582E05 4.56888E05 2.39384E05 3.41914E05 1.23184E05 1.38154E05 3.71879E04 6.74605E04 3.35648E05 1.92335E05 1.70185E04 9.27745E04 1.05053E05 6.26393E04 4.73073E04 3.64740E04 2.84709E04 4.53891E04 2.08558E05 3.43762E05 3.53641E04 4.40184E05 9.84990E05 2.01741E06 1.17789E06 2.13755E05 9.28641E04 4.38723E05 1.87042E06 1.20498E06 8.68223E05 6.64748E05 1.05703E05 7.76423E03 1.51718E06 3.48883E06 8.89719E05 1.03263E05 1.56634E06 1.35488E06 4.32901E03 1.01960E05 3.30752E05 2.24266E06 4.10533E06 9.59061E06 1.80529E07 1.15675E07 2.74063E06 5.64373E06 4.70340E06 1.31905E07 4.19915E07 1.82560E07 9.64880E06 5.12507E06 2.28037E06 3.96758E07 4.83901E07 1.62827E07 5.57730E07 7.25942E07 2.40365E07 1.40379E07 4.85426E07 1.49248E08 1.04564E08 1.55368E07 2.08322E06 9.48155E06 1.88500E07 3.81504E07 1.38749E08 2.29556E07 6.40146E07 1.41668E08 4.49532E07 2.18937E07 5.81685E07 9.97276E07 9.19826E07 1.64848E07 3.99952E07 1.28281E08 7.17115E07 1.53909E06 6.56287E07 1.81179E08 6.62432E07 1.72749E07 1.73973E07 5.26638E07 9.73270E07 1.48273E08 1.50033E08 2.10837E08 2.58677E08 8.37640E07 5.06300E07 2.13791E08 1.55527E08 3.62139E07 1.47952E08 6.86920E07 1.97683E08 3.57067E07 2.52591E08 1.60852E08 7.24886E07 1.55862E08 1.94246E08 4.99359E07 3.87890E07 2.40795E07 3.13250E07 2.68897E07 2.93456E07 2.66668E07 3.50552E07 1.43508E08 1.01977E08 9.18076E07 5.27485E07 1.20575E08 4.34131E07 2.18497E07 8.58840E07 1.31866E08 2.22398E07 5.41949E06 1.45430E07 8.68261E07 7.89401E07 2.75647E07 2.33992E08 4.15876E08 1.15009E08 1.47401E07 5.35854E07 1.29840E08 1.30383E08 1.03515E08 4.15461E07 2.67042E07 8.54731E07 1.57597E08 1.44109E08 1.01600E08 3.09451E08 4.11667E08 8.66767E07 2.13991E06 4.27176E05 2.64343E07 1.11170E07 6.37539E07 8.24036E07 6.44596E06 2.78538E07 3.07551E07 1.47377E07 3.41801E07 2.37870E08 2.59651E08 8.19342E07 1.38576E07 5.78338E07 1.05744E08 7.54911E07 1.61304E07 1.52156E07 3.78480E07 3.01179E06 1.55718E07 1.23002E07 -Frame 257 7.33690E04 1.02653E05 1.16365E03 9.49839E03 2.94048E03 6.03065E01 5.06041E03 5.60327E03 3.75738E03 4.68783E03 5.87559E03 6.41434E02 1.57014E02 6.39001E02 1.50824E03 1.18931E03 3.76510E02 1.69536E03 6.47962E03 1.09018E04 1.99046E03 1.85383E03 5.00509E03 4.96341E02 1.03213E04 1.70632E04 2.26691E04 5.58454E03 2.54183E04 1.67803E04 2.56659E04 1.03466E04 8.83076E02 1.87834E04 1.90275E04 4.34436E03 5.45157E03 7.55750E03 8.32484E02 2.09480E04 1.95549E04 1.12442E04 3.28873E04 2.83837E04 1.48208E04 5.06505E04 1.38643E04 3.73085E04 5.45770E04 1.82853E04 5.47388E04 4.00942E04 4.46122E04 6.33780E04 2.18599E04 9.58108E03 4.30655E04 2.83695E04 1.71924E05 2.52492E05 1.75039E05 2.97640E05 2.80943E05 4.93409E04 5.95341E03 8.59149E04 2.33044E05 8.96542E04 4.63670E04 1.22821E05 8.25568E04 1.24855E05 2.20687E05 3.51232E05 4.21775E05 1.92147E05 1.07290E05 2.25484E04 3.45256E04 1.83189E05 3.40791E05 2.46032E05 8.16687E04 5.14370E05 5.35706E05 1.29562E05 9.67504E04 2.05391E05 2.31936E05 1.05835E04 4.93307E04 3.49000E04 6.38138E03 2.78014E04 2.23124E04 4.00970E04 2.29852E05 2.69430E05 9.91927E04 5.96698E04 2.35106E04 2.34113E05 5.18920E05 1.38215E06 1.96619E06 1.43664E06 5.81565E05 2.48006E05 4.21473E05 7.22661E05 1.38853E04 6.41243E05 5.60355E05 8.85028E04 4.04016E05 8.82948E05 2.11933E06 1.52653E06 4.34637E05 1.49895E06 2.94200E06 2.51384E06 2.38890E06 1.07005E06 4.43012E05 2.73943E06 1.28986E06 2.39068E06 3.32816E06 2.86060E06 4.23642E06 2.93205E06 5.16417E06 2.58725E07 6.71967E07 4.35475E07 7.58850E05 1.00885E07 8.96802E06 1.02658E07 2.13411E07 1.29827E07 3.92422E06 1.62464E07 3.15929E06 3.46539E07 1.01349E08 6.60185E07 2.74715E07 8.87416E06 3.92289E06 3.36748E07 1.21408E08 1.41417E08 5.59055E07 1.18001E08 2.15774E08 1.60823E08 3.00759E07 1.36500E07 1.06458E08 1.93751E08 9.22414E07 2.38740E07 5.55457E07 7.95007E07 2.55593E07 3.63452E06 1.55418E07 1.41406E07 2.32717E07 1.68141E07 5.08079E06 3.44325E07 1.01735E08 1.24704E08 5.21134E07 4.08207E06 4.24666E07 7.64127E07 1.55810E08 3.35971E08 7.24933E07 8.03029E07 7.80031E07 3.07801E08 9.68489E08 9.48519E08 6.55947E08 3.38092E08 6.14062E07 2.03919E08 2.04050E08 1.53161E08 1.51798E08 8.76873E07 2.60909E07 1.74995E07 3.52565E06 1.19028E08 3.14938E08 2.99218E08 6.81237E07 3.83050E07 7.14659E07 5.13713E04 4.25494E07 2.46765E07 4.77153E07 1.12529E08 6.72234E07 4.53431E07 7.98764E07 1.11567E08 3.25387E07 3.04318E07 2.61271E08 2.94888E08 6.00592E07 2.96866E07 9.36794E07 4.38054E06 2.78519E07 4.11034E06 5.64938E07 1.09860E07 9.80858E05 4.21736E06 1.84357E07 3.73074E07 1.51254E08 2.09785E08 5.61829E07 3.85035E07 2.70870E07 8.35673E05 1.91575E07 2.72189E07 3.14873E07 8.56516E07 3.71516E07 7.09076E06 2.49425E06 4.43478E07 1.67319E08 1.39845E08 9.34445E06 1.17781E07 1.39061E07 5.83613E06 2.37731E07 3.26803E07 5.38231E07 6.53602E07 7.56352E07 5.19249E07 1.21144E07 -Frame 257 4.83844E05 3.77689E05 6.36435E04 1.12608E03 1.20905E03 4.73592E03 1.58718E02 2.13957E03 6.95983E03 6.40071E03 5.58637E03 1.90755E03 6.85597E02 1.35213E03 5.79500E03 6.53661E03 5.53193E03 9.17330E03 2.56199E03 3.11134E01 9.00272E03 1.53295E04 1.45564E04 4.12066E03 4.19145E03 1.54053E04 7.70871E03 1.16416E03 8.18299E03 8.59597E03 3.52541E04 6.92565E04 2.33605E04 4.05651E03 2.62987E03 6.03340E03 7.85030E03 2.46276E04 1.36832E04 8.57147E03 1.52758E03 1.89363E04 2.24361E04 6.10116E04 4.43889E04 2.90657E04 4.82410E04 1.42958E05 1.58405E05 6.40886E04 7.84737E04 1.06044E04 1.61678E05 1.73961E05 2.03655E04 9.23519E04 1.97032E05 1.30338E05 1.29230E05 1.05293E05 1.48787E05 3.14985E05 2.86786E04 4.48591E04 2.80336E04 5.10843E03 4.71271E04 3.01171E05 3.80208E05 3.10071E05 8.90450E04 3.68946E04 7.77166E03 1.47466E04 8.02400E04 3.24657E05 1.77350E05 6.88961E04 1.30012E05 1.69536E05 2.98319E04 3.55846E05 2.52570E05 1.72541E05 4.48884E05 3.01266E05 2.66884E05 6.56126E05 4.43914E05 1.72205E04 7.76928E04 1.09279E05 2.56372E05 2.69332E05 2.61533E05 2.45720E05 5.93528E03 2.30657E05 6.35794E05 3.94915E05 4.19199E04 3.19480E03 1.43156E03 3.98325E04 1.20843E05 3.54611E04 2.28979E05 8.20620E04 2.33332E05 2.90484E05 5.76709E05 6.65943E05 2.74441E04 7.22373E04 5.97245E05 5.79706E05 2.05628E05 2.48903E05 6.29348E05 5.82623E06 4.80376E06 2.19633E06 8.37998E05 5.95424E06 8.82685E06 7.89262E06 4.44097E06 1.43777E06 2.93062E05 3.89592E05 4.16406E06 3.85864E06 8.45789E06 1.33321E07 1.17807E07 4.88461E07 2.17932E07 6.16218E06 1.29974E06 1.53205E06 5.78579E06 4.37867E06 6.49254E05 4.13684E06 1.89451E07 1.00085E07 3.02692E06 5.95358E06 1.73680E06 2.37255E05 3.31736E06 1.10095E06 3.85454E07 9.14473E07 3.80873E07 2.69880E06 4.50962E07 1.68426E07 2.44018E07 1.07932E07 2.16472E07 2.32309E07 1.84911E07 6.28076E07 4.18625E07 7.47784E05 1.32520E07 5.92916E06 8.34306E06 5.32204E06 2.85320E07 6.22004E07 5.23007E07 1.23691E08 3.00598E08 1.40110E08 5.33143E07 8.52067E07 4.69384E07 2.65685E07 7.37089E07 1.25184E08 3.62137E08 4.77081E08 3.19784E08 1.96535E08 2.16792E08 9.40249E07 2.34986E06 8.46196E07 1.39592E08 7.92955E07 2.29315E07 8.17125E06 1.74046E07 4.35281E07 5.92117E07 5.84010E06 8.73342E06 4.60832E07 5.99515E07 1.82832E07 1.63242E07 7.81606E07 1.06797E08 7.05993E07 1.67739E07 7.75199E07 6.12340E07 1.42703E07 1.51649E07 7.66519E07 5.42139E07 3.39160E07 6.46302E06 2.43671E07 5.19289E07 2.39269E07 4.96035E06 4.34961E07 7.82500E07 7.24510E07 3.30873E07 5.34211E07 8.49280E07 3.54272E07 5.62043E06 2.76671E05 1.74771E06 1.30331E05 1.74419E07 5.11006E07 3.81924E07 2.56694E07 1.56678E07 2.02215E07 4.54903E07 4.35527E07 5.11806E07 6.94777E07 1.76038E07 6.50074E06 8.33179E05 2.41531E06 1.14628E07 1.79595E07 2.47090E07 5.52243E06 1.54269E07 1.13672E07 8.28891E06 3.75189E07 1.74357E07 8.61912E06 2.26272E06 4.13651E07 8.92842E07 -Frame 257 1.13125E06 4.16022E05 7.39982E03 1.35090E04 9.91799E03 4.95917E03 2.54898E03 1.59649E04 2.69976E04 1.80244E04 1.53286E04 1.12725E04 1.57510E04 2.82280E04 3.62000E04 7.55367E04 8.85858E04 4.02688E04 3.59621E04 4.79076E04 4.18835E04 1.21193E05 1.71119E05 1.31983E05 1.05914E05 1.47182E05 8.35345E04 5.63650E04 5.83677E04 5.54919E04 9.79983E03 1.21590E02 1.23836E04 2.26693E04 1.69985E04 5.02730E04 3.82878E04 4.41191E03 2.84171E03 5.85697E02 1.31309E04 2.21610E04 8.84035E03 2.05540E04 8.23336E03 1.66857E04 4.75913E04 4.88994E04 1.66927E05 2.15597E05 3.65080E05 8.26892E05 9.65597E05 5.51461E05 1.24715E05 1.55040E05 2.75515E05 6.73043E04 5.34296E04 1.93756E04 1.32758E05 1.69452E05 6.63600E04 9.51898E04 2.12201E05 1.08314E05 1.27936E04 1.92771E05 3.83996E05 2.07648E05 3.90059E04 7.67492E04 2.74163E05 2.78004E05 7.29161E04 6.79894E04 2.51844E05 1.39090E05 8.65015E04 4.00967E05 9.36266E05 1.11214E06 4.94235E05 9.82483E04 4.88281E04 8.28927E05 1.60803E06 6.78059E05 3.17590E04 4.54505E05 3.18208E05 1.89470E05 1.20486E05 4.41281E04 9.02574E04 2.49575E05 7.26354E04 9.46110E04 6.32838E05 3.34354E05 1.35923E04 1.42961E05 2.41083E05 2.11142E05 3.50396E05 8.24331E05 7.99616E05 1.78743E05 8.94726E04 8.17082E04 4.04983E05 6.52572E05 3.51255E05 2.45724E05 8.15016E05 1.22021E06 1.00977E06 2.04448E06 5.03034E06 9.13648E06 1.20244E07 9.41108E06 9.61029E06 9.70974E06 2.23234E06 1.29514E05 1.38272E06 1.35692E06 2.31643E06 5.96790E06 3.43853E06 1.04267E06 7.98004E06 4.06426E07 5.41619E07 3.57614E07 1.82434E07 1.06453E07 7.82122E06 8.79592E05 3.10608E05 1.47612E06 5.25730E05 2.46358E05 3.98621E06 1.04530E07 7.89531E06 1.68754E06 3.77814E06 1.11243E07 2.20423E07 1.43037E07 5.71862E06 4.63528E07 5.25477E07 7.03971E06 2.59332E07 6.39881E07 8.80254E07 9.43409E07 9.41132E07 1.02317E08 6.59442E07 7.94159E07 1.40215E08 8.70950E07 2.65238E07 2.16842E07 4.52205E07 4.23517E07 2.67727E07 1.12847E07 2.79135E07 8.38798E07 1.79102E08 8.77951E07 3.67549E07 2.73384E07 2.38071E06 1.87416E07 2.75920E06 1.10844E07 8.01345E07 7.20596E07 2.71184E07 6.82037E06 4.63800E06 2.35622E06 2.40878E07 3.88330E07 6.16189E07 1.58890E08 1.63584E08 1.09405E08 6.21208E07 5.99687E07 5.28995E07 8.28003E06 7.60847E06 1.66291E07 1.53533E07 1.90012E07 3.52406E06 6.73105E06 1.39773E07 2.68385E06 6.17260E07 1.15718E08 1.14789E08 8.78878E07 9.76750E07 9.86220E07 6.27547E07 5.77814E07 5.57998E07 2.28495E07 1.36786E07 1.25723E07 1.16084E06 4.49103E05 2.08815E06 7.12246E06 5.27568E06 8.83395E06 1.10627E07 9.80867E06 1.05168E06 1.59062E06 4.65310E05 3.68527E06 1.13285E06 3.59893E06 1.90611E06 1.96757E06 8.48575E05 2.51658E06 1.62474E07 9.29495E06 1.26998E07 5.27895E07 5.60054E07 1.55521E07 2.38203E06 1.96057E06 2.96715E06 2.81194E06 6.62364E06 2.55061E07 1.41049E07 7.82431E05 1.02202E07 1.60451E06 7.09109E06 6.63795E06 2.50074E07 4.79270E07 3.91201E07 -Frame 257 1.52723E05 2.33697E05 2.21938E05 3.03512E05 3.01376E05 1.87550E05 1.34505E05 1.30230E04 1.56076E04 3.64504E04 2.23290E04 2.26148E04 4.42244E03 4.51101E03 1.00449E05 1.29967E05 9.41962E04 3.44551E04 2.02075E04 5.33288E03 5.27792E04 7.27007E04 4.05671E04 3.37266E04 1.26999E05 2.86051E05 4.99908E04 2.29766E04 8.52708E04 5.00439E04 1.44388E04 1.19832E04 3.06643E03 1.85804E04 2.00767E04 2.78899E03 1.34247E04 3.03695E04 1.99784E04 3.12163E04 3.50134E04 2.58095E04 6.68619E03 6.24752E03 1.17650E04 2.51764E04 3.25592E04 5.46006E04 3.70611E04 5.22974E04 6.87891E04 2.83004E05 3.26598E05 5.40337E04 2.98423E05 1.92695E05 1.13195E04 1.56186E05 1.82775E04 1.65591E05 2.29333E05 4.14788E05 2.78773E05 1.76041E05 4.63961E05 6.44503E05 1.76060E05 3.38680E04 7.45030E04 1.09097E05 1.12382E05 3.43306E05 4.13769E05 2.07916E05 3.93142E04 7.50498E04 2.56328E03 1.30297E05 2.22662E05 1.27097E04 1.08806E05 2.17365E05 6.26556E05 1.23253E05 4.88304E05 2.37127E05 1.57532E05 4.62992E05 2.53192E05 8.55547E04 3.03045E05 3.13327E05 5.21703E04 2.71190E04 1.28100E05 9.58553E04 5.89949E04 1.12521E05 4.88121E05 1.78443E05 1.19090E05 8.71673E04 2.70676E05 3.74384E05 1.68399E05 5.83490E05 9.30810E05 2.42400E05 4.58280E04 2.53519E05 5.86896E05 9.99369E04 2.10572E05 4.21331E05 1.48352E06 1.69808E06 6.89940E05 1.61521E05 2.95530E05 8.85672E04 8.15761E05 4.16227E05 2.76021E06 1.50327E06 4.60145E05 4.43228E05 2.32250E06 3.73689E06 4.33708E06 1.12307E07 9.31715E06 6.97490E06 6.68624E06 6.42722E06 1.36802E06 9.90377E06 2.40072E07 2.77754E07 6.68823E06 1.47059E06 1.06692E05 9.28002E05 1.73897E06 9.80662E05 4.29584E06 1.74251E06 3.44464E06 1.36523E07 6.29461E06 9.73871E06 1.84306E07 8.56563E06 4.23730E06 2.82065E06 3.37284E06 1.08470E07 2.51319E07 8.48399E06 1.72692E07 3.16791E07 8.60993E05 2.48782E07 2.08869E07 2.00259E07 2.55737E07 1.52692E07 2.59963E06 3.94851E06 3.94894E07 4.47520E07 9.68832E06 4.75255E06 1.84491E07 3.40340E07 1.99917E07 5.18146E06 3.93355E05 1.83863E06 1.19385E07 9.37327E06 1.07431E07 2.11471E07 2.02454E07 4.85136E06 1.91441E06 2.36016E05 3.69256E04 2.31967E06 7.69991E05 6.03006E06 1.79164E07 1.76554E06 8.45016E06 5.77232E06 4.83722E06 1.03005E07 6.70524E06 9.10383E05 1.34298E07 2.15596E07 1.23339E07 8.40310E06 1.04546E06 2.49449E06 9.04940E06 1.33692E07 3.80958E06 1.40378E05 6.65907E06 3.77328E06 8.77673E05 4.46698E06 1.32593E05 4.07934E06 7.47491E06 6.31691E06 2.42597E06 8.93529E05 5.22511E05 1.56103E06 2.43265E06 1.51940E06 1.20689E06 2.04506E06 2.24031E06 3.27181E06 4.82789E06 2.90197E06 1.72286E06 9.80201E05 2.14596E06 4.16791E06 3.49511E06 3.88713E06 3.87526E06 3.38354E06 3.28318E06 1.63551E06 2.24235E05 3.52752E06 6.53178E06 4.34694E06 3.48495E05 9.17729E04 2.48598E05 1.46401E06 2.92701E06 3.84662E06 9.01656E06 7.38596E06 4.56022E06 5.37725E06 2.29021E06 4.95986E05 4.04438E06 6.29498E06 4.45375E06 -Frame 257 1.30393E05 1.52323E05 2.56883E05 1.03930E06 1.44861E06 3.41503E05 1.22541E06 1.43595E06 8.50480E05 9.80322E05 2.24659E06 2.27139E06 1.87972E06 3.19729E06 4.33765E06 2.26327E06 7.16816E05 6.23050E05 3.19586E05 9.49550E04 3.55132E05 5.12016E05 2.53000E05 1.11890E05 1.63464E05 1.57309E05 2.12444E05 8.93318E04 6.41808E04 2.43229E04 1.43060E04 6.95465E04 1.56246E05 1.88891E05 1.59454E05 1.00241E05 7.20114E04 1.01861E05 1.49131E05 5.16613E04 2.47712E04 1.32533E05 1.54590E05 7.01034E04 1.48969E05 1.73212E05 1.26736E05 2.84623E05 5.07407E05 6.20924E05 7.30470E05 1.03097E06 2.35205E06 3.18579E06 1.69833E06 1.77391E06 1.70443E06 7.16313E05 6.39009E05 3.55658E05 1.67330E05 1.61431E05 2.38332E05 3.51416E05 2.96750E05 3.31185E05 1.62904E05 4.90294E04 9.39118E04 4.87685E03 1.56623E04 2.05898E05 1.12961E05 2.03260E04 9.48423E04 1.11021E05 7.66044E04 3.40634E04 9.77970E04 1.54449E05 1.27664E05 1.96927E05 4.13355E05 8.65843E05 1.35626E06 1.55056E06 5.74113E05 8.17092E04 7.46175E04 1.49500E05 1.77181E05 1.53797E05 9.18221E04 8.86172E04 1.95961E04 5.68919E04 1.19487E05 3.70355E05 4.80772E05 1.72805E05 2.07431E04 9.68389E04 1.67703E05 2.31339E05 1.66023E05 5.79411E04 2.93322E05 3.77463E05 4.29061E05 2.98923E05 3.10881E05 3.16020E05 2.09511E03 4.85289E05 1.29293E06 4.57980E05 4.12279E05 6.50888E05 3.27027E05 9.40214E04 6.22992E05 4.32801E06 3.35274E06 3.51285E05 1.92580E05 1.45519E05 4.49530E05 7.36769E05 1.25497E06 4.47783E06 8.12029E06 2.46733E06 1.84298E06 7.46250E06 2.70847E07 5.28774E07 4.66403E07 1.67548E07 3.23490E06 1.82681E06 3.84130E05 1.02192E06 2.01701E05 2.75444E06 4.72849E06 5.36413E06 5.76051E06 2.08671E05 6.80542E06 5.48090E06 1.32033E05 6.79690E06 7.67394E06 7.16566E06 4.88541E06 4.04536E06 1.62184E07 3.03722E07 1.87396E07 2.80604E06 3.07215E06 1.11765E07 4.97686E06 2.78271E06 4.59996E06 3.83160E06 8.11144E06 1.27373E07 9.47421E06 3.43693E06 1.52825E06 2.30491E05 1.74500E05 5.47487E05 8.10748E05 1.55853E06 3.26993E06 3.49611E06 3.23260E06 2.17777E06 6.11906E05 8.39176E05 1.60894E06 8.97901E05 2.23423E06 2.06748E06 2.71051E06 2.49187E06 2.59768E05 1.51526E06 3.65933E06 2.53741E06 2.27778E05 2.75189E05 2.42240E05 2.66640E05 3.12441E05 1.70542E06 2.67629E06 1.82150E06 1.45599E06 2.07330E06 2.04908E06 2.36723E05 3.43265E05 8.97340E05 4.38231E05 4.91329E05 9.85569E05 2.09208E05 6.78725E05 1.48512E06 3.48319E05 1.21725E05 1.45891E05 5.35705E04 2.89908E05 8.46853E05 7.82821E05 2.83521E05 7.72351E05 6.29220E05 2.56860E05 1.13416E06 7.16584E05 3.28862E05 9.07696E05 7.73290E05 4.60702E05 1.90360E05 3.78117E05 8.51917E05 2.74832E05 5.21835E05 9.52159E04 1.41303E04 4.30297E04 1.60122E04 4.64662E05 6.71442E05 9.59266E05 2.73364E05 2.50855E04 1.23525E05 3.99958E05 1.91308E06 1.41580E06 6.83715E05 8.54096E05 9.82704E05 5.81711E05 4.96155E05 1.09320E06 2.34162E06 1.68803E06 9.70010E04 3.05312E04 -Frame 257 3.38902E05 1.18581E05 1.12452E05 1.40543E06 1.52688E06 4.30961E05 2.68526E06 6.35789E06 1.98229E06 9.84009E05 7.02524E06 7.73614E06 2.89705E06 1.44843E07 3.32166E07 1.25720E07 1.53311E06 1.51812E06 1.38638E06 5.26418E05 2.06343E06 2.82725E06 4.83817E05 9.55343E04 6.04519E05 6.08738E05 4.78801E05 5.48973E05 4.29944E05 8.98863E04 4.65031E04 1.86538E05 5.48947E04 6.86589E03 1.71851E05 1.61378E05 9.98927E03 1.87669E04 5.36541E04 1.18292E04 2.52494E04 2.87818E05 2.51805E05 2.76528E04 1.81534E05 6.33117E05 2.21664E05 3.25223E05 1.37884E06 8.58127E05 7.11233E04 1.40479E06 7.19999E06 3.37522E06 4.75997E05 5.75556E06 4.46890E06 8.97164E05 6.93483E05 1.12763E06 3.77966E05 1.39257E05 1.23788E05 9.61110E04 1.67894E04 6.33373E03 3.91262E04 8.12089E04 4.25546E04 3.20638E04 2.37618E04 4.94579E04 1.82400E05 3.66995E04 1.55031E04 6.97343E04 1.54996E05 1.85978E05 5.69373E04 1.10388E06 1.97039E06 2.27306E06 2.20217E06 1.94612E06 1.47368E06 7.39402E05 7.99844E05 8.07464E05 7.35200E05 2.32371E05 2.60773E05 1.44669E05 3.48888E03 1.95408E05 4.84015E05 5.32712E05 2.89130E05 7.42619E04 2.67509E05 8.86407E04 3.04327E05 3.90098E05 7.93020E04 1.69363E04 5.82181E03 9.40085E04 3.79276E04 2.40220E04 9.05488E04 2.62619E05 3.57909E05 4.04978E05 5.91690E04 2.28927E05 3.41461E05 3.48672E05 6.61657E05 2.27169E05 1.03008E06 1.43085E06 2.65431E06 4.00296E06 3.64368E06 1.33836E06 5.59730E05 5.77130E05 4.56174E05 4.98216E05 6.64026E05 1.73581E06 2.12008E06 9.41936E05 4.03096E05 2.56855E05 1.94001E06 2.90692E06 1.78607E06 5.13137E05 1.48038E06 9.98052E05 1.41978E06 1.37394E06 1.92781E05 6.58916E05 4.61097E05 7.66443E05 3.13259E06 4.29789E06 1.85501E06 1.40326E05 3.03716E06 4.35437E06 2.81312E06 1.31527E05 1.82149E05 2.39387E05 2.22888E06 4.51625E06 3.89110E05 8.16962E05 1.57804E06 9.21178E05 5.87161E05 7.12088E04 1.03742E06 2.19471E05 4.09787E05 3.18135E04 3.12607E05 2.21238E05 1.84816E04 7.05396E04 5.87237E04 1.02031E05 2.13509E04 9.67482E05 7.04769E05 1.01986E04 1.82316E05 1.57344E06 1.04270E06 1.35027E06 2.30848E06 1.79779E06 6.45405E05 2.77163E05 2.07436E05 8.85785E04 1.01041E06 1.00491E06 3.63138E04 3.70831E05 2.73982E05 1.05225E05 1.34316E05 2.54479E05 6.39342E04 2.85102E05 2.22581E05 1.82337E05 2.50824E05 4.26048E04 3.39880E04 1.57285E05 1.04455E04 4.84392E04 1.99365E04 1.43416E04 1.20360E05 8.50632E03 1.43430E05 2.39411E05 2.07668E05 1.25294E05 1.03684E05 6.44334E04 9.40296E04 4.09370E05 4.69620E05 1.92125E05 1.19445E05 3.03951E05 1.21877E05 1.13665E04 3.19489E03 9.76834E04 8.63856E04 2.55761E05 1.67695E05 8.93491E04 1.59272E05 1.10906E05 8.35435E04 2.10296E05 1.50910E05 1.20902E05 4.15173E04 1.22756E04 4.99627E04 4.67335E05 4.96549E05 1.46073E05 1.11856E05 3.65423E05 6.62312E05 4.71382E05 9.27456E04 4.05905E04 6.92467E04 2.64508E05 9.81890E04 8.97858E03 1.88492E05 5.39004E05 7.54102E05 5.16797E05 2.85492E05 -Frame 257 1.05467E06 6.47762E05 5.31857E05 2.26441E06 2.36634E06 3.27602E05 3.64242E06 9.96509E06 4.11254E06 1.34693E06 1.06762E07 1.28859E07 3.25412E06 2.54279E07 8.74233E07 4.38608E07 3.75229E06 2.33641E06 2.99947E06 1.10605E06 3.14289E06 7.30035E06 2.77536E06 2.51617E05 1.98179E06 3.11812E06 7.14205E05 3.34556E05 3.59939E05 1.20434E05 1.01943E05 5.13973E05 4.53221E05 1.93318E05 1.92276E05 1.70298E05 5.74076E04 3.47758E04 1.58454E05 2.41306E05 2.04663E05 1.91525E05 3.59293E05 3.79190E05 1.00978E06 1.72218E06 5.22786E05 2.27433E05 1.84274E05 1.53757E06 1.41477E06 4.76353E06 1.05952E07 1.31273E06 4.22664E06 2.84153E06 2.48796E06 7.40931E06 5.44283E06 3.01951E06 6.68428E05 7.46817E05 2.70233E05 6.36313E05 4.27413E05 3.80074E05 6.06785E05 8.59702E05 7.36852E05 5.78359E05 8.22421E05 1.35634E06 1.84612E06 1.65854E06 1.26900E06 7.50024E05 7.23529E05 5.49617E06 9.99529E06 1.22655E07 4.57585E06 1.30244E06 5.40361E06 5.16464E05 1.28651E07 1.11033E07 5.48789E06 4.70287E05 5.79800E05 7.46100E05 2.29219E05 1.48098E06 2.37946E06 1.19172E06 8.81295E04 4.97219E05 9.93935E04 4.56775E05 1.65759E06 1.77663E06 1.06043E06 2.82818E05 5.14403E05 4.34743E05 6.20047E05 1.14653E06 8.97449E05 2.07599E05 5.94036E05 3.67136E05 3.37388E05 6.21898E05 4.67489E05 9.11909E04 1.77177E05 1.80307E05 3.79834E05 1.26750E06 9.24870E05 1.27093E05 7.83136E04 4.05030E04 3.76352E05 1.33739E05 7.00238E04 2.37286E04 1.66913E05 1.43328E05 5.10375E04 8.29662E04 1.05019E05 6.55716E04 7.74318E04 1.48680E05 1.24465E04 3.29384E03 8.54423E04 7.55056E04 9.92001E03 4.29695E04 1.96309E05 3.04241E05 2.32234E05 9.50826E04 2.17203E05 6.47638E05 4.43868E05 1.48415E05 8.22228E04 8.14234E05 6.67977E05 3.55330E05 1.41683E06 9.08911E05 1.32304E05 3.85608E05 1.37061E06 7.54303E05 1.06980E05 7.62021E04 2.88465E03 8.45508E04 2.80665E05 4.57913E05 2.49598E05 1.30034E05 1.16466E05 4.93774E04 2.96165E05 7.25460E05 3.35463E05 1.01436E04 2.04584E05 3.92585E05 1.03405E05 2.48828E05 4.60294E05 2.06617E05 1.20316E05 1.07223E06 1.55988E06 7.59653E05 7.21900E03 5.86566E05 4.21166E05 4.51623E05 1.55562E06 2.58952E06 1.34296E06 1.59870E05 7.13903E05 2.17219E05 1.47694E05 3.88545E04 7.05236E04 3.93876E05 1.95134E05 2.66209E04 2.49704E04 2.21580E04 3.95250E04 1.92482E05 2.04709E05 2.15820E05 2.01576E04 4.81911E04 3.31037E04 3.72984E04 6.47477E04 1.29748E05 8.12833E04 5.94388E04 6.57038E04 4.60989E04 4.98274E04 1.30221E05 7.46892E04 8.00257E02 2.91292E04 3.94051E03 1.93819E04 2.74073E04 4.15181E04 5.15808E03 6.49196E04 7.62142E04 1.31548E04 1.03106E04 3.55778E04 1.49936E04 2.31230E04 1.07936E05 6.69536E04 5.59452E03 1.50074E04 1.21711E05 1.24766E05 9.48418E04 1.73192E05 1.61999E05 2.27286E04 1.45567E04 4.51634E04 3.60358E04 9.45658E03 4.79923E04 1.56595E04 1.82926E03 2.86864E04 1.58529E05 1.74932E05 6.05669E04 4.36631E03 2.24954E04 4.33709E04 2.00087E05 2.22538E05 -Frame 257 3.03200E05 1.68379E05 3.78537E05 2.16928E06 2.40434E06 2.57213E05 4.35855E06 1.12442E07 3.91710E06 1.84712E06 1.28683E07 1.40820E07 3.50274E06 2.97722E07 1.19060E08 6.32974E07 7.18749E06 4.97398E06 4.58359E06 6.26449E05 2.85507E06 9.12231E06 3.76583E06 1.11035E06 5.46298E06 5.49746E06 7.05200E05 3.92172E04 1.77448E05 8.54617E04 9.18015E04 7.57279E05 8.16438E05 8.66647E04 1.26602E04 9.67554E04 2.60822E04 4.13551E04 3.74753E05 3.89770E05 1.46902E04 3.95007E04 1.13737E05 5.02471E04 2.70854E05 2.66238E06 3.38739E06 6.52807E05 5.60421E05 2.02349E06 1.59622E06 4.42798E06 2.29183E07 2.29660E07 1.19917E07 2.36306E07 2.54334E07 9.41838E06 2.72929E06 7.50772E06 6.45249E06 1.87397E06 1.05322E06 9.56331E05 1.87610E05 4.99928E05 2.21258E06 2.92888E06 2.17991E06 3.11593E06 3.12602E06 2.27792E06 3.23628E05 2.05088E06 4.63900E06 1.21467E06 1.04148E07 1.81206E07 7.19721E06 1.91904E05 2.01096E07 3.37540E07 1.57059E07 2.08429E07 3.66054E07 1.96697E07 6.37591E06 1.51819E06 1.28890E04 2.79053E05 3.62565E05 3.64872E06 2.94739E06 1.60314E06 1.09916E06 3.22984E05 2.39733E05 3.48113E05 2.99238E06 2.46397E06 6.87754E05 2.36028E05 2.44757E04 4.98498E05 8.15513E04 1.22846E06 1.59889E06 1.30345E06 2.22073E06 1.81940E06 5.44768E05 2.19801E05 6.95707E05 4.79960E05 2.14742E04 1.85293E05 3.25496E05 3.49895E05 1.21821E05 6.84772E03 2.73128E04 2.60628E04 1.16361E03 1.30357E05 2.03549E05 4.97180E04 3.96345E04 1.10513E05 8.58683E04 3.61646E04 1.64420E04 5.24662E04 3.13873E04 7.63575E04 1.75414E05 1.45379E05 3.86891E04 5.00742E03 2.71896E04 1.94060E04 1.90855E04 7.22104E03 7.33153E04 2.82102E05 5.18602E05 6.17060E05 4.88908E05 3.66699E05 5.83529E05 4.78141E05 1.19309E05 4.02327E05 9.64886E05 1.76679E06 9.98956E05 7.03455E05 6.97278E05 3.73424E05 3.94849E04 1.85178E04 8.11067E03 9.83802E04 7.07402E04 2.30087E04 1.08849E04 2.75018E03 2.31608E04 7.27411E04 2.77907E05 7.96902E05 3.52748E05 8.85628E04 2.97734E05 2.60762E05 3.44983E05 2.08268E05 2.65404E04 1.64428E05 3.92776E05 9.06071E05 1.33068E06 7.97752E05 1.08974E05 2.07695E04 5.22125E04 3.94314E05 1.32498E06 1.76594E06 1.54832E06 6.00782E05 2.57560E05 7.46864E05 5.54874E05 3.45200E05 4.43651E05 6.46337E05 4.46647E05 1.62153E05 1.07460E05 2.56563E05 4.55665E05 3.71288E05 3.05210E05 3.10842E05 1.96313E05 1.13051E05 1.22344E05 1.24380E05 1.28757E05 6.66547E04 1.29530E03 2.12847E04 1.99843E05 2.68287E05 2.24838E05 2.64363E05 1.30007E05 5.52476E04 1.73119E05 1.40589E05 9.69550E04 8.22646E04 1.56696E03 1.24454E05 2.95544E05 8.42774E04 1.02789E03 2.45988E04 7.53407E04 1.37201E04 3.92648E04 1.13748E05 4.67970E04 5.00716E04 9.70924E04 1.99982E04 1.30792E04 2.56738E03 3.03916E04 4.25719E04 7.29939E02 1.82347E04 1.09536E04 2.73528E04 3.09879E04 7.40956E03 2.76649E04 7.95314E04 8.20988E04 6.59803E04 4.21445E03 2.60142E04 2.53762E03 5.03003E04 7.51672E03 5.11025E03 4.28406E01 -Frame 257 2.85349E05 2.85339E05 5.10093E05 2.32448E06 2.44432E06 8.53428E04 4.35407E06 1.09464E07 3.35556E06 1.58890E06 1.29924E07 1.07583E07 3.61798E06 4.12642E07 1.09611E08 3.64254E07 4.10219E06 8.47235E06 6.71980E06 1.08244E06 4.64555E06 9.84349E06 2.51810E06 1.30014E06 7.28536E06 4.92736E06 4.88525E05 2.11692E05 3.89267E05 6.46531E04 3.22504E05 1.28621E06 7.57701E05 5.78000E04 3.51676E04 1.32219E05 2.89276E04 1.76163E05 7.11808E05 3.89199E05 1.48817E03 1.36737E05 2.01363E05 5.20611E04 7.76770E05 2.84766E06 1.16534E06 5.95915E05 2.94436E06 2.36470E06 5.99652E05 7.38020E06 2.33387E07 5.72922E06 4.78913E06 2.06710E07 1.18193E07 2.48917E05 2.90565E06 2.40917E06 2.08544E05 8.31978E05 2.40203E06 2.84927E06 7.65218E05 5.62549E05 1.56433E05 2.53080E05 7.60383E05 8.56238E05 8.25805E04 3.52022E04 8.25394E05 2.69980E06 3.36396E06 7.51881E06 1.21868E07 7.10390E06 2.63915E06 1.23717E07 4.67819E07 3.38779E07 1.02062E07 1.03860E07 7.52118E06 2.18316E06 1.56601E06 3.27537E06 1.03619E06 6.31399E05 2.64168E06 1.45046E06 4.61534E05 9.49257E05 1.13855E06 1.91294E05 4.22927E05 2.38859E06 1.68091E06 8.98504E05 6.16573E05 3.96006E05 1.04057E05 1.73800E06 2.29989E06 9.50347E05 3.94874E05 4.32245E05 5.78848E05 5.15397E05 1.40672E05 3.13796E05 4.12393E05 2.59251E05 1.17418E05 1.15206E05 8.94258E04 1.11474E04 6.13652E03 4.24305E04 2.98231E04 8.88872E03 4.53258E04 3.68248E04 3.41485E04 1.58039E05 1.52772E05 7.66730E04 4.22123E04 2.85697E04 8.92259E03 1.18002E04 4.45079E04 4.99546E04 1.29421E04 2.80233E04 1.07737E05 4.84707E04 2.14347E04 5.03358E04 1.07120E05 7.41373E04 1.29478E05 1.99976E05 1.35671E04 2.13264E04 5.94608E02 3.16248E04 2.66105E04 2.02690E05 2.55490E05 1.25214E05 2.17286E05 3.64167E05 4.52967E05 2.65375E05 1.73771E05 1.43113E05 1.70722E04 1.95393E04 1.02865E05 5.64204E04 5.76693E03 1.35556E04 7.77679E03 4.79941E03 1.32539E04 3.24562E04 9.26388E04 2.23663E05 2.53091E05 1.57626E05 7.58180E04 4.70099E04 1.75139E05 2.18831E05 2.48311E04 2.60074E04 2.76829E04 6.55600E04 1.04226E04 2.43113E05 6.75578E04 4.65791E04 3.63163E04 1.76445E05 1.13110E05 6.50146E04 5.02791E04 1.80163E05 6.87678E05 5.67314E05 1.09306E05 7.58409E04 3.45602E04 7.98361E04 6.88679E04 2.08413E03 1.24804E04 6.56765E04 1.31525E05 3.68421E04 7.19709E03 3.69711E03 6.79986E03 1.92071E03 1.84652E04 1.66810E05 2.43589E05 1.54005E05 2.09218E05 3.32758E05 4.47561E05 4.48286E05 2.11534E05 2.30057E05 3.19881E05 2.97624E05 2.16022E05 3.52655E04 6.77489E04 1.67109E05 2.30303E05 5.15560E05 6.93239E05 3.54512E05 9.72698E04 1.05430E05 1.34471E05 1.48805E05 1.83628E05 1.36596E05 7.15335E04 5.84230E04 6.74449E04 1.67714E05 1.80574E05 1.13346E05 5.26845E04 4.74668E04 7.72003E04 1.07671E05 9.13388E04 3.30643E04 1.45231E04 6.02097E04 1.69551E05 1.78688E05 9.59698E04 1.07314E05 2.20932E05 2.17694E05 1.86865E05 1.39620E05 7.57944E04 4.76106E04 3.23658E04 -Frame 257 1.05624E06 4.22729E05 4.16498E05 2.73978E06 2.26194E06 2.14819E04 4.53959E06 1.06238E07 2.08524E06 2.25942E06 1.27056E07 7.94471E06 4.26810E06 4.84890E07 8.18900E07 1.77911E07 4.74652E06 1.14624E07 4.92106E06 7.21921E05 6.74576E06 8.84636E06 1.38757E06 2.23572E06 5.86810E06 2.23620E06 6.23088E05 1.00763E06 8.22792E05 2.92194E04 5.03558E05 1.71690E06 4.77204E05 1.60830E05 3.63206E05 1.55770E05 4.78852E03 2.79040E05 5.57780E05 8.00881E04 2.07468E05 2.87257E05 1.96755E04 2.23138E05 1.78197E06 3.17013E06 9.19872E05 2.79622E06 3.80835E06 9.17194E05 5.93065E06 2.18872E07 3.23885E07 1.52302E07 9.41992E06 8.61825E06 9.17199E06 5.79167E06 4.77103E05 3.80606E05 1.78753E05 8.47781E05 8.32241E05 1.93871E06 2.50248E06 2.49249E05 3.42907E05 8.62845E05 3.05997E06 1.36179E06 9.13339E04 1.03197E06 1.10482E06 1.08686E05 2.83439E05 1.13715E06 7.00402E05 9.39385E05 1.57434E06 9.73239E06 1.33769E07 7.71166E06 1.79612E06 2.24788E06 1.65418E06 2.00170E06 2.53899E06 1.12972E06 1.17407E06 1.25507E06 7.75775E05 9.55446E05 1.35802E06 8.71389E05 8.07278E05 1.44453E06 1.38125E06 1.95149E06 2.72882E06 2.58661E06 2.41071E06 2.44092E06 2.71919E06 2.09430E06 6.77501E05 2.14602E05 3.97028E05 2.89764E05 1.19487E05 1.01481E05 7.02676E04 1.23036E04 9.47626E02 1.31779E04 2.70783E03 1.27142E04 9.74495E03 5.92752E02 4.60080E03 7.48650E03 9.37401E03 4.63251E03 2.09995E04 2.65073E04 3.01199E03 3.72417E04 6.00890E04 1.90680E04 3.01582E04 7.66272E03 1.73441E03 5.54540E03 1.57237E04 1.24865E04 2.64584E02 4.77112E04 3.51893E04 1.23551E04 3.76507E04 2.47173E04 2.57470E05 2.42141E05 2.40400E05 1.12620E05 6.26573E03 2.34955E04 2.27841E03 8.84490E03 1.31660E04 7.08874E03 1.02008E04 3.97931E02 1.51273E04 2.40786E04 4.25499E04 4.82556E04 4.23659E04 2.39661E03 8.62137E03 5.89407E04 1.26425E05 2.26888E04 4.17910E03 2.30918E04 1.12781E04 1.94293E03 5.14538E02 1.54249E03 1.37283E03 9.25123E03 1.50312E03 1.68791E04 1.03862E04 2.00835E04 7.12265E04 7.63491E04 1.70110E05 2.94028E05 7.93683E05 1.08682E06 8.78814E05 7.49790E05 2.76710E05 3.84990E04 7.69397E04 1.97200E04 2.70140E04 8.01860E04 2.56268E05 5.77752E05 3.86662E05 1.99961E05 8.88978E04 2.59484E02 1.50831E03 2.21054E04 5.68566E04 3.78584E04 8.24908E03 1.83680E04 3.00126E04 7.25272E03 6.62367E03 1.44773E04 1.05238E04 1.48577E04 9.21936E04 1.13899E05 4.21776E04 2.34925E04 4.11183E04 9.59859E04 2.00148E04 5.10330E04 4.21346E04 1.39443E03 2.77610E04 4.69837E04 1.50351E04 3.99804E03 1.89822E02 2.51008E04 2.10072E04 7.28027E04 1.07589E05 7.08826E04 3.88888E04 5.44292E03 4.43311E02 8.26050E03 1.57127E04 2.06758E02 2.21293E04 2.16498E04 4.56374E03 3.07584E04 3.84822E04 1.35226E04 1.30771E04 1.10380E04 9.21394E03 2.35190E04 4.32381E03 7.85487E03 1.90050E04 2.82718E04 4.62306E04 1.90535E04 2.55374E04 1.16138E04 2.87184E04 3.65826E04 2.57846E03 1.05572E04 9.66367E03 7.87560E03 1.34053E02 -Frame 257 5.67264E05 3.52999E05 3.75863E05 2.27360E06 1.91169E06 7.07567E03 5.37610E06 9.49666E06 1.44028E06 2.57680E06 1.16806E07 5.77530E06 5.65835E06 5.10923E07 5.68135E07 7.34199E06 4.53203E06 1.18017E07 2.73373E06 1.16412E06 9.07114E06 6.06025E06 1.83134E05 2.52304E06 3.59913E06 6.00288E05 8.85573E05 2.52662E06 7.28887E05 1.05107E05 1.38150E06 1.19742E06 1.20508E05 5.31995E05 7.68553E05 1.53403E05 9.30473E04 7.58643E05 3.91860E05 1.80954E04 4.13714E05 5.34906E05 1.78942E04 2.51649E06 5.72909E06 7.71652E05 3.33993E06 7.11774E06 8.72957E05 7.93095E06 4.20529E07 4.26701E07 4.73205E06 1.29794E05 4.80678E05 7.11577E05 5.74972E05 2.15556E06 4.01916E06 7.48075E05 5.98401E05 9.09694E05 2.24029E05 1.70352E06 8.52372E06 7.20535E06 2.93796E06 2.59356E06 1.78576E06 1.96867E05 7.60313E05 1.93129E06 1.09637E06 2.72971E05 3.06493E05 1.23576E05 6.40959E04 8.88367E05 1.45341E06 7.92964E04 8.41291E04 1.05515E05 3.13209E05 5.67318E05 5.83798E05 8.66375E05 5.25418E05 2.49475E05 2.60213E05 2.29187E05 4.45979E05 9.94901E05 9.49989E05 3.18670E05 4.57310E05 6.34425E05 2.17774E05 4.77880E05 1.55351E06 6.20288E05 4.85828E04 1.22801E05 3.77644E05 1.28741E05 4.77300E04 1.14213E05 5.50920E04 9.16582E01 7.77327E03 4.66765E03 8.05743E02 1.28506E02 3.11488E02 1.02958E03 3.62626E03 1.04311E04 2.60201E04 1.57691E04 8.84510E02 9.64833E01 6.52471E03 5.07727E02 4.50729E03 6.57988E03 4.91215E03 5.69180E03 2.18975E03 1.73215E04 1.82739E04 5.62824E03 1.06864E04 6.71959E03 5.06327E03 3.38143E03 1.36182E04 2.91817E04 3.40600E04 8.99600E04 1.81616E05 2.01595E05 1.02275E05 3.83080E04 4.94944E04 5.66445E04 1.97300E04 3.11170E04 2.11797E04 2.27970E03 1.08313E04 2.50203E04 1.15157E04 6.11724E03 1.81151E04 3.78043E04 3.59302E04 8.08054E03 3.24850E03 4.68166E03 4.20170E03 2.44250E04 7.82605E04 6.80968E04 6.07529E04 2.56956E04 2.01203E04 1.03807E04 8.64695E02 4.93730E02 7.24206E03 1.51149E04 4.60574E02 1.10500E04 2.19556E04 9.45394E03 2.10326E04 7.21015E04 3.37796E05 8.64680E05 7.87436E05 2.67583E05 1.32086E04 1.07913E05 9.73745E04 1.05889E05 5.33845E04 2.08155E03 2.70015E04 2.06914E04 6.83676E04 1.88507E05 1.61529E05 6.53594E04 2.80068E04 8.27619E03 9.80001E03 1.71593E04 5.35268E03 5.88071E02 5.26885E03 5.65979E02 5.79389E03 2.07834E03 8.09492E03 4.05031E03 1.11454E04 2.53053E04 3.72190E04 1.18840E04 4.52038E03 3.52712E04 3.05642E04 1.69017E04 1.89093E04 9.46299E02 9.40279E03 9.74165E03 5.67361E03 7.12385E03 6.16669E03 1.01465E04 2.95433E04 3.49892E04 9.47558E03 4.99119E03 1.02665E03 1.27830E03 1.37289E03 2.09133E03 8.91981E03 1.75451E04 1.49064E04 2.60969E04 9.98885E02 1.19255E04 1.73798E04 7.73338E03 4.26141E03 4.42997E03 7.64584E03 2.18526E04 1.18396E04 5.04585E02 1.88571E02 5.77197E03 2.21252E04 1.05362E04 6.27285E03 3.42010E04 5.30947E04 2.18647E04 2.73170E04 1.42440E04 3.06978E03 2.94984E04 4.21546E04 2.04947E04 7.61585E03 -Frame 257 2.21429E04 1.31279E05 3.64225E05 2.29649E06 1.67148E06 2.58499E04 5.85080E06 8.46537E06 8.94365E05 2.91475E06 1.01929E07 3.19939E06 7.27939E06 5.24811E07 4.05095E07 5.28473E06 8.30056E06 1.11162E07 1.29594E06 3.07429E06 1.07504E07 3.88507E06 2.14804E05 2.84116E06 1.85525E06 2.98332E05 2.29564E06 3.30294E06 4.24721E05 4.81975E05 1.90529E06 7.02128E05 1.05974E05 8.21956E05 6.95005E05 4.71418E03 6.57595E05 1.09509E06 9.70202E04 4.36294E05 1.36042E06 3.73931E05 1.73324E06 1.06638E07 5.70220E06 6.09748E06 2.62718E07 2.19865E07 3.94726E06 2.17535E07 4.55928E07 1.61808E07 3.00128E06 2.15215E06 1.75090E06 5.19144E04 4.07802E06 9.39249E06 2.59836E06 6.19455E05 7.65310E05 9.09086E05 4.01202E06 1.08010E07 8.35664E06 1.62747E06 4.06200E04 6.85526E05 1.54469E05 1.22441E05 7.27302E05 3.86352E05 2.51445E05 1.32430E05 1.40743E05 3.44743E03 4.35418E05 7.25185E05 1.55641E05 4.83800E05 3.79672E05 4.05958E04 1.71199E05 6.04433E05 3.11384E05 1.46149E04 8.51474E03 3.31299E04 2.14611E03 2.86855E04 1.17552E05 2.05368E05 1.73722E05 5.21006E04 7.56917E04 1.16291E05 1.29240E05 3.53520E05 4.43307E05 1.45807E05 7.40151E04 5.56322E04 2.17972E04 6.60842E04 7.83879E04 1.58508E04 1.28365E04 6.30760E03 1.44203E03 4.60484E02 1.18263E03 4.54585E02 5.54240E02 1.27177E03 2.50626E03 8.88630E03 8.64282E03 3.61768E03 2.07626E03 7.20004E03 1.11504E04 9.97279E03 5.44193E03 6.81618E03 3.30427E03 4.78316E03 6.45295E03 1.10288E04 2.42135E04 2.89751E04 2.12585E04 1.50195E04 2.47325E04 4.57667E04 4.63436E04 1.32425E04 2.48680E03 1.47597E04 3.11424E04 2.42265E04 1.47960E04 1.56031E04 1.44111E03 1.29773E04 1.47130E04 1.97997E04 1.73006E04 2.81519E03 3.88121E03 2.64655E04 1.04211E04 6.80547E03 1.52998E04 1.84213E04 6.62029E04 1.82448E04 2.86247E03 1.77316E04 2.78696E04 1.93157E04 7.14663E03 1.08517E04 4.30139E04 6.34540E04 3.98067E04 1.28424E04 1.68418E03 5.62779E03 7.10366E03 7.47519E04 1.37327E05 8.45026E04 1.58521E03 9.49029E04 1.18283E05 2.10588E04 1.01781E03 1.50147E05 6.68667E04 6.29167E03 6.36934E04 9.14023E04 4.07941E04 1.52030E04 2.98398E04 1.50164E04 1.41660E03 1.51474E04 1.63959E04 5.45997E04 4.09187E04 7.38961E03 5.45223E03 1.31352E04 2.40592E04 1.54571E04 2.00298E03 2.35638E03 5.91473E03 1.06298E04 1.38073E04 1.21693E04 1.34280E04 1.52682E04 1.14522E04 1.08509E04 6.68183E03 2.52428E02 3.65439E03 3.50909E04 2.25508E04 1.07495E04 1.68371E04 1.20625E04 5.46902E03 2.32995E02 2.57214E03 1.70307E03 4.11115E03 7.75482E03 4.22504E03 1.46186E04 9.20335E03 6.07597E03 4.06004E03 2.88880E02 3.57173E03 1.01009E04 6.54837E03 3.34509E03 2.25211E04 1.65346E04 1.95475E04 3.10473E04 1.01163E04 1.15855E03 3.81256E03 5.06196E03 1.05259E03 1.05267E04 1.28271E04 4.21432E03 2.72797E03 2.22050E03 3.68807E03 1.76249E04 1.47808E04 2.23063E04 2.55375E04 2.23917E04 1.10887E04 5.99604E03 1.33430E04 1.46152E04 3.77406E03 2.63326E04 2.49874E04 -Frame 257 7.98940E05 3.55654E05 1.81772E05 1.86492E06 1.57779E06 1.41641E05 5.56291E06 7.25347E06 5.92662E05 3.53924E06 7.80788E06 1.96499E06 9.85558E06 4.75057E07 2.66940E07 3.40351E06 9.47644E06 1.02817E07 3.99007E05 4.85103E06 1.00052E07 2.34725E06 7.80147E05 2.81386E06 1.47568E06 4.86267E05 3.57924E06 3.55357E06 1.50121E05 1.24660E06 1.76390E06 3.03667E05 5.74281E05 1.29656E06 6.50699E05 1.32742E05 1.67946E06 9.40895E05 1.10488E04 2.09210E06 2.21468E06 2.75271E05 1.26824E07 2.02198E07 4.78051E06 3.09495E07 6.90498E07 2.34709E07 4.73565E05 1.35875E07 1.51623E07 1.61793E06 2.98600E06 4.51073E06 8.81370E05 4.10190E06 1.38069E07 5.79912E06 1.14537E06 2.33928E06 1.85995E06 4.24835E05 1.47083E06 5.47722E06 1.19215E06 3.80659E04 3.74128E05 5.08468E05 9.14114E04 2.26687E05 3.93367E05 9.82870E04 1.78178E05 3.20045E05 6.60421E04 1.32342E05 6.56645E05 3.77046E05 1.53482E05 6.81834E05 7.44594E05 1.32343E05 1.33779E06 1.89821E06 4.88750E05 1.03580E05 7.32026E04 1.54245E04 4.24532E03 2.17544E04 7.89717E03 4.12248E03 9.11145E03 2.70410E03 6.54372E02 2.51400E03 2.48690E04 6.11510E04 4.57206E04 1.51596E04 2.12138E04 2.65546E04 2.15722E04 5.08010E04 4.61257E04 1.76356E04 1.67746E04 2.14708E04 5.23009E03 6.34356E03 9.68729E02 1.24670E03 1.27238E02 1.09640E03 1.62775E03 3.87705E02 2.79689E03 2.14330E03 7.35161E02 8.63225E02 1.84429E03 5.45267E03 6.41864E03 6.86311E03 1.22231E03 7.83432E02 3.53792E03 3.38928E03 1.34359E04 2.71698E04 7.03549E03 1.73220E04 1.23233E04 1.61367E04 8.00086E03 9.30372E03 8.85943E03 5.39138E03 6.30940E03 1.00430E04 9.30956E03 2.84676E04 2.49550E04 3.52121E03 4.60517E02 4.22468E02 1.40529E03 2.55395E03 2.92992E04 1.76682E04 6.69915E03 1.07184E04 5.57097E04 1.49760E05 8.53252E04 1.26475E04 2.70137E03 1.73308E03 3.48855E02 7.97352E03 1.90394E04 2.25805E04 1.61096E04 1.75480E04 5.68000E04 2.33533E04 5.37224E03 1.28646E04 5.70742E04 9.67090E04 8.80649E04 1.09481E05 8.91754E04 4.48175E04 7.42352E04 1.27165E05 1.56276E05 2.15539E05 3.14663E05 2.97104E05 2.22477E05 6.25079E04 8.44206E03 2.15330E04 2.34883E04 2.11506E04 5.19952E03 2.83768E04 3.51792E04 6.90926E02 1.19777E04 5.08827E03 1.47982E04 2.54444E02 2.72913E03 2.41892E03 1.36422E04 9.08598E03 8.89690E03 3.17677E03 3.96743E03 3.92965E03 3.14158E03 1.89448E04 2.68653E03 7.15506E03 1.90906E04 1.08903E04 8.63761E03 2.20976E04 9.63903E03 2.78656E03 9.19985E03 3.55010E03 4.12381E02 2.57887E03 3.94361E03 3.92261E03 2.64265E03 4.67285E03 6.11997E03 9.17022E03 3.84865E03 1.69356E04 1.51626E04 7.42030E03 1.71332E03 7.46625E02 6.23686E02 8.82940E03 1.22469E04 6.13170E03 5.32729E03 5.12302E03 4.28570E03 9.82175E03 1.46337E04 3.61535E03 1.64723E02 2.66518E03 3.05303E03 1.42513E03 1.84320E03 2.86008E03 1.98045E03 4.55992E03 2.35844E03 1.39214E04 1.08782E04 1.78105E04 5.08860E02 1.60437E03 7.45738E03 1.13999E03 3.14373E03 1.51106E04 1.44787E04 -Frame 257 3.85037E05 1.35242E05 4.06465E05 2.08710E06 1.33984E06 3.00016E05 5.69242E06 6.47030E06 3.74600E05 3.53879E06 6.67090E06 1.00570E06 1.13027E07 4.40770E07 2.00169E07 3.27757E06 1.17285E07 9.30594E06 1.76992E04 6.68922E06 9.04305E06 9.24630E05 1.30195E06 2.79629E06 7.42669E05 1.47550E06 5.51027E06 3.37948E06 1.59618E04 1.95465E06 1.68431E06 1.49715E05 1.21899E06 1.79682E06 3.70218E05 6.41983E05 2.35310E06 7.81167E05 4.98072E05 4.67390E06 1.74077E06 5.07506E06 4.30748E07 3.49666E07 1.17703E07 5.15448E07 6.98123E07 1.06163E07 4.88216E06 1.65564E07 5.53686E06 9.89020E05 6.23747E06 6.18407E06 3.77265E04 1.41324E07 2.31529E07 6.38589E06 4.26823E06 8.68311E06 2.27811E06 1.65437E06 7.67464E06 4.88644E06 2.93720E05 8.91770E04 2.25753E05 4.82958E04 2.79075E05 6.89555E05 2.52554E05 1.99995E04 9.78469E04 1.05911E05 3.39904E04 5.44685E05 6.56384E05 1.46492E05 9.02438E04 1.87358E05 2.73573E05 1.48924E06 2.79868E06 1.19434E06 1.06282E04 3.93005E03 9.98852E03 1.82143E04 2.09599E04 4.43674E04 1.93257E04 1.97758E04 1.65539E04 5.23138E03 5.42367E01 3.75615E03 4.21295E03 8.94224E02 4.85822E03 2.21572E03 2.69495E03 2.82247E03 1.64282E02 2.94205E03 5.66724E03 2.70194E03 4.89546E02 3.31108E02 2.09439E03 1.47680E03 1.40957E04 8.65130E03 2.33025E03 1.16705E02 3.28729E03 1.81551E03 2.40877E02 8.11653E02 4.57515E03 1.18967E03 1.55328E03 2.18583E03 1.22361E04 3.00996E03 1.82429E03 5.50783E02 2.22073E03 7.15487E03 7.26372E03 1.92950E03 7.19660E03 2.19383E04 2.97739E04 3.21276E04 1.31661E04 1.40289E04 1.52572E04 1.25555E04 1.50288E04 1.62413E04 8.52286E03 4.61374E03 8.74433E03 2.54048E02 3.82978E03 2.67698E03 1.23381E04 1.51415E04 1.96585E04 2.74987E04 1.26225E04 7.50379E03 6.87729E03 4.64781E04 8.13080E03 1.13143E04 8.87586E03 1.98230E03 4.69969E03 1.83231E04 2.04112E04 6.61705E03 6.54808E03 1.76846E04 2.02309E04 1.19201E04 4.97935E03 2.52017E04 3.62575E04 3.75006E04 2.14151E04 2.55474E04 2.15620E04 8.04096E04 9.62620E04 1.55090E05 1.41448E05 6.21580E04 1.54113E05 6.29758E04 3.51024E04 1.18514E05 6.52310E04 7.31705E03 1.58302E04 3.09155E03 3.83491E03 2.37924E04 7.60748E04 3.72812E04 8.69308E03 2.53634E04 2.34634E04 9.56257E03 2.16662E04 1.88580E04 5.86567E03 9.99362E01 4.73114E03 6.13540E03 2.89405E03 2.43089E03 3.11960E03 1.70680E03 9.37666E03 2.27715E04 3.90748E03 5.80798E02 6.66342E03 1.36390E04 1.11861E04 9.28660E02 1.30180E02 2.42029E03 2.92687E03 3.73321E03 8.49208E02 3.33351E03 4.42071E03 8.55497E03 1.55730E03 1.32732E03 5.09789E03 1.24618E04 3.85392E03 1.12581E03 4.93614E03 7.29773E03 1.24395E04 5.46555E02 2.03388E03 8.74117E02 5.35140E01 1.34133E03 9.85386E02 4.04185E03 1.24023E02 5.58115E03 7.92437E03 2.43461E03 9.80449E02 1.94442E02 1.65467E03 8.39262E02 3.15667E02 3.01660E03 9.16396E03 2.27073E04 2.72053E04 1.37855E04 6.42056E03 2.15957E02 2.91012E03 9.86453E03 1.46391E04 1.80047E03 2.43012E02 -Frame 257 6.04102E03 1.48899E05 2.16775E05 1.61704E06 1.39862E06 4.42101E05 5.96411E06 6.00721E06 2.47403E05 3.98532E06 6.53124E06 7.78562E05 1.25142E07 4.07808E07 1.41281E07 3.05778E06 1.45657E07 9.98256E06 4.56898E03 7.23934E06 8.62360E06 5.47644E05 1.61204E06 3.09936E06 5.49846E05 1.62427E06 6.76028E06 3.16272E06 1.30992E05 2.15790E06 1.31361E06 1.11610E05 1.95905E06 2.15523E06 1.03578E05 1.71320E06 2.57992E06 2.49582E05 4.25368E06 1.13501E07 9.04646E05 2.35062E07 8.18505E07 3.47724E07 8.01828E06 3.35080E07 3.44958E07 1.91113E06 9.34676E06 1.61444E07 3.78748E06 1.65062E06 8.97838E06 4.70743E06 1.46393E06 1.86361E07 1.41824E07 9.90989E05 8.97504E06 1.92622E07 5.39380E06 1.17951E06 7.35160E06 2.82896E06 1.51322E05 2.54502E05 2.10709E05 3.93850E04 4.45873E05 4.35392E05 2.26858E04 1.80635E05 2.23152E05 1.54861E05 4.55629E04 4.34741E05 1.91489E05 3.99914E04 2.57216E05 2.26376E05 9.90975E04 5.34191E05 2.69364E06 1.37287E06 1.42506E05 6.03035E04 4.95342E04 9.45580E03 3.53723E04 2.85603E04 1.13918E03 1.42663E04 5.73645E03 1.09721E04 1.57688E04 8.02901E03 1.72286E03 5.33848E02 1.01491E04 2.51888E03 4.12650E03 2.65106E02 1.00385E04 1.12595E04 7.68795E03 9.82764E01 1.84732E03 2.87402E02 1.86766E03 2.05670E03 2.15675E04 1.04656E04 8.17590E02 5.21276E01 1.14429E02 1.30870E03 6.20899E02 8.34089E02 8.51379E02 5.86501E03 4.17586E01 4.32875E03 2.26536E03 1.61516E03 2.27291E03 6.15911E02 2.66359E03 2.12727E04 5.53892E04 2.09603E04 5.67574E03 1.65969E03 4.92453E03 1.06166E04 6.47084E03 2.08552E04 1.33071E04 1.19383E04 1.31257E03 1.98460E04 2.35275E04 5.89848E03 3.85969E03 1.28008E04 1.87799E04 2.53095E04 4.78874E04 5.85808E04 3.43964E04 2.79753E04 8.60529E02 1.02167E04 1.56196E04 2.68713E04 1.25043E04 8.06874E02 1.63568E04 2.08071E04 1.43875E04 1.34704E04 1.03054E03 2.51953E03 3.27618E03 4.61501E03 8.09453E03 2.99970E04 3.66388E04 6.81241E03 9.16310E03 5.67509E03 1.11534E04 2.80653E04 4.14495E04 8.65146E04 3.03482E04 2.64061E04 2.01379E03 3.68101E04 2.32674E03 5.27447E04 2.19790E04 2.50227E04 2.73037E04 3.39502E03 9.54827E03 7.25261E03 1.03530E04 2.69558E04 4.24171E04 2.96711E04 5.19788E03 1.53517E03 8.27240E03 7.17370E03 1.13270E04 7.21264E03 2.45683E03 1.32464E03 4.21270E03 1.27420E04 1.37806E04 8.87820E03 1.44691E03 3.79843E03 1.64154E04 1.84387E04 8.04826E03 2.75515E02 2.19827E03 4.38617E03 1.04085E04 9.69709E03 2.93491E03 3.86726E03 4.69181E03 5.41735E03 3.87766E03 5.91503E03 1.96161E03 2.17714E03 6.68778E03 8.24209E03 1.12035E04 4.89688E02 2.03909E03 9.52936E02 9.87043E02 7.90942E03 1.46905E03 3.01341E03 5.75126E03 7.45000E02 2.70256E03 1.81229E03 2.68326E03 2.51646E03 1.87752E03 2.76138E03 4.38219E03 2.19788E03 2.43738E02 8.88933E02 4.79010E03 7.41703E03 2.35478E03 3.41181E03 1.63142E02 6.06582E03 3.07897E03 4.24940E03 7.54454E03 8.02202E03 7.44462E03 1.19871E04 1.07200E04 3.64779E03 3.22814E03 -Frame 257 4.11173E05 1.85407E05 6.67307E05 2.22594E06 1.29107E06 4.71816E05 6.00226E06 6.51955E06 2.63490E05 3.49825E06 7.25539E06 1.39256E06 1.04104E07 4.17580E07 1.98041E07 1.73538E06 1.42164E07 1.34065E07 1.46584E05 7.19033E06 1.03243E07 1.32570E06 1.66805E06 4.44414E06 1.44341E06 1.17975E06 7.47325E06 4.09241E06 6.62715E03 2.45708E06 2.52932E06 6.48571E04 1.72083E06 3.82923E06 8.67317E05 1.14008E06 5.07356E06 1.66754E06 5.75370E06 2.98811E07 2.36331E07 1.67350E07 6.37462E07 4.15752E07 5.57738E06 7.72699E06 1.85277E07 5.20610E06 1.63708E06 1.00989E07 6.21859E06 9.73516E05 6.92322E06 8.30684E06 5.22434E05 1.03037E07 1.92625E07 6.90506E06 6.84917E06 2.83771E07 1.92361E07 2.10817E05 9.17234E06 6.48386E06 3.60127E05 1.32842E05 7.00293E05 2.08707E05 4.96390E05 8.61788E05 3.26050E05 3.74752E04 3.57298E05 2.53282E05 3.00002E04 5.89443E05 4.68787E05 1.12437E05 5.63509E04 4.66888E05 9.74722E04 8.29276E05 3.06417E06 1.47978E06 1.29540E05 1.01226E04 1.29313E05 8.59358E03 3.78405E04 4.42704E04 1.70386E03 9.23556E03 1.44011E04 5.31874E03 9.56638E03 1.26380E04 6.71775E03 5.61221E03 1.34539E03 2.22226E03 1.77482E03 2.20928E03 1.93553E04 6.05489E03 1.47776E03 5.09956E03 1.33274E03 4.85478E03 4.02715E02 1.96139E03 4.45058E03 4.84575E03 2.19206E03 2.06846E03 6.55055E03 1.06494E04 7.56627E03 1.02078E04 2.71814E03 2.53827E03 2.77614E03 1.99696E03 1.72736E01 3.46604E03 6.43269E03 2.59986E03 7.06248E02 2.01360E04 5.51113E04 1.07950E04 1.58291E03 1.59644E03 8.19232E02 2.11065E03 1.01413E04 1.06169E04 1.51258E03 1.00374E04 2.18363E04 4.24196E03 6.31645E03 1.54125E04 1.35358E04 6.39897E02 1.17395E04 1.42067E04 7.50806E03 5.10608E04 5.90984E04 1.20291E04 7.29154E03 3.68497E03 2.96891E03 3.64891E03 2.40737E04 2.12349E04 1.34544E04 4.06182E03 6.98864E03 1.78334E04 1.64692E04 5.77124E03 3.18623E03 3.14153E03 2.92282E03 5.68032E02 8.75463E03 2.19950E04 1.62178E04 1.09211E03 1.53902E04 5.34149E03 3.74808E03 4.73748E04 5.13307E04 2.44898E03 4.59761E04 8.21626E04 3.10625E04 7.82993E04 9.76166E04 4.57916E04 2.49315E03 9.21027E03 9.70853E03 6.79007E03 2.19471E03 1.88845E04 1.71187E04 4.49264E03 1.82998E04 1.04155E04 4.88111E03 1.67540E03 1.61734E04 5.12851E03 2.01535E03 1.97000E03 5.78822E03 1.15310E04 3.16132E03 1.51597E03 4.35860E02 4.15374E02 1.30234E04 1.48402E04 1.85904E03 1.18061E02 5.64622E03 4.41129E03 1.10300E04 1.26233E04 7.92908E03 1.24644E04 5.85234E03 2.88997E03 6.59882E03 9.84074E03 2.62916E03 2.25900E02 9.26827E02 1.12162E02 2.12338E03 8.44439E03 6.89123E03 2.18804E03 3.29192E03 4.27594E03 6.28895E02 3.55075E02 7.11127E03 1.99688E03 5.35909E03 9.53109E03 2.40745E03 3.05606E03 1.14275E03 6.71125E02 2.07333E02 5.64402E02 8.91688E02 4.41647E02 2.75468E03 2.04624E03 8.05343E02 1.95805E03 2.12786E03 2.89976E03 1.22238E03 9.20221E02 1.50106E03 9.70011E03 1.21013E04 6.68921E03 1.39908E03 1.46054E03 1.15839E03 -Frame 257 5.71852E05 2.35083E05 4.29103E05 2.04983E06 1.30451E06 6.34525E05 6.19629E06 6.65204E06 3.49676E05 3.62051E06 7.03625E06 1.00358E06 1.18826E07 4.45396E07 1.98997E07 2.40636E06 1.91536E07 1.65206E07 1.04795E05 9.21851E06 1.14520E07 1.22591E06 2.73152E06 6.64062E06 1.58246E06 1.91751E06 8.54089E06 4.00571E06 1.53669E05 4.28469E06 3.92223E06 4.48765E04 2.38202E06 4.10184E06 5.52924E05 5.17001E06 1.00234E07 7.67485E05 1.51464E07 3.69186E07 1.09258E07 3.65276E06 3.04661E07 2.54605E07 2.79959E06 3.48431E06 6.21410E06 9.50410E05 3.02710E06 6.47461E06 2.84681E06 5.04817E05 3.23677E06 1.89586E06 8.25876E05 1.14263E07 1.19441E07 2.07402E06 3.42155E06 1.56460E07 9.54083E06 1.33598E07 2.90697E07 1.62467E07 1.27807E06 9.91501E05 1.19702E06 4.57233E05 8.85797E05 8.32209E05 1.57006E05 1.17983E05 3.79138E05 3.00194E05 3.04277E05 3.83180E05 1.48314E05 7.86134E04 5.79614E05 5.93980E05 3.34802E05 7.35926E05 1.12229E06 2.01965E05 1.06549E06 1.28327E06 5.32160E05 6.81936E04 4.27768E04 2.13274E04 2.00788E04 6.30892E04 2.87790E04 5.86863E03 1.57783E03 3.19650E03 3.76612E02 3.86428E02 1.09260E03 8.66797E02 1.20015E03 3.21855E02 2.55521E03 7.02740E03 7.89976E03 7.87884E03 9.21956E03 7.66812E03 6.98469E02 8.46890E01 2.38521E02 1.77444E02 4.64016E02 1.71378E03 2.81564E03 5.59859E03 1.13199E02 3.35970E03 1.39402E03 3.45530E03 5.26599E03 6.19728E03 9.93146E02 2.82199E02 5.57409E02 5.83840E03 6.43449E03 1.32108E03 2.56579E04 2.33031E04 1.59029E04 1.36251E04 4.53993E03 1.48414E03 6.81528E03 1.50073E04 2.42865E04 4.85527E04 3.14408E04 5.50866E03 3.78906E03 2.50527E03 2.80134E03 2.16876E04 3.47833E04 3.12869E04 1.03091E04 6.83696E03 2.56482E04 3.19809E04 3.90868E04 1.62095E04 2.08822E03 3.63755E04 4.81758E04 1.19597E04 1.49138E03 1.48913E03 8.56555E03 4.73056E03 3.36194E03 1.14289E04 1.85641E04 7.94922E03 1.25238E02 9.30053E02 5.87790E03 4.49650E03 8.45047E02 8.93225E03 1.22651E04 4.19194E03 7.90137E03 3.94500E04 6.48811E03 3.58752E04 1.46613E05 1.08559E05 1.13848E04 3.47621E04 1.19268E05 3.69364E04 2.10743E03 1.01591E04 2.56738E04 1.23657E04 3.60758E03 1.57291E04 1.88515E04 5.91171E03 3.59076E04 2.87629E04 1.70889E04 3.42196E04 2.66293E04 1.68285E04 1.35427E04 9.85891E03 6.05284E03 1.55537E03 4.80378E02 8.69301E02 1.57546E03 6.49430E03 6.87788E03 9.32477E03 8.60313E03 6.62167E03 8.74544E03 1.21105E03 9.08544E02 8.44593E03 1.61570E04 8.97254E03 5.38700E03 2.74325E03 3.16575E03 2.55116E03 2.08454E03 2.09864E03 5.16710E03 7.31460E03 1.75219E03 2.16064E03 1.93471E03 1.72588E02 4.19980E02 8.98000E01 1.04818E03 1.77108E03 5.10955E03 1.29463E04 1.94997E04 2.43198E04 1.54399E04 4.43358E03 7.95600E02 4.41278E03 3.76908E03 2.78809E03 7.43902E02 1.24894E03 1.53123E03 9.95926E02 2.44473E01 4.71270E02 1.05926E01 4.21812E02 4.82913E03 8.11273E03 4.61414E03 4.49891E02 3.22964E03 3.97227E03 5.59734E01 2.36904E03 3.55633E03 -Frame 257 3.06222E05 1.14760E05 5.17130E05 2.29517E06 1.31290E06 5.53161E05 5.89394E06 6.89199E06 3.46460E05 3.87098E06 6.88121E06 7.89360E05 1.27214E07 4.28156E07 1.66930E07 3.50161E06 2.77530E07 2.05020E07 4.35808E04 1.06242E07 1.09581E07 5.71798E05 5.19183E06 9.79283E06 2.02983E06 1.61383E06 7.86580E06 3.18400E06 7.01356E05 7.00596E06 5.03864E06 3.67604E03 3.10363E06 3.83747E06 1.70126E05 1.32956E07 1.81480E07 2.55403E06 1.92115E07 3.04620E07 6.84745E06 3.94119E06 2.04244E07 1.29745E07 5.34254E05 1.19214E06 3.15492E06 5.98268E05 2.31076E06 3.59546E06 8.10301E05 9.03815E05 3.25548E06 2.02908E06 4.61795E05 3.43429E06 1.99315E06 2.30620E05 5.01723E06 8.02927E06 2.44742E06 4.43518E06 2.08635E07 1.22773E07 2.52092E05 4.95813E06 1.85672E06 5.37193E04 2.36813E05 3.43442E05 1.88659E04 4.22030E05 3.85407E05 8.12544E04 1.26423E04 7.82620E04 6.88286E04 1.22431E05 3.79728E05 9.97047E04 1.03512E04 1.78280E05 3.26786E05 2.11685E05 1.13144E06 1.96942E06 4.34452E05 6.79160E04 1.66766E05 1.53706E05 4.34722E03 3.90297E04 4.44638E04 6.42545E03 1.52417E04 1.34350E04 1.25027E04 3.79212E02 1.23898E02 1.29022E03 4.66835E02 1.40834E03 8.49864E01 6.97640E02 8.78586E01 1.18469E03 9.94325E02 3.65628E03 3.81983E03 6.01287E02 8.10902E02 2.58341E03 3.55507E03 5.26039E03 2.90973E03 1.15424E03 1.49717E04 1.68467E04 1.26272E04 5.22369E03 1.12571E04 4.16477E03 6.88333E02 7.87285E03 8.25096E03 1.30473E03 1.79923E03 8.63039E03 1.07333E04 5.97239E03 1.21227E04 1.23284E04 2.35405E03 1.25965E03 2.60937E03 1.62197E04 1.98534E04 7.70642E04 4.36374E04 6.42887E03 4.14143E03 1.11811E03 9.58293E03 1.81521E04 3.75244E03 2.10395E04 4.30635E03 9.99530E03 4.51381E03 5.21329E03 2.22631E04 8.00311E03 1.69142E04 3.70849E04 9.41452E03 1.09221E03 9.56585E03 8.50328E03 1.22283E03 1.05319E03 9.74143E01 1.70085E03 8.86731E03 8.95621E03 1.96502E03 8.61969E02 8.72208E03 1.51893E04 7.13105E03 4.74482E03 1.10665E04 1.06985E04 2.09109E04 3.33569E04 3.60066E04 4.33822E04 6.19312E04 3.02304E04 2.32194E04 8.18054E04 8.78868E04 4.24733E04 1.36259E04 2.33630E04 2.81118E04 8.45047E03 5.87027E03 2.34472E04 5.70475E04 5.55678E04 1.11419E04 7.30707E03 2.62127E04 1.78080E03 5.16803E03 3.25605E03 2.15978E03 1.22645E03 2.09310E03 1.67241E03 6.12385E01 1.76647E03 1.86132E03 2.12809E03 1.63184E03 2.72698E03 3.24490E03 1.27627E02 3.85200E03 7.72104E03 7.93252E03 1.17129E04 6.92685E03 8.67254E02 5.20059E02 1.99168E03 9.52821E02 3.77361E01 8.81555E02 1.48291E01 6.94915E03 3.74326E03 1.07463E03 1.38966E03 6.76794E02 3.32650E02 1.87776E03 7.04339E03 9.86659E03 8.70658E03 9.03461E03 4.46520E02 4.15845E03 3.28931E01 4.15756E02 1.92472E03 2.08012E03 1.56165E03 2.54800E03 6.40391E02 2.83434E03 2.10345E03 5.22962E01 3.15412E03 4.08107E03 1.99878E03 3.24613E03 9.27221E03 1.83537E04 1.07303E04 7.76807E02 6.88701E02 1.39840E02 1.31684E03 2.17390E03 4.93690E03 1.01339E04 -Frame 257 1.08766E04 1.26390E05 8.24286E05 2.52896E06 1.32029E06 6.41861E05 6.12332E06 6.62230E06 3.63571E05 3.83215E06 6.58514E06 4.18116E05 1.33293E07 3.90405E07 1.25158E07 7.15171E06 3.77704E07 2.25703E07 1.10308E04 1.18408E07 1.10508E07 2.77600E05 7.30009E06 1.05731E07 1.19385E06 3.22186E06 8.59477E06 1.89460E06 2.27290E06 1.01491E07 5.32833E06 1.52729E05 4.94951E06 3.93499E06 2.18768E06 3.05708E07 3.14757E07 4.79504E06 8.88349E06 1.22142E07 2.03755E06 2.81050E06 1.12032E07 5.22783E06 7.80633E04 3.00792E06 2.05250E06 1.75786E05 1.08137E06 1.81284E06 8.72734E04 1.28542E06 2.84071E06 8.50461E05 2.32708E05 1.60153E06 9.80011E05 1.52972E05 3.08167E06 2.72288E06 2.72110E05 3.79883E06 1.09524E07 4.89512E06 4.10799E06 1.32585E07 8.42718E06 3.65163E05 4.46121E05 5.35461E04 2.91877E05 1.28028E06 9.23160E05 1.06192E05 1.23486E05 4.66888E04 2.02384E04 2.16375E05 3.28222E05 5.08869E04 1.43364E05 3.18875E05 1.66848E05 1.43078E04 4.83668E05 9.98161E05 1.83871E05 5.73800E05 1.02300E06 2.88721E05 3.97197E04 1.11151E05 2.36670E04 2.35319E04 5.35735E04 7.70114E03 4.62536E03 1.81762E04 6.51268E03 3.29608E02 1.47395E02 8.45348E02 9.33385E02 3.98714E02 1.82353E03 6.94562E02 2.45565E03 1.75040E03 5.85717E02 1.68122E03 1.05196E02 4.00941E02 6.71408E02 1.46788E03 8.33031E03 4.47938E03 8.20866E03 6.44328E03 6.44553E03 6.66574E03 2.89610E03 6.28598E03 6.64931E03 7.54423E03 6.94954E03 5.74519E02 1.01169E03 2.98210E02 2.70289E03 6.34152E03 1.33135E04 6.12935E03 1.60667E02 1.97598E03 2.84153E03 1.57226E04 6.66310E04 4.81106E04 6.79177E03 8.14377E03 3.64846E03 2.53641E03 2.03720E04 1.97727E04 1.72603E04 1.08412E04 3.02135E04 3.60415E04 2.26317E04 1.57965E04 5.20598E03 2.42997E04 4.95388E04 4.68380E04 2.15289E04 1.69447E04 3.61777E04 2.89012E04 1.55272E04 9.23205E03 1.31719E04 1.18075E04 7.39929E03 2.78857E03 1.03467E03 7.12379E03 1.03205E04 7.91424E03 2.01278E03 6.00803E03 1.33595E04 8.48753E03 1.73909E04 1.32244E04 1.41756E04 1.35333E04 8.48857E03 3.86127E03 2.90963E04 4.52638E04 5.56757E03 9.13173E03 8.31819E02 7.47579E03 2.53058E03 8.51608E03 1.47896E04 2.90461E03 3.67691E03 1.32458E04 2.72609E03 9.34026E03 2.92338E04 1.05853E04 4.75490E03 6.47835E03 3.46749E02 6.19581E02 1.44579E03 6.24024E01 1.96613E03 2.72861E03 1.67168E03 7.87301E02 1.71768E02 2.06852E03 3.62275E03 8.51414E01 1.64081E02 1.66567E03 6.61908E03 3.00541E03 6.15410E03 1.69394E04 1.53311E04 1.51792E04 9.65962E03 7.78827E03 7.26427E03 1.38576E04 1.70377E04 1.10849E04 8.54258E03 3.77859E03 3.14679E03 3.03877E03 3.68075E03 5.96749E02 4.02026E03 8.48388E01 9.20549E03 2.62102E04 2.22538E04 1.01244E04 2.95212E03 6.30720E02 1.65431E03 2.47000E03 3.82178E02 7.91210E02 1.87498E03 2.01690E02 1.28028E03 4.68927E03 3.02153E03 1.11479E02 3.15328E02 5.14433E03 2.20206E03 1.50857E03 6.26114E02 5.24736E02 5.61517E03 8.00506E03 4.27043E03 3.83290E03 5.00833E03 -Frame 257 7.54688E05 4.39314E05 2.88529E05 2.11807E06 1.27396E06 7.07386E05 6.07065E06 6.70686E06 3.98189E05 3.83340E06 6.21496E06 3.11578E05 1.33477E07 3.72841E07 1.13686E07 7.17245E06 4.10231E07 2.31339E07 2.94113E04 1.28763E07 1.27298E07 4.26967E05 6.99277E06 1.08236E07 1.55883E06 3.29184E06 1.09814E07 3.46510E06 1.53019E06 1.07900E07 6.22694E06 8.25080E05 1.25679E07 1.02600E07 3.09303E06 5.04601E07 4.60976E07 5.71299E06 2.81340E06 5.13901E06 9.68195E05 1.35969E06 6.47245E06 3.92759E06 3.35691E04 1.92382E06 1.20114E06 2.53185E04 8.36337E05 1.49996E06 2.55520E05 2.97562E05 1.44705E06 4.29398E05 3.13229E05 1.55784E06 1.14950E06 2.01194E04 1.22992E06 1.13631E06 1.41302E05 2.19368E06 4.11462E06 1.27514E06 1.23763E06 9.37841E06 1.09481E07 3.13475E06 2.37336E06 2.31439E06 5.60728E05 1.61196E06 2.28037E06 4.75145E05 3.89859E04 1.19058E05 3.23691E04 7.48171E04 5.03679E05 2.76892E05 4.82043E03 1.00980E05 1.45410E05 1.54690E04 2.38288E05 5.16906E05 2.05231E05 1.66554E05 9.26179E05 1.39435E06 4.72459E05 3.48802E05 2.24334E05 1.50519E04 3.50048E04 4.73462E04 9.33851E03 1.23926E04 1.49720E04 4.02399E03 3.67058E02 6.60325E02 1.06900E03 4.22311E03 5.42181E03 1.18503E03 5.80953E03 6.78809E03 1.30955E03 2.15138E03 9.84804E03 8.35232E03 2.66626E03 6.52763E02 6.67063E03 4.36277E03 4.88999E03 8.35613E03 1.08340E04 5.53588E03 7.79620E02 2.36009E02 1.91940E03 4.15466E03 3.40743E03 1.22558E04 1.77145E04 1.73650E04 8.87295E03 4.45143E03 8.50083E03 2.03323E03 7.30952E03 8.17341E03 1.42061E03 4.06876E03 1.49183E04 2.96017E04 6.01018E03 8.59011E03 3.52383E04 2.42296E04 4.76085E03 2.94333E03 5.75852E03 1.58794E04 3.17261E04 1.32268E04 5.45902E03 8.16229E03 2.89460E02 1.32326E04 2.30769E04 2.40867E03 7.03549E03 9.67857E03 2.83019E03 2.98725E03 5.75283E03 3.65496E03 7.43673E03 1.99147E04 1.88659E04 1.35441E04 9.60057E03 1.20843E04 1.30075E04 5.13665E03 5.89769E03 9.74593E02 1.04042E03 5.92439E03 1.60384E03 1.27374E04 4.80966E04 5.40723E04 2.27179E04 3.46905E03 4.21130E03 1.09688E04 1.50028E04 2.41274E04 2.66625E04 1.66209E04 5.56138E03 4.33716E03 7.71197E03 2.34446E03 1.27029E04 4.36145E03 4.02892E03 7.70475E03 1.58257E04 1.48869E04 6.13702E03 7.45427E03 5.94998E03 5.09930E03 3.16111E03 6.94249E02 5.94593E03 4.61738E03 2.43205E03 7.64438E02 2.18536E03 1.19696E04 1.39759E04 2.18303E03 7.97489E02 9.29764E02 1.22416E03 5.19089E03 1.10500E04 2.27600E04 8.97302E03 3.46716E03 9.65048E03 1.37884E03 1.80018E03 3.63138E02 2.00500E03 5.47025E02 4.63389E03 7.08139E03 2.49938E03 3.07439E03 6.15225E03 4.31722E03 1.64859E03 1.66995E03 8.81005E02 3.09525E03 4.44657E03 2.90806E03 1.15057E03 5.92209E02 2.50371E03 6.83703E03 4.12081E03 3.22448E02 1.93480E03 7.69776E02 2.66869E03 7.46680E03 2.19932E03 1.74672E03 4.61654E03 2.79725E03 4.43331E02 5.57601E03 5.24841E03 3.07908E03 1.30681E04 6.45340E03 1.03727E03 2.38773E03 4.29101E03 -Frame 257 9.78713E05 3.65912E05 6.13358E05 2.58651E06 1.38206E06 6.65530E05 6.00692E06 6.59802E06 4.37979E05 3.48937E06 6.46908E06 4.38235E05 1.32867E07 4.03807E07 1.43629E07 5.56776E06 3.97128E07 2.42306E07 4.30521E04 1.35263E07 1.47508E07 8.78213E05 5.85616E06 9.83273E06 1.14029E06 4.56455E06 1.51978E07 5.36589E06 1.69874E06 1.21435E07 8.49484E06 1.22710E06 2.63954E07 2.20712E07 3.15266E06 5.11146E07 4.54458E07 5.76370E06 4.50841E05 2.61086E06 1.16693E06 3.38974E05 3.87777E06 3.21547E06 1.54299E05 6.52817E05 8.58290E05 5.38894E04 4.78057E05 1.06539E06 2.56560E05 1.78725E05 8.48015E05 4.65278E05 3.79204E04 8.39519E05 6.78983E05 9.53548E03 7.56564E05 9.37382E05 1.13141E05 5.67399E05 1.59070E06 3.00148E05 7.58160E05 3.32446E06 1.92226E06 1.42226E05 2.20654E06 6.48814E06 2.32791E06 1.20196E06 3.30341E06 6.91808E05 1.66532E05 4.63862E05 1.66102E05 2.61053E05 8.87393E05 5.78741E05 1.01202E05 1.05446E05 5.77386E04 2.88943E04 2.46416E05 3.00016E05 8.72496E04 1.43404E05 4.11595E05 2.70809E05 2.36965E05 5.93901E05 1.25573E06 6.96294E05 4.60184E05 3.23220E05 5.68896E04 3.39195E04 5.75944E04 3.13856E04 1.17424E04 6.83272E02 9.50581E02 8.54166E03 9.52723E03 1.39406E03 1.26736E03 6.34447E03 3.62361E02 3.08968E03 5.20942E03 1.37421E04 3.55416E03 1.28780E02 2.24969E03 1.46014E03 8.08354E02 9.41122E02 3.10382E03 5.60651E03 4.30717E03 3.60684E03 2.71096E03 1.22617E04 1.51782E04 7.32708E03 1.99608E04 1.70602E04 2.65201E03 3.72239E03 4.22272E03 3.34483E03 1.11943E04 9.65592E03 2.87552E04 4.17886E04 4.46264E04 6.72138E04 3.17334E04 9.35706E03 2.96465E04 1.70293E04 2.01924E04 4.54852E04 4.17194E04 1.32906E04 6.23200E02 2.09254E04 3.41563E04 2.13559E04 3.69860E03 6.48462E03 3.91304E03 2.54166E02 3.37621E03 3.72117E03 3.19643E03 1.34742E04 1.63909E04 2.82277E03 7.07878E02 2.57281E03 1.64514E03 2.93464E03 2.38579E03 6.41437E03 3.08235E04 1.62407E04 1.53459E02 3.66694E03 4.72946E03 2.01519E03 3.30838E01 1.21136E04 1.67943E04 6.98916E03 2.68710E04 7.03642E03 4.99776E03 1.41265E04 1.73502E04 4.68482E03 1.78447E04 1.85929E04 1.30959E03 1.27153E03 4.13943E03 2.19680E04 2.87998E04 1.89678E04 9.82006E03 6.84584E03 1.16438E04 3.06114E03 1.24807E03 4.34892E03 2.00584E03 8.08032E02 9.92640E03 1.34667E04 1.28232E04 7.10108E03 3.17949E02 2.32645E03 4.58863E03 7.76934E03 1.39599E04 9.63842E03 6.90494E03 1.87763E04 1.80234E04 3.27341E03 3.18945E03 5.62605E03 5.82693E02 2.20487E03 7.41554E03 6.35661E03 9.45482E02 2.33857E01 5.77244E02 2.68120E03 3.07637E03 1.38450E03 3.36040E03 3.49765E03 6.02132E-01 2.03269E03 3.90294E02 9.36632E01 2.82091E02 7.07637E01 2.12095E02 6.74183E02 6.87011E02 8.85864E02 2.59633E03 5.49552E02 2.55107E03 6.14452E03 8.59666E03 5.73472E03 1.40644E02 5.71515E03 1.83792E04 1.40960E04 5.05060E02 9.13059E03 2.03210E04 9.46580E03 6.43221E03 1.91835E04 9.86043E03 4.51858E02 1.89516E03 9.12244E03 1.29906E04 -Frame 257 2.89071E05 1.88347E05 2.10803E05 2.16993E06 1.38635E06 7.28912E05 5.91187E06 6.20657E06 4.46107E05 3.50994E06 6.05651E06 1.98694E05 1.55759E07 4.20783E07 1.28299E07 7.74831E06 4.02695E07 2.14098E07 2.67656E05 1.53068E07 1.42768E07 6.05232E05 5.56623E06 8.61722E06 5.74011E05 6.70452E06 1.98503E07 6.62706E06 2.31404E06 1.35883E07 6.89461E06 5.39344E06 5.07712E07 4.09971E07 4.47246E06 2.01918E07 2.07871E07 2.34087E06 1.13037E06 2.28956E06 7.15859E05 4.55732E05 2.97599E06 1.33547E06 3.50633E04 8.93460E05 6.21190E05 2.03958E04 5.28142E05 6.64621E05 5.09913E04 2.35070E05 4.52661E05 9.84897E04 1.73856E05 8.81836E05 5.57677E05 1.63208E03 3.68893E05 4.06910E05 4.42062E03 8.61639E05 1.29166E06 3.05262E05 2.16267E05 7.65130E05 1.32422E05 7.14191E05 4.46108E06 5.30893E06 9.85675E05 3.84195E06 5.15809E06 4.08168E05 1.45006E06 2.82746E06 8.26889E05 3.74378E05 1.24031E06 4.08762E05 7.14159E04 3.07193E05 1.13637E05 2.24836E04 1.80291E05 2.25346E05 1.29090E04 1.05129E05 7.39577E04 1.10028E03 8.15653E04 6.59877E05 8.50666E05 5.08453E05 1.13779E06 1.55649E06 7.02290E05 1.36610E05 3.83496E05 1.62837E05 9.15714E04 1.00147E05 4.28740E04 2.96850E04 1.06256E04 1.43617E03 8.29052E03 1.02980E04 1.00375E04 1.56547E03 9.23217E02 1.09134E03 2.84180E03 4.67545E03 7.39692E03 2.91850E03 1.52330E03 2.72618E02 2.11735E02 3.30759E03 2.64744E03 3.61868E03 7.51661E02 4.24082E03 2.42495E04 1.52945E04 4.29732E03 3.97191E03 1.06419E04 1.41318E04 3.18114E04 1.74872E04 1.23046E04 2.87017E04 2.30822E04 2.58319E04 1.08807E05 2.27288E04 1.14874E04 5.42643E04 6.25659E04 1.06222E04 2.57354E04 2.76996E04 2.29638E03 1.08416E04 1.24805E04 2.65170E03 3.65173E04 2.87174E04 5.97837E02 2.90392E03 1.26525E04 9.47148E03 1.65131E03 6.82548E02 7.74407E02 7.14489E03 2.89592E04 2.18034E04 1.25817E04 4.37973E03 4.43900E02 3.70299E02 8.92852E02 3.58941E03 1.08381E04 1.25731E04 4.22133E03 4.03327E03 4.01130E03 1.68615E03 1.01648E04 1.01394E04 1.96427E03 3.80433E04 4.96727E04 4.19190E03 2.45838E04 2.86771E04 2.80914E03 1.20336E04 3.99730E04 1.24626E04 4.23495E03 1.29880E04 1.41568E04 6.55014E03 7.68215E02 3.97317E03 3.75101E03 4.03490E03 5.42078E03 1.08898E03 2.95875E03 7.73801E03 2.68886E03 2.60221E03 7.14700E02 9.39385E03 5.77739E02 3.53710E03 9.73243E02 4.57075E03 7.39489E03 4.21759E03 1.94642E03 1.14426E03 1.18556E04 4.66011E04 3.80742E04 1.29218E04 4.18120E03 2.95420E02 2.44158E03 1.28907E03 2.68435E03 5.69968E03 2.51201E03 1.87678E03 2.63300E02 2.57431E03 5.60447E03 1.34028E04 1.01282E04 2.62616E02 3.44011E03 4.86615E03 2.02243E03 4.49215E02 2.84084E01 3.64205E01 4.19471E02 2.03559E03 1.23279E03 1.24150E03 3.91432E03 5.97440E03 2.64962E03 3.27969E03 1.80917E03 1.52729E03 2.16995E03 1.37414E03 1.76431E03 4.81047E03 1.71473E04 6.27117E03 4.02067E03 6.52401E03 6.43077E03 2.06748E03 8.19095E02 6.00979E03 2.72303E03 3.53057E02 2.67655E03 -Frame 257 5.33922E04 5.35088E04 4.87869E05 2.53569E06 1.60638E06 7.92711E05 5.93430E06 5.87897E06 4.33917E05 3.38244E06 6.02101E06 1.85756E05 1.69071E07 4.18065E07 1.18059E07 7.72108E06 3.76591E07 1.92033E07 4.08540E05 1.51722E07 1.24841E07 3.58762E05 5.43858E06 8.45307E06 4.12213E05 8.45531E06 2.15112E07 6.21614E06 3.38113E06 1.67293E07 6.83037E06 1.12413E07 8.15266E07 5.38666E07 2.81256E06 5.33556E06 7.05712E06 6.64321E05 1.08695E06 1.99769E06 5.89578E05 5.24525E05 2.52432E06 1.22178E06 2.07284E04 7.38920E05 5.47599E05 4.80084E03 5.45768E05 7.34845E05 1.19479E05 1.64791E05 3.83023E05 6.19026E04 2.22999E05 7.41946E05 2.71386E05 4.92688E04 4.03560E05 3.05566E05 8.34314E03 6.24983E05 8.49898E05 8.17389E04 2.46639E05 5.46954E05 1.18300E05 4.09364E05 1.90151E06 8.63717E05 3.22926E05 3.58033E06 4.68913E06 4.67031E05 4.10198E06 9.04343E06 2.86726E06 1.37405E06 2.34972E06 6.88729E05 2.53497E04 4.69342E05 2.18383E05 5.40140E04 2.55685E05 2.38301E05 1.71680E04 2.01165E04 3.57907E04 3.38902E03 1.37042E05 4.18411E05 1.66588E05 3.93250E03 1.63066E05 2.82181E05 2.19788E05 1.36253E06 2.19124E06 1.04746E06 3.48328E04 1.57421E05 1.02754E05 2.46347E04 1.68114E05 1.03528E05 2.48551E04 2.30635E04 8.87571E03 1.22860E04 1.74492E04 1.48584E04 1.07507E04 6.88272E03 4.27842E02 7.39652E03 1.04198E04 4.42009E03 7.17117E03 1.03808E04 1.22351E04 1.29090E04 1.26324E04 2.48814E04 2.38390E04 1.45314E04 2.39090E04 5.06757E04 4.14612E04 5.80177E04 9.43152E04 3.22331E04 1.41178E04 5.78591E04 4.40230E04 5.76195E04 1.78880E05 9.99383E04 2.10482E04 1.58312E05 2.31709E05 4.51133E04 7.78425E03 2.84878E04 7.65382E03 9.03315E02 4.33718E03 2.27501E04 7.74576E04 5.24654E04 4.87528E03 5.48226E03 1.67571E04 1.19066E04 7.87101E02 4.19243E03 4.09054E03 1.33515E04 2.27394E04 7.53571E03 5.17794E03 1.62366E04 6.80143E03 1.28817E03 2.62048E03 1.57944E03 2.07788E03 3.42483E03 1.64029E03 2.87284E02 1.95394E03 1.96533E04 1.99085E04 6.08597E03 2.98902E04 3.23424E04 1.02508E04 3.71579E04 1.12941E05 9.00305E04 2.61583E04 4.21169E04 3.22135E04 6.53442E03 2.45775E04 3.55041E04 1.48419E04 5.35848E03 5.60970E03 7.53378E03 9.15178E03 7.50301E03 1.21115E04 1.71247E04 2.21442E04 1.60676E04 4.47160E03 1.50615E03 3.52171E03 1.15822E04 2.94296E04 2.62030E04 8.95124E03 4.94229E02 1.74402E04 2.12687E04 1.18655E04 3.18438E04 6.38671E04 2.83430E04 1.50531E03 9.30998E02 8.75026E03 9.52111E03 8.45575E03 1.90902E03 5.37136E03 7.82048E03 1.02248E03 2.76456E03 9.22331E03 9.22626E03 5.99107E03 3.28211E03 1.57158E04 1.64020E04 6.14398E03 2.99010E03 7.57282E03 4.76968E03 1.42928E03 8.66676E02 2.79845E03 3.71664E03 2.61590E03 1.22697E03 3.87787E03 2.13714E03 1.90009E03 4.71364E03 6.60040E03 6.29114E03 1.23000E04 1.05306E04 6.02099E03 4.91953E03 6.19380E03 8.50022E03 6.14394E03 5.00981E03 6.93902E03 2.89072E02 3.01341E03 4.97188E03 2.51763E03 5.34108E03 1.17810E04 -Frame 257 8.50033E05 4.78450E05 6.64925E05 2.63024E06 1.59644E06 8.63103E05 6.11076E06 5.72537E06 4.81369E05 3.43411E06 6.17005E06 1.56976E05 1.84093E07 4.24267E07 1.07123E07 7.05240E06 3.14522E07 1.53390E07 5.88817E05 1.46115E07 1.13574E07 4.52944E05 5.08216E06 8.50635E06 3.44790E05 8.52781E06 1.91085E07 4.45051E06 5.47084E06 2.31537E07 7.50017E06 1.96844E07 1.08213E08 6.19830E07 2.20918E06 3.37126E06 3.99041E06 3.49156E05 7.26698E05 1.19492E06 3.05465E05 4.45153E05 1.72613E06 6.25365E05 6.69123E04 5.72658E05 3.48014E05 2.91921E04 6.47147E05 5.77256E05 3.58353E04 1.99661E05 3.93051E05 5.94566E04 1.30087E05 5.31288E05 2.17770E05 2.71499E04 3.41448E05 2.65592E05 7.13141E03 4.82070E05 5.53513E05 1.64017E04 2.69219E05 6.38284E05 1.55077E05 2.15606E05 7.58079E05 3.46912E05 1.49577E05 2.01767E06 2.20253E06 2.34950E05 6.41051E06 1.36755E07 4.50112E06 4.04843E05 2.58669E06 3.15480E05 4.49591E05 8.37503E05 2.78509E05 1.02582E05 4.41374E05 1.92456E05 2.50580E04 1.04057E05 6.34167E04 2.80498E04 2.75103E05 3.44995E05 2.13777E04 7.47646E04 1.40983E05 5.47612E04 1.42922E05 9.63522E05 5.30225E05 9.87230E04 6.95793E05 5.42931E05 3.25803E04 3.65340E05 8.62683E05 3.59434E05 2.31492E04 1.40484E05 1.02000E05 1.51516E04 3.90614E04 2.08996E04 8.14608E03 1.09990E03 4.36107E03 3.48940E03 2.46621E03 3.35518E03 3.69045E03 1.55833E02 5.05432E02 2.04564E03 2.09880E03 6.22518E03 5.97891E03 1.30187E04 3.72313E04 2.82338E04 4.04835E04 8.83468E04 1.14873E05 6.83574E04 6.92138E04 4.53444E04 7.79930E03 7.74306E04 2.45394E05 3.06467E05 1.45090E05 5.41499E05 4.51466E05 9.25208E04 4.04373E04 2.25756E04 2.74326E04 2.97033E04 2.06309E04 1.41907E04 1.67895E04 2.82655E04 1.59201E04 5.96085E03 2.50167E04 2.21113E04 1.99012E03 2.40380E04 4.51872E04 2.62712E04 3.96072E03 6.72377E03 8.27349E03 1.85133E03 1.07953E04 1.75716E04 8.25064E03 1.43196E03 1.56584E03 3.92934E03 1.46352E03 1.73718E03 2.27137E03 1.45686E04 1.98332E04 2.31913E04 2.65227E04 2.48531E04 1.71983E04 8.33790E04 3.49454E05 2.61299E05 5.14444E03 5.20941E04 2.41506E04 2.06370E04 4.63739E04 3.87323E04 1.61212E04 2.15596E04 1.05749E04 4.72545E03 8.32601E02 4.52672E03 1.45845E04 1.40103E03 1.43568E04 1.34475E04 2.97777E03 9.79179E02 3.88659E02 1.40484E03 4.79470E03 2.52011E04 1.20589E04 4.52158E03 3.00528E04 2.85189E04 1.85267E02 3.84388E04 4.02589E04 3.83277E03 2.04032E03 1.04922E04 2.52911E04 1.72382E04 1.67338E04 1.00142E04 1.26796E03 2.55123E03 6.03230E03 1.04810E03 1.71366E03 1.71899E03 4.72470E02 4.30359E03 8.55690E03 1.80476E03 5.48326E03 6.12920E03 1.09823E03 1.18387E04 1.23920E04 1.10752E04 5.14131E03 2.00396E03 2.36077E03 1.22569E03 2.23942E02 1.76781E03 1.02576E03 9.12509E02 2.33394E03 3.04859E03 7.28450E03 5.64004E03 9.35028E02 8.18982E02 6.89000E02 1.10524E03 6.36872E03 1.44953E04 1.61290E04 5.77508E03 5.62171E00 2.44480E03 2.84877E02 2.18701E04 4.92823E04 -Frame 257 1.01891E06 4.34232E05 4.26454E05 2.15130E06 1.46433E06 8.36066E05 6.24705E06 5.82751E06 6.13053E05 3.64416E06 6.04865E06 3.81257E04 2.07841E07 4.41582E07 1.03628E07 5.32328E06 2.26257E07 1.00109E07 8.97389E05 1.36397E07 9.12523E06 3.96619E05 5.45108E06 7.89894E06 3.17498E05 7.27556E06 1.41947E07 2.44998E06 9.15484E06 3.26284E07 1.22488E07 2.03343E07 9.86214E07 5.10585E07 7.95263E05 4.17724E06 4.05104E06 4.60427E05 2.64377E05 5.56299E05 1.55675E05 3.38579E05 1.23018E06 4.39287E05 1.69327E04 3.70811E05 3.43002E05 1.06692E04 4.75265E05 4.20670E05 3.81909E04 1.27470E05 2.15404E05 7.62293E03 1.59125E05 4.42950E05 1.36561E05 7.38097E04 2.69506E05 9.82987E04 3.59613E04 3.81604E05 2.73039E05 4.58146E03 2.41562E05 3.04568E05 2.20298E04 2.19082E05 4.24062E05 1.46085E05 2.94663E05 1.19493E06 5.68145E05 6.30067E05 5.13338E06 5.46864E06 1.11565E05 5.00568E06 6.79104E06 1.43545E06 1.38079E05 7.35715E05 1.60062E05 2.37456E05 5.37085E05 2.67177E05 5.93813E03 9.27280E04 7.32744E04 5.11801E04 3.31832E05 3.20605E05 7.35334E04 1.09414E04 3.36352E04 2.17400E04 4.10920E05 8.17025E05 4.02163E05 7.81188E03 3.73122E05 2.13933E05 2.05165E05 8.84249E05 1.16331E06 3.18214E05 3.82493E04 2.00778E05 4.91548E04 4.94258E04 1.51914E05 8.02176E04 3.14866E04 5.40317E03 2.46680E03 7.69082E03 6.11962E03 9.86512E03 1.27908E04 1.19902E04 7.64292E03 3.74254E02 3.50882E03 1.30020E04 2.46049E04 5.45963E04 8.02807E04 9.07007E04 1.81299E05 2.19759E05 1.32242E05 1.25240E05 1.77141E05 1.56447E05 6.38678E04 5.52724E03 8.72446E04 3.84661E04 7.67185E05 9.80278E05 3.01010E05 1.53229E04 5.78404E02 5.81885E03 3.53263E04 7.75780E04 6.17982E04 1.86649E04 6.86242E03 3.59804E03 5.02570E03 5.40408E02 1.38171E04 1.33298E04 6.96154E03 2.13637E04 1.20635E04 4.98909E02 7.25303E03 8.95327E02 1.27990E04 1.21570E04 3.20338E03 5.35820E03 1.25154E04 5.35840E03 6.18448E03 9.97288E03 5.45287E03 1.08030E04 1.34362E04 9.17313E03 8.73961E03 1.11539E04 1.45344E04 1.87371E04 7.21252E02 1.93251E05 4.09928E05 6.18083E04 1.06034E05 2.25127E05 9.37382E04 5.02481E03 2.32306E04 1.03174E04 5.54926E03 2.59232E04 9.04101E03 4.50147E02 3.95388E03 2.57160E02 6.41883E03 1.73635E04 1.44271E04 3.43960E03 6.55551E02 9.49082E02 1.23137E03 3.76981E03 1.02420E04 1.30840E04 1.85673E03 3.07351E03 7.14258E03 1.02628E04 1.49447E04 1.03072E04 3.59159E03 1.11875E03 4.70825E03 1.15924E04 2.21619E04 3.28352E04 1.62022E04 2.74460E03 5.94972E03 7.91467E03 1.35227E03 7.11490E02 6.81115E03 8.11685E03 2.81180E03 6.09425E03 5.05312E03 4.47442E02 9.97849E03 1.15015E04 1.89818E03 6.93207E03 2.13445E04 1.14746E04 8.25407E03 4.44608E03 1.04634E03 5.69400E03 1.20538E04 5.47043E03 1.05319E02 4.02522E03 2.62296E03 1.03059E03 2.37942E03 5.58509E02 5.27947E02 4.57091E03 5.94723E03 3.95355E03 1.56330E03 3.30137E03 8.14206E02 1.30382E03 1.71774E02 5.01870E03 1.60959E04 1.74589E04 2.98602E03 -Frame 257 1.84034E05 2.98261E05 1.00024E06 2.46627E06 1.33156E06 8.15490E05 5.96996E06 5.80194E06 5.89018E05 3.55811E06 6.42567E06 7.34763E04 2.01307E07 4.66690E07 1.29690E07 2.37284E06 1.38805E07 6.85999E06 5.23762E05 1.04794E07 8.12438E06 6.53301E05 4.60848E06 7.27821E06 7.91181E05 3.71546E06 1.02946E07 2.11479E06 9.16967E06 3.54961E07 2.07935E07 1.08875E07 5.57048E07 3.26256E07 5.65027E05 3.82938E06 3.80880E06 5.83743E05 2.13996E05 4.64269E05 8.41070E04 2.79979E05 1.01668E06 4.63705E05 6.09007E04 3.69874E05 3.07918E05 6.29680E03 2.56606E05 2.96959E05 3.09675E04 1.08191E05 2.43906E05 6.46868E04 1.28766E05 3.71948E05 1.21920E05 9.93409E03 1.82686E05 1.33685E05 8.75233E03 1.93568E05 1.41785E05 6.73556E03 1.41108E05 1.49362E05 2.18662E04 5.66314E04 2.76195E05 1.10207E05 8.50478E04 6.54867E05 6.61011E05 1.65653E04 1.25308E06 2.38880E06 5.28453E05 3.95534E06 9.53449E06 3.43009E06 1.75913E05 1.27566E06 7.14814E05 2.30950E04 1.32322E05 7.31499E04 2.37587E04 1.96184E05 2.88939E05 4.83788E04 3.98922E04 9.63368E04 6.96965E03 7.65038E04 1.60939E05 9.45221E04 5.63595E03 1.70191E05 1.12159E05 6.96854E04 4.82843E05 5.90975E05 1.84413E05 9.23031E04 3.76910E05 1.19927E05 7.15722E04 2.69135E05 1.66972E05 8.70629E03 2.01912E05 1.76278E05 9.65369E03 9.98642E03 1.75369E04 1.03783E04 4.91684E03 3.43292E03 1.11694E03 4.69472E03 1.00470E04 1.15135E03 1.66319E03 7.34327E03 1.54494E04 7.69958E02 1.73270E03 2.16165E04 5.22312E04 1.34858E04 1.21441E05 5.50631E04 1.30347E02 1.33182E04 4.30726E04 2.13540E05 4.50671E05 3.16502E05 5.12379E04 1.16831E05 9.61728E04 1.43702E04 3.82970E04 4.31442E04 6.51726E03 1.25876E03 1.91952E04 1.29102E04 5.88676E03 8.54882E03 9.14031E01 4.34547E03 1.00705E04 3.86090E03 5.29779E02 1.38268E03 5.89513E03 4.94850E03 1.10258E03 2.03233E04 2.36579E04 1.33834E03 4.03877E03 5.95287E03 7.77665E02 9.06845E03 4.69126E03 1.17034E04 1.29865E04 1.51255E04 1.48731E04 1.03635E04 2.87893E04 1.75995E04 9.05948E02 1.38271E04 4.20993E03 8.93443E04 3.50712E05 1.79951E05 4.32328E04 1.27896E05 3.59580E04 1.55744E03 2.00673E04 2.48635E04 2.26540E03 9.93844E03 9.86301E03 4.65474E03 2.43977E03 9.96228E03 1.68838E04 3.13088E03 4.72164E03 6.04423E03 3.11294E03 3.14260E03 1.53808E03 4.16108E02 2.01556E03 7.03942E03 4.66506E03 1.62061E03 4.56222E02 1.08048E02 2.32300E02 1.45166E02 3.14505E02 2.06402E02 1.68293E03 4.00556E03 6.38531E03 6.08922E03 7.99969E02 3.92803E03 5.28820E02 4.43264E03 1.80330E03 3.74763E01 5.34381E03 4.89505E03 7.21623E02 1.19229E04 1.14340E04 4.61787E02 9.94189E03 1.35589E04 3.47098E03 2.75736E04 2.90793E04 1.29872E04 6.99484E03 6.36903E03 6.90394E03 1.45193E03 2.55306E04 3.03115E04 5.41216E03 6.84417E03 1.45807E04 6.08675E03 7.04668E02 3.97950E02 1.09516E03 1.81152E03 2.59506E03 4.23472E03 1.79270E03 8.13111E02 3.75538E03 2.26221E03 9.57386E02 1.38041E03 1.78782E03 3.50675E03 2.82394E03 -Frame 257 2.65089E05 1.34207E05 4.42205E05 1.94176E06 1.24349E06 8.23745E05 5.53612E06 5.14712E06 5.68276E05 3.85536E06 6.11485E06 7.85737E03 2.07110E07 4.39349E07 1.04364E07 1.79946E06 8.62139E06 4.28281E06 4.67908E05 7.60482E06 5.49099E06 3.32760E05 4.05927E06 5.18490E06 2.15845E05 3.41110E06 8.22053E06 1.91011E06 5.61064E06 2.36398E07 1.06027E07 7.11740E06 3.28066E07 2.06265E07 4.83905E05 2.08456E06 2.33375E06 2.53710E05 2.70261E05 5.14279E05 9.72893E04 2.44638E05 8.32119E05 3.81253E05 3.92880E04 2.62271E05 1.28325E05 1.64884E04 2.81169E05 2.61748E05 3.03735E04 9.07755E04 1.55185E05 1.49065E04 1.51292E05 2.79416E05 9.00915E04 2.23761E04 1.42924E05 8.06620E04 1.06326E04 2.20163E05 2.15720E05 2.61610E04 4.46559E04 8.54560E04 1.56402E04 6.19824E04 1.87793E05 3.69126E04 5.09930E04 2.70831E05 1.62366E05 9.01173E04 8.23390E05 7.06730E05 2.02306E04 2.51098E06 5.70612E06 1.60192E06 1.44182E06 2.02948E06 3.92842E05 1.32042E05 3.97467E05 1.68008E05 2.34757E04 1.79894E05 1.63490E05 5.56318E03 1.16316E05 1.45202E05 1.60876E04 5.22978E04 1.34545E05 3.43305E04 6.80237E04 2.09038E05 9.14871E04 2.03572E04 3.29707E05 3.16226E05 1.19626E04 2.43693E05 2.90088E05 5.39620E04 8.27457E04 2.82817E05 8.64878E04 1.11284E05 5.34551E05 2.52272E05 5.18131E03 4.65623E04 2.26181E04 3.13044E03 1.47141E03 5.02370E03 3.72924E03 1.58434E03 5.64307E03 1.91409E03 8.07012E02 4.34104E03 1.29412E04 1.10167E04 1.43528E04 4.34724E03 1.06821E04 5.20597E04 1.29819E05 5.19824E04 1.76063E04 3.73707E04 5.73798E04 5.31236E04 1.36671E05 7.45770E04 1.82903E04 2.30522E03 2.30255E04 3.40562E04 5.51739E04 5.46867E04 9.15411E03 3.84670E03 2.75562E04 6.17692E04 5.39084E04 3.53206E04 7.06345E03 4.77495E03 3.25541E03 8.27815E02 6.35917E02 7.26963E02 4.00547E01 3.23162E03 3.79617E03 9.76804E03 1.56286E04 6.34840E03 7.23287E02 8.21971E01 9.45006E03 1.29562E04 1.21878E04 1.07234E04 7.23629E03 1.22265E03 1.94433E03 8.64948E03 3.85899E03 1.58070E04 1.17289E04 3.40040E03 5.89936E02 3.67795E04 2.45150E05 2.13633E05 4.14235E04 4.92553E04 3.99437E04 1.51996E03 7.05095E03 1.39483E04 1.24400E04 8.65951E03 6.27154E03 8.81734E03 2.27482E04 1.89251E04 3.57944E03 6.30641E03 8.75585E02 3.71696E03 2.75881E03 1.47372E03 2.47026E03 1.21676E03 2.37090E03 7.11622E02 4.65886E02 5.38353E02 9.79927E00 8.37122E02 1.84367E03 2.40741E03 1.89283E03 1.51918E03 2.24086E03 3.19760E02 2.39499E03 9.82336E03 7.89794E03 1.13458E03 2.62045E03 3.29256E03 8.53026E02 7.17832E02 3.92701E03 5.50394E03 1.94131E02 1.11912E04 1.56500E04 4.38464E03 4.40340E03 2.80889E04 2.21039E04 4.52715E03 2.18013E04 7.92344E03 4.19685E03 1.73836E04 8.91447E03 2.80962E03 2.72214E04 2.84014E04 5.61799E03 1.19474E04 5.52313E03 8.30359E01 8.31087E02 1.21333E03 1.06040E03 3.50483E02 9.00646E02 3.72700E02 5.86842E02 2.56617E03 2.44644E03 1.60281E03 1.06146E03 6.36874E02 8.61833E02 8.39305E02 2.42778E02 -Frame 257 1.65315E06 8.19712E05 8.14817E05 2.44711E06 1.45021E06 8.80437E05 5.29182E06 4.95866E06 5.66321E05 3.77414E06 5.37541E06 1.33896E04 2.10096E07 3.98446E07 8.06503E06 1.38501E06 5.22025E06 1.97050E06 7.27825E05 6.00040E06 3.46758E06 1.97912E05 3.03058E06 2.91593E06 7.93814E03 4.22742E06 6.34501E06 7.48637E05 5.77166E06 1.49956E07 3.86528E06 6.09087E06 2.57786E07 1.20655E07 1.39855E04 1.94007E06 1.46681E06 5.90850E04 3.38224E05 4.52469E05 6.76541E04 2.58653E05 6.00393E05 1.47805E05 7.09970E04 1.79138E05 1.03421E05 3.47788E04 2.76320E05 1.49964E05 1.53583E04 1.09165E05 8.59635E04 3.72345E03 8.05431E04 1.60505E05 5.67659E04 5.46033E04 1.14326E05 2.52792E04 2.74073E04 2.28716E05 1.58833E05 9.23286E03 1.09397E05 8.29934E04 7.62160E03 8.24758E04 8.99827E04 1.80848E03 3.07938E04 8.52392E04 4.13663E03 1.97347E05 4.89769E05 1.23155E05 2.84799E05 1.86017E06 1.08988E06 4.09193E05 2.69580E06 2.52888E06 3.14460E05 3.14624E05 4.14806E05 4.65826E04 8.17107E04 1.40511E05 9.03785E03 9.85682E04 2.45515E05 1.21575E05 1.09265E04 1.12441E05 4.86154E04 3.32371E04 2.27240E05 1.42615E05 1.33154E04 1.86140E05 2.28217E05 2.78178E04 6.49925E04 2.38389E05 9.87569E04 4.96964E04 2.74489E05 1.21203E05 6.11925E04 6.95984E05 7.36238E05 5.70697E04 9.08817E04 1.23820E05 2.55555E04 4.22991E03 9.71021E03 1.68495E04 1.80100E04 1.13419E04 5.62366E03 4.21189E03 4.48898E03 1.04537E04 2.01384E04 1.83948E04 4.63959E04 5.44324E04 4.73524E04 6.79113E04 6.13333E04 1.53166E04 2.40319E04 9.20965E04 8.69811E04 1.19306E05 1.70527E05 1.40554E05 1.32815E05 1.42139E05 5.47415E04 1.00443E04 1.61689E04 4.76344E03 8.11597E03 2.43610E04 3.33606E04 2.25433E04 1.83733E04 2.96220E04 6.19023E02 6.93108E03 1.32207E04 1.28226E04 9.33164E03 9.55302E02 3.61896E03 1.18905E04 5.15019E03 9.57742E01 5.45298E03 3.21456E03 6.51746E02 6.35435E03 6.16947E03 1.85881E03 2.34620E03 1.68340E03 1.07329E03 6.60506E02 3.30835E02 3.39684E02 6.60720E03 1.04256E04 7.57240E03 3.39485E03 6.79620E03 8.19289E03 5.33307E04 1.99280E05 1.40539E05 4.57343E04 3.38726E03 3.93134E03 2.81913E00 5.64323E02 1.39818E02 1.04322E02 2.03850E03 2.65125E03 1.98922E02 5.79470E03 7.58724E03 9.23532E03 1.19077E04 9.21052E03 4.81171E03 1.27535E04 2.22803E04 1.25121E04 3.02897E03 2.33128E03 2.34967E03 4.42640E03 4.40490E03 3.06774E03 3.14160E03 2.58399E02 4.74957E01 2.53874E03 6.35025E02 5.17676E02 3.80666E02 1.44844E03 9.60143E02 1.43606E03 4.23045E03 3.15301E03 7.41612E03 6.61089E03 8.43545E03 1.89349E04 2.10476E04 5.24143E03 1.97037E04 2.69526E04 1.98607E03 2.87819E04 4.75387E04 1.64606E04 5.75938E03 2.94439E04 2.57415E04 4.83585E03 1.19517E04 1.59155E04 1.14276E03 1.01840E04 7.08390E03 2.74947E03 7.27895E02 1.63390E03 1.15969E03 1.70954E03 2.21791E03 2.24469E03 2.39117E03 3.06583E03 2.78539E03 2.16660E03 2.27339E03 2.99451E03 2.73504E03 1.87143E03 1.88074E03 1.06894E02 1.41443E-01 -Frame 257 1.49670E06 4.60895E05 3.80556E05 2.39714E06 1.47539E06 8.33263E05 5.08787E06 4.59378E06 4.50057E05 3.63677E06 5.07049E06 1.07680E04 1.90198E07 3.73410E07 8.08043E06 7.17404E05 3.33220E06 1.23254E06 7.65741E05 4.67057E06 2.59255E06 1.09817E05 1.80566E06 1.73095E06 1.71699E04 3.42097E06 4.64896E06 3.68429E05 3.77994E06 8.94499E06 3.11222E06 6.85471E06 2.69316E07 1.31947E07 5.39572E05 2.26514E06 1.45101E06 9.15593E04 3.54054E05 3.01606E05 4.34503E04 2.28857E05 4.42083E05 8.25122E04 8.02404E04 1.39655E05 2.38547E04 9.94158E04 3.28962E05 1.65948E05 8.13138E03 7.27137E04 4.92449E04 5.61789E03 7.73681E04 6.64531E04 1.18045E03 7.31406E04 6.45797E04 5.79426E03 7.81361E04 1.75446E05 5.94758E04 1.23790E04 9.18387E04 3.23798E04 7.52509E03 8.50248E04 5.87732E04 1.70169E04 4.51441E04 4.15910E04 7.21354E03 2.77802E05 4.76081E05 8.86798E04 4.37173E05 1.35395E06 5.01594E05 4.15093E05 4.03248E06 3.01610E06 6.90011E04 2.95578E05 2.31160E05 8.13594E03 1.34808E05 1.72289E05 4.09198E04 4.21985E04 1.44070E05 3.77292E04 3.84132E04 1.46650E05 4.96081E04 1.96976E04 1.91900E05 1.75438E05 7.68551E03 8.14123E04 1.46902E05 1.73802E04 1.16166E05 2.50916E05 3.56730E04 1.26746E05 2.39563E05 1.17837E04 2.85860E05 8.04747E05 4.27500E05 3.05507E04 1.34225E05 1.22976E05 2.60591E04 1.28971E04 2.13983E04 8.08841E03 9.92920E03 6.15086E03 2.51479E03 1.29073E04 1.16788E04 1.89717E02 5.54906E03 2.43250E04 2.55686E04 2.54728E03 2.10639E04 5.46964E04 4.87434E04 2.08851E04 5.84947E04 5.41359E04 1.24562E04 3.16483E04 6.18770E04 9.78966E03 5.17339E04 1.04662E05 3.27496E04 2.65975E03 1.33439E04 2.30214E04 1.25084E04 1.30419E04 5.98484E03 3.11994E04 5.02916E04 2.60040E04 5.25895E03 6.46397E02 2.16175E02 4.39187E03 1.74006E04 1.49993E04 1.31147E04 1.27441E04 1.13779E04 2.18455E04 2.13777E04 1.27164E04 5.95918E03 6.23476E03 3.98396E03 4.13768E03 1.21591E04 3.48929E03 1.25586E03 1.47905E03 4.41132E03 9.57363E03 1.28784E04 9.17344E02 4.50237E03 4.32047E03 1.70970E04 2.68114E04 5.10193E03 4.28302E04 9.99233E04 3.92209E04 6.00383E03 5.38201E02 1.21515E03 1.21059E03 5.32339E02 2.01923E03 6.17522E03 4.85058E03 8.96718E02 1.45463E03 2.23018E03 1.93081E03 6.42034E03 1.69581E03 2.08262E04 3.51275E04 1.02903E04 6.83706E03 6.45410E03 1.07515E03 4.21864E03 1.17614E03 1.35857E03 2.32211E03 5.01874E03 2.29686E03 1.19796E03 1.68466E03 5.36646E03 6.02655E03 3.08783E03 1.38291E03 9.06347E02 1.36815E03 7.37050E02 8.49835E03 1.88284E04 1.41731E04 1.09013E03 5.51094E03 7.89637E03 1.14229E04 3.27323E04 3.08482E04 2.64258E03 2.78469E04 3.13751E04 1.14602E03 2.45504E04 3.15329E04 4.13812E03 1.38708E04 3.39463E04 2.08807E04 5.17651E03 5.99082E03 2.84120E03 3.31577E03 8.25921E03 5.36661E03 9.46978E02 1.68717E03 1.63836E03 3.10799E03 3.47465E03 3.23827E03 1.38608E03 1.83725E03 3.39451E03 1.52868E03 6.41210E03 8.61344E03 2.93763E03 1.93815E03 1.85614E03 -Frame 257 3.34336E05 2.96579E05 3.90916E05 2.50233E06 1.53004E06 8.97687E05 5.00355E06 4.11433E06 3.44841E05 3.31445E06 4.39919E06 3.27237E04 1.81199E07 3.30831E07 6.14225E06 9.92793E05 3.05942E06 9.11258E05 1.05670E06 4.07847E06 1.76273E06 1.40736E05 1.43657E06 1.01374E06 1.41364E05 3.16294E06 3.47692E06 2.89112E05 2.06151E06 3.87884E06 8.11335E05 3.80723E06 2.44033E07 2.37492E07 2.35931E06 2.46468E06 1.91084E06 2.85545E04 3.77410E05 1.02235E05 5.95765E04 2.55124E05 1.95633E05 3.14981E03 2.25238E05 2.69772E05 1.11998E05 1.14642E05 2.36896E05 5.46106E04 2.26879E04 1.15876E05 7.45755E04 1.88101E04 9.93528E04 6.42249E04 3.10614E03 4.98951E04 6.40491E04 1.07234E04 4.45609E04 7.31153E04 1.73977E03 4.52428E04 1.00578E05 3.61860E04 2.49221E04 9.50516E04 3.71853E04 1.64811E04 1.18312E05 1.26879E05 1.34267E05 5.68615E05 6.12623E05 7.02128E04 7.33613E05 1.32400E06 8.32498E04 3.28633E06 7.53265E06 2.78072E06 1.80120E04 1.89010E05 4.98728E04 1.75682E05 4.27570E05 1.97266E05 9.33931E04 2.02389E05 9.10565E04 3.19366E04 1.82394E05 1.61136E05 2.86033E04 6.74407E04 1.32419E05 8.52334E03 9.39497E04 1.35108E05 3.55064E04 6.44659E04 2.46232E05 7.75933E04 5.01601E04 3.31319E05 2.90079E05 1.74991E04 1.36637E05 2.52008E05 3.82520E04 5.43802E04 2.01501E05 1.46625E05 4.61165E04 1.08714E05 1.49208E04 2.46044E04 4.47834E04 1.45466E04 7.17137E03 9.45075E01 3.96180E03 3.71853E03 1.87730E03 2.82087E03 1.46549E04 7.03255E03 4.26855E03 2.03073E04 2.08224E04 1.30836E04 2.80903E04 4.00456E04 2.33664E04 2.26926E04 1.57431E04 5.18353E03 4.68515E03 1.29855E04 2.64457E04 2.72913E04 2.64067E04 6.71709E03 2.60237E01 2.78526E03 1.80606E04 4.43010E03 6.73960E03 3.87914E03 2.11292E03 6.70439E03 1.34126E04 2.22195E04 6.17304E03 6.80071E02 6.58096E02 1.39919E03 2.68140E03 1.22165E04 9.30586E03 8.44840E02 3.40153E02 1.82143E03 3.72768E02 2.97666E03 1.76239E04 1.85402E04 7.98156E03 1.77515E03 1.75854E03 1.77198E03 7.39624E03 7.27068E03 2.70000E02 1.62094E03 1.04029E04 1.32095E04 2.47045E04 3.48256E04 9.96431E02 5.97169E03 1.01317E03 3.80983E03 7.47543E03 5.44991E03 1.79793E03 1.39545E03 5.69863E03 5.06872E03 7.45938E01 2.63220E03 3.97762E03 1.30814E04 1.17525E04 8.12128E03 1.24560E02 1.17922E04 1.38194E04 7.34369E03 3.43226E03 6.95104E03 8.44160E03 6.87591E03 2.81576E03 9.67256E02 4.59437E03 5.40775E03 5.31645E03 1.73345E03 7.44003E01 2.29344E03 2.87007E03 7.93207E02 3.20268E02 1.85985E02 8.45797E00 2.93011E03 7.73658E03 2.59542E03 1.49622E04 6.57177E03 1.23923E03 1.31440E03 1.00150E04 5.96938E03 8.11052E03 1.63511E04 8.04993E03 1.95945E03 1.15741E04 1.12787E04 3.35615E03 1.93125E04 1.59500E03 6.86317E03 1.15591E04 9.63002E03 2.00039E03 7.61488E03 1.73879E04 7.69707E03 3.31088E03 2.61674E03 1.59338E03 5.06669E03 6.35099E03 1.52557E02 4.97927E02 1.48460E03 2.59766E02 3.48721E03 1.00417E04 5.74346E03 8.67850E02 3.39550E02 1.44157E03 -Frame 257 2.88231E05 1.70832E05 5.62099E05 3.05458E06 1.53426E06 9.55547E05 5.10732E06 3.74248E06 3.87901E05 3.14083E06 3.30933E06 2.71739E05 1.84046E07 2.70789E07 3.35235E06 1.90542E06 3.25111E06 6.15626E05 1.21006E06 3.46993E06 9.99689E05 2.83974E05 1.37563E06 5.55494E05 3.07597E05 2.64530E06 1.66844E06 4.55164E04 1.51658E06 1.19040E06 3.89454E04 3.93792E06 1.00409E07 3.71180E06 4.16505E06 1.05058E07 6.23296E06 6.97026E05 1.73513E06 1.19230E06 5.69543E05 6.53523E05 3.89329E05 1.25651E05 4.40681E05 2.34954E05 3.40402E04 2.46712E05 1.88933E05 3.12978E04 1.35727E05 1.50912E05 1.26262E04 8.63099E04 9.91366E04 5.94789E03 7.20998E04 1.28600E05 4.21933E04 1.01946E05 1.89299E05 8.75884E04 2.43393E04 8.01599E04 1.75612E04 2.06110E04 1.35678E05 1.25416E05 3.66962E04 1.42689E05 1.22952E05 3.63185E03 3.96187E05 6.32106E05 9.75965E04 8.55064E05 1.33885E06 1.59298E04 3.30349E06 7.62240E06 2.23101E06 5.15089E05 7.92635E05 1.29509E05 5.82591E04 4.52177E05 3.00327E05 2.43262E04 2.45652E05 2.10926E05 5.94004E03 9.19675E04 1.38138E05 2.85325E04 4.35809E04 1.51097E05 4.07851E04 2.11111E04 1.38011E05 7.68834E04 4.95424E04 1.84436E05 9.09539E04 1.06278E04 1.68435E05 1.15951E05 1.67838E04 1.88940E05 1.34114E05 7.64645E03 1.21719E05 1.48390E05 7.56675E03 2.08058E05 4.16848E05 5.81850E04 3.56593E04 1.29831E05 4.45895E04 1.33693E04 2.70251E04 1.94096E04 4.30398E03 7.58446E02 2.43956E03 3.47241E03 1.11801E04 9.24646E03 7.11044E03 2.40376E04 7.52184E03 2.98197E03 5.89887E02 2.46843E03 7.84091E02 2.66629E04 9.97344E04 9.70986E04 8.77657E04 6.01481E04 6.03836E04 5.76277E04 5.55319E02 2.65997E03 8.67703E03 3.64438E03 6.93756E03 6.94177E03 9.85112E03 1.98556E04 1.49514E04 2.40099E04 2.74249E04 1.23074E04 8.07648E03 6.75942E03 2.99059E03 9.02378E02 1.53500E03 5.44622E03 7.78570E03 1.33526E04 2.13187E04 1.29410E04 1.96203E03 1.88804E02 1.88323E03 7.43445E03 2.91834E03 4.35618E03 5.97752E03 8.03891E02 9.48109E02 5.37233E03 1.91232E04 1.34567E04 4.72230E03 1.53202E04 4.72035E04 5.41222E04 3.39994E04 1.33499E04 6.26582E03 5.73221E03 5.52920E02 1.09579E03 1.23323E03 1.72841E03 1.71202E03 5.04627E01 5.27317E03 1.09750E04 1.94486E04 1.77127E04 6.17499E03 1.43085E04 1.27304E04 7.72294E03 4.64488E02 1.93896E03 1.56513E03 1.50147E03 4.67493E02 1.67641E03 1.17152E04 9.43277E03 4.54717E03 5.75916E03 7.19099E03 3.82198E03 3.95800E03 1.84105E03 2.51010E03 2.50817E03 3.07085E02 3.48451E00 1.71858E03 4.68337E03 2.52450E03 1.13865E04 2.08644E04 1.31908E04 3.42136E03 6.07750E03 5.21879E03 7.27029E03 1.02135E04 2.57887E03 1.01467E02 1.97541E03 1.22745E04 1.86522E04 7.43860E03 1.49622E04 3.21835E04 1.51534E04 2.06854E04 2.47289E04 4.69256E03 2.07651E03 5.35133E03 5.09265E03 2.50593E03 5.71706E02 2.33223E03 7.23897E03 1.01149E04 5.55524E03 6.90543E02 1.59378E03 3.23877E03 2.26734E03 1.37599E03 1.87886E02 6.63086E02 1.86088E03 4.03409E03 -Frame 257 2.07505E06 9.75187E05 4.36728E05 2.71728E06 1.60690E06 9.20343E05 5.18304E06 3.57778E06 3.58432E05 2.79867E06 2.42586E06 6.34266E05 1.81394E07 2.16520E07 1.97601E06 2.49970E06 3.25525E06 4.91816E05 1.28227E06 3.22138E06 8.02608E05 2.36174E05 9.44330E05 2.65828E05 3.79024E05 2.37870E06 1.16868E06 1.15498E05 9.62398E05 8.05512E05 3.58868E04 1.99482E06 2.17560E06 1.03434E05 1.42032E06 4.12080E06 1.88176E06 2.61911E06 8.83535E06 6.44328E06 1.45147E06 2.61063E06 1.42397E06 5.41653E05 1.96211E06 1.12277E06 1.81172E05 4.23783E05 2.89385E05 1.40770E05 3.85365E05 2.41455E05 3.58709E04 1.78499E05 1.93834E05 2.44984E04 1.43810E05 2.25644E05 6.08236E04 1.16983E05 2.30324E05 3.47156E04 5.11196E04 1.89987E05 1.04008E05 6.59574E04 1.94286E05 9.02820E04 3.22380E04 2.57257E05 2.24597E05 2.40145E05 1.11629E06 8.03702E05 3.03521E05 1.73017E06 6.64261E05 4.00033E05 4.01213E06 4.94606E06 1.31119E06 2.62396E04 9.16013E05 8.77635E05 2.63393E05 7.61688E05 2.92517E05 1.02025E05 5.01971E05 3.04420E05 1.00516E05 2.23230E05 1.49784E05 6.24342E04 2.47822E05 1.35115E05 6.15338E04 2.01937E05 2.10274E05 2.03881E04 1.40853E05 1.87347E05 5.02520E04 1.85847E05 3.40047E05 1.23551E05 3.10350E04 2.96397E05 1.91238E05 1.05052E05 3.78086E05 2.82484E05 1.69848E05 7.85654E05 4.25760E05 2.25958E04 4.75142E05 3.67828E05 5.74521E04 9.26478E03 1.29518E04 1.10052E03 9.17741E03 1.11830E04 1.23260E04 3.39508E04 7.34554E04 2.59917E04 2.10174E03 4.59825E04 5.91483E04 1.04939E03 2.42329E04 2.49083E04 2.27940E04 1.47688E05 2.11223E05 5.31623E04 1.19150E05 3.47852E05 1.92707E05 6.88282E04 5.13781E04 2.79433E04 3.34393E04 4.59570E04 4.48050E04 4.27504E04 4.15111E04 1.97644E04 6.01541E03 6.54732E03 4.38287E03 7.61129E02 2.31193E03 1.96985E03 3.37507E02 1.21814E03 2.98415E03 5.26107E03 3.14627E03 1.25139E04 2.49589E04 2.30350E04 1.83683E04 1.06026E04 6.73755E03 7.16742E03 6.12188E03 5.65630E03 1.46484E03 6.17042E03 6.93455E03 8.43418E03 3.65990E03 1.02234E05 2.60839E05 3.97873E05 2.47332E05 3.64362E04 1.11616E04 1.76375E04 3.14024E04 2.26001E04 1.29648E04 5.33853E03 1.19752E03 2.11998E03 2.62173E02 1.68005E03 1.10471E04 9.96327E03 7.96057E03 1.69525E03 9.74214E03 2.13904E04 1.02261E04 1.18368E04 1.02792E04 3.12528E03 9.35873E03 6.83124E03 6.97976E03 9.41123E03 5.20325E03 2.78322E03 1.44138E03 6.02458E03 1.00292E04 1.56697E04 1.95629E04 4.11090E03 1.95798E03 3.85009E03 1.50235E03 6.79661E03 2.01215E04 1.64612E04 3.39870E03 3.63475E02 1.00973E04 9.73812E03 5.20367E03 8.04790E03 2.53021E03 3.58763E03 1.12129E03 2.06125E03 5.10273E03 7.36039E03 8.74481E03 5.87093E03 6.74963E02 5.22790E03 8.39432E03 2.13846E04 3.60948E04 3.47108E04 1.61566E04 4.74320E03 8.80612E03 1.26983E04 4.11433E03 7.36952E02 2.54787E03 3.71688E02 2.62279E03 4.54485E03 2.70081E03 1.66336E03 1.05526E03 1.27790E03 2.58419E03 2.71789E03 2.08862E03 2.65226E03 3.77228E03 -Frame 257 1.47887E06 6.71131E05 1.28946E06 3.02352E06 1.45541E06 9.28352E05 4.81955E06 3.01090E06 2.57089E05 2.76603E06 1.50060E06 1.54982E06 1.70291E07 1.49202E07 1.69886E06 2.78020E06 2.67130E06 2.59788E05 1.15515E06 2.16208E06 3.95541E05 2.05891E05 5.83961E05 2.64147E04 8.33271E05 2.12610E06 9.52539E05 3.53511E04 5.31841E05 1.27237E05 2.55743E05 1.14490E06 6.61833E05 5.40053E04 9.01968E05 3.20036E05 2.49631E05 2.03519E06 3.65165E06 1.69851E06 1.51999E06 4.88910E06 1.94446E06 8.93106E05 7.63909E06 4.73717E06 1.29981E06 1.79218E06 4.01147E05 1.39364E05 7.70608E05 3.71511E05 4.10885E05 7.63120E05 2.64293E05 8.27279E04 4.33360E05 2.68010E05 1.30236E05 4.30406E05 1.41420E05 6.38877E04 2.66322E05 1.53321E05 2.45801E03 1.65431E05 7.85233E04 2.12768E04 1.95922E05 2.08619E05 2.25318E04 7.25760E05 1.43043E06 5.90319E05 5.51812E05 1.47251E06 1.25746E06 4.41511E03 1.43299E06 1.04656E06 4.75842E05 2.36943E06 5.11835E05 9.13976E05 3.32221E06 1.61457E06 9.46615E04 5.30720E05 4.79098E05 2.96968E03 4.39961E05 4.37105E05 4.20506E04 2.05086E05 3.20275E05 5.18405E04 6.43554E04 2.30985E05 3.78701E04 6.11637E04 2.27406E05 4.21666E04 8.14784E04 3.21295E05 1.25897E05 9.44083E04 3.58447E05 1.52118E05 2.07366E04 2.72746E05 1.95857E05 4.12481E04 6.88108E05 6.85512E05 3.19151E05 7.00440E05 1.15664E06 4.60537E05 5.30138E04 1.09853E05 1.12474E05 7.31892E04 9.43593E04 8.69611E03 5.71451E04 5.61893E04 3.23819E04 9.65416E04 6.53996E04 1.94632E05 2.60181E05 3.83914E05 2.77884E05 1.11332E05 2.52137E05 1.44524E05 2.06563E05 2.54355E05 2.31692E05 6.78704E04 1.20736E05 6.12825E04 1.54780E05 3.12278E04 7.95242E03 7.70224E04 1.45193E04 2.26480E03 7.11107E04 3.85385E04 1.33304E04 2.61106E03 2.07623E03 1.35940E04 1.83912E03 2.43497E04 2.71830E02 1.16423E04 3.59874E03 7.92328E03 1.86266E01 6.33209E03 3.93347E03 1.56926E02 3.90856E03 5.95608E03 1.73748E04 1.67114E03 9.34560E02 9.68465E03 2.94887E04 1.02930E04 2.16008E04 3.86802E04 1.15171E04 1.14775E05 1.44292E05 3.56623E05 5.61269E05 1.76333E05 1.13017E05 3.72668E04 3.02511E03 9.49492E02 6.98556E02 3.96713E03 5.45608E03 6.27278E03 3.09688E01 3.58375E03 1.92521E04 4.49463E04 2.79495E04 4.70662E03 1.30609E03 1.23500E04 3.21205E03 2.01275E04 9.00811E03 4.33867E03 1.09431E04 9.12687E03 3.71746E03 1.93549E04 1.63483E04 3.45143E03 9.94756E02 4.49226E03 1.72907E04 7.23082E04 3.84972E04 1.32898E04 1.48274E03 1.21740E03 1.90994E04 3.32509E04 3.10881E04 6.79607E03 5.58754E03 1.09120E04 2.41603E04 3.51386E04 2.35465E04 1.85128E03 6.68617E02 1.64492E03 4.76675E03 5.47230E03 8.06714E03 3.71874E03 3.05756E03 1.02441E04 6.64400E03 3.10323E02 3.21888E03 9.60606E03 5.57157E03 1.36759E04 1.29771E04 1.89978E03 4.62556E03 5.15516E03 2.01258E03 2.16965E03 1.66410E03 2.27037E03 2.19499E03 8.52755E02 2.71180E03 1.10203E03 2.62640E02 3.56211E03 1.81962E03 3.48574E03 7.96427E02 2.46247E02 9.93985E02 -Frame 257 6.19628E04 3.70549E05 9.67948E05 1.65823E06 5.16386E05 3.49106E05 2.17100E06 8.24168E05 7.09017E05 1.50166E06 3.06756E05 3.29004E06 7.72916E06 3.99314E06 2.19800E06 2.12017E06 7.99949E05 6.86737E04 4.88539E05 1.17067E05 2.36046E05 5.05399E05 3.75649E05 1.52293E04 3.86098E05 3.60018E05 1.37091E05 4.55927E05 2.21333E05 3.57041E03 1.21246E05 1.67743E05 1.41231E05 4.00817E05 3.15321E05 1.44158E05 1.22318E05 1.41030E05 6.06127E03 5.18652E05 5.36973E05 4.06828E05 2.14858E06 3.78171E06 4.89952E06 7.19853E06 4.40375E06 7.38262E05 2.43995E05 1.62762E05 1.68234E05 4.61936E05 4.85121E05 1.94312E05 1.28495E05 8.68065E04 9.86745E04 4.28024E05 4.16164E05 1.61546E05 1.94735E04 1.30898E05 1.47747E05 9.89011E03 6.25124E04 5.65914E04 4.54683E04 4.82773E04 7.57087E03 5.10603E04 1.41269E05 6.89257E04 1.79122E05 2.94402E05 7.87679E04 9.09119E04 5.95209E05 3.92785E05 4.42358E05 1.59774E06 1.43753E06 1.44103E06 3.11803E06 2.41390E06 4.36632E05 7.04861E05 3.97604E05 2.12100E04 2.83586E05 2.88091E05 3.25927E04 1.57977E05 2.73173E05 1.78830E04 9.18366E04 1.89501E05 3.63278E04 3.60373E04 6.64964E04 1.18342E05 2.05807E04 1.84912E04 7.80830E04 8.76199E04 5.32202E04 1.31920E05 8.75867E05 5.32420E05 2.26999E05 4.71068E05 3.30715E05 2.94791E04 1.49568E05 6.57831E05 4.38901E05 1.13523E05 8.89474E04 8.83077E05 9.21043E05 4.49631E05 9.16336E05 3.15063E06 4.57577E06 5.31726E06 7.30340E06 8.53957E06 7.91722E06 6.25344E06 5.88436E06 5.95061E06 6.83922E06 4.01779E06 1.37357E06 4.32131E05 4.47972E05 4.20731E06 1.23420E07 2.14349E07 2.14483E07 1.65810E07 1.25226E07 1.00656E07 1.00272E07 9.08703E06 8.60933E06 6.18720E06 2.91861E06 1.39926E06 5.02060E05 1.38710E04 1.33722E04 1.45401E05 3.86917E05 6.46283E05 7.74740E05 1.11090E06 1.32556E06 5.97398E05 5.18201E05 3.13613E06 4.79513E06 3.10469E06 5.73683E05 1.89498E06 5.44908E06 6.48008E06 3.87886E06 2.20158E06 1.85324E06 1.21432E06 6.66312E05 1.00547E06 1.54599E06 1.28725E06 8.29154E05 2.98562E06 3.63780E06 7.32498E05 1.72350E05 3.31290E05 2.53369E05 6.37008E05 1.47305E05 2.87253E05 8.96403E05 7.19498E05 2.90075E05 2.35442E04 1.89726E05 5.20442E05 3.74939E05 1.15200E05 2.16547E05 9.33217E05 1.42445E06 5.11672E05 9.00512E04 3.72903E05 5.18977E05 2.40193E05 3.99029E04 6.60786E04 2.53416E05 1.90997E05 1.87330E05 2.29549E05 1.44734E05 2.23993E05 8.93879E05 1.77732E06 1.14065E06 6.84548E05 8.95190E05 9.45932E05 5.41890E05 1.87066E05 2.59777E05 3.50885E05 2.16163E05 3.16718E04 1.32493E03 2.67065E03 4.24664E04 3.21271E04 3.63463E04 8.72686E04 1.84186E05 1.20620E05 3.10275E04 8.40052E04 1.90538E05 1.98317E05 5.45698E04 3.02916E04 1.30892E05 1.98607E05 5.04675E04 1.53757E04 8.11787E04 1.07678E05 6.00249E04 2.56642E04 1.20924E04 3.96751E04 5.13654E04 2.36832E04 1.43902E04 1.08467E04 2.34021E03 2.31529E04 3.04718E04 2.52706E04 1.14455E04 1.16228E04 2.46331E04 5.65154E04 8.84178E04 -Frame 257 7.92739E05 3.79595E05 1.59318E05 3.34266E05 7.43733E03 3.36764E05 3.53158E05 2.30695E05 4.80920E05 2.78101E05 3.25507E05 9.62515E05 6.28051E05 2.88627E05 2.00789E05 1.93705E05 2.45933E05 1.86823E05 3.82528E04 3.70898E04 1.40614E04 1.99978E04 6.50337E04 5.56482E04 5.83521E04 9.30813E04 5.26537E04 2.75421E04 2.23748E04 4.51152E04 4.15268E04 2.77694E04 5.36904E04 5.72331E04 1.86478E04 1.85257E04 2.90405E04 4.77279E04 1.17605E05 1.13602E05 5.27908E04 1.30688E05 2.41192E05 7.13297E04 6.46356E04 2.63254E05 2.87296E05 1.70396E05 7.81025E04 3.57853E04 4.63600E04 1.82253E04 7.73186E03 2.65872E04 2.34520E04 6.35910E03 3.54315E04 5.60810E04 3.86927E03 9.52676E03 4.84827E03 1.27049E04 1.72695E04 1.39319E04 2.42330E04 1.92179E04 2.65107E03 3.69593E03 1.63056E04 3.33020E03 1.07010E04 1.46447E04 3.87829E04 1.72276E04 7.95202E04 1.34056E05 2.85930E04 1.89871E04 1.52755E05 2.39081E05 2.08067E05 3.28457E05 4.54303E05 4.19449E05 2.48712E05 6.71116E04 1.32074E04 4.93099E04 7.06173E04 1.21671E05 6.69978E04 4.82917E03 1.08062E05 7.27097E04 2.75135E03 9.05781E04 1.03091E05 1.58952E04 8.92378E02 7.06422E03 2.96570E04 5.25097E04 5.92726E04 7.46460E04 7.04325E04 2.48069E05 4.69967E05 4.97901E05 4.04596E05 3.32502E03 1.24074E05 1.51824E05 2.56471E04 4.43302E05 4.87668E05 5.51502E05 7.31977E05 1.62250E06 1.38030E06 1.70471E06 7.23843E06 7.40561E06 9.47058E05 4.47125E06 1.02927E07 2.63001E06 6.81757E06 1.76716E07 7.06774E06 2.33189E06 3.34103E07 4.65158E07 2.56840E07 1.01393E07 9.85131E06 2.22233E07 2.12728E07 4.39566E06 1.36976E07 1.55965E07 3.52937E06 4.32360E06 2.40036E06 1.36469E07 3.57398E06 3.12780E06 1.16954E07 6.78411E06 1.02367E07 2.03880E07 2.67492E07 3.66581E07 4.50491E07 3.40604E07 2.56502E07 3.58526E07 2.44595E07 1.14733E07 1.15183E07 4.34978E07 1.84504E08 2.19963E08 1.27679E08 8.51780E07 5.31036E07 5.24079E06 1.74495E07 1.37466E07 4.55473E06 4.90129E06 1.85103E05 3.99231E06 6.93983E06 2.83034E06 3.11510E06 1.60736E07 4.66285E07 6.27389E07 5.99058E07 5.04222E07 3.57189E07 2.07943E07 1.14381E07 1.21106E07 1.59094E07 2.02353E07 2.53990E07 2.04155E07 1.37462E07 2.10302E07 3.70054E07 3.84379E07 3.56041E07 2.64004E07 1.11649E07 7.29296E06 5.30071E06 1.83431E06 3.76003E06 9.11511E06 5.92836E06 2.89061E06 3.38303E05 9.76015E05 1.22571E06 1.12801E05 1.98433E05 3.37159E05 2.02730E06 4.80000E06 2.23077E06 9.80874E05 1.66002E06 9.88368E05 8.52902E06 7.20715E06 6.78788E06 1.11097E07 1.11302E07 7.84192E06 7.40088E06 6.58314E06 3.24129E06 1.14779E06 2.74084E06 4.35768E06 1.13268E06 1.11488E06 1.88713E06 1.47645E06 1.56051E06 3.65865E06 2.80795E06 2.50555E06 2.28306E06 1.17551E06 2.43058E06 5.46326E06 8.94506E06 1.56539E07 1.84986E07 1.44721E07 1.09066E07 7.54982E06 4.82065E06 4.11211E06 2.68130E06 1.00190E06 2.71472E05 1.64711E05 3.22481E05 3.13133E05 2.92693E05 1.47560E05 4.18226E04 4.14110E05 3.94361E04 -Frame 257 1.91801E06 7.45786E05 7.89527E03 1.08074E05 2.46306E04 6.54215E04 5.70039E04 7.90968E04 6.96292E04 7.22247E04 8.98965E04 7.12272E04 1.26690E04 4.20720E03 1.77109E04 3.29223E04 1.60029E04 8.12381E03 1.39075E04 8.16472E03 3.72003E03 8.12834E02 5.39303E03 2.67475E03 1.34802E03 9.59867E03 9.11706E03 1.81052E02 3.39818E03 1.66599E04 2.03394E03 1.74398E03 7.71646E03 1.41280E03 2.77216E03 1.79576E04 2.58712E04 7.38995E03 1.01719E04 3.72107E03 4.06338E03 2.67516E04 4.98569E04 1.48482E04 4.57910E02 2.97965E03 9.87528E03 1.55134E04 2.90005E04 1.65710E04 5.92467E03 3.68709E03 7.18729E03 5.14171E03 5.41982E03 3.36618E04 9.19327E04 4.70495E04 9.92692E02 4.61655E03 4.86548E03 6.06073E03 9.03804E03 5.96400E03 7.79777E02 9.72407E03 2.79802E03 1.81793E04 2.20710E04 1.21426E04 3.24120E03 5.62359E03 5.88301E03 1.82760E04 9.36661E03 9.80843E03 1.19084E04 1.35329E03 3.54534E04 2.58224E04 8.89898E03 1.31065E03 3.36743E03 6.05316E02 8.74524E03 4.03324E04 6.44717E03 3.69709E03 4.59473E03 3.57503E04 1.89476E04 1.13789E04 4.47350E04 2.44225E04 3.61384E03 2.29786E04 4.00129E04 8.82087E03 1.95166E03 3.01528E02 3.36690E03 6.69228E03 3.81732E03 5.00907E04 1.17017E05 2.55120E05 4.36833E05 5.62991E05 5.48523E05 3.77341E05 2.62499E05 4.53435E05 6.29802E05 7.46363E05 5.54438E05 1.10993E06 1.40472E06 2.86865E05 8.78226E05 1.82292E06 1.29697E06 2.66533E06 8.97097E05 1.35009E05 1.27721E06 3.71229E06 3.42817E06 6.01628E05 2.99521E06 8.63969E06 5.17785E06 1.09354E07 4.36602E06 5.87972E05 4.73094E04 3.75719E06 3.09026E06 2.04978E06 8.01987E05 6.97764E06 4.14110E06 3.07997E06 1.27137E07 7.55984E06 1.14592E06 2.39009E06 4.26773E06 2.55464E07 1.17106E07 5.78668E06 4.13641E07 4.87907E07 7.56367E06 3.97127E07 5.90319E07 4.77433E07 1.54278E07 1.79536E07 9.72123E07 1.54599E08 3.46527E08 3.56531E08 1.97086E07 2.51169E07 3.18686E07 7.23494E07 6.54097E07 1.19020E08 5.31017E07 1.06124E07 2.90850E07 5.63237E06 4.85379E06 3.33248E06 2.06284E06 2.06142E06 1.84561E07 6.24488E06 4.51480E07 5.64708E06 1.81985E07 1.13322E07 6.68312E06 6.31446E06 7.92917E06 1.34159E06 1.43567E07 5.72598E07 3.35622E07 2.64127E07 1.90041E07 2.29824E07 2.05637E07 1.54514E07 5.31330E06 5.24803E06 5.71850E06 1.87509E07 2.76471E07 2.64349E07 9.24204E06 2.52100E04 1.08608E07 2.61252E07 2.11875E07 1.03193E07 6.17172E06 3.12585E06 3.07345E06 4.86637E05 5.47201E06 7.66849E05 9.68798E06 2.43458E07 2.06575E07 6.45900E06 1.12659E05 4.87883E06 9.61109E06 3.58932E06 8.73474E06 2.47201E07 9.07232E06 1.89789E06 9.76835E06 2.13251E07 2.41743E07 1.92916E07 2.11252E06 3.47561E06 5.85835E06 1.21752E07 2.45467E07 1.04331E07 3.40970E06 7.72481E06 3.30641E05 9.57970E06 1.05457E07 6.61703E06 4.12594E07 1.48191E07 2.37466E06 9.76911E06 5.72564E06 1.08250E05 1.13368E07 1.57181E07 1.04245E07 1.08707E07 1.41537E07 1.48743E07 1.95970E07 1.32498E07 2.20521E06 1.79552E06 4.83202E06 -Frame 257 2.58555E05 3.78354E05 3.01854E05 7.59796E04 3.34208E04 3.49586E03 2.59977E03 7.66893E03 3.79184E03 5.93152E03 4.00175E03 1.77826E03 1.09924E04 9.35737E03 3.62305E03 1.18633E03 1.44580E04 5.59847E03 8.85845E03 4.99302E02 1.41876E03 3.56049E03 1.11494E03 1.44795E03 5.91778E03 2.71988E04 1.98495E04 1.69250E04 1.62935E04 5.49310E04 1.87204E04 3.96368E03 1.33785E04 1.82102E04 2.04600E04 2.20114E04 1.83083E04 2.97492E03 8.40642E02 9.79154E02 6.54154E03 1.05765E03 1.42331E04 9.55430E03 6.61750E03 7.81773E03 1.32653E04 9.38414E03 1.13495E04 2.48930E04 1.00165E04 1.29775E04 2.05995E04 7.44467E03 8.23633E03 2.19253E04 8.41193E02 4.53729E04 5.74328E04 1.15411E04 3.76436E03 8.64457E03 3.10498E04 2.22541E04 1.45046E04 8.49945E03 9.03076E01 3.91497E03 4.63110E03 1.14092E04 2.18466E04 5.03241E04 4.46798E04 1.82246E04 1.36880E04 2.42398E01 6.16794E03 3.76853E03 8.50230E03 3.86471E04 1.96072E04 1.65550E04 3.56995E04 1.84175E04 2.22641E04 6.19927E02 4.15310E03 1.70114E03 3.32214E03 1.45572E04 2.39515E04 8.02483E03 3.09117E03 2.38680E04 1.15619E03 1.16996E04 7.40024E02 1.71791E03 3.47280E03 1.05839E04 8.26394E03 1.13668E04 3.50643E04 9.49364E04 1.56422E05 6.03962E04 4.20093E05 9.69634E05 3.62513E05 6.15676E05 9.44372E05 2.12879E05 4.32901E05 1.72796E05 9.32170E05 1.00938E06 7.17833E05 1.21953E06 3.40496E05 6.89397E05 6.74499E05 1.01141E06 3.73352E06 2.09769E06 8.08149E05 3.92126E06 5.68956E06 1.08996E07 3.92414E06 3.99563E05 3.36342E06 1.14902E07 1.00558E07 1.36844E06 3.17784E06 1.23143E07 1.40848E07 1.11909E07 7.94810E05 2.49820E07 4.16976E07 2.53646E07 5.03862E06 4.01958E06 1.39652E07 2.84275E07 3.84759E07 1.27841E07 2.48246E06 3.40716E06 3.54872E06 3.42845E05 1.77131E07 9.85539E07 1.23247E08 1.12638E08 5.95757E07 2.16975E07 5.39310E07 2.71421E07 2.75700E08 4.82424E08 7.83225E07 2.15472E08 6.13609E08 4.61550E08 1.75749E08 1.29104E08 2.34452E08 1.73175E08 8.78378E08 9.52761E08 5.09473E08 2.62895E08 1.66699E08 6.97153E07 2.05542E07 1.19190E08 2.11220E08 1.69758E08 5.88522E07 9.48105E07 1.71233E08 7.91241E07 1.16090E06 1.51414E07 5.06445E06 1.83495E07 1.22508E08 8.15312E07 1.52087E07 1.95402E06 1.14588E06 1.77064E06 4.05741E06 1.65256E07 5.65869E06 5.72229E06 4.32965E07 2.81256E07 2.46774E07 2.52337E07 5.76098E06 8.40622E06 1.59400E07 2.87897E06 8.62904E06 4.08893E07 1.79154E07 2.84470E06 9.16363E06 7.06404E06 5.66753E06 2.36430E07 2.13535E07 1.85136E07 1.69959E07 1.10949E07 1.29186E07 4.86955E06 1.46308E07 6.41956E07 5.96642E07 3.00019E07 1.05600E07 2.62861E07 6.06342E06 3.05042E07 7.08394E07 5.25456E07 2.46900E07 8.99930E06 4.96663E07 1.60729E08 1.11663E08 6.58322E07 1.10189E08 5.72873E07 3.75322E06 6.59173E06 8.13486E06 3.93213E07 5.42114E07 4.05924E07 4.48055E07 2.94667E07 4.24585E06 1.65169E07 3.75608E07 6.81928E06 3.55938E07 9.61607E06 3.35828E07 3.42811E07 6.49170E06 9.55318E06 1.93665E07 -Frame 257 2.85046E05 1.41138E05 1.45815E04 2.48478E04 5.10461E03 4.16787E03 4.50451E02 5.45196E02 3.17472E03 2.44650E02 4.21802E03 3.29916E03 5.84136E03 7.28126E03 4.46021E02 6.73206E03 1.63590E04 1.38053E03 2.93126E03 1.81353E04 1.10187E04 4.26246E03 4.27679E03 2.27980E03 2.44577E03 1.81612E04 1.37268E04 5.73975E03 4.72040E02 2.96229E04 2.39774E04 2.21400E04 1.51357E04 3.41656E03 8.72496E03 6.36021E03 1.37590E03 1.71060E03 1.88992E03 6.63000E03 6.76145E03 2.03894E03 2.06820E03 2.36343E03 5.89152E03 2.34381E04 2.35473E04 5.78131E03 3.52940E04 5.47858E04 4.17111E04 5.96110E04 3.11845E04 1.95023E04 3.51525E04 4.90912E04 5.98640E04 4.26858E04 5.18737E04 6.47944E04 1.33438E04 1.23739E04 2.38589E04 1.31796E04 3.12692E04 1.86194E04 4.09578E04 4.30035E04 4.34924E04 4.16873E04 1.25542E03 9.92696E04 4.55527E04 1.80963E01 1.70815E04 1.84119E04 1.71676E04 1.50910E04 1.35548E04 2.65876E04 1.47037E05 1.69931E05 6.35001E04 8.17910E03 7.43301E03 3.40925E02 1.64019E04 4.01365E04 2.29982E04 1.85914E04 6.86375E03 9.96946E04 6.60578E04 2.56439E03 2.97773E04 1.01481E05 1.03307E05 1.95159E04 6.09112E03 6.02739E04 1.51338E05 4.55190E04 1.14756E04 3.49755E04 6.75843E03 1.43092E05 7.39293E04 4.41049E05 5.84459E05 2.37371E05 1.21040E06 5.30142E05 1.11864E05 7.12873E05 6.50980E05 6.05521E05 1.59393E06 7.83257E05 8.33455E05 2.75813E06 7.32621E06 9.23931E06 8.79737E06 9.95326E06 1.04742E07 3.22591E07 6.59784E07 4.28218E07 7.59577E06 6.06505E06 7.65456E05 1.05808E07 1.55052E07 5.74369E06 1.32325E06 4.38661E07 8.00134E07 2.95927E07 3.44963E07 7.88732E07 4.38920E07 1.32221E07 1.56805E07 1.04030E07 3.68279E06 1.12030E07 1.84581E07 1.18633E07 5.20474E06 1.06746E07 9.78973E06 2.75893E06 2.21025E07 8.14978E07 8.93451E07 6.19283E07 1.55281E08 2.23809E08 1.94261E08 3.34102E08 5.94585E08 6.41547E08 6.76405E08 6.95585E08 4.28720E08 2.01544E08 4.82775E08 7.76577E08 1.44389E09 2.64132E09 3.14103E09 1.35010E09 1.17504E08 6.79407E08 1.27293E09 3.34002E08 2.24991E07 5.09834E07 1.38787E08 8.66194E07 3.65292E07 9.47468E07 3.02838E08 1.44307E08 1.52841E06 5.99740E07 5.01198E07 8.24819E07 2.34069E08 6.22743E07 9.67352E06 3.51578E07 2.57522E07 2.24042E07 2.09137E07 3.26843E07 4.83736E07 1.12826E07 2.64112E07 2.56253E07 1.96729E07 3.94766E07 8.03427E06 3.03138E07 5.31489E07 3.41517E07 3.20446E07 6.87659E07 1.04017E08 5.86732E07 1.51330E07 7.83992E06 1.41596E07 2.30228E07 3.39329E07 2.62646E07 5.50358E07 8.85970E06 3.57968E07 2.30801E07 1.37530E07 5.21290E07 5.14695E07 4.17428E07 9.31177E07 4.14863E07 2.94953E07 6.13030E07 2.72389E07 9.02189E06 7.29827E06 2.72053E07 1.06613E08 1.63048E08 1.90614E08 2.91954E08 1.59320E08 1.14102E08 8.91269E07 4.85579E07 1.66653E07 3.62711E06 2.79121E07 4.33302E07 4.02277E07 3.14351E07 7.99927E06 4.99593E07 8.53595E07 9.02872E07 1.38028E08 7.43761E07 1.12814E07 7.40565E06 4.41397E06 1.10357E07 2.35925E07 -Frame 257 6.98106E05 4.35347E05 3.85727E04 9.75615E02 6.58198E02 5.66867E02 2.15279E03 7.38716E02 1.17812E03 1.62831E03 4.27115E03 1.19903E03 9.85391E02 2.67600E03 1.99166E02 5.74970E03 2.46986E04 1.01427E04 1.41904E03 2.94087E04 1.43321E04 2.23480E03 5.47716E03 5.20506E02 7.76899E03 1.66653E04 2.95077E03 9.40846E02 5.84012E03 1.82728E04 5.24722E03 6.11930E03 6.05872E03 1.83780E03 1.05511E03 1.33780E02 1.00419E04 2.90329E03 1.02068E02 6.21802E03 1.97142E03 1.82921E04 1.56689E04 3.22200E03 7.41108E02 1.06441E04 8.68817E02 1.12634E04 1.35215E04 2.52210E04 1.57369E04 5.60347E04 5.23859E04 2.26480E04 6.54250E04 1.28387E04 3.39122E03 3.35151E04 8.01581E04 5.04459E04 1.80364E04 9.21575E02 1.85867E04 2.05662E05 1.98507E05 6.18440E04 8.13193E03 2.81762E04 7.21607E03 2.62849E04 1.31329E05 6.53808E04 3.54618E04 1.09346E02 5.52037E04 9.13086E03 4.00317E04 1.80427E02 7.68036E04 1.53210E05 1.17444E05 1.43946E04 6.35421E04 4.09886E04 9.56797E04 7.48917E04 1.68703E05 8.36527E04 2.70673E04 3.04097E04 4.48255E04 1.57065E04 1.55717E05 1.70938E05 6.95539E04 2.20443E04 7.99362E04 2.39599E04 1.68499E05 1.64801E04 1.48335E05 1.87551E05 6.19481E02 1.15538E05 7.69839E04 1.06738E05 3.92956E05 1.45933E05 5.47254E05 1.39316E06 5.74382E05 3.64220E05 2.08914E05 5.61322E04 1.38535E05 2.10438E05 1.91424E06 2.15835E06 1.59050E06 5.47865E05 6.13633E06 3.90172E06 3.79355E06 2.77044E06 3.92010E06 4.47907E06 2.05090E07 6.06299E06 1.24915E07 4.85867E06 3.06176E07 6.10716E07 2.23760E07 6.19688E06 1.92468E07 3.42923E07 2.88437E07 3.45043E07 1.51896E07 1.02108E07 1.37041E07 1.81048E06 2.19318E06 2.41183E07 4.92764E07 2.88953E07 2.00972E07 1.10343E07 1.22291E07 6.68974E07 8.85955E07 5.88791E07 4.78321E07 1.17570E07 8.17194E06 2.43746E07 3.82144E07 1.43577E08 1.37130E08 3.10343E08 1.82909E08 1.44518E08 4.22441E08 6.42896E07 3.65677E08 2.08921E08 4.12261E07 5.00923E08 2.02523E08 4.20335E08 6.95010E08 2.64081E08 4.42850E08 1.53953E09 1.30099E09 5.36682E08 6.29259E07 3.07725E07 7.40548E07 3.37991E07 3.94210E07 3.32032E06 1.25313E08 2.07956E08 9.18834E07 1.01233E08 7.28800E07 1.69635E08 3.77976E08 1.37934E08 6.16793E06 6.46292E07 1.71206E07 1.04253E07 1.11199E07 2.21161E07 8.54337E07 5.36087E07 1.85299E07 8.56958E07 1.16057E08 1.50404E08 5.73130E07 1.71627E07 1.13647E08 6.77474E07 1.97744E07 5.02286E07 4.04894E07 2.09829E07 8.03206E07 6.71381E06 2.10175E07 2.52711E07 4.97815E07 5.90626E07 9.27834E07 1.76222E08 1.61065E08 1.41756E08 1.32372E08 9.86773E07 1.21791E08 1.62239E08 1.30702E08 8.14838E07 8.35141E07 2.98270E07 4.27962E05 9.54842E06 4.24894E07 1.46726E08 1.57830E08 3.28999E07 7.13335E07 1.20815E08 2.46240E07 3.06616E06 8.54077E07 2.11943E08 1.13880E08 2.57454E07 3.29155E07 2.57094E07 1.80407E07 1.31058E07 6.51277E07 1.56940E08 8.17770E07 4.25339E07 3.34629E06 1.42463E08 1.68068E08 7.21632E07 3.08465E07 1.56283E07 3.41167E06 -Frame 257 1.02964E05 5.02394E04 2.71769E04 2.12061E04 1.06641E03 1.18727E03 1.32995E03 1.62681E03 2.28727E03 3.41919E03 1.13688E03 1.69558E03 2.85265E02 1.00668E04 1.16107E02 4.31141E03 1.16839E04 3.57213E03 3.30908E04 9.65038E03 8.96836E02 9.38923E03 2.13274E04 3.26402E03 1.60001E04 1.23182E04 2.60828E03 4.81192E03 2.29520E03 3.28755E04 2.82290E03 1.52445E04 5.33076E03 5.95964E03 2.19550E04 2.06897E04 3.64770E04 1.92027E04 5.62385E03 7.58492E03 6.59381E03 2.12878E04 3.55146E04 1.47467E04 2.69011E03 6.18122E03 2.39112E03 4.47444E03 1.26397E04 7.07570E03 3.24755E04 1.22626E04 1.17819E04 2.05832E04 4.10220E04 3.83583E04 5.57647E02 3.64741E04 1.31361E04 7.27051E03 2.42874E04 2.75591E04 1.39532E04 8.95379E04 2.66535E05 1.50298E05 9.22815E04 1.32130E05 1.41872E05 1.69299E05 8.66295E04 6.39378E04 5.22860E04 8.73992E04 9.73318E04 5.71938E04 1.28372E05 2.00698E05 1.77718E05 1.73902E05 1.51494E05 2.51164E05 1.63678E05 1.70003E05 3.34541E04 5.90652E04 1.55824E04 1.66730E05 1.19066E05 4.60879E04 6.63484E03 4.62603E04 6.59975E04 1.87865E04 6.73704E04 8.35125E04 9.02061E04 1.51337E05 2.79923E05 6.04185E05 3.04751E05 2.29694E05 1.06295E05 7.44318E04 2.40277E05 7.18549E05 5.30137E05 4.91627E04 1.86518E05 1.15138E06 3.98478E05 2.20210E04 5.52362E05 2.72384E06 4.20736E06 4.50901E06 6.57769E06 6.71811E06 9.49416E06 5.96826E06 2.23881E05 4.27243E06 3.91229E05 1.17822E07 1.80042E07 2.17318E07 3.18059E07 2.06939E07 3.94074E06 2.77557E06 4.80926E07 1.45270E08 1.07292E08 2.69083E07 2.15975E07 1.52757E07 1.87731E07 2.00496E07 1.00098E07 9.96003E06 1.73973E06 4.57555E06 3.15687E06 7.12745E04 2.92099E07 5.91529E07 1.46926E07 1.01135E07 2.64288E07 2.71059E07 3.58442E07 3.02527E07 1.30951E08 1.79086E08 2.21739E08 8.77734E07 5.35119E07 1.32756E08 1.28028E08 2.44195E08 1.03640E08 7.22470E07 2.25271E08 1.08135E09 1.15231E09 8.95238E08 3.41905E08 2.06473E07 1.07323E08 3.56538E08 1.30183E08 1.65044E08 4.34344E08 2.58726E08 3.14002E07 1.38122E08 4.08143E07 2.43706E07 1.77558E08 1.55111E08 9.57317E06 1.20766E08 2.20216E08 1.24162E08 6.05739E07 3.79071E07 8.41975E05 6.25406E07 1.96468E08 1.34792E08 1.23730E08 3.67536E07 1.07556E07 4.19680E07 2.89222E07 5.91444E07 7.24260E07 9.99312E07 1.58125E08 1.42139E08 4.04748E07 7.65153E07 2.03017E08 1.78038E08 2.54687E07 9.19206E06 1.71771E06 1.83914E07 2.13268E08 3.55503E08 1.90050E08 8.09567E06 4.12686E07 5.36784E07 1.52445E08 5.33329E07 3.13505E07 9.62868E07 2.74172E07 2.73356E07 1.31050E07 9.62366E07 1.48761E08 1.51238E08 1.16256E08 7.05993E07 1.04944E08 6.22657E07 3.71154E07 3.11815E07 1.14732E07 9.32296E06 1.25613E08 2.19962E08 1.66200E08 1.45677E08 1.40343E08 1.68616E07 6.89382E07 1.65534E08 1.66513E07 1.98074E08 1.88119E08 7.72113E07 5.50468E06 1.96635E07 3.35374E06 4.17055E07 5.25437E07 1.07392E08 3.07351E07 7.07414E07 2.82092E08 1.21860E08 1.81644E07 4.48734E07 1.08580E08 -Frame 257 1.68568E05 1.47782E05 1.61098E05 2.40601E04 1.04681E04 2.98085E03 1.57636E03 5.37796E03 4.86023E03 2.47514E03 1.03869E04 9.35903E02 9.30732E03 1.32841E04 3.75331E03 1.97177E04 2.72192E04 4.52676E04 1.03588E04 4.66582E03 1.61622E04 3.51492E03 5.93806E03 4.27384E01 7.47155E03 1.12852E03 5.64998E02 1.13331E04 1.73849E04 6.04009E04 4.09448E04 4.40593E03 2.71121E04 3.19587E04 8.53058E03 2.06099E04 8.71799E03 2.96098E04 1.26360E04 4.47752E03 1.74051E04 3.05378E03 3.95818E04 1.45689E04 4.91991E03 1.67512E04 4.95121E03 2.02467E04 5.26623E04 1.19682E05 2.13480E04 4.59398E04 8.42547E04 2.78440E04 1.29884E04 2.83486E04 1.11153E04 3.99907E04 3.13096E04 2.16667E04 2.32683E04 8.75043E04 7.48956E03 2.70653E04 7.66156E04 1.03249E04 8.70582E04 6.09849E04 1.23325E04 4.81493E04 5.02595E04 1.09450E05 1.44641E03 1.70266E04 1.10509E05 1.75242E05 5.24066E05 6.92443E05 3.29083E05 6.20728E04 1.08314E05 1.67111E05 1.88165E05 2.28864E05 1.72098E05 8.63481E04 2.53015E05 2.63424E05 7.69523E04 8.44579E04 1.25745E05 2.16032E04 9.05074E04 7.42197E04 4.97226E04 7.89115E03 1.25322E05 1.25747E05 2.39973E05 9.27871E04 3.25980E02 1.10046E04 9.38982E03 2.30566E04 2.72588E05 2.38253E05 3.21461E04 7.29319E04 2.37724E05 1.38274E05 1.86796E06 1.68524E06 3.72750E05 2.46481E06 6.52025E06 1.97116E06 4.51003E06 5.82666E06 5.49632E06 9.81836E06 1.99471E06 3.04879E06 1.70414E07 2.00440E07 3.44240E06 4.01084E06 1.30210E07 3.62243E06 7.17377E06 1.86684E07 8.29555E06 2.16140E07 5.49442E07 4.14355E06 2.32526E06 7.99473E05 7.82186E06 2.07240E07 1.34855E07 1.07909E07 1.23502E07 1.09237E07 1.84433E07 2.65611E07 5.10076E07 2.72385E07 1.53969E07 7.07775E06 1.32571E07 6.73385E06 1.35312E06 2.87776E07 1.60751E08 5.73119E08 8.05446E08 3.75426E08 2.31260E08 1.19304E08 4.11546E06 3.68626E08 9.15925E08 5.77929E08 2.84606E08 1.60694E08 1.13767E07 7.43685E07 1.37853E08 8.98254E07 2.98739E08 2.94475E08 5.89864E07 1.48102E08 1.23868E08 5.54750E07 1.26927E08 1.10163E08 2.53097E07 1.09201E06 6.77393E07 1.37794E08 6.07916E07 3.18547E07 4.49411E07 7.29398E06 2.32318E07 9.39226E07 9.90017E07 1.17843E06 1.29870E08 2.09083E08 3.93294E08 4.63322E08 1.70585E08 2.60629E07 5.03345E07 9.34248E07 2.37433E07 2.42136E07 9.20056E07 1.34099E07 4.76765E07 3.92025E07 9.24891E07 1.66419E08 3.13953E07 1.07781E07 3.84542E07 9.81694E07 2.16362E08 1.33112E08 3.40257E07 1.48344E08 2.59961E08 3.26952E08 3.60343E08 1.29881E08 5.66083E07 1.43051E08 1.65814E08 6.60569E07 2.63322E07 2.06430E07 7.46783E07 8.78206E07 5.80892E07 9.99008E05 1.52275E07 2.67171E07 3.92007E07 5.49555E07 1.79317E07 6.28272E07 1.88772E08 3.45798E08 3.61453E08 2.58215E08 1.29757E08 5.37751E06 2.93353E07 2.43348E08 4.89612E08 2.00602E08 8.95444E06 4.21016E07 4.03659E07 6.48208E06 6.28504E07 1.05808E08 1.30535E08 9.62450E07 6.15864E06 7.62348E07 2.59100E08 1.82945E08 7.44123E07 6.70391E07 9.43754E07 -Frame 257 4.44157E05 2.03809E05 4.10007E04 2.92101E04 4.66540E03 1.06472E03 1.34887E03 5.81389E03 7.64972E02 4.19038E03 1.66776E03 1.20092E03 3.28147E03 6.47257E03 1.35827E03 5.71491E03 6.15042E03 1.23799E04 8.62273E03 5.33181E03 1.88592E03 1.42790E03 2.44620E03 1.20805E04 5.77063E02 1.35671E04 2.41347E04 2.28554E04 8.61284E01 3.73557E03 7.16268E02 7.11040E03 3.11504E04 1.97352E04 1.48441E04 1.40698E04 2.35972E02 7.72001E02 5.08953E03 6.41736E03 3.13876E03 3.35833E04 1.90708E04 2.65993E03 1.47666E03 8.48323E03 4.81191E04 6.77902E04 7.36122E04 2.07231E05 2.30665E05 2.47926E05 1.72506E04 8.81873E04 7.67754E04 1.70241E04 2.80312E04 7.72315E04 5.57955E04 2.00012E04 1.01677E04 5.44634E04 2.75042E05 5.56690E05 3.92642E05 1.75224E05 9.57935E04 1.28509E05 5.58840E04 4.55647E04 2.26028E04 7.72507E04 1.33797E05 8.04973E04 2.50769E04 3.83136E05 4.13057E05 6.00274E05 6.95224E05 9.79780E04 1.22299E05 3.87000E04 6.59447E03 9.60449E03 1.74890E03 2.15077E04 2.08936E05 1.98731E05 1.70998E04 1.61240E04 1.07639E05 1.53370E05 2.58288E05 2.18759E05 2.93520E04 1.15773E05 1.17487E05 1.46680E04 1.26737E05 8.70783E04 1.18181E05 2.47568E03 4.28592E04 5.57150E04 1.16392E04 2.43977E05 2.41083E05 1.10600E06 2.54129E06 3.45207E06 1.12185E06 2.06798E05 1.57506E06 4.89409E06 7.76936E06 3.70876E06 7.97987E05 1.94743E06 3.23756E06 4.39204E06 2.87610E06 2.83154E06 1.20567E06 4.97206E06 6.53260E06 6.48552E06 1.09162E07 1.11662E07 1.11779E07 2.00414E06 7.69927E06 3.29750E07 6.36854E07 1.87303E07 2.67205E06 1.29721E05 7.75123E06 3.15696E07 3.03184E07 1.02581E07 1.77117E07 1.99200E07 5.59731E07 9.01456E07 7.33129E07 4.04010E07 3.07659E07 2.03584E07 9.39959E07 1.14394E08 5.63095E07 7.90576E05 2.31258E06 9.80171E07 2.49139E08 2.37252E07 1.10705E08 3.01057E08 5.60413E08 8.02965E08 3.31407E08 1.66737E07 1.28901E07 2.08805E07 8.78187E07 5.15384E07 6.36969E07 1.76508E08 1.77722E08 8.20361E07 9.98324E07 1.25010E07 1.57051E08 1.22782E08 5.98962E07 5.18496E07 2.68813E06 5.61316E06 1.60420E07 6.52265E07 9.59359E06 5.81080E06 2.27421E07 9.94536E06 6.54086E06 6.13470E07 1.48726E08 1.09499E08 4.70568E07 4.84290E07 7.66482E07 2.44621E08 3.08446E08 1.18880E08 9.06580E07 8.55807E07 3.42561E07 2.06919E07 4.46788E07 7.12245E07 5.15390E07 6.20504E07 8.38141E07 3.75955E07 4.49725E07 6.88293E07 5.95827E07 5.23727E07 8.71442E07 2.01285E07 1.79542E07 1.07049E08 1.82391E08 9.64569E07 1.13955E08 9.72152E07 2.35294E07 4.64967E07 1.07077E07 6.92191E06 2.67382E07 1.16694E08 1.90188E08 9.61899E07 1.00710E07 3.94340E06 2.10783E06 1.21049E07 1.72568E07 2.99767E07 4.39168E07 6.05327E07 2.22987E07 3.48476E07 1.37005E08 2.14729E08 1.45776E08 3.85798E07 2.58734E07 7.36679E07 1.48594E08 7.03964E07 1.79032E06 1.14380E07 3.46571E07 2.35005E07 9.39324E06 2.85931E07 1.40132E07 6.06928E07 4.71616E07 4.46258E06 5.69857E07 8.87434E07 4.68827E07 2.01111E07 2.52002E07 -Frame 257 3.33777E05 2.73761E05 1.04736E05 1.38163E05 9.09887E04 3.80772E04 1.60154E04 5.11287E03 4.43845E04 5.40614E04 5.05417E04 9.63229E04 1.20821E05 4.20132E04 5.93091E02 1.50692E04 1.69140E04 1.63935E03 2.35268E04 1.80709E04 4.30355E03 2.55586E03 1.12052E04 2.30955E04 3.90846E03 1.34216E04 2.35910E04 2.05610E04 1.90246E03 2.96004E03 6.95398E03 1.55029E04 8.07402E02 8.07580E03 1.57165E04 2.00575E04 6.62193E03 4.66287E03 8.92911E03 1.27462E03 3.10179E03 4.18237E03 1.88233E04 1.07016E04 2.10760E03 1.37051E03 2.91753E04 8.84901E04 9.75945E04 2.06758E04 6.34433E03 1.68638E05 4.50650E05 3.57021E05 5.11885E04 8.10707E04 1.65308E05 7.48779E04 6.07729E02 1.17513E04 1.87584E04 8.84512E03 4.55753E04 1.93964E05 2.14079E05 1.85146E04 5.39352E04 5.68276E04 2.81203E03 8.35557E03 1.78172E04 7.03618E04 7.91949E04 2.17609E04 1.65185E05 9.20134E04 5.00596E04 5.82420E05 1.45391E06 6.78821E05 1.30108E05 2.82720E05 1.59149E05 6.99672E04 8.59649E04 1.13865E05 3.66598E05 3.82060E05 1.95154E05 1.08861E05 8.23529E04 5.07466E04 6.56497E04 1.99672E04 1.33710E04 8.85660E03 3.14501E04 8.55049E04 1.77065E05 2.84420E05 2.70506E05 7.45074E04 2.78194E04 3.73945E04 2.61068E04 8.56519E04 6.49188E05 8.68198E05 3.39771E05 4.50658E05 6.29910E05 4.46621E05 1.60594E05 6.54198E05 3.09137E05 8.89991E05 2.19350E06 9.98669E05 9.55425E05 1.60026E06 3.66882E05 1.16020E06 3.14707E06 3.94606E06 5.63830E06 1.69274E07 1.09492E07 2.53118E06 1.27685E06 1.36744E07 3.78558E07 6.05525E07 1.81209E08 1.42787E08 2.79761E07 1.89417E06 2.57503E06 8.14189E06 2.19095E06 7.67693E05 8.88593E06 2.01284E07 1.53398E07 5.46306E06 7.21390E06 4.28431E07 4.47017E07 1.07760E07 4.70680E07 9.05351E07 5.52996E07 4.11860E07 3.92620E07 4.69910E07 4.25335E07 3.48522E07 7.45420E06 1.44857E07 4.28235E07 7.37004E07 1.11267E08 4.47846E07 2.29013E07 2.18752E07 1.24133E07 5.90338E07 3.41643E07 4.78943E07 7.23986E07 2.59901E07 9.85251E06 4.42989E07 7.47337E07 1.04637E08 9.85481E07 1.75883E07 7.83496E06 3.75938E07 7.13118E07 5.22007E07 1.50430E07 1.64890E07 3.24197E07 2.15031E07 1.47115E07 7.98129E06 1.89077E07 7.42385E06 1.40525E06 1.23810E06 9.72080E05 1.04572E07 3.15935E07 2.62539E07 1.10599E07 7.41029E06 3.03556E05 6.46751E05 1.31692E06 7.68315E06 6.63583E06 5.39640E06 2.56140E06 3.33692E06 1.06894E07 2.67931E07 1.75043E07 8.63260E06 3.55187E07 3.28262E07 3.59112E06 4.31802E06 7.72850E06 6.57034E06 6.80631E06 4.66698E06 1.38368E07 1.58378E07 7.72087E06 2.13457E06 9.93524E06 2.02398E07 7.52869E06 3.49569E06 7.49371E06 4.21259E06 2.67584E06 3.37214E06 4.30483E06 6.25508E06 1.68729E06 3.09211E06 7.26209E06 1.64893E06 9.84478E03 4.07550E06 6.39598E06 2.50255E06 2.46456E06 5.15492E06 1.05034E07 4.09839E06 1.17932E06 2.02483E06 9.29608E06 1.20604E07 8.57084E06 8.42909E06 9.55842E06 9.57553E06 8.25030E06 5.06873E06 5.66164E06 2.47358E06 9.56039E05 2.85267E06 1.28957E06 -Frame 257 9.01050E02 2.20084E04 3.61833E05 9.97808E05 6.36695E05 2.68710E05 3.81423E05 6.54796E05 5.18239E05 1.81449E05 8.94118E05 1.90203E06 8.62666E05 5.17484E05 1.04957E06 9.20224E05 3.95972E05 2.97123E05 3.63621E05 1.94206E05 5.64589E04 1.17065E05 1.28292E05 3.73549E04 7.04310E04 1.36321E05 1.20015E05 1.10781E05 1.17934E05 6.91921E04 9.59032E04 5.93215E04 1.48382E04 6.23848E04 1.07920E05 4.93485E04 3.63520E04 8.08724E04 3.79044E04 1.81396E04 6.01731E04 1.14475E05 9.79392E04 6.77634E04 1.14643E05 1.58014E05 2.57121E05 2.53426E05 5.18632E05 5.46225E05 4.29192E05 3.28521E05 4.91979E05 2.28747E04 4.80497E05 2.43764E05 2.32691E04 1.30887E05 6.10429E04 3.35800E03 4.95104E04 1.72985E05 1.22398E05 1.07919E05 1.73312E05 5.41432E04 1.91793E05 2.51680E05 1.70487E05 1.24618E05 1.06005E05 4.99788E04 1.21604E04 1.42091E05 3.03616E05 2.07072E05 9.69688E04 6.13986E05 9.93017E05 6.72746E05 8.48828E04 9.69153E05 9.98490E05 6.30951E05 3.46304E05 1.75022E05 1.25081E05 1.45260E03 1.04133E05 6.55126E04 1.82778E04 8.57778E03 6.16635E04 4.79490E04 1.34146E04 1.38872E04 1.46115E04 1.20860E04 3.49405E04 5.23052E04 2.66882E05 1.71415E05 6.73078E04 4.46386E04 9.06717E04 6.74382E03 6.77158E04 5.07916E04 3.17286E04 2.76260E05 2.00236E05 3.80796E05 2.34686E05 4.55211E05 1.90792E06 2.14620E06 5.67753E05 1.29797E06 2.34118E06 2.54538E06 2.13080E06 2.60048E06 1.36559E06 1.38410E06 9.62622E06 2.47086E06 4.54733E06 1.57452E07 1.12273E07 2.14052E06 2.35663E07 7.38659E07 8.59170E07 4.85655E07 7.87487E06 6.88207E04 7.70344E05 2.00332E06 7.41003E05 2.52901E05 2.04462E05 1.15626E06 7.34611E05 1.56473E06 1.40156E06 7.32910E05 6.80041E05 7.36077E06 1.23105E07 3.97593E06 1.59098E06 4.94814E06 4.02580E06 2.93867E06 4.80961E06 6.01424E06 9.69713E06 4.95048E06 1.10861E06 2.56718E06 1.11989E07 1.58926E07 1.48450E07 1.28329E07 1.07284E07 8.81843E06 4.67118E06 1.14030E07 2.19817E07 1.31676E07 2.51746E06 6.30481E05 6.15293E05 1.64051E06 3.08588E06 1.05573E07 5.68728E06 1.00859E06 6.36083E06 2.37513E06 1.44034E06 3.36508E05 3.15543E06 8.16349E06 3.77363E06 1.11879E06 1.18279E06 2.07127E06 2.05004E06 1.21541E06 1.62726E06 2.30701E06 5.36801E05 2.87262E05 6.38076E05 8.02294E05 7.32254E05 3.74730E05 2.63530E05 1.15528E06 6.23497E04 8.00842E05 6.32804E05 1.13540E05 5.47621E04 4.61875E05 1.44916E06 6.84830E05 1.74812E06 2.33667E06 4.18753E05 6.02195E05 6.03086E05 2.64392E05 3.38017E05 1.31935E06 1.19973E06 9.88705E05 2.30661E06 1.05104E06 6.21798E05 2.16882E06 4.10959E05 1.09242E06 1.68410E06 2.14766E05 1.27207E05 2.00151E05 4.87572E05 1.42785E06 1.01249E06 3.49550E04 3.16023E05 6.95956E05 1.22356E06 8.58625E05 2.19455E05 3.90763E04 1.58212E05 4.57165E05 1.39954E06 9.78666E05 6.84028E05 6.05961E04 4.86154E05 6.89826E05 1.59136E05 3.40215E05 8.12287E03 2.61895E04 7.66176E04 3.51813E05 3.37881E05 7.69840E04 6.42531E04 2.48587E05 5.96307E04 -Frame 257 4.49159E05 3.17802E05 3.88755E05 9.55767E05 3.64679E05 7.38606E05 1.94799E06 5.88755E05 8.21988E05 2.18626E06 3.58921E05 2.69508E06 8.27556E06 1.99308E06 1.36434E06 4.47151E06 6.63514E05 9.03848E05 1.45662E06 2.44967E05 5.87676E05 7.94068E05 1.00219E05 2.46267E05 3.61109E05 1.97483E04 3.86168E05 4.19811E05 9.39031E03 2.14512E05 1.82123E05 2.07252E03 1.48449E05 1.39623E05 1.86786E03 1.25111E05 9.83046E04 1.02923E03 1.16633E05 9.07336E04 2.94913E03 1.43591E05 7.91530E04 6.76993E04 3.57969E05 6.45908E04 3.26210E05 1.01377E06 2.44151E05 7.69682E05 1.75802E06 6.01979E05 9.41089E05 1.83358E06 5.33550E05 1.49514E05 4.52112E05 1.58876E05 8.27115E04 1.07189E05 4.78662E02 1.33144E05 2.41476E05 3.47598E04 6.84739E04 1.14158E05 1.47838E05 1.11368E05 3.42941E04 1.76879E05 2.02218E05 9.24194E04 1.15851E04 8.91259E04 5.96866E04 5.57888E05 5.87514E05 7.01572E04 2.23076E04 1.05330E06 2.58332E06 2.25708E05 9.00672E05 9.03654E05 6.75711E04 2.20885E04 5.46779E04 1.14554E05 1.46366E04 1.42043E03 1.29230E04 1.26844E05 1.31538E05 6.00406E04 2.13621E04 6.82741E02 2.81596E04 5.83446E04 2.21101E04 4.33609E03 9.96957E04 1.42350E05 4.19760E04 5.84967E03 5.82420E04 3.01155E04 2.63327E04 1.46692E05 2.94174E05 1.84351E05 6.36343E04 1.54651E05 3.50329E03 3.04861E05 1.06508E05 1.04199E06 7.20334E05 3.17431E04 4.72346E04 4.02349E05 2.09222E05 3.13165E05 4.23271E05 1.15723E06 2.66469E06 3.84545E06 2.61803E06 2.58057E06 3.95825E06 4.00559E06 2.38058E06 4.68558E05 5.62132E04 7.04132E05 5.10592E05 2.00802E05 4.02441E05 1.65674E05 1.56735E05 3.49828E05 1.55493E05 6.27619E05 1.38183E06 5.10225E05 1.94780E05 1.09479E05 1.84872E05 1.11497E06 1.82768E06 8.94547E05 6.64300E05 7.31690E05 6.75742E05 3.48702E04 4.42852E05 1.05080E06 2.43862E05 9.97431E04 1.01092E06 1.52632E06 3.92459E05 7.41258E04 1.28734E05 1.73461E04 7.64646E05 2.15593E05 3.88653E05 4.37723E05 4.41672E05 2.38034E05 3.45985E05 2.19983E05 2.89866E05 7.14727E05 6.90499E05 2.78741E05 1.10810E06 1.74468E06 1.60286E06 5.36568E04 2.41763E05 9.06877E05 3.41647E05 4.62969E05 3.97832E05 1.80751E04 1.05080E04 8.37626E04 6.85668E05 4.22873E05 2.87782E05 5.30711E05 5.36590E05 2.23381E05 3.69336E04 6.60230E04 7.29566E04 2.04436E05 2.52821E05 2.99813E05 4.52996E05 1.78460E05 1.79364E03 6.87887E04 3.78961E04 3.48310E04 1.60678E05 2.51625E05 1.73842E05 1.64107E04 1.50572E05 1.78182E05 1.08981E05 9.62698E04 1.43571E05 2.43805E05 2.74120E05 5.27653E05 4.77992E05 5.73629E05 6.74581E05 7.72393E05 3.80893E05 4.46850E05 8.26235E05 2.38173E05 2.11087E04 4.04246E04 2.15683E04 2.13255E04 3.38200E04 3.88530E04 4.53773E03 1.90409E05 1.83459E05 1.47300E03 3.62401E04 5.49726E04 6.88215E04 5.04368E04 1.21889E05 1.76542E05 2.30301E04 2.60058E04 1.64794E04 4.67704E04 7.01116E04 1.24207E05 1.26765E05 3.17373E04 1.93928E04 1.14729E04 2.85920E04 3.84884E02 5.92175E04 8.86333E04 6.76789E04 -Frame 257 1.21210E06 5.72485E05 5.28295E05 1.35145E06 7.44542E05 7.01507E05 3.98901E06 3.01242E06 1.42669E05 3.19618E06 4.39918E06 3.03060E05 1.19040E07 2.06696E07 5.35274E06 2.53525E06 8.40284E06 1.94045E06 5.23221E05 2.57224E06 8.77103E05 5.94207E05 2.64836E06 1.53704E06 2.52632E04 4.80301E05 5.21374E05 2.14036E04 4.67833E05 3.50918E05 1.04415E04 2.16415E05 3.08032E05 3.29135E04 8.89410E04 2.45579E05 4.62813E04 5.85404E04 2.33143E05 1.01302E05 2.82426E04 2.03164E05 1.69983E05 2.44510E04 5.36649E05 5.65253E05 1.20685E04 1.18256E06 1.58159E06 1.12241E05 1.53811E06 1.98225E06 4.29978E05 8.88228E05 1.42633E06 2.19912E05 1.77308E05 4.81759E05 1.83559E05 1.45757E05 1.02789E05 9.29345E03 1.11064E05 8.36226E04 9.68987E03 4.36649E03 1.31824E03 9.88647E03 8.32085E04 2.54794E05 2.04865E05 1.88821E05 4.11262E05 2.43306E05 2.04158E05 1.80093E06 1.82880E06 5.69706E05 4.49901E06 1.22514E07 9.53205E06 1.88134E06 3.24014E05 8.41045E04 2.37136E05 7.38042E05 8.13251E05 5.03646E05 1.39459E05 9.73377E04 1.60772E04 9.92716E04 1.91664E05 1.54133E05 1.98907E05 1.31693E05 1.06415E05 2.70257E04 1.19110E04 3.95938E04 1.39623E05 2.09937E05 1.16269E05 1.39985E05 5.18709E04 1.32078E05 4.66728E05 2.45504E05 2.67508E05 1.25016E05 1.02196E04 7.76930E04 2.84751E04 7.15912E05 1.33828E06 1.21613E06 6.85131E05 2.57187E05 1.99070E05 9.42581E04 4.44374E04 1.29124E04 3.48514E04 6.05872E03 1.30509E04 9.89462E04 1.33004E05 5.94718E03 1.08759E05 1.50095E05 5.26855E04 1.48043E05 1.38923E05 1.45638E05 6.52218E04 1.41634E05 2.15400E05 2.23457E05 2.22030E04 7.19717E04 3.65329E05 7.54814E05 9.01531E05 5.22527E05 2.17099E04 2.52728E05 2.92157E05 3.49191E05 9.01558E04 7.40394E04 2.11737E05 9.52135E04 1.86032E04 9.38171E04 9.88396E04 2.26366E05 1.01914E05 2.18525E04 9.08923E04 1.83114E04 2.18390E05 4.79320E05 6.27631E05 4.05100E05 5.86949E04 2.76831E05 2.22805E05 1.37662E05 2.22126E05 3.96615E05 3.37781E05 2.20712E05 3.32100E05 6.69771E05 6.06435E05 5.35662E05 3.13206E05 5.59760E05 2.67359E06 3.25733E06 7.85924E05 9.25232E04 5.74834E05 2.14504E05 1.04232E05 2.81646E05 5.79092E04 2.40004E05 1.18941E06 8.32661E05 5.30163E05 3.10200E05 1.72252E05 9.30904E04 4.38990E04 1.04184E05 9.02503E04 9.39321E03 1.62298E04 4.42307E04 5.44563E04 4.42306E04 1.80989E04 9.02015E04 2.62728E04 9.21954E03 3.13908E04 3.33581E03 1.45703E04 1.92155E04 1.00414E05 6.27420E04 2.16523E04 1.03092E04 3.37227E03 5.23172E03 3.04703E04 1.94142E04 1.50872E04 1.57263E04 7.56667E03 3.11152E04 5.18200E04 6.91291E04 9.80535E04 4.45565E04 4.74838E04 3.24442E04 9.21202E03 3.64710E03 2.16027E03 6.73245E03 6.39763E03 5.90102E04 8.10005E04 3.83358E04 2.32845E04 2.13799E04 8.45247E02 2.06853E04 2.40654E04 2.02167E04 5.23662E03 8.18943E03 2.75311E04 1.98503E04 1.70719E04 3.35946E04 3.20206E04 1.35943E04 6.34961E03 1.24269E04 2.57323E04 1.22172E04 3.15765E03 1.80120E04 1.05424E04 -Frame 257 2.29768E05 2.90938E05 5.84252E05 1.55718E06 6.05658E05 9.05053E05 5.35545E06 3.09399E06 1.66225E05 5.09066E06 4.30589E06 1.10422E06 1.65270E07 2.12876E07 3.68082E06 1.21584E07 1.78732E07 3.30606E06 6.06047E05 2.44941E06 4.64443E05 2.10200E06 4.90366E06 1.35664E06 1.73698E05 1.64393E06 6.94834E05 5.89174E04 4.19187E05 2.84909E05 1.27086E04 5.62228E05 3.96566E05 1.97429E04 1.52706E05 2.98870E05 4.90375E02 1.73927E05 2.61222E05 5.56001E04 1.42807E05 1.93049E05 1.74082E04 2.59635E05 1.11911E06 2.95945E05 6.50269E05 2.93356E06 1.06179E06 1.66121E06 9.86549E06 7.15070E06 9.26677E05 9.68546E04 9.93482E05 1.68261E06 2.46097E06 1.72020E06 7.27815E05 4.63136E05 3.91544E05 3.54151E05 3.12085E05 2.21799E05 4.47988E04 5.86874E04 8.20078E04 8.92965E04 3.35203E05 3.47935E05 4.45001E04 4.14815E05 1.34155E06 5.53216E05 3.52762E05 8.06795E05 1.39177E06 1.06539E07 2.53085E07 1.18757E07 6.06498E05 1.53987E06 4.63807E05 3.38507E04 8.35706E05 1.19140E06 1.21687E05 4.86682E05 8.00937E05 7.58270E04 1.83346E05 4.42331E05 2.12011E05 2.26591E05 9.86741E05 3.74079E05 2.55813E04 3.40153E05 1.28266E05 3.79406E05 1.16852E06 4.67228E05 7.05076E04 3.13536E05 8.69506E04 1.33064E06 2.88098E06 1.85690E06 1.63225E05 7.39991E04 1.90344E05 5.23327E05 1.13097E06 1.14726E06 2.32194E05 5.37980E04 9.48800E04 2.62285E04 3.42597E04 3.12506E03 6.81235E03 3.33215E03 4.80435E03 2.47709E04 2.32643E04 9.43836E04 1.38070E05 1.60899E04 2.67562E04 7.65960E04 2.59792E02 5.03689E04 1.48286E05 1.62796E05 1.30803E05 1.54174E05 1.67270E05 2.86409E05 3.78412E05 9.03033E04 1.32718E05 3.45864E05 1.84334E05 4.91545E05 7.51097E05 2.19810E05 5.15118E04 1.84462E05 3.68023E04 1.85574E04 1.22441E05 1.67965E05 9.52174E04 7.45252E04 4.97195E04 7.68762E04 2.93979E04 2.00607E04 4.08679E04 1.52660E04 2.47051E05 1.26290E05 2.55520E05 5.27262E05 3.46930E05 7.63658E04 1.77667E04 4.83871E04 1.13301E05 7.82924E05 6.17903E05 3.31027E04 1.97474E04 1.80408E05 1.05952E05 1.00608E05 1.71869E05 3.13618E05 1.50107E06 3.01069E06 2.13957E06 5.30129E05 4.05166E04 5.43877E05 8.97394E05 8.27740E05 1.36345E05 2.27109E05 1.17172E06 1.17686E06 9.21170E04 2.15064E05 2.24782E05 8.44499E04 7.20116E04 9.69680E04 4.74898E04 1.61313E02 1.12499E04 1.14084E04 1.32978E04 4.55228E04 1.71263E05 2.37914E05 1.17747E05 7.61013E04 6.45957E04 9.43229E03 5.19128E04 1.36794E05 6.41779E04 1.97040E04 1.79186E04 5.44907E03 4.09339E03 3.93016E03 6.18733E04 9.53976E04 9.10018E04 4.21739E04 1.07878E04 4.69216E02 3.94808E04 8.07736E04 4.86955E04 1.24018E04 5.65277E02 9.64719E03 7.79707E02 1.59100E04 5.12903E03 1.17510E04 5.41524E04 1.11805E05 5.37038E04 3.75135E04 6.86556E04 4.96346E04 6.37640E04 2.95327E04 1.11868E04 1.82663E04 6.14687E03 2.01145E04 1.78157E04 8.50026E03 2.84751E03 3.97345E03 6.30264E03 7.96580E03 1.41451E03 3.35013E03 3.29159E04 7.69181E04 2.53670E04 1.29601E04 3.58305E04 -Frame 257 4.13909E05 1.86897E05 9.62374E04 1.16158E06 3.92990E05 1.29372E06 5.02748E06 2.03395E06 7.49627E05 4.92417E06 1.68464E06 3.35736E06 1.59528E07 7.39084E06 7.80682E06 2.77387E07 1.88642E07 1.15920E06 2.25691E06 9.07568E05 8.93105E05 5.81114E06 3.78287E06 4.74449E03 2.76861E06 2.26882E06 3.51917E05 4.32955E05 1.67271E05 7.98056E04 8.64917E05 7.50243E05 1.57018E04 1.60983E05 1.94276E05 7.33571E04 3.08849E05 2.86394E05 3.97623E04 3.39705E05 3.78232E05 8.15766E04 1.97220E05 7.83565E04 5.80019E05 3.56630E06 4.00353E06 4.79546E05 1.73189E06 2.28981E06 1.00164E07 1.93425E07 6.65290E06 2.44695E06 3.01344E06 1.87369E06 3.52387E06 4.42741E06 1.43688E06 8.94414E05 2.73025E06 2.49935E06 2.29914E06 2.69480E06 1.36425E06 1.27850E06 7.69904E05 4.32388E05 1.00992E05 1.62845E04 9.89835E03 5.52341E05 1.07002E06 4.68672E05 1.29241E05 2.44518E04 3.67451E05 3.70160E06 1.06747E07 8.84762E06 1.25487E06 3.09717E05 2.05638E06 1.61476E06 4.85749E05 1.57933E05 7.60765E04 8.64194E05 1.62324E06 8.37763E05 6.31944E04 3.08604E05 5.42154E05 9.40654E05 1.11132E06 1.16839E05 1.76895E06 3.57423E06 1.84937E06 3.29521E05 6.38020E05 9.61358E05 1.66745E06 1.25020E06 4.21002E05 1.81308E05 9.16312E05 7.64849E05 3.72521E05 7.39005E04 4.50870E04 4.04421E04 7.42640E04 1.62487E05 6.01688E04 2.83968E04 1.21023E04 1.73195E04 9.54053E03 1.71328E03 4.94693E03 7.18960E03 6.16012E03 1.51099E04 8.27859E02 4.34808E04 1.05363E05 5.05894E04 1.35072E03 5.08880E04 6.17710E04 4.38685E04 6.78979E04 2.85442E04 4.12014E04 9.35823E04 1.12307E04 3.36015E05 4.03750E05 5.57747E04 2.67749E05 1.88507E05 7.80231E03 2.99930E05 3.24618E05 4.14762E04 5.75128E04 1.64010E05 1.54535E05 7.06412E04 3.23957E04 4.94840E03 2.85757E03 4.13117E03 7.59818E03 2.52896E03 1.75873E04 2.04191E04 1.04087E05 3.43120E05 4.86513E05 1.95683E05 1.63203E04 1.79244E05 3.15206E04 1.39587E04 2.08091E04 5.74596E04 2.45138E05 2.72202E05 4.40250E05 3.58265E05 3.28215E05 3.16286E05 2.21476E05 1.15034E05 1.61735E05 5.77662E05 4.53380E05 1.21088E06 5.47959E05 1.62056E05 5.65589E05 2.81812E05 2.22744E04 4.33752E05 1.99217E05 7.43902E04 1.78688E04 1.55755E05 3.56509E05 1.31965E05 2.24513E02 1.75582E04 3.50262E04 3.80583E04 3.73350E04 7.24191E03 2.22502E03 1.82516E03 2.68883E04 3.82144E04 2.16925E04 7.53313E04 3.73439E04 2.87403E04 9.57805E04 6.15525E04 7.67995E04 1.03749E05 4.48376E04 9.78037E04 2.07057E05 1.54768E05 7.36561E04 6.62413E03 5.43352E04 1.42642E05 7.98753E04 6.79824E03 5.95447E04 9.85638E04 1.49095E05 1.50434E05 6.80764E04 1.81402E04 5.42907E04 7.36401E04 8.08479E04 7.06688E04 2.57999E04 5.03907E03 2.95697E03 3.46721E04 4.86218E04 3.87591E04 8.51487E04 8.94165E04 1.31621E05 1.20532E05 1.01614E05 1.91592E05 1.44839E05 6.06185E04 4.12295E04 6.99759E04 6.64145E04 9.45661E04 1.30643E05 1.00152E05 5.58490E04 7.98274E04 2.16153E05 1.55073E05 1.01031E04 1.87369E04 3.39868E04 -Frame 257 6.84282E05 9.91878E04 3.74531E05 1.46161E06 3.39754E05 1.25511E06 4.79216E06 1.86513E06 8.12555E05 4.12731E06 1.65459E06 3.54242E06 1.45940E07 7.77468E06 8.58231E06 3.23039E07 1.69378E07 1.01215E06 2.37036E06 1.28923E06 7.41212E05 6.34880E06 4.46004E06 1.39298E05 2.72687E06 1.71325E06 4.06048E05 6.61510E05 4.64205E05 6.52581E04 1.31828E06 1.11939E06 6.21271E04 1.37716E05 8.23124E04 3.37994E04 3.98217E05 4.72488E05 1.72576E03 3.13992E05 1.70550E05 1.32033E05 9.62941E05 1.38246E06 4.19673E05 7.00024E06 8.18066E06 3.96099E06 2.59502E06 7.07603E05 1.79284E06 2.06671E07 2.09012E07 1.94385E06 1.70556E06 2.67199E06 1.14565E06 3.72114E05 3.73755E06 2.41335E06 4.41342E05 5.67222E06 5.30086E06 1.57789E06 6.28127E06 2.56063E06 5.33140E04 7.45212E05 6.34381E05 4.50201E05 5.61924E05 1.36094E05 4.49740E05 5.49037E05 8.68374E04 9.82082E03 1.19664E05 2.42978E05 1.70329E05 2.29940E06 1.46672E06 4.02631E05 8.18416E05 8.68392E05 5.76162E05 3.11332E05 1.78588E05 1.69127E05 8.09602E05 8.10535E05 5.69501E05 8.73236E04 1.72703E04 3.06476E05 1.46114E06 2.16790E06 1.80723E06 1.88598E06 1.46482E06 8.39992E05 5.08488E05 5.50150E05 2.70659E05 1.59239E05 3.77594E05 2.28404E05 1.06416E05 1.69898E04 1.64065E04 1.45059E04 7.38249E04 5.67491E04 4.06931E04 1.58638E04 5.46948E01 9.00327E01 1.99030E03 1.65079E03 2.48825E03 8.36568E03 5.75871E03 7.54736E02 4.93913E02 1.95870E03 1.14747E04 1.03979E04 2.21304E04 4.97333E03 6.56463E04 9.94228E04 3.26334E04 7.58903E04 9.71370E04 1.79988E04 3.91184E04 2.20327E05 1.03023E05 1.66293E05 4.85271E05 1.50170E05 2.24600E04 9.43364E04 4.75577E04 2.39796E03 2.60818E04 3.68228E04 1.46043E04 7.83577E03 5.74631E04 5.18795E04 2.26330E04 1.17463E04 5.38597E03 5.36097E02 5.00327E02 1.12235E04 3.91720E04 1.82747E04 8.05956E03 8.81409E04 2.07148E05 3.26258E04 5.48029E04 1.46915E05 1.01221E05 1.29830E04 5.51520E04 1.09524E05 4.38492E04 2.07517E04 7.57677E04 1.21348E04 1.08270E05 1.21866E05 3.13538E04 4.31300E04 2.25836E04 3.80975E05 1.03242E06 8.91925E05 5.25826E05 3.33217E05 4.30385E04 5.33744E04 2.83197E05 2.47385E05 4.41052E04 2.58049E04 6.31814E04 7.14834E03 4.82679E04 7.30871E04 1.84040E04 5.92452E03 4.63750E04 6.38593E04 2.00876E04 1.90950E03 1.00555E04 9.43415E03 1.14725E04 4.26022E04 1.01045E05 9.64664E04 5.25225E04 9.55630E04 7.29958E04 1.38320E04 6.01334E03 1.16277E04 4.94159E03 1.41312E05 3.83368E05 1.38833E05 2.62666E03 2.03288E04 3.60069E03 2.26055E04 2.42846E04 3.59328E03 1.49764E04 1.36656E03 5.38710E03 8.53648E03 4.17698E04 2.48602E04 1.74781E04 2.36976E04 3.63114E03 3.27275E04 3.63204E04 1.02857E04 2.34813E03 1.05051E04 3.54349E04 4.26887E04 8.57176E03 1.73835E04 4.97574E04 2.76992E04 3.92607E04 6.59836E04 9.81558E03 1.59328E04 6.47783E03 1.08821E04 1.22679E04 1.10579E04 3.40161E04 2.14538E04 7.01827E03 9.77528E02 1.15341E05 1.52360E05 3.17677E04 1.34355E03 5.90022E01 -Frame 257 2.83755E05 2.20991E05 4.55764E05 1.33290E06 3.88543E05 1.17320E06 5.03274E06 2.24228E06 5.60639E05 3.63182E06 1.74335E06 3.58992E06 1.45938E07 8.41864E06 7.53849E06 2.98802E07 1.82674E07 1.52892E06 3.16140E06 2.30183E06 6.43387E05 6.16910E06 5.26859E06 4.80865E05 2.04000E06 1.25234E06 4.11445E05 1.15827E06 1.51602E06 3.49813E04 1.17275E06 1.09495E06 1.93327E05 3.48107E05 2.52590E05 1.56448E04 6.54267E05 5.68680E05 1.35885E04 5.06415E05 2.55444E05 2.94942E05 5.60745E06 5.52242E06 1.64120E06 1.21972E07 6.23428E06 1.60429E06 6.18900E06 9.08949E06 3.06808E06 5.41990E06 9.93417E06 2.23642E06 8.12306E05 1.03293E05 4.71982E04 9.92563E05 4.43366E06 2.06266E06 5.42212E04 3.58193E06 4.71992E06 1.84987E06 4.59778E06 3.01094E06 3.88861E05 4.25330E04 1.39736E05 4.59795E04 5.54872E05 5.90766E05 1.26147E05 1.54900E05 2.34774E05 1.68810E05 1.98792E05 1.55839E05 1.53520E05 6.55727E05 5.52657E05 3.01860E05 7.02711E04 9.02954E04 2.82588E04 5.68641E05 6.50814E05 2.91015E05 3.76210E04 3.22798E03 9.56448E02 7.24591E04 7.49481E04 7.37455E04 2.31095E05 1.37243E05 3.54425E04 5.01000E04 1.00231E04 3.49142E04 1.16870E05 2.57533E05 1.97628E05 1.12778E05 1.92022E04 4.68128E03 2.13287E03 4.51768E04 3.27125E04 7.07438E03 8.09347E02 3.99858E03 1.66762E03 9.01994E03 1.11399E04 2.70202E03 1.20785E03 1.34300E03 2.03895E03 9.41818E03 1.37058E04 5.42669E03 2.78889E03 2.64967E02 4.74366E03 1.06028E04 4.12028E04 6.09210E04 3.46452E04 3.32874E04 7.72621E04 1.75571E04 9.62563E04 7.02179E04 7.33284E04 4.30394E05 4.41247E05 9.63752E04 1.03240E05 7.19433E04 4.18764E03 1.18801E04 3.49043E03 2.78912E03 4.92643E03 3.72093E02 6.23490E03 5.61015E03 3.61316E03 1.26455E04 1.18803E04 7.89103E03 5.90040E03 5.59059E03 1.07307E04 2.27650E04 2.13227E04 1.34833E04 9.86648E03 2.28298E04 1.19825E05 8.30294E04 2.77426E04 6.34341E03 3.38305E04 2.92121E04 1.28335E04 3.27862E04 3.31862E03 4.77273E04 1.39940E05 9.87579E04 2.04419E03 1.72768E05 1.98499E05 1.24711E05 1.52402E05 4.35697E04 3.67236E05 2.16114E05 1.04751E05 1.04011E05 2.14430E05 6.21220E04 1.21317E05 1.66078E05 4.34434E04 2.84784E03 2.61933E04 8.62121E04 1.03355E05 3.63804E04 6.86462E03 4.27899E02 6.16366E03 1.84715E04 2.14296E04 1.04996E04 1.85687E04 1.15860E04 3.55996E03 1.16002E04 4.12200E04 6.80375E04 4.09287E03 4.31083E03 2.38986E04 3.28954E04 3.66206E04 5.13011E04 5.10842E04 1.17575E05 2.30010E05 4.92323E04 1.12546E04 7.67863E03 2.32645E02 1.06178E04 1.38374E04 3.61042E02 1.09076E04 3.34091E04 4.91062E04 3.64583E04 5.71036E03 1.05992E04 1.03249E04 2.29319E03 6.49017E03 1.59045E04 1.69755E03 1.43753E02 3.51095E03 2.82499E03 2.55004E02 1.58963E04 1.21719E04 6.38588E03 8.80495E03 2.45910E03 6.94064E03 2.83769E04 1.39320E04 4.51500E02 6.43789E02 5.70296E01 3.92300E02 2.15445E02 4.73575E03 1.40430E04 1.43761E04 1.23803E04 3.37309E04 3.83699E04 1.11047E04 2.84675E03 2.13029E03 -Frame 257 1.07356E05 5.35195E04 5.16280E05 1.13055E06 5.21495E05 1.06738E06 5.44777E06 2.07240E06 5.04721E05 3.74247E06 1.91789E06 3.33314E06 1.54652E07 9.27621E06 7.81082E06 3.03087E07 2.04444E07 2.79258E06 4.15039E06 3.17644E06 6.71886E05 6.26742E06 5.60285E06 5.37527E05 1.85493E06 1.76798E06 3.97634E05 1.46987E06 2.05638E06 3.06788E05 1.03408E06 1.27218E06 1.64810E05 4.59243E05 8.00893E05 6.55210E04 6.47570E05 1.42445E06 1.46021E05 1.09798E06 1.71981E06 1.27764E06 1.79571E07 2.67633E07 1.29104E07 1.27428E07 7.21756E06 1.19342E06 1.79939E06 7.74072E06 4.51966E06 1.60345E06 2.85059E06 8.24422E05 6.14262E05 2.25713E06 1.65116E06 1.81464E05 2.86402E06 1.10046E06 1.62151E05 1.63314E06 2.05845E06 5.17159E05 4.82562E05 3.94856E05 2.32025E04 1.69481E04 8.72179E04 1.18690E05 5.79942E04 6.64629E04 4.17318E04 2.12063E04 6.11524E03 3.05167E04 1.88654E04 1.88716E05 1.46908E05 1.16229E05 1.17589E04 1.36897E04 1.81817E05 6.42738E05 3.60515E05 7.97580E04 2.77637E04 1.18612E04 1.22630E04 2.94665E04 1.54723E04 1.94930E04 3.69182E04 1.16114E04 1.25771E04 5.40824E03 1.07982E03 8.80816E03 4.35196E04 1.03263E04 3.51689E03 1.10346E04 8.44998E02 1.75212E04 9.32838E03 7.77731E03 9.56371E03 1.30641E04 6.09135E03 1.35737E03 7.61827E02 2.64403E03 1.31638E03 1.38152E04 5.27355E03 1.95336E03 3.60398E03 2.40911E03 2.45328E03 3.94145E03 4.40960E02 3.13921E03 4.37577E03 4.08797E03 8.37533E03 4.78269E02 1.23428E04 2.18779E03 3.30387E03 7.47250E03 3.74152E04 1.19583E05 6.38600E04 1.74153E04 5.27707E04 1.36191E05 1.13803E05 4.69172E04 2.47045E04 4.92236E02 2.31189E04 2.12790E04 5.75392E03 1.65320E03 5.96914E03 5.85979E03 1.31128E04 2.25688E04 9.63469E03 7.32927E02 2.35925E03 1.15243E03 9.32568E03 2.16204E04 8.68520E03 1.28096E03 2.40422E03 4.08341E03 8.42250E03 2.17539E04 6.14739E04 6.69580E04 5.67427E04 1.12502E05 1.41657E05 5.17202E04 7.00750E03 1.83384E04 5.44942E04 7.57509E04 3.76726E04 1.70255E04 7.63949E04 1.89664E05 7.40639E04 3.62375E04 1.03384E05 3.09293E05 1.99931E05 1.39336E05 2.59469E05 6.22864E04 4.94454E04 1.05557E05 1.12568E05 3.01365E04 9.99104E03 4.67189E03 7.10029E03 5.14743E03 4.63510E03 2.67018E04 4.23083E04 1.64224E04 9.27356E03 1.57452E03 5.54260E03 3.05678E03 5.57673E02 6.32270E03 1.22556E04 4.25787E04 9.87598E04 6.84657E04 5.68001E03 1.33483E02 1.57299E03 6.50304E03 8.03107E02 2.88358E04 5.65096E04 8.41109E04 1.44378E05 9.29308E04 1.46010E04 3.98032E03 6.57488E02 1.07167E04 8.61408E03 1.81253E03 1.39802E04 1.55041E04 9.20274E02 2.67009E04 2.84721E04 3.92803E03 2.74992E03 2.71761E03 6.00314E03 4.29109E03 4.50198E03 1.97365E03 2.22205E04 5.99269E04 4.01531E04 1.42778E04 1.56589E04 2.52563E03 2.90141E03 2.07995E04 2.33283E04 3.55401E03 2.19082E04 1.32675E03 5.65101E03 7.96149E03 6.67227E02 7.86017E03 6.26329E03 1.93621E04 3.17394E02 1.17091E04 6.33970E03 6.48114E03 3.36291E03 1.13998E03 4.50640E03 -Frame 257 6.64254E05 3.77047E05 8.86297E05 1.50866E06 4.48502E05 1.33396E06 5.26916E06 1.82832E06 7.60791E05 3.46169E06 1.87772E06 3.96983E06 1.43348E07 7.87306E06 8.91365E06 3.12550E07 1.80990E07 2.95649E06 4.48965E06 2.55972E06 1.75183E06 7.91250E06 5.19681E06 6.33943E05 2.85431E06 2.50910E06 9.53237E05 2.03625E06 1.44128E06 2.49382E05 1.57633E06 1.35938E06 2.41991E05 1.01376E06 8.63812E05 3.43294E05 2.12490E06 1.77251E06 6.60732E05 4.96490E06 5.63924E06 1.23311E07 4.33705E07 2.74243E07 2.63546E06 5.61625E06 1.05409E07 3.81523E06 4.14450E06 3.71843E06 3.83745E05 1.93982E06 2.84540E06 9.58756E05 1.00659E06 1.46259E06 2.86352E06 9.42591E06 7.40178E06 3.67738E05 3.77637E05 1.81587E05 1.38242E06 1.45864E06 6.85052E05 4.81274E04 1.62555E05 3.36317E05 3.56861E05 1.55536E05 4.75610E04 1.50155E04 3.39567E04 1.26062E05 2.12042E05 1.37427E05 3.57388E04 1.40904E04 1.45878E05 3.32734E05 6.10925E05 2.87963E05 1.19377E05 3.37319E05 2.82064E05 7.09081E04 3.76784E04 7.26168E03 6.28635E03 2.36635E04 7.94704E03 4.52106E03 9.25582E02 2.14602E03 5.17582E03 1.34718E04 3.01002E03 2.95911E03 1.38784E04 6.32375E03 2.26567E03 3.45176E03 2.76454E03 1.50743E03 2.91055E03 6.75343E03 3.82516E03 7.72046E03 2.06949E04 2.97454E04 1.97871E04 2.92405E03 7.68047E03 1.38130E04 3.37461E03 1.15677E03 1.39567E01 7.08682E03 1.13813E04 1.71955E04 1.67325E04 9.61997E03 1.62260E04 1.93927E04 5.48209E03 6.01928E03 1.21916E04 1.14654E04 7.11869E03 5.38724E03 1.34302E04 2.42121E04 9.96416E03 1.01452E04 2.53402E04 6.48529E04 2.87015E04 1.76781E03 1.38292E04 6.26807E04 3.68499E04 2.52413E03 5.73944E03 4.50952E03 1.47266E03 1.64566E03 6.74317E03 9.72478E02 1.41412E04 2.24844E04 2.16885E04 3.44574E04 1.43716E04 2.54330E03 2.47191E04 1.53890E03 1.61775E04 2.24295E04 7.45148E03 6.20738E03 2.47441E04 4.62486E04 3.89194E04 6.02825E04 2.29804E04 2.30072E04 4.04640E03 1.56531E04 2.26304E04 8.01307E03 6.37532E04 7.43328E04 7.71308E04 2.04845E05 2.35854E05 8.11390E04 4.42782E04 1.12681E05 2.71741E05 3.24656E05 1.28511E05 8.88523E02 2.06413E04 9.39588E03 2.00208E04 6.18012E03 2.22905E03 3.49621E04 7.64001E04 7.42895E04 3.16671E04 2.79641E04 4.00754E04 5.83829E04 3.80217E04 1.06682E04 4.84498E03 2.38728E03 2.66516E03 2.87436E03 8.67588E02 8.44543E03 7.01030E03 2.18031E04 2.32471E04 4.10437E03 2.32650E03 1.11684E03 3.68063E03 2.59297E04 1.19331E04 1.17228E03 2.63160E04 1.99218E04 4.28388E03 7.64554E02 2.54295E03 1.11302E04 1.57169E04 1.20441E04 8.12906E03 8.69468E03 2.45707E04 3.38960E04 4.40682E04 2.76985E04 1.92729E04 1.75510E04 7.89947E03 7.74188E03 1.46213E04 2.56095E04 7.99065E04 1.86950E05 2.01655E05 1.66131E05 1.76915E05 1.61109E05 1.31687E05 1.41176E05 1.59569E05 1.24154E05 1.00242E05 9.59417E04 1.20748E05 1.66466E05 1.77896E05 2.13849E05 2.27243E05 1.77759E05 1.43859E05 1.26333E05 1.19116E05 1.17353E05 1.11199E05 9.81696E04 8.79056E04 -Frame 257 2.28763E05 8.83763E04 1.54086E05 1.11969E06 3.07501E05 1.56936E06 4.82429E06 1.85523E06 1.16609E06 3.50854E06 1.88682E06 4.81488E06 1.34552E07 7.38612E06 1.28058E07 3.39482E07 1.37554E07 2.67787E06 4.38384E06 1.79017E06 2.83072E06 8.42187E06 3.70409E06 1.75330E06 3.72294E06 1.51892E06 6.84885E05 2.10967E06 1.01336E06 8.25234E05 2.21189E06 9.77531E05 5.88430E05 1.54916E06 7.81513E05 9.00272E05 3.13728E06 1.97054E06 5.80198E06 1.20879E07 7.48270E06 1.83227E07 5.19682E07 2.52902E07 4.71693E06 6.23263E06 5.47487E06 3.28025E06 4.14751E06 1.80060E06 1.28926E06 4.14297E06 2.42780E06 1.25892E06 1.51482E06 7.00755E05 4.86908E06 1.92243E07 1.38727E07 4.96916E06 2.41305E06 6.43995E05 1.88957E04 4.80925E05 6.60817E05 2.15632E05 3.98858E05 2.71268E05 7.59202E04 1.83533E04 3.01025E04 4.77318E03 1.08524E05 1.91377E05 7.50759E04 4.64972E02 5.85785E03 6.13606E04 3.55041E05 5.76060E05 6.69106E05 3.06696E05 3.05647E04 2.55112E03 1.21931E05 1.44737E05 4.41212E04 2.78024E04 9.71034E03 4.42959E03 1.63058E03 4.69086E02 6.61247E02 3.11703E03 3.12109E03 8.40278E03 1.47572E04 6.20457E03 3.72770E03 4.65234E03 2.83498E03 8.46234E01 6.67193E02 1.45372E03 2.07058E03 3.04126E03 2.56006E03 3.35149E03 2.64336E03 1.06427E04 1.24829E04 1.55927E04 1.20021E04 4.12414E03 6.05715E03 1.07652E04 1.30404E04 6.68539E03 3.01270E03 7.63956E03 1.08108E04 4.80620E03 2.14434E03 6.32574E03 1.31290E04 1.08630E04 2.15771E03 3.80405E03 4.39433E02 9.04767E02 8.07307E03 7.84661E03 2.60108E04 6.34373E04 7.65540E04 2.74127E04 8.34443E04 1.16619E05 8.02198E04 1.34549E04 6.30182E03 4.23794E03 9.24655E03 7.19883E03 7.25079E03 1.09103E04 1.16501E04 6.59336E03 2.60869E04 2.11755E04 1.35042E04 1.78858E04 2.61521E03 4.38490E04 9.31958E04 6.25161E04 2.70192E04 1.58074E04 1.55643E04 1.78748E04 1.47374E04 6.32422E04 3.66038E04 8.83754E03 1.86632E03 2.55093E04 2.97548E04 1.84186E04 6.47683E03 3.52632E04 1.12454E05 2.32053E04 1.56615E04 4.67547E04 2.13638E04 1.39402E04 1.02713E04 1.11325E04 1.72940E04 1.23359E05 1.28427E05 6.72730E04 5.35500E04 2.90159E04 1.05381E03 4.08732E03 1.32492E04 6.78219E04 9.57722E04 3.22337E04 1.50238E04 4.77264E02 1.81479E03 1.70378E04 5.33747E03 1.53329E03 6.66766E03 5.81025E03 2.51788E03 2.00551E03 4.23673E03 6.59056E03 2.94160E03 1.03030E03 7.75646E03 6.95910E03 1.12405E03 4.44265E03 8.69587E03 2.75418E03 5.25881E03 4.34917E03 2.11063E04 2.08899E04 8.59751E03 4.76880E03 2.27716E03 1.15305E03 1.34546E03 1.98525E02 2.17805E03 2.58791E04 2.31642E04 1.78799E04 1.46146E04 4.20991E03 8.06945E02 4.40816E03 2.59327E03 2.50454E03 3.37046E03 5.90058E02 1.00571E04 6.11759E03 3.44486E04 2.78392E04 1.02056E04 1.71533E04 4.45750E03 3.18666E03 2.37570E04 9.41578E03 4.23044E01 1.18958E04 1.33161E03 2.39485E04 3.65269E03 1.88438E04 1.91990E04 7.55628E03 1.18807E03 1.31054E04 1.41901E03 1.45751E04 1.28994E04 2.74160E02 5.97149E03 -Frame 257 4.99748E04 4.42756E04 2.03674E05 9.82396E05 2.88518E05 1.69248E06 4.69720E06 1.82796E06 1.16360E06 3.48305E06 2.15394E06 5.03286E06 1.32305E07 6.59590E06 1.35871E07 3.49817E07 1.28506E07 2.43912E06 3.65372E06 1.64821E06 3.39333E06 8.39993E06 3.14646E06 1.13372E06 3.43065E06 1.86131E06 1.19994E06 2.22150E06 7.73954E05 8.52916E05 2.35583E06 1.19194E06 7.35204E05 1.64980E06 9.37813E05 1.95209E06 5.00089E06 2.60950E06 7.14862E06 1.89129E07 9.41028E06 1.89756E07 3.28422E07 8.02729E06 1.75885E06 3.66307E06 1.15405E06 1.06863E06 2.71601E06 2.04695E06 2.10134E06 4.48367E06 1.99247E06 1.13790E06 3.56929E06 4.36832E06 1.06560E07 1.86088E07 5.43332E06 7.54464E05 1.09050E06 2.69838E05 1.59329E05 4.04720E05 2.75862E05 1.15229E05 1.30701E05 3.78620E04 1.42213E03 4.64833E03 3.89978E04 3.74733E04 3.02003E04 9.70610E02 3.19553E04 1.70077E02 1.47457E04 6.22020E04 7.71265E04 3.72410E04 1.68834E05 3.75632E05 1.03378E05 4.33487E04 3.21086E04 4.80016E04 2.49450E04 1.98998E04 6.35127E03 1.21697E01 1.56085E03 1.47044E03 5.43769E02 2.16942E01 6.09426E02 7.82965E03 2.40914E04 1.24967E04 7.40080E03 1.03221E04 8.74073E03 7.88212E03 7.65012E03 5.76636E03 4.73174E03 7.90946E03 1.48402E04 1.46245E04 1.20676E04 8.46952E03 1.28596E04 1.65332E04 1.54702E03 4.80255E03 1.11990E04 1.05111E04 9.49675E02 2.02588E03 9.51340E02 1.26231E03 9.18454E02 3.58534E03 5.78942E03 5.09454E03 3.47685E03 1.36324E04 1.69231E04 4.73421E03 1.92975E02 8.48316E03 1.90255E04 3.94973E03 4.59302E04 8.75988E04 8.25453E03 2.49728E04 4.04455E04 1.01152E03 2.92183E04 8.91792E03 4.60857E02 9.33140E03 1.94260E04 1.14710E04 8.22927E03 5.31941E03 2.76628E03 9.06185E03 2.14714E04 2.98662E04 7.73669E03 5.14805E03 8.99988E03 2.32784E04 7.53416E04 1.73605E04 3.10331E02 1.57351E03 1.35673E04 8.28489E04 9.40190E04 3.61037E04 2.57186E04 3.16720E04 5.65389E04 5.62714E04 2.80100E04 1.23765E04 3.24207E04 7.91059E04 4.40619E04 2.31582E04 1.67583E04 9.01118E03 2.03686E04 7.13246E03 2.55706E03 2.96779E04 2.49100E04 1.56390E03 1.19787E04 6.40960E03 3.22191E03 4.83220E03 4.99418E03 2.45745E03 3.00601E03 1.05100E04 1.83168E04 1.40380E04 6.74750E03 6.36962E03 1.61939E04 3.26311E04 3.06912E04 2.65812E04 2.59405E04 1.48822E04 1.35303E04 1.18703E04 3.43860E03 6.20940E03 1.18434E04 6.78524E03 1.56738E03 1.53633E03 3.15350E03 7.87730E03 1.96220E04 1.24155E04 1.34666E03 7.61068E03 2.19330E04 1.72427E04 5.54205E03 5.23128E03 3.06936E00 2.37907E03 8.72267E03 1.61820E04 1.38494E04 1.28951E03 1.66512E04 5.84201E03 3.09859E02 5.65458E02 3.94867E02 2.50585E03 1.05177E03 1.33688E02 5.88814E02 2.41579E03 7.33098E03 1.01917E04 3.84486E03 3.49113E03 2.78903E03 1.51827E02 1.86648E03 6.92082E03 1.15025E04 3.65773E03 2.68140E03 8.10711E03 1.59211E04 9.89020E03 1.65205E03 5.86793E02 8.22015E01 1.21344E03 4.83527E03 4.71025E03 7.35936E02 1.18415E04 9.14129E03 2.52855E03 6.44550E03 -Frame 257 5.81711E05 3.56364E05 6.71381E05 1.14984E06 3.89668E05 1.70902E06 4.92037E06 2.06813E06 1.49609E06 3.55468E06 1.79377E06 4.71763E06 1.36129E07 7.03124E06 1.35960E07 3.68868E07 1.47844E07 2.52140E06 3.64670E06 1.71849E06 3.33029E06 9.45709E06 4.14639E06 2.39716E06 3.71444E06 1.51893E06 9.48884E05 2.21096E06 9.81408E05 1.00981E06 2.89467E06 1.27844E06 8.25312E05 1.85413E06 1.04935E06 3.67574E06 9.45327E06 7.99581E06 1.74687E07 2.75471E07 6.26400E06 5.14352E06 1.60240E07 7.92189E06 4.65308E06 6.98487E06 3.25269E06 1.52416E06 2.04496E06 9.19707E05 1.39487E06 3.93601E06 2.24517E06 1.37004E06 2.82927E06 1.09441E06 1.78468E06 1.42812E07 1.05241E07 1.98449E06 1.49693E06 8.70766E05 4.73428E05 5.95943E05 1.44808E05 4.79698E04 1.87589E05 1.44195E05 9.89330E04 4.73323E04 4.45334E03 7.54502E03 3.71713E04 6.95646E04 5.40767E04 4.31888E04 3.22491E04 1.89833E04 2.47326E04 2.25949E04 1.15625E05 3.43197E05 2.88220E05 8.92001E04 2.62485E04 2.40436E02 4.04039E03 7.17620E03 1.09208E04 5.70083E03 2.26309E03 5.03137E03 3.77747E03 5.92150E02 1.76808E03 7.45907E03 1.89777E04 7.13356E03 1.26163E03 2.20589E03 9.59962E02 2.15421E03 2.57140E03 1.62721E02 3.44204E02 1.11246E02 2.06831E03 8.49850E02 1.57477E03 1.32698E03 2.66692E03 1.17300E04 1.88439E04 1.06074E04 7.52725E02 7.27229E03 3.19490E03 1.19094E03 6.48813E03 1.14557E04 2.29101E03 8.24440E02 2.77924E03 4.74211E03 6.19290E03 3.53123E03 3.26815E03 3.63545E02 7.88522E03 2.19912E04 2.14541E04 4.33644E03 1.94183E04 5.34303E04 6.28517E04 8.24642E04 8.11846E04 1.89430E04 6.95476E03 3.99154E03 1.12715E04 3.26840E04 1.93190E04 6.76044E03 6.63126E03 3.35846E02 5.97543E02 2.97181E03 3.75960E03 3.63065E03 2.86826E04 2.24035E04 1.25505E04 5.99136E04 1.01560E05 4.52477E04 6.31427E03 5.88679E03 2.34946E04 4.85486E04 2.80115E04 1.03120E04 9.85665E03 1.77956E04 1.12146E04 1.98164E03 5.19394E03 1.52198E04 2.43331E04 2.53881E04 4.15773E03 1.60224E04 3.07697E04 4.06010E03 2.88841E04 3.15372E04 2.22112E03 1.05823E04 2.30906E03 5.33026E03 1.64950E04 8.88105E03 1.27841E03 4.62798E02 4.00253E02 4.44851E02 1.11935E03 1.13768E03 1.17079E03 5.04041E03 4.90127E02 5.74925E02 2.15670E03 6.87037E03 4.56562E03 7.89068E03 2.08232E03 3.40580E03 5.09430E03 1.02518E04 2.95373E03 8.56186E02 4.56227E03 5.91816E03 1.92756E03 4.83365E03 2.39603E03 9.06485E03 4.44088E04 5.92517E04 2.40165E04 2.75620E03 4.81628E03 1.06586E04 5.68707E03 2.61601E03 1.66319E03 1.43543E03 1.14067E04 9.31185E03 5.82532E03 4.44527E04 5.02351E04 1.79534E04 4.60227E03 1.45190E03 3.93393E03 2.83210E03 1.90589E01 7.82499E02 1.72698E03 6.34178E02 1.68601E03 8.48101E03 1.73207E03 3.63039E03 1.23774E04 1.51242E04 4.86611E03 1.54499E03 7.12091E03 5.33581E03 4.87731E03 4.46746E03 1.52284E02 3.21194E03 2.72991E03 4.23002E03 3.19504E03 1.50002E02 2.65538E03 5.39799E03 3.11444E03 1.91677E03 9.66864E03 6.32923E03 1.88332E03 -Frame 257 3.77524E05 2.06166E05 3.96642E05 9.89797E05 6.03716E05 1.86093E06 4.96598E06 1.96209E06 1.66817E06 3.64734E06 1.76453E06 5.28139E06 1.32807E07 6.02786E06 1.55311E07 4.40623E07 1.72679E07 3.07286E06 4.47531E06 2.38486E06 4.39011E06 9.82979E06 3.24183E06 2.04677E06 4.43403E06 1.66115E06 1.67026E06 3.46669E06 1.50069E06 2.14189E06 4.18847E06 1.56646E06 1.03530E06 1.72584E06 1.48980E06 6.34334E06 1.12814E07 4.69982E06 1.77828E07 2.97270E07 7.50639E06 5.05473E06 9.00467E06 2.56711E06 1.93519E06 4.62828E06 1.21011E06 1.09624E06 2.29670E06 9.79583E05 2.02857E06 3.50786E06 9.65314E05 1.02001E06 2.16858E06 1.80301E06 6.43490E06 1.38812E07 5.96020E06 5.98278E05 1.85332E06 1.49038E06 1.66096E06 1.00675E06 3.49101E05 4.16993E05 4.86671E05 1.14544E05 4.06556E04 9.52714E04 1.08791E05 1.19363E05 9.56252E04 1.63344E03 1.57939E04 6.32685E04 7.55729E04 1.35015E05 1.32729E05 7.16905E04 5.59253E04 2.28511E05 7.77056E04 8.86906E04 7.49058E04 3.33469E04 4.97907E04 3.52596E04 2.27323E03 1.04415E03 2.21288E03 2.52398E03 6.80473E03 4.18881E03 3.35240E02 5.83155E02 7.00105E03 2.26348E03 8.37179E02 1.20624E02 2.70976E01 2.30410E02 2.08507E02 5.95392E01 2.47176E03 1.81399E03 1.77602E03 2.69670E03 5.05150E02 4.61161E03 1.54314E03 1.21203E03 5.94829E02 2.84457E03 3.67780E03 1.23052E04 9.23931E03 2.47168E03 1.95500E03 8.55666E03 1.53417E04 9.02142E03 4.70102E03 4.59811E03 3.96689E01 1.94169E03 1.08107E03 1.40631E03 4.37139E03 1.14369E03 6.53636E03 1.65012E04 1.80772E03 1.02870E04 5.06124E03 7.12310E03 1.85003E04 4.42610E04 1.92948E04 1.53238E04 2.06409E04 9.19642E03 5.41987E03 5.38343E03 1.11214E04 4.78870E03 9.57083E03 1.93348E04 3.41755E04 3.98394E04 2.74345E04 2.21216E04 2.40862E04 5.86993E04 1.89043E04 1.23646E04 4.26603E03 1.36831E03 5.41585E03 8.99427E03 5.10787E03 1.86052E04 1.32787E04 1.06642E04 5.65866E03 1.87992E03 1.94362E03 1.43105E04 6.39511E03 6.47677E03 1.05160E04 5.18400E03 3.57801E04 4.55817E04 2.94351E04 1.98756E04 4.02850E04 2.07355E04 2.31202E02 1.69626E03 9.46051E02 3.62033E03 8.23189E02 1.85455E03 1.53735E03 7.11128E02 2.34316E03 1.88834E03 2.11236E03 4.04694E03 9.47701E03 9.91685E03 1.11974E04 1.33609E04 3.47964E03 3.42754E03 7.35400E03 7.04643E03 8.09882E03 8.96472E03 3.26280E02 5.72277E02 5.10499E02 3.49884E03 1.03850E03 4.16107E03 2.46608E03 5.60418E03 1.16714E04 6.96090E03 1.02190E04 7.60305E03 7.22675E03 1.48628E04 9.63400E03 2.51826E03 2.31481E03 1.38264E03 2.63834E03 1.46666E04 2.09022E04 1.62933E04 2.83680E04 1.94270E04 1.70724E03 3.22751E02 2.29132E03 6.44833E03 8.00008E03 2.46000E03 3.96368E03 7.22975E03 7.04811E03 7.18361E03 2.68854E03 2.51587E03 8.70998E01 4.95483E03 3.30059E03 5.53423E03 6.43184E03 8.45674E03 1.05939E04 5.18428E03 2.43989E03 1.97485E03 3.19997E03 5.67492E03 5.56881E03 1.20993E03 5.26513E02 1.05111E02 1.25752E03 1.64547E01 4.51464E03 9.25592E03 4.48914E03 -Frame 257 2.76060E02 1.57112E05 3.69555E05 1.07849E06 6.89177E05 1.70045E06 4.97326E06 2.08814E06 1.93030E06 3.93658E06 1.64119E06 5.00690E06 1.34959E07 5.07892E06 1.83891E07 5.49652E07 2.18211E07 3.32647E06 5.41415E06 2.39698E06 4.51162E06 1.17699E07 4.93932E06 3.06181E06 5.74653E06 1.78445E06 1.42048E06 4.16880E06 1.53795E06 2.07550E06 5.12298E06 1.80948E06 1.06500E06 1.82219E06 1.21423E06 8.97368E06 2.01404E07 6.11004E06 1.57426E07 2.23316E07 3.56448E06 1.79643E06 6.38686E06 2.22430E06 1.82919E06 3.81015E06 1.11759E06 5.13189E05 1.29756E06 3.29318E05 9.53148E05 2.75937E06 1.06272E06 4.79232E05 8.79068E05 2.28934E04 2.26180E06 7.01566E06 3.11699E06 3.33998E06 9.14678E06 6.83164E06 9.70350E05 8.79748E05 1.00214E06 5.51966E05 7.99164E05 5.25616E05 1.38191E05 6.40492E04 1.46631E02 5.72303E03 1.18672E05 1.39533E05 1.07700E05 9.31924E04 5.12015E04 1.59585E03 4.92901E04 8.99555E04 3.85364E05 7.30459E05 3.74449E05 4.80411E04 4.92063E03 1.68105E04 2.59473E04 2.33839E04 1.77235E04 9.41064E03 8.24708E03 1.22631E03 9.38020E02 9.79960E02 2.74324E03 5.13978E03 5.53172E03 3.73296E03 1.75969E03 9.82532E02 4.76078E02 1.27370E03 1.05023E03 3.52040E03 6.17537E03 1.16017E03 1.22570E03 6.72331E02 1.99303E03 1.11974E04 1.71720E04 1.30934E04 4.35873E03 7.38305E02 2.01759E02 7.41905E02 3.06492E03 1.88649E03 4.90856E02 1.77103E03 1.69032E03 2.20712E02 3.62802E03 9.93585E03 3.27973E03 5.73849E02 5.40917E03 5.05394E03 8.87370E02 3.84268E03 4.87432E03 1.22162E04 2.65779E04 3.25799E04 4.99090E04 4.37427E04 3.74978E04 2.43741E04 6.99543E02 2.60001E02 2.99263E03 5.21729E03 1.91921E03 1.36290E03 8.88052E01 1.05143E04 2.60378E04 2.89406E04 4.57146E04 3.93211E04 1.11769E04 5.39514E03 8.15995E03 4.21636E04 3.89872E04 1.39852E04 1.97312E03 3.57817E03 2.28340E03 1.86528E04 5.29334E04 2.13201E04 1.06005E04 2.30473E04 1.32584E03 9.18694E03 8.69559E03 5.97165E03 3.06333E04 2.71334E04 3.41947E03 4.32718E03 2.21589E04 3.03898E03 9.46310E03 1.70534E04 2.20079E04 3.63536E04 2.36272E04 6.31117E03 6.69770E03 1.07794E04 2.41814E03 1.10706E03 8.77206E02 1.23100E03 2.74261E03 1.14236E03 2.18340E03 1.89490E03 4.36174E03 4.00237E03 8.92312E02 1.27995E04 1.36444E04 7.72233E03 3.57130E03 2.03544E03 1.48134E03 9.64660E03 6.91504E03 1.28514E03 3.38275E02 9.82155E02 5.48660E03 1.07697E04 6.98374E03 2.55181E03 5.08431E03 5.27269E03 3.85841E03 2.49200E03 4.03381E03 6.16774E03 6.19767E03 1.84085E03 4.64058E03 1.03090E04 7.53098E03 5.03632E02 1.11984E04 1.74702E04 1.43146E04 1.73275E03 3.48915E03 3.47353E03 4.62271E02 2.88401E03 5.08346E03 5.39432E03 9.51575E03 9.87915E03 3.70028E03 8.89328E02 6.04351E02 2.22801E03 3.34339E03 1.44964E03 5.43797E02 3.12875E03 5.99206E03 3.68750E02 3.08096E03 2.05912E03 1.29093E01 1.20568E03 7.54741E02 1.33334E03 5.02984E02 2.17587E03 4.96376E03 6.84504E03 6.33555E03 4.60879E03 3.73788E03 1.27093E04 1.98956E04 -Frame 257 2.01095E05 4.17321E04 4.66550E05 1.55937E06 6.24218E05 1.92428E06 4.92359E06 1.99268E06 1.86835E06 3.55974E06 1.51497E06 5.11089E06 1.41003E07 5.13230E06 1.77437E07 5.97020E07 2.46776E07 3.20891E06 7.62012E06 3.75489E06 5.31944E06 1.29666E07 6.06024E06 2.79400E06 5.44252E06 1.90043E06 2.03666E06 5.68514E06 3.30733E06 2.76298E06 5.31913E06 2.53313E06 2.25431E06 5.02336E06 3.88360E06 1.42251E07 2.50878E07 2.80818E06 7.88865E06 1.16211E07 2.70581E06 2.18003E06 5.40768E06 2.59426E06 9.13669E05 1.68607E06 5.28194E05 3.44720E05 1.09831E06 8.38019E05 7.34844E05 1.20512E06 5.51105E05 5.29040E05 1.27591E06 6.43634E05 9.36763E05 2.77684E06 1.47469E06 7.04228E05 4.06699E06 2.56467E06 3.14930E05 5.75580E06 9.57593E06 5.60079E06 2.85345E06 4.79449E05 1.91013E05 3.23802E05 3.18783E05 2.56213E05 1.24721E05 6.95099E04 3.96607E04 1.01758E05 8.59439E04 1.22316E05 6.74352E04 1.89391E04 1.71689E05 4.11545E05 1.96336E04 6.99311E04 1.56380E05 1.30987E05 4.52917E04 2.30867E04 2.37312E03 3.13286E03 2.85800E04 2.53195E04 1.95607E03 4.35370E03 4.01001E02 5.33212E03 1.06618E04 4.32644E03 2.15505E04 2.26162E04 3.32945E03 2.80712E03 9.63564E03 1.93616E04 1.16219E04 4.35844E03 3.07449E03 1.99311E04 1.12396E04 4.28839E02 1.04421E04 4.43452E03 7.98695E03 3.38918E02 2.71110E03 5.42062E03 5.57954E03 9.44990E03 1.37758E03 2.20661E03 1.70545E03 3.59313E03 1.14955E02 6.92375E03 1.25180E04 1.15747E04 2.67517E03 1.08975E04 9.79578E03 2.98209E04 1.88791E04 1.12014E04 9.25538E03 3.55178E03 3.65166E04 1.56496E04 2.69384E03 2.03779E04 1.48918E04 8.06997E03 3.66258E03 5.86500E03 3.66461E03 8.14077E02 4.73448E03 3.46031E02 8.16825E02 6.77919E03 1.57593E04 9.70576E03 1.22630E04 3.28527E02 1.72831E03 4.78935E03 3.09460E04 2.54671E04 1.81288E04 1.55020E04 6.84938E03 3.15937E04 1.99040E04 1.99381E04 1.30364E04 1.30666E04 1.73640E04 3.66589E04 2.51854E04 1.94286E04 3.15479E04 2.95999E04 1.14758E04 1.01792E04 4.26235E04 3.78466E04 2.46005E04 5.64589E03 7.04297E03 5.82309E03 5.28798E03 9.00786E03 1.60906E04 2.60401E04 2.23735E04 2.80230E04 1.50255E04 1.78652E04 2.53637E04 1.41270E04 1.28597E04 7.23145E03 2.42849E03 1.04138E04 2.17955E03 5.11732E03 1.66331E04 5.76877E03 1.15459E04 1.69742E04 7.89549E03 1.14334E03 1.30327E03 1.00448E03 6.43835E03 1.72696E04 1.95667E04 1.38939E04 4.71690E03 4.77851E03 1.63670E02 1.42643E01 4.02669E03 1.00861E04 1.13469E04 1.43593E04 1.48199E04 4.17407E03 3.95480E03 1.51749E04 1.14225E03 1.03197E03 6.26194E03 5.29307E03 6.58989E03 1.59934E03 2.30219E03 1.04186E03 3.00736E02 1.71037E03 2.30676E02 1.68517E03 3.01015E03 7.01112E02 1.24272E02 2.72531E03 1.31314E04 5.87847E03 6.42843E01 1.03703E03 5.46546E03 9.48727E02 1.67455E03 1.71110E03 1.93613E03 2.27557E03 1.14166E04 4.41627E03 2.16331E03 3.70007E01 7.68724E03 6.56803E03 9.63361E02 2.01951E03 2.60796E03 1.92396E03 7.68690E02 2.17156E03 1.17764E-01 -Frame 257 3.59401E05 2.52167E05 2.66878E05 1.38841E06 6.19640E05 1.90001E06 5.30265E06 2.25080E06 1.73940E06 3.74663E06 1.52379E06 4.30348E06 1.53342E07 6.33090E06 1.35168E07 6.28736E07 3.12925E07 2.23257E06 1.01079E07 5.28667E06 4.73758E06 1.48278E07 8.55538E06 2.50178E06 5.99033E06 3.31763E06 1.71403E06 7.62631E06 4.76849E06 2.48417E06 6.09944E06 4.27664E06 4.56954E06 1.41759E07 7.41539E06 1.62752E07 3.62479E07 1.13512E07 1.80597E05 4.07990E06 1.93804E06 6.79611E05 3.67451E06 2.44964E06 3.32306E05 1.31427E06 7.52337E05 2.25903E05 1.19826E06 9.94179E05 1.75046E05 5.64793E05 4.05844E05 6.61044E04 9.80862E05 7.79725E05 8.36794E04 8.16686E05 1.14174E06 7.47550E04 6.90973E05 1.04860E06 2.39575E05 1.96049E06 7.67001E06 4.72452E06 9.47906E05 1.23729E06 7.08098E05 1.33866E06 2.23981E06 8.01901E05 2.32831E05 4.48497E04 2.16328E04 2.41045E05 5.58249E05 1.50089E05 4.38651E04 2.20470E05 1.01826E05 9.09185E04 3.73160E05 1.57828E05 6.02486E04 3.51759E05 5.20188E05 1.68619E05 5.41676E04 1.37221E04 1.27854E04 2.67821E04 2.77887E04 7.51799E03 2.29502E03 8.48575E03 2.58337E04 1.21688E04 4.43200E03 1.97756E04 1.65238E04 1.26682E04 3.26605E03 5.80609E03 8.53800E03 2.00568E04 1.74415E04 5.98579E03 2.64460E03 1.89723E04 2.21003E04 1.04345E04 5.14269E02 1.81691E04 3.02676E04 1.79456E04 1.60791E03 3.45517E02 6.15599E03 5.77819E03 3.76318E02 4.62017E03 5.36210E03 3.21660E03 8.22261E03 1.00483E03 2.42262E02 3.16301E02 6.59703E03 1.25426E04 1.25370E03 1.18964E04 1.50731E04 7.23926E04 1.03703E05 1.31618E04 3.35113E03 2.54905E03 1.94050E03 3.93541E03 9.99501E03 8.67107E03 6.10338E03 1.58121E03 1.10475E02 8.07036E02 1.29255E01 1.02209E03 1.71877E04 1.94127E04 2.00514E04 1.22771E04 2.70769E03 3.08299E03 3.70418E02 2.01094E03 2.65524E03 7.07701E02 4.86654E02 2.08988E04 5.26736E04 4.37874E04 1.48448E04 7.57032E02 2.31691E02 3.96698E03 9.14223E02 1.38060E03 1.32828E03 1.89071E03 8.11702E03 3.18770E03 1.21718E04 6.28108E04 1.70154E04 3.86184E03 4.03116E03 1.61501E04 1.36226E04 4.56084E03 5.45256E02 9.28923E01 5.79751E03 4.72353E02 6.83611E03 3.38103E02 8.23553E03 4.79824E03 1.17895E04 1.24560E04 1.49933E03 6.26648E03 3.69243E04 3.68070E04 1.78799E04 7.54268E03 9.44837E02 1.27811E04 1.36479E04 2.35248E03 1.61005E03 7.16899E03 1.65571E04 3.30004E04 1.26924E04 1.54951E04 1.13973E04 6.08259E02 2.81019E03 6.69281E03 2.28655E04 4.40083E04 3.13729E04 2.48813E04 1.84991E04 6.36432E03 3.32458E03 4.33858E02 3.15013E03 6.80103E02 2.71162E03 4.70417E03 5.82176E03 4.40619E03 3.52329E03 1.08003E03 3.06916E02 1.69812E02 8.38614E02 2.22053E03 6.36767E03 9.33660E03 8.46283E03 5.18372E03 6.59527E03 8.98662E03 4.85606E03 9.16079E02 6.37325E03 7.57147E03 6.19330E03 8.44178E02 2.41172E03 7.07455E03 6.34070E03 1.44335E03 1.34836E03 2.95243E03 7.47132E03 3.11417E02 3.57625E03 6.93596E03 6.87575E03 3.39425E03 7.29701E02 4.50198E02 2.31441E02 -Frame 257 7.64322E04 4.25323E04 5.00427E05 1.44670E06 8.57447E05 1.95395E06 5.37622E06 2.41168E06 1.34100E06 4.08470E06 1.71614E06 3.69236E06 1.61291E07 7.58439E06 1.18789E07 6.65506E07 3.66315E07 8.03177E05 1.15640E07 6.76941E06 4.39880E06 1.68956E07 1.12584E07 1.38121E06 6.27172E06 4.18893E06 1.87574E06 1.14412E07 8.28980E06 2.59639E06 9.16894E06 6.52273E06 4.55418E06 2.56036E07 1.16595E07 4.80733E06 2.74481E07 1.23456E07 3.94903E05 9.52539E05 1.29944E06 3.01942E05 1.79846E06 1.90734E06 7.14729E04 5.80041E05 7.10300E05 1.37333E05 8.50694E05 1.03353E06 1.69304E05 2.73536E05 3.45762E05 1.41980E04 3.64591E05 6.63833E05 2.14603E05 3.34298E05 5.53333E05 9.73437E04 7.57106E04 2.65474E05 3.78965E04 7.73065E05 1.88676E06 8.93528E05 2.15794E04 2.81430E05 5.06783E05 9.54536E04 3.23794E06 4.82097E06 2.29091E06 7.18168E05 1.27635E05 5.20201E05 1.45046E06 8.97160E05 5.32467E05 4.59116E05 1.46030E05 6.08472E04 2.11066E05 1.73477E05 1.19065E05 3.94568E05 4.32184E05 2.68496E05 2.22165E05 2.75984E05 2.85792E05 3.62671E05 3.77128E05 1.97855E05 1.24430E05 4.96248E04 1.86589E04 5.06070E04 2.40673E04 8.17369E03 7.75180E03 4.44306E03 7.28611E01 4.37388E02 1.09620E03 7.90171E02 5.16074E03 2.87190E03 5.73737E03 1.49924E04 1.48311E04 3.11590E04 7.43048E04 4.24762E04 1.18779E03 1.41463E04 1.60671E04 1.42739E04 1.54614E04 6.71598E03 4.09779E03 1.54608E03 2.88020E03 5.05112E03 1.02754E04 6.87784E03 3.87563E03 1.43129E04 1.30745E04 6.94907E03 2.09197E04 2.19687E04 2.54581E04 1.23355E05 2.21715E05 1.67783E05 6.92880E04 6.11470E02 3.37484E04 3.07579E04 2.86039E03 2.44260E03 6.00541E03 7.88984E03 4.55437E03 5.98749E02 1.58379E03 6.20518E03 1.51177E04 1.41658E04 1.06574E03 5.74818E03 2.04688E03 4.73276E03 5.28116E03 1.09186E03 3.98124E03 6.82419E03 5.38900E03 1.06436E04 2.49997E04 4.53974E04 2.97407E04 2.04646E04 1.75060E04 3.33511E03 1.83600E03 7.36693E03 9.91753E03 9.88654E03 1.08500E04 1.16189E04 4.61411E04 8.31129E04 4.49244E04 3.48460E04 1.36587E04 3.16212E02 3.94150E03 1.69379E03 7.60324E03 6.45511E03 5.86480E03 1.07291E04 1.57917E04 4.36068E03 2.55961E03 7.48903E03 1.09635E04 6.51896E03 1.22875E02 9.15003E03 1.43179E04 3.97191E03 2.23080E02 1.57154E03 1.47010E04 1.45817E04 7.39465E03 3.83383E04 6.06489E04 4.93660E04 4.87002E04 2.90619E04 1.22803E03 3.33912E04 2.36352E04 5.65612E03 3.13124E03 1.45654E04 9.56349E03 4.85898E03 3.57298E03 1.66399E03 4.61614E03 6.98089E03 5.61153E03 4.12299E03 2.39526E03 8.27865E02 3.39327E03 9.25857E03 8.68740E03 1.62690E03 1.83897E03 4.14778E03 2.83877E03 2.11574E03 2.28108E03 2.46617E03 1.01848E03 3.35476E03 3.98413E03 1.68326E03 1.81052E03 1.07565E03 4.12597E03 3.11192E02 2.00155E03 2.52928E03 5.51528E02 6.56109E03 7.09664E03 1.20288E03 1.84107E03 1.38288E03 1.64830E03 4.45932E03 4.48539E03 4.35016E03 4.60077E03 3.06722E03 2.37404E03 1.67965E03 8.31566E02 4.46229E02 8.13194E02 -Frame 257 2.14348E04 1.38923E05 8.15068E05 1.55176E06 7.00900E05 1.75780E06 5.08724E06 2.28274E06 1.33150E06 4.29049E06 1.65020E06 3.67067E06 1.65548E07 6.73504E06 1.34706E07 7.13590E07 3.54083E07 8.08377E04 1.08537E07 6.27861E06 3.83330E06 1.91203E07 1.10348E07 1.02419E06 7.65869E06 5.20446E06 8.30822E05 1.26434E07 9.57661E06 3.57626E06 1.65801E07 1.17421E07 4.08880E06 3.67879E07 2.25333E07 1.27736E06 8.08125E06 5.42189E06 2.55457E05 1.04918E06 8.66102E05 3.43225E04 7.45748E05 9.44614E05 2.23400E04 4.67324E05 5.93550E05 5.04896E04 4.05046E05 5.25633E05 1.79282E04 1.28219E05 1.64465E05 1.08132E04 1.28611E05 2.18253E05 7.87940E03 1.65745E05 2.13337E05 2.22475E04 8.76703E04 2.20329E05 3.47827E04 1.59899E05 3.76411E05 4.11275E04 1.34085E05 3.51369E05 1.94780E05 1.97694E05 1.36269E06 8.43170E05 1.14717E05 1.54000E06 1.29086E06 2.01093E05 3.32263E05 6.01365E05 1.60608E05 6.05877E05 2.63414E05 3.03689E04 3.99518E04 7.33193E04 1.67697E03 6.06470E04 3.31434E04 9.31572E03 1.14379E04 5.66027E04 6.92984E04 1.45348E05 1.53530E05 3.74769E04 8.34808E04 1.43834E05 4.88460E04 4.43501E03 5.07655E04 7.22812E04 1.39089E05 1.12494E05 5.31118E04 1.70267E04 6.72547E03 1.29195E04 1.89686E04 6.28942E03 4.24052E01 3.19564E03 1.08335E04 1.38578E04 7.86475E04 1.35521E05 4.85042E04 1.99882E04 2.55527E04 1.39178E03 3.80903E03 2.34819E02 1.18712E03 1.02084E03 1.50729E03 1.48566E03 3.75643E02 7.44142E03 8.62402E03 2.92746E04 5.78868E04 3.34130E04 1.92257E03 4.96399E03 1.03387E03 3.74141E04 7.59813E04 4.79969E04 2.46178E05 4.07380E05 3.30674E05 6.86820E04 8.53068E03 1.96175E04 2.74771E04 2.23513E04 1.58954E04 2.06704E03 1.08244E03 1.83775E02 1.05941E03 3.18260E03 9.26570E03 7.91781E03 4.65513E03 6.31855E03 4.55154E03 1.27272E03 1.06545E04 1.15226E04 3.16012E03 3.52588E03 1.70208E04 2.16302E04 1.78903E04 4.25959E04 4.12094E04 3.76354E04 3.71652E04 7.79995E03 4.02280E02 1.71052E02 3.23778E03 9.28541E03 4.94713E03 1.21626E04 2.19294E04 2.93293E04 4.47762E04 2.83624E04 2.48069E03 7.57355E03 1.56996E04 2.21375E03 9.66318E00 2.23000E03 7.31474E03 5.65338E03 4.48994E03 1.58886E03 1.69783E03 2.17363E03 1.52360E03 1.29817E03 5.10837E03 3.20211E03 7.09017E03 5.14223E03 2.25921E03 3.99711E03 3.09199E04 1.75829E04 9.65381E03 2.89000E04 1.25170E04 1.43558E04 3.18795E04 1.52526E04 2.92268E03 1.82520E03 4.71161E03 1.94501E04 1.77702E04 9.80268E03 3.59975E03 1.17679E03 8.60693E02 6.07907E03 1.50235E03 1.66810E02 2.15871E03 4.20252E03 2.92491E03 1.19982E03 6.60953E03 3.50381E03 3.77837E03 6.22076E03 1.53762E03 4.34113E02 1.93978E03 9.37498E01 4.02843E02 7.02051E02 3.88689E01 2.86179E01 1.63087E03 7.09793E03 7.52874E03 1.94402E03 1.17178E01 1.75221E03 2.58326E03 2.93545E02 1.38655E03 2.02970E03 1.30571E03 5.84324E02 2.30434E03 3.21826E03 9.50283E02 2.63531E03 4.36884E03 4.77915E03 1.50005E03 9.39213E01 2.42974E02 1.68754E03 4.26184E03 -Frame 257 1.91268E05 8.56379E04 2.44911E05 1.03022E06 4.38627E05 1.76380E06 4.65076E06 1.73720E06 1.19150E06 4.42966E06 1.09315E06 4.57529E06 1.60636E07 3.46258E06 2.06348E07 7.27988E07 2.31122E07 1.40839E06 1.08904E07 3.42235E06 4.60164E06 1.79751E07 6.14466E06 2.19715E06 1.09441E07 3.88271E06 2.28375E06 1.38841E07 5.87070E06 4.73141E06 2.13332E07 2.71748E06 2.20905E07 4.84154E07 1.24704E07 4.69764E05 3.30848E06 1.41307E06 7.14176E04 9.01030E05 3.57847E05 1.00322E05 5.86544E05 3.69076E05 2.71045E04 3.85010E05 1.68604E05 3.78991E04 3.98762E05 2.11289E05 1.95107E02 6.65127E04 2.90938E04 9.77676E03 1.27480E05 8.96796E04 7.75077E03 9.29918E04 5.12228E04 6.11016E03 7.56858E04 2.49897E04 2.28020E04 1.22505E05 9.34943E04 2.64537E03 1.00688E05 3.25927E04 3.27098E04 2.54117E05 2.49308E05 2.15290E03 3.57586E05 5.16590E05 3.29393E05 7.89789E05 9.78522E05 9.15753E04 5.85420E05 7.71884E05 4.81902E04 1.74209E05 1.23035E05 1.38401E04 6.50657E04 4.45113E04 1.02083E04 5.31851E04 1.89638E04 1.30088E04 3.49387E04 4.49592E04 1.29701E04 4.34919E04 5.20797E04 4.72422E03 5.98614E04 1.21211E05 2.44333E04 5.03286E04 2.14707E05 7.16268E04 2.68756E04 1.46330E05 1.04459E05 9.46082E04 1.29256E05 4.61142E04 3.51781E04 1.95268E04 9.10629E03 1.29311E04 1.36047E04 1.76511E04 6.65334E04 7.13505E04 1.07125E04 4.83882E03 3.19768E04 4.70432E04 2.57865E04 1.15102E03 1.93661E03 9.22125E02 3.98472E03 5.42363E03 7.51846E03 2.90204E04 9.04661E04 9.66490E04 7.21280E04 2.32323E04 7.05123E03 1.73227E04 1.76605E04 1.07021E05 3.45167E04 3.38291E04 4.36713E05 4.51529E05 1.31643E05 3.69015E04 2.00417E04 1.57774E04 4.98647E04 3.14466E04 5.82978E03 3.13333E03 2.20655E03 5.43548E03 7.50017E03 5.31136E02 5.59505E02 5.82164E03 1.66575E03 3.33509E03 1.55006E04 2.84475E04 2.12726E04 1.66354E04 1.78800E04 1.34942E04 1.33612E03 6.29074E03 3.69812E02 2.00134E03 2.30416E04 3.69843E04 1.20585E04 2.87664E03 6.46698E03 2.20562E04 2.07339E04 1.68343E04 3.80630E03 5.60019E03 6.65151E02 2.66577E04 3.57075E04 8.25793E03 6.48752E03 2.17064E04 1.03730E04 5.46391E03 8.27189E03 1.09059E04 1.22257E04 4.94431E03 8.50430E02 1.95685E03 2.05392E03 6.94344E03 2.58983E04 3.42682E04 1.32605E04 1.54858E03 3.92848E02 9.24666E03 2.57539E04 6.96433E03 5.34931E02 5.60821E03 7.70028E03 6.98089E02 7.75653E03 7.86117E03 6.43690E02 4.49320E02 4.30233E02 2.76638E03 8.71642E03 6.37446E02 5.18560E03 3.06109E03 2.79631E03 8.63647E03 6.46267E03 5.22639E03 3.15774E03 1.33845E03 3.56054E03 2.05247E03 1.42052E03 1.38812E04 1.33513E04 1.84374E03 6.23784E03 2.98602E03 8.80571E02 4.60039E03 2.49430E03 3.00739E03 2.75449E03 1.52711E03 2.08207E03 5.94428E03 5.87369E02 2.82815E03 1.14447E03 2.39680E03 3.61013E03 5.73794E02 3.80166E02 9.50894E02 1.48250E02 1.11764E03 1.77970E03 6.68403E03 5.00436E03 6.91741E02 6.21851E03 2.71444E03 2.25878E03 2.67414E03 2.19670E03 2.63306E03 3.70134E03 -Frame 257 1.64321E05 7.91483E04 2.92327E05 9.29130E05 3.66790E05 1.55094E06 4.54367E06 1.28952E06 1.28979E06 4.58970E06 9.95368E05 4.37511E06 1.61615E07 2.70602E06 2.40592E07 7.39734E07 2.25799E07 1.16247E06 8.65285E06 2.52317E06 4.02351E06 1.63253E07 4.74395E06 2.34065E06 1.26705E07 4.01732E06 2.59433E06 1.28734E07 3.24013E06 1.08274E07 3.18343E07 1.24348E07 2.06086E07 3.03604E07 6.38592E06 2.91078E05 2.17623E06 9.66346E05 9.54361E03 3.25904E05 1.17534E05 8.57474E04 5.02427E05 1.86693E05 6.32171E04 2.80220E05 1.56164E05 2.15258E04 1.47882E05 4.54901E04 1.04733E04 1.04447E05 4.87459E04 1.74419E04 6.61840E04 3.78196E04 2.84886E04 9.25717E04 1.63116E04 1.87452E04 6.37772E04 2.42302E04 7.52578E03 2.70131E04 2.37435E03 3.63777E04 1.32498E05 6.21244E04 7.51668E03 6.09900E04 4.69890E03 1.57177E05 2.85669E05 9.45112E04 1.13705E05 5.21160E05 3.63202E05 3.62441E05 1.90156E06 1.31928E06 3.67597E04 5.86519E05 3.84179E05 4.89343E03 5.24685E04 1.36713E04 5.14602E04 1.50247E05 7.55394E04 1.66640E03 3.39599E04 1.44807E04 2.21895E04 7.63536E04 2.89150E04 1.19068E04 8.66764E04 4.52993E04 1.65916E04 9.39563E04 5.93489E04 3.89591E03 1.24065E05 1.18303E05 1.42912E04 2.95118E05 4.48106E05 3.14928E04 2.35569E05 3.06212E05 9.98003E04 5.51266E04 1.62521E04 9.56408E03 1.72975E04 1.40583E03 9.92877E03 1.75966E04 8.20546E03 2.93563E04 4.34725E04 3.26349E04 1.84955E04 8.32400E03 6.15488E03 1.13555E04 2.60171E04 3.46135E04 1.72712E04 1.50172E04 2.61814E04 1.18627E03 1.06472E04 9.83970E03 3.26868E04 1.06992E05 1.34004E05 1.61222E05 6.98213E05 8.43891E05 2.23880E05 3.84168E04 2.13836E04 4.70451E04 1.68271E05 1.24610E05 2.72928E04 1.33690E04 6.44320E03 4.55935E03 3.23970E03 4.58811E02 4.29826E02 4.32475E03 1.03506E04 5.93246E03 2.81908E02 4.60009E03 9.96635E03 4.94886E03 2.39569E03 7.22533E03 1.71789E04 8.36967E03 1.89828E03 7.41524E02 5.50104E03 6.84361E03 9.56207E03 5.67097E03 2.20081E03 1.36873E04 3.41438E03 4.74932E03 8.77296E03 6.79999E02 3.26067E04 8.40780E04 2.98116E04 3.77339E04 7.44221E04 4.97115E04 6.79589E03 9.46184E02 5.11170E03 1.09601E04 9.22019E03 1.07892E04 2.25328E04 2.07249E04 7.84843E03 1.30796E04 1.61711E04 2.08942E03 5.08000E03 1.05150E04 2.61451E03 6.88281E03 1.93648E04 1.90675E04 6.95822E03 8.36754E03 9.10773E03 6.77716E03 2.50132E03 3.90414E03 1.58938E03 9.84990E02 3.46876E03 2.73943E03 1.50650E03 3.96508E03 2.18595E03 1.84429E03 8.16673E02 2.94479E03 8.54986E03 1.62386E03 1.80620E03 8.02907E03 9.32945E03 9.41301E03 2.30178E04 1.93861E04 5.36520E01 1.94901E04 9.66164E03 3.83560E03 2.70216E04 3.39704E04 6.68118E03 4.56594E03 2.76215E03 2.28807E03 1.59977E04 1.43379E04 2.55436E03 5.52519E03 5.98335E03 1.32756E03 2.13475E03 3.15518E03 8.99692E02 2.73243E01 1.03349E02 1.42971E03 4.05343E03 4.92805E03 3.61679E03 1.13050E04 1.13681E04 9.11155E02 1.12697E04 1.46626E04 6.17892E03 2.87323E03 2.48950E03 -Frame 257 1.60608E04 1.26654E05 6.03316E05 1.00569E06 2.16119E05 1.71764E06 3.84789E06 4.19236E05 1.79437E06 3.68696E06 2.24768E04 8.14690E06 1.13304E07 1.78952E06 4.42707E07 5.74488E07 6.94256E06 7.98905E06 6.13567E06 3.49939E04 9.66217E06 9.69708E06 1.35670E05 7.55272E06 5.37583E06 1.62820E06 1.34841E07 6.15413E06 4.50325E06 3.04228E07 1.64630E07 1.14810E07 1.58535E07 5.73792E06 5.31781E05 2.25314E06 8.25357E05 6.96269E04 2.22317E05 3.10215E04 1.15881E05 2.11017E05 5.44518E04 1.56162E05 2.30250E05 3.00558E04 5.78054E04 6.00462E04 1.93666E03 6.06516E04 7.81818E04 5.04418E03 5.46561E04 3.74030E04 9.78555E03 8.14871E04 6.86126E04 1.41923E04 1.79629E04 1.66377E04 8.19431E03 4.19152E04 3.84975E04 4.55387E03 9.77964E03 8.83824E02 3.36496E04 1.02696E05 4.84220E04 8.68206E03 4.33538E04 4.08256E04 6.73564E04 2.45486E05 1.03989E05 1.10515E05 3.93796E05 3.75520E05 9.70726E05 2.13341E06 7.56068E05 2.95524E05 5.65020E05 1.34158E05 2.51611E04 5.50073E04 1.14773E04 5.85047E04 6.46144E04 8.60494E02 2.39406E04 3.93109E04 4.70042E03 1.83235E04 2.68680E04 1.95697E03 3.94354E04 4.58522E04 1.15013E04 1.07794E04 3.89895E03 2.70672E04 1.15935E05 8.71133E04 2.55275E03 8.58755E04 1.77072E05 8.02548E05 1.50974E06 9.27142E05 6.77862E04 7.29891E04 2.00779E04 1.64387E04 1.64458E04 1.62244E03 2.38674E03 2.86886E03 7.10642E02 6.99850E03 2.87034E03 3.12172E03 7.18407E03 1.62063E03 3.33528E03 1.97041E03 7.88039E03 6.93298E02 1.22157E04 2.25877E04 2.81729E03 3.15652E03 1.67382E04 1.58540E04 2.56973E04 1.65319E04 3.26890E04 1.89812E05 1.76979E05 1.48543E05 4.01263E04 4.08801E04 3.06975E04 1.20770E05 1.07442E05 1.48087E04 3.11705E04 3.45115E04 1.78768E04 6.62087E03 6.17317E03 1.34142E04 1.90596E04 1.59333E04 4.52615E03 6.91227E02 3.69267E03 1.57169E03 3.57099E03 4.12402E03 8.02345E03 1.08782E04 2.33388E03 3.82627E03 2.33026E03 2.54753E02 2.10596E03 2.60841E03 6.77606E02 3.82769E03 1.58683E04 8.48028E03 2.99579E03 9.63299E03 2.73925E03 5.14949E04 8.25222E04 5.31900E04 4.13268E04 2.40311E04 7.79128E04 4.55839E04 1.49419E04 7.16133E03 8.34545E02 1.40480E03 6.51723E02 9.48671E03 3.65383E04 2.47286E04 3.45673E02 6.56821E02 3.53124E03 3.85755E03 5.42580E02 1.43782E04 3.00430E04 2.21630E04 4.24311E03 3.18895E03 1.70341E04 1.91723E04 8.31611E03 7.13149E03 1.24554E04 1.53704E04 7.77308E03 7.68252E02 9.26658E02 7.09191E02 4.10750E00 1.87894E03 1.19924E03 3.05074E03 7.71208E03 1.14594E04 1.63009E04 2.60687E03 5.31251E03 1.48507E04 1.00613E04 1.44451E04 1.17138E04 4.06842E03 4.24883E04 5.29692E04 1.77792E04 9.64137E03 5.33903E03 1.41999E04 3.73535E04 2.63455E04 9.07502E03 4.04788E03 2.12641E03 7.95529E03 4.15468E03 1.25027E03 2.93826E03 3.56703E03 5.30128E02 2.51689E01 8.45828E02 1.91090E03 4.56598E03 8.94864E03 1.88547E03 9.79276E02 3.27684E03 5.47263E03 8.20636E03 1.26580E04 4.01464E03 3.11858E03 1.76288E03 3.63431E03 1.17337E04 -Frame 257 1.45502E05 6.09256E04 3.50118E05 7.92976E05 1.04378E05 1.49128E06 3.55446E06 2.63970E05 2.10717E06 3.10254E06 4.40848E05 9.43567E06 1.00178E07 5.76579E06 4.84613E07 4.37496E07 5.60460E06 6.85046E06 4.67365E06 6.69804E05 9.83644E06 5.53120E06 1.12954E06 7.39565E06 2.63836E06 5.29057E06 1.64043E07 2.75569E06 2.36504E07 3.32012E07 6.85723E06 3.18241E06 6.37125E06 1.93909E06 3.78570E05 5.65715E05 8.37319E04 1.87076E05 1.23427E05 2.35272E04 1.10818E05 1.61722E05 1.62028E04 2.37837E04 8.51319E04 2.21930E04 4.35095E04 2.25176E04 1.44652E04 6.52377E04 4.67246E04 1.05653E04 3.41241E04 1.11372E04 2.58097E04 7.25617E04 1.58725E04 5.02946E03 8.16251E03 4.13816E03 9.66425E03 1.47266E04 3.46537E01 1.37208E04 1.44653E04 7.28792E03 1.43939E04 1.44674E04 4.41716E03 2.69688E04 2.59252E04 2.21259E03 2.62726E04 3.61474E04 2.67436E04 8.36009E04 3.93601E04 6.89399E04 4.70282E05 7.71981E05 6.06365E05 5.89461E05 2.18031E05 2.18221E04 1.36531E05 5.23138E04 6.43746E03 3.55826E04 1.03895E04 1.34382E04 4.21714E04 4.67896E03 7.10494E03 1.08764E04 2.85544E03 2.15196E04 1.16506E04 2.00312E03 2.45674E04 1.79541E04 4.06415E03 2.93061E04 1.84043E04 1.91122E04 9.36555E04 4.49027E04 2.06063E04 3.61320E05 5.12430E05 3.10515E05 3.88896E05 1.30683E05 3.06847E04 3.45899E04 1.70437E04 3.49574E02 4.21534E03 5.00304E03 5.57803E03 1.76118E03 1.46657E03 8.76089E03 6.68814E03 7.54197E02 1.48820E03 6.89755E03 1.10826E04 6.36719E03 3.18776E01 6.06668E03 7.75373E03 1.32558E03 1.46408E04 1.84508E04 7.16591E03 3.24587E04 4.12687E04 5.81669E03 1.83590E04 5.73227E04 8.03598E04 4.19003E04 2.55778E04 9.04709E03 1.32229E04 7.59095E03 1.81632E03 5.90414E03 7.83168E03 1.74636E04 5.06603E03 6.45402E03 8.13050E02 2.81554E03 1.25898E03 4.29056E03 2.12941E03 5.34263E03 1.03768E03 1.13809E03 3.58053E03 8.73742E03 4.36713E03 7.40580E01 1.48175E03 1.11043E03 5.40725E03 3.77125E03 3.70592E02 3.64120E03 1.78943E04 1.53124E04 3.74158E03 1.55840E04 2.34072E04 5.46228E04 9.95441E04 5.60020E04 2.55632E04 8.23328E03 1.33486E04 1.87044E03 7.36495E02 1.06147E03 6.46526E03 1.44682E04 1.96976E04 5.31919E03 1.57945E04 4.30840E03 6.65536E03 2.97000E04 2.49141E04 7.30173E03 1.25402E03 1.14325E04 2.81024E04 3.54229E04 7.59464E03 6.37912E03 5.88452E03 6.53834E03 2.15328E03 4.11387E03 8.58200E02 1.18500E04 6.03923E03 3.43831E02 5.26204E02 2.15049E02 3.42423E03 2.93439E03 1.64925E03 4.64223E03 2.33452E03 2.17835E03 2.15513E03 1.18131E04 9.93156E03 6.03616E02 1.23523E04 1.16892E04 4.82111E03 1.96306E04 2.14522E04 6.23912E03 1.33580E04 2.39090E03 1.42681E03 1.61066E04 1.08656E04 1.84047E02 2.12137E03 3.84735E03 2.30952E03 4.36794E02 8.54211E02 3.10201E02 5.54954E03 6.57832E03 8.81401E02 9.38040E02 1.03715E03 5.28195E02 1.75386E03 6.00621E03 3.20852E03 1.05084E03 3.29095E02 1.85692E03 1.74085E03 1.13415E03 1.20377E03 9.25718E02 3.27765E02 2.26788E03 3.17087E03 -Frame 257 6.37037E04 9.08384E04 2.95497E05 7.75485E05 3.41256E04 1.70050E06 3.22694E06 3.65227E05 2.08230E06 2.65442E06 1.52692E06 1.07385E07 9.99697E06 1.09652E07 4.45509E07 3.21118E07 5.33583E06 6.52233E06 3.91077E06 2.09818E06 8.50127E06 4.41439E06 3.86404E06 6.85305E06 1.36039E06 1.55881E07 2.89184E07 2.39326E07 3.97973E07 2.74032E07 4.07128E06 1.66230E06 1.72178E06 5.65599E05 4.41621E05 3.24968E05 3.84560E04 9.09896E04 2.28246E04 2.09734E04 1.48943E05 8.61781E04 6.67468E04 8.46557E04 1.35679E04 2.85283E04 6.73814E04 3.29269E04 4.37121E03 2.65096E04 1.16334E04 1.85969E04 1.27822E04 8.99536E03 2.01184E04 2.08061E04 1.74735E03 8.71538E03 8.55250E02 4.11154E03 1.81096E04 8.37854E03 3.55670E03 1.69251E04 3.35076E03 6.70245E03 8.66289E03 6.48637E02 1.82663E04 2.56972E04 3.71941E03 9.06104E03 1.19040E04 7.87873E03 3.35705E04 3.94316E04 1.75992E04 1.03191E05 1.80012E05 1.14546E05 1.76730E05 4.81808E05 3.79680E05 2.29614E05 9.27332E04 6.52569E04 1.19532E05 4.52647E04 1.92109E03 4.17751E04 2.62862E04 1.72751E04 2.74613E04 7.33783E03 3.83793E03 2.67771E04 8.10750E03 1.06404E04 2.22477E04 2.08023E03 3.40887E04 4.20408E04 3.38997E04 6.78428E04 2.72205E04 4.00454E04 1.90637E05 2.72482E05 3.17362E05 3.28657E05 1.52424E05 1.07522E05 9.33522E04 5.55009E04 1.46131E04 1.26168E04 7.18719E02 2.19751E03 6.84882E02 6.29251E03 3.55585E03 7.03443E02 1.65007E02 3.56031E03 6.19973E03 9.15577E03 9.64704E03 3.88646E03 9.63167E03 1.27903E04 1.18908E04 3.72087E04 6.76941E03 2.56650E04 2.94837E04 5.28228E03 1.58213E04 9.79591E04 1.04191E05 5.94003E04 4.31444E04 8.58685E03 2.61564E03 3.18624E03 1.33865E03 1.12891E03 1.01848E03 1.02775E04 3.92025E04 2.51736E04 3.36781E03 8.59847E03 5.51014E03 2.45373E03 3.15904E03 4.24263E03 9.92273E03 1.72287E04 7.44841E03 5.25226E02 2.53831E03 1.27896E04 1.62198E04 5.96772E03 4.44069E03 2.08478E03 4.50753E02 7.09661E03 9.09018E03 2.88397E04 1.93387E04 7.10419E03 2.58811E04 3.47805E04 3.22247E04 7.09393E04 7.79926E04 7.04256E04 7.03011E04 2.34462E04 3.46246E03 1.51078E03 8.70579E02 5.78610E01 3.15878E03 2.74491E03 1.66021E04 1.94674E04 1.48376E04 1.48055E04 5.20701E03 1.77450E04 3.59118E04 4.44710E03 3.67568E03 4.36876E03 4.99671E03 2.45109E04 3.50271E04 1.76822E04 2.61237E04 2.71641E04 1.57778E04 1.06681E04 1.93681E03 1.51794E04 2.35749E04 1.19946E04 3.88148E03 4.77343E03 3.41436E03 1.38209E03 9.14701E03 6.04499E03 2.98061E03 4.03833E02 3.13621E03 1.57936E04 1.31225E04 2.13638E03 1.16770E04 8.66873E03 1.67252E04 4.01958E04 2.60903E04 3.43487E02 1.23427E04 2.06126E04 8.99138E03 1.49189E04 4.77302E03 6.99470E03 2.50839E04 2.19263E04 3.18916E03 9.24352E02 2.87023E03 5.36460E03 8.58235E03 4.22710E03 1.16821E03 1.01778E03 2.64162E03 3.24676E03 1.33957E03 4.56549E02 7.04650E02 6.92285E02 3.23408E03 6.34086E03 3.94544E03 4.70984E02 6.46576E02 1.42739E03 5.28618E02 1.47782E03 5.46912E01 -Frame 257 1.74168E04 1.06973E04 5.78030E05 9.56833E05 8.48346E04 1.97271E06 2.93362E06 6.13001E05 1.90965E06 2.73407E06 2.29036E06 1.16057E07 1.11126E07 1.24187E07 3.97905E07 2.51719E07 4.57554E06 5.97431E06 3.65438E06 2.28703E06 7.86620E06 3.97539E06 4.17038E06 9.46668E06 8.76502E06 3.18517E07 4.07120E07 1.54932E07 1.68069E07 1.02139E07 9.08871E05 6.95265E05 5.72720E05 5.65505E04 1.92635E05 3.25907E05 5.04307E04 1.11474E05 9.69351E04 2.39855E04 8.18795E04 5.80909E04 7.34493E03 3.12165E04 3.53281E04 6.77089E03 8.92415E04 4.04912E04 9.37959E03 1.44190E04 1.00694E04 1.62758E03 1.80271E04 6.93221E03 2.87651E03 2.61290E04 1.14671E04 9.09874E03 2.28383E04 1.10853E04 5.05254E03 1.60758E04 4.99919E03 1.75836E04 3.39650E04 1.59882E04 1.98064E04 2.31508E04 8.63949E03 1.17196E04 1.04717E04 1.02782E04 8.47639E03 7.07155E03 2.24349E04 1.28837E04 1.98752E04 5.46957E04 3.62871E04 4.71127E04 2.93445E05 2.94855E05 5.18068E04 7.48940E04 1.48660E05 8.50992E04 2.04487E05 9.98528E04 3.63552E04 9.40772E04 5.57442E04 7.34284E03 2.20653E04 8.31089E03 3.91434E04 7.95286E04 5.06525E04 2.57664E04 4.15454E04 2.60369E04 3.37550E04 5.56721E04 1.62553E04 2.44405E04 7.54995E04 1.00791E05 2.79959E05 2.12610E05 1.72936E05 3.80184E05 2.27282E05 8.94751E04 1.61827E05 7.56958E04 2.36207E04 4.53701E04 1.67568E04 7.26336E03 1.12540E03 6.39201E02 2.08739E03 6.38958E03 2.00014E03 4.51931E03 2.45175E03 1.76443E03 9.94143E02 8.05335E03 1.66142E04 2.36376E04 2.54967E04 8.46114E04 1.37004E05 5.59897E04 2.07545E04 2.38596E04 4.58226E04 3.77373E04 4.60899E04 1.54742E04 3.82891E03 2.07585E03 3.97617E03 1.30474E03 5.51903E03 1.65735E03 7.63952E03 1.40749E04 4.21801E04 2.50927E04 3.90600E02 3.86496E03 4.87251E03 4.15524E02 1.37419E03 6.08503E03 4.44510E03 1.43007E04 6.94644E03 9.93273E02 4.76719E03 9.25906E03 2.42048E03 5.07898E02 3.65322E02 6.36998E03 9.28640E03 3.14143E04 3.68094E04 3.44535E04 3.83299E04 4.78053E04 5.70429E04 2.26350E04 2.47752E04 4.29844E04 1.56929E04 2.49681E03 3.07282E04 2.64858E04 3.08706E03 9.26798E03 8.49566E03 9.59712E02 1.96224E03 6.17562E03 1.15602E04 1.55176E04 2.59561E03 2.81690E03 2.02067E04 1.89070E04 8.21191E03 1.02304E04 1.00568E04 5.49225E02 2.56732E03 5.11265E02 5.06506E03 1.31148E04 5.35068E03 2.76371E03 3.11880E02 8.86616E02 2.09388E04 2.39934E04 2.15678E03 9.25646E03 7.25289E03 6.91395E03 1.26113E04 1.31659E02 4.02792E03 1.15631E04 8.36032E03 1.06881E04 6.15173E03 1.01876E03 1.10275E04 1.10822E04 1.68557E03 4.23906E03 1.41770E04 2.63368E04 5.41943E04 3.33302E04 1.57398E04 2.71598E04 1.12060E04 1.35254E04 3.20739E04 1.33397E04 9.88882E03 1.41893E04 4.43002E03 1.36888E03 2.64658E02 2.69088E03 1.09406E03 2.19955E02 1.40040E03 4.13169E01 2.64287E02 2.83489E03 1.63657E03 6.82731E02 4.27754E02 5.65553E03 2.75462E03 3.42927E03 3.76530E03 2.65667E03 1.56595E03 2.98995E03 2.56485E02 8.11567E02 1.04460E04 -Frame 257 7.46373E04 9.41031E04 4.19180E05 8.19629E05 2.53920E05 1.80542E06 3.09289E06 9.77542E05 2.05192E06 2.48986E06 3.12544E06 1.14580E07 1.10178E07 1.11779E07 3.33034E07 2.18100E07 4.64337E06 5.69101E06 2.95387E06 3.68445E06 7.82653E06 3.86363E06 6.27314E06 1.14109E07 1.51407E07 4.92072E07 4.92172E07 5.88703E06 1.32012E06 2.59862E06 8.09836E05 6.72180E05 4.85419E05 1.18526E05 1.76864E05 1.51686E05 4.97430E04 3.30439E04 1.41745E04 4.63933E03 4.14844E04 2.40077E04 2.84510E04 5.66343E04 3.93386E04 4.53390E04 2.89717E04 8.31099E03 6.22874E03 1.21773E04 8.77089E03 1.06311E04 7.36013E03 4.10404E02 4.23953E03 4.34491E03 4.18063E03 1.62230E04 1.43018E04 1.47082E04 1.12465E04 4.81754E03 9.91254E03 1.78534E04 1.63721E04 1.46431E04 1.85856E04 7.94618E03 7.81345E03 1.14170E04 3.08038E04 3.89959E04 1.86541E04 1.72591E04 1.95062E04 2.04781E04 2.13240E04 4.58311E04 5.67229E04 1.06604E05 3.05978E05 2.67661E05 2.29597E05 4.62815E05 3.51514E05 2.02515E05 1.93481E05 8.19581E04 1.44554E05 1.26988E05 4.89343E04 2.82993E04 1.81629E04 2.20532E04 4.78134E04 3.67204E04 2.50777E04 2.80754E04 2.95302E04 2.81266E04 3.13001E04 2.60753E04 5.65460E04 3.83755E04 5.95217E04 1.40132E05 2.86365E05 2.90371E05 1.04430E05 2.48103E05 1.92700E05 8.93671E04 6.46287E04 2.91138E04 1.26935E04 1.45457E04 1.81352E04 9.75589E03 3.68186E03 2.80584E03 9.17948E02 3.43901E03 9.42931E02 9.50318E02 1.00279E03 3.80018E00 2.56946E03 4.06692E03 7.77034E03 1.16096E04 1.05908E02 3.55598E04 9.89368E04 6.63431E04 5.27607E04 5.55723E04 3.55910E04 2.13737E04 1.80365E04 2.19319E04 1.30957E04 3.95526E03 5.64351E02 1.61393E03 4.70324E03 8.71910E03 3.99655E03 4.38451E03 6.49990E03 2.33054E04 1.13381E04 5.49620E03 6.33632E02 7.27651E03 1.18075E04 6.75952E03 3.85871E03 1.01379E04 6.22927E03 2.07821E01 5.62372E03 1.62809E03 7.87160E03 6.02784E03 1.36424E03 1.57019E03 2.39552E03 6.12059E02 5.09255E03 5.68693E03 1.77657E04 3.65495E04 5.56002E04 1.70977E04 1.07196E03 6.71516E03 5.50917E03 1.96542E04 2.06935E04 8.93385E03 1.65248E04 3.25391E04 2.38122E04 5.86996E03 2.20985E03 2.63029E03 7.21100E03 3.77813E03 4.29658E03 4.27056E03 1.83509E03 3.96421E03 6.59533E03 7.80974E03 2.48391E03 1.68917E03 6.81611E03 7.51115E03 4.59966E03 6.46797E03 6.63104E03 2.90484E03 3.62715E03 7.40414E03 1.06151E04 1.25581E04 5.65557E03 4.79359E03 2.81572E03 2.30299E03 1.04291E04 5.70926E03 3.44724E02 3.17068E03 1.45497E03 6.06846E03 2.56730E03 2.12841E03 5.76810E03 5.20756E03 5.43090E03 1.11084E04 1.05434E04 1.11973E04 1.04475E04 1.64572E04 1.97505E04 2.43518E04 1.02679E04 1.07843E04 1.23929E04 1.34214E04 6.88146E03 1.09318E03 1.29576E03 2.29573E03 4.66533E02 6.95060E02 5.01828E02 3.90505E02 1.32169E03 2.45607E03 3.73559E03 1.72767E03 7.74962E02 2.68687E03 1.26245E03 6.32221E01 5.07746E03 1.42150E04 1.30300E04 9.61754E03 9.39539E03 9.23749E03 1.07792E04 1.76154E04 2.39142E04 -Frame 257 5.46607E04 7.42847E04 2.02936E05 6.63659E05 4.90939E05 1.94903E06 2.86507E06 1.09791E06 2.13689E06 2.02500E06 3.22828E06 1.21692E07 8.76625E06 9.16894E06 2.66691E07 1.23197E07 2.75491E06 4.08895E06 2.50506E06 4.02848E06 6.62442E06 5.13060E06 1.07246E07 1.14674E07 1.27025E07 4.53641E07 2.34545E07 9.09132E05 5.91297E05 7.28901E05 1.64933E05 3.26301E05 2.11435E05 1.41034E05 1.06596E05 3.30877E04 1.11398E04 1.38095E04 5.35062E04 5.80448E04 2.84201E04 1.55904E04 1.92186E04 3.63620E04 8.52838E03 2.38140E04 3.38406E04 1.69839E04 8.12689E03 3.55199E03 1.36338E03 3.41458E03 2.21122E03 4.10302E02 8.37162E02 1.57650E03 3.34151E03 1.87258E03 3.31808E03 3.34715E03 1.24684E04 6.35089E03 5.31044E03 3.21509E03 8.39204E03 2.52130E04 1.25614E04 1.23970E03 4.51555E02 9.22480E02 6.33244E03 1.63448E04 1.07146E04 9.64902E03 1.44303E04 5.72586E03 7.99558E03 1.32665E04 7.88869E03 4.48951E04 9.55214E04 6.33744E04 2.26708E05 4.66496E05 1.22833E05 5.26723E04 1.04759E05 7.81073E04 1.03281E05 5.83572E04 2.24309E04 3.18571E04 3.51428E04 4.24087E04 4.03054E04 3.17366E04 3.32079E04 2.68065E04 1.34615E04 1.51416E04 2.80940E04 4.69289E04 8.39784E04 9.91699E04 1.18398E05 2.33869E05 1.94721E05 2.71020E05 4.78922E05 1.41181E05 2.78338E04 6.37742E04 4.41740E04 1.89629E04 1.98472E04 1.06084E04 1.00181E04 2.97800E03 1.01554E03 1.06236E03 8.75038E01 2.39668E03 1.48108E03 1.08745E03 1.76141E02 1.52203E03 1.57097E03 7.34550E02 5.64935E03 2.04495E04 2.11855E04 2.50656E04 4.88680E04 2.47851E04 3.91544E04 1.54520E04 2.86012E04 3.04438E04 1.02684E04 2.29286E03 2.95194E03 2.21786E03 2.23569E03 1.03526E03 1.55035E03 2.23691E03 1.29336E04 3.33965E04 4.82676E04 1.42927E04 2.43612E03 3.06673E03 5.79898E02 5.30842E03 2.06301E03 2.07156E02 3.01281E03 1.83127E03 1.83149E03 1.29800E04 1.89062E04 1.02435E04 9.82427E03 9.11705E03 3.66394E03 1.71326E02 6.22598E02 1.17536E03 8.64731E03 7.68831E03 2.98990E04 4.52171E04 7.98633E03 5.64822E02 3.30447E03 1.11507E04 1.48467E04 8.58492E03 3.96147E03 6.76369E03 2.82626E03 7.91950E03 1.16980E04 2.94372E03 2.41239E03 7.04129E03 9.19750E03 3.21816E03 3.56081E03 5.28519E03 2.18602E03 1.17316E00 5.28320E02 8.36810E02 1.04775E03 2.77246E03 1.08854E00 1.12022E03 1.05229E03 2.46475E03 2.60312E03 1.72289E03 1.08567E04 6.57358E03 2.50688E03 5.36965E03 2.99318E03 1.63586E03 8.98871E02 3.63749E03 9.28724E02 1.03152E03 1.70383E03 3.29054E03 6.26093E03 6.48920E03 2.70723E03 1.55837E02 3.73983E02 3.66780E02 3.87381E00 8.91289E02 8.38276E03 8.69982E03 2.37474E03 3.45918E03 4.98783E03 3.91455E02 3.95814E03 1.49738E04 1.19599E04 1.20067E04 1.00981E04 6.34672E03 1.11817E03 1.83787E03 2.31641E03 2.52620E03 2.95760E03 1.67677E03 2.72406E02 8.25490E02 2.87018E02 3.08140E03 6.36850E03 2.96614E03 1.06121E03 9.96174E02 2.55262E03 2.17384E03 7.13883E02 2.61819E03 1.59576E02 2.23475E02 8.42980E02 4.16621E03 2.89239E00 -Frame 257 5.36324E04 9.07877E04 5.23421E05 7.23006E05 4.66951E05 1.74240E06 2.03418E06 9.25433E05 1.66129E06 1.49780E06 3.12539E06 1.13965E07 4.34711E06 7.27001E06 1.87493E07 5.99766E06 1.67172E06 2.96131E06 1.48881E06 3.40408E06 4.32967E06 3.83546E06 1.31376E07 3.33060E06 7.46026E06 2.21494E07 6.90913E06 9.53134E04 2.44244E05 1.16600E05 1.01065E04 7.30857E04 3.74856E04 2.90962E04 3.37535E04 1.94373E04 1.47152E04 1.79462E03 1.14057E04 2.06490E04 4.34633E03 3.31659E03 3.25614E02 1.97422E03 9.85341E02 1.38209E04 1.40696E04 1.46174E03 2.66924E02 9.01927E02 8.29332E02 2.75855E03 2.55760E03 1.04943E03 4.22824E03 2.70107E03 8.79740E03 1.10208E04 1.55241E04 1.46464E04 1.77225E03 2.03947E01 2.05019E03 3.45016E03 3.13333E03 3.78363E03 4.59865E03 5.33105E02 1.54080E03 4.53585E03 1.08324E04 4.72662E03 3.18965E03 9.95577E03 5.83289E03 3.12976E03 1.24500E04 1.07822E04 2.36872E04 1.90420E04 2.83897E03 4.18667E04 4.63945E04 2.87976E04 2.76400E05 2.00009E05 5.05225E04 7.66581E04 2.48608E04 1.10555E04 1.22621E04 2.40672E03 1.40311E04 1.65813E04 1.05974E02 2.03561E03 7.74683E03 2.32481E03 1.23177E04 7.12438E03 1.00206E04 2.58630E04 4.27720E03 5.36856E04 8.83173E04 3.73454E04 3.22851E05 3.20800E05 2.86656E04 6.01361E04 2.41973E04 2.92856E03 1.64021E04 1.31313E04 5.27867E02 4.27393E03 4.39151E03 5.30020E02 8.38054E03 9.20208E03 5.04968E03 1.29533E03 5.92451E02 9.16827E02 3.11237E02 2.59439E03 6.64394E03 8.56203E03 8.44978E03 1.23781E04 1.59148E04 3.30959E04 3.69869E04 1.00677E04 1.57155E04 2.48204E03 4.22007E03 1.52362E04 5.65864E03 4.93689E03 1.04136E04 1.24207E04 5.02914E03 6.67050E03 7.76928E03 4.24186E03 1.18515E03 5.70006E03 2.51230E04 1.58869E04 6.49142E02 5.76935E02 7.36950E03 1.37693E04 6.87280E03 5.26367E03 2.01325E03 1.86368E03 1.62206E03 1.76707E03 1.11264E04 5.00952E03 3.83127E02 1.52211E03 5.97278E02 1.04380E03 3.66789E03 6.06875E03 1.01818E04 2.05252E04 2.36995E04 9.63694E03 3.37662E03 1.22513E03 2.26131E03 1.14371E03 5.95358E03 5.99004E03 3.82677E03 4.24881E03 6.37453E03 4.76436E03 6.74044E01 5.00257E03 1.00823E04 4.53770E03 2.10325E03 7.58941E03 7.66989E03 9.81595E03 2.76514E03 8.36258E01 7.84260E01 9.51676E01 1.12070E02 3.07275E02 4.05905E03 9.07273E03 1.09080E04 9.65631E03 1.81350E03 6.38129E03 1.34964E04 5.46859E03 4.05537E03 7.93558E03 5.55739E03 3.24619E03 5.97126E03 9.25069E03 9.19695E03 7.31333E03 3.75374E03 3.33401E03 6.11411E02 2.39570E03 6.88624E03 6.13828E03 3.99921E03 3.60994E03 1.71817E03 6.92352E02 7.09377E02 5.92928E03 6.87044E03 3.78015E03 2.02502E02 6.21472E02 1.23213E03 1.43741E04 1.65814E04 1.64273E03 3.75448E02 3.59500E02 2.15427E03 2.60849E03 8.27082E02 1.17228E03 1.34969E03 5.29499E02 1.44156E02 1.43232E03 3.39738E03 2.19499E03 3.21074E02 1.04298E03 1.47550E03 7.09676E02 1.28587E03 9.37709E02 1.94792E03 6.27556E02 2.66466E01 6.01236E02 2.86107E03 2.58592E03 3.86176E01 -Frame 257 1.09686E01 4.12587E04 6.07116E05 9.80196E05 7.51476E05 1.83798E06 1.78830E06 6.44494E05 1.74947E06 7.88098E05 3.97779E06 1.21752E07 2.12051E06 5.14203E06 1.02017E07 1.36823E06 1.37761E06 2.10997E06 8.34067E05 3.59081E06 1.30943E06 3.49330E06 1.17212E07 3.27516E06 2.24830E06 6.18095E06 1.50415E06 9.60218E03 1.06342E05 1.32501E04 4.21712E04 4.45837E04 1.08963E04 1.03845E03 2.97326E03 7.36345E03 2.98421E04 1.08445E04 1.11520E03 1.05424E03 8.94220E02 2.86916E03 1.72457E04 2.51022E04 2.18085E04 4.85913E03 3.12869E03 1.67441E03 1.48025E03 2.25317E03 4.82115E03 1.44903E03 5.09453E02 6.85311E03 7.90723E03 2.27887E03 6.06552E02 2.49384E03 5.06642E03 5.06256E03 2.77342E03 5.59707E03 5.80127E03 4.74293E02 6.34073E03 9.47076E03 8.08008E03 3.84305E03 1.55722E03 1.31204E03 1.46036E03 3.80230E02 4.72055E03 2.37631E03 2.85857E02 1.96774E03 4.51222E02 1.41251E04 2.03842E04 2.19532E03 1.53740E03 4.58048E01 2.78975E04 1.40713E05 1.33955E05 4.51962E02 6.99087E04 3.50529E04 2.73599E03 2.03359E04 1.64212E04 1.15579E04 9.35214E03 2.48458E02 4.48566E03 1.52934E04 3.43919E04 4.22376E04 2.10153E04 9.76905E03 2.63139E04 7.54098E03 2.54999E04 5.83532E04 1.20035E04 9.43205E04 1.60198E05 3.32593E04 5.79207E04 4.08133E04 1.71687E04 1.63230E04 7.59131E03 5.04745E02 5.91733E03 2.56050E03 2.64436E03 9.74632E03 6.70960E03 2.44730E03 1.90884E03 1.31701E03 1.74793E03 1.74596E03 4.71762E03 2.10406E03 1.06700E03 1.14910E04 1.51935E04 9.15224E03 1.22890E04 1.13086E04 1.25779E04 1.29263E04 9.43945E03 3.27267E03 8.62544E03 6.27635E03 3.94158E02 4.94387E02 3.94432E03 5.99628E03 2.40147E03 4.42720E03 5.81395E03 2.75683E03 4.44319E03 4.46944E03 1.03320E04 9.21063E03 3.33149E03 4.61474E03 1.82768E04 1.69026E04 3.90557E03 8.16921E02 1.02836E03 2.13570E03 1.86278E03 5.39705E03 5.12535E03 2.31743E03 1.16307E04 1.44319E04 9.70254E03 4.82802E03 1.00199E04 8.68772E03 3.63786E03 2.93674E03 9.81006E01 2.45796E02 3.36550E01 3.95513E02 2.20284E03 4.21342E03 2.90619E03 1.78269E03 1.11765E03 1.76670E03 4.86318E03 1.05397E03 7.13919E03 1.39458E04 1.38613E03 5.49351E03 8.84267E03 5.33480E03 5.42268E01 2.30071E03 5.11984E03 5.76169E03 3.87215E03 2.65835E03 2.62951E03 3.00207E03 8.46186E03 1.89452E04 6.54862E03 1.62574E03 1.35757E04 5.55721E03 3.25866E03 3.36120E03 2.95235E03 5.38973E02 1.59466E03 4.33426E03 9.72535E03 2.23079E03 2.56656E03 1.53856E03 1.15271E03 6.44067E02 5.90912E02 9.50558E01 6.54145E03 4.82319E03 1.92335E03 1.48725E03 1.12315E03 2.83549E03 9.60119E02 8.43985E02 5.38216E03 4.52517E03 9.22640E02 2.79247E03 4.07759E03 1.47156E03 3.20963E03 1.14924E04 6.47451E03 1.73576E03 1.24360E03 7.59614E02 5.13961E02 1.94595E03 9.68204E02 6.87746E02 3.20071E01 4.45846E02 1.62375E03 5.71013E02 6.25878E02 1.42149E03 1.37040E03 1.07932E03 1.07580E03 1.42599E03 1.33856E03 6.06435E02 3.24759E02 1.17061E03 2.76568E03 7.90176E02 3.61976E02 -Frame 257 2.21815E04 2.43705E04 2.72296E05 7.97484E05 3.55477E05 1.67212E06 1.46558E06 2.59744E05 1.68078E06 1.50317E05 4.89197E06 1.16603E07 2.02372E06 3.60299E06 3.79805E06 1.76823E04 2.11627E06 1.11623E06 5.82939E05 2.93693E06 1.24252E06 4.29560E06 6.68690E06 9.33486E05 1.16881E06 2.17030E06 3.98248E05 2.05179E04 9.13173E03 1.17865E04 2.74176E04 1.53604E04 7.61712E03 4.69465E03 6.65201E03 2.65028E04 2.08415E04 1.47818E03 5.42456E03 9.54395E02 7.62331E02 1.54306E03 5.55037E03 1.46656E04 1.71538E04 5.85514E03 6.07331E02 3.33899E03 4.17098E03 6.43266E03 8.73627E02 1.69655E03 1.02225E03 6.55455E02 5.14108E03 3.09347E03 3.70047E02 1.11204E03 8.09917E02 2.80108E03 5.43318E03 4.90016E02 9.14791E03 1.84234E04 4.16994E03 3.15573E03 2.63294E03 1.33455E03 4.68987E03 7.61726E02 1.25363E03 7.42303E03 4.12972E03 1.73705E03 3.60150E03 7.83888E01 3.05918E03 3.05815E03 2.33009E03 9.07122E02 1.10964E03 1.62516E03 6.54518E03 1.13306E04 3.02204E04 6.82407E04 1.92805E04 5.22845E03 8.34497E03 1.80076E03 2.46393E04 1.72334E04 4.44072E02 3.73288E03 9.60628E02 2.12918E04 4.04752E04 7.26968E03 1.02587E04 1.59110E04 2.17252E03 3.95767E04 3.65050E04 1.05137E04 6.19916E04 6.07821E04 1.03597E05 6.72459E04 6.46845E03 1.01281E04 1.39842E04 2.79829E01 7.03779E03 7.19371E02 3.16822E03 2.46662E03 4.65229E03 1.22643E04 6.59197E03 2.45798E03 1.84968E02 2.68492E03 1.11820E03 3.08686E02 1.03664E03 1.42970E03 5.49971E02 7.00397E02 2.64015E03 3.89006E03 2.21720E04 2.48246E04 1.90702E04 6.58479E03 1.02095E04 1.21721E04 5.60323E03 5.80851E03 4.37133E03 5.33706E02 6.39089E02 3.97822E02 1.34905E03 5.99336E03 3.61089E03 1.53468E03 2.31859E03 6.42832E02 1.67365E03 1.62470E03 2.43597E01 1.78431E03 1.21229E04 1.01135E04 4.43379E03 5.41404E03 6.27132E03 3.30753E03 1.63776E03 5.18871E03 1.08780E04 7.49869E03 1.15472E04 7.93752E03 8.29295E02 7.14819E02 9.85325E03 1.06843E04 4.50501E03 8.95943E03 1.35628E03 2.87286E02 6.60432E02 2.74230E01 5.17128E02 1.51337E03 2.90499E03 3.09334E03 6.25884E03 1.26259E04 1.18892E04 9.01441E03 1.30178E04 2.47986E04 1.52350E04 3.06053E03 1.42588E03 8.18208E03 5.90478E03 3.49461E02 5.21563E02 2.63034E03 2.70385E02 4.56249E02 3.72663E02 1.05039E04 2.07160E04 1.45927E04 3.67427E03 7.77893E03 2.34581E04 2.50495E04 1.16902E04 4.37479E03 1.82250E03 3.90664E03 5.61779E03 4.21643E03 4.13556E02 3.47604E03 4.85075E03 2.61171E03 5.88673E03 4.36379E03 4.03556E03 6.93414E03 7.67030E03 3.31521E03 2.04879E03 5.31384E03 4.62548E03 1.31059E03 1.38317E02 1.57327E03 3.70895E02 1.06871E03 2.68774E03 6.44660E02 3.67735E02 8.71286E02 6.75348E03 8.64289E03 1.02264E03 6.20201E02 3.48042E02 4.19698E02 2.24945E03 2.92089E03 4.27998E03 2.96419E03 3.50422E02 1.26967E02 4.22830E02 2.09632E03 1.19830E03 3.33193E02 6.20351E02 6.94060E02 4.82432E02 2.84008E02 3.63875E02 1.01427E03 1.45408E03 2.66251E03 1.75210E03 1.56404E02 9.86134E00 -Frame 257 8.35060E04 9.92607E04 3.55893E05 5.78868E05 4.65951E03 1.55352E06 1.12143E06 1.46110E05 1.29712E06 5.02037E05 5.57471E06 8.12968E06 1.99778E06 3.11393E06 2.25076E06 1.90450E05 1.22157E06 3.17080E05 6.26541E05 1.63852E06 1.22176E06 3.64667E06 3.48236E06 3.72411E05 9.12535E05 8.04612E05 1.96347E05 2.19457E04 5.42672E02 1.90639E04 2.25761E04 5.86553E03 9.33452E03 4.04252E03 6.73943E03 1.41774E04 2.37339E03 6.19534E03 1.12299E04 1.45932E03 1.16518E03 2.73533E03 1.33524E03 1.56600E03 2.13347E02 3.98920E03 3.49719E03 1.57961E02 5.82677E03 5.12803E03 2.62308E02 2.77224E03 7.72300E02 7.23020E02 3.34615E03 1.91327E03 6.87456E02 1.24494E03 1.14514E03 2.27396E03 1.20626E03 4.15872E03 4.93703E03 1.24686E03 1.64035E04 1.49330E04 4.08257E03 5.19154E03 5.93759E03 3.26938E03 1.76226E03 2.89698E03 1.01540E04 9.84610E03 7.05640E03 4.83694E03 3.30572E02 2.51984E03 4.68897E03 5.99618E03 1.32866E03 2.92505E02 5.25242E03 1.03269E04 2.34946E04 3.08536E04 8.48537E03 2.02582E03 2.66594E04 3.38724E04 4.73274E03 3.41476E03 7.85501E03 6.08925E03 1.03542E04 9.09703E03 1.31460E04 7.24531E03 1.61202E03 1.44586E04 6.31902E03 9.11985E03 4.95851E04 4.33648E04 4.35760E04 3.44256E04 1.09731E04 3.12386E04 3.79311E04 8.20418E03 4.23020E03 2.97011E02 1.36055E04 1.78592E04 1.07474E04 4.54422E03 3.36754E03 3.32367E03 3.81853E02 4.40827E03 9.76926E03 4.51695E03 2.76684E03 4.56935E03 3.74501E03 2.29001E03 4.36369E03 3.35649E03 6.36053E03 1.92679E04 8.36382E03 3.41489E03 1.18562E04 9.22675E03 7.43789E03 6.83321E02 2.94256E03 4.14329E03 4.98286E03 7.82004E03 6.01120E03 1.01134E04 9.99543E03 6.43914E03 4.68516E03 2.66834E03 1.53413E03 7.48234E03 1.22986E04 6.48813E03 1.02080E03 8.78312E03 1.24657E04 2.41835E03 2.53313E03 5.19411E02 1.30237E03 7.03015E02 4.40797E02 2.27180E03 8.32246E03 9.54610E03 1.08291E04 7.91936E03 4.54097E03 2.08591E03 7.16740E03 2.39327E04 1.30381E04 8.86362E03 7.03179E03 7.37517E03 5.83097E03 1.15084E03 1.35989E03 3.89169E03 9.54104E03 8.33417E03 8.89353E03 9.00014E03 2.78323E03 3.51127E03 5.88909E03 1.54920E04 9.26837E03 6.44196E02 1.00217E03 1.17701E04 1.99083E04 1.55694E04 7.79480E03 1.34902E03 4.42445E01 1.93286E03 5.50297E03 3.67543E03 3.05151E02 1.51291E03 2.33381E03 1.45670E03 2.52867E03 6.56501E03 4.30989E03 1.12005E04 1.59821E04 1.43165E04 1.82859E03 2.75430E03 4.99780E03 5.45144E03 4.70681E03 3.48434E03 4.23994E03 1.81338E03 6.32416E02 9.95400E01 7.41041E02 6.56488E01 8.00480E02 2.36088E03 2.69124E03 4.13794E02 1.85290E03 2.81757E03 1.63939E03 3.34725E03 2.51456E03 2.26406E03 1.54339E03 6.27813E02 3.07560E03 2.57990E03 4.50791E02 2.20901E02 2.57097E02 5.46309E02 6.33986E02 7.67279E02 1.44578E03 2.70686E03 1.90097E03 3.07833E02 2.73518E02 1.69475E03 3.09762E03 1.86293E03 2.15878E03 4.95971E03 6.20768E03 2.24501E03 3.16912E01 2.96239E02 7.13657E02 3.53170E01 1.18490E03 6.44218E02 3.08350E01 -Frame 257 9.12702E04 1.46914E05 5.26012E05 5.86895E05 1.28198E05 1.38242E06 1.04603E06 3.87176E05 1.03033E06 9.63394E05 4.36291E06 6.08967E06 2.07753E06 2.44208E06 2.06986E06 5.34795E05 8.03595E05 2.36723E05 4.43298E05 8.37231E05 8.68424E05 2.57402E06 2.41144E06 4.29314E05 3.48438E05 7.47645E04 1.93491E04 1.23656E04 3.61519E03 2.76791E04 3.71228E04 5.53698E03 2.67221E02 4.76058E02 2.91774E03 7.96018E03 7.77609E02 1.91731E03 6.85037E03 1.89487E03 3.57144E03 5.20140E03 7.82744E03 5.45564E03 2.11252E03 1.14985E03 4.05866E03 1.79341E03 9.18657E02 3.20172E03 4.22087E03 3.37936E03 9.20015E02 2.91434E03 6.97919E03 1.56193E03 3.06241E02 1.08243E03 9.85369E02 4.97538E03 2.30891E03 5.50108E01 3.23519E03 5.90708E03 1.45653E04 1.08441E04 4.97123E03 4.22604E03 8.88688E02 7.62387E02 1.13636E03 4.15222E02 2.28435E03 3.57104E02 1.94507E02 1.12107E03 7.01683E03 8.39615E03 2.88474E03 9.17469E03 2.32349E04 1.83368E04 3.19534E03 6.95655E03 5.46611E03 1.34577E04 3.87668E04 1.45913E04 4.89066E03 2.94757E04 1.76722E04 3.98306E03 8.53948E02 2.34631E03 6.37170E03 1.66158E04 1.78399E04 1.03846E04 1.04463E03 2.38269E04 3.14460E04 9.25771E03 3.74838E03 3.10052E04 8.35518E04 1.08058E05 3.61467E04 5.17391E03 1.47604E04 2.14158E04 1.57475E04 4.41370E03 6.13420E03 8.12868E03 1.41803E03 2.96557E03 2.84751E03 6.35607E02 3.16252E01 3.30132E03 1.42518E04 1.62247E04 1.25920E04 1.02056E04 9.41830E03 2.52195E03 4.81574E03 1.33839E04 5.23133E03 6.99615E03 3.45564E04 1.64462E04 1.04896E04 1.31347E04 1.39138E04 5.58352E03 3.04266E02 2.14203E03 3.76114E03 9.38751E03 1.16043E04 5.96327E03 6.74440E03 6.29448E03 6.32590E03 4.63882E02 1.03022E04 7.74945E03 1.51816E03 7.63582E03 6.73563E03 1.87243E04 2.02208E04 2.44625E03 5.45785E03 7.00145E03 1.85910E03 2.78803E01 4.70580E02 1.61005E03 4.44939E03 1.43567E03 4.61364E03 4.64424E03 2.89798E03 6.47077E03 1.34157E04 7.51970E03 2.32123E03 2.45599E03 1.65532E03 4.51186E03 1.51831E04 1.28428E04 4.59238E03 4.88338E02 2.01787E03 3.30607E02 1.59672E04 3.04921E04 1.33777E04 1.96252E03 4.03505E03 3.95388E01 5.94909E03 6.35343E03 5.57548E03 1.69197E03 1.87650E03 4.86444E03 2.04029E03 5.62575E02 5.58469E02 1.34313E03 6.29915E02 6.74737E02 1.07632E03 1.33404E03 1.24318E02 3.49169E02 5.94714E02 2.61037E02 5.99242E03 3.27155E03 8.06572E03 2.08159E04 1.44823E04 2.29925E03 8.99987E01 5.73987E02 2.96378E03 1.20354E03 1.51461E03 2.14542E03 9.05477E02 2.88053E01 5.07291E02 2.06465E02 3.01444E02 9.21354E02 1.49482E03 5.87477E03 7.19214E03 2.54987E03 8.75162E02 1.11418E03 7.03125E02 1.74108E03 5.35646E03 4.20606E03 8.76793E02 2.36060E02 1.87340E02 1.98759E02 6.65648E02 1.06160E03 1.42807E03 5.76427E02 3.62883E01 2.42230E02 1.60219E03 4.38512E02 1.19153E03 1.42657E03 3.08605E02 4.86631E01 2.77057E02 2.73574E03 4.15210E03 1.68860E03 9.76575E01 4.11715E02 2.55127E01 2.06286E02 1.42631E03 1.88103E03 2.90105E02 -Frame 257 9.95752E01 3.21880E04 4.43794E05 4.95252E05 3.08359E05 1.41875E06 1.07444E06 5.09909E05 8.94439E05 8.81989E05 3.59676E06 5.47986E06 2.14692E06 2.66859E06 2.61082E06 9.22341E05 1.00179E06 3.79962E05 2.55940E05 5.37189E05 3.74364E05 1.90525E06 2.03583E06 5.03939E05 4.02101E05 3.04662E05 1.69710E05 1.32415E05 4.48900E04 5.45540E04 4.42691E04 1.11244E03 3.83400E03 1.09503E04 1.13772E04 1.07026E04 2.11295E03 2.64681E03 3.47347E03 3.79621E03 5.44797E03 2.70657E03 1.30969E03 1.77789E02 1.13743E03 8.52900E02 2.72296E02 1.68657E03 2.43000E03 4.11057E02 3.58107E02 2.35461E03 1.72766E03 2.74075E03 8.45718E03 9.55935E03 8.76374E03 1.05724E04 9.85915E03 3.91474E03 4.27558E03 7.96581E03 6.46712E03 7.06094E03 8.44341E03 2.42644E03 2.59210E02 7.40415E02 1.95165E03 3.13334E03 2.43335E03 4.77184E02 1.30179E03 3.69416E03 2.47526E03 9.83923E01 2.42834E03 1.25116E03 5.70639E02 4.61216E03 1.34905E04 1.19022E04 5.03197E03 1.10887E03 4.39418E03 1.11174E04 2.29412E04 2.71352E04 1.39698E04 7.53561E02 1.84159E03 2.96793E02 4.57314E03 1.51977E03 1.55864E03 1.86283E04 2.16231E04 2.15214E03 2.22486E04 3.44221E04 1.29191E04 9.33319E02 1.11536E04 5.18648E04 9.75318E04 6.15474E04 1.23367E03 3.08945E03 6.16895E03 1.18965E04 1.64394E04 1.21389E04 8.95762E03 1.10425E03 4.81036E03 5.85654E03 1.15919E03 1.82554E03 1.75821E03 2.33471E03 8.12780E01 6.05140E03 5.02423E03 2.49103E02 2.64734E03 7.06316E03 4.00703E03 5.69975E03 1.89524E04 1.85842E04 2.58647E04 3.81872E04 6.78280E04 5.67536E04 1.49535E04 7.53822E02 1.73889E03 1.55928E03 1.83575E03 9.80908E02 2.56890E03 5.31951E02 8.04616E02 6.64157E03 6.38374E03 9.23179E03 1.35863E04 1.94275E03 2.01938E03 2.17571E03 2.60662E03 7.57106E03 1.11973E04 7.00217E03 2.55469E02 6.20871E03 8.85855E03 5.14690E03 2.39836E03 2.45121E03 2.53741E03 1.01467E03 1.30047E03 1.96044E03 1.78000E03 1.88732E03 6.67865E03 4.12261E03 4.02390E03 7.14559E03 2.90447E03 6.08922E03 2.39849E03 3.40287E02 1.01999E03 5.65979E02 6.35430E03 2.90504E03 4.66803E03 1.51427E04 8.83471E02 1.02558E04 9.89529E03 9.86042E02 6.59240E02 1.93708E03 7.61367E02 5.42519E03 6.60881E03 2.57263E03 9.56949E02 1.15268E03 4.00625E03 4.59183E03 1.27250E03 2.24913E03 3.66956E03 3.66111E02 8.19693E02 3.44262E03 4.99503E03 5.46344E03 5.15543E03 2.56030E03 4.13477E01 6.19966E03 6.88311E03 6.08623E02 4.32595E03 7.34749E03 5.52180E03 3.76001E02 2.90958E02 2.80733E02 5.99848E02 8.20654E02 3.22015E03 3.16975E03 1.18312E03 1.24070E03 3.93277E03 2.10144E03 3.54370E02 4.31647E02 1.73718E01 3.74103E02 5.25599E02 1.70901E03 4.26804E03 2.40234E03 1.43051E03 5.96579E02 1.32924E02 1.35025E02 8.71788E02 2.10566E03 1.31842E03 8.95586E02 1.38588E03 2.09157E03 1.28865E03 7.26768E02 1.10404E03 7.01617E01 2.44460E02 6.99063E01 3.54357E02 1.23894E03 1.21552E03 3.77085E03 1.86091E03 1.32772E03 3.79900E03 3.64879E03 3.62324E03 2.61472E03 1.21357E03 -Frame 257 4.24336E04 1.85428E04 2.07178E05 3.70159E05 4.59270E05 1.49231E06 1.09110E06 5.84288E05 7.68228E05 6.97885E05 3.25985E06 6.03687E06 2.85016E06 4.24417E06 4.12417E06 1.33726E06 1.12257E06 5.93827E05 5.20697E05 7.10899E05 4.06423E05 2.06225E06 2.59981E06 9.77292E05 7.06470E05 1.35206E05 5.51177E04 1.79007E04 3.55965E04 4.02160E04 5.28415E04 2.61971E04 2.34886E04 1.85413E04 2.60172E03 5.99462E03 5.65202E03 5.25267E03 1.07823E04 9.02520E03 1.07725E04 1.44334E04 4.85396E03 1.55981E03 1.26376E03 5.15839E02 6.40861E02 4.43465E03 1.21910E04 6.05688E03 3.46905E03 7.89427E03 4.86461E03 1.36460E02 2.81109E03 5.79804E03 6.68329E03 7.26163E03 4.59295E03 2.98836E02 1.22463E03 5.22682E03 6.52423E03 1.16643E03 7.03589E03 4.45908E03 2.87647E03 4.56406E03 3.57460E03 4.83755E03 5.80913E03 1.21436E03 4.05868E02 2.89162E03 4.61759E03 4.88469E02 1.33562E03 4.45460E03 4.46734E03 1.40465E03 3.75889E03 9.10121E03 1.01970E04 1.43003E04 4.90178E03 3.60898E02 1.16118E02 1.59567E03 2.64869E03 1.04569E03 5.66430E03 6.93235E03 1.73626E03 4.63915E02 3.35704E02 8.20975E03 1.59390E04 2.04428E03 8.02338E03 1.69106E04 1.25137E04 1.84919E04 2.39586E04 6.41469E03 1.53299E04 3.77563E04 1.33203E04 1.73113E03 1.17550E03 8.01018E02 5.59975E02 3.36768E02 2.37542E03 3.99632E03 1.38587E03 4.75618E03 9.64306E03 8.39369E03 5.89890E03 6.35161E03 1.48450E04 1.29231E04 5.41723E03 1.43729E03 2.09351E03 2.38220E03 3.57619E03 1.73878E04 9.68665E03 3.52376E03 9.86851E03 1.72109E04 1.75890E04 2.27149E03 1.66816E03 2.87046E03 1.15165E02 8.23897E02 2.85223E03 5.22149E03 4.55500E03 1.49266E03 1.69779E03 5.28819E02 1.56651E03 6.65223E03 1.27815E04 1.83584E04 1.55417E04 5.41791E03 3.00008E03 2.67500E03 1.93623E03 3.42604E03 2.82078E03 3.28499E02 2.18639E03 1.09767E03 3.94394E02 1.79514E03 5.43349E03 4.55577E03 2.19912E03 9.38076E02 8.08692E02 1.29766E03 3.37875E03 4.71621E02 3.82740E03 1.25447E04 1.06977E04 6.76637E03 1.75224E03 5.65623E03 1.47952E04 1.24697E04 3.10127E03 1.28671E04 7.09203E03 5.52936E03 1.79360E04 5.07893E03 5.76135E03 1.32209E03 1.52882E02 3.90126E02 5.83713E03 4.05537E03 2.59270E03 7.59299E03 4.47366E03 1.14008E03 5.62489E03 7.82697E03 1.04801E04 9.69992E03 2.13943E03 1.65030E03 9.48943E03 7.53030E03 5.18290E02 2.10196E02 1.07045E03 1.27067E02 1.42184E03 1.18769E03 1.30995E04 1.16811E04 6.48598E02 6.30684E02 2.93051E03 3.68839E03 2.17377E03 5.27065E02 5.24623E02 1.42916E03 4.02479E03 4.14267E03 5.69521E02 1.08530E03 7.26168E02 1.85452E02 1.05477E03 5.54902E02 1.30595E02 4.93545E02 2.78273E03 2.62136E03 1.25114E03 4.78218E02 6.06512E02 1.05381E02 4.24836E02 2.38057E02 2.16468E02 7.35676E02 1.92038E02 6.64478E02 8.19693E02 2.44572E02 8.37265E02 1.60170E02 2.78485E02 6.92427E02 2.79686E02 8.80962E02 1.31704E03 8.17444E02 1.90352E03 1.09279E03 4.39969E03 7.59704E03 5.86103E03 1.86106E02 1.39031E03 5.85278E02 1.56602E02 -Frame 257 7.26637E04 1.34659E05 3.77147E05 4.71488E05 5.93950E05 1.64097E06 1.38300E06 5.74446E05 9.51423E05 5.15933E05 2.93560E06 6.94111E06 2.45474E06 7.06833E06 1.07798E07 2.11285E06 1.94062E06 1.51369E06 1.68774E06 1.67832E06 3.66617E05 2.70036E06 4.87938E06 1.75122E06 4.27639E06 2.87650E06 5.89469E05 1.41081E05 6.62934E04 9.78556E04 8.36249E04 6.23004E04 6.19012E04 2.46884E04 4.34507E04 4.74781E04 3.31566E04 2.90270E04 1.55420E04 3.44727E03 6.28112E03 3.73961E03 8.26667E03 1.51858E04 1.12000E04 4.95897E03 1.03878E04 2.32305E04 2.07035E04 8.58776E03 3.85302E03 1.00247E04 5.23066E03 6.45671E02 1.05626E04 1.36399E04 8.27200E03 2.07785E03 2.76203E03 2.94472E03 1.16209E02 1.67112E03 5.36899E03 1.39427E03 2.26892E03 2.31219E03 3.67714E03 4.45379E03 2.98849E02 1.74958E03 1.72995E03 3.68587E03 1.71480E03 5.72888E01 2.85953E03 3.33122E03 6.28413E02 4.64529E03 5.84511E03 7.15881E03 1.22612E04 8.72739E03 6.81750E03 3.43666E04 3.57976E04 1.06789E04 3.13637E03 1.28213E03 9.57578E02 3.33405E03 1.83341E04 9.37595E03 1.69075E03 1.12585E03 7.50562E02 4.99934E03 5.00310E03 2.52655E03 1.67945E03 1.23443E04 2.37298E03 1.55854E04 2.75216E04 2.03897E04 1.90638E04 6.25013E03 1.05008E04 9.01993E03 1.38263E04 4.98002E03 1.18456E03 8.91514E02 1.17116E03 1.81644E03 4.14401E03 4.99887E03 7.51648E03 2.30539E03 4.58908E03 4.42214E03 5.26300E03 3.88034E03 1.56179E02 1.00169E03 1.83485E03 2.49714E03 5.47466E03 1.11835E04 1.36092E03 1.73680E03 1.19654E04 6.05769E04 7.40305E04 3.00933E04 1.57148E04 1.29416E04 4.89670E03 1.45536E03 3.15028E03 7.57269E02 2.51506E03 1.78931E03 6.98112E02 3.35822E03 6.53710E03 7.12547E03 2.58589E03 7.74250E03 1.62437E04 5.25376E03 2.07217E03 9.82067E03 1.18347E04 3.01326E03 1.31589E03 2.23565E03 5.65766E03 3.62780E03 5.62150E02 2.34467E03 1.40606E04 1.69293E04 6.68903E03 1.77539E03 6.41119E02 1.98273E03 7.92864E03 9.25915E03 1.91862E04 2.00940E04 8.36084E03 6.06870E03 1.84725E03 1.86951E04 2.07018E04 1.54230E04 1.12415E04 5.21258E03 6.39614E03 4.15911E04 6.38840E04 3.30561E04 1.12539E04 2.15979E03 3.62161E01 2.99778E03 1.05241E04 7.72868E03 2.19690E03 1.00272E02 2.13403E03 7.45458E03 5.55634E03 5.06213E03 4.63699E03 6.25102E03 1.13413E04 1.00424E04 4.58890E03 5.37588E03 7.09883E03 5.48949E03 2.23559E03 9.72369E02 3.44762E03 6.73276E03 7.45971E03 6.01377E03 2.54107E03 6.68114E02 4.40493E02 7.39844E01 5.98326E02 6.88603E02 6.20526E01 1.35060E02 6.69191E01 8.05665E02 2.09003E02 6.61306E02 1.47089E03 2.33186E03 9.21040E02 1.16561E03 4.11293E03 6.06215E03 3.08376E03 7.25312E02 3.73754E02 2.00762E02 1.30642E03 3.42159E03 1.18402E03 1.03495E03 2.77044E03 4.45237E03 4.14768E03 1.68823E03 1.84486E03 2.67232E03 2.60119E03 2.08485E03 6.42928E02 2.13393E01 5.05084E01 1.24448E03 4.29008E03 6.53378E03 6.59349E03 4.53614E03 8.49273E02 1.88556E03 7.24561E03 4.94227E03 4.77087E02 4.57357E02 6.45227E02 -Frame 257 1.98102E04 5.41122E04 5.79862E05 6.05362E05 3.80133E05 1.70742E06 9.86059E05 1.99123E05 9.25189E05 9.94293E04 2.64238E06 4.92508E06 1.13071E05 1.42174E07 2.18633E07 1.72192E06 3.09227E06 2.68865E06 4.91509E06 5.40406E06 1.74413E06 6.92705E06 4.85760E06 2.10841E06 1.91741E07 9.99886E06 1.77299E06 1.92024E06 2.44838E05 1.95908E05 1.05847E05 1.43026E05 2.21778E05 5.13946E04 1.36925E04 4.28606E04 1.62883E03 2.71497E04 2.01148E04 2.92929E04 3.68371E04 6.40033E03 1.02813E04 2.03167E04 7.63960E03 3.57749E04 2.66615E04 3.05092E03 1.09096E04 2.50030E03 4.08087E03 1.02777E03 7.30289E03 2.46774E04 1.95328E04 7.15007E03 9.88036E03 2.13682E03 4.98876E03 1.42875E03 7.09027E01 2.19242E02 2.89323E03 7.71279E03 6.81112E03 5.73139E03 9.23329E03 5.33526E03 9.88118E02 8.65426E02 6.30695E03 6.74484E03 2.16609E03 2.05780E03 4.44388E03 2.61471E03 4.70223E03 5.97889E03 1.23334E04 3.07148E04 2.30753E04 3.90524E03 5.91794E03 7.86793E03 9.32656E04 9.21582E04 4.26099E04 1.92549E04 5.47847E03 1.93438E04 3.04631E04 2.47394E04 9.97573E03 7.14469E03 1.19430E04 2.20071E03 1.47619E03 5.12463E03 9.16861E03 2.49472E04 2.21911E04 4.11832E04 7.83770E04 1.96545E05 1.81433E05 4.60701E04 3.98578E03 2.46276E04 5.81673E04 5.11400E04 2.54873E04 6.67377E03 2.28384E02 2.13220E03 4.34050E03 1.02951E03 1.62909E03 3.78906E03 4.47890E03 4.02536E03 3.30032E02 4.66740E01 5.00830E03 3.85728E03 5.23376E03 9.10931E03 1.92489E04 2.19621E04 1.22534E04 1.10162E04 1.00587E04 2.59340E04 7.39409E04 2.77569E04 3.60967E03 1.26689E04 1.31027E03 3.26541E03 4.64413E03 1.50148E03 1.97312E03 1.16564E03 5.07935E03 9.72624E03 4.37832E03 4.21668E03 3.24082E03 1.25415E03 1.50290E04 2.18634E04 1.10529E04 6.05479E03 1.18983E04 8.39534E03 3.15514E03 3.20403E03 4.73055E03 8.44254E03 5.92230E03 1.52645E04 2.30805E04 1.08394E04 3.02756E04 2.38726E04 1.00006E04 4.61203E03 8.97222E02 1.33295E02 6.82823E03 1.12832E04 3.12872E03 9.20196E03 3.52744E03 1.15425E04 3.75030E03 2.95005E02 2.18987E03 3.13755E03 3.63653E03 2.02619E04 5.65045E04 2.81750E04 1.78632E03 7.27293E03 1.10427E04 6.27706E03 1.45491E03 1.34470E02 1.55206E03 2.03369E03 3.03289E03 9.36799E02 8.23968E03 1.46831E04 3.06668E03 6.70821E02 5.78270E03 2.09052E03 8.94735E03 1.29918E04 8.66371E03 5.92775E03 6.12883E02 6.93824E02 3.07094E03 1.74706E03 5.87826E03 4.39734E03 3.27176E03 7.58256E02 3.51336E02 8.61522E02 2.15026E02 1.20917E03 2.81837E03 1.43947E03 9.05170E00 1.73476E03 3.41679E03 1.62910E03 6.80073E02 4.01514E02 9.14900E02 3.75578E03 3.59714E03 3.52911E02 1.50865E03 9.89669E02 1.80016E03 3.27910E03 6.60239E03 4.14764E03 3.30720E02 8.39876E02 2.53826E03 9.65913E02 1.96868E02 2.72235E02 1.25893E03 1.25179E03 1.63476E02 1.43765E03 2.29250E03 1.62740E03 1.93002E03 1.08179E03 5.38439E02 1.42945E03 6.74527E03 1.62630E03 4.96774E02 9.71238E02 5.55833E02 8.27869E02 2.65581E03 1.24689E03 3.52238E02 -Frame 257 8.16970E03 9.45635E04 6.86257E05 6.50271E05 1.34622E05 1.56534E06 8.45859E05 1.02788E05 8.31974E05 9.62036E04 1.97626E06 1.92260E06 1.44137E06 1.48453E07 1.08364E07 1.13159E07 2.31568E07 5.59630E06 5.61686E06 1.08634E07 8.40400E05 1.15307E07 5.82776E06 1.26262E07 3.48202E07 6.55097E06 1.92369E07 2.33482E07 3.73546E06 5.65589E05 1.09658E04 4.55933E05 3.39319E05 1.22985E05 3.22186E05 7.03294E04 5.25780E03 2.09758E04 2.81683E03 8.94629E04 5.32092E04 3.88614E02 2.74568E04 1.65759E04 2.39031E04 4.12519E04 2.86934E03 4.17214E04 3.18695E04 1.97391E03 2.95178E03 5.77419E02 2.59808E04 1.90339E04 1.99732E03 3.41230E04 1.82727E04 6.61578E03 1.10402E04 5.23971E03 1.11985E04 1.09416E04 5.43641E03 1.90956E03 4.04038E03 2.64651E03 1.56744E04 5.71363E03 2.57362E03 4.13854E03 4.84704E03 1.22381E04 4.57004E03 1.17139E04 1.42914E04 9.98758E03 4.57453E03 1.16396E04 7.43119E04 9.80857E04 3.57209E04 5.92442E04 9.05356E04 1.37697E05 8.28692E04 6.08553E03 5.53858E04 3.92067E04 1.07591E04 4.52886E03 5.12577E02 8.77042E03 9.47626E03 4.24189E03 7.94611E03 9.15943E03 2.72402E04 6.47137E04 9.37519E04 1.14089E05 8.61738E04 8.94476E04 8.65772E04 1.38547E04 5.13101E05 1.21725E06 8.70487E05 3.11547E05 2.67805E04 4.40227E04 1.15007E05 4.19622E04 1.63535E04 1.30853E04 2.61518E03 1.21792E03 3.26168E03 7.03789E03 1.50059E04 2.46178E04 1.37199E04 9.54983E03 6.67373E03 1.50096E04 2.32457E04 5.83272E03 1.56544E03 1.70020E04 3.16987E04 4.16320E04 1.48385E05 1.92579E05 3.24991E05 3.24842E05 1.67614E05 1.92194E05 2.10599E05 1.72975E05 1.09998E05 6.06311E04 4.41434E04 3.00146E04 1.42159E04 1.08421E03 1.98161E04 3.56163E04 2.72595E04 3.91000E04 9.93760E04 9.09759E04 2.71095E04 1.23404E04 2.68389E04 5.05020E04 2.46372E04 1.29606E03 1.27366E02 2.55540E03 4.70773E03 4.18466E03 6.85639E03 2.36599E04 3.97619E04 1.12974E04 1.00487E03 2.89941E03 4.86641E02 9.10425E02 1.49174E03 1.53508E03 3.72907E03 4.88931E03 5.41110E03 1.50054E04 3.60849E04 4.56904E04 6.06083E04 7.43790E04 8.59717E04 1.20233E05 1.48647E05 8.21029E04 1.03014E05 8.33133E04 2.53308E04 2.01872E04 1.61374E04 2.12280E04 4.22688E04 3.40720E04 1.78961E04 3.62413E04 4.52810E04 1.53494E04 2.56517E02 5.89142E03 2.78952E04 4.34965E04 2.60355E04 3.12858E03 6.53031E02 1.98263E03 4.16164E03 3.66941E03 8.33950E03 1.02997E04 1.37589E04 7.07649E03 1.82725E03 6.74400E02 3.87276E03 3.01294E03 4.45450E02 2.17220E02 2.09850E03 7.72729E03 8.65119E03 3.21845E03 4.99610E03 5.03004E03 3.47580E02 8.67752E02 5.62514E02 1.48718E02 4.81135E02 2.19960E03 2.51822E03 2.69716E03 3.80797E03 3.24605E02 4.35899E03 5.47010E03 1.08019E03 4.73020E02 1.10984E03 6.93372E02 3.98057E02 8.37900E02 2.08310E03 3.14283E02 8.80094E02 9.37242E02 1.55802E03 5.50565E03 3.83395E03 7.47896E02 4.46250E02 1.31121E03 3.04202E03 5.23561E03 4.52416E03 3.36051E03 2.82771E03 3.42877E03 1.45650E03 1.99020E02 1.26950E02 -Frame 257 7.04769E02 2.18386E04 3.85824E05 3.52311E05 1.47863E05 1.62768E06 7.59883E05 3.34248E05 5.73402E05 4.45486E05 1.66954E06 1.43336E06 2.19735E06 6.43843E06 3.73850E06 1.24514E07 3.03634E07 3.36033E07 3.69751E07 1.61945E07 6.86884E06 1.50749E07 6.74490E06 1.87349E07 2.29804E07 4.02183E07 1.02164E08 8.81801E07 2.86384E07 7.30614E06 3.67315E05 1.15019E06 7.26774E05 1.70759E05 5.02415E05 1.15887E05 2.97473E04 4.74222E04 1.69446E04 9.41605E04 7.50796E03 6.04647E04 1.97097E04 2.42878E04 4.20471E04 2.86518E04 2.45180E04 5.33226E04 2.06136E03 2.87882E04 6.81328E03 2.63565E04 3.02084E04 1.36058E04 2.33358E04 2.22767E04 3.90802E02 6.23900E03 8.18530E03 4.39925E04 1.70422E04 1.07653E04 3.61671E04 3.62984E04 3.11665E04 1.98676E04 2.37895E03 1.09414E04 1.59899E02 6.77926E03 4.53303E03 7.55763E03 1.85155E04 1.67743E04 3.48532E02 1.96359E04 1.84490E04 6.29160E04 8.06809E04 4.72260E04 1.29468E05 3.61822E04 1.44849E03 3.38147E04 5.28907E03 2.61495E04 3.80739E04 6.11581E03 1.27239E03 7.22862E03 4.17699E03 1.05718E03 8.56071E02 1.43519E04 8.69311E03 1.05505E04 5.38196E04 3.25141E04 9.41441E04 1.10707E05 3.28408E04 3.25854E03 3.60394E03 1.97925E05 1.04427E06 1.64706E06 1.79764E06 1.02101E06 3.61835E05 2.62404E05 1.44226E05 4.74763E04 4.37479E04 1.21068E04 1.10170E04 1.10645E03 4.62387E03 3.61480E03 4.24280E03 1.06243E04 1.72737E03 2.75495E04 2.09461E04 2.02974E04 9.08811E03 4.12852E02 3.77986E03 8.31423E03 3.56168E04 3.00936E04 8.07556E04 1.29670E05 1.26345E05 1.86938E05 1.45183E05 7.62561E04 5.55477E04 2.58912E04 3.96007E04 3.30480E04 3.30961E03 1.60093E04 3.46179E03 1.42913E03 6.17520E03 9.82257E03 4.07823E03 9.18979E03 4.19636E04 1.68360E04 1.06604E04 1.03700E04 3.08734E04 3.44061E04 1.05847E04 1.27767E03 4.73373E02 1.12497E02 2.06001E03 1.77950E03 1.52616E03 7.97421E03 9.71507E03 1.53292E03 4.60386E03 5.35318E03 1.97718E03 2.59484E03 8.82371E02 1.11423E01 3.54139E02 2.19011E03 1.40487E03 1.18709E03 3.30789E03 1.17800E04 1.17902E04 1.06874E05 9.16046E04 4.01001E04 1.77810E05 1.03000E04 1.48813E05 2.11677E05 2.21958E04 3.70242E04 3.16978E04 3.45598E04 2.65339E04 8.95377E03 4.66069E04 1.66887E04 4.64314E03 7.42859E03 3.50256E02 7.84322E02 8.25169E03 4.84050E03 2.99753E03 1.26962E03 3.95885E03 7.79530E03 6.68225E03 3.73927E03 3.67488E03 2.65659E03 4.17481E03 2.09894E03 1.45532E03 4.96905E03 6.24005E03 1.94789E03 1.42081E03 1.27302E03 7.58031E02 1.27014E03 1.08224E04 1.05346E04 9.15717E03 6.19705E03 1.48867E03 6.17862E02 2.17773E01 6.48714E02 2.04640E03 1.66319E03 1.27680E03 1.39197E03 2.38304E03 4.06472E03 2.62613E03 4.57983E02 3.50117E03 2.78683E03 4.09987E02 9.73968E02 1.19332E03 1.71870E03 1.49691E03 1.87173E03 1.33258E03 2.57186E03 4.56964E02 4.94591E02 1.53806E03 5.33248E02 4.78976E02 1.28663E03 4.61454E02 2.28344E02 2.80505E02 3.44539E02 1.91364E03 1.66227E03 1.26720E03 8.38074E02 1.41981E01 -Frame 257 2.20702E04 9.66616E04 1.55423E05 2.55853E05 4.79297E05 1.55072E06 7.75610E05 4.19881E05 4.62119E05 4.14704E05 1.77351E06 1.26781E06 1.94440E06 3.43227E06 2.76788E06 9.05420E06 1.23159E07 8.94431E06 2.88626E07 2.69762E07 1.81078E07 1.45783E07 1.10983E07 1.99149E07 1.52744E07 3.14106E07 1.10720E08 8.20764E07 2.32454E07 2.78662E07 1.01329E07 4.73339E06 2.00312E06 6.27434E05 8.36378E05 1.60838E05 2.60588E05 7.71192E04 5.43250E04 1.73614E05 3.20431E04 9.42238E04 1.87795E04 5.79350E04 7.76445E04 5.87388E04 8.21719E04 4.21714E04 7.73466E04 3.42170E04 3.08423E04 2.73121E04 4.09093E04 3.81717E04 5.39028E03 4.27482E04 1.50474E04 1.19279E04 9.30284E03 8.20539E03 6.54975E04 4.33345E04 6.49785E04 2.63663E04 2.37707E04 7.33187E04 1.27955E04 9.89010E03 1.31248E04 1.58755E04 1.58494E04 2.27574E03 1.21050E04 1.67927E04 2.38478E04 7.38318E02 1.66529E03 8.16483E04 1.10327E05 7.59646E04 5.25651E04 1.03214E04 1.76253E03 1.58306E04 1.42065E04 2.84580E04 4.86459E03 3.95433E03 1.84057E03 5.80972E03 7.41972E03 7.10642E04 9.05106E04 6.21566E04 2.59998E04 2.89148E04 1.00778E05 7.33637E04 4.38715E04 3.49065E04 1.26141E04 4.04493E04 5.34490E04 1.03327E05 2.39636E05 1.06670E05 3.77971E05 1.76807E05 2.17817E05 6.07567E05 4.25795E05 1.56929E05 4.96279E04 2.14092E04 3.65503E04 4.72426E04 2.34612E04 9.58813E03 2.37445E03 1.29246E04 3.45669E03 8.26777E03 1.74697E04 7.26726E03 3.51234E03 3.47732E03 1.08475E04 8.81622E03 1.25866E04 6.24086E03 1.01294E04 8.90836E02 1.43706E03 1.03159E04 7.33887E03 2.14269E03 1.94168E03 1.15659E03 9.15060E02 1.32732E04 7.61126E03 4.45261E03 4.07650E03 1.70900E03 1.15714E03 2.27672E03 3.78681E03 3.71101E03 3.07958E04 3.08526E04 9.42487E03 9.20669E03 2.50188E03 4.70080E03 7.63806E02 2.17996E03 3.39547E02 2.25658E03 6.41232E02 1.49685E03 4.35652E02 4.83528E02 1.87553E03 5.05154E03 3.51782E03 1.83531E03 1.19488E03 8.55786E02 2.43267E03 3.91026E03 2.35989E03 2.71565E03 3.56482E03 3.21539E03 1.21059E04 5.68978E03 2.39011E04 9.13081E03 7.09984E03 9.88927E04 1.83928E05 1.81251E05 6.78556E04 4.84416E04 8.32779E04 1.42603E05 1.03499E05 3.65505E04 1.86186E04 2.09493E03 1.06363E04 6.36019E03 9.32971E03 1.05571E04 2.30481E03 5.68301E02 2.34579E03 3.47743E03 7.12305E03 7.29636E03 6.89204E03 1.20700E03 1.70177E02 2.49507E03 2.18552E03 1.25371E03 1.58535E03 3.71723E02 1.00943E03 6.81936E03 2.60946E03 2.57933E01 1.08076E02 4.89620E02 8.03477E02 8.60627E03 5.78908E03 8.93623E02 9.83948E03 5.85230E03 2.30358E03 4.05738E03 3.23953E03 2.23342E02 2.14766E03 3.19709E02 1.51840E03 2.24243E03 7.29710E02 7.94709E02 9.99047E02 2.99802E03 5.14505E03 1.29603E04 8.70940E03 1.33364E03 2.99754E03 4.33057E03 1.07221E03 4.77669E02 9.32880E02 3.64107E02 9.02110E02 2.62996E02 1.71232E03 1.13725E03 5.83767E02 1.30741E03 1.23016E03 1.22963E03 1.03194E03 1.50630E03 1.98759E03 4.31097E03 5.07482E03 1.15423E03 1.52043E02 -Frame 257 1.69853E05 1.52321E05 2.87581E05 3.55987E05 5.31091E05 1.32346E06 7.57547E05 2.68888E05 2.75398E05 3.62656E05 1.14449E06 9.81015E05 1.13064E06 1.57986E06 1.18678E06 3.51564E06 2.58790E06 8.05699E06 3.11609E07 1.53683E07 9.32086E06 1.04155E07 9.30618E06 2.60101E07 1.91871E07 3.08429E07 4.34730E07 1.38215E05 6.63470E07 7.07810E07 1.68041E07 9.06126E06 2.19804E06 5.27224E05 3.49464E05 2.10915E05 3.60112E05 1.69388E05 1.15481E05 8.85130E04 2.95074E04 4.04014E04 2.72725E04 5.57045E04 5.05047E04 2.87331E04 4.41866E04 2.70198E04 3.43546E04 4.56634E04 3.86118E04 5.39636E04 3.50205E04 4.97135E03 1.11745E04 1.84009E04 5.90969E04 6.18892E04 4.43381E04 4.29413E04 2.52711E04 4.20824E04 2.50100E04 1.55121E04 5.52257E04 1.38140E04 6.48917E03 9.89998E03 6.99934E03 4.99956E03 1.32545E03 6.67662E02 1.19408E03 1.05041E03 1.64244E04 1.77397E04 2.98044E04 4.72374E04 6.61411E03 1.46860E04 1.50524E04 2.48673E03 2.52145E03 1.63641E03 1.56449E03 6.14539E02 1.13824E03 8.31881E02 8.96751E02 1.47906E03 4.39016E02 1.42310E04 9.91109E04 8.73621E04 2.48125E04 2.82139E04 9.91379E03 8.63416E03 9.63121E03 5.64438E03 1.84481E04 7.86875E03 1.28757E03 1.04298E04 5.04472E04 1.25476E05 7.89191E04 4.57801E04 5.50700E04 9.34364E03 1.12392E05 1.80342E05 4.13349E04 1.48480E04 3.46415E03 2.18016E03 9.96734E03 5.33306E03 1.99338E03 2.55021E03 3.33209E02 1.36834E03 1.19076E04 8.87097E03 1.64304E03 2.78387E03 4.36556E03 3.17173E03 1.12054E03 3.46649E02 2.75498E03 1.03413E03 1.51741E04 1.86258E04 3.26427E03 2.98032E03 6.28640E03 5.74725E03 1.03305E04 3.09648E04 2.67671E04 6.73112E03 4.27521E03 5.14632E03 4.00242E02 5.19682E03 1.53186E04 2.32279E04 2.57189E04 1.20804E04 5.83337E03 1.07038E04 5.89776E03 3.14168E03 1.94012E03 9.03306E02 8.68674E01 9.59944E02 3.14088E03 5.12568E03 1.88793E03 2.14447E03 8.17604E03 1.21027E04 6.94260E03 1.88542E03 1.43809E03 1.33096E03 1.88425E02 1.24184E03 7.90038E02 8.93083E03 1.56540E04 9.33946E03 5.39111E03 1.05642E04 1.79075E04 1.18128E04 1.71720E03 6.37368E04 1.24898E05 9.98588E04 2.64765E05 2.82879E05 2.30261E05 2.95088E05 2.09213E05 7.19101E04 4.43835E04 2.73713E04 1.08178E04 1.09302E04 1.05631E04 5.88359E03 6.37828E03 5.70114E03 3.14591E03 1.16488E03 8.65967E02 9.12858E03 1.08109E04 4.33329E03 3.02668E03 1.40009E01 1.65475E03 2.10424E03 1.68816E03 1.94338E03 3.95766E03 5.38916E03 5.23539E03 2.32862E03 5.55530E02 5.41610E02 1.09778E03 5.36762E03 5.84868E03 2.35578E03 2.52622E03 2.78923E03 4.95678E02 9.27663E02 1.64099E03 2.58322E03 1.64998E03 2.49521E03 2.49345E03 1.39979E03 3.64051E03 2.71972E03 3.67666E03 5.20749E03 8.82808E03 2.41312E03 1.66686E02 1.23806E03 4.18344E03 1.46576E03 9.03288E02 2.88919E03 3.08416E03 2.06871E03 1.69977E03 2.65633E03 3.15507E03 9.19151E02 7.81918E02 1.26450E03 2.03462E03 2.20466E03 1.59133E03 3.20212E03 3.12328E03 1.01264E03 1.63835E03 8.68176E03 8.33220E03 -Frame 257 6.26945E04 4.16022E04 4.11082E05 4.29576E05 5.77930E05 1.29705E06 6.75853E05 1.32755E05 2.44796E05 1.34034E05 1.14086E06 5.87891E05 5.96582E05 1.38268E06 3.81821E05 2.13899E06 1.67797E06 5.10321E06 2.83226E07 9.40699E06 4.11074E06 1.08232E07 1.86061E06 2.26050E07 1.24367E07 1.16761E07 3.20929E07 5.35641E06 3.93485E07 7.14237E07 6.88914E06 1.03697E07 5.90039E06 1.40206E06 6.91096E05 8.01447E04 4.17347E05 1.82537E05 1.13451E05 1.53092E05 2.55961E04 2.58922E04 3.83787E04 3.04326E04 9.82612E04 3.26746E04 3.73340E04 3.81854E04 6.11292E03 1.63578E04 3.53377E03 3.75891E04 4.73012E04 7.63753E03 1.42166E04 1.16628E04 6.85525E03 3.17667E04 5.09790E03 4.10685E04 2.60221E04 3.83306E03 2.40703E03 5.00011E03 3.77691E04 3.84907E04 2.00499E04 5.94973E03 3.69525E02 4.07738E01 2.02212E02 9.97193E01 9.15272E02 2.63291E03 1.26776E04 1.03270E04 1.14242E03 2.24075E04 8.32007E03 1.13950E04 1.64640E04 4.37861E03 8.73430E03 1.02188E04 5.75951E03 3.79317E03 3.91471E03 1.99255E03 7.55786E02 1.24759E03 4.86540E03 1.85833E03 7.61852E04 1.08368E05 3.08829E04 3.05836E04 1.22048E04 3.44079E03 1.61193E04 2.19704E04 4.62861E04 3.45079E04 6.52196E03 2.89100E04 4.84673E04 7.37066E04 1.13313E05 4.06722E04 1.01217E04 2.69883E04 8.13500E04 1.19556E05 2.77860E03 7.07561E03 6.15924E03 3.39207E03 9.04707E03 9.28490E03 4.81220E03 2.46209E03 4.47295E03 8.14284E03 5.83438E03 3.22631E03 2.24809E03 2.15462E03 9.62810E03 9.54703E03 1.26087E03 2.64456E03 1.04143E04 1.87124E04 2.64787E04 1.14515E04 3.54296E03 1.21554E03 2.10592E03 1.74630E02 7.31482E03 7.20939E03 1.11269E04 1.04788E04 5.46374E03 7.92047E03 7.22644E03 1.25965E03 1.14286E03 1.26845E03 2.09585E03 5.26341E03 2.05930E03 4.52231E03 3.30497E03 2.18333E03 7.46794E03 1.84474E04 1.13444E04 8.08251E03 1.02729E04 1.29213E04 4.87885E03 1.49285E04 9.65963E03 4.15066E03 1.12971E03 5.29656E01 1.89574E03 4.83572E03 1.71351E03 6.27192E02 1.97370E03 1.62188E03 1.23574E03 8.21317E02 2.24416E03 9.58847E03 1.53814E04 2.84428E03 3.21623E04 1.49351E04 2.51366E05 4.71050E05 1.74668E04 2.40244E05 7.95232E04 1.06136E05 2.76655E05 5.90585E04 3.05852E04 1.76536E04 1.07966E04 8.47872E03 1.21443E04 9.39275E03 1.07942E04 7.20326E03 4.32425E03 1.32547E04 1.11831E04 2.92001E03 3.39814E03 1.15275E04 9.05032E03 3.43817E03 1.79442E02 1.10789E03 6.89830E02 1.30081E03 1.40066E03 1.68797E03 1.26339E03 5.47695E02 1.33453E03 2.16368E03 3.76555E03 1.56660E02 4.77070E02 2.09553E03 2.99115E03 3.91231E03 3.47550E03 1.91235E03 1.82571E03 1.95854E03 1.56992E03 1.99375E03 1.02603E03 1.67826E03 1.18264E03 9.41759E02 1.14760E03 3.62483E02 6.81847E03 2.28191E03 9.60089E02 4.21153E02 2.97356E03 4.27631E03 5.98764E02 2.90439E02 7.68525E02 3.73105E02 1.15682E02 3.16658E03 6.50362E02 7.58008E02 3.06184E02 9.59480E02 1.85105E03 3.01351E02 1.05367E03 3.72291E03 1.35181E03 6.76665E02 4.43739E03 5.65498E03 1.04773E03 -Frame 257 6.17983E04 1.64529E05 5.33873E05 4.56952E05 2.72323E05 1.42232E06 4.90878E05 1.07640E05 2.03434E05 7.33337E04 9.13208E05 2.69428E05 6.04555E05 1.10732E06 1.33321E04 1.93647E06 6.93343E05 7.76110E06 2.27187E07 4.12750E06 1.00366E07 7.85676E06 2.59392E06 1.79730E07 1.82592E06 1.53005E07 1.38406E07 4.34581E06 2.79537E07 1.52463E07 3.52665E07 5.48098E07 1.41197E07 4.38418E05 8.19161E05 1.69194E05 3.97068E05 5.15258E03 3.26736E05 1.16714E05 1.86580E04 3.91280E04 8.12442E02 1.22768E05 3.50783E04 4.21921E04 1.04345E05 3.41439E04 1.53498E04 2.18325E04 4.51084E03 2.92586E04 5.95708E03 1.32172E04 4.97570E03 1.83764E04 4.98238E04 9.69443E03 9.29982E03 2.77241E04 3.61868E03 1.21655E03 3.04160E03 1.33098E04 2.91480E04 6.89483E03 3.71162E03 1.14660E04 1.46772E04 8.46931E03 3.71924E03 1.10745E03 1.59016E03 5.75009E03 1.27349E04 5.21298E03 3.00014E04 2.60921E04 9.81181E03 1.64898E04 3.21846E03 8.23305E03 1.60779E04 1.74849E03 2.67875E03 5.20837E03 9.99836E03 1.09060E04 1.95103E03 9.16202E02 2.51779E03 9.49787E04 2.73784E05 7.86309E04 2.48155E04 3.93174E04 1.38294E04 2.99768E04 9.16747E03 5.95060E04 4.03941E04 7.27094E03 2.07165E04 2.76551E03 1.08711E05 1.08522E05 1.63390E04 1.07634E05 1.01669E05 3.27861E05 8.88301E05 5.51655E05 5.79332E04 2.71022E03 4.14116E03 1.47666E03 2.18588E03 4.92412E03 4.63005E03 5.69508E03 9.42166E03 3.10823E03 6.44022E03 5.04918E03 4.91278E03 1.73472E03 4.00086E03 2.00548E04 1.76311E04 2.20980E04 1.91120E04 1.41470E04 9.75695E03 4.59545E03 3.28751E03 1.35160E03 3.12392E02 4.16727E03 1.81729E04 2.33911E04 2.15213E04 5.72394E03 3.58130E03 7.71332E02 1.34769E03 4.74193E03 3.20981E03 1.11211E03 1.68169E03 4.92620E03 1.50654E04 3.26154E04 4.03036E04 3.59823E04 3.49726E04 5.67796E04 2.91925E04 1.00561E04 4.23206E04 4.14293E04 2.95795E04 2.35609E04 9.58091E03 4.12557E03 4.66134E03 7.63815E03 7.83551E03 6.62550E03 1.27650E04 1.67711E04 1.47105E04 8.94110E03 2.66671E03 4.72217E03 1.51256E04 4.14248E04 6.62626E04 2.04463E04 7.08495E04 1.19061E05 2.03004E04 6.75694E05 7.36214E05 2.95059E05 1.67146E05 3.34686E03 1.50743E05 1.96810E05 4.40601E04 1.41018E04 4.61393E04 6.04939E04 2.71779E04 5.20042E03 5.23581E03 2.39844E04 3.46656E04 9.13690E03 6.67872E02 2.98196E03 3.20317E03 3.60986E03 1.35488E03 3.24168E03 2.76453E03 2.88912E03 4.11047E03 5.10057E03 2.58611E03 5.94423E02 7.08872E03 1.04682E04 5.74480E03 7.52586E03 9.28341E03 3.35242E03 3.72607E02 2.86614E03 1.91563E04 2.05820E04 9.26823E03 8.85549E03 9.62048E03 5.61564E03 6.46887E03 5.74990E03 5.32356E03 5.77133E03 8.64466E03 1.81021E04 1.52262E04 1.06400E04 1.21588E04 8.45817E03 8.31209E03 1.11608E04 1.38913E04 1.56758E04 1.13460E04 9.69115E03 7.58237E03 5.29062E03 4.52784E03 5.07966E03 4.59497E03 3.17978E03 2.77016E03 1.41490E03 1.66080E03 9.17191E03 1.61755E04 2.47409E04 2.07362E04 1.18573E04 1.59994E04 1.06390E04 2.71931E03 -Frame 257 2.70668E05 2.58989E05 4.55032E05 2.23565E05 3.33771E05 1.51532E06 4.30183E05 3.07808E05 2.38902E05 2.32136E05 8.83541E05 3.38479E05 8.03874E05 8.13696E05 4.31513E05 1.60480E06 1.56201E06 1.16086E07 1.70313E07 1.05386E07 1.37755E07 7.62646E06 1.15839E07 1.22978E07 6.79398E06 1.69492E07 1.09210E07 1.38561E07 1.27504E07 1.13188E07 4.97803E07 8.29608E07 5.77600E07 2.01884E07 1.84771E06 9.80729E05 7.48922E05 1.15555E05 3.06444E05 5.60274E04 1.03030E05 4.64885E04 6.80392E04 1.21879E05 7.12539E04 1.40823E05 1.90772E04 4.51503E04 4.15595E04 2.65226E04 2.44846E04 2.70825E04 2.99487E04 2.94396E04 1.95438E04 1.95128E04 6.58791E03 2.57956E04 2.32301E04 9.02534E03 1.66314E03 2.37038E03 1.64785E04 4.32742E04 3.49944E04 1.22786E04 6.71483E03 3.13888E03 8.64162E03 8.12448E03 1.25785E04 1.91626E03 7.72257E02 7.02366E03 1.63334E04 2.98723E04 4.15236E04 3.68813E04 2.07288E04 6.46518E03 3.03140E04 2.28187E04 3.54013E03 2.00226E02 2.13566E03 4.78556E03 3.77922E03 4.86301E03 4.84253E03 4.68421E03 4.74186E04 1.52019E05 2.45446E05 1.49051E05 9.09557E04 8.43122E04 3.37735E04 4.08655E04 5.46770E04 4.19258E04 7.82102E04 1.77271E04 1.52933E04 4.26944E04 2.11920E04 3.50110E04 2.75857E04 1.15594E05 1.58614E05 2.84475E05 6.96565E05 4.69094E05 1.80744E05 5.95651E04 1.73700E04 2.81904E03 1.02414E04 6.67626E03 4.05005E03 1.68222E03 1.00562E04 1.90799E04 6.38795E03 3.37684E03 4.39699E03 6.75989E03 7.63645E03 1.42329E04 1.33690E03 1.67919E04 2.55690E04 8.65653E03 3.70599E03 9.85249E02 9.45402E03 2.50931E04 1.70057E04 6.35971E03 1.47798E04 2.40171E04 1.07667E03 1.20229E04 2.36385E04 8.64745E03 6.04660E03 6.54218E03 4.75928E03 4.79081E03 1.35965E03 1.18405E03 2.90266E03 2.56183E04 4.89619E04 1.88271E04 6.50219E03 9.60054E03 6.00167E03 2.34937E04 1.07775E04 2.27706E02 5.66171E03 4.39893E03 1.99337E03 1.47242E03 4.69308E03 1.12953E04 5.02927E03 4.19865E03 2.82590E03 1.44824E03 1.18511E04 5.71855E03 4.71244E03 1.01712E04 2.44182E04 1.24506E05 5.57296E04 8.94825E03 2.72249E04 2.76439E05 5.53043E05 2.95722E05 3.64828E05 1.84107E05 1.70666E05 1.26053E05 1.51762E04 3.90596E04 2.89242E04 1.95912E03 7.73537E03 8.62316E03 1.08730E03 4.41556E02 1.76375E03 3.78876E02 6.95857E03 3.89007E03 6.07792E03 5.40735E03 4.66270E03 5.88694E03 1.16474E03 2.02642E03 3.82761E03 3.78236E03 5.40509E03 3.09278E03 1.59993E02 2.03249E03 2.41652E03 1.35244E03 3.86526E03 3.71952E03 9.73842E03 5.15044E03 1.07415E02 3.93875E03 8.30184E03 6.51110E03 5.17791E03 2.34042E03 3.02329E03 3.69653E03 1.83549E03 6.02661E02 2.10122E03 3.13250E03 9.61087E03 1.31585E04 8.06899E03 2.66847E03 3.60318E03 6.22058E02 6.91442E03 5.96899E02 2.59600E03 7.47699E02 8.73265E03 6.54372E03 3.90414E03 1.05975E02 2.57089E02 1.23019E02 2.71699E02 1.14642E03 1.86777E03 4.11521E03 3.94462E03 1.68055E03 1.43091E03 3.56310E03 1.09436E03 7.05072E02 2.46575E03 2.19042E03 1.47836E03 -Frame 257 3.90860E05 9.33313E04 1.34014E05 3.94960E05 5.45669E05 1.48247E06 9.02014E05 4.95022E05 4.40710E05 5.69618E05 9.00616E05 6.39614E05 1.20378E06 8.06983E05 1.25538E06 1.31762E06 2.34793E06 1.15839E07 1.30246E07 1.07328E07 1.38112E07 1.05743E07 1.37775E07 1.29487E07 1.11300E07 1.48507E07 9.89474E06 9.87113E06 8.59101E06 1.21161E07 2.89854E07 1.27641E07 4.30680E06 2.80126E07 2.30469E07 1.13314E07 2.89504E06 3.37166E05 6.25932E05 1.59443E05 1.57032E05 1.08000E05 8.51661E04 2.02139E05 4.10520E04 8.76058E04 1.04547E05 5.08842E04 7.13513E04 1.41202E04 2.49092E04 1.91439E04 1.08578E04 2.57057E04 2.34450E03 3.17911E03 9.22474E03 8.57426E03 8.69314E03 8.25993E03 7.25298E03 2.14595E04 1.93723E04 2.58270E04 8.48533E03 6.15621E03 7.90829E03 4.89720E02 6.17631E03 1.47074E03 8.60199E02 9.72598E02 7.34800E03 4.96542E02 1.23127E04 4.25961E03 3.06102E03 2.06435E04 4.22327E04 2.48332E04 2.65224E04 4.01235E04 1.38940E04 3.29925E03 9.14984E03 5.22960E03 4.71471E03 1.90462E04 9.42060E03 3.78871E04 3.42989E04 3.55992E03 3.59613E04 1.00963E05 2.43065E05 1.89291E05 6.89062E04 4.30185E04 2.28189E04 5.02471E04 2.44441E04 3.25642E04 9.06652E04 6.23281E04 7.69145E04 3.17419E04 2.54364E04 1.23376E05 1.63319E05 2.13864E05 4.64795E05 3.59451E05 2.38520E05 1.88318E05 8.63567E04 4.99313E04 3.84219E04 1.62138E04 9.15640E02 1.48642E04 5.14955E03 7.54972E03 6.04364E03 3.20032E03 1.20996E03 1.45086E03 5.29207E03 1.96263E04 1.16837E04 9.66335E03 7.25203E03 3.01874E03 1.17908E03 7.76958E02 1.44271E04 2.22796E04 1.28653E03 1.40586E04 1.48463E04 9.03913E03 2.78361E04 4.92350E03 1.44347E04 7.73084E03 1.76354E04 2.02590E04 1.08774E04 5.06887E04 2.13499E04 3.26765E03 5.30966E03 1.29933E04 4.24645E04 8.57231E03 3.96344E03 1.09608E03 6.60921E03 8.55894E03 8.38090E02 1.30483E03 2.06543E03 2.14721E03 8.45863E02 5.07492E03 4.98490E02 7.61242E03 1.74655E03 1.61661E02 4.55653E03 2.85687E03 1.29420E04 1.11675E04 3.79761E04 1.12800E05 9.23781E04 5.36331E04 1.31868E05 1.72439E05 2.86082E05 5.97269E05 3.45497E05 2.13576E05 3.41580E05 2.07690E05 1.14422E04 2.29217E04 5.02661E04 6.59371E04 3.41143E04 2.06105E04 1.64757E04 1.80104E04 1.57925E04 4.57846E03 2.41274E03 2.51748E03 2.45618E03 1.17810E03 1.41202E04 7.23118E03 6.19562E03 8.48604E03 3.39574E03 4.18214E03 8.92806E02 1.33247E03 1.41330E03 3.23422E03 4.86270E03 1.20798E03 1.90472E03 3.23897E03 1.78363E03 9.68436E02 3.46432E03 8.50040E03 1.29158E04 1.93428E04 2.11184E04 1.39811E04 3.48045E03 1.02959E04 1.06704E04 2.25009E04 1.82289E04 1.62757E04 1.18130E04 1.53037E04 2.84772E04 1.49152E04 1.15955E04 1.57973E04 5.76635E03 7.06992E03 6.54894E03 1.17783E04 3.83159E03 1.87351E03 1.64726E03 7.26616E02 1.88765E03 6.45703E02 7.26403E02 1.49028E03 4.61008E03 4.50684E03 5.64128E03 2.64665E03 4.21327E02 7.26598E03 7.53594E02 8.82241E01 3.25925E02 8.19604E02 2.09394E01 2.77194E03 1.68005E03 -Frame 257 1.09454E05 3.73916E04 2.37418E05 4.49579E05 9.15693E05 1.56024E06 7.54366E05 5.64833E05 5.85069E05 6.41793E05 9.35070E05 5.97996E05 9.45007E05 7.28321E05 7.68092E05 1.46362E06 2.99263E06 1.11810E07 6.97305E06 5.68600E06 1.40221E07 6.26339E06 1.32617E07 9.65255E06 7.86881E06 1.15243E07 1.92960E06 7.95258E06 7.09053E06 9.79208E06 1.20431E07 1.44797E06 7.10205E06 8.56287E06 4.24996E05 1.55892E07 1.24693E07 4.28605E06 1.59931E06 5.25812E05 3.71497E05 2.47195E05 3.11436E05 1.38194E05 8.32113E04 8.74744E04 6.84118E04 1.36316E05 1.16961E05 8.00732E04 5.53997E04 2.28149E04 2.72002E04 1.33870E04 8.42556E03 1.12742E04 4.44206E03 2.86841E03 1.33454E03 3.61751E03 1.73383E03 3.60857E03 5.21731E03 4.46868E02 5.90732E03 5.70560E03 6.61243E03 8.47620E03 2.33411E03 5.42064E02 1.22554E03 2.65638E03 3.47707E03 1.15363E04 1.73754E04 9.20543E03 1.70408E04 2.91503E04 6.70709E03 4.61317E03 5.56912E03 2.42200E04 4.74026E04 4.07768E04 2.28793E04 6.15161E03 3.10802E03 5.32426E03 1.11230E04 3.12940E04 2.12431E04 8.82389E03 1.01426E04 1.53528E05 2.62323E05 7.04417E04 2.53981E03 1.86079E04 1.66313E04 4.98490E04 6.97483E04 6.41461E04 1.27924E04 6.34060E03 3.04527E04 3.08809E04 2.11720E04 3.61008E03 5.05985E04 1.12744E05 3.90333E04 2.97832E05 2.63001E05 5.17259E04 4.94181E04 2.35522E04 3.38348E04 5.56389E04 3.31592E04 1.04324E04 6.82770E02 6.94315E03 2.37097E04 6.66788E03 3.59527E03 3.16126E04 3.47890E04 1.61735E04 3.49916E04 1.65515E04 7.53990E03 3.64565E03 1.59966E04 1.70263E04 1.14843E04 1.13009E04 1.27898E04 1.74744E04 1.98697E04 2.29918E04 2.94448E04 1.47691E04 1.10279E05 1.83355E05 1.03383E05 7.65451E04 3.58057E04 5.89552E03 2.73654E04 1.64100E04 3.47444E04 3.25155E04 7.55780E03 1.43859E03 5.56979E03 1.77914E04 1.26730E04 7.85275E02 1.71496E03 1.23356E04 1.45065E04 4.04018E03 3.88945E03 1.57802E03 9.47678E02 8.43606E03 5.61568E04 8.42421E04 5.69219E04 2.55019E04 9.55388E04 1.91687E05 3.07213E05 3.16359E05 1.09057E05 1.26544E04 1.31122E05 2.25533E05 4.14913E05 3.09370E05 6.40663E04 5.82051E04 1.03738E05 5.75793E04 3.91429E03 1.72302E04 7.47954E03 1.81264E04 8.62417E03 2.71230E03 2.95547E02 7.62888E03 4.42392E03 7.72335E03 7.67935E03 5.69192E03 4.65920E03 5.62283E03 3.88605E03 1.04577E03 4.86998E03 1.31025E03 3.63341E02 4.59496E02 4.89417E02 1.30399E03 7.23711E02 5.18998E03 6.97680E03 1.48517E03 8.61196E00 2.18605E02 4.56325E02 3.05339E02 1.19235E03 2.33759E03 8.90448E02 7.43891E03 1.65524E04 1.33981E04 8.26817E03 1.71164E03 5.90498E02 4.50228E02 2.62127E03 5.84910E03 3.87993E03 1.88226E03 7.15512E03 3.44943E03 1.14998E02 4.07310E03 3.67622E03 4.32937E02 1.01689E03 3.40479E03 6.93048E03 7.85806E03 7.85480E03 5.69675E03 4.77808E03 2.07229E03 2.39182E02 2.38323E03 2.88518E01 3.99227E03 6.44680E03 4.84787E03 7.42777E03 5.77065E03 6.30627E02 1.85115E01 4.32633E02 4.97479E02 2.60873E03 5.06823E03 3.32664E03 -Frame 257 6.30235E04 2.08027E05 4.97168E05 3.17839E05 7.05551E05 1.37810E06 8.64194E04 5.70821E05 2.80061E05 4.30150E05 6.21482E05 1.16106E05 9.61565E05 2.51966E05 6.69967E05 5.37838E05 2.08191E06 7.15499E06 7.20745E05 9.52257E06 4.66741E06 3.51940E06 1.10597E07 2.65137E05 7.20015E06 2.82576E06 3.90819E06 5.42326E06 1.40154E05 4.18940E06 6.11979E05 2.41470E06 1.58681E06 1.11949E06 8.08245E06 4.66010E06 4.95868E06 6.66465E06 1.72561E05 1.26358E06 5.73481E05 4.14644E05 8.22382E04 1.68141E05 2.31795E05 4.49982E04 1.57902E05 1.15682E04 1.48090E05 1.53727E05 2.37537E04 3.10039E04 6.58285E02 1.35935E04 2.86673E04 7.65959E04 3.90176E04 1.05152E03 9.76587E03 8.23842E03 2.80714E04 4.34351E04 1.49689E04 1.82362E03 5.33857E03 1.35538E04 9.21614E03 2.17838E03 2.52367E03 5.91174E03 1.02016E04 2.93890E03 9.38457E02 8.41835E03 8.42280E03 2.74872E03 7.51571E02 1.43389E03 9.51026E03 1.99104E04 1.96687E04 2.08965E03 1.28539E04 1.40174E04 2.50784E03 2.58165E03 1.05269E03 1.21594E03 4.36858E03 3.04008E03 8.67188E03 8.99415E04 1.83946E05 8.43449E04 2.51178E04 3.78806E03 2.49147E04 5.26613E04 1.86722E04 2.52760E04 5.79023E03 5.23457E04 5.51326E04 1.52438E04 1.15659E04 1.08876E03 2.88764E04 7.96761E03 2.59892E04 9.04667E04 4.64647E04 8.00315E03 9.51841E04 6.10668E03 5.39373E04 1.76205E04 3.77556E03 2.65390E04 2.46336E04 2.08893E03 2.21991E03 5.77367E03 3.41635E04 5.35816E04 3.56518E04 4.53931E04 8.32867E04 8.25559E04 4.85164E04 1.25440E04 8.44990E03 1.03875E04 1.19109E04 7.85999E03 3.54998E03 2.22761E03 6.63831E02 5.27293E02 4.16093E03 7.76896E03 1.69189E04 3.62633E04 1.33503E05 2.26542E05 1.21721E05 1.58529E05 1.55115E05 6.84584E04 4.25285E04 5.59590E04 5.72310E04 7.55526E03 6.31736E03 3.86255E03 2.14437E04 6.89676E04 6.42041E04 2.63527E04 2.55083E04 4.34070E04 5.03769E04 2.68592E04 6.75022E03 7.20493E02 2.24245E03 5.34369E04 3.04474E05 2.58184E05 1.61494E04 9.13490E04 5.62047E05 1.19407E06 4.33099E05 1.39595E05 2.83908E05 2.02315E05 1.22332E05 1.02180E05 1.70756E05 1.18261E05 2.15227E04 7.18570E03 6.06229E03 1.46636E03 1.61435E04 2.52701E04 1.31290E04 8.21157E03 2.19564E03 1.72125E03 4.14445E03 2.24410E04 3.51441E04 1.33291E04 1.72779E03 1.12543E02 1.72906E03 1.95814E02 1.94644E03 3.95987E02 2.16572E03 4.75670E03 1.93850E03 2.34669E03 4.71932E03 3.51546E03 2.70601E03 4.67133E03 2.37242E03 2.31888E02 1.23234E03 1.36295E03 1.55805E03 1.86769E03 2.67363E03 1.76358E03 2.92531E03 7.37851E03 3.84058E03 4.49900E03 1.52535E03 2.37073E03 2.71183E03 2.84739E03 3.80887E03 6.84549E03 3.55719E03 5.52177E02 4.77688E02 2.83488E03 2.79133E03 7.44095E03 6.59225E03 1.78176E03 8.66032E02 8.77273E02 5.78232E03 1.59937E04 2.19338E03 2.25577E03 2.06500E03 7.56852E03 1.52254E04 4.93532E03 9.52186E02 8.11738E03 4.66001E03 1.20267E04 4.26745E03 7.07591E03 8.54964E03 2.36817E03 1.12751E03 2.68881E03 4.28249E03 2.04339E03 2.22339E02 -Frame 257 7.94740E05 1.37279E05 4.02561E05 2.77541E05 3.89248E05 1.37168E06 4.05477E05 5.75323E05 1.91781E05 3.40552E05 7.55576E05 1.94840E05 6.60821E05 1.65047E05 7.13786E05 7.42219E05 1.18373E06 4.95847E06 5.81200E06 9.90070E06 5.98854E06 3.50014E06 7.91022E06 3.89863E06 3.58985E06 2.10728E06 4.55656E06 6.18900E06 1.42283E06 9.86928E05 6.67450E05 1.36712E06 1.49571E06 4.10275E05 1.64166E06 1.79886E06 3.75284E06 3.44428E06 1.57671E06 2.85012E06 1.71141E06 9.68898E05 3.00326E05 1.66876E05 8.36225E05 5.61283E05 2.71129E05 4.71557E04 6.66401E04 1.52528E05 2.60883E04 2.64946E04 1.29908E04 6.15811E04 6.77378E04 1.97935E04 2.89226E04 1.56880E04 3.57304E04 1.70595E04 2.76379E04 4.93483E04 1.85880E04 1.58428E04 1.47074E04 3.69383E03 1.97115E03 9.02067E02 9.50032E02 2.46621E03 9.14511E03 3.57977E03 2.05333E02 1.87780E03 1.63410E03 8.76044E01 3.38498E02 4.49827E02 3.79467E02 1.78169E03 3.57799E02 6.35458E03 6.87267E03 5.63614E02 5.87312E03 7.50492E03 4.10068E03 2.86602E02 5.22105E02 6.00178E03 5.60717E03 1.54267E04 7.42503E04 5.17331E04 1.79588E04 8.44077E03 7.84707E03 3.03988E04 2.70118E04 9.81637E03 2.25783E04 1.84155E04 3.01348E04 1.77775E04 8.57781E03 1.47338E04 2.95233E04 2.52976E04 6.21684E03 3.72001E04 1.35316E04 4.09320E04 9.74151E04 9.82932E04 1.02599E05 5.69263E04 1.40093E04 1.55549E04 2.64498E04 1.70639E04 3.88003E03 7.25279E03 2.97007E03 1.88614E04 3.37691E04 2.78308E04 3.36127E04 6.59762E03 2.72086E04 9.65809E03 1.85417E03 1.03187E04 1.48577E04 2.10739E04 1.46258E04 8.96846E03 2.14819E04 4.80015E04 7.25950E04 4.65897E04 4.70357E04 2.83059E04 8.12805E04 1.85602E05 1.80261E04 1.54814E05 1.06782E05 1.76263E04 2.12206E04 1.52859E04 1.73310E05 2.10540E05 8.02922E04 1.81193E04 7.29100E04 1.11439E05 1.63742E04 1.19469E04 1.15396E04 1.12850E04 4.70611E04 3.49042E04 1.43392E04 1.05439E04 1.54308E04 7.30773E04 1.86404E05 2.31608E05 1.66789E05 1.95257E05 4.08902E05 4.65696E05 3.20281E05 1.26226E05 3.27860E04 8.54916E03 1.11854E04 3.49252E04 5.94198E04 3.33029E04 1.07073E04 1.36227E04 1.81842E04 7.72504E03 5.12698E03 3.04753E03 7.18430E02 3.40641E02 1.46353E03 1.36764E03 3.01336E03 1.94549E04 6.71225E03 2.51809E03 1.73718E03 3.88568E02 3.27801E03 5.17462E03 3.07323E03 6.11946E02 2.41252E03 5.71276E03 1.57917E04 6.81024E03 5.99640E02 4.67263E02 1.63836E03 1.86179E03 1.16115E03 1.31787E03 6.45753E03 5.62452E03 1.58314E03 2.52437E03 2.71168E03 1.26576E03 7.33959E02 3.54397E03 1.54152E03 4.59234E03 1.57342E03 2.51137E03 6.10092E03 4.97179E03 3.83345E03 1.89227E04 1.73586E04 4.19973E03 1.46182E03 3.11112E01 4.22220E03 1.22968E04 3.33387E03 2.20731E02 2.11957E03 3.51249E03 4.50017E02 9.77250E03 2.63469E04 1.18423E04 9.20548E01 9.39953E03 1.44384E04 1.03244E04 6.65934E03 5.11177E03 8.93521E03 2.75165E04 1.96326E04 1.74594E04 6.51822E03 1.26407E03 3.64086E03 4.68288E03 5.36033E03 5.18515E03 6.61772E02 -Frame 257 1.65626E06 1.12810E06 6.66620E05 3.55832E05 7.95950E05 1.20270E06 8.16247E05 6.12408E05 4.29191E05 4.54241E05 5.25505E05 5.10890E05 4.50299E05 5.99402E05 6.99634E05 1.11505E06 2.55836E06 2.56277E06 1.99966E06 3.67007E06 4.07537E06 3.85308E06 3.23353E06 1.82866E06 1.32092E06 1.92334E06 2.68638E06 2.42497E06 1.28451E06 5.82051E05 7.57909E05 9.84455E05 9.17891E05 7.88742E05 4.47046E05 5.08650E05 1.28627E06 1.69345E06 1.83652E06 1.78798E06 9.44603E05 6.08411E05 9.82294E05 1.07541E06 5.95994E05 1.57938E05 8.74960E04 1.10064E05 1.26660E05 1.47888E05 9.36489E04 3.60960E04 8.92149E03 1.99848E04 8.80693E04 8.05909E04 4.71742E04 2.88276E04 1.86608E04 2.83375E04 2.55574E04 1.38060E04 1.09877E04 2.52107E04 4.62506E04 1.01947E04 1.05146E03 5.64425E03 9.47528E03 1.32435E04 2.54055E04 1.60560E04 7.82418E03 7.62028E03 1.93041E03 5.25336E03 1.06722E04 1.56368E04 1.28046E04 3.15802E04 4.97646E04 3.89740E04 4.58014E04 5.21215E04 2.19603E04 2.07322E04 5.51558E04 5.21433E04 6.38291E04 8.22778E04 5.27763E04 2.01830E04 8.85735E04 7.40064E04 5.69454E04 8.05588E04 6.77854E04 1.05758E05 2.01980E05 2.25528E05 1.75505E05 1.23115E05 8.52557E04 6.19782E04 5.28261E04 2.71214E04 4.65948E04 6.75998E04 6.81992E04 2.38361E05 4.89504E05 5.37780E05 3.50451E05 3.49083E05 2.93004E05 4.32469E05 4.78303E05 3.79784E05 4.97917E05 3.65455E05 2.87961E05 2.18572E05 2.04921E05 5.88620E05 8.78527E05 7.84883E05 7.04459E05 3.26083E05 9.89833E04 6.12347E04 8.27305E04 2.14975E05 6.64269E05 8.57959E05 8.71616E05 1.35186E06 1.31073E06 1.53033E06 1.17863E06 4.17193E05 6.36364E05 5.71321E05 5.40692E05 8.45723E05 3.48955E05 2.23205E04 2.48299E05 1.96472E05 3.60335E05 4.55090E05 6.70931E04 1.74108E05 2.49770E05 7.58796E04 2.63433E05 2.83836E05 5.74766E04 2.64923E04 1.68604E04 2.14696E04 2.36577E04 1.24218E03 3.11918E04 1.09494E05 1.03608E05 3.41440E04 4.17852E04 2.13403E04 4.70446E04 2.11752E04 9.13573E02 2.94566E04 3.94650E04 7.35697E04 5.57955E04 5.73901E04 4.73882E04 8.52960E03 3.60276E02 3.62866E03 5.42250E03 2.31789E04 2.36602E04 8.02943E03 1.95222E03 4.16551E03 8.53371E03 9.02961E03 5.48021E03 2.66568E03 1.63869E03 3.29196E02 1.41821E04 3.99864E04 5.37405E04 4.64422E04 2.40440E04 9.07099E03 1.73196E04 1.08890E04 4.37334E03 1.26756E03 3.60577E03 1.74478E04 2.30656E04 5.17983E04 7.56323E04 6.22202E04 5.26436E04 5.57719E04 2.68354E04 2.12404E04 2.62562E04 6.93388E03 1.85381E03 1.10533E04 3.15149E04 3.40659E04 1.93344E04 3.69456E03 2.95807E03 2.15332E04 7.13633E04 7.55497E04 4.98620E04 2.48257E04 8.10126E02 9.36194E03 6.33640E03 1.06930E04 8.33903E03 1.02601E02 7.79860E03 1.17062E04 2.09597E04 3.56989E04 2.80823E04 9.77349E03 7.31020E03 2.12657E04 1.14938E04 5.86785E02 9.13827E02 6.84621E02 2.83041E03 9.71342E03 1.35585E04 1.14177E04 5.00976E03 3.35547E03 7.44274E03 7.09561E03 2.29657E03 1.02980E04 3.06386E04 1.57409E04 2.77753E03 -Frame 257 3.55260E05 1.38760E05 7.52920E04 9.15509E04 2.47315E05 2.96050E05 5.07679E04 2.10235E05 5.54078E04 5.64281E04 2.21888E04 6.04173E04 3.86945E04 4.98996E04 7.57119E04 1.19719E05 1.90267E05 1.14948E05 3.25768E05 1.66886E05 1.63039E04 1.37071E05 1.02500E05 6.53265E04 2.47960E02 1.94671E05 1.60601E05 3.70272E04 1.59211E03 6.91667E02 6.85924E04 4.85114E04 7.48146E03 1.38348E04 6.69609E03 1.15368E05 3.73472E04 1.06034E05 1.49913E05 4.78669E04 1.53692E05 1.34369E04 8.38398E04 2.41152E04 2.23721E04 3.56271E04 2.01904E03 3.99166E03 1.27597E04 3.85801E04 1.48485E04 5.26384E03 2.83582E04 3.78208E04 3.33156E04 6.88404E03 1.17495E04 6.28047E03 2.97774E03 8.79769E03 1.39778E03 9.09624E03 1.02982E04 9.11146E03 8.11801E03 1.07291E04 1.51988E04 3.89316E03 3.81780E03 6.64945E03 4.60237E03 2.43569E04 7.31964E03 9.28634E03 2.76590E04 1.78928E04 1.17385E04 4.29596E04 2.04953E04 2.89673E04 1.01092E05 1.21377E05 2.70624E04 1.03634E04 8.14860E03 3.57852E04 7.80524E04 2.87137E04 4.10899E04 9.24497E04 5.18656E04 2.34712E04 4.93791E04 2.48908E04 6.59284E04 1.02413E05 2.29365E04 8.21017E04 1.41812E05 3.28280E04 9.95636E04 7.17772E04 4.09704E04 1.32523E05 9.55778E04 1.21871E04 6.07643E04 9.04222E04 5.91680E04 3.41776E05 4.33838E05 5.35961E04 2.42180E05 3.96820E05 2.47892E05 4.16059E05 1.93714E05 7.73167E04 5.82953E05 4.20053E05 1.61614E05 4.97734E05 4.08030E05 4.29183E05 1.47468E06 1.65956E06 7.61450E05 6.13101E05 3.62918E05 7.15057E04 6.89566E04 1.16588E05 8.78049E05 1.56780E06 1.52583E06 2.06396E06 2.07490E06 1.33452E06 9.69941E05 6.49272E05 4.18092E05 4.14532E05 3.17503E05 3.51483E05 2.91975E05 2.48687E05 2.61132E05 1.26248E05 2.13813E05 4.26716E05 2.12599E05 1.26859E05 1.89311E05 4.91669E04 9.24787E04 1.53236E05 1.97388E04 5.56702E04 7.33503E04 3.36834E03 7.64343E04 1.33980E05 7.54504E04 2.48414E04 1.10658E05 1.13645E05 1.95205E04 3.09373E04 6.08049E04 3.18942E04 2.26785E04 3.51488E04 2.83288E04 2.49731E04 1.00576E04 1.12706E04 9.51274E03 2.50390E03 1.79708E03 2.30763E03 1.02591E04 7.12922E03 6.40107E03 7.22174E03 9.09378E03 2.11242E04 3.32568E04 7.97106E03 7.68341E03 2.42971E04 2.77242E04 2.73420E04 5.69323E03 1.92086E04 7.88733E04 3.41972E04 1.69364E04 4.67739E04 1.15387E04 1.15879E04 4.37544E04 2.44193E04 5.83166E03 4.72807E03 1.05025E04 1.12749E04 1.06485E05 7.52351E04 5.56445E03 3.20508E04 5.26105E03 2.20412E04 5.03302E04 1.92623E04 2.34541E03 2.10939E04 3.87512E04 1.32822E04 6.84152E03 1.47452E04 8.36832E01 2.53167E04 4.24347E04 2.44089E04 1.32636E04 3.90092E03 1.31122E04 3.64793E04 2.96811E04 2.34250E03 2.32841E04 3.29146E04 9.17299E03 1.03651E04 1.58841E04 8.45777E02 1.68414E04 7.31753E03 1.56101E03 1.88872E04 1.49855E04 1.61916E03 7.30137E03 8.12652E03 5.22288E03 3.11240E03 6.39819E03 4.06763E03 1.38392E04 8.29899E03 6.53434E03 5.23702E02 2.30333E03 1.49852E04 2.54967E04 1.08891E04 4.41389E03 -Frame 257 1.68901E04 1.29491E05 7.54081E04 5.83927E04 1.60036E05 1.32958E05 8.35518E04 1.43588E05 2.78624E04 1.80043E04 7.10235E03 5.57546E04 2.79248E04 1.55106E04 3.31495E04 1.56154E04 1.57669E04 4.89776E02 5.94183E03 5.64995E03 2.09607E04 1.25464E04 1.77460E04 2.88096E04 1.52050E04 2.97022E04 1.22385E04 5.92403E03 1.75305E03 1.97215E04 1.31369E04 1.47567E03 3.61865E03 1.02639E04 3.15792E04 3.07828E03 3.18720E04 3.02524E04 7.23851E03 1.72185E04 9.47730E03 9.76070E03 1.52808E04 2.92449E04 3.18457E03 5.52439E03 2.32180E03 1.97166E02 2.11635E03 1.63929E03 3.70272E03 5.87800E03 3.65195E03 7.51829E02 3.55020E03 6.55683E03 2.29563E03 2.07419E03 4.81837E03 3.99167E03 1.13722E04 3.16480E04 1.27325E04 4.96023E03 1.01883E04 1.08929E04 1.69952E04 3.96954E03 5.64000E03 1.16982E04 5.66470E03 2.11610E03 1.46703E04 1.37762E04 1.01516E03 4.44277E03 1.00006E04 3.17704E04 2.68339E04 7.42363E03 8.43742E02 1.54815E04 6.78223E04 3.25478E04 3.17925E04 5.13972E04 4.46631E03 1.21026E04 1.91586E04 7.26870E02 5.18783E03 4.43040E03 3.93352E03 8.23565E03 1.49654E04 1.23142E04 6.11643E03 2.40446E04 3.68849E04 1.91842E04 6.83984E03 7.10069E03 2.09049E04 1.40174E04 4.36771E03 1.62256E04 1.50675E04 1.79142E04 2.72044E04 4.08361E04 3.01403E04 3.48014E04 5.23132E04 3.63345E04 8.91738E03 3.92951E04 6.86606E04 3.35099E04 5.20936E04 7.55814E04 6.20828E04 4.39584E04 4.25380E04 8.49191E04 7.59459E04 6.61561E04 7.54941E04 9.91136E04 7.92279E04 2.28342E04 3.50194E04 5.41806E04 6.22403E04 6.41572E04 2.71352E04 3.12742E04 1.81600E04 6.57854E03 3.87440E03 2.16662E04 1.84936E04 1.81417E03 1.21473E04 7.33244E03 1.63021E03 5.31111E02 1.50391E04 3.22972E04 5.03634E04 1.96725E04 1.79248E04 3.28772E04 2.08393E04 1.67226E04 1.72130E04 1.92327E04 1.74654E04 3.39783E04 5.43247E04 7.61305E04 5.43046E04 3.14918E04 1.20181E04 2.97331E03 2.05074E04 2.06612E04 4.37537E03 9.43677E03 2.21991E03 2.88867E03 6.81194E03 4.51661E03 1.56441E02 1.83774E03 3.83625E03 2.28740E03 2.65213E03 1.19311E03 1.36102E01 1.15096E03 3.76341E03 4.68320E03 1.14057E03 5.73621E03 2.29385E03 3.52141E03 1.40835E04 8.28652E03 1.56951E04 2.01815E04 1.26346E04 1.34156E04 4.84299E03 2.30664E04 1.03052E04 6.17547E03 2.20821E04 1.74610E04 8.96603E03 2.76743E04 3.30948E04 2.15242E04 3.86608E03 4.38401E03 1.41403E04 2.64475E04 3.13628E04 7.58636E03 6.43507E03 1.80488E04 2.31945E04 8.27477E03 4.37000E03 1.36415E04 3.92555E03 6.13375E02 3.18163E03 3.11851E03 6.23944E03 1.29090E04 1.21457E04 6.85869E03 3.37215E03 2.23341E03 1.74049E03 7.03337E02 2.28140E03 4.19574E03 1.36017E04 1.23925E04 1.26519E04 1.58169E04 1.69804E04 2.42914E04 4.00749E03 4.10162E03 7.02857E03 7.56716E03 7.56441E03 4.96167E03 1.21920E04 2.39513E04 8.14066E03 2.33622E03 3.35828E02 1.92755E03 4.87286E03 5.55714E03 1.43301E04 8.83741E03 1.50507E03 1.07916E03 4.26554E02 3.63066E03 5.00297E03 1.38265E03 1.86091E02 -Frame 257 1.55519E06 7.10816E05 1.58323E05 1.79944E04 5.15955E04 1.23671E05 9.63308E04 1.15307E05 1.94801E04 1.00854E04 1.88482E04 4.78621E04 2.09987E04 1.04689E04 1.58734E04 1.74780E04 1.38112E04 5.76679E03 6.74579E02 4.54000E03 1.94997E03 2.78097E03 1.79563E04 1.21705E04 8.56951E03 2.30769E04 2.58897E04 1.16818E04 1.02139E04 3.01799E03 5.94736E03 1.35947E04 1.39337E04 4.07422E03 8.87348E03 4.32787E04 4.21965E04 9.90043E03 1.20437E03 4.53197E03 8.21974E03 9.09559E03 8.56377E03 1.10799E04 4.56886E03 8.56727E03 8.64109E03 2.78470E03 3.27220E03 2.72792E03 4.68673E02 1.46342E02 2.26612E02 1.52851E03 6.39796E03 3.81626E03 3.42571E03 5.99721E03 1.61829E03 2.08204E02 4.22654E03 2.65801E04 2.69420E04 2.01222E04 1.04747E04 6.61601E03 3.17933E04 1.74012E04 8.03555E03 8.58545E02 3.09300E03 8.38327E03 1.85456E04 8.78792E03 8.63338E01 7.78053E02 3.31293E03 1.26063E04 6.45199E03 7.31849E02 5.35040E03 3.31291E04 7.15375E04 5.03656E04 3.84079E04 3.42157E04 4.01064E04 2.71575E04 7.46906E03 1.21701E03 3.07023E03 1.86884E03 6.82029E02 4.41445E02 4.14479E03 6.68682E03 1.14095E03 2.52946E03 8.22888E03 4.59137E03 6.54875E02 3.60887E03 8.45313E03 3.76352E03 6.26439E03 3.26256E03 2.54425E03 1.09208E03 1.88307E02 4.84913E03 7.20531E03 3.93600E03 9.80668E03 1.29619E04 2.37126E03 5.82557E03 8.12518E03 2.36503E02 5.43297E03 6.73163E03 1.38242E03 4.04043E02 1.02384E03 4.38412E03 4.82541E03 1.47386E03 2.21952E03 7.79320E03 1.62224E03 5.83499E03 6.42945E01 3.81027E03 1.11461E04 1.74044E04 8.79013E03 8.67874E03 5.22110E03 1.27313E03 4.38366E02 9.02252E03 2.63096E04 2.06390E04 2.34023E04 2.67510E04 1.01066E04 1.44707E04 2.40025E04 1.90420E04 3.97387E04 3.32367E04 4.14550E03 9.28911E03 6.63072E03 4.68298E03 7.36415E03 4.81133E03 4.33559E03 3.37211E03 5.31321E03 1.44737E04 1.06481E04 3.16204E03 3.69713E03 5.87056E03 1.77270E02 7.37324E03 1.18993E04 4.99237E03 3.29486E03 3.72055E03 3.56710E02 7.13299E03 7.97626E03 6.45423E03 8.11471E03 7.07459E03 8.44036E03 6.48986E03 2.17386E03 2.82762E02 1.25500E03 9.13480E03 1.36851E04 1.11585E04 2.57336E03 1.90731E02 7.97418E02 4.29343E03 1.50372E04 3.05096E04 3.85420E04 4.61517E04 4.02825E04 1.31973E04 1.14349E03 3.13097E03 1.52658E04 2.44488E04 1.49280E04 3.10587E03 2.62847E03 1.96673E03 1.95323E00 1.42029E03 1.36421E03 1.40206E03 3.49872E03 6.13191E02 3.84930E03 2.32257E03 1.63611E03 1.12198E04 1.52841E04 4.02987E03 1.40900E02 2.19455E02 3.23279E02 1.91259E03 4.59424E03 3.32492E03 9.32154E02 1.84703E03 1.79502E03 2.46820E03 2.98764E03 5.65351E03 2.96275E03 6.78100E02 2.64406E03 9.78176E03 1.37089E04 1.30529E04 1.54745E04 1.94773E04 1.18139E04 2.95864E03 2.45342E03 3.54513E03 3.58435E03 4.45176E03 8.39386E03 7.15195E03 1.96004E03 4.19909E02 2.83463E03 6.90983E03 4.35722E03 6.05565E03 7.09729E03 2.27271E03 5.40021E03 5.59206E03 2.64462E03 3.81984E02 5.28993E02 4.34912E01 7.14945E02 -Frame 257 5.42361E06 2.36868E06 1.28436E05 1.02097E04 1.03085E05 1.04995E05 5.83225E04 7.88133E04 2.41811E04 3.45579E03 1.51681E03 1.53064E04 2.79251E04 1.01101E04 4.55954E03 4.77108E03 1.12061E04 4.59182E03 2.16920E03 2.97613E03 6.90887E02 3.01323E03 7.39426E03 3.91272E03 9.63009E02 8.46007E03 7.83141E03 2.20108E02 3.54989E03 1.40581E04 1.83201E04 3.58201E03 2.03271E03 5.68422E03 6.07001E03 1.27331E04 4.74926E03 1.79076E03 5.01004E03 1.93095E03 5.15232E03 1.77560E04 1.27972E04 1.44193E04 1.74594E04 1.11965E04 2.02765E03 3.37036E03 5.92293E03 8.24015E01 3.56526E03 2.67458E03 1.32415E03 5.17737E03 1.01323E04 4.32004E03 4.60698E03 5.88728E03 1.81581E03 6.78551E02 5.54253E03 1.33916E04 8.73026E03 5.81577E03 4.15540E04 4.99050E04 3.09278E04 8.94141E03 9.48409E03 1.01114E04 3.67731E03 3.04305E03 9.09197E03 1.23023E04 6.45893E03 2.12826E03 3.09223E03 4.18389E03 6.38975E03 3.17211E03 6.03662E03 3.10203E04 2.96130E03 4.86774E03 1.18652E04 1.97735E04 2.38065E04 3.08360E03 3.88240E03 6.52552E02 1.38083E03 3.72419E03 2.10229E03 1.95725E03 1.48050E03 8.28979E03 4.00178E03 5.85479E01 7.15607E02 3.61272E03 2.84416E03 7.02143E03 8.09693E03 6.00934E03 5.43503E03 7.45544E02 1.74672E03 6.52937E03 9.76619E03 1.22716E04 1.00012E04 3.41969E02 5.51444E03 1.05428E04 1.21684E04 9.49603E03 1.72335E03 2.58387E03 1.02866E04 3.57013E03 6.24919E02 1.04568E03 2.49679E03 3.88893E03 1.00308E03 1.58780E03 5.42331E03 4.27908E03 3.07056E03 6.88233E03 8.29144E03 2.20674E03 1.78865E03 4.05628E03 4.93032E03 3.78926E03 6.45010E03 1.31601E04 9.18865E03 1.37211E04 2.13693E04 6.42118E03 1.20870E04 6.87103E02 2.74786E04 1.24011E04 5.92196E03 6.72506E02 6.11795E04 7.97495E04 3.64780E04 1.49014E04 9.05529E03 1.78940E04 1.71104E04 3.58020E03 1.32800E03 7.32954E02 6.90729E03 1.20286E03 3.80478E03 2.80055E03 3.29874E03 9.52458E03 6.07701E03 1.66451E03 9.79683E03 3.88625E03 1.17745E02 3.75934E03 1.25476E04 8.64663E03 9.62476E02 1.40045E03 5.32077E03 5.18918E03 2.01538E02 2.29436E03 6.46987E02 1.33879E02 1.85891E03 6.67753E03 2.52532E03 4.60234E03 4.32007E03 8.76962E02 9.08149E01 1.50826E03 4.82947E03 1.92206E03 5.57967E03 1.21090E03 1.17442E04 1.58253E04 4.10598E03 1.82566E03 2.93247E03 3.30928E03 3.18007E03 1.82346E03 2.88292E02 2.38743E03 1.22786E03 1.34484E03 6.81988E02 2.11312E02 2.46537E03 5.26157E03 4.39770E03 5.42581E02 2.90984E02 1.68076E03 4.82034E03 3.59693E03 5.96779E02 5.89893E02 1.51291E03 2.71570E02 8.64584E02 3.30348E03 1.72623E03 1.35756E02 6.31551E02 1.38082E03 1.55366E03 4.54987E03 4.36835E03 2.44831E02 1.09457E03 4.01625E03 4.49038E03 3.30054E01 4.79651E02 2.42123E03 4.65093E03 6.98950E00 2.23426E03 1.59479E03 9.60257E02 6.79485E01 7.12699E02 6.52931E02 2.64254E02 2.06576E03 3.83966E03 3.46322E03 1.92460E03 4.86390E03 1.17938E04 5.84035E03 1.54704E03 1.11051E03 1.23796E03 2.14019E03 1.63177E03 2.98027E02 1.06379E02 -Frame 257 2.58323E06 1.10580E06 1.28011E05 3.43438E04 1.00679E05 6.31255E04 6.49411E03 5.09415E04 1.22725E04 6.84354E03 5.59658E03 2.60997E04 2.31407E04 7.00232E03 2.44721E03 1.82735E03 1.31811E04 7.22279E03 2.44147E03 2.37889E02 1.65229E03 2.12874E03 3.68420E03 6.95136E03 1.49565E04 2.44614E04 2.11559E04 2.14517E03 3.04175E03 7.13761E03 6.23008E02 4.33849E03 5.53161E03 3.04560E03 2.61528E02 2.80566E03 4.36655E03 1.78631E03 2.43457E03 1.39005E04 7.30340E03 1.12042E03 9.25244E03 1.21262E03 6.21895E03 6.02617E03 8.28691E02 9.47249E02 6.52401E03 7.98285E03 8.77905E03 9.93363E03 5.79187E03 1.22609E04 1.81325E04 4.37566E03 1.34797E03 1.11005E03 8.09878E02 5.59942E02 2.66854E03 2.15977E03 3.11703E03 2.11226E04 3.03098E04 9.98649E03 4.91615E03 1.57101E04 2.95018E03 6.20131E02 1.39468E02 1.24782E02 1.09279E03 2.09175E03 5.62494E03 7.06965E02 3.13463E03 8.61574E03 1.49340E04 1.16840E04 2.02767E03 3.53473E04 4.72303E04 2.14925E04 1.92879E04 3.75688E04 4.55728E04 1.53881E04 4.81418E03 7.83885E03 6.45640E03 1.84285E03 1.04460E04 1.88591E04 1.63665E04 7.65225E03 6.19519E03 3.22144E03 5.60227E02 7.47124E02 6.51221E03 4.67682E03 5.77795E02 2.49617E03 1.81601E02 4.20902E03 2.65194E03 2.02511E01 2.77393E02 1.64694E03 1.52542E03 1.14250E04 6.50813E03 1.59035E03 7.51665E02 2.63181E03 2.25206E02 6.74688E03 9.31659E03 1.16191E03 1.54127E03 3.03976E03 7.13118E03 4.94632E03 8.40441E02 2.53570E03 8.40958E02 6.58048E02 4.23756E03 9.15786E03 5.00195E03 3.51236E02 4.51760E03 4.84517E03 2.38571E03 1.73409E03 3.47038E03 4.27137E02 2.47807E03 5.95313E03 9.72873E03 7.90850E03 7.24723E03 2.00597E04 3.33474E04 3.12233E04 2.80295E04 4.12139E04 4.80260E04 7.78002E03 3.56168E03 5.18633E03 4.08371E02 3.42002E03 4.38608E02 1.55338E04 1.56271E04 5.01889E03 9.33976E03 5.62011E03 1.08619E03 4.72684E03 6.09340E03 9.63844E03 8.60765E03 4.32448E03 1.41502E03 5.34563E03 5.31010E03 2.60657E03 4.16610E03 4.73805E03 2.56772E03 8.28496E03 4.37129E03 1.37103E03 3.09167E03 1.92207E03 6.25088E02 1.31683E03 1.62216E03 1.87935E03 2.25104E03 8.45698E02 8.25677E02 4.30388E01 1.46298E03 2.38589E03 2.31172E03 2.15294E02 1.64676E03 3.09498E03 1.82952E03 1.40880E03 9.12415E01 1.44409E02 2.05479E02 3.34962E02 6.90480E02 7.77939E02 4.13706E02 5.95067E03 5.58540E03 9.53373E02 2.29715E02 5.50549E02 1.30435E03 3.06529E03 1.38276E03 2.64557E01 8.31960E02 1.27208E03 8.78271E02 2.86346E02 1.59483E03 1.97657E03 7.72944E02 9.60056E02 8.58595E02 8.02532E02 2.10934E03 1.35477E03 8.09509E02 2.52585E02 1.57475E03 4.33257E03 5.44255E03 6.53533E02 3.51427E02 7.14385E02 2.56852E03 2.00425E03 2.25054E02 2.35738E03 5.56813E03 2.97316E03 7.94671E01 6.85068E02 1.17700E03 4.36948E02 2.45558E02 6.18168E02 1.79126E03 1.44408E03 9.33455E02 1.15941E03 1.18584E03 1.65220E03 3.65169E03 9.61374E02 8.32504E02 6.58254E02 7.13642E02 3.21643E02 1.42388E03 7.89017E02 3.90569E01 -Frame 257 1.10274E03 6.45799E05 2.98211E05 6.28345E04 7.77732E03 3.49055E04 3.95305E04 3.88253E04 1.46211E03 1.00646E04 1.95533E03 9.61690E03 5.36590E01 1.06716E04 8.11049E03 5.82771E03 4.26905E03 3.64194E03 1.29315E04 4.72890E03 2.91822E03 2.96553E03 1.83813E03 6.21635E02 1.45526E03 1.12804E02 1.04700E04 1.12367E04 1.13623E04 8.10874E03 7.40626E02 1.68003E03 3.86056E02 3.69602E03 8.03518E03 9.24202E03 8.47109E02 3.69275E03 3.78027E03 4.61740E03 5.53878E03 1.28010E04 6.22399E03 1.79504E02 2.16778E03 1.28382E03 4.49390E02 4.88233E03 2.92479E03 9.04972E01 5.76953E02 1.63135E03 4.74433E02 2.66686E03 1.55814E04 1.12670E04 9.70228E02 7.72432E02 1.97149E03 5.48273E03 1.63314E03 1.69073E02 1.96576E03 1.13214E03 3.59544E03 2.14181E03 1.78646E03 2.55913E03 1.13824E04 6.28614E03 8.37157E02 8.97571E02 4.89485E03 7.87631E03 4.23007E03 1.73578E03 3.38356E03 1.01085E04 1.33944E04 1.10522E04 5.28161E03 3.66534E04 2.36445E04 3.22328E03 1.22787E03 2.26553E03 1.82022E04 2.62730E03 1.88227E03 9.71432E02 9.09135E02 3.35955E03 4.05526E03 2.57440E03 1.00805E04 1.02697E04 6.31089E03 5.60341E03 2.77139E03 2.18623E02 2.99394E03 6.04284E02 1.23239E03 2.87749E03 8.02802E03 1.30738E04 5.88100E03 2.65865E03 2.52414E03 1.32336E03 1.38114E03 1.20651E04 7.76127E03 3.65158E03 3.38488E03 2.00741E03 4.22836E03 5.91312E03 1.38499E03 3.53920E03 1.25340E04 2.71582E04 2.06228E04 2.88716E03 5.12249E03 9.24654E03 5.26688E03 9.73195E03 1.86121E04 4.32103E03 1.61502E03 6.22774E03 1.95257E03 2.96925E03 7.91272E03 1.11302E04 1.49716E04 8.79844E03 1.88748E03 7.89731E02 1.60257E03 1.32868E03 3.20452E03 5.44307E03 2.24825E02 2.93353E03 7.10944E02 4.71150E02 1.32264E04 1.41282E04 3.25848E03 2.20826E03 8.09902E03 1.43673E04 1.62715E04 1.08107E04 3.55672E03 6.53377E03 1.56276E04 2.98250E04 1.49413E04 4.15555E02 3.41022E03 5.75339E02 1.69427E03 1.69544E02 4.28346E02 2.11923E03 3.22459E03 4.14571E02 6.04522E02 5.36279E03 1.41992E04 8.67275E03 6.92952E02 6.61445E01 3.66419E02 1.52005E03 6.25209E03 2.92847E03 6.69881E02 8.02821E02 7.03800E02 1.00694E03 2.17115E03 3.71691E03 2.16324E03 1.67935E03 6.23977E03 6.61708E03 1.00576E03 3.04426E02 7.46740E02 1.24598E03 3.53037E02 4.06076E02 7.28201E02 5.27195E02 2.16874E03 1.01025E04 1.27792E04 6.37950E03 1.83483E03 1.29830E02 1.62722E03 5.16340E03 6.85029E03 2.32262E03 7.98392E02 1.46538E03 3.28178E03 2.28587E03 5.96814E01 2.52936E03 2.38304E03 1.17641E03 6.98181E03 6.41396E03 5.12176E03 1.11551E04 9.22996E03 1.85241E03 2.90928E02 1.98483E03 5.95377E03 3.39086E03 3.07149E02 3.16969E03 2.49290E03 4.90717E02 1.79612E02 1.60610E03 1.45130E03 1.06334E03 2.58560E02 5.40724E02 2.54605E03 3.11497E03 2.91924E03 2.75361E03 5.24573E02 5.05988E00 1.20847E03 1.91411E03 1.79294E03 1.38889E03 1.77338E03 3.93561E03 3.58315E03 5.48258E02 8.07021E02 1.19711E03 1.46358E03 2.48570E03 3.22060E03 3.22375E03 2.75394E03 -Frame 257 5.22701E06 2.82904E06 4.09234E05 5.69024E04 1.50769E04 2.15496E04 2.37272E04 3.36922E04 1.54082E04 1.00917E04 1.30660E04 1.46792E04 1.57045E04 1.19220E04 7.13373E03 5.14200E03 1.04531E04 1.55716E04 7.60871E03 7.18354E02 3.55135E01 9.42938E03 1.91245E04 8.58439E03 1.52137E03 2.39849E03 5.60419E03 2.48788E03 1.87836E03 1.04050E03 2.67498E03 5.68279E03 1.00974E04 3.44146E03 5.19325E02 6.44259E03 6.17209E03 9.18104E03 1.05011E04 7.40786E03 5.86176E03 4.82310E03 2.41333E04 3.04909E04 1.22389E04 4.41140E03 7.40106E03 1.48720E04 4.98420E03 4.97326E02 1.08955E04 1.68189E04 8.53685E03 6.44508E03 1.98289E04 2.45900E04 4.46203E03 3.48769E02 5.83728E03 1.88175E04 1.56647E04 3.80835E03 1.98747E03 1.81994E04 4.44345E04 2.72649E04 3.65366E03 5.74076E03 1.18855E04 1.01642E04 6.29755E03 3.15485E03 2.90876E03 3.47260E03 1.26662E03 3.94236E02 4.42742E03 7.23551E03 5.48374E03 8.60474E03 3.71470E04 9.07188E04 5.93060E04 2.37540E04 3.53487E04 6.41754E04 4.58507E04 1.33165E04 6.47854E03 5.72155E03 1.13497E03 8.71061E00 3.58009E02 2.83454E03 5.84707E03 1.92237E03 3.73485E03 1.72418E03 2.79224E03 2.72113E03 2.27388E03 4.36527E03 2.11576E03 4.67039E02 1.34103E03 2.17136E03 1.52517E02 1.93095E02 1.78269E03 1.70272E03 8.75700E02 5.25770E03 3.62558E03 1.46026E03 2.45160E03 3.14279E03 4.14183E03 1.89750E03 2.81887E02 1.12168E03 1.22748E03 4.19761E03 1.92409E04 1.34279E04 4.81863E03 1.40266E04 2.27998E04 1.84436E04 1.03740E04 5.74502E02 4.07949E03 4.92389E03 1.10293E02 1.29553E03 1.01917E03 9.17987E03 5.79354E03 8.08294E03 4.04548E03 6.20275E03 1.55020E04 8.06841E03 4.67329E03 8.78478E03 1.23352E04 1.20810E04 6.12425E03 2.79535E03 1.81349E04 1.21460E04 4.88708E02 1.52945E03 5.09341E03 6.46134E00 9.75325E02 7.38604E02 1.01080E03 1.75651E03 3.89630E02 9.90903E03 3.13173E04 1.93755E04 4.19127E03 6.35568E02 5.33658E03 3.10857E03 7.16423E02 8.61510E02 4.42680E03 2.44682E03 7.92415E02 7.38603E03 1.66549E04 1.08366E04 3.38872E03 1.66032E03 2.41399E03 3.66304E03 7.41075E03 6.00176E03 1.77267E03 2.38725E02 1.07896E03 1.73769E03 2.30501E03 1.08451E03 1.49152E01 3.39418E02 2.49605E03 7.15245E03 5.10235E03 2.19433E03 3.02211E03 1.08752E04 1.43830E04 6.74701E03 2.56749E03 6.68059E02 3.94767E03 1.58026E04 9.83437E03 1.79533E03 6.63502E02 1.61977E03 8.02843E02 1.44336E02 2.20731E03 3.27646E03 1.33765E02 3.26108E02 1.42125E03 1.50948E03 2.48575E02 2.28282E03 3.21763E03 2.26863E03 4.22048E03 2.47746E03 3.07266E03 7.08600E03 4.13848E03 5.55275E02 2.85542E02 2.67764E03 5.75711E03 1.64957E03 3.25503E03 6.49942E03 2.43682E03 7.00547E02 1.36754E03 5.19624E02 2.24314E01 1.10506E02 7.33157E02 1.35576E03 2.01342E03 9.83514E01 2.95524E02 2.23659E03 1.96068E03 1.92245E03 3.99927E03 3.52236E03 1.50467E03 1.11106E03 1.73864E03 3.58848E03 2.90080E03 1.72619E03 1.98620E03 4.58179E03 4.23248E03 4.39302E02 2.45256E02 1.65301E02 1.39754E02 -Frame 257 7.44166E06 2.90966E06 1.71442E05 5.48732E04 8.63318E03 1.01431E04 1.24807E04 1.12062E02 7.06858E02 2.68038E02 2.33470E03 1.81009E03 2.13897E02 2.07293E03 2.80770E03 1.34772E03 2.06378E03 1.15705E03 9.83075E02 3.15435E03 2.42549E03 5.13284E03 1.39969E04 6.54229E03 1.80645E03 2.71589E03 8.47445E03 3.49172E03 2.70057E02 2.30451E02 9.24411E02 4.32758E03 9.48906E03 3.66782E03 2.22246E03 5.96921E03 7.61780E03 7.12641E03 6.47485E03 7.30761E03 4.93502E03 6.19164E03 1.20151E04 2.14223E04 2.25617E04 1.15704E04 9.80804E03 6.53978E03 1.55097E03 8.26955E03 1.85072E04 1.32002E04 2.30513E03 2.97684E03 7.28323E03 3.99229E03 3.18271E03 4.44429E03 1.34980E04 4.76830E03 6.12266E03 1.71079E04 1.67182E04 3.62460E04 4.25747E04 2.12527E04 1.51371E04 1.42440E04 7.28422E03 3.85392E03 6.60894E03 1.78085E03 2.43442E02 1.08795E03 7.83298E03 1.01600E04 2.98056E03 8.56788E03 1.11649E04 5.98019E03 7.58554E03 4.16599E04 6.73634E04 3.31652E04 3.76727E04 3.24003E04 3.35877E03 3.07387E03 1.03620E03 3.12198E03 3.64311E03 1.83867E03 1.57474E02 2.01764E03 6.28272E03 1.15166E04 1.05208E04 2.19509E03 5.09623E02 1.73743E03 1.74522E03 1.17817E03 1.18098E03 7.29316E03 6.28583E03 2.06214E03 1.24876E03 5.44632E02 1.18028E03 8.83798E03 1.35927E04 6.58740E03 1.74865E02 6.31228E02 1.00172E03 3.38064E03 2.69028E03 1.10185E03 6.14377E01 4.47537E02 6.11914E02 6.77060E02 1.81259E03 1.36015E03 3.97500E02 9.70630E03 4.57025E03 6.14590E02 7.23932E02 1.62896E03 1.03960E03 1.43632E04 1.87465E04 9.34756E03 3.17318E03 1.69539E03 3.34538E03 5.95033E03 9.94020E03 1.43503E04 5.27445E03 1.08779E04 2.94320E04 1.34506E04 1.30368E04 2.25503E04 8.52126E03 9.86542E03 2.67234E04 1.64485E04 9.64479E03 9.13499E03 4.22407E03 2.12975E03 2.48037E03 2.09985E03 1.42288E03 1.41581E03 1.38754E03 4.20692E03 1.79626E04 1.60422E03 8.01617E03 6.57530E03 4.75247E03 6.09873E03 3.06997E03 3.97482E03 8.38458E03 6.67090E03 1.05516E03 2.11343E03 6.41434E03 2.72990E03 5.51933E03 4.89631E03 3.24716E02 6.85958E02 6.44325E02 1.02321E04 1.97237E04 1.55037E04 8.09554E03 6.58230E02 3.75502E02 3.37445E02 4.07035E02 8.37106E02 4.48597E02 9.86271E02 2.12422E03 9.41204E02 5.01987E02 6.08073E03 1.00494E04 5.44659E03 3.32135E03 7.48517E03 1.28435E04 4.45609E03 3.89057E02 6.10982E02 1.08195E02 3.23677E02 1.50679E03 2.02277E03 5.68726E03 4.26185E03 1.00903E03 2.57619E03 3.22586E03 1.51645E03 3.07932E03 3.10710E03 1.29916E03 5.52019E02 1.15956E03 1.24364E03 1.73065E03 4.33376E02 3.17630E02 1.65614E02 7.21222E02 2.51909E03 6.70601E02 3.43625E03 1.20505E04 7.88865E03 5.23018E02 3.13757E02 4.85634E02 7.87919E00 9.16136E02 2.62637E03 6.12530E03 6.64446E03 4.23827E03 4.32019E03 4.25470E03 9.82725E02 2.85724E02 1.20489E03 8.16977E02 2.64153E02 1.39461E03 5.94009E03 8.37530E03 1.58907E03 4.37739E02 4.42399E02 5.44771E02 1.50784E02 1.20306E03 1.58635E03 1.05914E02 1.76355E02 1.35921E02 -Frame 257 3.16645E06 1.40829E06 4.26948E04 5.01402E04 1.37815E04 8.23510E02 1.90200E04 2.31813E04 7.40952E03 1.64401E03 4.29379E02 4.61483E03 4.32405E03 4.66948E03 1.96679E03 2.58506E03 4.17237E02 8.12821E02 3.10614E02 8.16091E02 3.28171E02 2.74535E03 3.31658E03 4.36950E02 2.53013E03 6.87840E03 5.95642E03 8.91946E02 9.71289E02 3.40764E03 3.06480E03 5.90822E02 2.51989E03 4.19689E02 1.24035E03 1.37110E03 9.68157E03 7.93258E03 2.93599E03 2.46712E03 2.50364E03 3.50150E03 7.22268E02 9.18227E02 1.25679E03 5.61897E02 5.08086E03 7.29780E02 9.75031E02 3.18518E03 1.51094E02 3.37589E03 3.78808E03 4.51576E03 6.21011E03 6.33767E03 5.83331E03 6.32048E03 7.15789E03 3.32475E03 4.82743E03 1.05607E04 4.36296E03 1.54358E04 8.59470E03 1.37595E02 5.25028E03 4.32035E03 2.88809E02 8.40424E02 1.26246E03 9.43042E03 5.09732E03 1.91472E03 8.52700E03 8.90858E03 9.12430E03 1.08176E04 8.27904E03 7.45291E03 6.03132E02 1.15721E04 6.98640E03 1.60271E04 2.14751E04 1.60874E04 1.20047E04 1.58906E03 7.25793E01 1.53365E02 2.07096E02 3.35596E03 2.34925E03 6.06045E01 1.64147E02 6.28497E03 1.26617E04 3.40662E03 9.18974E02 1.36338E03 3.14887E02 1.52662E03 7.82805E03 2.00435E04 1.34259E04 5.62120E03 5.13289E03 1.30427E03 2.73462E03 1.32430E04 8.77074E03 4.68918E03 3.09282E03 9.59564E02 3.59243E03 1.26897E03 2.18445E02 9.36954E01 1.37535E02 5.72857E02 1.53457E03 1.18603E03 6.22629E02 4.88134E02 7.28677E02 4.70832E03 6.63916E03 4.33944E03 4.08923E03 2.15301E03 1.92270E03 1.53597E04 1.87844E04 4.58141E03 2.15137E02 1.47421E02 3.33062E03 4.65074E03 2.24100E03 7.51094E02 2.09251E03 1.76442E04 2.25840E04 5.76960E03 3.48175E02 6.38784E03 2.11545E04 1.61982E04 3.59474E03 6.97574E02 9.97136E02 2.19915E03 3.03153E03 2.27155E03 1.58445E03 3.01774E02 5.02409E02 2.69306E02 3.69904E02 5.73495E03 2.07188E04 3.47452E04 2.68186E04 8.30854E03 1.89993E03 1.29085E03 1.39763E03 1.43496E03 2.46823E02 2.86579E03 1.40928E03 1.34046E03 2.11111E03 1.00442E03 1.96601E03 3.66626E03 6.42145E02 1.77788E02 1.09859E03 2.89861E03 4.19128E02 2.07298E03 1.88634E03 1.52647E03 5.40108E02 1.61348E03 8.57436E03 1.18832E04 6.27771E03 3.00790E03 1.47716E03 2.29254E03 5.59258E02 8.45524E02 3.66203E02 1.94210E03 9.50749E01 6.28268E03 9.07467E03 1.73139E03 6.00009E03 4.79875E03 1.07903E03 1.04777E03 8.66292E01 3.08794E03 6.30753E03 2.03212E03 1.98191E03 2.58934E03 1.10053E03 7.03558E03 3.27146E03 6.10555E02 1.05293E03 1.61107E02 7.64824E01 1.20657E03 2.85056E03 2.16043E03 1.17036E03 4.04327E02 1.68413E02 9.66164E02 8.27218E02 1.58328E03 6.52468E02 2.53722E03 1.31433E03 1.81644E02 7.34923E02 1.05320E03 8.32193E02 4.13911E02 3.08723E03 8.16810E02 9.30678E01 7.76758E02 2.87706E03 2.34471E03 2.52288E02 2.26057E03 4.16743E03 3.33676E03 1.19478E03 1.72060E03 6.53369E03 3.03516E03 1.87014E02 3.97740E02 5.20275E02 9.97472E01 1.45606E03 3.09272E03 6.43701E03 1.22218E04 1.76755E04 -Frame 257 2.61319E05 1.18811E06 3.90421E05 9.92314E03 1.03564E04 3.38415E04 3.43651E04 2.41954E04 8.28237E03 8.74213E02 9.48123E03 1.33154E04 7.10135E03 4.23879E03 4.82349E03 5.77916E03 4.02694E03 1.09718E03 2.22218E03 3.43170E03 2.13227E03 7.83661E02 1.01632E03 4.64282E02 1.29504E02 1.04683E03 1.87926E03 3.23152E02 3.41328E03 4.80328E03 3.62134E02 5.12204E03 7.40677E03 8.77278E03 5.80242E03 1.23073E02 1.36143E03 4.11605E03 9.79610E02 3.35535E02 4.86916E03 4.88200E03 1.66809E03 3.71831E03 5.15746E03 2.78447E03 2.00847E03 2.87119E03 8.27584E02 1.71134E03 7.16875E03 1.95877E03 1.58684E02 4.95002E02 1.42479E03 5.24770E03 2.71559E03 1.57939E02 2.42916E02 1.95792E03 7.49773E03 7.08585E03 1.13322E03 2.12590E04 3.08503E04 1.45672E04 5.62607E03 4.82322E03 1.24652E03 5.69317E02 6.37301E03 8.43338E03 3.76150E03 5.76894E03 1.76260E03 1.92454E02 9.85732E02 9.00151E03 1.40083E04 3.00835E04 4.15857E04 1.76335E04 3.22367E04 6.54910E04 3.29584E04 1.06497E04 8.87019E03 1.25321E04 6.74543E03 3.28808E03 2.90646E03 2.45659E03 2.20799E03 3.84876E03 2.20069E03 2.27472E02 6.70781E03 3.04775E03 2.60869E03 8.05804E03 6.13175E03 5.21153E03 9.95010E03 7.36066E03 3.94787E01 9.55409E02 3.56394E03 6.43717E03 2.86877E03 8.86974E02 1.63599E03 6.14990E03 1.14205E04 3.05182E03 3.21113E03 9.89528E03 7.50391E03 4.48664E03 4.16583E03 2.62334E03 1.37636E02 7.09360E02 4.13933E02 1.30723E03 5.91793E02 2.14941E03 3.88441E03 2.97684E03 2.30086E03 7.94195E02 4.58296E03 7.45594E03 2.76713E03 3.56494E03 7.45976E03 1.35419E04 2.76097E04 1.78918E04 2.15272E03 2.56344E03 1.11438E04 7.18519E03 1.51246E03 1.35710E03 1.91657E02 2.65376E03 1.13627E04 1.44516E04 1.29300E04 1.10618E04 4.66018E03 1.67950E03 2.86962E02 2.93099E02 1.55950E03 2.92714E03 3.03465E03 3.17217E03 3.05316E03 7.80444E02 2.31464E03 5.06162E02 4.79433E03 4.65733E03 2.87973E03 9.33889E02 1.18690E02 1.14879E03 4.59030E03 2.73893E03 7.60537E02 2.64012E03 1.57449E03 1.27706E03 3.35960E03 5.69987E03 1.60604E03 3.80994E02 1.60394E03 3.44573E03 7.11617E02 1.69805E03 6.30702E03 9.87768E03 1.06122E04 1.74807E04 1.13496E04 4.25893E02 6.06111E03 4.39331E03 9.26149E03 3.64978E03 2.95656E03 1.13886E04 1.25730E04 1.13489E04 5.44940E03 8.22130E03 1.13068E04 1.20960E04 1.57342E04 5.78744E03 4.62564E01 8.87866E02 4.45759E03 5.00512E03 3.34672E02 1.03748E03 2.81670E03 3.98224E03 6.03714E03 6.93657E03 5.07743E03 4.33494E03 2.30311E03 8.60900E02 4.32675E02 8.28180E02 2.03670E02 2.93535E02 1.93088E03 2.95987E03 3.06601E03 1.79302E03 7.75653E02 4.94277E02 1.36325E03 1.46453E03 9.63756E01 1.75571E02 4.73072E02 5.09686E01 1.92256E02 1.13477E03 2.49629E03 2.77166E03 1.95649E03 1.02869E03 1.59075E03 3.14922E03 3.69794E03 2.33628E03 1.20149E02 4.52791E02 3.86523E01 2.93133E03 5.38999E03 1.93102E03 2.88918E03 2.54898E03 2.46369E02 9.13127E02 1.43936E03 7.29822E02 4.82482E03 7.77009E03 7.34771E03 -Frame 257 7.86562E06 3.73125E06 2.82292E05 6.80856E03 8.10170E02 1.50538E03 1.34045E03 2.92027E02 2.65371E02 2.37069E03 9.37420E03 5.13308E03 1.83082E03 3.85329E02 7.83691E02 2.10098E03 4.29821E02 8.69542E02 3.59976E03 6.94587E03 3.22159E03 1.25467E03 9.94562E02 1.03351E03 2.52724E03 4.42363E03 3.39203E03 1.93806E03 5.20339E03 8.21264E03 5.30376E03 1.45463E03 5.37042E01 3.24181E03 4.56803E03 3.70958E03 2.56382E03 5.53253E03 6.03175E03 4.01486E03 5.65659E03 3.70747E03 7.71367E03 1.46659E04 1.00524E04 1.97238E03 2.57892E02 5.20424E02 5.08122E03 6.57533E03 6.75630E03 1.01206E04 4.76508E03 2.89250E03 1.79653E03 1.96581E03 2.71776E03 2.91138E03 1.48998E03 2.17139E03 7.79888E03 6.60583E03 1.12804E02 5.18297E03 1.59426E04 8.10537E03 7.93330E02 8.95832E02 4.85959E02 1.55267E03 2.76160E03 4.34840E03 4.24253E03 2.01429E03 2.36227E02 3.33470E03 5.24334E03 2.84645E03 4.40461E03 5.76061E03 1.14027E04 1.76526E04 2.21929E04 1.99316E04 2.49180E04 1.54468E04 6.47945E03 3.61309E00 8.72051E03 6.55489E03 4.89608E03 4.98562E03 4.81111E03 4.85695E03 6.64487E02 8.26279E03 2.11840E04 1.12546E04 3.20423E03 2.68502E03 3.66329E02 1.70748E03 3.52756E02 3.40255E03 4.38072E03 4.13609E03 4.07583E03 3.77552E02 9.45401E02 3.07112E03 7.64564E03 2.86986E03 5.36833E03 1.87155E04 7.88263E03 4.77109E02 7.14017E03 1.47697E03 6.27323E03 6.68617E03 3.22569E03 6.83801E02 2.61539E02 2.39043E03 1.16464E04 1.63307E04 6.22781E03 6.65134E02 9.77824E03 1.19520E04 4.15651E03 3.84403E03 1.00414E04 6.99003E03 2.39655E03 3.51529E03 1.20171E04 1.56981E04 1.75298E03 3.25219E03 6.88775E03 2.62121E03 7.39098E03 1.07185E04 4.51197E03 5.19102E03 2.40276E03 3.82790E03 2.10985E04 1.16669E04 3.18738E03 3.47823E03 5.22754E03 2.94766E03 1.54112E03 1.72135E03 4.61552E02 5.86630E03 1.40943E04 1.38113E04 1.09298E04 6.32727E03 4.57640E03 4.27461E03 2.01315E03 3.53746E03 4.09306E03 7.85323E03 1.38406E04 5.09736E03 8.00337E02 8.37586E02 1.72587E02 5.76627E02 2.09320E01 2.87079E03 6.33247E03 4.75835E03 1.90654E03 1.01766E04 2.03953E04 1.70978E04 7.43406E03 1.14097E04 6.57441E03 4.07438E03 4.13175E03 3.50360E03 4.56578E03 3.92662E03 5.11551E03 7.54834E03 5.96710E03 6.74519E03 8.80147E02 1.52805E03 6.27007E03 1.35397E04 9.37697E03 9.43399E03 1.23757E04 3.97200E03 9.27825E02 1.86224E03 6.17549E02 1.66143E03 1.04143E03 3.02262E03 3.88791E03 1.42042E03 3.06935E03 2.18930E03 7.91165E02 8.73192E02 1.45411E02 9.21746E02 2.30982E03 1.93178E03 1.57535E03 2.29321E03 8.63260E02 1.33864E03 7.88089E02 8.47350E01 2.29105E03 6.18199E03 8.71641E03 4.67237E03 1.70624E03 1.94027E03 7.22839E02 4.93889E02 3.36807E02 2.19436E02 7.87159E02 1.86792E02 1.41161E03 1.51672E03 2.86340E02 7.58301E02 2.98654E03 5.47881E02 6.79954E02 5.22574E02 1.31358E03 7.32780E03 3.49949E03 1.66863E03 7.38282E03 1.60425E03 1.85962E03 1.80479E03 1.06936E02 1.03521E03 5.98268E01 1.53705E02 1.73604E02 -Frame 257 5.90076E06 2.67391E06 1.61314E05 2.31478E03 6.51178E02 2.34997E03 1.32983E03 7.01986E02 5.13020E02 2.92787E03 1.75789E03 2.92266E01 2.37327E02 3.87225E02 4.04654E02 1.40438E02 7.02327E02 1.53885E03 2.42455E03 4.42073E02 5.30457E02 2.29018E02 4.05297E02 7.19221E02 3.59853E02 7.51947E02 1.72541E03 1.32724E03 2.36358E03 3.08661E03 1.26720E02 2.05126E03 1.01940E03 2.92819E03 3.30529E03 3.01460E03 1.24416E03 1.22101E03 9.31999E02 6.93876E02 7.15113E02 1.00252E03 6.26466E02 2.24856E03 4.17928E02 2.13981E03 1.54094E03 4.04827E03 6.80763E02 1.55903E03 4.29268E03 1.14498E04 6.87821E03 7.81746E03 1.74208E04 2.02713E04 1.81955E04 7.23105E03 1.39398E03 5.14937E02 2.00145E03 6.02542E03 1.20438E03 7.70798E01 2.91840E03 6.21962E03 2.53760E03 2.06994E03 2.14161E03 7.06100E02 1.64923E02 6.30286E02 4.87366E03 4.91914E03 1.20454E03 3.22544E02 1.85898E03 5.01363E03 2.36336E03 1.03643E03 4.90188E01 5.57890E03 4.24439E03 1.60911E02 1.91929E03 5.71922E03 1.69572E03 4.70311E03 9.22179E03 3.86031E03 3.28987E03 4.66674E02 2.11176E03 1.70765E02 7.22245E03 1.94261E04 1.99664E04 7.18912E03 1.50672E03 1.39751E03 4.16637E03 2.35501E03 3.02317E03 6.41666E03 4.61530E03 8.04959E03 1.02309E04 3.87301E03 1.10332E03 1.01505E03 8.01759E03 7.38575E03 3.79915E03 2.97370E03 4.65843E03 6.49048E03 4.50324E03 3.23986E03 4.98736E03 1.74085E03 4.45619E03 5.84952E03 4.25089E03 6.75833E03 1.72617E04 5.21566E03 1.36279E02 8.74961E03 2.27664E04 9.50968E03 6.22101E02 2.51295E03 4.70504E02 6.12032E03 6.86623E03 5.23866E03 3.45839E03 2.06819E03 4.56974E03 2.30816E03 1.23037E04 1.55580E04 1.11353E04 8.11375E03 8.61225E03 1.31652E04 1.60432E04 1.64696E04 3.55329E04 3.85848E04 2.74631E04 1.91682E04 1.14177E04 3.16893E03 8.98141E02 1.19398E03 3.18024E02 4.85038E03 3.26672E03 2.89472E03 1.27089E04 6.49946E03 9.17913E03 7.91473E03 4.79140E03 3.42719E03 3.15642E02 1.00029E04 1.56113E04 4.85813E03 6.30725E02 1.95126E03 1.55576E03 6.53742E01 1.70406E02 2.79970E02 4.46211E03 5.77578E03 3.06910E02 7.39871E03 1.56526E04 2.26138E03 9.45687E02 7.34609E03 1.46454E04 8.46707E03 3.00214E03 9.01287E02 7.22655E02 2.71285E03 5.50707E03 2.28187E03 6.83492E02 2.14398E03 1.36001E03 1.51349E03 2.57093E03 5.51663E02 4.20115E03 7.53677E03 1.17242E03 1.16537E01 8.35897E02 1.49441E03 9.96997E02 2.47457E03 3.84105E03 4.41706E03 1.85417E03 3.77998E02 2.43698E03 5.82784E02 5.16458E02 1.28710E02 2.05949E02 5.85580E02 2.22156E03 5.49982E03 1.76572E03 1.21027E03 5.69495E02 8.70621E02 1.46814E03 2.34583E03 3.42967E03 5.29273E03 7.06730E03 1.01463E03 1.20439E03 6.51257E03 6.64700E03 2.41946E03 1.20580E03 1.74270E03 7.89289E02 5.73075E00 1.32171E03 1.45700E03 9.98877E01 1.53106E03 3.73326E03 6.94715E02 2.20590E03 3.40610E03 6.18298E03 4.99088E03 3.25208E03 8.37949E03 7.08016E03 1.83845E03 1.00997E03 3.55273E03 4.07498E03 1.32088E03 5.95371E01 1.51396E01 5.03829E01 -Frame 257 2.31015E05 5.32122E05 1.33744E05 4.09026E03 2.51780E03 2.88069E02 5.50208E02 5.30617E02 2.31181E03 2.39835E03 7.20273E01 1.03305E02 5.78548E02 1.49355E03 2.92583E02 4.48696E02 1.74740E03 2.51958E02 7.66693E02 9.96689E02 5.61593E02 2.76065E02 6.83606E02 1.26439E03 7.82724E02 1.39481E03 3.42109E03 4.42086E03 1.93126E03 5.23410E02 5.68007E02 1.63151E03 1.05049E03 6.03147E02 7.61819E03 9.42009E03 6.59943E03 4.55208E03 3.80658E03 1.61168E03 2.23235E03 5.15138E03 4.28669E03 5.21229E03 7.35152E03 5.81912E03 2.85529E03 3.09896E03 2.92587E03 1.65090E03 6.86684E02 9.01469E03 5.88138E03 2.45314E03 3.12845E03 6.76011E03 4.25563E03 3.57079E02 7.68225E02 1.39285E03 3.74830E03 6.40804E03 1.08963E04 1.21673E04 1.01778E04 1.65398E03 3.67856E02 8.06295E02 7.15872E02 2.43651E03 2.55520E03 5.70232E02 5.77069E02 2.26468E03 1.62474E03 1.46808E03 1.41332E03 2.78468E03 6.40815E02 2.72887E02 2.02829E02 6.40722E03 9.83845E03 5.98252E03 7.95050E02 2.60041E03 5.99720E03 8.17008E02 3.02084E03 5.43929E03 2.04858E03 2.40290E03 8.17986E03 7.11010E03 7.21056E02 2.00182E03 2.14022E03 1.62354E03 4.59771E03 1.84824E03 5.21415E03 6.72704E03 4.12264E03 4.46344E02 4.87644E03 5.75296E03 3.99839E03 2.73654E03 1.70997E03 4.29397E03 3.29173E03 1.86955E03 7.15036E02 6.81175E02 8.13338E01 6.23566E02 2.23239E02 1.85605E03 3.21877E03 5.55101E02 3.11451E03 1.47057E03 7.23653E03 1.23678E04 7.69400E03 4.17953E03 8.30519E02 5.20410E03 1.31051E04 1.14745E04 1.32732E03 1.44011E03 4.66575E03 1.67729E03 3.59390E03 3.62717E03 1.12170E02 2.93602E03 2.40691E03 2.01921E03 1.39937E04 2.54128E04 7.44998E03 1.26668E03 3.76235E02 1.93409E03 7.62718E03 4.07842E03 1.32928E04 1.06535E04 2.31355E03 5.04259E03 2.45657E03 5.90496E03 3.41877E03 4.06230E03 1.35902E03 5.54704E03 7.93854E03 1.25999E03 2.92733E03 5.03276E03 1.48115E03 3.47040E02 3.22863E00 2.76333E03 7.57684E03 1.26722E03 3.27503E03 2.66514E03 1.55766E02 1.23026E03 3.26717E03 3.18782E03 3.12612E03 2.04054E03 4.69794E03 9.99108E03 1.10150E04 1.66264E04 1.12013E04 1.26909E03 1.33212E03 1.11026E04 1.02247E04 1.67787E03 6.38531E03 2.24858E03 3.45980E03 4.70519E03 2.14945E03 1.95392E03 2.33418E03 6.69216E03 7.78561E03 6.70936E03 5.10760E03 3.36362E03 3.55144E02 3.61165E03 3.07055E03 2.26090E03 4.89326E03 6.30524E03 4.95450E03 4.65419E03 1.12899E03 3.26206E02 1.99030E03 7.32253E02 8.62081E02 4.27334E03 3.34933E03 7.55637E02 5.57287E02 3.67551E02 4.94372E03 6.42208E03 1.64998E03 2.54462E02 3.40003E02 1.68289E03 3.28073E03 2.65408E03 1.05823E02 8.92624E02 4.18095E03 1.86897E03 9.67292E02 3.13755E03 1.81521E03 2.70394E01 2.26921E02 4.53278E02 1.58572E03 4.61067E02 4.33408E03 1.19396E04 1.19898E04 1.25069E04 1.07921E04 5.45149E03 1.10290E03 1.32042E03 2.03757E03 3.07900E02 1.32684E03 2.46175E03 7.75911E02 9.07524E01 3.68054E02 1.47770E03 6.35839E02 4.43846E02 1.02978E02 9.41363E01 2.88074E02 -Frame 257 1.36544E06 6.69083E05 4.14869E04 7.30118E03 7.95964E02 2.60113E03 7.39742E02 2.12991E02 3.82872E01 6.98275E02 7.70007E02 2.22860E02 1.57062E02 5.21386E02 1.42575E03 1.26219E03 2.64307E03 6.88810E02 2.79341E02 7.15228E01 3.44107E01 8.42045E00 2.37840E02 1.91754E02 2.37627E02 3.88494E02 5.31428E02 5.46300E02 3.10254E02 6.78186E01 4.55527E02 7.94771E02 3.64398E01 1.12832E03 2.40675E02 3.13305E03 7.17021E02 3.10773E03 7.88222E03 5.58345E03 4.18640E03 2.05158E03 3.23530E02 9.77926E02 1.04136E03 4.21170E03 2.81451E03 5.87262E02 1.51066E02 1.31268E03 3.94162E03 5.10878E03 2.51610E03 1.92320E03 2.72813E03 3.98036E03 3.94932E03 6.99798E03 6.34186E03 6.21818E03 2.06815E03 9.79980E02 3.01562E02 4.83166E03 1.09569E04 5.96560E03 2.44471E03 2.21311E03 1.60074E03 3.21104E02 1.28570E03 7.96554E02 1.40604E03 1.68430E03 9.13116E01 2.05961E03 1.56494E03 1.63084E03 1.32230E03 1.26216E03 2.67793E03 5.76917E03 4.53126E03 1.59500E03 5.52581E03 1.14540E04 1.03746E04 2.61216E03 5.16707E03 7.20705E03 3.47954E03 1.91322E03 7.67376E02 1.20158E03 2.77167E03 3.63116E02 6.89082E03 8.95158E03 1.26897E03 1.36076E03 5.72957E03 3.80199E03 7.77978E02 3.79078E03 3.83765E03 3.54951E02 6.52615E02 4.47145E03 5.08089E03 2.89090E03 1.61292E03 1.31210E03 3.00421E01 1.92870E03 5.11088E03 6.78208E03 7.87362E03 7.89501E03 4.58522E03 1.30079E03 2.07627E03 5.30812E03 2.27075E03 1.44261E02 6.62279E02 1.53857E03 2.24704E03 5.57963E02 1.35763E03 1.36160E03 9.22069E03 5.58554E03 6.68665E02 2.24185E03 6.51015E03 3.71703E03 4.17953E03 3.17618E03 3.18875E03 1.65007E03 5.41630E03 2.05096E04 1.59287E04 1.16524E03 2.46054E03 7.12906E03 2.16217E04 5.15859E04 7.08348E04 3.77543E04 3.41117E03 7.35247E02 1.07249E03 1.62606E03 2.89242E03 5.33825E03 4.63170E03 3.45477E03 4.85058E03 1.89484E03 1.27792E02 7.79765E02 8.26135E02 5.13029E02 5.15972E01 2.75319E03 7.16656E03 7.77548E03 6.42291E03 4.71210E03 5.00816E03 2.46259E03 2.67951E03 1.39123E03 5.12977E02 3.41333E03 7.40310E03 6.42990E03 4.47741E03 3.66781E03 2.91792E02 1.29305E03 1.47849E02 3.73858E03 6.06265E03 1.10006E04 9.67109E03 5.88540E02 1.49889E03 9.38555E02 4.13407E02 6.25044E02 2.60469E02 4.87880E03 3.60886E03 3.88197E03 1.63677E03 1.93350E03 8.83379E02 3.53124E03 4.56155E03 9.71894E02 2.25039E03 1.10404E03 1.27504E03 3.10422E03 1.86583E02 7.81618E02 1.26740E02 1.09484E03 3.58530E03 1.01906E03 6.17690E02 4.15572E03 4.73536E03 4.19188E03 4.46870E03 4.41269E03 1.41978E03 2.39047E03 4.79076E03 1.91842E03 7.81295E02 1.12320E03 1.37876E03 4.04010E03 5.53929E03 1.05607E03 2.13570E03 1.95380E03 2.14613E02 1.01953E03 2.70791E03 2.50806E03 7.61038E02 3.41981E03 6.35718E03 1.80700E03 1.54055E03 1.32173E02 1.35943E03 3.00736E03 2.04349E03 3.92760E02 7.33181E02 2.10084E03 1.28798E03 9.33553E02 6.21383E02 3.86196E02 7.04393E02 6.90245E02 1.44333E02 2.85668E02 9.64622E02 3.64257E03 6.03507E03 -Frame 257 3.77675E06 1.79797E06 2.17287E05 2.03885E04 1.05966E03 5.87825E01 2.65224E02 5.37612E02 5.29298E02 1.00528E02 7.65885E01 1.33233E02 2.38657E02 9.25177E02 5.47395E02 2.23557E02 5.63854E02 2.87121E02 4.71995E01 1.40502E02 4.83051E02 2.24814E02 2.87939E00 3.30301E01 3.23808E02 5.76483E02 1.84406E02 1.32984E02 7.63196E01 1.05456E02 1.03672E03 2.96696E03 2.06596E03 1.86095E03 5.34437E03 6.66747E03 2.24161E03 6.51534E02 6.55138E02 3.25868E03 1.27927E03 2.92843E03 2.83695E03 8.37190E02 3.60563E02 3.55753E03 3.42976E03 3.12658E02 4.62030E02 1.01127E03 1.16795E03 1.19732E03 3.41135E03 4.93332E03 5.06924E03 3.41007E03 3.80761E03 6.87629E03 2.77393E03 2.39353E03 4.85516E02 1.93617E03 1.24378E03 9.58277E02 3.94158E03 5.96223E02 1.28150E03 6.35312E03 5.09356E03 6.60459E02 1.60763E03 6.29399E03 5.67068E03 5.96440E03 4.27400E03 1.84336E02 6.75035E02 3.01697E02 7.84450E02 1.32487E03 1.64038E03 2.92627E03 4.14171E03 3.94425E02 1.08521E03 2.65039E03 4.37559E03 1.71249E03 5.67780E03 3.10427E03 3.64578E03 2.72804E03 2.58311E03 1.47010E03 1.97040E02 6.86029E03 9.48914E03 3.27601E03 2.72912E03 1.79958E03 6.24596E03 3.58468E03 2.79580E02 1.04505E03 2.40666E03 2.09891E03 1.61999E03 5.09676E02 2.84040E03 3.84201E03 7.37481E03 3.89908E03 7.77323E02 2.09370E03 4.22113E02 3.85572E02 4.91635E02 5.88080E02 1.10975E03 9.69623E02 7.56787E03 1.76376E04 8.50966E03 2.89738E02 1.09238E03 3.66588E02 2.45198E02 3.44388E03 1.03991E04 6.92623E03 2.90264E03 1.95143E03 8.48186E03 1.59279E04 6.68498E03 2.05889E03 7.35045E02 5.04871E01 3.46893E02 3.23307E03 6.53484E03 1.91845E03 1.54296E03 1.20260E04 1.30991E04 1.04746E04 2.93821E04 4.88408E03 2.90452E04 2.99361E04 4.55494E03 3.14272E02 8.52149E02 3.51689E03 4.42598E03 1.01084E03 4.00592E02 1.34509E02 2.35291E03 5.15422E03 3.03919E03 4.88826E03 1.42378E03 5.52687E02 2.15740E03 1.45302E03 1.74203E02 2.30366E02 6.60129E02 7.54938E02 3.51994E03 1.02356E04 7.64024E03 7.15940E02 7.67090E02 1.66662E02 1.84493E02 2.54398E03 2.31364E03 3.18331E03 2.50703E03 3.62573E01 2.29441E03 5.21092E02 4.22064E01 1.07573E03 8.64259E03 1.07305E04 2.08030E03 2.92372E01 1.78172E01 1.23792E03 7.62167E03 8.17699E03 4.72017E03 5.40769E03 2.06859E03 3.78437E02 2.87787E03 3.13869E03 9.57067E02 1.58703E03 2.17776E02 3.00954E02 1.08351E03 5.02595E03 5.52131E03 6.46585E02 8.83887E02 1.11921E03 7.24044E02 1.38787E03 2.68858E01 8.47432E02 2.64382E01 1.20996E03 3.37111E02 1.01859E03 3.43133E03 1.87126E03 1.31672E03 4.83754E02 1.31501E03 1.43858E03 2.19263E03 7.88222E02 2.43954E03 7.45898E03 5.31828E03 1.93315E03 5.26884E02 6.64805E02 2.05274E03 2.33509E03 6.48315E02 2.95003E02 2.30294E03 2.57737E03 1.31817E03 8.56198E02 1.05355E03 2.05243E03 1.53454E03 2.09553E03 1.53630E02 1.44791E03 1.04883E03 5.64312E02 1.49275E03 1.28414E03 9.59408E02 4.54021E02 8.56701E01 8.82248E01 1.36343E02 2.41973E03 6.57599E03 -Frame 257 1.40579E06 6.25284E05 1.28405E04 8.98073E03 1.14062E03 4.16249E02 1.10067E03 1.74877E03 1.28954E03 1.48052E03 2.19809E02 3.35122E02 3.75780E02 2.13161E03 6.49978E02 3.49092E02 7.01157E00 3.66514E02 9.17425E02 5.87726E02 1.98395E02 4.02991E02 1.33149E03 1.20989E03 1.53972E02 1.42145E03 3.32093E03 2.17170E03 1.72353E03 2.63860E03 8.66767E02 1.39546E03 3.92019E03 3.77868E03 2.20584E03 6.36701E02 5.97238E03 6.81177E03 4.89201E03 4.49009E03 2.84343E03 2.15433E03 1.19451E03 1.42899E03 2.29451E03 1.84598E02 2.34455E03 2.43655E03 1.36747E03 3.62901E03 4.71454E03 3.24606E03 5.54643E03 2.53213E03 2.41665E02 1.09714E03 4.40414E03 4.22932E03 3.00203E03 3.06632E03 1.77532E03 1.20771E03 5.77541E02 4.20403E03 9.22017E03 5.50229E03 3.41798E03 2.31786E03 1.78596E03 7.92944E03 5.83130E03 1.24573E03 1.38105E03 2.03675E03 4.53679E03 4.69592E03 1.56153E03 3.37755E02 2.38680E03 1.02791E03 2.65894E02 4.13750E03 8.19024E03 6.99047E03 6.36200E03 6.88269E02 3.46700E03 1.37572E04 2.66130E04 1.87964E04 7.43375E03 8.80842E03 4.59662E03 1.64187E03 4.41675E02 2.73284E03 4.46320E03 2.59171E03 4.22071E03 8.06849E03 3.41599E03 7.93647E02 3.85552E03 8.48351E02 2.12314E03 1.71629E03 3.67130E03 7.43735E03 1.22943E04 5.60349E03 2.73499E01 3.16856E03 9.26161E03 4.41344E03 6.74681E02 8.08550E02 2.83548E03 6.50389E03 5.31578E03 2.23532E03 3.22784E03 1.18700E04 9.85681E03 2.58451E03 8.04427E02 1.23958E03 3.69759E03 1.09548E04 1.93903E04 8.51487E03 2.68105E03 6.76644E03 1.64189E04 1.28084E04 2.18714E03 2.78155E03 2.00571E03 1.12947E03 1.31358E03 4.09485E02 8.68529E02 3.06235E02 9.55059E02 1.47188E03 1.07305E04 1.21283E04 1.44905E04 8.82086E03 2.48759E04 1.84956E04 3.16559E03 3.06619E03 3.23094E03 7.17677E02 6.69160E02 4.29814E03 4.52669E03 4.85524E03 3.45839E03 7.37660E03 2.17965E04 1.84067E04 9.98904E03 5.45877E03 4.92197E03 3.70297E03 1.70518E03 3.18487E02 8.04497E02 2.42030E03 4.82045E02 2.96163E03 2.46134E03 2.44855E03 1.14955E03 1.43329E03 1.61504E03 1.73598E03 4.84667E03 3.93861E03 1.42317E03 1.21437E04 1.87967E04 1.28813E04 4.50748E03 2.68282E03 4.84913E03 3.64511E03 1.58777E03 1.70796E03 1.94777E03 6.21888E03 1.06208E04 3.19578E03 4.85243E02 3.51651E03 2.20747E03 1.69645E03 2.20639E03 4.45448E02 3.27851E03 3.65101E03 6.81662E02 4.00787E01 2.83273E02 2.34932E03 3.46989E03 5.99580E03 5.44302E03 1.68143E03 6.97621E02 1.76469E03 2.44958E03 1.68529E03 2.65994E03 1.75349E03 2.17005E02 8.80458E01 2.31223E03 2.74253E03 2.47001E03 1.65443E03 5.96004E02 9.93319E02 9.91718E02 1.56211E03 4.67780E03 4.76159E02 2.58451E03 1.73825E03 9.37920E02 9.21344E01 1.86941E02 1.64758E03 1.99055E03 4.49060E02 5.29365E02 3.16116E03 2.13193E03 1.81154E03 3.49277E02 1.54738E03 6.06451E03 5.21276E03 1.08966E03 6.96314E02 1.77220E03 1.08557E03 1.70173E03 1.79696E03 1.16396E03 4.55627E02 2.85769E02 3.62231E02 2.54554E02 1.15775E03 2.68415E03 -Frame 257 1.07000E04 2.48284E05 1.13534E05 1.90762E04 3.53484E03 1.57184E01 1.12938E01 6.77612E02 1.50155E02 1.85998E02 5.81837E01 1.39872E02 7.98517E02 1.02532E03 3.06052E02 5.30804E01 1.61426E02 1.06724E03 1.76920E03 4.79678E02 7.73380E01 9.46470E01 3.45758E02 2.54890E03 1.42957E03 4.48639E02 1.60982E03 2.58036E03 2.81233E03 4.84996E03 3.18133E03 1.40314E03 1.64870E03 1.96198E03 4.66246E02 4.13591E02 2.26056E03 1.29373E03 9.04750E01 1.76934E03 1.21640E03 4.28294E02 9.04692E02 4.69902E03 1.34840E03 1.46462E03 1.56345E03 2.81480E03 3.01428E03 1.41320E03 1.54372E03 3.75135E03 4.42643E03 4.32628E03 6.80447E03 1.83698E03 7.30519E02 2.38669E03 2.25186E03 9.25454E02 1.02001E03 5.65877E02 9.76896E02 3.39494E03 6.76528E03 7.06726E02 2.05194E03 2.60341E03 1.47122E03 3.26850E02 5.79572E03 5.82108E03 3.28242E03 8.73493E01 1.29870E02 3.44632E03 1.96878E03 7.72721E02 3.13319E03 1.02968E03 6.05006E02 2.07198E03 6.38375E02 1.46214E02 9.89402E02 2.54119E03 5.08437E03 9.86157E03 4.92050E03 6.75858E03 5.64410E03 4.16177E03 6.69739E02 3.93188E01 1.01882E03 1.93535E03 5.52338E02 7.27829E02 3.28733E03 7.58398E03 1.13185E04 6.03335E03 4.46976E03 2.08452E03 1.58429E03 4.73653E03 1.00332E03 2.21232E03 6.75005E03 3.34560E03 2.74466E02 1.28312E03 5.57524E03 3.69013E03 2.82225E02 1.70501E03 4.30172E03 6.71131E02 2.25467E03 7.68229E02 1.31621E03 2.38171E03 6.85429E02 8.43844E02 2.68783E03 6.91350E03 1.11964E04 8.17347E03 3.49864E03 1.45941E03 6.32808E02 2.94705E03 1.97545E03 1.66846E03 4.96270E03 1.05749E03 1.19656E02 4.98569E02 9.85386E01 7.39824E03 1.96812E04 1.67040E04 1.12544E04 4.92678E03 1.84662E03 4.90170E03 8.59616E03 2.08774E04 3.67032E04 1.67163E04 1.94777E03 1.21036E03 2.85124E01 5.76334E02 1.11286E03 5.98302E02 2.23678E03 8.95635E02 1.21729E03 1.00423E04 1.91339E04 4.77689E03 5.44183E03 1.09444E03 6.21576E02 2.76019E03 2.09820E03 4.07168E03 3.21632E03 4.00814E02 2.05917E03 2.43476E03 1.94816E03 3.88067E03 2.87645E03 2.83798E03 7.29498E03 1.21859E04 2.23427E04 2.27941E04 1.63205E04 6.74850E03 2.40888E03 5.59293E03 5.85634E03 1.57452E03 2.23216E02 5.22033E02 2.95995E02 1.10576E02 8.61198E02 1.49980E02 7.11220E03 4.84516E03 3.21000E03 1.88821E03 2.48766E03 5.20472E03 6.93564E03 5.29245E03 2.06481E03 2.82848E03 2.91284E03 5.79189E02 1.15797E01 1.25377E03 2.91256E03 5.97795E03 4.33034E03 2.20204E01 5.18838E02 3.00408E02 3.50766E02 1.02135E03 3.31246E03 6.68404E03 2.95353E03 2.55509E02 2.10136E03 2.25716E03 1.46012E03 3.61271E02 1.67308E03 2.10389E03 6.56104E02 3.99815E03 1.10859E04 8.47182E03 5.53738E03 5.09191E03 3.56945E03 3.46521E03 3.22191E03 2.68918E03 7.22528E01 1.24601E03 8.22590E01 4.62650E02 2.87422E03 4.40976E03 8.16925E02 5.82071E02 1.62790E02 1.25248E03 1.49529E03 1.39557E03 3.02838E02 1.04813E03 1.21395E03 4.42094E02 1.28056E02 4.77153E01 6.35781E01 4.14745E01 3.21710E02 6.28334E01 8.11060E02 -Frame 257 9.06660E05 3.23587E05 3.92437E03 3.93018E01 8.69408E02 1.83817E03 3.58920E02 3.41892E02 6.79131E02 2.97690E02 1.28164E02 1.57678E01 2.60623E02 1.41273E02 2.45684E02 2.25650E02 6.52721E02 5.38564E02 1.21421E02 1.05915E03 2.11615E03 1.07536E03 1.64755E02 1.07189E03 1.32627E03 1.05507E03 6.49831E02 1.62127E03 4.11047E03 1.48947E03 1.54349E03 3.32944E03 2.82257E03 1.86281E03 2.67508E03 2.31151E03 8.21749E02 7.32361E02 2.19809E02 3.74074E02 1.30261E03 4.18506E02 6.33734E03 9.30359E03 2.72949E03 7.40532E02 1.19237E03 3.57823E03 1.86381E03 7.72641E02 5.49786E03 1.12749E04 7.97687E03 4.39765E03 9.00548E03 8.52864E03 8.20018E02 2.11974E03 2.63207E03 8.76169E02 4.15379E03 1.43203E03 1.30839E03 1.65591E03 7.43973E03 5.43395E03 7.79324E02 1.10443E02 2.87893E02 2.25741E03 6.55697E03 2.23233E03 5.47371E02 3.51783E03 6.92347E03 1.26177E04 1.23407E04 1.09115E04 8.60421E03 2.24455E03 9.98911E02 1.70082E03 2.56892E02 2.10698E02 5.95161E02 1.33051E03 2.70572E03 2.32633E03 6.10360E02 2.20980E03 9.92469E02 4.99866E02 1.90374E03 1.71429E03 3.39248E03 4.41515E03 2.60631E03 6.71519E02 5.94391E02 1.48095E03 5.37307E03 4.74337E03 3.07552E03 6.72584E03 8.78255E03 4.54235E03 4.70790E02 2.45582E03 1.11828E03 1.97562E03 2.85020E03 2.66457E03 2.85217E03 2.01728E03 1.62971E02 2.42042E03 6.03771E03 7.94716E03 1.32393E04 1.17721E04 4.44119E03 5.98031E03 7.70702E03 6.99585E03 2.76526E03 6.72814E02 2.04520E03 2.77266E02 3.37512E01 1.53864E02 8.95293E02 3.94978E03 1.26505E04 9.50897E03 9.44381E02 1.55563E03 1.09048E03 1.93548E03 9.42874E03 2.18693E04 9.94783E03 3.06525E03 2.19157E03 3.95116E03 1.28843E04 5.87626E03 2.26988E03 6.97172E03 4.22177E04 1.13664E04 5.98786E03 5.77286E03 8.93745E02 1.20094E03 4.73640E03 7.65897E03 6.66359E03 3.47344E03 5.99208E03 1.32183E04 1.82899E04 1.17083E04 2.77552E03 1.52129E01 7.54713E01 4.31538E03 8.11534E03 2.20761E03 1.36031E03 4.51706E03 3.20929E03 1.11658E03 2.14325E03 6.25597E03 3.80070E03 1.76580E03 5.39838E03 8.19252E03 2.27004E02 4.19704E03 6.61115E02 3.86085E03 6.26301E02 3.13994E02 1.77674E03 7.29643E03 4.72158E03 1.45043E03 1.05261E03 6.08061E02 4.37451E03 1.49634E04 1.24438E04 4.09322E03 1.56395E03 4.66001E02 4.54854E03 7.47776E03 1.15055E03 6.96937E03 3.05703E03 5.47160E01 1.37156E03 5.20883E02 1.82994E02 1.80968E03 1.01059E03 2.68805E03 8.70067E03 5.44305E03 6.26774E02 7.18634E02 1.73577E03 6.79131E01 1.73985E03 5.56157E02 3.80987E03 9.60097E03 4.09727E03 9.05742E02 2.94443E03 6.20069E03 2.50581E03 3.24528E03 6.19593E03 9.29207E01 7.29886E03 9.90751E03 7.26966E03 4.59449E03 2.14015E03 2.03128E03 1.78677E03 5.41110E03 8.19301E03 6.26593E03 2.57713E03 1.15626E03 4.06354E03 7.64194E03 2.81780E03 2.52936E02 1.89965E03 4.77239E03 4.55457E03 6.94273E03 5.53196E03 6.82585E02 2.84151E03 1.93128E03 1.36194E02 3.64228E02 1.22709E03 8.50748E02 4.10644E02 2.73432E03 4.20725E03 -Frame 257 1.46299E06 7.85690E05 1.19786E05 1.08553E04 4.95203E02 1.69724E03 5.04483E03 3.66644E03 8.45043E02 8.98824E00 1.18682E02 3.77258E02 6.16678E02 6.08971E02 2.45396E02 1.51028E00 6.65676E02 1.12782E03 7.88068E02 8.19547E01 5.06688E02 1.46632E03 2.77188E03 2.31824E03 9.52284E02 1.14651E03 5.93611E02 2.45102E02 3.61614E02 1.86826E03 9.96488E02 9.35584E02 4.30473E03 9.28677E02 4.63257E02 8.97958E02 1.11229E03 1.14121E02 1.02812E03 1.79297E03 2.49031E02 9.00285E02 7.09006E03 1.61681E04 6.78856E03 1.00098E03 1.31792E02 1.86494E03 2.52232E03 1.94339E03 7.39658E02 3.91580E03 4.10575E03 1.65258E03 3.97235E03 2.69244E03 1.60255E03 2.52174E03 4.14298E03 4.32342E03 6.32207E03 5.41696E03 3.62777E03 5.91072E03 3.93966E03 8.24459E01 4.27454E02 9.23986E01 3.33883E02 1.08662E03 2.92328E03 5.29100E03 7.07487E02 2.48208E03 1.73841E02 1.95659E03 4.24625E02 3.16430E02 1.34544E03 5.50040E02 4.18262E03 1.76785E03 1.48563E00 4.42558E02 3.03780E02 7.99421E02 4.94604E03 3.76338E03 2.55575E03 3.87674E03 7.34997E02 1.08456E03 1.21600E03 4.47724E02 7.82134E01 9.20604E02 3.11679E03 1.51652E03 1.06392E03 2.88383E03 4.12448E03 2.85727E03 1.21661E03 3.91390E03 2.69304E03 3.74105E02 2.27630E03 1.29506E03 5.00425E02 3.87234E03 5.36666E03 8.42713E02 9.08092E01 8.71204E02 3.55818E03 5.48101E03 2.39254E03 1.74059E03 5.40438E03 2.97588E03 1.56173E03 2.42672E03 6.22487E02 3.18030E03 6.21180E02 2.03863E03 6.47514E03 5.65239E03 6.67978E03 7.51043E03 3.53279E03 3.96956E03 2.67093E03 4.80883E03 9.93623E03 2.87473E03 4.23127E01 1.96205E02 1.72496E03 6.90536E03 9.65965E03 3.24269E03 3.22634E02 8.79237E03 1.25700E04 2.54366E03 8.35264E02 1.61460E04 5.16759E04 5.23425E04 2.14422E04 1.17108E04 3.26052E04 3.12487E04 4.58709E03 7.00174E03 1.26311E04 6.40489E02 6.69863E03 4.53467E03 6.06146E03 2.38005E03 1.08893E03 2.77795E03 5.72757E03 3.70404E03 3.65529E02 6.83902E02 1.09207E03 2.28587E03 1.99572E03 1.00385E03 2.80198E03 1.92284E03 4.23814E02 2.80623E03 2.97028E03 3.08398E03 2.20182E03 2.64673E03 5.11952E03 1.13659E04 1.03163E04 4.31245E03 3.01670E03 1.12693E04 5.98833E03 8.29867E02 2.56032E03 3.75084E03 2.19457E04 2.25222E04 1.01779E04 7.33852E03 5.15242E03 1.99074E03 1.18726E04 1.16272E04 4.53627E03 9.46640E03 1.30058E04 8.75531E03 3.24343E03 6.51217E02 6.78942E02 3.89026E02 2.96794E03 6.33301E03 1.62188E03 9.83413E02 5.84512E03 6.56942E03 4.45337E03 1.14113E03 9.23905E02 3.46117E03 4.67063E03 1.63805E04 2.39106E04 1.36449E04 5.19881E03 4.43391E03 3.76571E03 9.12430E03 1.05373E04 2.51579E03 1.13275E03 2.52074E03 7.85430E03 5.04378E03 2.22259E02 2.11947E02 1.09241E03 1.72301E03 3.61424E01 1.21002E03 8.99987E02 1.04292E03 3.00279E03 4.00303E03 5.19419E03 4.16510E03 3.01270E03 1.91584E03 3.77357E03 2.24272E03 5.73825E03 6.27121E03 7.04380E03 3.49242E03 8.23546E01 6.35489E02 1.86963E03 3.42448E03 3.52132E03 1.95187E02 1.23932E03 -Frame 257 8.89739E04 1.59812E05 1.99677E04 5.19536E04 1.87765E04 8.92971E03 2.50739E03 4.69953E02 7.29547E02 3.40651E02 5.95807E01 2.87660E02 3.76509E02 3.51298E-01 6.41418E01 5.10986E01 8.12805E02 6.23601E02 2.65725E02 3.47052E02 1.40884E02 2.95326E01 1.50146E03 2.50546E03 2.25356E02 1.05410E02 6.24705E01 6.04856E02 1.31980E03 1.07669E03 8.97909E01 2.25009E03 5.87022E03 3.03380E03 4.57204E02 3.83508E02 3.73403E01 9.23910E02 1.91849E03 1.19828E03 5.77988E02 1.29864E02 9.10861E02 7.48288E03 7.79369E03 5.27455E03 1.36984E03 7.32802E01 1.26148E02 4.77284E00 1.29463E03 4.37740E03 1.99588E03 4.16354E03 8.39336E03 4.89918E03 1.51844E03 2.08098E03 3.54863E03 2.55451E03 5.43052E03 5.04384E03 9.71416E02 1.79327E02 3.96348E03 3.11634E03 1.26123E02 2.22345E02 6.07312E01 9.69666E02 3.99130E03 1.17235E04 1.28610E04 8.97887E03 5.34115E03 1.87148E03 5.02594E02 4.97071E02 1.04987E03 1.59367E03 4.37770E03 5.40841E03 2.86319E03 1.30936E03 1.90042E02 2.06624E03 5.02679E03 3.27849E03 2.93244E03 3.06836E03 1.35084E03 9.84281E03 1.69381E04 9.61324E03 2.96324E03 2.70884E03 2.23049E03 9.35592E01 5.99577E02 7.83834E02 1.24904E03 3.37655E03 1.92204E03 4.19283E03 6.06746E03 1.14292E03 4.67695E01 5.65391E01 1.89107E02 9.15989E02 3.14418E03 2.65027E03 3.09914E02 1.15505E03 2.67224E03 1.59112E03 4.78676E02 1.79106E03 3.75830E01 3.45283E02 2.29994E02 2.98511E02 5.38794E02 4.26149E03 4.99836E03 2.97080E03 3.12678E03 2.25787E03 1.02743E04 6.05033E03 1.17396E03 6.74873E02 2.82458E03 1.61458E03 1.47668E03 9.41624E03 7.57691E03 2.49733E03 1.18664E03 9.15079E02 2.03881E03 2.22466E03 4.33859E02 5.64512E03 5.10997E03 1.72684E03 9.51001E03 8.62910E03 2.55214E03 2.27823E04 2.05365E04 1.06245E04 1.18625E04 1.48643E04 1.39654E04 1.55632E04 2.81872E03 3.68267E03 4.36797E03 1.39278E04 1.70062E04 7.84676E02 2.10788E03 5.51927E03 1.20932E04 7.46323E03 6.51705E02 8.77575E02 1.45292E03 1.33006E03 6.68601E02 1.56549E03 2.00259E03 4.46889E03 1.15444E04 1.10723E04 1.99005E03 4.05760E02 2.31955E03 3.99845E03 6.47321E03 7.81240E03 2.07921E03 6.00764E01 2.20992E03 1.08983E04 1.54671E04 5.28861E03 7.63407E02 6.36209E03 1.17989E04 9.83198E03 7.51153E03 1.33861E04 1.01978E04 6.38216E03 5.40379E03 2.85584E03 3.98322E02 4.66868E02 8.32985E02 2.16761E03 1.82055E03 1.39344E02 3.27915E02 1.03339E03 3.39217E03 5.11893E03 1.86805E03 8.99582E02 3.31613E03 5.00341E02 2.94556E02 8.48552E02 1.18669E03 3.41511E03 3.07395E03 3.02307E03 1.78427E03 1.68989E03 1.74387E03 1.69442E03 1.90574E03 4.27547E03 9.71756E03 4.66792E03 8.97750E02 7.17783E00 6.85046E02 2.21796E03 3.45390E03 2.10129E03 1.46881E03 2.07012E02 2.03664E02 4.18117E02 1.32745E03 3.83200E03 3.30006E03 1.58307E03 1.35744E03 1.23998E03 3.17792E03 3.71457E03 1.21728E03 1.66202E02 1.55740E03 7.65449E02 2.84403E03 8.60781E03 4.81492E03 9.99878E02 6.36416E02 1.38420E03 2.81580E03 2.48416E03 1.79180E03 -Frame 257 6.17482E05 4.35699E05 1.32145E05 1.35988E04 1.74244E03 3.07233E02 1.17327E03 2.01722E03 1.32237E03 7.90315E02 7.80393E02 1.30327E03 7.45481E02 5.90575E02 4.46925E02 5.77048E02 2.14117E02 9.40618E01 2.24575E02 1.12402E02 6.60997E01 1.67057E02 5.69192E02 1.01698E03 2.89026E02 2.69857E02 1.24751E03 1.95343E03 1.15640E03 7.53948E02 4.56601E02 1.48733E02 3.47599E03 3.02191E03 4.18411E02 4.80288E02 5.07597E02 2.08571E03 2.98571E03 1.60927E03 2.23153E03 2.74467E03 7.77895E03 6.99969E03 2.47229E03 1.24783E03 8.10271E02 2.47269E03 1.87777E03 1.36747E03 2.12689E03 1.38100E03 1.67930E02 5.91477E02 4.76337E03 2.97390E03 4.75843E02 2.49290E03 1.46407E03 3.72726E02 3.52968E02 2.72180E03 7.82696E03 7.52952E03 1.18409E04 1.11744E04 3.62205E03 1.13974E03 1.54692E03 6.66044E03 1.16408E04 2.20666E03 2.84904E02 8.65892E01 1.20971E03 2.01460E03 1.29552E03 4.44752E02 7.66227E02 1.58826E03 2.91708E03 5.42709E02 8.38020E01 3.50805E02 2.03904E03 2.02578E02 2.53562E03 1.70996E03 1.34939E03 3.73829E03 2.10673E03 3.89952E03 9.03691E03 4.67273E03 2.40750E02 5.40895E03 6.86592E03 3.73642E03 6.25167E02 1.15165E02 2.11616E02 1.80273E03 1.73186E03 4.09639E02 1.09147E03 1.41254E03 3.98936E03 2.67115E03 6.35593E02 1.92933E02 6.78486E02 1.59366E03 3.55233E03 3.69721E03 1.94174E03 2.34584E03 1.07389E04 1.65960E04 8.88376E03 1.92929E03 1.39879E03 2.73536E03 2.33668E03 8.21665E02 2.29987E03 3.03441E03 3.32206E03 4.65980E03 3.86691E03 5.84971E02 4.79632E01 7.35508E02 5.27839E03 3.28336E03 1.59307E03 1.01287E04 9.82832E03 2.31813E03 1.35874E03 2.03145E03 5.61410E03 6.04154E03 1.24344E03 1.27851E03 5.65335E02 2.07701E03 6.80517E03 1.58248E04 2.64677E04 9.95028E03 1.80803E04 1.59409E04 6.60105E03 1.51487E03 1.08636E03 2.73371E03 8.18884E03 1.19400E04 1.11473E04 2.42522E04 3.88452E04 2.18773E04 1.10702E04 3.66250E03 1.42062E03 9.85882E03 9.28323E03 6.69200E03 3.73216E03 5.74296E03 1.06858E04 8.68822E03 6.00068E03 6.61476E03 2.92711E02 5.89085E03 2.67767E03 6.42414E02 6.31047E02 7.09356E03 1.25469E04 7.48269E03 3.07734E03 3.24599E03 8.26750E02 9.86699E02 8.51737E03 6.70197E03 2.29411E03 3.76857E03 4.27066E03 4.48296E03 1.24952E04 3.09136E03 1.60264E02 1.48595E03 9.19073E02 1.56674E03 1.29336E03 5.28143E02 1.55063E02 1.11193E02 2.59868E02 2.90887E01 3.74293E01 3.58956E02 6.41626E02 4.06044E03 7.52655E03 3.89000E03 5.24287E02 1.85085E02 8.75179E01 1.91362E03 3.46180E03 4.11936E03 2.17978E03 1.08892E02 2.96532E02 2.19161E03 3.11769E03 3.19949E02 1.83359E03 2.93323E03 8.16583E03 7.57695E03 5.72774E03 2.56516E03 5.38268E02 1.99082E02 2.36435E02 2.51703E02 4.27874E02 2.87076E02 7.33369E02 1.15468E03 3.69478E03 6.87516E03 1.95800E03 1.61597E03 1.39955E03 1.74681E03 4.87425E03 4.19545E03 1.28346E03 3.51342E02 5.34034E02 5.34873E02 1.63308E03 7.76492E02 2.96046E03 2.52298E03 2.26507E03 1.28893E03 4.05809E02 2.53057E02 9.89065E01 -Frame 257 7.89423E05 2.90711E05 1.72120E04 5.47015E03 8.23862E02 7.77847E01 6.90995E02 8.33744E02 4.06103E02 3.52060E01 1.52981E02 1.96968E02 1.28703E02 7.15784E02 1.00635E03 7.78198E02 2.41139E02 1.07172E02 1.24853E02 3.39699E02 6.69732E02 6.18999E02 2.66407E02 3.92264E02 3.88437E02 1.12787E03 1.56703E03 3.55399E02 1.86507E01 1.03470E01 3.02711E02 2.50109E03 3.00577E03 5.62310E01 8.12016E02 1.78583E01 3.30808E02 1.58881E03 2.49950E03 3.38187E03 1.23383E03 6.03581E03 3.29096E03 3.49367E03 1.22671E03 9.31204E02 1.49060E03 1.55319E03 1.49707E02 2.59535E02 5.01544E02 1.28474E03 5.54634E02 1.50129E03 3.72014E03 1.59428E03 1.74159E03 2.61067E03 2.81504E03 1.87264E03 1.14335E03 3.01661E02 5.98542E03 5.88556E03 7.66378E03 2.57073E03 8.32557E01 2.24789E02 2.95574E02 5.26183E02 3.54418E03 4.16316E03 2.42313E03 6.39874E02 2.02007E03 2.15592E03 1.55690E03 2.63777E03 2.67770E03 3.28547E03 2.14143E03 9.47777E02 6.82437E02 6.89558E02 1.05179E03 3.99441E03 1.85320E03 3.57202E03 7.76142E02 1.58065E03 3.41023E03 2.81193E03 6.77514E02 3.51043E03 5.30557E03 1.17743E03 4.34407E03 6.87120E02 2.01637E03 7.60905E02 5.46187E01 2.03058E03 4.40696E03 2.75527E03 6.56081E02 2.74272E03 7.91600E03 5.16992E03 5.78821E02 1.61873E03 1.76721E03 1.44945E03 1.53332E03 2.65375E02 4.30391E02 4.59500E02 3.63274E03 1.55479E04 1.00886E04 1.42188E03 1.28088E02 1.51924E03 3.89405E03 9.13827E02 2.85686E02 1.79011E03 3.51648E03 3.13205E03 8.38005E03 3.01985E03 2.53579E03 9.75647E03 1.35666E04 7.54265E03 1.68657E03 2.92136E03 9.98639E02 3.89762E03 8.95522E03 8.52768E03 1.25038E04 7.72293E03 2.81240E03 7.29430E02 8.10726E01 1.86116E03 4.94143E03 1.12415E04 3.90642E04 1.79211E04 4.08585E03 1.30761E04 1.40262E04 1.15199E04 7.27106E03 3.72034E03 7.11384E02 3.96571E03 2.15972E03 9.40365E03 1.90468E04 3.66975E03 3.11480E02 3.43195E03 4.87099E03 1.56482E01 4.18746E03 2.86723E03 5.53282E02 6.03382E02 2.64577E02 5.22306E03 7.84674E03 1.27588E04 1.19120E04 5.19334E03 1.44132E03 1.32343E03 1.11980E02 1.93968E03 7.01290E02 2.43224E02 3.87990E03 2.70837E03 7.02435E01 4.10694E02 1.63355E03 3.49836E03 2.01298E03 1.15931E03 1.05094E03 1.25597E04 1.91250E04 4.33206E03 4.38711E02 5.51641E02 2.91876E03 6.01189E02 6.00505E02 1.06580E03 8.54680E01 5.51824E02 7.71888E02 1.20541E02 1.41945E01 2.02090E02 3.01245E03 7.68655E03 2.94960E03 6.26966E02 1.39918E03 2.50558E03 5.45427E03 7.51312E03 4.93420E03 1.91442E03 5.21763E03 6.63758E03 6.70903E03 4.28099E03 1.29027E02 2.73778E03 1.88425E03 9.37305E02 6.01087E03 3.94905E03 4.77123E03 3.50578E03 1.13032E03 4.67904E01 8.84261E02 2.47295E03 1.94878E03 1.08908E03 1.96569E03 2.09935E03 9.08680E02 4.04327E03 1.37484E03 2.90679E03 3.23431E03 1.28052E03 2.41522E02 6.93344E02 6.99028E02 7.72248E01 1.98803E02 6.82360E02 1.32880E03 1.55578E03 4.89137E02 8.08917E01 6.11976E02 1.12644E03 1.61440E03 2.24138E03 2.45071E03 -Frame 257 1.39093E05 1.59630E05 3.40334E04 3.95042E03 7.64130E02 6.48295E02 1.23807E02 1.04281E02 1.19179E02 3.60312E02 6.70401E02 6.65257E02 1.16849E03 2.87845E02 1.04390E02 6.89839E02 3.09704E02 3.75339E02 1.21275E02 6.29670E02 6.13709E02 3.88819E02 1.51267E01 5.71191E01 1.35338E02 7.26712E02 6.96779E02 1.53213E02 2.69758E02 3.80827E02 1.12897E03 1.03289E03 1.09874E03 4.16324E03 4.35662E03 1.90001E03 2.00767E02 1.17842E03 1.54006E03 4.65333E03 5.90784E03 4.07255E03 4.47325E03 3.46474E03 1.73702E03 5.34346E02 9.54386E01 8.35478E02 3.46709E03 3.22531E03 1.07014E03 1.03762E02 1.40110E03 3.74112E03 7.78251E03 1.72054E03 4.55335E02 8.72585E02 2.78403E03 2.58042E03 5.14797E03 3.38696E03 3.12802E03 4.81529E03 3.16928E03 4.42348E02 3.19369E02 8.01140E02 3.46189E03 5.81800E03 2.44674E03 1.47452E03 3.83034E02 1.53262E03 2.03281E03 1.12645E03 7.66303E02 4.20516E02 6.67865E02 1.31469E03 6.58057E02 9.59744E02 2.00223E03 4.34958E03 7.44889E03 7.35394E03 2.92528E03 2.46763E03 5.42999E03 3.90395E03 2.59483E02 3.00085E03 2.60999E03 1.46304E03 2.25055E03 5.45713E03 2.80492E04 2.13059E04 7.97388E03 4.25266E03 1.24480E03 8.23235E02 8.67313E02 6.77833E02 2.52396E03 3.92784E03 4.14524E02 6.98836E03 1.43184E04 6.13792E03 1.01925E01 2.61377E03 1.42705E03 3.14479E02 5.67073E02 2.18646E02 2.33968E03 2.79894E03 4.23233E02 2.95741E02 1.58358E03 4.16264E03 6.59058E03 5.07418E03 1.11810E03 2.46085E02 1.30877E03 1.02819E04 1.88355E04 8.56119E03 5.18357E03 2.07407E03 2.79978E03 6.87624E02 1.12123E03 4.63361E03 1.00437E04 1.22579E04 1.30017E03 6.39023E03 6.42279E03 7.81474E02 3.82013E03 3.68377E03 1.16321E02 8.82426E02 7.85796E02 2.80255E03 3.25722E04 5.22705E04 2.02673E04 4.59330E03 4.80708E03 1.28909E04 1.83503E04 4.42306E03 1.77043E03 3.69511E03 2.20442E03 7.72548E02 6.76245E03 2.87150E03 8.51993E02 1.27171E03 4.51039E02 7.08113E03 4.28181E03 2.83804E02 1.05938E03 1.88068E03 3.98816E03 2.74987E03 3.59147E03 6.34790E02 6.81592E02 1.01730E02 4.61433E02 1.71220E03 2.51479E03 4.77879E03 5.90961E03 5.50776E03 8.60728E03 8.25155E03 3.62483E03 2.03350E03 4.40619E03 6.14653E03 3.89714E02 3.25846E01 1.69095E03 5.42045E03 5.03012E03 6.98315E03 5.24126E03 1.46310E03 5.82340E02 5.25737E03 2.73448E03 4.86381E02 1.83735E03 4.50649E02 4.95170E02 1.89362E03 1.54595E03 2.18662E03 5.31387E03 7.93688E02 3.93428E03 5.94488E03 2.27110E03 1.76903E03 5.93015E02 5.71428E02 1.83679E01 1.80925E03 2.79105E03 1.97579E03 5.43218E02 1.32947E03 1.74875E03 2.10227E03 6.21102E02 2.57950E03 8.71598E02 1.55011E03 3.19494E03 7.01328E02 4.11807E02 1.06466E03 1.63685E03 2.08640E03 5.72410E01 4.90438E02 1.28760E03 2.85661E03 2.34697E03 2.37223E03 2.10595E03 4.28128E02 3.16684E02 7.19460E02 8.13295E02 7.21260E02 7.76895E02 6.88674E02 3.36191E02 8.20521E02 4.20171E02 8.10401E02 1.59289E03 3.97526E02 2.33598E02 5.60774E01 1.78247E02 4.77905E02 2.11636E00 -Frame 257 4.48842E05 3.65902E05 7.57937E04 4.50358E03 1.88017E02 2.86249E00 2.21314E02 1.90653E02 8.13133E01 3.58672E01 2.86160E01 5.57458E02 4.06192E02 2.92837E02 4.07058E02 1.76200E03 1.84657E03 2.60701E02 3.38844E02 2.80511E02 3.90480E02 3.53522E02 1.89387E02 1.28794E02 6.59040E01 8.56681E01 5.90542E02 1.09033E03 2.43141E02 3.28907E02 1.86270E03 9.06358E02 4.59393E01 1.33455E03 2.06806E03 3.00503E02 3.23090E03 2.78770E03 5.97389E02 4.09070E03 1.75303E03 5.82543E02 2.09661E03 1.84110E03 2.77223E02 1.44049E03 9.04719E02 1.03398E03 1.53880E03 2.90612E02 2.86541E02 1.87356E02 1.48013E03 2.86933E03 1.06497E04 5.70439E03 2.56151E02 3.58651E03 5.84424E03 5.27433E03 2.74009E03 7.65025E02 4.52344E02 4.52272E02 5.91526E02 5.70990E02 1.26989E02 1.69586E03 1.24137E04 1.54448E04 3.53111E03 3.03652E03 1.46432E03 5.54611E02 3.95211E02 1.08436E03 8.37285E02 4.20706E02 4.24141E01 2.17270E03 2.66309E03 2.36642E02 1.67907E03 1.31264E03 1.45559E03 1.05315E03 3.09983E03 4.88947E03 5.27716E03 9.57583E02 1.57327E03 1.16790E04 2.78275E04 2.53232E04 9.30971E03 1.55275E04 4.22182E04 2.59153E04 3.60650E03 1.79862E03 2.43520E03 5.73934E03 8.75653E03 4.60338E03 1.59950E03 5.79577E03 4.23234E03 3.66413E03 4.49979E03 8.98214E02 3.26432E03 3.44778E03 1.21868E03 2.22845E03 2.68040E03 5.62452E02 9.09731E02 1.01988E03 5.95501E01 6.63617E01 3.04463E02 4.15614E02 4.94891E02 2.69896E03 2.81783E02 8.64973E01 4.59858E00 2.49998E03 8.80004E03 5.10680E03 2.76779E03 1.92145E03 1.19236E02 1.71481E03 7.02501E03 4.73291E03 2.25332E03 1.05854E04 1.68775E04 4.35078E03 6.24607E02 5.07920E02 3.31768E03 8.50015E03 8.64285E03 5.44498E03 4.06266E03 9.33144E03 3.10765E04 2.34654E04 1.80128E03 6.34821E02 6.88674E02 1.31070E03 2.23434E03 5.49482E03 6.93517E03 2.67099E03 1.79607E03 4.69507E03 3.84991E03 3.54807E02 4.96841E02 3.57720E03 1.00317E04 1.67955E04 1.30608E04 3.14277E03 1.11532E03 4.50625E03 1.30344E03 2.57880E02 2.64993E02 2.97462E03 6.92937E03 5.61132E03 4.09976E03 5.89024E03 6.96192E03 1.03785E04 8.38160E03 2.19169E02 8.55159E03 2.58311E03 7.68621E03 1.60346E04 2.42711E04 1.95654E04 4.92571E03 9.93208E01 1.76520E03 2.50545E03 1.04437E03 1.58987E02 6.14838E02 2.98941E03 2.83868E03 4.55688E03 7.90675E03 3.04397E03 4.87795E02 7.33739E02 1.15395E03 7.88604E02 2.08875E02 1.36068E03 4.79721E03 9.95415E03 6.53617E03 1.74025E03 2.31372E02 8.05074E02 3.38126E02 5.95385E02 1.36140E03 1.09212E03 4.53643E02 3.19864E02 3.60496E02 5.30312E02 8.58897E02 1.91904E03 2.06682E03 1.80608E03 2.76841E03 2.88423E03 1.42257E03 3.35661E02 2.09775E02 4.46916E02 1.13616E03 8.08288E02 1.06120E03 4.59155E03 3.63747E03 1.07693E03 9.44029E02 1.27322E03 2.90128E03 1.42034E03 2.25321E03 4.63716E03 2.18271E03 1.34634E03 1.04619E03 2.88942E03 3.54731E03 1.32574E03 1.01317E03 2.55495E03 3.51314E03 2.35650E03 9.56263E02 6.04022E02 1.31368E03 2.03709E03 9.99142E02 -Frame 257 1.01121E06 4.84481E05 2.89575E04 2.95922E03 1.13074E03 9.36633E02 1.24911E03 8.67996E02 6.65031E01 2.77285E02 2.85585E02 1.87826E02 9.93608E01 7.77989E01 4.36617E02 7.32868E02 2.53580E02 1.45029E03 2.37571E03 1.69915E03 1.70005E02 7.56555E02 1.05135E03 7.77895E02 3.59211E02 1.99419E02 4.89557E02 3.41838E02 8.77677E01 4.97524E02 7.80924E02 2.46715E02 1.12892E02 1.59925E03 5.57782E03 7.30621E03 3.95678E03 1.77118E03 3.01105E03 2.07770E03 5.76354E02 2.31723E02 2.73371E02 1.50750E03 2.30997E03 2.83729E03 2.15858E03 4.98130E02 1.14510E02 7.24673E02 2.13988E03 3.65630E03 3.66567E03 6.21006E03 9.95608E03 5.24040E03 3.26548E03 2.12283E03 1.78621E02 1.75886E02 4.88960E01 7.52937E01 1.70613E03 7.69189E03 9.40255E03 2.86817E03 6.63173E02 1.30476E03 4.04486E03 5.49832E03 6.36395E03 6.40020E03 4.21865E03 2.69872E03 2.91860E03 5.27394E02 7.05414E02 1.76984E03 1.86721E03 1.07058E03 3.49450E02 2.22120E03 1.23225E03 1.68039E03 8.73487E02 1.42272E03 4.98320E03 5.86249E03 1.71915E03 8.17497E01 9.99250E01 1.96237E03 1.32217E04 1.08256E04 2.25320E03 3.17528E03 9.43467E03 8.14851E03 4.59763E02 7.46681E02 2.32729E03 8.61635E03 7.50220E03 1.54105E03 6.04704E03 3.63560E03 9.10404E02 4.98721E02 2.09936E03 1.18068E03 2.60754E02 6.59413E02 7.91897E02 4.48283E03 6.21771E03 3.40123E03 1.06625E03 1.28950E03 1.25719E03 1.09484E03 1.35516E03 2.03843E03 5.15192E03 5.20082E03 3.97734E03 2.63332E03 2.55300E03 1.84911E03 3.17623E02 1.37152E03 3.39406E02 1.49712E03 3.20984E03 5.61044E02 1.53498E03 6.97070E02 4.43403E02 5.54742E02 3.96929E03 3.20280E03 6.48138E03 4.79811E03 1.36217E02 1.08739E03 3.15130E02 7.62441E02 5.75590E02 4.93924E03 1.74799E04 3.85442E03 1.97567E03 1.30379E03 1.48713E02 1.57497E02 1.70489E02 3.24708E03 7.09687E03 6.58930E03 1.56646E03 1.64520E02 3.19059E03 6.14338E03 3.25018E03 1.72133E03 2.29496E02 4.10721E03 2.79617E02 2.12910E03 3.86519E03 2.60193E03 5.26941E03 4.61966E03 3.92071E03 3.17164E03 4.48533E03 4.83873E03 1.29490E03 5.84787E03 3.81720E03 7.88991E02 3.27294E03 5.10185E03 8.72918E03 1.16337E04 4.34793E03 2.22519E02 1.28317E03 5.62497E03 2.41906E03 1.48384E03 2.87266E03 2.12399E03 7.95437E02 1.86113E03 1.64016E03 6.02011E02 1.21194E03 7.54917E02 2.11639E03 1.87479E03 1.87142E03 1.77231E03 1.56923E03 1.28244E03 5.08740E02 4.92046E02 1.54223E03 3.66205E03 3.67781E03 3.00172E03 3.62938E03 8.96798E02 1.01115E03 3.67240E03 1.11937E03 5.63107E01 2.37644E02 1.22940E03 1.47418E03 1.44368E03 4.72597E01 1.86084E02 1.31541E03 1.24245E03 1.14608E03 2.41170E02 6.43844E02 1.63484E03 3.07214E03 5.00855E03 4.40574E03 1.98030E03 2.83715E03 4.13811E03 7.18756E02 5.97590E01 1.76379E03 4.08287E03 1.75900E03 8.37832E02 1.82479E03 2.43897E03 1.70631E03 2.18743E03 3.86911E02 5.72087E02 1.41775E03 1.16916E03 5.43035E02 2.21955E02 7.56652E02 3.05562E02 7.81533E01 1.02023E02 1.16320E03 7.24043E03 1.24678E04 -Frame 257 1.86560E04 1.57419E05 1.17658E05 1.87537E04 2.21597E02 2.37111E02 2.98825E03 8.81176E01 2.04450E03 3.48978E03 2.91327E03 3.51430E03 3.03452E03 2.08921E03 2.96208E03 3.72386E03 2.10262E03 2.91443E03 1.14636E03 5.59815E01 3.29700E03 5.34154E03 1.75128E03 9.78000E02 6.67469E02 3.18090E03 6.39498E03 2.94297E03 1.77345E03 2.87570E03 5.66358E03 1.00161E04 4.72054E03 3.63489E03 2.65793E02 3.86920E03 3.56034E03 3.67236E01 1.83555E02 3.44782E03 3.92050E03 1.80865E03 1.35818E03 5.37822E02 2.91775E03 6.40711E03 3.79116E03 2.60251E03 1.23073E04 1.78780E04 4.96294E03 8.54278E03 4.98161E03 7.79551E03 1.13759E04 8.81224E02 1.99238E03 7.98909E03 9.45525E03 2.40562E03 3.97432E03 9.48573E03 1.69078E04 8.33957E03 4.07594E03 2.07618E04 1.20745E04 7.87687E03 6.07528E03 7.81749E03 1.07151E04 2.23685E04 1.10247E04 1.56648E04 5.61417E03 6.33317E03 1.26634E04 8.75593E03 7.48819E03 2.32220E03 1.39602E04 2.73283E04 2.84819E04 1.83725E04 6.29111E03 3.89141E03 1.40883E04 1.58643E04 1.42781E04 1.21010E04 8.17862E03 1.55163E04 1.51504E04 2.49522E03 4.27516E03 3.93898E03 9.40297E03 2.03100E04 5.79125E03 4.49134E03 4.17280E03 1.61952E04 2.54481E04 2.21041E03 2.18317E03 1.96185E04 3.62473E04 3.64027E04 1.46473E04 8.55701E03 2.69817E03 1.14610E04 2.89001E04 8.00266E03 1.05322E04 3.45293E04 2.23185E04 1.13891E04 1.56162E03 3.89148E03 2.47343E04 1.40055E04 3.48601E04 6.49248E03 7.08005E03 4.16608E04 5.72645E04 3.07589E04 3.23902E04 1.04903E05 1.77969E05 2.54250E05 2.72853E05 1.24343E05 8.54157E04 1.61446E05 2.33672E05 1.60720E05 5.17008E04 4.52590E04 1.76952E05 3.75929E05 1.99899E05 6.99912E04 5.68028E04 1.41866E05 2.33648E05 1.48874E05 1.35730E05 1.50771E05 1.80192E05 2.86724E05 3.70987E05 1.93187E05 7.19524E04 1.40238E05 2.87009E05 3.19053E05 2.32102E05 1.33628E05 1.44155E05 1.77743E05 3.22297E05 2.45424E05 1.04971E05 6.80836E04 1.07827E05 1.53110E05 8.53263E04 4.10374E04 3.25978E04 1.41255E05 1.08504E05 7.07932E04 1.81760E04 1.40987E04 4.81730E04 1.25726E05 5.20056E04 1.26460E04 1.89156E03 3.45481E04 5.26489E04 3.59757E04 7.72943E02 1.50712E04 2.52667E04 4.62542E04 1.51939E04 1.14796E04 4.77482E03 2.64846E04 4.10374E04 3.78572E03 3.18310E04 1.52418E03 4.86189E04 5.97425E04 1.34927E04 3.33290E03 2.60521E04 9.18841E03 2.38693E04 5.54402E03 1.20711E03 1.80866E04 4.37167E04 3.49085E04 1.90442E03 1.20896E04 6.85107E03 1.83794E04 2.19838E04 1.80264E04 2.29730E03 8.59031E03 1.50845E04 2.51627E04 7.89567E02 8.24000E03 3.21928E03 1.27667E04 1.97965E04 7.53273E02 1.77442E03 1.06060E04 1.46576E04 7.31681E03 8.50888E03 1.36634E03 9.55093E03 1.51542E04 1.89007E04 3.39281E03 6.89247E03 6.96642E03 7.54450E03 8.79599E03 8.55357E02 2.15520E03 2.82873E03 6.57454E03 6.17544E03 6.06374E03 8.76570E02 6.02546E03 1.31313E04 1.15554E04 7.12096E03 3.87054E03 7.80057E03 1.05525E04 2.78822E03 1.23745E03 1.21689E02 9.68204E03 1.22328E03 -Frame 257 5.93507E04 1.92586E03 4.00598E04 8.98546E03 1.66297E03 3.00190E02 8.67845E02 2.52510E03 3.51882E03 4.49073E03 2.66040E03 6.67685E03 6.51090E03 4.42108E03 2.48125E03 4.98272E03 7.53095E03 4.27854E03 2.27969E02 1.86283E03 7.49733E03 8.77437E03 5.62848E03 3.45652E03 4.74402E03 6.06155E03 2.92626E03 5.20982E03 1.69783E04 1.93095E04 1.49701E04 9.64589E03 1.58291E04 9.67136E03 5.33480E03 7.89589E03 4.74538E03 9.95138E02 1.37258E03 4.79870E03 6.21008E03 3.30592E03 2.31266E03 7.79022E03 1.37962E04 8.89296E03 8.64279E03 1.83678E04 1.92731E04 2.64059E04 2.67956E04 1.85897E04 1.02036E04 1.51450E03 9.43389E03 2.04822E04 1.09155E04 1.48437E04 1.35835E04 3.11108E03 7.66165E03 1.81599E04 1.23082E04 4.56203E03 6.10133E02 1.51385E04 3.27570E04 2.14198E04 7.59503E03 1.46036E04 3.92584E04 6.00862E04 4.22800E04 7.73611E03 6.79788E03 2.74922E04 3.34464E04 1.91280E04 3.27663E03 1.44172E04 5.62812E04 7.62426E04 4.53549E04 1.17275E04 2.49542E03 4.14492E04 9.41663E04 9.44629E04 3.00966E04 1.48707E03 5.28556E04 8.89976E04 5.41938E04 1.74210E04 4.80991E03 3.30952E04 7.25664E04 7.03467E04 2.20517E04 1.11976E04 6.99715E04 1.34820E05 1.18296E05 4.84301E04 4.16613E04 1.42841E05 2.63489E05 2.24663E05 7.50863E04 4.35617E04 1.07961E05 1.85528E05 2.07683E05 1.16894E05 1.09486E05 3.24794E05 5.14125E05 4.65076E05 3.61707E05 4.27965E05 6.96045E05 9.25130E05 9.25590E05 7.24909E05 7.54075E05 1.21650E06 1.29428E06 7.98398E05 1.26705E06 2.90233E06 3.44277E06 2.06598E06 7.30196E05 4.16110E05 1.88215E05 1.58266E05 7.53128E05 1.19175E06 7.68497E05 2.03889E05 8.31375E05 2.83965E06 3.85851E06 2.68361E06 1.25984E06 1.82100E06 4.10401E06 5.08123E06 3.47929E06 1.81531E06 3.54871E06 7.89146E06 1.03119E07 8.03874E06 5.23290E06 7.28375E06 1.26062E07 1.35314E07 8.70296E06 5.40869E06 8.21445E06 1.25718E07 1.27427E07 8.37865E06 4.62466E06 5.09183E06 6.82921E06 6.77645E06 4.91176E06 3.01783E06 2.99757E06 4.24431E06 4.30518E06 2.99121E06 2.00003E06 2.25263E06 2.93267E06 2.88096E06 2.02261E06 1.35621E06 1.46769E06 1.84498E06 1.62110E06 1.01619E06 7.85601E05 8.62561E05 8.65582E05 6.44790E05 3.33054E05 1.81686E05 1.98240E05 2.76964E05 2.51903E05 2.26920E05 2.27125E05 1.59421E05 1.95035E05 3.06673E05 4.22617E05 5.17131E05 8.11786E05 1.26695E06 1.62679E06 1.70737E06 1.63157E06 1.88370E06 2.38699E06 2.44918E06 1.98156E06 1.49836E06 1.34426E06 1.60557E06 1.80095E06 1.58437E06 1.35771E06 1.54141E06 1.87741E06 1.98117E06 1.80344E06 1.70190E06 1.73154E06 1.86470E06 1.84489E06 1.59924E06 1.51646E06 1.70513E06 1.86527E06 1.74751E06 1.52827E06 1.43042E06 1.66953E06 1.89561E06 1.70083E06 1.36493E06 1.38356E06 1.48328E06 1.41198E06 1.15598E06 8.93549E05 7.41544E05 6.59736E05 5.86734E05 4.70821E05 3.42610E05 3.30714E05 4.16310E05 3.88984E05 2.22458E05 9.56035E04 1.11326E05 1.65094E05 1.48889E05 8.97747E04 5.29972E04 5.05504E04 6.55312E04 7.29685E04 -Frame 257 8.24763E05 5.30691E05 1.29533E05 1.26182E04 9.23755E02 1.46287E03 3.04621E03 2.54016E03 3.61899E02 1.96020E02 5.50541E02 5.90486E02 5.99354E02 1.10768E02 7.51028E02 2.62408E02 3.88576E02 5.20824E02 7.75644E02 1.63487E02 4.13130E02 6.72456E02 1.60274E02 3.68359E01 2.17838E02 1.33069E03 8.89713E02 8.23862E02 2.41991E03 9.49868E02 1.06959E03 5.16052E03 1.01510E04 5.27868E03 6.99842E02 3.71165E02 1.53013E03 2.05097E02 2.25905E02 8.19456E02 3.80772E00 5.90472E02 6.00156E02 8.47578E02 6.93634E03 5.15230E03 1.46603E03 3.41875E02 9.63548E02 2.45225E03 4.12584E02 1.27385E02 8.29840E01 1.65634E03 1.35570E04 1.15594E04 4.95160E03 4.74388E03 5.37489E03 2.31834E03 4.55636E01 2.77218E03 5.59266E03 3.30560E03 8.04779E03 7.51514E03 8.26262E02 9.21247E02 4.64523E03 1.38730E03 2.55985E03 1.55341E03 3.78439E03 4.92310E03 4.74106E02 4.49233E03 8.64242E02 9.75606E02 3.76058E03 2.64999E03 3.51061E03 4.65169E03 2.41898E02 1.76509E03 3.84649E03 3.50979E03 1.07575E04 4.69622E03 9.75546E03 1.44448E04 4.54787E03 1.14243E04 5.61815E03 1.45296E03 1.47580E04 1.04595E04 2.20670E03 2.05589E04 4.86446E03 1.09020E04 1.55868E04 9.38546E03 1.44829E04 1.39907E04 2.34329E04 8.93000E03 2.42007E04 3.34718E04 2.45970E04 1.86372E04 2.40829E04 1.83787E04 4.28560E04 2.45744E04 2.47356E04 1.06223E05 8.93502E04 6.38794E04 9.27538E04 1.05603E05 1.61047E05 1.35634E05 1.41923E05 1.70223E05 1.87518E05 3.76879E05 4.50238E05 5.65350E05 7.34652E05 8.32615E05 5.82913E05 2.60680E05 3.51207E04 1.45009E04 5.95601E04 5.67385E04 3.69014E04 1.24052E05 1.64868E05 1.31721E05 2.87432E05 3.87223E05 4.35266E05 5.32255E05 5.14839E05 6.27022E05 9.58558E05 5.84088E05 8.16410E05 1.04636E06 8.11831E05 1.44822E06 1.62267E06 1.52450E06 2.07166E06 2.91025E06 3.53414E06 2.64677E06 2.26639E06 2.64583E06 3.21212E06 2.63767E06 1.94985E06 1.92030E06 2.08550E06 1.44204E06 9.69287E05 9.64363E05 1.24915E06 1.09493E06 1.01780E06 6.44848E05 6.46684E05 8.09406E05 7.18464E05 4.81705E05 3.74687E05 4.52665E05 3.68026E05 3.95010E05 5.52691E05 4.15267E05 4.26287E05 2.59041E05 1.51293E05 1.71664E05 1.26137E05 1.50476E05 9.31794E04 1.20775E03 5.97572E04 1.11529E05 2.55107E04 3.98596E04 1.94673E05 1.08200E05 1.49783E04 9.25049E03 6.48976E04 8.72791E04 3.03113E05 4.26608E05 4.34046E05 5.38810E05 6.95927E05 6.82095E05 4.08745E05 6.23273E05 4.79641E05 2.92321E05 2.14162E05 4.87269E05 4.17353E05 3.28667E05 2.52009E05 4.38558E05 4.96873E05 3.68291E05 4.17713E05 4.60419E05 3.39319E05 4.03919E05 4.68829E05 3.21683E05 3.67871E05 3.86643E05 4.48503E05 3.55057E05 2.97365E05 4.72154E05 4.96212E05 4.49377E05 4.45029E05 4.21806E05 3.82087E05 3.73182E05 3.43192E05 3.49556E05 3.27038E05 1.68994E05 1.14328E05 1.09619E05 9.31828E04 9.08838E04 9.68157E04 9.85283E04 9.09621E04 4.58275E04 3.66466E04 2.64510E04 1.69728E04 3.08079E04 1.65727E04 8.31236E03 9.32356E03 5.27415E03 7.83474E03 -Frame 257 1.21107E06 4.43379E05 6.47969E03 1.18387E04 1.75389E03 6.11069E01 4.37569E03 6.31549E03 9.75683E02 4.92587E02 4.89509E01 4.18492E02 4.52195E02 5.72974E02 1.40482E03 4.75286E03 4.08567E03 1.54925E03 1.76121E02 2.29238E02 7.65414E01 5.70270E02 5.83671E02 2.44789E02 1.55063E02 1.68794E03 1.23456E03 1.24872E02 5.66242E02 9.56113E02 4.05309E03 1.09690E03 5.43403E03 3.07842E03 5.80056E01 1.02028E03 1.29616E03 7.06100E02 1.89766E02 2.34396E02 1.35595E03 5.75560E02 5.35280E02 5.20331E02 3.21892E03 3.79486E03 2.28799E02 9.32967E01 1.66314E03 6.27362E03 5.74985E03 2.68118E03 2.09202E03 1.11105E04 1.68200E04 1.81190E03 3.71698E02 3.88724E02 6.32167E02 3.96543E02 1.58981E03 6.09665E03 2.26344E03 5.80698E02 1.86344E03 3.61424E02 4.68789E02 2.45557E03 3.11741E02 8.94879E03 1.03087E04 3.10572E03 4.24858E03 4.59036E03 1.10651E03 1.69553E03 1.56491E02 1.30042E03 1.02038E03 2.64231E03 6.94135E02 2.68051E02 5.07818E00 2.30723E01 1.76702E03 3.35502E03 2.87049E03 3.45387E03 2.35925E03 6.38970E03 7.62439E03 4.49024E03 2.39170E03 9.75211E02 3.39929E03 6.35761E02 1.37136E04 1.51437E04 3.31365E03 7.44571E02 3.72918E03 2.34668E03 1.17598E03 3.14965E03 6.65088E03 8.06288E03 3.58866E03 1.38230E03 1.85356E03 9.22745E02 1.90576E02 3.47684E03 3.44077E03 8.81347E-01 3.07340E03 3.11979E03 4.53842E03 8.57921E02 2.46563E03 9.20573E03 6.23653E03 1.08637E03 2.70307E03 3.88249E03 3.15586E03 8.24013E02 1.78930E03 1.33494E03 1.38517E03 5.63689E03 8.56914E03 1.38045E04 1.07952E04 3.02221E03 3.08805E03 2.94789E03 3.82225E03 1.00979E03 3.80459E02 2.04696E03 1.72680E04 1.78523E04 9.76512E03 1.21924E04 2.96375E04 5.21183E04 3.61251E04 1.27058E03 2.57930E04 3.17637E04 1.57764E04 9.50081E03 1.51438E03 7.50555E03 1.97682E03 3.95525E03 1.98432E04 1.05542E04 2.33958E03 1.14449E04 2.28803E04 6.95269E03 1.11095E04 8.03755E03 2.23957E03 3.96193E03 1.07155E02 7.09496E03 1.79421E04 5.13969E03 6.46807E03 1.31151E04 2.97439E03 4.84727E03 1.37358E03 3.12134E03 1.06037E04 1.23094E04 3.47732E02 8.62219E03 5.49223E03 2.54284E03 1.09144E04 4.26576E03 5.87509E03 3.61504E03 5.94819E03 2.05090E04 1.00210E04 8.26363E03 3.46436E03 4.93182E03 2.07853E02 8.84363E03 1.45659E04 2.68538E04 1.70761E04 1.26158E04 5.27396E03 7.63196E03 2.00954E03 4.65264E02 1.73626E03 1.08832E03 6.14815E03 2.71969E04 3.01546E04 1.93199E04 1.50683E04 1.79449E04 6.42022E03 4.50506E03 9.70953E03 8.06306E03 5.85017E03 3.91909E03 6.09105E02 6.55347E03 3.39719E03 1.79881E03 5.27454E03 7.79191E02 4.46091E03 3.92650E03 3.60325E02 1.48032E03 2.20072E03 1.73858E03 7.13838E02 3.91298E03 2.63899E03 3.61417E03 5.08657E03 3.36850E03 1.12933E03 4.97164E02 3.64243E02 1.49731E03 1.83623E03 8.66397E02 6.26067E02 5.48873E01 7.59670E01 6.19747E01 1.33589E02 2.64340E01 4.71088E02 5.17308E02 6.18612E02 1.06707E03 2.31135E03 1.75999E03 6.13672E02 2.37953E03 1.02540E03 1.75848E01 2.29343E02 -Frame 257 1.13080E05 2.83624E05 9.71037E04 3.23746E03 9.03845E02 2.26716E03 2.15620E03 4.09060E03 2.18464E03 1.79687E03 8.14846E02 1.33524E03 8.16932E02 9.89131E02 2.42462E03 5.42644E03 4.05572E03 6.79520E02 3.50462E02 5.32311E02 1.37488E03 2.30328E03 2.21853E03 6.26965E02 1.18125E03 3.14907E03 3.30898E03 1.38001E03 1.45348E03 4.10523E03 4.66918E03 6.17198E03 7.08994E03 1.36146E03 5.01735E02 1.32089E03 1.40038E02 8.31546E02 1.74720E03 8.83010E02 5.98623E02 8.76529E02 1.56422E03 2.57214E03 4.74931E03 5.02021E03 7.69174E02 1.77759E02 2.54793E02 1.35678E03 1.84749E03 1.98003E03 1.79169E03 7.43547E03 2.28245E04 1.62299E04 2.57422E03 4.24225E02 4.49720E02 6.43421E02 1.11926E03 4.53373E03 1.83082E03 2.86389E02 2.34704E03 2.00138E03 3.34629E03 6.07941E03 8.39972E03 4.88311E03 4.26114E03 3.76327E03 1.51753E03 2.61106E03 5.73538E03 4.91106E03 3.97982E03 6.11385E03 1.16673E04 1.16064E04 4.24492E03 2.07100E03 2.73566E03 4.16162E03 3.38316E03 3.23223E02 2.63316E02 2.90212E03 1.48625E03 4.34062E03 3.97112E03 3.30162E02 2.09321E02 6.85962E03 1.20129E04 6.89428E03 3.97723E03 1.93110E02 3.27422E03 5.79599E03 8.86502E02 1.17404E03 4.41111E03 1.11441E03 2.35530E03 4.42686E03 8.88277E02 1.94908E02 2.82711E03 4.52826E03 5.66481E02 1.31709E03 2.34356E03 1.62424E03 1.40340E03 1.37136E03 1.23640E03 1.57179E03 4.89012E03 1.24519E04 7.26530E03 1.68964E03 6.14327E03 3.54054E03 3.35105E03 3.40784E03 4.98396E03 3.58804E03 5.76429E03 3.86744E03 1.52824E04 1.28604E04 2.48660E03 9.26807E02 2.69847E03 2.70178E03 1.58529E03 3.17117E03 6.51381E03 6.02784E03 1.04226E03 5.17107E03 4.26452E03 3.71892E02 2.54168E03 2.11234E03 2.15350E03 1.24320E04 3.09060E04 2.95100E04 1.30116E04 3.83860E03 2.24632E03 7.19858E03 4.62255E03 3.21330E03 1.29720E03 3.82152E03 3.95557E03 8.12507E03 1.23687E04 1.99753E03 1.09894E04 1.73655E04 2.71315E04 2.07333E04 7.11759E03 3.09420E03 1.40300E04 1.79990E04 1.43872E04 6.81950E03 3.69893E03 2.36744E03 4.09061E02 5.28876E03 1.44034E04 1.58995E04 1.16923E04 1.49310E03 6.25628E03 1.45529E04 1.45240E04 1.17854E04 1.15835E04 8.46627E03 3.24717E03 1.21340E04 2.27272E04 1.93736E04 1.32092E04 7.71717E03 5.47095E03 2.97913E03 1.69379E03 8.88486E03 1.29050E04 4.49614E03 9.38497E02 3.12733E03 3.42168E03 2.52726E02 1.71914E02 3.47561E01 1.13449E03 5.02896E03 7.36583E03 5.69680E03 1.44205E04 9.45381E03 4.05202E02 1.26745E03 8.33290E03 1.04207E04 3.93513E03 3.00097E03 1.16118E03 4.19156E03 2.24567E03 1.79346E03 3.28647E03 2.67843E03 9.92014E02 1.68470E03 1.77339E03 1.94084E03 8.70406E02 5.89278E02 2.42568E03 3.82391E03 1.31270E03 6.36226E02 2.90851E03 6.65411E02 2.14561E01 7.72755E01 7.18154E02 3.65746E03 2.29444E03 4.31738E02 4.07339E02 1.13676E03 7.30630E02 3.31134E02 4.09460E02 1.07911E03 7.81731E02 2.88098E01 8.42656E01 1.12606E02 4.75760E02 1.73974E03 1.41289E03 6.34912E02 1.10257E03 1.04545E03 7.03667E02 -Frame 257 7.29143E05 3.96925E05 3.12591E04 1.11078E04 4.96280E02 7.86964E01 5.92402E02 9.99138E02 3.23647E02 4.57397E02 1.89512E02 2.10400E02 3.73949E02 1.93262E02 5.68571E02 1.88147E02 1.26016E02 7.69333E02 1.43663E03 5.78930E02 5.47101E02 8.72236E02 3.07824E00 7.81782E02 1.95217E03 1.57841E03 8.76037E01 3.91457E02 8.83760E02 1.30505E03 1.50539E03 4.08076E03 8.22933E03 2.60011E03 2.36918E02 3.95499E02 1.62887E03 8.61489E02 4.16128E01 3.52758E02 4.43955E02 2.31808E02 6.96648E01 1.07662E03 2.12573E01 2.33006E03 3.93712E03 2.69775E03 1.03626E03 2.32040E02 4.89503E02 7.54695E02 3.06799E03 5.15746E03 1.26849E04 3.60928E03 2.37069E03 2.03235E03 1.03084E03 3.22550E02 3.44349E03 6.08604E03 1.31366E03 1.87414E03 8.71296E03 5.44254E03 3.33826E02 7.75852E02 1.54740E02 1.01481E03 2.56868E03 2.30597E03 1.16387E03 1.75337E03 5.00798E03 3.73821E03 5.21538E02 4.83266E02 1.27251E02 4.89721E03 4.19105E03 8.39493E02 1.28243E03 7.43490E02 1.49046E03 4.71845E03 3.66886E03 3.02003E03 5.60801E03 9.52914E03 8.66067E03 3.12654E03 1.46629E03 2.86227E03 6.23703E03 4.94640E03 4.14517E03 2.60584E02 2.32090E03 2.56711E03 9.32726E02 3.56907E02 2.82829E02 1.95483E03 2.91572E03 8.42369E03 6.44773E03 3.41902E03 1.04432E04 1.02429E04 1.55562E03 1.03240E03 1.02227E03 2.77464E02 2.56246E01 3.91072E02 6.24235E02 1.62552E02 4.57789E02 2.49409E03 3.66409E03 3.76149E03 6.13066E03 8.87089E03 1.09019E03 3.64387E02 2.32286E03 6.23507E03 2.76317E04 2.47338E04 9.72548E03 1.38300E03 4.25992E03 8.70970E03 7.56661E03 1.35979E04 8.57035E03 7.61339E03 9.03107E03 3.47094E03 4.38245E02 2.69234E03 3.26841E03 2.76580E03 3.15900E03 5.23264E03 5.81376E03 5.26417E03 1.50572E04 1.33805E04 1.18001E03 6.29106E03 4.77246E03 1.45362E03 8.88993E03 5.03032E03 2.38749E03 1.98682E02 2.57945E03 7.37850E03 2.17916E04 1.65236E04 1.92400E03 3.29778E02 8.23589E03 1.86919E04 5.26508E03 1.10483E03 2.07564E03 4.61709E03 8.58464E02 2.33503E03 4.26059E03 3.84405E03 2.35723E03 2.88953E02 3.34505E03 1.79969E03 3.71040E03 2.90122E03 5.04046E03 4.07552E03 4.15758E02 2.20809E03 3.26508E01 3.48029E03 1.92923E03 5.45434E02 3.23132E03 7.00024E02 1.47133E03 1.32522E03 3.49976E02 1.30789E03 4.99741E03 6.80710E03 1.16624E03 1.78090E03 2.72994E03 1.08597E03 1.83106E03 2.12378E03 6.14907E02 4.97976E02 1.82299E03 3.60791E03 4.95536E03 5.35155E02 3.18225E03 8.52059E02 4.90103E02 8.79481E01 4.00006E02 1.92833E03 1.60198E03 6.74486E02 1.64622E03 2.90119E03 2.31606E03 8.41177E02 7.68734E02 2.61156E03 2.91147E03 1.41997E03 6.16250E02 1.03861E03 5.14695E02 4.16740E02 9.66350E02 1.79022E03 1.98073E02 1.58311E03 2.40139E03 4.79458E02 1.13296E02 3.69842E01 1.16738E03 5.70803E03 4.67498E03 3.83295E02 3.12905E02 3.95074E02 2.36501E02 1.31246E03 2.05879E03 2.99775E03 1.53688E03 4.82652E02 1.89240E02 6.70665E01 1.41920E02 3.89908E02 9.84307E01 4.94083E02 5.08068E02 1.74956E01 2.90608E-02 -Frame 257 1.75128E06 8.83218E05 1.21681E05 1.65488E04 5.12590E03 1.24182E03 1.05182E03 1.29008E03 2.78506E02 1.61640E03 1.16287E03 2.14460E03 5.65503E02 1.66222E02 1.05323E03 7.03661E02 3.99237E02 4.56554E02 2.86212E03 2.50915E03 1.14078E03 2.04034E03 1.30193E03 2.17781E02 9.13566E01 3.30773E02 2.69499E02 7.17700E01 6.30335E02 2.69873E02 3.95956E02 5.09435E03 8.36906E03 2.91588E03 1.28706E03 6.30165E02 1.09134E02 1.03963E02 1.61553E02 1.11014E03 9.21610E02 8.20585E02 1.54618E03 2.46481E03 2.66770E03 9.74345E02 2.99543E03 2.09526E03 6.99571E02 1.64287E03 1.02616E03 3.61769E03 3.02486E03 2.15203E03 7.59637E03 6.65709E03 3.26844E03 4.28883E02 4.10692E02 1.29325E03 2.78159E03 5.07508E03 2.66079E03 4.94249E02 8.17369E03 9.39887E03 1.73892E03 9.88130E02 9.38601E02 2.27438E03 3.82891E03 1.49808E03 5.32155E02 1.77312E02 1.12086E03 3.32213E03 2.10004E03 8.33321E02 1.02098E03 2.29952E03 3.84828E03 1.72427E03 9.04304E02 1.21254E03 2.46176E03 4.67687E03 2.78233E03 1.00437E03 1.59142E01 2.07654E03 2.60257E03 2.81924E02 5.14889E02 5.38556E02 1.07814E03 9.63654E03 1.77044E04 1.09973E04 2.72880E03 4.35768E02 1.28111E03 1.12184E03 1.95041E03 2.53700E03 2.97216E03 4.69784E03 3.11033E03 1.65137E03 2.98935E03 8.30562E03 1.13549E04 8.09273E03 3.61003E03 7.93425E02 1.52804E03 2.33218E03 1.12591E03 2.24327E02 5.49261E02 3.34961E01 1.12322E02 5.23415E02 2.80000E03 1.03175E04 1.03110E04 8.63398E03 1.12670E04 1.90946E04 2.11372E04 3.76260E03 2.94909E03 1.78444E03 1.02390E04 1.06736E04 6.52649E03 4.77803E03 4.36172E03 3.14949E03 3.11594E03 9.24167E03 5.77508E03 7.77308E02 5.95912E02 6.22950E02 2.80896E03 3.51950E02 8.31084E02 7.86588E02 9.17004E03 4.66040E03 9.54088E02 1.08882E04 1.40418E04 5.87537E03 3.73185E03 1.50086E03 1.85446E03 3.66394E03 2.86085E03 6.72429E03 1.15908E04 2.39132E03 1.15867E03 5.45639E03 7.08787E03 1.06859E03 1.59899E03 3.32377E03 3.84160E03 6.55957E03 8.69647E03 6.04538E03 1.37048E03 2.96332E02 2.17296E03 3.48891E03 5.86299E03 6.56871E03 2.31268E03 5.50990E02 2.64547E02 1.68854E02 1.58817E03 4.76208E03 4.54244E03 3.71402E03 4.18848E03 2.01708E03 4.68532E01 1.10314E03 3.99990E02 1.96676E03 4.79627E03 8.81539E03 1.51356E04 9.86231E03 9.66121E02 3.26484E03 6.42723E03 4.46112E03 2.43806E03 7.12921E02 1.37010E02 2.69505E03 5.33423E03 1.68765E03 1.56006E03 8.67983E03 6.35609E03 1.64024E03 1.76094E02 1.46590E02 6.76619E02 9.79535E02 3.24528E02 7.22127E02 1.73071E03 4.23452E02 1.10478E03 1.61370E03 2.69740E01 1.31009E03 1.05108E03 1.59051E03 1.08681E03 3.04482E02 9.11282E02 1.79121E02 3.38343E02 2.81600E03 6.07124E03 2.39832E03 1.83200E02 1.60263E03 5.51560E02 5.18739E02 1.83631E03 1.34392E03 7.87419E02 8.67835E02 2.42941E02 1.48817E02 1.02787E03 3.08165E03 2.85611E03 4.31405E02 1.55241E02 4.13756E02 3.71966E02 4.13749E02 7.86544E01 6.94609E02 1.18720E03 8.87467E02 1.85058E03 2.51528E03 2.34508E03 -Signal: SpeechEndSignal -Signal: SpeechStartSignal -Frame 257 1.70159E05 1.30557E05 4.74308E04 6.05218E03 7.02688E02 2.05600E02 2.27354E02 2.69436E02 1.67342E02 7.44721E02 4.44544E02 4.69503E02 5.12271E02 2.55378E02 7.52596E02 1.23963E03 1.98874E02 1.00125E03 7.99947E02 3.04221E02 5.39616E02 1.18699E03 1.36766E03 7.21811E02 7.50471E02 4.30874E02 1.13656E03 8.46898E02 1.25470E02 5.03543E02 1.52921E02 1.64853E03 6.22303E03 5.13269E03 8.88965E02 6.75653E02 1.58378E03 1.08924E03 2.07017E02 7.04426E02 9.40889E01 5.93892E02 9.32027E02 2.63053E02 4.75036E02 1.23508E03 1.39928E03 6.83002E02 2.38055E03 2.75379E03 3.58975E03 3.86467E03 1.03585E03 1.89865E03 3.77697E03 9.14049E02 1.13775E03 1.31625E03 2.80063E03 3.26149E03 1.75404E03 4.64883E02 1.00905E03 2.53884E03 9.44261E03 6.35964E03 1.90544E03 1.30988E02 1.13764E02 1.34283E03 4.37793E03 4.06235E03 1.66002E03 1.07838E03 2.54129E03 1.22344E03 8.48626E02 4.75960E03 5.75317E03 3.79505E03 1.34218E03 5.29632E02 3.84476E02 2.43561E02 1.78021E03 4.42573E03 1.92285E03 5.94808E02 5.83821E02 9.04095E02 7.86181E02 3.37436E03 3.73090E03 2.07486E03 1.51191E03 1.37730E02 2.37118E03 3.91913E03 1.31166E03 1.67890E02 1.59672E01 1.04405E03 2.66556E03 2.61739E03 3.48239E03 2.97570E03 2.17124E03 2.33976E03 1.23931E03 4.44993E03 1.04127E04 7.00864E03 1.15665E03 2.79675E03 1.79843E03 1.13831E03 1.50034E03 3.86882E03 7.65893E03 4.84999E03 1.07683E03 8.31509E03 3.44874E03 1.13400E03 2.63373E03 5.44647E03 5.57906E03 3.95825E02 8.14549E03 6.36526E03 1.87862E02 1.87889E03 4.89024E02 5.61241E02 8.90596E02 9.59290E02 1.17740E03 4.27508E03 2.82871E03 6.54291E03 4.83286E03 1.06646E02 2.41100E03 3.34946E03 1.90970E03 3.26885E03 4.46886E03 2.29316E03 5.96957E03 7.34594E03 8.02510E02 3.97048E02 1.68854E04 2.21879E04 2.37729E03 1.33743E04 1.18528E04 1.64783E03 8.14698E03 1.19906E04 4.22083E03 8.57872E01 3.13085E02 3.43184E03 3.02934E03 1.16965E03 5.97593E02 1.53840E03 3.41781E03 1.51575E03 4.06804E03 6.37993E03 8.05976E03 5.30211E03 2.81558E02 9.28431E02 2.76289E03 1.63043E03 2.80646E02 8.09129E03 1.08322E04 5.92820E03 3.33067E03 9.26374E02 5.15420E02 3.32707E02 1.39555E03 4.13152E03 2.85266E03 9.55347E01 1.74898E03 1.41407E02 3.03656E03 3.56490E03 3.14572E03 7.82392E03 5.92391E03 1.57576E03 4.83676E03 7.68825E02 1.19281E03 1.97415E03 9.36223E00 6.45418E02 3.72305E00 2.04951E02 1.89817E03 7.36425E03 7.34656E03 3.97789E03 1.98487E03 2.09763E03 2.21618E03 2.60995E03 1.70683E03 3.30649E03 2.22650E03 2.01521E03 2.57351E02 1.06831E03 4.21418E03 1.55936E03 1.81194E03 5.30692E03 4.42015E03 4.37422E02 1.23724E03 2.02455E03 5.14426E02 5.99893E01 2.96616E02 1.07568E03 1.14215E03 1.72680E03 2.00635E03 1.39081E03 1.98072E03 3.18453E03 1.78254E03 2.06916E03 7.44148E02 1.43755E02 1.74711E03 8.58971E02 2.02558E02 2.79333E02 2.21795E02 7.79185E02 1.75075E03 3.68560E03 2.83612E03 9.12091E02 1.44627E02 2.02229E02 1.97379E02 1.64423E02 8.67086E02 -Frame 257 1.75749E05 2.96006E04 2.38221E04 1.15851E04 1.45050E03 6.37358E01 4.88795E01 9.07766E02 2.03643E03 1.75266E03 8.31227E02 7.20575E01 3.01684E01 4.23646E02 1.30368E03 1.42678E03 5.01528E02 1.15812E03 2.74334E02 1.70312E02 1.32854E02 2.46648E02 5.72283E02 7.41290E01 6.91634E02 1.00300E03 2.55119E03 3.14544E03 1.75760E03 7.68984E02 3.58035E02 1.61609E03 1.05327E03 2.21997E02 9.79299E02 9.58853E02 6.76199E02 6.37175E02 1.96110E03 3.41958E03 3.87741E03 1.49176E03 2.17892E03 5.20398E03 4.88136E03 2.32875E03 7.57718E02 6.83631E01 1.91540E03 2.71650E03 2.03696E03 1.88038E03 9.09516E02 2.23429E03 6.01874E03 3.65279E03 3.48282E02 2.81337E02 1.52184E02 3.49846E03 7.48793E03 4.33259E03 1.00506E03 1.84355E03 2.69684E03 3.99808E02 9.35073E02 7.01426E02 7.58347E02 1.28481E03 3.08835E03 1.40710E03 3.05092E02 6.24676E02 6.32902E02 2.51478E02 2.03353E03 2.31926E03 2.19092E02 4.19770E03 3.16064E03 2.77800E03 1.56862E03 3.44558E02 3.37189E02 1.83304E03 2.54511E03 4.26657E02 5.43353E02 3.74956E02 2.16323E03 5.71628E03 3.60007E03 2.27186E03 1.27410E03 2.57582E03 3.47172E03 8.36385E02 4.13592E03 1.22403E03 2.36297E01 2.07167E02 4.71562E02 2.00748E03 7.52988E03 5.28129E03 7.99789E02 2.88593E03 3.91277E03 1.15859E03 2.46824E03 7.42689E03 2.34626E03 1.81128E03 1.16237E03 3.12390E02 1.07843E03 1.08679E02 8.54761E02 4.28268E03 1.33337E04 5.55544E03 5.39418E02 3.96619E02 3.46083E02 4.23211E03 5.78344E03 2.49661E03 1.52444E04 9.01932E03 5.64760E01 2.02522E03 3.45249E03 2.83560E03 1.42274E03 1.21281E03 2.32514E03 1.61721E03 1.12827E02 1.29788E03 3.85144E03 4.71524E03 9.81613E03 1.19659E04 6.82666E03 3.61956E03 2.64538E03 6.93400E03 1.23421E04 5.25639E03 5.12884E03 2.30282E04 4.10375E04 2.58749E04 4.66879E03 1.23781E03 6.13527E03 1.69389E03 1.80012E03 8.40668E03 2.42837E03 2.65466E02 1.92265E03 1.94804E03 4.73639E02 1.14913E03 2.26561E03 8.40913E02 1.98493E03 7.53561E03 1.25002E03 1.74127E02 5.53461E02 2.04987E03 6.60590E01 1.66507E03 2.22908E03 2.13255E03 7.23246E03 8.84765E03 2.49203E03 4.23893E02 8.22257E02 4.66267E03 1.45383E04 2.15389E04 1.34722E04 2.89140E03 3.38047E03 3.03317E03 7.21832E02 1.42443E03 6.75984E03 8.02633E03 1.41511E04 1.37885E04 7.00236E03 2.75734E03 4.55455E03 8.63511E03 1.28800E04 5.64798E03 4.96278E02 1.45745E03 2.20559E03 2.03814E03 1.33157E03 7.18401E02 1.76821E03 1.93090E02 1.56702E03 7.89989E02 7.84562E02 3.77405E03 7.86297E03 3.49148E03 1.69021E03 3.70337E03 5.40705E03 5.00116E03 2.28109E03 1.45606E03 2.10868E03 3.85874E02 2.07765E03 5.10109E02 2.04129E03 4.23928E03 8.56219E02 6.99802E01 1.38863E02 4.95566E02 5.17037E02 7.89554E02 1.06761E03 1.15904E03 2.45187E03 2.61920E03 1.64337E02 8.40547E02 2.06174E03 4.47550E03 4.42735E03 1.46209E03 1.01829E03 3.81274E02 1.73270E02 1.71024E02 1.03755E03 2.28588E03 7.79596E02 2.06425E02 3.64619E02 2.66510E02 2.18793E02 1.00389E03 1.60506E03 -Frame 257 1.80413E05 1.52919E05 7.29549E04 1.34983E04 5.58945E02 7.59620E02 7.27907E02 1.37694E03 8.83930E02 1.43135E02 1.01941E02 1.68803E02 2.18416E02 5.62132E02 1.14396E03 5.68458E02 5.99974E02 9.84211E02 1.67691E03 2.29555E03 1.55901E03 4.02262E02 9.53784E02 8.94404E02 1.31241E02 2.09527E02 2.10399E03 2.86046E03 3.96385E02 7.29571E02 1.32473E03 4.65443E02 2.09849E02 2.57639E03 2.89316E03 2.35381E03 3.38910E03 4.30586E03 1.03082E03 1.90856E03 3.43273E03 1.82908E03 4.23498E02 3.06679E03 9.86805E02 6.64697E03 9.22271E03 7.03773E03 2.17384E03 5.40080E02 7.77675E02 8.84536E02 3.48624E02 7.08705E02 3.13842E03 6.83014E02 3.22623E02 6.15200E02 3.98528E02 1.57739E03 1.80098E03 3.80064E02 2.74272E03 1.69590E03 1.61670E03 1.67609E03 1.81002E03 3.14281E03 3.69098E03 3.92031E02 8.28389E02 1.15089E03 6.34414E02 3.55976E02 7.46275E02 2.79276E03 4.94864E03 1.49773E03 1.31565E03 6.22804E03 4.87524E03 2.20217E03 2.94035E02 3.14909E03 3.22616E03 4.68144E03 5.83264E03 5.12142E03 3.42331E03 1.49544E03 1.11019E02 1.85602E03 2.14309E03 8.54591E02 3.80680E03 3.95918E03 5.35676E03 9.21797E03 7.01089E03 9.29156E02 3.32053E02 6.96569E02 2.05062E02 3.14193E03 9.85288E03 5.60938E03 3.19387E03 1.95696E03 4.11137E03 2.45654E03 3.81104E03 7.68460E03 2.25260E03 2.18030E02 3.44926E02 1.98984E03 3.14120E03 2.99006E03 1.06246E03 1.12030E03 1.15011E04 8.18510E03 1.81078E03 2.10264E03 2.11552E03 7.55337E02 1.15245E04 2.59252E04 2.13897E04 2.89916E03 2.47033E03 3.77112E02 1.92625E03 2.02693E03 2.39257E03 5.23922E02 3.49374E02 2.46326E03 5.27582E02 5.39735E02 1.72972E03 9.12425E02 1.81384E03 6.73895E03 3.98102E03 3.00641E03 8.45442E02 1.78045E03 7.60383E03 1.11789E04 1.26368E04 1.35422E04 3.32175E03 4.30752E02 1.31171E03 1.15791E02 3.38112E03 2.27878E03 1.89329E03 8.48990E03 5.27919E03 1.16082E03 2.30374E03 2.17398E02 2.16682E02 1.56450E03 6.31681E03 1.03837E04 1.43531E04 1.64200E04 1.18101E04 6.50088E03 3.35261E03 8.06641E03 7.29822E03 3.74229E03 2.48686E03 1.08578E04 6.03792E03 5.74190E00 5.66379E02 4.74098E03 5.66330E03 1.67219E03 2.43486E03 1.45898E04 6.15453E03 4.39343E02 5.17092E03 3.57850E03 1.55383E03 4.09421E03 5.28280E03 7.69443E03 6.82959E03 6.23740E02 1.28646E03 1.65434E03 1.10893E03 2.24584E03 8.88134E03 3.94052E03 9.52930E02 2.09479E03 3.59180E02 2.08331E03 4.90076E03 4.59770E03 5.74640E02 3.20845E03 8.65134E03 4.30548E03 1.24633E03 4.88091E03 3.87089E03 4.05719E02 4.28925E02 2.25778E02 7.80047E01 3.43463E02 3.17356E02 5.56059E02 2.21153E03 3.27666E03 3.48005E03 2.50755E03 4.40371E03 4.16070E03 1.35813E02 8.60169E02 1.63311E03 6.99248E02 4.42109E02 5.17982E02 3.29377E02 7.31632E01 3.96022E02 3.99965E01 7.38609E02 8.01187E02 1.07491E03 2.88179E03 1.61930E03 2.13330E02 9.86773E02 1.82103E03 7.82188E02 2.82573E02 1.01525E02 3.81426E02 1.01902E03 1.08510E03 1.58495E03 3.00743E02 2.18885E01 1.21836E02 2.37409E02 -Frame 257 6.30777E04 7.28615E04 9.90766E03 1.77093E04 1.02126E03 3.83903E00 4.36551E02 1.06676E03 5.02366E02 1.69292E02 3.42905E01 4.35160E-01 3.63998E02 9.71365E02 1.96587E02 1.19629E02 1.63759E01 1.50547E02 3.71542E02 4.64788E02 5.37895E02 4.04035E02 3.57668E02 8.08743E02 7.32168E02 4.40496E02 4.50564E02 3.39973E02 3.58464E02 1.10531E03 7.61188E02 3.05476E02 5.98288E02 1.83201E03 2.89944E03 2.00436E03 6.01469E02 3.72852E03 2.72380E03 5.60730E01 3.12895E01 8.63445E02 3.85382E03 4.60712E03 1.24798E03 6.69021E02 1.26210E03 3.18943E02 2.32156E03 1.56087E03 1.92247E02 9.25639E02 7.29526E02 1.26098E03 4.20807E03 2.77282E03 3.77153E02 4.13109E02 6.06510E02 8.27647E02 2.61147E03 3.90362E03 2.98259E03 2.06392E03 1.30429E03 3.21493E02 9.94666E02 3.69378E03 1.81028E03 2.91430E03 5.40113E02 1.97406E02 3.31277E01 3.65729E02 4.78145E02 4.97818E02 2.25679E03 4.13536E03 4.55043E03 2.73538E03 1.22128E03 3.66645E03 4.71344E03 1.17558E03 5.52733E03 2.51430E03 1.73982E02 1.59996E03 1.80372E03 1.13700E03 6.99947E02 8.54718E02 4.17071E03 2.96347E03 1.96664E00 3.41971E02 3.50673E02 1.16536E03 3.27023E03 1.04621E03 6.66438E02 2.90569E03 4.55566E03 7.11700E03 4.80912E03 4.04443E02 1.50834E03 4.87555E03 1.39096E03 1.63906E03 1.07965E04 6.43319E03 8.37735E01 3.53782E02 3.34683E02 3.55063E03 3.52696E03 6.05042E03 1.13753E04 1.02624E04 3.87814E03 3.15906E03 3.00018E03 2.04916E03 4.28275E03 2.42030E03 3.01028E03 9.39811E03 1.32126E04 9.22054E03 8.03954E03 9.52830E03 7.04957E03 5.63318E03 7.32821E03 6.99477E03 5.14319E03 3.85397E03 2.06229E03 1.98307E02 1.91161E03 2.49034E03 3.25967E03 2.88040E03 2.06251E02 1.91413E03 7.74072E03 9.52838E03 1.12730E04 4.43029E03 6.92814E03 6.71009E03 2.73288E03 3.80274E03 1.23557E03 2.60513E03 8.76625E03 6.83271E03 8.15519E02 2.05033E03 7.22306E03 4.72684E03 3.55589E03 4.59436E03 3.09377E03 4.74978E03 3.56727E03 3.42404E03 5.28312E03 2.80393E03 1.16866E04 1.01304E04 7.13461E03 7.41206E03 5.57812E03 2.41342E03 8.07311E03 6.92202E03 1.47779E04 1.16793E04 7.16421E03 1.12105E03 5.87540E02 8.55102E02 2.26948E02 4.30513E03 9.37120E03 2.78808E03 5.26428E03 1.06956E04 9.98675E02 4.07707E03 5.87094E03 4.66585E03 1.57555E03 6.34189E02 2.36406E03 9.38434E01 1.52112E03 7.43871E01 5.70251E03 1.01643E04 6.53553E03 2.32014E03 4.91661E02 2.46249E01 1.62440E03 2.10620E03 2.18792E03 1.00709E04 1.51689E04 9.06210E03 2.50474E03 1.39571E02 3.68990E03 5.60722E03 6.93839E03 5.89277E03 3.81878E03 2.74847E03 2.01939E03 2.08868E03 1.19610E03 1.90570E02 1.09276E03 2.24725E03 5.16080E03 8.98123E03 3.41746E03 2.54681E02 1.40154E03 8.05465E02 5.95620E02 8.12398E01 6.60659E02 2.66501E03 3.37069E03 2.51153E03 1.78865E03 2.50881E03 5.36119E03 4.08152E03 7.96707E02 8.70076E02 1.77507E02 2.78817E02 4.53946E02 5.83847E01 1.01640E02 8.31815E02 1.61665E03 4.95328E02 8.88678E02 2.96293E03 2.37485E03 2.57376E03 2.90787E03 -Frame 257 1.07354E06 6.87148E05 1.70648E05 9.84727E03 3.48359E02 2.51679E02 1.56556E03 3.94891E03 2.82179E03 1.09150E03 4.42883E02 2.31089E02 4.88450E01 6.01830E01 1.47634E02 3.27856E01 4.87461E01 3.98873E02 1.76111E03 1.41170E03 7.24891E02 1.80348E02 4.99582E01 6.42019E02 7.66846E02 4.20682E02 8.28739E02 8.92595E02 1.28728E03 2.05786E03 1.53929E03 8.95485E02 1.46042E03 2.48094E03 1.98109E03 1.74459E03 1.76284E03 2.58672E02 2.43790E03 1.00341E03 1.30124E02 2.45356E02 3.60721E02 3.35775E03 2.29412E03 7.11383E02 3.60697E02 3.18671E02 1.81023E03 1.91572E03 8.11209E02 2.99932E02 3.16888E02 8.04111E02 4.20657E03 2.80249E03 2.10361E02 3.71898E02 1.03162E03 7.03107E02 2.74956E02 4.89364E02 5.85241E02 9.77831E02 6.83608E02 2.10749E03 3.84491E03 8.12138E03 9.12021E03 6.68335E03 2.21579E03 1.69639E03 7.99086E02 6.70618E01 1.11496E02 1.70864E02 1.35264E02 4.08097E02 1.28669E02 7.89959E02 5.10678E02 1.94253E03 3.04591E03 3.74215E03 2.28747E03 1.86029E03 1.36880E03 1.03688E03 1.17498E03 8.33588E02 6.40195E02 1.49009E03 1.73282E03 1.17556E03 7.87723E02 4.11174E03 1.04280E04 7.46885E03 1.85898E03 4.39583E03 5.61483E03 2.63005E03 3.19834E02 2.70798E03 3.52946E03 6.20716E02 2.78758E01 1.54685E03 2.62881E03 2.26455E01 4.46560E03 4.63413E03 2.99270E02 1.28376E03 2.71713E03 2.26556E03 5.84028E03 5.25256E03 1.99327E03 4.70433E02 1.24965E03 4.50067E03 1.93455E03 8.68356E02 9.53231E02 1.56898E03 3.05830E03 3.68301E03 5.51354E03 2.64519E03 3.05796E03 2.02379E02 1.33328E03 2.76441E03 7.15938E02 3.81180E03 1.38122E03 1.46854E03 2.92962E03 2.09482E03 1.06020E03 6.41619E02 2.10076E03 2.68324E03 4.45535E03 3.72256E03 6.82702E03 1.33830E03 4.45731E03 4.65205E03 1.83266E03 1.59699E04 1.78895E04 1.77138E03 3.20742E02 3.10905E03 9.20994E03 2.24812E03 7.30669E02 2.69579E03 5.44037E03 2.19197E03 9.04741E02 3.96072E02 1.42814E03 3.23762E03 1.81856E03 1.59089E04 1.27590E04 8.92996E02 7.00513E02 1.41208E03 1.95425E03 3.46755E03 9.11516E03 1.86293E04 5.91704E03 5.20214E02 5.33688E03 1.08807E04 7.16584E03 3.45709E03 2.47939E02 7.96484E02 4.06004E03 8.15008E03 2.42794E03 1.24666E03 4.46535E03 1.23384E04 5.74940E03 2.53840E03 6.47666E03 1.81218E03 4.14457E02 1.52650E03 5.86551E02 3.32209E03 6.89648E03 3.62020E03 7.18254E02 2.96382E03 1.38846E03 7.56314E02 1.09604E03 1.75372E03 3.63784E02 1.83727E02 1.38835E03 1.82839E03 1.49340E02 1.15150E03 2.40757E03 6.10073E03 5.70366E03 2.35927E03 2.23242E03 4.81028E03 2.92224E03 2.99988E02 1.32168E03 1.30163E03 1.92903E02 1.45530E02 3.71253E02 8.37036E01 3.16549E03 4.94221E03 4.65819E01 2.47713E03 4.49724E03 3.29908E03 1.88796E03 2.17866E03 3.20657E03 7.88036E02 6.29717E02 5.13108E02 6.80065E02 1.09697E03 2.93392E02 1.94952E03 3.55938E03 2.38664E02 7.31943E02 1.19845E03 4.01483E02 1.03443E02 1.03710E03 1.27529E03 4.76069E02 2.45876E03 3.88417E03 1.93107E03 1.27585E03 3.66810E03 2.21570E03 -Frame 257 2.37134E05 1.57058E05 2.09429E04 2.29728E04 6.38235E03 1.01413E03 2.94785E01 9.38556E02 8.93782E02 1.76198E02 7.46280E02 1.64254E02 2.98775E02 2.90264E01 9.91773E01 1.62474E02 2.36247E02 1.08714E03 9.44472E02 9.26335E02 2.22086E02 2.41988E02 5.62314E02 7.62472E02 2.59949E02 1.66958E02 8.07370E02 2.60008E02 5.85492E02 2.55243E01 1.17579E03 2.27528E03 3.86563E03 3.59081E02 6.80217E02 9.76594E02 2.61773E03 2.03702E03 4.82649E02 2.22479E03 1.91444E03 2.24402E02 8.68231E02 2.19896E03 5.41733E02 2.03758E02 9.65975E02 5.26223E02 4.79787E02 6.08717E02 4.84642E01 1.82861E02 1.67824E03 4.58057E03 8.65370E03 4.78786E03 1.58253E03 2.25498E02 1.20655E03 1.87611E03 1.09381E03 7.29739E02 7.30379E02 1.70835E03 1.09208E03 1.06852E03 2.75069E02 3.19287E03 5.59962E03 4.80292E03 2.76017E03 2.43271E03 2.41113E03 1.37951E03 2.01177E03 2.07540E03 2.14673E03 7.81483E02 2.45309E02 1.68329E03 1.42712E03 4.80572E02 7.57479E02 1.24227E03 1.89046E02 5.39291E02 7.33827E02 5.34077E02 1.23862E02 9.21415E02 1.18678E03 2.40322E03 2.50858E03 1.73573E03 5.59131E02 2.30707E03 1.46854E04 8.95339E03 6.84951E02 1.41818E03 5.15435E03 4.01161E03 5.56823E02 8.69991E02 9.05820E02 1.28766E03 1.03572E02 2.11434E03 4.58435E03 9.45268E02 2.21586E03 1.00415E04 4.62218E03 4.66186E02 2.11813E03 1.58642E03 1.73766E03 2.09317E03 6.58072E02 7.71367E02 5.43962E03 8.57888E03 4.45432E03 5.36039E03 8.24390E03 9.13297E03 4.93203E03 1.33267E03 7.55423E03 7.68025E03 5.58982E03 1.18109E03 7.12637E02 4.96732E03 8.68281E03 1.84233E03 4.01757E02 1.79757E02 2.41117E03 3.26023E03 6.39993E03 7.94433E03 2.69162E03 2.69985E01 3.15952E03 4.12268E03 2.60291E03 6.05336E03 1.50946E04 9.90021E03 1.52983E03 8.82566E03 2.37700E04 2.36217E04 1.06185E04 5.11139E03 2.61688E03 4.06325E02 2.17234E03 3.89114E03 1.11347E04 7.43260E03 2.52958E03 3.65778E03 2.49742E03 6.68887E02 6.79379E03 1.43664E04 8.80796E03 5.89709E02 1.31226E03 1.55393E03 3.50957E03 2.87825E03 5.65002E03 9.94554E03 5.97297E03 1.04335E03 1.52875E03 3.29801E03 1.49110E03 1.88529E03 5.50625E03 1.06388E04 6.17788E03 1.53731E03 4.94961E03 4.91577E03 6.83151E03 5.84343E03 3.67982E03 1.08178E03 1.16928E03 7.85212E03 2.83804E03 1.96944E03 3.29003E03 1.83055E02 3.70332E03 5.03288E03 2.07200E03 2.10813E02 2.14308E02 2.07135E02 1.36111E03 2.71428E03 1.69847E03 1.98429E02 5.01690E02 6.48146E02 3.44358E01 1.24011E03 5.14359E03 6.98654E03 1.00829E03 2.84981E01 3.86145E02 1.11436E03 1.04735E03 2.40676E03 2.09707E03 2.17004E02 7.56601E01 2.08041E02 5.09437E02 2.09179E02 1.31094E03 3.56858E03 4.25488E03 2.53779E03 5.62127E02 1.48763E03 2.56776E03 3.01302E03 5.87352E03 3.00645E03 4.42498E02 4.15555E02 7.81995E02 1.95402E02 3.36345E02 2.29061E03 7.15904E03 6.01723E03 1.07381E03 2.65559E03 3.46433E03 1.66792E03 7.35496E02 2.57771E03 1.85015E03 4.19265E02 1.74353E01 1.43318E03 2.52699E03 1.04285E03 7.36739E01 -Frame 257 2.66128E05 2.61770E05 9.61347E04 2.68548E04 7.08387E04 5.83868E04 1.88540E04 5.79366E03 7.04641E02 4.94032E03 1.25997E04 3.40320E03 1.68902E01 2.38459E02 1.43176E03 2.91939E03 2.20914E03 6.58239E02 2.59203E02 1.36128E03 8.12497E02 1.41139E02 1.27840E02 1.49303E02 1.89971E02 5.99555E01 1.72313E03 4.50452E03 2.82018E03 1.55179E02 1.09951E03 1.79648E03 7.48155E03 3.62229E03 2.99403E03 3.46435E03 6.04540E02 2.89183E03 2.81952E03 4.35540E03 1.59792E03 2.66574E03 2.74171E03 1.61009E02 2.03882E03 1.82113E03 8.50142E02 7.92718E02 1.26157E02 5.02522E02 9.81214E02 5.60678E02 3.36098E02 1.97511E02 2.70738E03 1.02617E04 5.63251E03 3.24472E03 6.97117E03 2.62273E03 8.08760E02 2.04484E03 2.42953E03 1.68214E03 3.81154E03 4.99668E03 2.71335E03 6.45770E02 1.41272E02 3.58731E02 5.05943E03 3.36438E03 4.40395E03 3.24304E03 1.83051E03 1.50362E02 5.15127E02 3.89184E03 5.94476E01 2.57455E03 1.27310E03 1.92315E03 6.62704E02 1.62663E03 2.61460E03 7.39079E02 5.03311E03 7.02991E03 3.05126E03 6.68558E02 7.39247E02 1.13517E03 4.71496E03 1.04183E04 7.21365E03 8.85909E03 1.00480E04 1.41476E03 9.01346E02 9.26823E02 4.12528E02 1.23517E03 9.10928E02 1.62607E02 8.46108E02 2.78290E03 3.75361E03 1.21143E03 2.90057E03 2.05889E03 1.22291E03 1.30631E04 1.72169E04 5.49097E03 1.35656E03 9.27316E02 3.03685E03 8.36710E03 4.56354E03 1.90334E03 2.69096E03 1.21327E03 6.29096E02 2.94787E03 2.78824E03 9.35240E02 1.62415E03 2.10092E03 2.24525E03 4.55084E02 1.44528E03 4.27386E03 3.78680E03 1.45103E03 4.14029E03 5.52942E03 1.78188E03 4.34668E03 7.85682E02 1.94430E03 9.66632E02 2.86594E03 1.19602E04 1.45539E04 7.69651E03 4.90810E03 4.75409E03 6.67079E03 1.30037E04 6.58405E03 9.51199E02 2.43350E03 1.53347E03 1.54168E04 1.21434E04 3.75504E03 3.55576E03 4.70058E03 1.88380E03 2.96946E03 1.82727E04 1.84222E04 3.19925E03 1.94292E02 1.76627E03 1.07247E03 1.80159E02 4.02580E02 3.00201E03 2.61712E03 4.90712E02 6.93277E03 8.63949E03 5.76594E03 4.60172E03 9.42128E02 1.23639E03 3.09527E02 4.65812E03 5.78707E03 1.26045E03 1.22363E02 4.48382E03 1.17798E04 3.57512E03 2.10293E02 5.63626E03 2.94776E03 2.18683E03 6.55491E03 5.11484E03 9.01515E03 7.28328E03 4.49683E03 2.22798E04 1.77408E04 7.04748E03 8.97195E03 8.14213E03 1.72822E03 1.95142E03 6.15155E02 7.32597E02 1.73109E03 1.98480E03 5.61676E02 4.64970E02 4.31227E03 6.51086E03 2.27466E03 7.55202E02 5.63712E03 1.34339E04 7.88327E03 1.83255E03 8.41575E02 9.23944E02 1.87154E03 2.97321E03 9.34989E02 4.81463E03 3.66806E03 2.86371E03 1.70568E03 1.07450E03 8.32347E02 3.51710E02 7.60938E01 1.51990E02 3.52185E02 9.47461E01 5.25684E02 8.08971E02 1.96061E03 7.08214E02 1.04287E03 3.96541E01 4.54392E02 1.33281E03 9.39906E02 9.93983E02 1.55464E03 6.83578E01 4.10619E03 6.02911E03 2.54931E03 9.30612E01 6.01800E02 2.20016E03 3.31835E03 1.35319E03 2.79120E02 6.93525E-01 4.99366E02 2.64995E02 1.00455E03 2.55914E03 -Frame 257 9.66395E05 4.37559E05 3.56738E04 4.64945E04 2.33067E05 3.49250E05 2.58212E05 8.96507E04 2.19673E04 2.45303E04 7.78302E04 9.58096E04 6.93769E04 5.99626E04 6.98332E04 6.57950E04 3.96256E04 2.01819E04 9.79168E03 3.69802E03 1.32613E03 2.53678E03 5.14831E03 5.29255E03 4.03532E03 1.93967E03 2.64352E03 2.20145E03 4.93678E03 4.13326E03 3.94636E03 8.14294E03 1.57011E04 1.16907E04 1.67020E04 3.66630E04 3.42130E04 1.46926E04 7.48548E03 1.27796E04 1.57321E04 2.02568E04 2.23620E04 1.30918E04 5.60332E03 1.64389E03 2.13280E02 1.49484E03 5.65513E03 8.23837E03 8.16006E03 5.27783E03 4.33790E03 1.79231E03 1.94529E03 9.19014E03 1.20255E04 7.89318E03 4.31627E03 3.00643E03 1.72719E03 4.65429E03 7.66560E03 6.76356E03 1.41096E04 2.27205E04 2.00997E04 1.66873E04 1.57126E04 1.63879E04 2.32766E04 2.43891E04 1.10812E04 4.62155E03 6.63302E03 1.04867E04 1.16569E04 1.54337E04 3.41381E04 6.03906E04 8.60667E04 1.02057E05 1.03195E05 1.17681E05 1.30577E05 1.08261E05 9.22088E04 5.03058E04 1.41616E04 3.35204E03 2.47575E03 2.18683E03 1.30098E03 4.99447E03 5.41363E03 5.86845E03 1.03015E04 1.00735E04 9.16157E03 7.93696E03 5.16159E03 3.27123E03 9.39678E02 3.94678E02 1.19625E03 2.55844E03 3.86376E03 1.43089E03 1.27270E03 7.38917E02 7.60276E02 1.02458E04 1.11794E04 1.74149E03 2.27086E03 3.19136E02 3.06396E03 7.96743E03 3.75032E03 2.29476E03 1.19555E03 1.83899E03 5.41741E03 8.58190E03 4.35358E03 1.08839E03 2.12432E02 7.89947E02 2.71834E03 7.34883E02 2.24434E02 1.74064E03 2.11773E03 2.63871E03 2.77643E03 3.85631E03 5.91265E03 1.10074E04 1.62564E04 1.31657E04 4.67031E03 7.86725E02 3.77704E03 3.55574E03 5.72301E03 4.28679E03 3.23987E03 3.80036E03 1.28282E04 5.54827E03 1.29191E03 5.55408E03 3.59137E03 7.29492E02 1.78183E03 1.31750E03 5.74496E03 2.27169E03 9.87544E02 4.44763E03 2.84414E03 1.63645E03 5.10792E02 9.50144E02 1.03341E02 1.73453E03 3.03666E03 5.28688E03 5.46244E03 1.89018E03 6.62472E03 8.07939E03 3.45348E03 1.83506E03 6.83469E03 1.20419E04 7.54399E03 2.96711E03 1.55358E03 2.58726E03 5.75674E02 1.76660E03 2.34523E03 1.59350E03 7.48991E03 1.87481E03 1.49076E03 7.30272E03 1.26012E04 1.38735E04 5.17092E03 9.93186E03 1.96151E04 1.23909E04 1.01497E04 1.25106E04 2.94818E03 2.01641E02 4.87373E03 4.45810E03 2.33911E03 2.62123E03 2.28899E03 1.02347E03 2.30136E03 3.30436E03 7.94914E03 1.11782E04 2.82848E03 1.57366E03 1.87467E02 4.18458E03 1.03427E03 1.77833E03 2.00323E03 3.90772E03 3.89060E03 2.75019E03 5.38174E03 5.17151E03 4.06614E03 1.56284E03 1.56632E03 2.98838E03 4.09401E03 2.97021E03 2.26824E03 3.72469E02 1.44542E02 1.66319E03 2.32801E03 1.06385E03 1.73247E02 3.91019E02 1.64378E03 1.01225E03 1.09778E02 2.87995E03 3.38530E03 1.59823E03 5.78815E02 5.16580E02 1.00962E03 4.04038E02 4.59107E02 1.43167E02 5.93544E02 1.06178E02 5.61093E02 3.07067E03 4.19534E03 8.24125E02 7.99661E02 1.41694E03 1.43555E03 1.55138E03 1.45680E03 -Frame 257 4.40094E05 1.41093E05 1.70124E03 2.33829E04 1.95598E04 1.06638E04 3.98376E04 6.03444E04 1.52336E04 7.76199E03 3.39456E04 2.75139E04 7.08671E03 6.17940E03 6.40654E03 1.06019E04 1.63651E03 2.82860E03 2.66085E03 1.09529E03 2.23718E02 8.12278E02 2.68709E03 8.24026E02 1.22764E03 3.38304E03 2.73289E03 2.63893E03 2.91196E03 9.11903E02 5.50482E02 4.06107E03 1.42398E04 1.96936E03 3.79812E03 9.77688E03 1.35776E04 1.32004E03 2.30052E03 6.66543E03 1.85916E03 2.77190E03 1.35652E04 6.08091E03 7.46998E01 9.43139E02 3.86566E03 4.64872E03 7.16503E02 3.05111E03 2.27949E02 2.54137E03 5.71915E03 3.48878E03 3.18789E03 8.66612E03 6.03277E03 1.24808E02 8.10926E02 8.67020E02 2.22298E03 3.33328E03 3.65791E01 1.92010E03 4.30834E02 3.59909E03 2.83222E02 6.94617E03 2.73087E03 1.24037E03 9.07034E02 5.47355E03 7.18955E02 2.93886E03 2.05648E03 9.94235E03 5.05324E03 1.58007E03 1.72180E04 2.57289E04 3.86533E02 2.90297E04 3.65308E04 4.60900E04 4.23196E04 7.43576E04 1.26959E04 8.06683E03 4.48981E03 1.21135E03 2.97407E03 5.86974E03 1.37501E03 1.61636E03 2.11984E03 4.43286E02 9.16115E02 2.31559E03 3.12496E03 1.20139E03 3.42804E03 2.04009E03 5.29303E03 9.87186E02 2.35774E02 1.93936E03 3.22444E03 2.39051E03 2.69989E03 1.96690E03 3.44814E02 5.30211E03 2.61769E03 7.48155E03 1.07040E04 7.06384E03 4.50829E03 1.43784E03 1.03012E03 4.67009E03 3.53406E03 1.70652E03 8.91937E03 2.97841E03 3.96318E02 2.02782E03 5.85432E02 1.26358E03 1.20350E04 1.57995E04 7.71047E03 2.40412E03 8.31291E02 1.24565E03 1.62349E03 3.41062E03 3.59951E03 1.37725E03 8.29271E03 4.08537E03 7.33722E02 6.45277E03 3.89302E03 1.92691E02 2.87379E03 7.45083E03 2.55539E03 3.35648E03 3.71275E04 5.83502E04 1.82004E04 1.98414E02 2.07324E03 3.17421E02 4.56645E03 5.13379E03 5.20590E02 6.87484E02 3.57224E03 5.29239E03 4.09492E03 5.05274E03 5.92630E03 5.37246E03 1.28003E03 1.07254E03 1.08381E03 2.83745E03 1.53577E04 1.91612E04 6.51058E03 7.20574E03 4.34032E03 1.63180E03 8.20624E02 5.83755E02 2.00605E03 1.05746E03 1.64634E02 5.52924E02 3.79063E03 1.17776E04 2.08873E04 1.82714E04 8.48279E03 2.57930E03 1.26175E03 6.23872E03 3.48241E03 7.89290E03 1.07804E03 4.26556E03 1.38784E04 1.13048E04 6.80337E03 9.32144E03 1.53123E04 1.12500E04 3.42136E03 1.45480E03 2.23087E03 2.76899E03 1.30358E03 3.44738E01 3.21888E02 9.48129E02 1.88787E03 7.34162E03 5.32946E03 2.10709E03 2.00111E03 4.78674E03 3.19900E03 2.14152E02 1.10582E03 3.16563E03 2.47098E03 1.48775E03 1.49732E03 1.29105E02 1.79786E03 1.58573E03 9.21186E02 9.66240E02 2.42747E03 2.73952E03 2.58127E03 6.63235E02 1.48420E02 3.00282E03 2.99412E03 2.00337E02 9.51899E02 1.81161E03 3.35255E03 3.64629E03 9.22701E02 1.92068E03 5.38688E03 6.05414E03 2.49198E03 9.54594E02 9.97536E02 2.90616E03 3.17771E03 1.30815E03 6.42878E02 1.24707E03 8.52267E02 1.78385E03 6.41595E03 4.95278E03 1.99478E02 1.25640E03 9.36469E02 4.43582E02 3.84474E02 -Frame 257 5.79432E04 9.93523E04 9.71589E04 9.01201E04 9.22837E04 6.61180E04 5.53461E04 2.09401E04 6.51998E03 2.47465E04 4.21242E04 3.05655E04 3.45607E04 1.40111E04 3.36193E03 6.19614E03 1.66536E04 1.63312E04 6.82433E03 1.15666E03 1.66714E03 5.44757E03 1.87786E03 3.38697E03 1.83659E03 3.83659E03 3.28231E03 2.76856E02 1.25287E02 3.44255E03 7.50115E01 1.95289E04 1.25286E04 4.67557E03 2.13102E02 2.86196E03 5.66160E03 7.06788E02 1.56728E03 9.90132E02 2.78305E03 1.44111E03 6.37909E03 1.27154E04 5.97124E03 3.39111E02 4.20633E03 1.56861E04 2.35089E04 1.13111E04 1.30687E04 8.24430E03 3.48702E03 1.41142E04 4.83197E04 7.84889E04 7.55175E04 7.17939E04 2.72218E04 2.68468E04 5.04731E04 9.08988E04 5.46523E04 3.06399E04 2.51011E04 2.33226E04 1.21950E04 3.38331E04 3.81123E04 1.14840E04 3.51101E03 1.79629E04 2.22215E04 9.21603E03 2.43993E04 1.38042E04 4.80681E03 2.84505E04 7.78872E04 4.08425E04 5.01893E03 3.07299E04 4.21466E04 1.99911E04 1.67834E04 3.60305E04 2.42657E04 2.81459E04 1.02377E04 4.09935E04 1.49202E04 3.40511E03 6.62895E03 4.19268E04 2.10314E04 1.93680E04 4.25475E03 3.33601E04 1.40373E04 3.35764E04 1.42174E04 8.42938E03 3.83083E03 1.38184E04 1.62874E04 1.00624E04 1.58060E04 5.48436E03 2.16529E03 2.36934E04 5.95283E03 3.70218E04 2.73266E04 8.85196E00 2.10755E03 8.89989E03 1.29630E04 2.30733E04 1.05735E04 7.30076E03 2.03243E04 3.36393E03 4.93857E03 4.01799E03 5.95869E03 9.06480E03 1.53931E04 2.99114E02 3.18029E04 2.35923E04 7.47995E03 2.31733E04 4.58895E04 5.00235E04 2.48891E04 1.46535E04 2.40355E04 4.79388E04 1.05967E05 6.05027E04 3.55586E04 1.80955E04 1.82177E04 7.35898E04 9.24346E04 1.07975E04 1.28833E03 1.01366E04 1.32676E05 1.10193E05 3.24162E03 3.66366E04 6.07569E04 8.29434E04 3.88991E04 4.22674E04 3.09169E04 1.65212E04 2.09889E04 1.03287E04 9.31639E04 1.12580E05 2.81602E04 6.35197E04 1.07634E05 1.03777E05 9.34690E04 1.30170E05 8.76760E04 8.06633E04 1.58029E05 7.41220E04 7.63824E04 6.53589E04 2.94585E04 3.84360E04 4.14700E04 4.05061E04 2.76942E04 1.38606E04 2.31307E04 7.64403E03 2.84324E04 3.45698E04 1.08390E04 1.17476E04 6.23470E02 1.99660E04 4.66283E04 2.34914E04 5.11502E03 1.22816E04 6.94717E03 1.71182E04 1.52049E04 9.86729E03 2.72757E03 1.20141E04 2.74083E03 9.60740E03 1.35096E04 5.47590E03 1.11737E04 1.01628E04 3.61204E03 2.77264E03 5.23007E03 1.77717E03 7.96854E03 1.26480E04 3.41667E03 1.06727E03 5.88889E03 5.35232E03 1.59331E03 2.08631E03 1.82229E02 1.31006E02 9.34327E01 5.07215E03 7.19186E03 6.69169E02 5.15812E03 9.94281E03 1.85400E04 1.86302E04 9.22143E03 2.11120E03 6.54240E03 8.40892E03 1.06996E03 8.45795E03 6.62749E03 2.67405E03 1.48861E03 2.56232E03 7.30527E03 3.49695E03 2.96654E03 2.41295E03 7.23494E02 1.58325E03 7.26860E02 3.38462E03 4.17629E03 4.77294E02 7.79075E02 1.39535E01 9.28871E02 2.77682E02 2.60338E03 4.22940E03 4.25230E02 3.15939E03 2.89336E03 2.14355E02 1.50814E02 -Frame 257 7.86759E05 5.63865E05 3.82612E05 6.83221E05 4.76918E05 3.70247E05 1.13291E06 1.78780E06 1.38492E06 9.31334E05 1.40828E06 2.05006E06 1.46444E06 9.21181E05 1.63510E06 3.02071E06 3.61494E06 4.87058E06 5.75353E06 4.36609E06 3.10472E06 2.32029E06 1.73101E06 1.25069E06 1.02634E06 7.52058E05 3.92488E05 1.98279E05 1.16810E05 1.20249E05 2.32416E05 4.50941E05 4.92889E05 4.52746E05 4.68070E05 4.07796E05 2.48182E05 1.36473E05 7.27482E04 4.43798E04 4.62199E04 9.35188E04 2.16169E05 2.31839E05 1.97682E05 3.27292E05 4.84938E05 4.52238E05 6.65013E05 1.73948E06 2.55049E06 2.33996E06 2.73868E06 3.33221E06 2.27880E06 5.16015E06 1.07897E07 8.39191E06 3.87003E06 3.17237E06 2.91591E06 1.33893E06 1.08096E05 1.07488E05 3.47139E05 3.23278E05 8.24062E05 1.75098E06 1.67238E06 9.26300E05 6.76720E05 9.94004E05 1.02250E06 5.01610E05 2.70099E05 4.64103E05 3.18172E05 2.60466E05 1.25854E06 2.15841E06 2.01215E06 2.76350E06 6.01717E06 7.45511E06 4.71964E06 2.44907E06 1.91046E06 2.24173E06 3.99693E06 5.49711E06 5.06577E06 3.70088E06 2.66387E06 1.59241E06 5.60167E05 1.03681E05 9.01476E04 3.66041E05 1.18482E06 2.04348E06 2.06767E06 1.43801E06 7.94908E05 4.14942E05 2.62238E05 2.19550E05 3.61441E05 6.50327E05 9.13720E05 1.26271E06 1.45327E06 1.17726E06 5.93532E05 2.84201E05 2.98873E05 5.72130E05 9.85875E05 1.02880E06 6.77604E05 4.22356E05 3.51250E05 3.36825E05 3.51222E05 3.21364E05 2.36587E05 1.02059E05 4.28976E04 8.78375E04 1.09938E05 6.95677E04 7.09176E04 2.91945E05 1.09402E06 1.85598E06 1.49680E06 1.08145E06 1.35955E06 1.36446E06 7.93693E05 6.74528E05 4.88230E05 3.60477E05 6.32980E05 1.02272E06 8.43886E05 3.59838E05 2.21484E05 3.44941E05 5.53690E05 6.16209E05 4.64489E05 1.78887E05 1.40777E05 3.78564E05 4.80776E05 3.15681E05 1.18276E05 4.09553E04 1.69377E05 4.13257E05 6.72250E05 5.50991E05 9.37514E04 2.22255E04 2.31215E05 4.91336E05 5.00765E05 4.04900E05 1.29473E05 1.91905E04 2.33274E05 5.69479E05 6.10294E05 2.82330E05 2.61689E04 3.82220E04 1.49903E05 1.57050E05 1.10086E05 1.88075E04 8.02167E03 5.92827E04 1.08711E05 7.51572E04 1.23689E04 8.94390E03 2.35272E04 1.61773E04 6.82073E04 2.03807E04 3.90513E04 8.39083E04 5.97370E04 1.42541E04 1.01682E03 1.89502E04 6.56992E04 7.31938E04 3.43702E04 5.16846E03 1.80440E04 6.26018E04 7.82323E04 4.84437E04 1.63762E04 2.45635E03 6.06837E03 1.79546E04 4.00542E04 7.41596E04 5.31987E04 1.52843E04 6.18367E03 1.85378E04 3.14021E04 2.98115E04 1.78773E04 1.76298E04 3.23500E04 4.73240E04 2.84115E04 9.14650E03 1.72219E03 1.40449E04 8.05139E04 1.00950E05 5.59284E04 1.03964E04 1.40641E03 1.23940E04 2.20405E04 1.89441E04 1.45056E04 1.03185E04 2.31294E03 3.55424E03 1.17388E04 1.29562E04 1.50882E03 7.61646E03 1.87735E04 1.56914E04 5.35658E03 3.19787E03 2.80264E03 2.62221E03 7.74247E03 1.25999E04 1.14471E04 9.08036E03 4.36139E03 6.91198E03 5.26178E03 3.82449E03 4.36078E03 1.69365E03 3.65636E02 -Frame 257 1.66352E06 1.33484E06 1.09539E05 1.29985E06 1.58294E06 9.42236E05 4.24128E06 4.81734E06 4.58171E05 2.48749E06 3.37001E06 1.83049E05 3.35690E06 5.49493E06 7.72626E05 8.43173E06 3.95667E07 3.56964E07 8.82051E05 2.09301E07 2.35561E07 5.61704E06 1.20964E07 5.89285E06 1.95761E06 6.74936E06 3.96240E06 7.65732E05 2.02833E06 1.76674E06 4.12319E05 1.78922E06 2.14747E06 1.73130E05 1.06751E06 1.64972E06 3.07112E05 4.23459E05 6.06305E05 1.87252E05 3.58187E05 6.24518E05 1.39461E05 3.30155E05 1.08175E06 1.67277E05 7.16835E05 2.26475E06 4.33194E05 2.88498E06 1.18555E07 5.29162E06 4.55048E06 3.90025E07 3.27684E07 1.61112E06 3.72002E07 4.83469E07 7.41545E06 4.47928E06 9.06840E06 1.36098E06 2.15532E06 2.28797E06 4.26874E05 1.21935E06 4.13471E06 2.28357E06 3.10652E04 1.40127E06 3.35707E05 8.06373E05 2.83534E06 1.16000E06 2.88644E05 2.41305E06 1.67152E06 1.89823E04 2.38215E06 2.07432E06 4.94492E05 1.01743E07 1.03270E07 6.22949E06 3.11359E07 3.13825E07 6.54522E06 1.68613E06 9.00607E06 2.34826E06 3.27298E06 4.86079E06 3.62295E05 8.72450E05 9.13918E05 2.05307E05 2.38798E05 8.19141E05 3.77131E05 6.27535E05 1.84214E06 7.33081E05 1.90688E05 1.09276E05 2.26772E04 1.12085E05 4.26440E05 5.59524E05 6.13778E04 1.06632E06 2.18442E05 4.33542E05 7.75061E05 2.89312E05 3.09051E05 2.14133E05 1.02156E06 2.35542E05 9.30224E04 5.12606E04 8.76645E04 2.43068E05 4.49565E04 1.14547E05 1.50143E05 7.51654E03 2.60915E03 4.58001E04 6.99194E04 1.22808E04 6.84067E04 7.43797E04 5.64181E05 7.39670E05 6.50530E05 3.37592E05 3.14117E05 8.63515E05 4.89547E05 6.52443E05 4.65477E05 2.43824E04 1.13832E05 8.77431E04 4.36271E05 8.97768E04 1.88347E05 6.88574E04 6.19475E04 5.57927E04 4.25716E05 7.30779E05 2.08980E05 4.24870E05 8.33694E04 1.79203E05 1.48647E05 2.36834E05 2.76291E05 4.02023E04 1.84223E05 4.76400E04 1.61785E05 5.61419E04 6.91512E04 1.19789E05 2.80894E04 4.64753E04 7.91522E03 7.86020E04 2.15872E04 2.07902E05 2.05573E05 3.93689E04 1.95892E05 5.08789E04 3.52182E04 8.18136E04 8.29444E04 1.94258E05 7.92445E04 5.73057E04 8.13996E04 3.67275E04 1.10160E05 1.04547E05 1.17476E04 1.30895E05 4.55488E05 4.45102E05 8.82366E04 1.23674E05 1.18255E05 4.23763E04 3.96416E04 1.45853E04 4.58094E04 2.37527E04 2.53987E02 1.10250E04 6.95328E02 1.36348E04 2.65570E03 1.56036E04 2.60366E04 4.36826E04 5.91323E04 2.41799E04 8.93145E03 1.80992E04 3.48243E04 3.51212E03 1.19371E04 1.51049E04 1.66626E04 3.70226E04 1.27967E04 2.06635E04 1.19580E04 5.93538E03 2.21841E04 1.33255E04 1.46532E04 3.81678E03 1.21979E04 1.29595E04 2.13929E02 1.46058E04 1.79253E04 7.80894E03 9.53100E03 9.02552E02 4.02733E01 2.32375E03 3.60847E03 1.69687E02 3.88225E02 3.97252E03 9.75335E03 9.03136E03 8.05438E03 6.28005E02 8.15742E03 1.40148E04 3.05013E03 1.09516E03 1.04311E04 1.24909E04 1.66150E03 6.77309E03 1.37452E03 1.73728E04 2.23065E04 1.28742E04 4.55672E03 2.80293E03 4.73006E03 -Frame 257 3.38084E04 2.55700E04 7.86637E05 4.38378E06 3.45139E06 7.26725E05 5.47072E06 1.23715E07 3.81352E06 1.10652E06 6.71507E06 7.08399E06 1.04509E06 4.62262E06 1.32679E07 4.71867E06 9.07850E06 8.02343E07 9.79745E07 2.15852E07 2.06204E07 9.92958E07 4.89128E07 5.06994E06 2.55200E07 2.65792E07 3.70406E06 7.23440E06 1.39268E07 5.04469E06 1.82761E06 6.86326E06 6.48233E06 1.09732E06 3.02780E06 4.79492E06 1.82488E06 7.80827E05 3.08038E06 2.79059E06 1.04086E06 2.87710E06 4.65233E06 2.61694E06 2.83285E06 9.66635E06 1.15223E07 6.71008E06 1.45609E07 3.31279E07 1.64604E07 2.83902E07 1.15314E08 9.93797E07 2.95218E06 3.67169E07 7.53264E07 3.10181E07 8.87299E05 1.99696E07 2.08592E07 2.80868E06 2.29943E06 7.02592E06 2.45510E06 6.40672E05 3.33974E06 1.99319E06 1.52727E04 1.05206E06 1.56431E06 2.63801E05 9.10718E05 3.90936E06 2.18024E06 2.42743E05 3.92460E06 4.32728E06 1.00258E06 1.89916E06 1.00454E07 3.73654E06 3.20745E06 2.48406E07 2.80310E07 1.84348E06 9.07967E06 1.52180E07 6.00122E06 1.22304E05 4.84704E06 5.11693E06 1.03936E06 1.00460E06 3.08168E06 2.21938E06 3.33134E05 2.39948E06 4.23545E06 2.53997E06 7.59962E05 1.71184E06 1.62241E06 1.27053E06 1.40429E06 2.44430E06 1.33720E06 2.38658E05 2.23172E06 3.28074E06 1.22833E06 8.69943E05 3.00043E06 1.70983E06 1.10091E05 1.82598E06 1.57667E06 1.27290E05 7.95970E04 1.71389E05 2.47275E04 5.25994E04 7.07185E04 9.05998E04 7.82097E04 5.54538E04 1.67864E04 8.15277E04 1.88540E05 1.73657E05 1.00554E05 1.10310E04 2.26029E04 1.16203E04 2.29754E04 3.31673E04 7.77342E04 4.88874E04 6.62002E04 1.64305E05 1.88757E05 1.97924E05 2.58222E05 2.32722E05 7.17564E04 2.91530E05 1.24326E06 1.65771E06 1.17359E06 1.45349E06 4.12195E06 5.23419E06 1.58254E06 4.90547E05 1.56409E06 1.11113E06 2.34649E05 1.06323E06 1.15047E06 3.25207E05 1.71502E05 5.13466E05 6.51130E05 3.02900E05 2.23291E05 3.88240E05 1.81595E05 6.41826E04 3.71948E05 6.26899E05 3.83593E05 5.28696E05 1.19166E06 6.44565E05 1.02229E05 3.29576E05 3.99662E05 6.62304E04 3.94872E05 8.92545E05 4.27126E05 6.62612E04 9.96998E04 2.89643E04 1.29955E05 2.51734E05 2.16965E05 2.13290E05 5.19768E05 6.23247E05 5.46654E04 1.74578E05 2.33237E05 3.98433E04 2.58025E04 9.80539E04 5.88657E04 7.68351E03 1.31358E04 1.43905E04 1.63350E04 1.02834E03 1.42758E04 1.38160E04 2.51673E04 3.24096E04 5.88695E04 4.93528E04 5.96755E04 1.00210E05 7.99931E04 2.91048E04 5.62345E04 6.51225E04 1.36388E04 6.59177E03 5.33894E04 3.51716E04 1.90703E04 2.10118E04 2.62689E04 3.01986E03 1.12054E04 1.65751E04 1.13873E04 3.31187E03 8.14632E03 5.51753E03 9.98311E03 6.34387E04 4.26923E04 1.59622E04 1.64403E04 2.81959E04 1.86168E04 6.96803E03 3.29240E03 1.02984E03 3.75848E01 1.53833E03 1.88980E03 1.29191E04 2.20069E04 1.47632E03 1.04791E04 2.51675E04 2.67578E04 7.78023E03 1.41026E04 2.78750E04 2.10205E04 4.48310E04 6.31406E04 1.27349E04 1.59068E03 8.79630E03 5.29804E03 -Frame 257 5.66564E04 1.62810E05 9.92365E05 3.76466E06 3.65218E06 6.66709E05 7.13487E06 1.76521E07 3.53957E06 1.16885E06 8.83287E06 6.05073E06 5.08937E05 9.47819E06 1.37457E07 1.48126E06 1.38479E07 8.06892E07 3.85642E07 1.34354E07 1.83138E08 2.43909E08 4.14569E07 2.89542E07 8.85803E07 4.03290E07 8.85427E06 4.09880E07 3.60989E07 5.84228E06 1.00181E07 1.76422E07 6.80925E06 5.86810E06 1.30187E07 1.09043E07 2.69064E06 6.24812E06 1.01911E07 3.64779E06 4.04765E06 1.05232E07 7.60785E06 1.75474E06 1.36579E07 1.78724E07 3.49879E06 4.27374E07 5.78657E07 1.03165E07 1.07722E08 2.11573E08 4.32443E07 4.38415E07 1.46020E08 9.97653E07 1.44006E07 1.85492E07 3.58563E07 8.64950E06 1.57843E06 1.95610E07 1.52188E07 2.17532E06 5.50709E06 1.05670E07 2.85520E06 2.66785E06 7.04808E06 5.92275E06 2.86965E06 7.85042E06 9.51355E06 4.12098E06 1.21137E07 1.79195E07 3.92819E06 1.28519E06 5.48739E06 5.35657E06 1.27022E06 7.43602E06 2.55325E07 2.45041E07 7.18734E06 3.77023E06 7.99550E06 5.08351E05 3.78474E06 9.90373E06 6.53654E06 4.09285E05 2.53988E06 5.78062E06 8.70852E05 2.78871E06 5.34873E06 1.33723E06 9.76670E05 4.62222E06 3.21389E06 1.00217E04 2.13827E06 3.39620E06 3.44071E05 1.12965E06 2.62524E06 1.04907E06 5.89668E05 2.42319E06 1.74863E06 1.47579E05 2.86620E06 2.52287E06 5.96442E05 1.49751E06 2.07689E06 2.08508E05 4.78938E04 3.79789E05 2.60890E05 7.18762E04 5.75705E04 2.09140E04 2.89675E04 1.08758E05 7.49279E03 3.41388E04 8.42265E04 1.09840E04 8.54550E03 7.09918E04 2.32846E04 1.85890E04 7.04055E04 3.58497E04 3.17376E04 2.12315E04 8.02752E04 3.77127E05 5.95414E05 5.00798E05 7.39548E05 7.51976E05 1.63468E06 2.28903E06 4.96674E05 1.60938E06 5.16682E06 2.97582E06 1.22572E06 7.91633E06 6.32358E06 7.15097E05 3.02644E06 4.51044E06 1.04980E06 6.66496E05 8.51229E05 2.23608E05 6.00037E04 3.44049E05 5.15569E05 2.18089E05 1.40513E05 6.83090E04 1.09860E05 2.58130E05 1.70106E05 1.82448E05 1.00453E06 1.70150E06 2.52010E05 3.51129E05 1.49443E06 5.87335E05 1.75970E06 2.24347E06 1.16029E06 1.35055E06 3.59088E06 2.07833E06 1.03274E06 1.06519E06 6.34616E05 2.43602E05 3.60964E05 4.44840E05 3.17615E05 1.24505E05 6.52706E04 3.07886E05 2.44026E05 1.34960E05 1.45571E05 1.02440E05 1.78668E03 2.01372E04 3.49816E03 5.35850E03 6.04306E04 8.67015E04 2.20030E04 1.96063E04 6.65247E03 6.72966E03 3.17210E04 4.46539E04 8.46403E04 9.53903E04 7.34099E04 5.49874E02 1.10298E04 3.41273E04 1.60556E04 3.64280E04 2.36252E04 5.24160E04 3.55439E04 1.60496E04 9.04574E02 5.32001E04 9.40404E04 6.05253E03 1.13613E03 7.50017E03 2.16641E03 2.88162E03 3.47792E04 6.19012E04 5.74150E03 8.40726E02 5.08827E04 6.69121E04 4.45273E04 1.12291E04 3.24554E02 7.73753E03 1.03193E04 1.04170E04 1.24263E04 1.32920E04 2.08832E04 7.56277E03 4.38402E04 2.16157E04 9.39276E03 2.52397E04 1.02985E04 1.05729E04 2.23920E02 2.97274E04 2.46801E04 7.14939E03 1.97310E02 1.74752E04 2.94869E03 -Frame 257 1.92856E06 1.43951E06 3.32333E04 3.94937E06 3.35323E06 1.08956E06 8.62002E06 2.11931E07 7.72865E06 8.53902E05 7.44364E06 9.65430E06 1.47617E06 5.03109E06 1.73556E07 5.65018E06 4.83690E06 7.05472E07 1.03325E08 1.98573E07 5.91357E07 3.11847E08 1.82021E08 1.75728E07 1.01932E08 1.74068E08 3.30592E07 7.35079E06 5.66618E07 3.99251E07 6.13797E06 2.51852E07 3.73325E07 7.11843E06 2.71879E06 2.18253E07 1.14708E07 2.56574E06 1.39497E07 1.50282E07 5.63554E06 8.55505E06 2.96927E07 1.80902E07 1.38947E07 7.26355E07 1.15371E08 6.35537E07 1.12508E08 3.03343E08 1.12781E08 8.61331E06 8.91121E07 1.56245E08 5.92892E07 7.83517E06 7.45080E07 5.33520E07 1.16201E07 9.22290E06 3.03898E07 1.03070E07 1.24854E06 2.00431E07 1.97092E07 5.68415E06 3.62297E06 8.02858E06 3.36343E06 1.62014E05 5.80855E06 1.07341E07 2.67154E06 8.62700E06 3.83910E07 3.32299E07 7.02045E06 7.77636E06 5.81503E06 1.33181E06 4.25271E06 4.90731E06 1.54922E06 1.22936E05 4.17658E06 4.98501E06 5.60400E06 1.33458E06 1.22583E06 8.36979E06 5.93545E06 7.04115E06 1.03710E07 4.40065E06 2.70200E04 3.29493E06 3.81782E06 1.01805E06 2.63066E06 3.92563E06 1.89162E06 3.99619E05 2.35967E06 2.83088E06 8.15418E05 1.13940E06 2.49739E06 2.58338E06 7.98994E05 2.04734E06 2.77450E06 1.01877E06 1.81815E06 3.96061E06 3.04733E06 6.18052E05 1.18858E06 1.81848E06 6.78874E05 1.87704E05 2.27027E05 1.77202E05 7.87744E04 8.80607E04 8.08733E04 1.31642E04 3.22620E04 1.35544E05 1.55955E05 8.84645E04 1.36833E05 7.23749E04 3.51240E04 5.49189E04 1.87202E05 3.50171E05 3.48835E05 3.67869E05 5.45061E05 6.92413E05 1.73223E05 6.04271E04 1.77473E05 9.11897E04 1.18294E06 2.56887E06 1.42938E06 2.70860E05 3.13823E06 4.40943E06 4.19101E04 2.98928E06 5.56505E06 1.74443E06 1.85234E06 5.89447E06 3.80802E06 1.61781E05 2.71837E05 2.22521E05 3.81417E05 6.74518E05 4.80071E05 1.21527E05 1.13586E05 2.58954E05 7.11775E05 7.56952E05 3.98086E05 5.77863E05 1.40529E06 1.14011E06 6.97117E05 3.33501E06 3.17110E06 1.80096E06 8.93186E05 1.47333E06 4.98664E05 2.61900E06 6.36293E06 2.41524E06 3.05627E05 2.11677E06 1.08769E06 4.22826E05 1.05790E06 1.07799E06 4.62362E05 8.11001E04 1.62980E05 3.40827E05 4.41862E04 9.19668E04 4.77684E05 5.91421E05 2.26174E05 1.25986E05 7.70085E04 6.30774E04 3.65080E04 3.11894E04 4.52754E04 1.74928E04 3.36086E04 8.42862E04 5.13834E04 1.00217E05 1.61286E05 8.60793E04 2.90773E04 1.02938E04 8.36103E03 2.61555E03 3.07142E04 3.26732E04 3.98318E04 5.73277E04 3.23586E04 1.14307E04 1.92900E03 2.04865E04 9.22203E04 1.49732E05 9.49972E04 5.23832E04 2.24311E04 1.17346E04 1.41848E04 2.26886E04 4.83318E04 5.47504E04 1.01085E05 1.09334E05 2.71107E04 2.33701E02 1.46960E03 2.65355E03 1.94299E04 4.39329E04 3.93105E04 1.28592E04 1.58169E03 2.96847E03 9.60530E03 1.24805E04 8.96051E01 7.40741E03 8.74930E03 3.20569E03 4.49944E03 1.30886E04 1.53244E04 1.00008E04 5.48285E03 3.92707E03 2.29079E02 -Frame 257 7.55413E06 2.67257E06 4.94835E05 3.25967E06 3.68631E06 1.01413E06 1.10363E07 2.61651E07 6.71951E06 2.33590E06 8.15513E06 7.63369E06 1.36861E06 5.46787E06 1.43998E07 4.35112E06 1.31924E07 9.22479E07 7.04140E07 2.77696E06 1.00021E08 2.75258E08 1.05509E08 4.95232E07 2.94644E08 2.06945E08 2.93795E07 2.99221E07 8.38167E07 2.22636E07 9.39853E06 4.11197E07 2.71287E07 7.25661E06 1.94820E07 3.00204E07 5.20459E06 3.31275E06 2.18482E07 1.81373E07 1.30761E07 5.28776E07 5.30381E07 1.09017E07 3.01968E07 1.60531E08 8.29621E07 1.47971E08 6.16447E08 4.07496E08 7.43030E07 2.67200E07 1.08831E08 3.56546E07 1.55102E06 2.36791E07 3.82743E07 9.91090E06 1.64455E07 3.60913E07 1.01782E07 4.55128E05 8.33875E06 1.53037E07 2.30602E06 3.56609E06 6.18978E06 2.21705E06 8.82269E05 3.86184E06 3.56408E06 1.55458E05 3.03058E06 1.61936E07 1.34853E07 9.39870E05 2.42053E07 2.36547E07 4.13990E06 2.92290E03 2.21108E06 2.06650E06 2.40635E06 6.01765E06 5.67887E06 4.49521E06 1.29932E07 1.34103E07 5.68042E06 1.94066E07 3.28919E07 1.28002E07 1.56210E06 4.46741E06 6.52765E06 1.22105E06 2.18558E06 5.17321E06 1.92437E06 5.33457E05 1.17531E06 1.44598E06 2.74558E05 2.89539E05 1.77450E06 1.56869E06 4.67892E05 2.55356E06 3.13475E06 1.39701E06 4.33419E04 2.74915E06 3.69003E06 5.19720E05 1.89575E06 4.06046E06 1.84627E06 2.40531E05 2.06092E05 4.27180E05 1.02349E05 7.16393E04 5.48579E04 2.97272E04 2.94261E04 1.04457E05 5.02956E04 3.59353E04 6.64858E04 6.89402E04 6.52769E04 6.87839E03 6.51183E04 5.86803E04 1.09095E05 3.44608E04 1.48519E05 1.29294E05 1.35604E05 4.20694E04 2.18382E05 9.04331E04 1.48054E05 5.02164E05 3.02053E05 7.68821E05 1.91508E05 4.84502E05 1.46262E06 6.34469E06 3.26898E06 4.81177E05 1.19830E06 7.95619E06 6.94383E06 1.19952E06 3.41265E06 2.67973E05 2.72086E06 3.71108E06 3.67055E06 5.58070E05 7.18552E05 8.43012E05 5.28988E05 7.27375E04 1.47886E06 1.31008E06 3.54244E05 7.88933E05 1.52433E05 6.10197E05 3.46337E06 1.07416E07 3.74198E06 8.11562E05 3.97879E06 1.04021E07 1.20262E07 1.99143E06 1.44294E06 2.09915E06 2.67985E06 1.44733E06 6.15409E05 5.76689E05 4.31469E04 1.98733E05 1.83336E04 3.69288E04 6.67689E05 8.21461E05 6.40874E04 1.21124E04 1.71126E05 6.18149E05 1.55762E05 1.61360E04 4.74162E04 5.74389E04 8.11380E04 8.42348E04 5.63635E04 3.92889E04 7.42797E04 1.08695E05 1.11244E05 4.07967E04 3.19219E03 2.86786E02 9.67910E03 4.55357E04 5.39840E04 2.63031E04 9.22957E03 1.97145E03 5.07066E03 1.34515E04 1.19131E04 2.64346E04 8.90345E03 3.05887E03 4.68597E03 2.57872E04 5.14792E03 1.22901E04 2.07426E04 1.29884E04 1.92201E04 3.11609E04 3.18695E04 5.36409E03 1.83180E04 1.55112E04 4.87653E03 2.00064E03 3.46272E03 1.60492E03 4.19238E03 3.88794E03 1.09610E03 6.23773E03 2.88778E03 1.86948E03 6.22511E02 3.78349E03 4.14126E03 2.47411E03 2.32357E01 7.46859E02 4.19495E03 3.15318E03 1.15505E03 1.54818E04 2.77480E04 2.00127E04 9.02981E03 -Frame 257 2.70514E06 1.13870E06 2.45041E05 3.54316E06 3.11927E06 1.17374E06 1.14942E07 2.73196E07 7.19158E06 2.23926E06 9.36075E06 6.51690E06 1.46301E06 6.34781E06 1.19781E07 3.58859E06 1.70107E07 9.07440E07 5.52801E07 1.08775E07 1.29205E08 2.05707E08 3.52841E07 8.35534E07 3.62337E08 1.84783E08 3.02228E07 9.76907E07 1.28731E08 2.39895E07 9.80012E06 3.16874E07 1.19990E07 5.17640E06 3.46113E07 3.88058E07 7.76406E06 7.08905E06 1.85717E07 8.34246E06 1.21703E07 8.37953E07 7.51403E07 2.15890E07 1.01133E08 2.68233E08 8.26182E07 8.70373E07 5.65492E08 2.88688E08 3.54103E07 1.40833E08 2.63532E08 6.38852E07 3.61870E06 1.04106E07 9.90533E06 1.15398E06 2.67955E07 3.39703E07 5.89194E06 3.74293E06 1.69558E07 1.25027E07 1.67803E05 2.05149E06 2.10459E06 2.13769E05 1.46479E06 5.89822E06 1.97981E06 2.87407E05 1.68987E06 1.55807E06 3.28636E04 1.11697E07 2.76614E07 5.92949E06 7.37973E04 6.61888E05 1.94274E06 2.05134E06 1.07696E07 1.86984E07 3.48751E06 4.23744E06 2.60146E07 2.20109E07 1.51789E06 1.67085E07 1.85570E07 2.73364E06 3.70040E06 1.76497E07 9.92805E06 7.26591E05 2.23267E06 4.35605E06 2.79944E06 5.08964E06 6.99862E06 2.04403E06 4.28253E05 4.46918E05 6.02517E05 2.61146E05 1.56011E06 2.62308E06 5.39636E05 1.95120E05 1.79128E06 1.61936E06 3.12261E05 2.35264E06 2.90040E06 4.91341E05 2.29474E04 4.11118E05 2.77946E05 7.30450E02 5.02500E04 8.38421E03 5.55472E04 1.44930E05 3.86294E05 2.02200E05 1.31617E04 3.05490E04 2.13905E04 9.92270E04 2.99989E05 3.26150E05 1.01649E05 3.12187E05 7.00764E05 2.53133E05 9.23693E04 7.19155E05 6.10646E05 1.41013E05 1.03993E06 1.80512E06 5.26856E05 3.62004E05 1.67980E06 3.93507E05 3.85861E05 3.05273E06 5.95668E06 3.07753E06 1.65855E06 1.93979E06 2.23593E06 9.13465E05 1.10695E07 1.36423E07 1.20893E07 1.01990E07 1.54360E07 1.37231E07 2.93352E06 2.41855E06 1.73609E06 6.81219E05 2.09765E06 3.38517E06 3.00644E06 2.10296E06 4.13602E06 3.30514E06 1.88213E06 4.22433E06 9.29449E06 1.18507E07 4.77129E06 5.23797E06 1.14158E07 4.02877E06 5.76965E06 7.10915E06 4.22047E06 1.61227E06 2.46266E06 5.25253E06 1.68639E06 3.83675E05 8.39886E05 5.00742E05 1.41614E05 6.79514E05 1.53524E06 6.29654E05 3.08637E05 6.09003E05 4.95721E05 2.24306E05 7.03289E05 4.70483E05 2.08312E05 2.31269E05 3.24786E05 7.97930E04 1.39937E04 1.95565E04 1.99244E03 1.83242E04 2.07753E05 2.35201E05 1.37507E05 9.99541E04 1.67018E05 1.92709E05 3.82616E04 4.42080E03 1.63876E04 1.15433E04 2.08319E04 2.75900E04 2.88595E04 1.38781E04 1.01348E03 1.03988E04 9.79098E03 3.12695E02 1.62515E03 1.12732E04 5.31137E03 7.25345E02 1.51267E04 5.36289E03 1.85891E03 1.87181E04 9.67697E03 4.54981E03 2.20554E03 5.64049E03 7.23786E03 1.05384E03 2.19220E03 4.88121E02 2.75551E02 5.45469E03 5.94650E03 2.26081E03 4.19135E03 2.07397E03 2.71977E03 3.57005E03 1.28653E03 1.19600E03 1.90962E03 2.49228E02 1.16064E02 2.64372E03 3.04453E03 3.21142E03 5.38982E03 -Frame 257 1.06464E05 8.69359E05 3.37698E05 3.41217E06 3.31523E06 1.00511E06 1.14101E07 2.86318E07 8.24917E06 1.57313E06 9.52370E06 6.92768E06 1.65714E06 6.31846E06 1.21148E07 3.87248E06 1.62760E07 9.17316E07 5.88344E07 1.64689E07 1.26594E08 1.86520E08 3.88892E07 7.55680E07 3.30758E08 1.66160E08 1.83531E07 7.72409E07 1.16837E08 2.06978E07 7.98880E06 2.49834E07 1.27145E07 5.32542E06 3.13155E07 3.78247E07 5.59151E06 3.98526E06 1.27667E07 5.37239E06 9.88960E06 6.90998E07 7.08905E07 1.38274E07 6.03639E07 2.19782E08 8.08748E07 1.69798E07 3.40068E08 5.05224E08 1.50939E08 1.81642E08 4.03226E08 1.23385E08 4.78840E06 1.40612E07 1.08207E07 2.61132E06 2.36147E07 4.52050E07 1.34062E07 5.40347E06 2.12595E07 1.27895E07 3.43945E05 1.15445E06 2.42694E06 7.14685E05 1.22546E06 5.66188E06 3.37386E06 4.32205E05 3.09115E05 6.79957E05 9.62830E05 9.77302E06 3.96855E07 2.53025E07 3.87627E06 6.08632E05 7.27873E05 1.73649E06 1.19376E07 2.56258E07 1.55477E07 1.23853E07 3.31564E07 2.65109E07 1.66785E06 8.95907E06 1.41769E07 5.13193E06 5.30970E06 1.81434E07 1.43730E07 1.74653E06 9.96675E05 1.35666E06 1.30222E05 1.66656E06 5.93893E06 5.34141E06 8.81195E05 4.63375E05 9.01594E05 3.18757E05 3.38852E05 2.85778E06 2.54547E06 6.15993E05 1.97184E06 4.24157E06 1.16023E06 3.65950E05 1.58533E06 6.46679E05 1.13080E05 2.74474E05 4.29055E05 1.09147E05 2.41044E03 2.50110E03 4.16276E04 6.20818E04 3.06487E05 4.66688E05 1.39655E05 2.78535E03 1.39051E05 1.36376E05 5.22339E03 3.14119E05 4.87666E05 1.94349E05 1.60282E05 1.03145E06 7.06401E05 1.57504E04 1.07155E06 1.35522E06 3.15040E05 1.49950E06 4.70837E06 2.89592E06 1.48624E05 2.22348E06 3.78221E06 7.51477E05 3.17504E06 5.86473E06 2.48516E06 9.93444E05 1.48907E07 1.86658E07 3.49874E06 9.74223E05 8.67239E04 1.86382E06 6.03719E06 1.90465E07 7.98690E06 5.77992E05 1.67075E06 3.15844E06 1.79027E06 1.64003E06 3.41296E06 1.44203E06 7.29136E04 3.89773E06 4.16434E06 2.38721E06 2.14296E06 2.81967E06 8.89365E05 4.59372E06 2.07881E07 1.78287E07 5.12624E06 5.56177E05 1.77291E06 2.10466E06 2.56812E06 5.59742E06 2.94904E06 1.74760E05 3.94667E05 3.97790E05 3.91082E04 1.98034E05 1.24183E06 6.59780E05 2.24243E04 6.62121E05 7.78725E05 1.00812E05 1.70976E05 4.56520E05 1.75704E05 6.65973E04 3.27127E04 8.72930E04 1.72955E04 2.05591E04 2.67623E04 6.20528E03 4.84025E04 6.52180E04 5.19975E04 3.83672E04 7.05516E03 8.45274E04 4.89352E04 6.70440E03 7.35615E02 1.01312E03 9.96401E01 1.07350E04 4.08763E04 1.12051E04 1.11264E04 2.90243E04 2.00457E04 6.86188E03 5.85158E03 6.44764E03 1.19801E04 1.32453E04 1.32811E04 3.32190E04 1.34033E04 1.64251E04 1.39164E04 5.12708E03 2.41330E03 1.18103E04 1.96746E04 8.89062E03 2.82333E03 6.29538E01 5.84108E02 4.49830E03 5.41710E03 2.78251E03 1.80964E03 8.37909E03 1.45343E04 2.39568E03 5.35972E02 4.54221E03 1.92982E03 7.08963E02 3.68969E03 2.58377E03 9.03336E02 1.35520E02 5.52454E01 -Frame 257 7.85657E06 3.21088E06 3.49924E05 3.51791E06 4.14302E06 8.44257E05 9.93440E06 3.06937E07 1.10797E07 8.94243E05 8.67703E06 8.95110E06 1.32944E06 4.73750E06 1.35294E07 6.37758E06 9.64890E06 8.99388E07 8.73409E07 2.23306E07 8.99366E07 1.84069E08 4.81164E07 4.32694E07 2.48346E08 2.35166E08 4.66554E07 3.62732E07 9.15504E07 3.13222E07 6.21287E06 1.63548E07 1.48385E07 6.35948E06 1.13274E07 3.03071E07 1.40318E07 2.84222E06 6.98605E06 6.53949E06 4.12381E06 2.49943E07 6.58535E07 3.68635E07 2.58473E07 1.08449E08 1.14489E08 1.11147E07 1.08931E08 4.04371E08 3.42134E08 1.95586E08 3.44335E08 4.38777E08 1.24631E08 6.13464E06 3.07720E07 1.71862E07 1.41534E07 2.27560E07 3.85040E07 1.82450E07 7.96466E06 2.33597E07 8.48349E06 1.81003E06 3.58610E05 1.65353E06 1.97518E06 1.02390E06 6.74914E06 4.08501E06 9.21288E05 6.11881E05 2.81013E06 9.21226E06 2.21849E07 3.70356E07 3.03717E07 6.15415E06 2.45908E06 3.90143E06 9.16400E06 2.77143E06 7.96243E05 5.01030E05 4.59621E06 1.25810E07 8.65175E06 5.06871E05 4.72268E06 3.81880E06 3.75842E06 7.40721E06 5.82541E06 2.66399E06 7.89275E05 7.63974E05 1.06167E06 1.38931E06 2.74420E06 1.91040E06 9.65666E05 7.36310E05 7.68239E05 8.36788E05 1.53272E06 2.66791E06 2.18827E06 1.93116E06 2.90702E06 3.66551E06 1.79553E06 5.90658E05 1.44505E06 5.56328E05 5.06579E05 4.58319E05 2.06707E05 4.82611E04 1.57988E04 4.75377E03 2.10992E04 1.51242E05 3.41870E05 3.67207E05 2.38807E05 3.77220E04 5.76476E04 1.27937E05 3.41118E04 5.03110E05 3.66535E05 6.69284E04 6.44275E05 8.63724E05 4.31422E05 3.69294E05 1.30355E06 1.46946E06 3.48375E05 1.55523E06 4.58222E06 1.72795E06 7.39934E05 3.25970E06 3.68740E06 9.22479E05 4.29200E06 9.00924E06 4.65215E06 5.15844E06 1.86277E07 1.99784E07 6.22398E06 1.62380E06 3.37462E06 4.52379E06 2.39159E06 1.59871E07 1.66460E07 4.40313E06 3.95247E06 4.69572E06 1.48949E06 1.03367E06 2.76235E06 3.87423E06 3.13149E06 6.11961E06 8.00455E06 3.55689E06 2.84843E05 5.01197E05 1.09067E06 1.69857E06 9.06561E06 1.80409E07 6.25925E06 1.10025E06 2.27172E06 1.30195E06 5.63996E04 8.44919E05 1.98685E06 1.96420E06 7.21417E05 2.12296E05 6.85323E04 5.83312E04 5.46338E05 1.21146E06 9.56797E05 8.56536E05 9.49938E05 4.92964E05 2.53896E05 1.72870E05 6.60559E03 2.58324E04 6.98870E03 7.22870E04 1.51301E05 9.96343E04 1.28084E05 8.36928E04 5.15830E03 1.37205E04 1.31215E05 2.32267E05 1.11975E05 7.08139E04 8.78450E04 2.45276E04 1.16633E04 2.51868E04 2.43493E04 2.30566E04 2.09569E04 4.46856E04 4.71111E04 2.21243E04 1.82278E04 3.28360E04 6.31027E04 4.62876E04 5.79386E04 5.29460E04 6.43423E04 5.34694E04 7.43585E03 4.11248E03 1.98077E03 4.42508E03 3.08465E03 3.71924E04 4.94443E04 5.27514E02 2.37072E04 1.22626E04 5.23146E01 3.98602E03 3.96742E03 1.33955E04 5.44021E03 8.65947E03 9.11509E03 1.57074E03 3.46996E03 8.72314E03 7.13764E03 5.05296E03 3.11231E03 2.11311E03 9.98078E02 7.73188E02 6.08823E02 -Frame 257 1.77427E07 7.06458E06 6.72590E05 3.78051E06 4.40477E06 4.30034E05 8.27260E06 3.04454E07 1.33461E07 4.16499E05 8.46084E06 1.14854E07 1.81193E06 2.84550E06 1.38479E07 7.92251E06 5.07570E06 9.49098E07 1.38254E08 2.97386E07 4.02318E07 1.60408E08 8.67458E07 2.40413E07 1.52586E08 2.52864E08 5.14951E07 8.34163E06 5.45536E07 3.86124E07 5.01739E06 5.88117E06 1.38970E07 4.76422E06 1.99859E06 1.54481E07 1.50062E07 2.16175E06 1.30888E06 6.64801E06 2.04775E06 5.47131E06 3.99340E07 4.04992E07 9.02845E06 3.01845E07 1.18260E08 5.05787E07 9.42009E06 1.02113E08 3.22210E08 1.34259E08 1.18632E08 7.60339E08 8.70656E08 1.71892E08 1.80831E07 1.08134E08 4.61366E07 1.45423E07 3.87188E07 4.13092E07 9.22131E06 1.21187E07 3.38495E07 1.17340E07 8.63025E05 1.98079E06 3.41979E06 1.56375E06 5.35100E06 1.64366E07 1.04419E07 2.69326E06 1.15157E07 1.79605E07 5.24426E06 8.16050E06 3.49497E07 2.91620E07 1.00259E07 1.34765E07 2.92215E07 1.85290E07 4.84221E06 1.81574E06 1.89800E06 1.16365E06 3.26461E06 5.54773E06 2.23294E05 1.01511E04 1.80844E06 1.26956E06 4.19593E04 6.23469E05 3.13348E06 1.81111E06 4.81805E05 7.85926E05 9.79700E05 3.60162E04 2.48813E05 7.28036E05 4.28476E05 4.52946E05 3.25857E05 4.45082E05 8.62493E04 5.64352E05 1.04750E06 6.85055E05 1.20438E06 5.87500E05 1.58757E06 8.94849E05 5.68657E05 5.81299E05 1.75347E05 4.17370E04 1.80017E04 1.53330E05 1.32196E05 1.16431E05 1.81729E05 4.89729E04 1.35085E05 8.49585E04 4.30775E05 9.15040E05 4.52089E05 1.32847E04 1.67907E05 6.47176E05 7.41768E05 3.83553E05 7.16266E05 1.16483E06 6.74553E05 2.11045E06 3.61156E06 1.67675E06 8.00945E04 2.88765E06 5.40956E06 2.89433E06 4.07362E06 9.57245E06 5.30315E06 2.25069E06 8.10690E06 8.37524E06 3.03798E06 7.20737E05 8.37032E06 7.68870E06 1.00245E07 2.20615E07 1.94897E07 1.84698E06 5.05100E06 7.85915E06 4.30780E06 2.78299E06 9.72469E05 2.52601E06 1.14798E06 2.64281E06 3.94463E06 4.35026E06 1.51885E06 5.11671E05 1.07199E06 3.68717E05 3.12101E06 4.69578E06 4.25239E06 1.24664E06 1.28229E06 1.05176E05 3.34872E05 1.64064E06 1.26762E06 7.35172E05 4.70667E05 1.73179E06 1.07384E06 6.93123E05 8.52035E05 1.12848E06 1.25110E06 3.24553E05 6.17925E05 6.47451E05 7.43180E05 2.42405E05 8.86302E04 3.30393E04 1.87664E05 2.14104E05 2.32566E05 1.11358E05 6.02882E03 5.70630E03 8.49063E04 2.56161E05 3.19384E05 1.72344E05 3.46262E04 1.06353E05 7.53158E04 5.87975E04 8.89950E04 3.63567E04 4.25806E03 5.96275E04 1.40786E05 9.27253E04 1.08573E04 9.62225E03 5.72877E04 3.42944E04 4.49197E04 1.19397E05 6.53841E04 3.24279E04 1.24543E04 4.11283E04 8.68154E04 1.24129E05 6.33559E04 3.78104E03 1.97521E02 1.89087E03 2.32663E04 1.37669E05 2.58063E05 1.23154E05 3.54118E04 3.75994E04 7.96007E04 1.60496E05 1.31685E05 7.00351E04 2.57277E04 2.70394E04 2.24587E04 7.64742E03 2.31980E03 2.24099E04 1.64276E04 1.18633E04 2.25108E04 4.74085E03 3.50508E03 1.58559E03 1.49473E03 -Frame 257 1.06969E07 4.27439E06 2.68666E05 3.52075E06 4.62221E06 2.87836E05 6.60869E06 2.82068E07 1.44256E07 3.44378E04 7.53018E06 1.29793E07 2.55098E06 1.85210E06 1.32050E07 9.89287E06 2.20071E06 9.66211E07 1.86008E08 4.54493E07 2.38039E07 1.02648E08 7.05313E07 1.15200E07 7.77628E07 2.07585E08 7.39216E07 3.43096E06 2.71879E07 3.76080E07 6.92916E06 1.97090E06 1.01865E07 5.96890E06 5.25291E05 5.36343E06 1.30638E07 3.51987E06 3.33110E05 2.99930E06 3.01369E06 2.64708E06 1.20581E07 3.12354E07 1.36229E07 6.07448E06 4.99997E07 5.59556E07 9.02573E06 2.48732E07 1.32253E08 7.56270E07 3.64802E07 6.28606E08 1.68177E09 6.75781E08 5.84355E07 1.30057E08 1.04103E08 1.79142E07 1.85325E07 4.88010E07 1.55542E07 2.19594E06 2.27460E07 2.67573E07 4.86931E06 5.98239E05 3.10243E06 1.37930E06 1.07643E06 1.13662E07 1.72070E07 3.61764E06 1.57258E06 1.08934E07 5.93710E06 1.96586E06 1.35650E07 2.72236E07 8.81551E06 1.78099E06 9.31108E06 1.77611E07 3.39050E06 2.61174E05 5.46038E06 9.33111E06 3.87482E06 1.26673E06 6.88932E06 3.67342E06 3.11928E05 2.86598E06 1.48643E06 3.04358E05 1.16604E06 3.94428E06 1.31612E06 5.81935E05 1.21369E06 6.68243E05 3.98724E05 4.07037E05 2.06080E06 8.03152E05 9.68223E04 1.91580E05 6.42902E05 8.14032E05 6.86292E05 2.95557E06 2.82264E06 1.02289E06 1.92769E05 9.43533E05 3.75685E05 2.27195E05 1.36235E05 5.49375E05 1.18611E05 9.26755E04 2.05555E05 2.06013E05 8.30439E04 4.47078E05 6.31217E05 1.66006E05 1.61872E05 1.33725E06 3.77566E05 2.23806E04 4.26645E04 1.26054E05 1.70651E05 2.96047E05 3.28221E06 1.83712E06 8.92787E04 2.50089E06 3.86277E06 1.40382E05 3.01152E05 1.84857E06 2.38478E06 2.33253E06 3.51529E06 1.61736E07 7.46740E06 1.79972E06 6.92934E06 5.79885E06 6.61438E05 4.89620E06 2.19344E07 1.84923E07 1.01001E07 2.49224E07 2.77834E07 1.02682E07 6.12285E06 8.58630E05 5.55082E05 1.67938E05 3.53387E06 1.04252E07 5.11561E06 1.75396E05 2.98656E06 1.96732E06 5.96364E05 1.01227E05 1.34944E06 3.16466E06 1.37406E06 1.15163E06 3.26978E06 2.20235E06 1.13397E06 4.76024E05 2.22942E05 1.43266E05 1.11633E06 4.62593E06 4.73458E06 2.33725E06 9.13980E05 4.53876E05 2.87183E06 9.34232E05 2.61554E06 4.98326E06 1.78128E06 6.24365E02 9.40790E05 8.28849E05 1.89262E05 1.23852E05 3.38595E05 9.69837E04 5.74540E04 1.88646E05 4.44011E04 3.80806E04 8.18340E03 1.91469E05 2.30028E05 6.04376E03 1.34054E05 2.24077E05 7.38740E04 3.45268E04 3.34821E04 2.02242E04 7.95849E03 1.03521E05 2.27877E05 9.38217E04 5.76136E03 2.04459E04 2.50552E04 1.50023E03 1.89497E03 2.45983E04 3.19154E04 4.85937E04 7.46268E04 1.14593E05 1.22773E05 9.09428E04 6.31201E04 1.32530E04 7.75304E02 1.53835E03 3.65167E04 1.62834E05 1.24756E05 3.91646E04 3.99722E03 4.53941E04 2.19946E05 9.14667E04 1.42176E05 3.02635E05 5.38765E04 6.39745E04 1.09974E05 2.17522E04 3.36270E03 7.54202E04 2.78272E05 2.50679E05 4.63849E04 2.90235E04 5.16271E04 2.25709E04 2.75831E03 -Frame 257 1.56906E05 1.66084E06 7.39888E05 3.03277E06 3.84030E06 4.79168E05 6.36558E06 2.52105E07 1.37875E07 1.11152E05 7.84091E06 1.16562E07 2.37363E06 1.77236E06 1.49331E07 1.01184E07 4.41281E06 1.05513E08 1.70003E08 4.95895E07 1.32817E07 4.41336E07 3.70410E07 4.20095E06 4.31098E07 1.25161E08 5.99666E07 2.17939E06 1.17789E07 2.16981E07 4.69563E06 1.02462E06 6.00987E06 5.19008E06 1.03832E05 3.23896E06 9.63217E06 2.72875E06 1.55932E04 1.51929E06 1.78067E06 3.34624E04 2.71823E06 1.57880E07 1.02388E07 1.48177E05 1.67326E07 3.68229E07 4.66222E06 1.34420E07 9.79533E07 3.95821E07 1.73043E07 5.17111E08 1.26276E09 5.49323E08 7.33351E07 6.50036E07 6.40061E07 1.98777E07 2.16573E07 4.44329E07 1.90518E07 4.31717E05 1.26630E07 1.88895E07 5.70272E06 1.70977E06 2.32881E06 9.88549E05 7.14207E04 5.99538E06 1.55103E07 9.38020E06 1.75832E06 2.89090E06 3.03919E06 3.96104E05 2.66203E06 1.05745E07 7.66040E06 6.69514E05 2.22484E06 8.92127E06 6.24540E06 4.69772E06 1.14449E07 1.31580E07 1.35599E06 5.76447E06 2.67622E07 2.66729E07 1.02510E07 2.34271E06 6.36922E05 9.76381E04 2.63691E06 6.84664E06 4.94548E06 2.02449E06 3.55677E05 1.44079E05 4.55656E05 7.56201E05 1.55785E06 1.20864E06 2.56349E05 1.34629E02 4.08310E05 7.74045E05 8.14684E05 1.74733E06 1.60468E06 2.29238E05 2.80331E05 1.78814E06 2.31345E06 1.09985E06 8.49025E05 8.58339E05 3.67156E05 1.89344E04 3.40910E05 4.07787E05 1.25879E05 2.42178E05 5.14264E05 1.76424E05 6.99180E05 3.26621E06 3.49010E06 1.36300E06 5.73662E05 2.56461E05 3.42897E05 1.96493E06 8.02359E06 9.38911E06 5.95283E06 1.25199E07 1.96517E07 1.40626E07 1.03003E07 1.03767E07 9.98408E06 1.38859E07 1.83135E07 1.16103E07 1.45357E06 1.71514E06 5.11395E06 4.93117E06 2.50195E06 6.99294E06 6.41732E06 2.52037E06 2.50254E05 2.11038E06 7.30664E06 4.70398E06 2.74425E06 3.02792E05 8.49523E05 2.13346E06 2.17698E06 3.04642E06 2.30665E06 1.37719E05 8.60662E05 1.42333E06 5.79478E05 4.07041E05 2.68808E05 4.08224E05 1.34701E05 4.66972E05 9.46476E05 3.09289E05 1.18338E04 8.66423E04 5.41052E03 1.35436E05 1.96856E05 6.44121E05 2.52603E06 1.66288E06 1.50872E06 1.40713E05 3.77634E06 4.45110E06 2.73454E06 2.42557E06 1.11509E05 7.05064E05 1.01975E06 2.16540E05 1.08870E05 3.27742E05 2.14377E05 3.20351E04 1.98244E04 1.60525E05 1.59878E05 1.71423E05 2.41401E05 4.32884E04 4.08704E04 1.72521E05 2.13135E05 2.05861E05 1.27374E05 2.76236E04 3.04404E04 2.11527E04 4.84005E04 6.44625E04 3.31528E04 8.94836E03 1.25085E04 8.40723E03 1.31369E04 1.87171E04 1.84555E04 1.18695E04 3.52139E03 1.25357E03 6.18912E03 1.41055E04 9.40550E03 1.67586E04 2.92344E04 5.42021E04 2.53410E04 2.92826E03 2.89191E04 5.02270E04 7.55344E02 8.71986E03 6.45704E04 2.08884E05 1.64129E05 1.04461E05 2.05535E05 1.32934E05 1.43618E05 2.57008E05 2.22946E05 3.26098E04 9.55525E03 1.52874E05 2.31233E05 5.08470E04 1.44836E05 1.03176E05 1.19571E02 7.00163E04 1.20169E05 -Frame 257 7.74149E06 4.88720E06 6.36240E05 1.06742E06 1.44418E06 2.98784E05 4.88637E06 9.50737E06 3.99992E06 1.32169E06 3.21040E06 1.68096E06 1.00552E06 4.98881E06 6.22871E06 6.72932E06 1.97932E07 3.74748E07 2.75143E07 1.22902E07 7.97520E06 1.06720E07 9.39923E06 7.70391E06 1.32519E07 1.46285E07 8.68372E06 7.84123E06 5.11982E06 3.05557E06 1.25878E06 6.81487E05 8.75408E05 1.36590E06 1.36085E06 1.88731E06 1.33898E06 5.33385E05 1.00504E06 5.08326E05 2.34061E05 1.09907E06 1.96518E06 1.44555E06 1.24914E06 3.81552E06 1.02738E07 5.47421E06 9.44269E06 3.88625E07 6.23207E07 6.58943E07 1.06811E08 1.74307E08 1.62688E08 8.11049E07 2.43490E07 9.96223E06 3.97316E06 7.88473E05 2.35854E06 9.13655E06 8.24677E06 5.06911E06 6.28803E06 2.94062E06 2.45077E05 1.11621E06 3.19469E05 4.57099E05 1.73536E06 1.42135E06 1.96976E05 9.42178E05 2.68187E06 1.76052E06 6.21695E05 7.96105E05 1.77744E06 2.69200E05 9.87730E05 3.99617E06 2.17028E06 2.16245E05 7.14367E05 1.05341E06 3.86403E05 2.60005E06 9.00458E06 9.61707E06 6.55655E06 1.25625E07 4.89195E06 1.32742E05 9.60384E04 7.11741E05 8.03833E05 8.39174E05 1.36261E06 9.75387E05 1.44263E05 8.78340E04 4.02849E03 1.79457E04 9.61729E04 1.06319E05 3.34673E04 4.71639E04 1.63118E05 7.08964E04 2.80087E04 1.10390E05 7.72171E04 5.59214E04 1.86501E05 5.60869E05 4.36727E05 9.09894E04 5.37308E04 5.04454E04 1.28471E04 1.19208E05 2.47234E05 1.55758E05 5.27111E04 4.64308E04 9.96337E04 2.36269E05 7.75699E05 1.29265E06 1.07253E06 3.82051E05 6.44387E04 1.47097E04 1.96536E04 6.33206E05 2.54045E06 4.36613E06 4.36913E06 4.09787E06 3.66221E06 3.94193E06 3.86508E06 2.74715E06 3.46862E06 3.37486E06 2.28372E06 9.56907E05 1.01571E06 8.12171E05 1.96422E05 8.63313E05 1.17915E06 2.45564E05 5.54657E04 1.43665E04 3.65738E05 4.08485E05 7.05063E05 1.77755E06 1.16028E06 7.87179E05 8.22776E05 3.21865E05 2.36274E04 1.84633E05 4.00493E05 3.58271E05 3.00633E05 2.88274E05 1.86059E05 1.12886E05 6.41459E04 3.51453E04 8.04136E04 1.27306E05 1.14904E04 2.79624E04 4.34387E04 1.23809E04 4.70625E04 3.92442E04 4.38261E04 4.37108E05 1.27424E06 1.39693E06 2.04187E06 2.70673E06 1.46730E06 7.37272E05 7.61101E05 9.10322E05 3.93903E05 2.01851E05 2.42626E05 6.29110E04 1.34617E04 3.47508E03 2.41121E04 3.88824E03 3.64318E04 6.12862E04 1.71981E03 2.79241E04 6.38386E04 8.61603E04 3.26666E04 2.65265E03 8.74695E03 1.01653E04 1.00080E04 3.50379E04 7.67032E04 5.74403E04 6.36227E03 1.46778E03 2.15815E03 4.27920E03 1.70855E03 6.47379E02 3.52852E03 7.93906E03 4.06162E02 1.76499E04 2.66269E04 2.84596E04 7.16061E03 2.23157E03 1.44912E04 6.34776E03 2.64675E04 3.52582E04 8.77919E03 1.81219E03 3.13791E04 3.38735E04 1.92922E04 3.67844E04 2.75568E04 8.17810E03 5.17440E04 5.82029E04 2.45374E04 5.15072E03 4.02393E03 7.51999E04 6.41274E04 1.20615E04 1.17595E05 1.17880E05 1.91904E04 5.12658E04 8.73712E04 5.57480E04 2.02072E04 2.11625E04 5.65801E03 -Frame 257 1.70592E07 6.58727E06 3.06034E05 4.53991E05 7.63633E05 1.35186E05 3.47201E05 2.60989E06 1.35499E06 1.88987E05 9.13020E05 1.94271E06 8.43278E05 1.87209E04 4.40794E05 9.91221E05 2.06312E05 4.60077E05 8.03191E05 2.01937E05 7.35568E04 1.05066E05 1.56050E05 4.38680E04 9.74707E04 2.79790E05 3.76341E05 6.69025E04 3.00170E04 6.98317E03 1.02279E05 3.99979E03 1.45163E05 1.50181E05 1.55689E05 1.00165E04 2.10592E05 1.98753E05 1.20140E05 1.61513E04 2.26245E04 8.00475E03 7.34167E04 9.10743E04 2.11779E05 7.06141E05 1.66053E05 6.39969E05 4.32063E06 1.42151E06 3.89499E05 3.70345E05 8.24269E05 2.37548E05 2.17586E05 4.94905E05 1.93636E05 1.38653E05 5.95531E05 1.43857E06 3.69827E05 8.00832E04 1.07682E06 1.36085E06 4.92459E05 4.45096E05 2.67145E06 1.24870E06 2.01900E05 1.15696E04 1.84475E05 4.20954E04 4.21077E03 1.88964E05 3.32569E05 7.34694E04 2.91813E05 5.32829E05 7.24975E05 3.26586E05 6.64351E05 1.73218E06 7.13896E05 1.10233E04 8.42906E05 1.04356E06 6.20712E05 4.38016E04 2.01718E06 2.30681E06 6.66456E05 1.30034E06 2.69434E06 7.86963E05 1.28102E05 2.51354E04 9.36694E04 3.06337E04 1.47687E04 1.23297E05 1.37620E05 1.66777E04 8.55416E03 1.73734E04 2.28508E04 1.95558E04 5.34073E03 1.62944E04 5.04875E03 3.90498E03 1.33102E04 6.14363E03 1.58913E03 1.28118E03 1.53695E04 1.58405E04 8.15315E03 4.54768E03 4.49059E03 1.20973E03 1.89231E03 8.88047E03 5.41979E03 2.19122E01 1.23610E04 6.87442E03 9.99806E03 1.05777E04 3.44571E03 1.76808E02 9.12990E03 2.64655E04 2.27626E04 2.96652E04 1.85044E02 1.27149E04 7.47412E03 2.85629E04 2.32139E03 5.37603E03 5.21413E03 1.91187E03 9.12074E03 6.75650E04 7.36424E04 3.81879E04 6.63025E04 1.81643E03 1.60135E04 7.27986E03 5.85558E04 1.59405E05 1.03236E05 1.09497E03 1.93042E04 1.35928E04 1.12460E04 1.18122E05 1.46478E05 5.10059E04 1.83160E04 8.48286E04 6.68833E04 3.69409E04 9.98513E04 9.51740E04 3.25198E04 1.34517E04 1.84343E03 1.85576E04 1.43060E04 1.20751E04 1.00668E04 6.63236E03 1.02674E04 1.93093E04 6.56592E03 2.22524E04 2.16430E04 1.33277E04 7.08815E04 7.86343E04 3.22677E04 5.98009E04 1.69348E05 9.21698E04 6.93233E03 5.81664E05 6.45474E05 2.34355E05 3.62572E03 1.50852E05 1.08569E05 2.22896E04 9.72454E02 2.05804E04 2.91231E04 2.67585E04 3.67229E03 7.58250E03 7.07388E03 3.45973E03 1.79604E04 5.19790E03 1.29207E03 8.16883E02 2.00968E04 1.57273E04 1.80845E03 3.70265E03 1.68150E04 8.96703E03 1.45833E03 1.36658E04 4.00817E03 1.47556E03 8.23649E03 2.18647E04 2.36871E04 6.85093E03 1.56778E03 8.27928E03 2.61586E03 1.00044E04 3.86743E04 4.15961E04 1.61023E04 1.52441E03 1.02937E04 3.43245E04 2.50549E04 4.47411E03 2.74084E04 1.66222E04 3.10304E03 2.22453E04 1.74901E04 6.78999E03 1.54723E03 1.36810E04 1.68802E04 1.19199E04 2.38128E03 1.78744E04 2.20037E04 2.43662E03 1.95764E04 9.49909E04 6.60114E04 3.55703E02 7.70772E04 8.62118E04 1.90799E04 5.16925E04 5.24881E04 2.61803E04 8.57146E03 -Frame 257 8.67543E06 3.46688E06 1.59819E05 4.24107E05 4.00622E05 4.54906E04 2.60008E05 1.86828E06 1.25963E06 1.15056E05 7.80285E05 2.41019E06 5.36445E05 3.67432E04 7.34422E05 1.01188E06 2.42410E03 3.33423E05 2.38019E05 2.23516E05 8.98495E03 3.81261E03 6.92045E04 6.51501E04 4.46206E04 1.24793E05 2.78043E05 1.08095E05 3.31052E04 6.50486E04 1.94459E04 1.28372E04 1.57224E05 1.31243E05 2.56776E04 1.76287E04 1.53465E05 4.43870E04 2.04212E03 1.68019E04 6.20135E04 3.45194E04 1.34038E03 1.71943E05 4.88009E04 1.76128E04 8.41980E05 2.84843E06 6.38675E05 8.35959E05 2.01392E05 1.45239E06 9.54429E05 6.02227E05 1.33659E06 6.68737E05 1.53356E05 4.06102E05 9.67640E05 3.10238E05 1.42136E05 1.16277E06 9.95388E05 1.73768E05 1.19567E05 1.69983E06 1.77354E06 9.97316E04 1.47343E04 3.82228E05 3.63166E05 6.83482E04 8.34457E04 2.08645E05 3.29424E04 6.00491E04 1.36360E05 4.41453E05 1.74761E05 7.35448E05 8.91631E05 6.85870E05 4.69325E04 4.32166E05 3.75048E05 7.58729E04 7.08686E04 1.31369E06 4.31936E05 5.76458E05 9.68897E05 1.69808E06 1.50396E06 7.02433E04 2.53536E05 1.20282E05 1.94169E05 1.83231E05 1.06295E05 1.41203E05 8.33352E04 1.94976E05 1.65243E05 6.87849E04 1.17741E05 1.95565E05 1.44941E05 1.09143E05 1.05145E05 4.56253E04 8.73253E04 1.55968E05 2.64303E04 7.68715E04 7.94261E04 3.43070E04 6.63721E04 5.59951E04 2.54952E04 4.14445E04 2.55569E04 6.40776E03 2.75271E04 8.56339E03 1.14098E04 1.04629E03 1.33033E04 1.57447E04 4.90462E04 5.17838E04 2.96975E04 2.69452E04 7.16390E04 6.55314E04 1.91894E04 3.84600E04 1.16922E04 4.27806E04 3.88524E04 5.85483E03 2.72002E04 4.04533E04 3.96227E04 1.72650E04 4.24255E03 6.39220E03 2.51441E04 6.48973E04 5.81024E04 3.23939E04 8.86511E03 1.47330E04 1.23503E04 4.12085E04 3.36612E04 1.86470E04 3.33801E03 3.92436E04 3.79314E04 3.30436E03 5.08932E04 5.37736E04 1.40648E04 2.34780E04 4.39468E04 2.24984E04 1.12522E04 1.65253E04 1.65593E03 1.99246E04 2.46343E04 1.78682E04 1.40958E04 1.40396E02 4.35975E03 2.76345E03 2.68730E03 3.06200E04 5.24346E04 2.40884E04 8.51779E03 3.60715E04 9.84218E04 5.04269E04 7.82783E04 4.21945E05 4.98361E05 1.42128E05 2.10279E05 8.93092E05 5.19184E05 1.06674E05 5.68508E04 4.08874E04 6.41067E03 6.09271E03 9.91444E03 4.74232E04 1.82343E04 5.14640E03 2.00273E04 2.95066E04 1.44521E04 3.99393E03 2.57012E04 1.95117E04 4.08509E02 2.48565E02 5.77730E03 2.14010E03 1.16807E04 1.01686E04 2.50830E03 5.54213E03 3.17201E03 7.44686E03 3.45008E02 1.62107E04 3.66851E03 6.72121E03 1.98917E03 1.07802E04 4.03121E03 2.35377E03 3.52206E03 5.65217E03 1.91692E03 6.07550E03 8.20615E03 1.54981E04 1.55995E04 1.26664E04 8.57495E03 1.70415E04 9.49398E03 3.29620E03 5.95994E03 2.04827E04 1.48120E04 1.00489E03 2.52540E02 1.65431E03 7.44465E03 2.02959E04 5.79366E03 1.36024E03 3.14315E04 4.66635E04 1.03476E04 3.79810E04 1.52510E05 1.73821E05 8.47997E04 9.73946E01 7.14366E04 5.40756E04 3.23382E03 -Frame 257 3.31897E05 1.74052E06 2.42405E05 4.78226E05 8.46879E05 1.51652E05 7.92916E04 2.72213E06 2.47343E06 2.20867E05 6.04891E05 4.29992E06 2.23275E06 1.43681E05 1.82351E06 6.79568E06 3.68087E06 7.93797E05 1.95110E06 2.16425E06 1.21415E05 7.86507E05 1.34096E06 9.60801E04 2.22356E05 1.29063E06 9.19430E05 5.98418E04 2.61820E05 3.25721E05 1.10918E05 1.42731E05 1.59330E05 5.41641E05 2.30096E05 3.41981E04 2.49014E05 5.18031E05 2.55665E05 1.53639E04 4.46721E05 4.37404E05 1.40700E05 1.22339E06 1.44534E06 9.05585E05 3.93886E06 1.66683E07 1.90928E07 9.83731E06 1.80682E07 3.93295E07 3.45500E07 2.44520E07 2.61701E06 2.04648E06 1.61532E06 4.80794E03 4.29590E06 3.25648E06 9.58121E05 1.65213E06 3.42331E06 1.81334E06 1.93867E06 4.39996E06 3.26706E06 8.54199E04 2.68293E05 8.80264E05 1.97971E05 5.24144E05 8.06599E05 8.13503E05 3.84858E04 4.47093E05 6.51183E05 1.20369E05 1.01199E06 2.83543E05 2.01500E05 4.74181E05 1.70404E06 1.15213E06 1.20375E06 1.91382E06 7.84146E05 1.16994E06 4.78338E06 1.02575E07 1.48294E07 1.49963E07 5.59178E06 4.15449E06 5.58445E06 1.85103E06 1.46507E06 3.23368E06 2.13251E06 3.62315E06 6.97982E06 4.38072E06 1.25638E06 2.63644E06 2.19897E06 1.99637E06 5.05185E06 4.86031E06 2.72498E06 2.78119E06 2.21331E06 9.35503E05 1.56910E06 1.85687E06 1.41970E06 1.47179E06 1.22503E06 8.41475E05 6.64148E05 5.66929E05 4.30025E05 3.25267E05 3.53608E05 2.13988E05 8.70944E04 7.34252E04 5.47459E04 7.46481E04 3.02903E05 6.99016E05 8.15119E05 7.15915E05 6.20497E05 2.83681E05 2.07899E05 1.91594E05 1.89580E05 3.99378E05 3.24339E05 3.28159E04 6.12835E04 1.83848E05 4.48639E04 2.33311E04 1.91625E04 1.40384E04 1.07784E04 1.78205E04 5.59654E03 9.59462E03 4.82832E04 3.37967E04 1.13093E04 4.57078E04 5.12819E04 3.19523E04 5.16887E04 1.21956E05 1.31177E05 6.47492E04 8.96004E03 2.20715E04 8.96860E04 5.32085E04 7.25274E02 3.17334E03 6.94434E03 3.53474E04 5.06553E04 1.43812E04 6.20938E02 1.92996E03 4.72272E03 8.46316E03 1.29579E04 5.39207E03 3.01631E04 6.01854E04 2.20296E04 2.35672E03 6.13544E03 2.33778E03 1.32904E04 8.19486E04 3.71436E05 2.90018E05 6.81787E04 4.44368E05 6.63281E05 1.41747E05 1.73371E05 2.11871E05 5.36058E04 2.43494E04 6.75595E04 6.00700E04 3.60054E04 5.21368E04 7.12579E04 3.58995E03 6.46080E03 4.58913E03 3.64131E03 4.88228E04 9.00365E04 1.01413E05 9.03116E04 7.80941E04 4.58207E04 4.41133E04 7.11851E04 2.40942E04 2.13333E04 2.24712E04 9.98782E03 2.76927E04 4.74774E04 5.52190E04 2.58709E04 1.42629E04 3.03814E04 1.83894E04 2.04962E04 3.02579E04 1.98631E04 2.78561E03 8.27687E03 4.23300E03 3.60229E03 8.97824E03 7.18397E03 1.53589E04 1.85619E04 2.17796E03 4.60099E04 1.17991E05 9.65918E04 5.01038E04 8.05426E04 1.49994E05 7.78558E04 1.36727E04 6.48285E04 4.23492E04 1.07078E03 1.82697E04 8.43138E04 2.81641E04 1.94836E03 2.58886E04 8.22495E04 7.92820E03 8.78279E03 7.86726E04 9.39840E04 4.12147E03 1.17717E04 -Frame 257 7.22105E06 4.89242E06 9.63983E05 2.05221E06 3.27922E06 6.30512E05 1.72636E06 9.32702E06 8.89594E06 1.18811E06 2.97704E06 1.00855E07 5.01732E06 9.77610E05 8.08868E06 1.88455E07 9.19172E06 1.00309E07 3.18836E07 3.62000E07 9.81623E06 6.22077E06 1.43703E07 7.45219E06 1.87608E06 8.67275E06 1.39312E07 4.81976E06 1.07883E06 5.41772E06 4.98450E06 1.36492E06 1.72827E06 4.93238E06 3.45099E06 6.58351E05 1.33361E06 2.42483E06 7.96625E05 2.39848E05 1.29686E06 1.75947E06 5.64129E05 2.32209E06 6.88234E06 4.20654E06 2.80079E06 1.78149E07 3.49818E07 8.01522E06 2.30754E07 2.36355E08 4.46722E08 3.38273E08 2.87312E08 2.32165E08 1.03963E08 2.14817E07 2.06921E07 3.55057E07 1.50438E07 2.54292E06 1.09118E07 1.09201E07 3.48932E06 2.24649E06 6.39649E06 4.99745E06 1.24928E06 1.07784E06 2.67677E06 2.01052E06 4.38582E05 2.99262E06 3.72262E06 1.08618E06 1.87023E06 4.40825E06 2.84017E06 3.82882E05 2.68608E06 5.22303E06 1.86448E06 1.06535E06 5.64880E06 1.35392E07 9.12377E06 6.04907E06 7.73492E06 2.05130E07 5.04563E07 4.24461E07 3.25350E07 2.42155E07 9.44696E06 4.25316E06 6.63288E06 4.97442E06 1.36895E06 4.79335E06 1.27446E07 5.69036E06 1.91177E06 5.29562E06 5.99976E06 3.68775E06 5.44146E06 8.20311E06 3.96256E06 3.05763E06 7.83957E05 1.51948E06 1.60588E06 8.48741E04 2.56571E05 6.58500E05 2.40560E05 1.90652E04 9.38357E04 1.39727E05 8.62378E03 1.03836E03 5.82954E04 1.81340E04 1.69995E04 2.71545E04 4.53169E04 3.55341E04 6.92789E04 1.97311E04 1.33959E05 2.86283E05 3.06313E05 2.23452E05 1.55474E05 7.03769E04 5.04009E04 4.83194E05 9.01636E05 7.29580E05 7.04564E05 7.18661E05 3.20411E05 6.81035E04 8.11670E04 1.64547E05 2.44904E04 7.66509E03 4.59326E03 2.10088E04 5.75734E04 4.90648E04 9.72937E04 1.39641E05 4.50545E04 7.50729E03 2.94970E04 1.84760E04 1.90934E04 5.79274E04 1.45330E04 2.18278E04 1.12533E05 9.60745E04 1.02305E04 5.05122E04 7.15693E04 7.17211E04 4.91915E04 4.14728E03 4.18476E03 6.49798E02 3.22739E03 3.82749E03 6.22768E02 3.01986E04 6.20844E04 5.82730E03 1.18260E04 7.47301E03 2.24906E04 4.36921E04 3.15095E04 4.10186E04 1.81892E05 2.16118E05 4.89136E04 7.53022E04 3.86384E05 1.85815E05 4.33098E04 1.12687E03 1.30286E04 8.73579E03 3.41866E04 5.61288E04 5.41774E04 5.81009E04 7.44437E04 5.13748E04 1.34891E04 1.01962E04 2.49726E04 2.31280E04 1.85752E04 1.07731E04 7.72772E04 8.83372E04 5.19631E04 7.46444E04 9.44935E04 2.81504E04 2.43398E03 2.63216E04 5.23957E04 4.16701E04 3.70357E02 1.28007E04 1.90547E03 3.73145E04 1.50546E05 1.66419E05 9.47349E04 6.33257E04 1.59718E05 1.79502E05 6.49680E04 2.10521E04 2.63910E05 4.70868E05 3.00267E05 1.22089E05 2.28071E05 1.67314E05 3.19496E04 3.57380E05 4.10406E05 8.67493E04 9.17150E04 3.19539E05 2.15275E05 5.84869E04 2.39918E05 4.10777E05 1.58476E05 1.45257E05 4.87409E05 3.12512E05 4.11290E04 5.92299E04 2.41862E05 1.33873E05 3.97717E04 6.49032E04 1.34460E05 1.43902E05 1.11029E05 -Frame 257 1.99425E06 1.98639E06 8.75031E05 3.10149E06 4.19417E06 8.29099E05 1.34912E06 1.28337E07 1.11679E07 9.41707E05 2.50545E06 1.12341E07 6.09068E06 3.97464E05 8.34176E06 1.80953E07 4.90849E06 6.31914E06 6.60809E07 8.40192E07 1.60233E07 7.06622E06 2.68748E07 1.63593E07 1.26903E06 8.85031E06 2.84903E07 1.24109E07 6.76917E05 5.95202E06 9.78931E06 2.26895E06 4.40340E05 5.74881E06 5.05557E06 5.38564E05 5.19011E05 2.68353E06 1.11056E06 6.01175E04 1.43267E06 2.86711E06 7.85107E05 1.66178E06 1.14307E07 9.50510E06 1.51352E04 2.40647E07 6.65230E07 1.19124E07 3.67175E07 3.64688E08 3.01915E08 2.71435E07 6.86630E07 1.84798E08 1.63961E08 3.45458E07 1.32240E07 3.64250E07 2.85620E07 6.93284E06 9.26567E06 2.15150E07 9.22856E06 1.34929E06 4.13448E06 6.68547E06 1.62092E06 8.22755E05 3.95273E06 4.48077E06 1.28374E06 2.34004E06 8.76355E06 6.78276E06 2.46615E06 5.52350E06 1.38790E07 8.94747E06 1.20085E06 3.66712E06 6.83959E06 2.33376E06 3.14024E06 1.59528E07 4.27382E06 6.26592E05 1.66097E07 3.64870E07 1.09621E07 1.14821E06 1.61415E07 3.03249E07 7.90325E06 1.75632E06 6.22289E06 5.83357E06 1.33967E06 1.52182E06 7.11559E06 3.57569E06 7.96538E05 2.47835E06 4.65809E06 1.65299E06 6.63358E05 4.54257E06 1.09972E07 6.10937E06 2.51513E06 4.37498E06 7.03778E06 4.55866E06 1.82107E06 1.63712E06 1.35453E06 3.07749E05 1.95471E05 4.38251E05 1.68332E05 2.42816E04 3.57881E04 3.80344E04 6.33389E03 1.76512E04 5.93479E04 3.58921E04 2.23863E04 3.19722E03 2.83167E04 1.98698E04 2.23779E04 4.24804E04 7.34618E04 3.30801E04 5.50043E04 9.06524E04 7.46118E04 3.78664E04 3.43859E04 4.23796E05 7.83862E05 7.35261E05 7.72359E05 8.19882E05 3.17294E05 3.21562E04 3.04447E04 1.02611E05 7.24562E04 1.17097E05 3.91930E05 6.61534E05 1.58020E05 4.65339E04 8.50094E04 1.54004E05 6.78792E04 2.96126E05 3.75125E05 2.75648E05 1.22474E04 1.28190E05 1.66990E05 3.48404E04 1.19346E05 2.67798E05 4.49383E04 1.66272E04 9.30461E04 1.06819E05 3.05977E04 1.34528E03 2.85730E04 6.94314E04 5.26652E04 3.67299E04 6.50072E04 1.95181E04 5.26087E03 9.53551E03 2.18865E03 3.77786E03 4.40297E04 6.62365E04 2.42639E04 1.50432E05 2.49829E05 1.57537E05 7.58566E04 9.85810E04 8.31726E04 5.43403E04 2.64529E04 4.33753E04 9.48767E04 1.87727E04 2.02606E04 6.74114E02 1.76067E04 1.73970E04 3.83399E04 2.33967E04 4.47787E03 6.69968E03 1.45768E04 4.08381E02 2.92043E03 2.19122E04 5.12352E04 2.96401E04 2.52164E04 8.13512E04 1.31485E05 9.94742E04 8.17696E04 6.21457E04 9.08960E04 1.37282E05 1.12188E05 1.80384E05 2.30994E05 1.29978E05 4.78307E04 1.88035E05 4.63220E05 3.46548E05 1.61254E05 5.49168E05 6.14891E05 2.32837E05 1.74429E05 5.04964E05 7.30424E05 5.89636E05 1.62666E05 1.55156E05 1.23411E05 6.69684E04 1.82917E05 1.57482E05 1.41018E05 3.93434E05 7.68392E05 7.44840E05 4.47996E05 5.56345E05 6.65985E05 4.66315E05 1.55112E05 6.40176E04 3.68861E04 2.04496E04 8.39615E03 4.76483E04 1.55256E04 -Frame 257 1.35131E03 2.13368E05 9.22306E05 3.09836E06 3.95517E06 6.53091E05 1.54615E06 1.21971E07 1.08291E07 5.25909E05 2.71579E06 1.05842E07 5.79649E06 7.15237E04 8.46734E06 1.83878E07 3.91550E06 6.79054E06 7.40780E07 8.41276E07 9.05437E06 6.16061E06 2.78697E07 1.52783E07 3.33496E05 1.30006E07 3.19912E07 9.76502E06 4.63682E05 8.18842E06 1.05341E07 1.47764E06 1.35991E06 8.68521E06 6.38155E06 2.95628E05 1.09644E06 3.82401E06 2.12072E06 1.80221E05 2.84502E06 5.44661E06 1.35071E06 2.65284E06 2.64840E07 1.66558E07 1.26966E07 1.47069E08 2.17289E08 1.07642E08 1.09332E08 2.65624E08 1.99830E08 2.38311E07 2.95937E06 2.48560E07 3.80099E07 5.78873E06 4.04257E06 1.50359E07 1.04170E07 6.58043E05 2.49121E06 9.80810E06 4.95573E06 7.75625E05 2.88391E06 3.24735E06 6.42043E05 7.59361E04 1.61098E06 1.87158E06 2.63359E05 1.80070E06 6.68484E06 3.69005E06 3.28166E05 3.55093E06 1.12266E07 5.22076E06 2.61425E06 1.03111E07 1.43241E07 5.00131E06 8.70211E06 2.86641E07 2.07079E07 2.70843E06 5.42610E06 1.40852E07 2.39509E06 7.83077E05 7.48906E06 1.04365E07 2.90184E06 6.44381E05 2.65623E06 2.63283E06 1.22522E06 2.56468E06 4.37308E06 1.76191E06 1.03126E05 1.78833E05 3.03744E05 3.30374E05 7.27072E05 1.62449E06 2.07728E06 5.20668E05 1.06775E05 5.94148E05 1.71986E06 1.59076E06 1.20779E06 1.39146E06 1.61675E06 9.69651E05 7.65673E05 4.79525E05 2.95322E04 3.17906E04 3.02409E04 1.68044E04 2.16766E03 2.45313E04 4.15247E04 2.20785E04 1.49784E04 1.40055E04 1.17649E04 2.17943E03 3.55834E04 2.86502E04 2.23789E03 4.32388E03 2.77448E04 6.99278E03 9.53573E03 6.50690E03 1.21999E04 5.25801E03 9.13989E03 1.04126E05 1.99488E05 4.88209E05 1.58068E05 1.56080E03 2.28161E05 6.89980E05 4.88206E04 1.12539E06 3.76745E06 3.14433E06 6.14683E05 2.02594E05 9.78799E05 4.25221E05 5.99886E04 5.50926E05 8.34412E05 3.25413E05 9.55452E04 2.88296E05 2.21894E05 1.33760E05 1.38372E05 2.53616E05 1.01559E05 6.95028E04 4.38547E05 3.87168E05 4.51904E04 2.29284E04 7.93512E04 1.33040E04 5.10760E04 9.70826E04 1.14586E05 2.49518E04 4.09974E03 3.70641E04 3.58663E04 2.93276E03 1.60839E04 3.71518E04 7.72391E03 4.32955E03 1.14400E04 1.28963E04 2.41580E04 1.30680E04 4.09670E03 4.93577E03 2.39735E04 6.06420E04 1.48449E05 1.03108E05 1.36190E04 3.53809E04 5.70324E04 8.05602E03 3.38164E04 8.80714E04 3.60768E04 7.91379E03 6.95281E03 4.07280E04 3.23478E04 9.76769E03 1.47415E03 1.04481E03 1.91264E03 1.97987E04 4.31063E04 1.53617E04 2.00448E04 6.44213E03 1.10505E04 1.29237E04 1.59171E04 1.06744E04 2.05539E04 1.96348E05 1.83617E05 7.61661E04 1.51839E05 1.66096E05 3.46494E04 1.38192E05 4.10762E05 2.00094E05 1.89417E04 1.39608E05 6.34799E05 1.81034E05 1.05578E04 1.71360E05 3.80096E05 2.52710E05 5.62201E04 3.72018E04 1.04402E05 1.00644E05 2.07773E05 8.24819E05 6.38968E05 2.48854E05 2.00973E05 4.43646E05 1.07821E05 1.65617E03 6.46591E04 7.14186E04 2.24968E03 5.05194E04 7.99049E04 -Frame 257 1.82614E06 9.99314E05 3.45386E05 2.12851E06 3.29926E06 3.98361E05 2.04188E06 1.25947E07 8.73378E06 5.95702E05 3.74522E06 9.09400E06 4.12560E06 3.70605E05 1.22923E07 1.55576E07 1.65956E06 1.65994E07 8.87657E07 6.14924E07 2.83402E06 1.06324E07 2.39945E07 1.01140E07 4.81027E05 1.76487E07 2.61625E07 6.00584E06 9.62854E05 7.85041E06 6.86280E06 1.63012E05 6.00799E06 1.22537E07 5.64724E06 1.08002E05 4.12621E06 4.85184E06 1.21695E06 1.61765E06 1.26168E07 8.68868E06 4.71719E06 3.89683E07 6.40323E07 4.59961E07 8.56500E07 1.41308E08 6.86083E07 4.74206E06 6.30488E06 3.83903E07 3.02871E07 1.39265E06 4.39877E06 1.07131E07 5.43944E06 1.09316E06 4.73285E06 6.89443E06 2.54941E06 3.73686E05 3.84797E06 3.80148E06 5.97577E05 8.94396E05 1.44741E06 1.16638E06 6.05153E02 7.27203E05 6.33882E05 2.17755E05 1.80536E05 1.58596E06 1.34229E06 1.01585E05 1.11217E06 4.13337E06 1.90465E06 1.07038E05 1.69209E06 3.62477E06 1.04007E06 1.23471E06 1.01312E07 1.95894E07 5.18025E06 4.59682E06 1.30904E07 7.98354E06 1.21123E06 7.48100E05 1.86045E06 6.48398E05 3.48004E05 1.85865E06 1.58233E06 3.56937E05 6.23083E04 7.17517E05 9.47023E05 6.70417E03 6.90321E05 5.67338E05 4.05847E05 3.22419E04 8.13060E04 3.66547E04 1.32096E04 9.59122E04 8.09947E04 3.72436E04 2.00860E03 1.28348E04 1.96177E05 2.40028E05 4.96135E04 1.64616E04 1.23352E05 3.40063E05 1.14998E05 2.93550E04 2.24462E04 1.37950E03 1.94471E04 1.94219E04 2.06301E04 1.66384E04 6.58085E02 5.36468E03 6.94191E03 4.11742E04 1.27344E05 1.51404E05 1.39993E05 7.32903E04 1.33822E05 1.08595E05 7.02842E04 6.24090E04 1.99357E04 9.17765E04 2.05545E05 5.09161E05 6.83052E05 2.46121E05 1.36877E05 2.33684E05 3.56455E05 2.05092E06 4.58723E06 4.73586E06 8.46401E05 6.31416E05 1.99896E06 1.18484E06 5.38661E05 3.75002E05 4.38064E05 9.51897E04 1.75504E05 4.38758E05 4.43899E05 1.94503E05 4.28664E04 1.84044E04 1.24538E04 8.98247E04 2.00896E05 3.77284E05 3.31597E05 5.96816E04 1.51621E05 9.80715E04 1.64817E04 6.78445E04 1.32618E05 6.96119E04 7.37618E02 4.75644E04 6.22459E04 2.39368E03 2.60586E04 4.01345E04 1.92775E04 4.06642E03 8.70912E03 1.06787E04 5.29143E03 1.22804E04 1.38470E04 1.45178E04 1.24373E04 4.53483E03 3.39100E04 5.68439E04 2.81512E03 3.54483E04 4.88199E04 1.23170E04 1.06466E04 5.68311E04 8.53414E04 3.50494E04 2.18807E03 3.76635E04 1.68215E04 4.86625E03 1.72206E04 2.33746E04 8.38249E03 5.48977E03 1.23159E04 2.80985E04 1.19906E03 1.98536E04 2.90739E04 1.33583E04 1.87735E04 2.28130E04 3.06258E04 9.97854E03 2.88329E04 8.59033E04 4.65761E04 9.95130E03 2.98339E04 8.76236E04 6.84563E04 9.04700E03 1.71670E04 1.14338E05 2.13723E05 1.73287E05 2.21737E05 2.24925E05 5.75667E04 1.83566E04 2.02760E05 2.89429E05 7.44280E04 1.96010E04 3.57839E04 4.84807E04 7.37062E04 1.61252E05 3.43269E05 2.53297E05 2.32961E05 3.15723E05 5.94058E04 2.66882E04 1.25644E05 2.23321E05 1.29764E05 2.63356E04 2.62679E04 -Frame 257 7.37416E03 4.17061E05 8.83850E03 1.90673E06 2.76566E06 4.87558E05 2.32663E06 1.24729E07 7.73989E06 6.55548E05 3.68010E06 9.14378E06 2.58022E06 1.28231E06 1.47163E07 1.49545E07 3.18332E05 2.59923E07 8.53326E07 3.67218E07 8.79211E04 1.00101E07 1.78207E07 3.93297E06 2.41416E06 2.10457E07 1.53335E07 9.94920E05 2.32559E06 9.68371E06 3.13604E06 3.15230E05 8.06605E06 1.15048E07 1.61132E06 2.03247E06 9.16267E06 7.32030E06 2.50868E06 1.55133E07 1.08151E07 1.72409E06 3.72363E07 5.31834E07 1.45921E07 1.01615E06 6.34011E05 1.06954E07 8.51394E06 6.15261E05 4.01925E06 1.15370E07 4.27732E06 7.30140E04 3.16450E06 3.57840E06 9.12836E05 2.59334E05 2.49007E06 1.06305E06 7.24670E04 2.46884E06 3.87069E06 8.74723E05 5.66073E04 1.15256E06 1.48326E06 1.65743E05 1.36398E05 3.48450E05 9.89889E04 1.25578E04 4.32083E05 5.83373E05 5.72281E04 2.68387E05 1.46081E06 9.57839E05 4.24395E04 5.28520E05 1.10221E06 2.99124E05 2.16044E05 2.88241E06 3.83073E06 6.67519E05 5.27491E06 1.11319E07 4.69216E06 6.59528E03 1.98581E06 1.75864E06 4.05326E05 2.46918E05 1.86824E06 1.25496E06 9.13744E04 2.54376E05 9.12065E05 2.39932E05 2.53347E04 6.79470E05 9.83583E05 2.32190E05 4.69079E04 5.27334E05 5.74310E05 2.28827E05 2.36465E05 2.66787E05 9.85678E04 8.18535E04 1.78590E05 6.73804E04 4.42722E04 3.19433E05 3.87620E05 1.53996E05 9.73734E04 2.98553E05 1.88700E05 8.15997E04 3.74574E04 2.84398E04 1.64740E04 5.18639E02 1.50642E02 6.64848E03 4.34511E03 1.82461E03 2.08436E03 6.12566E02 9.31270E03 2.58033E04 6.41591E04 4.92731E04 1.50632E03 1.01815E04 9.96757E03 5.25956E04 2.75385E04 1.42524E05 4.07520E05 1.70315E05 1.93464E05 7.87155E05 4.73660E05 5.54127E04 5.66038E04 1.03359E06 1.29365E06 2.38724E05 8.74167E05 1.64618E06 5.05884E05 1.63844E04 1.50259E05 1.10993E05 9.34096E04 3.76045E04 1.26329E05 4.08803E04 2.21653E04 1.56962E05 2.37295E05 8.51198E04 3.61752E04 1.36793E03 3.73482E04 1.68310E03 9.52348E04 2.27067E05 2.22302E05 6.89468E04 9.08441E03 1.25150E04 2.69508E04 7.12506E03 1.19988E04 3.46959E04 1.72569E04 2.36660E04 1.24918E04 9.78398E02 5.97186E03 2.62754E04 3.92941E04 2.20798E04 3.30378E03 1.44435E03 2.94171E03 9.83444E03 1.71415E03 1.64417E04 1.85335E04 3.27913E03 8.24757E03 2.59545E04 2.18704E04 4.34188E03 1.47235E03 9.50072E03 5.91215E03 4.15701E03 7.29565E03 1.33780E04 9.12131E03 5.48786E03 2.24340E03 4.13547E03 1.32872E04 9.68963E03 4.40477E02 6.71275E03 1.44597E04 8.45413E03 5.65819E02 4.05532E04 6.33396E04 1.44421E04 1.49224E04 7.86967E04 7.93938E04 4.70275E04 7.64359E03 1.58739E04 4.28987E04 5.28072E04 8.55257E03 9.01981E02 6.94292E02 1.39028E04 1.89110E04 3.20772E04 4.07159E04 8.65390E03 2.13996E03 1.70954E04 1.36956E04 6.97035E04 4.21779E04 1.99796E04 4.25828E04 5.04937E04 5.46822E04 7.02022E04 1.81042E05 1.79148E05 2.26093E05 2.45753E05 6.29554E03 8.57457E04 1.47301E05 6.16869E04 1.86691E05 1.48753E05 7.38103E04 -Frame 257 9.96908E05 3.62241E05 8.66084E04 2.08789E06 2.59548E06 4.30334E05 2.37201E06 1.13078E07 6.49677E06 8.56682E05 3.70615E06 8.94214E06 2.29710E06 2.60515E06 1.84971E07 1.68792E07 5.81250E05 2.35141E07 6.31476E07 2.16650E07 2.30758E05 7.07605E06 1.09922E07 2.08280E06 2.70691E06 1.53604E07 9.02697E06 7.25330E05 2.72975E06 7.96300E06 2.81065E06 9.79525E05 1.07677E07 1.10285E07 2.55785E06 7.49996E06 2.38096E07 9.49990E06 1.33985E07 3.91455E07 2.96957E07 4.95062E06 2.34943E06 8.30057E06 5.13654E06 2.53588E05 1.04961E06 2.59177E06 8.87970E05 2.03889E04 1.89151E06 4.27833E06 1.48187E06 2.16402E05 1.40227E06 8.96498E05 1.63396E04 5.48609E05 1.57888E06 6.02269E05 9.05631E04 1.19783E06 1.28701E06 1.40704E05 2.99496E05 1.20459E06 5.43804E05 3.64809E04 4.55352E04 1.68327E05 2.52547E04 4.53413E04 3.05948E05 2.88479E05 3.56299E04 1.99107E05 6.11087E05 1.75658E05 4.70816E04 4.37494E05 3.47385E05 9.56930E03 1.73557E05 1.32389E06 7.41892E05 6.89973E04 1.93169E06 5.45166E06 1.90315E06 2.50755E04 1.01422E06 1.21274E06 1.77424E05 1.75508E05 9.40703E05 2.86217E05 2.94969E04 4.00324E05 6.77512E05 1.56920E05 5.71415E04 6.36350E05 5.65939E05 6.56429E04 2.78732E05 7.26157E05 2.15234E05 1.84159E04 6.02077E05 1.27124E06 5.49166E05 3.46687E05 3.03895E05 5.03384E04 1.02022E05 5.16676E05 6.56956E05 1.19199E05 2.16867E04 3.47422E05 3.24581E05 1.00305E05 7.05372E03 1.44109E04 3.96824E04 3.91490E04 4.15888E04 2.99734E04 3.58515E03 6.38371E03 1.39330E04 1.71650E04 1.75536E04 2.13132E04 1.42948E04 4.18577E03 2.92874E03 1.32426E04 1.12098E05 1.53148E05 8.58191E04 1.68867E05 2.38347E05 3.48090E04 3.02681E05 4.32906E05 8.23966E04 4.90471E04 3.56343E05 3.92578E05 7.83930E04 1.95006E04 2.05950E05 3.51358E05 1.04288E05 9.22475E03 9.07468E04 3.52347E04 8.41423E03 6.08995E04 1.40330E05 9.28038E04 1.87747E04 4.32348E04 4.92910E04 1.10296E04 7.28785E03 5.15607E04 6.00494E04 8.14541E03 9.95922E03 8.57290E04 5.05188E04 5.91025E03 9.34283E02 1.04934E04 6.05283E03 1.95394E03 6.15432E03 9.24477E03 7.01311E03 1.68778E04 2.12193E04 3.80351E03 2.44399E03 7.95840E03 1.62452E04 1.19339E04 1.21408E03 6.41764E03 1.21912E04 7.98567E03 1.13512E02 3.76725E03 9.68553E03 1.03229E04 6.32263E03 9.01285E03 1.12033E03 3.68037E03 2.75979E03 4.94590E03 1.04667E04 7.56276E03 4.46250E03 1.03788E03 6.34022E02 3.48038E03 1.03114E04 3.15203E03 6.65784E02 1.89708E03 6.68151E03 2.81529E03 1.98354E02 1.39039E02 8.53048E03 2.88329E04 2.17369E04 1.00207E03 1.86414E04 5.20015E04 1.69140E04 1.62852E04 6.20462E04 3.47565E04 6.35200E04 6.96896E04 3.02693E04 1.63475E04 3.09691E04 5.70546E04 5.43762E04 8.65275E04 1.00180E05 4.81579E04 4.22854E04 5.13636E04 6.50974E04 7.25939E04 1.69552E04 4.57293E04 1.20968E05 5.58758E04 2.46705E03 1.05865E05 3.46200E05 1.06017E05 8.55539E04 3.99371E05 2.65830E05 3.61151E04 9.02324E04 2.84691E05 1.56858E05 2.67101E04 2.40924E03 -Frame 257 7.42007E05 4.22670E05 3.39438E04 1.64904E06 2.25321E06 4.46084E05 2.15354E06 1.01803E07 6.11021E06 6.78210E05 4.05757E06 9.23665E06 2.24398E06 4.34953E06 2.44273E07 1.85791E07 1.05063E06 1.49987E07 3.52368E07 1.06020E07 5.32445E05 5.00271E06 7.78294E06 1.23759E06 1.76196E06 9.87657E06 6.43721E06 7.23094E05 2.70115E06 7.73021E06 2.38916E06 1.89134E06 1.40759E07 1.39477E07 6.66669E06 2.62704E07 4.47088E07 7.63834E06 1.72366E06 9.13049E06 9.41350E06 1.62501E06 9.58825E04 1.18638E06 1.18417E06 1.27396E05 4.50408E05 1.39705E06 3.60404E05 5.44693E04 5.04068E05 1.13279E06 4.81349E05 5.44904E05 1.98216E06 9.98684E05 1.53258E05 3.56482E05 7.05166E05 1.61327E05 2.33730E04 4.88756E05 5.39132E05 4.72875E04 2.90839E05 7.08754E05 2.75861E05 2.32905E04 1.21897E05 1.67948E05 4.12504E04 5.31449E04 1.57802E05 9.86433E04 5.59509E03 1.49924E05 5.15074E05 1.32644E05 4.06909E04 2.62070E05 3.32039E05 1.39942E05 3.30202E05 8.72298E05 4.43097E05 1.89389E05 1.71360E06 2.96979E06 6.83881E05 1.47379E05 5.90396E05 3.25283E05 4.78395E04 1.73118E05 6.91219E05 3.30149E05 2.64476E04 1.76092E05 4.28080E05 1.66956E05 1.89575E05 7.69724E05 5.51336E05 7.07413E04 1.28846E05 4.30431E05 2.71658E05 1.09282E05 6.86533E05 1.14830E06 3.37248E05 3.81029E04 4.68800E05 4.16989E05 1.02740E05 2.55097E05 3.52877E05 3.24856E04 4.06748E04 1.16044E05 6.75268E04 2.76682E03 7.10518E03 1.60824E04 1.18662E03 3.06516E03 2.21007E04 1.85888E04 9.32045E03 4.42837E04 1.08049E05 3.58433E04 9.90382E01 3.28963E02 1.90180E04 1.01977E04 4.56958E03 9.29197E04 1.05731E05 1.88111E04 2.87458E03 7.43319E03 4.25423E04 5.88996E04 5.54407E04 8.62867E04 1.60772E02 4.08197E04 1.68511E04 3.50468E04 6.05052E04 2.00588E04 4.50025E04 7.27560E03 1.10859E04 1.48728E04 1.55734E04 5.39643E03 7.86499E03 3.62037E04 4.25996E04 2.69116E04 7.10578E02 5.08721E03 1.94389E03 5.77736E03 1.57109E04 3.66433E04 2.47265E04 3.65240E03 2.03447E02 2.89474E04 4.81711E04 1.48418E04 9.38740E03 2.68985E04 3.04677E04 1.08279E04 2.09444E03 9.32693E02 1.99987E03 1.58182E04 2.57513E04 1.05297E04 1.25135E03 4.03139E02 8.78474E02 1.10363E03 2.88712E02 3.92340E03 1.02426E04 5.11891E03 2.91727E02 4.37358E01 1.62192E03 1.21493E04 3.23206E03 8.90693E03 1.62598E04 4.42563E03 2.60384E02 9.24299E02 1.02958E04 1.01492E04 2.38739E03 6.63654E02 1.20305E03 9.82642E03 8.55330E03 7.96773E03 1.57944E04 1.00503E04 4.86464E03 7.00654E02 5.44661E02 3.69724E02 1.60319E03 5.55060E03 2.37340E03 2.04757E03 1.94929E04 3.47668E04 1.34625E04 3.89945E04 9.36610E04 3.11729E04 4.77923E03 1.48747E04 2.08469E04 3.14192E03 1.50787E03 1.37606E04 2.17095E04 1.41580E04 2.12651E04 5.96478E03 2.22544E04 3.27281E03 1.50772E04 4.29610E04 3.52541E03 6.45202E03 3.32851E04 2.90798E04 2.17456E04 1.66048E05 3.09856E05 6.58285E04 4.82183E04 2.11560E05 1.46421E05 8.93615E03 6.80035E04 1.20973E05 2.76771E04 1.28911E04 1.74298E04 -Frame 257 6.54178E01 6.90900E04 1.01200E05 1.77434E06 2.31112E06 4.00723E05 1.73355E06 9.43057E06 5.80862E06 4.49878E05 4.84450E06 1.02438E07 2.54510E06 6.50286E06 3.52114E07 2.41678E07 1.85632E06 5.51868E06 1.59909E07 5.40520E06 7.13510E05 3.87690E06 6.51463E06 1.22539E06 1.38212E06 8.18311E06 6.00860E06 8.92483E05 2.46861E06 6.61833E06 2.17073E06 2.58612E06 2.11151E07 2.30837E07 1.15625E07 2.76689E07 3.44134E07 7.88107E06 1.98889E05 8.58487E05 2.07132E06 5.88342E05 2.02036E05 8.40500E05 6.34113E05 6.62172E04 2.25649E05 6.46775E05 2.10558E05 1.74314E04 2.25670E05 2.60541E05 4.80950E04 1.78636E05 1.68106E06 1.40390E06 2.24946E05 1.98954E05 3.66518E05 1.22624E05 6.93618E04 4.17501E05 5.20923E05 5.10523E04 3.94253E04 4.21149E05 3.04129E05 5.59961E04 1.06739E05 1.58655E05 3.02765E04 1.02196E03 7.63321E04 8.47733E04 1.77788E04 1.63552E05 5.53167E05 2.05765E05 2.85785E04 2.10284E05 3.40372E05 5.44427E04 3.07378E04 4.73849E05 2.92101E05 9.02155E04 1.04312E06 1.56652E06 1.32831E05 2.83371E04 6.32703E04 2.09957E05 7.79058E04 8.53725E04 2.27870E05 2.08496E05 5.81778E04 1.24860E05 2.00784E05 1.66660E04 1.37388E04 2.06826E05 2.92621E05 4.26394E04 5.10453E04 2.54733E05 8.56034E04 2.97289E04 2.01046E05 4.90804E05 1.57474E05 2.15980E05 8.57867E05 7.26871E05 1.08060E05 1.00150E05 3.73425E05 1.99497E05 3.33036E04 8.65055E04 1.15117E05 1.20115E04 5.81501E03 2.64683E04 2.05653E04 1.24028E04 1.80379E04 2.21433E04 2.30174E04 2.84801E04 1.04843E05 8.30381E04 3.58273E04 9.01538E04 1.80300E05 1.00239E05 2.70808E03 1.37899E05 3.23751E05 2.22476E05 2.24821E05 2.31675E05 1.21214E05 1.01147E04 4.49864E04 5.06802E04 2.12541E04 7.83527E03 2.26085E03 1.04440E02 8.68045E03 3.64186E04 4.38383E04 1.32338E04 2.94319E03 2.39422E03 3.19357E03 7.67325E03 7.50979E03 9.43398E03 1.28771E04 1.38692E04 7.21565E03 8.18593E03 1.53945E04 3.82631E03 1.01655E04 1.68855E04 1.20800E03 3.78383E03 1.44572E04 5.58143E04 4.83815E04 9.91777E03 1.85656E03 2.53864E03 5.34156E03 3.81632E03 4.53011E03 1.19779E03 5.01221E03 8.20265E03 2.30690E03 2.25371E04 1.95853E04 2.71616E03 1.47375E03 1.72670E02 1.34750E03 9.77313E02 1.51520E03 8.60430E02 3.31250E03 1.99477E03 2.40051E03 9.99902E03 1.80771E04 2.58607E04 2.69988E04 1.53227E04 4.73437E03 1.70488E03 1.81727E03 1.57545E04 1.74555E04 1.38428E04 1.91434E04 1.48461E04 6.15945E03 8.11224E03 1.64525E04 1.12907E04 3.03001E03 3.58280E03 7.91028E03 7.00049E03 5.17069E03 1.51144E03 3.14078E03 2.45065E03 5.26166E03 1.71622E04 1.07950E04 7.79713E01 2.50053E04 4.34388E04 2.91379E04 1.24171E04 6.71199E03 1.21156E04 1.52585E04 1.00766E04 1.09463E04 9.50963E03 6.23141E03 1.79867E04 1.09439E04 6.99595E03 1.88598E04 1.54031E04 2.76625E03 1.87511E03 1.21515E04 2.19386E04 7.41274E03 3.87482E04 1.35482E05 1.08468E05 1.26051E04 5.75224E04 1.31628E05 4.34454E04 1.29409E04 2.51372E04 2.99618E04 1.38213E04 3.24627E03 -Frame 257 5.14005E05 2.99759E05 3.02308E03 1.56697E06 2.27357E06 2.85782E05 1.43728E06 8.71592E06 5.33625E06 1.74312E05 7.24147E06 1.28934E07 3.14001E06 1.09368E07 4.73594E07 2.59149E07 1.62130E06 1.97917E06 6.43127E06 2.50510E06 5.11656E05 3.57519E06 4.80162E06 7.80575E05 1.21675E06 6.62280E06 4.87949E06 4.90717E05 2.06713E06 4.60822E06 1.63965E06 3.31935E06 2.53792E07 2.74274E07 1.64639E06 1.39150E06 8.51912E06 4.38068E06 2.73221E05 8.23931E05 1.18561E06 1.36429E05 5.24324E04 4.12437E05 2.36346E05 9.89639E03 8.57533E04 3.94472E05 1.73813E05 2.38572E04 2.48675E05 3.27455E05 1.10344E05 1.58070E05 8.52160E05 3.74343E05 2.87000E04 1.48558E05 3.10516E05 4.54568E04 2.37438E04 3.59466E05 4.20397E05 1.07981E05 1.68765E05 5.14763E05 2.38470E05 7.14990E03 6.23977E04 1.82113E05 6.01658E04 1.65040E04 1.45164E05 1.04085E05 7.48707E03 1.64011E05 5.54691E05 2.04688E05 6.27633E04 5.30955E05 7.23793E05 4.33744E04 3.51425E05 9.16145E05 2.02284E05 4.24451E03 4.52701E05 1.10895E06 3.90273E05 1.03665E05 2.83824E05 2.35837E05 3.84423E04 9.07168E04 1.58855E05 5.95460E04 1.16843E03 3.52911E04 1.06264E05 2.50480E04 3.22875E04 1.57093E05 1.16870E05 3.78796E04 1.36135E05 2.92187E05 9.96954E04 4.94562E04 2.16553E05 2.21319E05 2.54011E04 3.74725E04 4.33617E05 4.84246E05 8.94160E04 1.48937E05 3.24127E05 5.43715E04 5.82745E04 2.19246E05 2.74086E05 1.01088E05 5.10599E04 3.53946E04 5.63442E03 1.01993E04 9.32712E03 1.99716E04 2.11037E04 1.42579E04 3.24899E04 2.97709E04 7.93938E03 6.14591E04 1.37962E05 1.24536E05 2.35961E05 2.44892E05 9.43606E04 1.14810E05 3.51707E04 1.79636E05 1.46672E05 7.86942E04 6.13226E04 2.12690E04 5.65526E03 5.70182E03 2.43447E03 4.58305E03 3.09547E03 1.48876E04 1.41543E04 1.19485E03 1.32329E03 5.27202E03 1.68497E04 1.49708E04 6.61801E03 2.19911E04 3.20046E04 1.02811E04 9.70785E03 1.49789E04 1.33862E04 4.47130E04 5.37790E04 1.17719E04 1.81213E02 2.04656E03 1.90022E04 5.95552E01 5.11669E04 4.80855E04 3.25153E04 2.58233E04 1.15114E04 4.86692E03 1.09403E04 8.43525E03 8.29040E03 3.28339E04 3.95974E04 4.07569E03 1.02068E04 2.91325E04 1.41506E04 1.39032E04 1.11228E04 2.45068E02 3.19740E03 8.03581E03 6.51431E03 1.64386E03 6.15550E03 1.86635E03 5.63332E03 1.01704E02 9.64047E02 2.83250E03 1.76749E03 1.35911E03 1.48784E04 4.10840E04 1.64969E04 1.71726E02 7.23745E02 1.11183E03 3.67919E02 7.94858E01 3.59776E03 5.46228E03 6.32419E03 6.60542E03 6.13160E03 5.36831E01 3.12280E03 1.86780E02 5.41248E03 1.10658E03 3.46847E03 2.25354E03 1.24182E02 1.85482E03 1.65548E04 4.95381E03 1.30349E04 5.70439E03 2.26014E03 6.86630E03 1.73351E04 1.03609E04 6.62813E03 1.20246E03 2.21344E03 1.29301E04 2.15562E04 1.13091E04 1.93600E03 1.11877E04 1.05821E04 2.95356E03 3.82591E03 3.70729E04 3.70678E04 2.65344E04 3.95347E04 1.40390E04 5.67004E01 7.60813E03 3.20231E04 2.15626E04 1.45103E03 8.43627E02 1.54613E03 6.00496E03 6.46998E03 -Frame 257 1.83924E05 1.29811E05 1.98201E05 2.32673E06 2.70363E06 2.88486E05 1.49798E06 8.19580E06 5.56553E06 9.21390E04 1.13135E07 1.79140E07 4.28204E06 1.19627E07 4.68266E07 2.44562E07 1.20701E06 7.20819E05 3.21412E06 1.05513E06 1.09085E05 2.90686E06 3.82695E06 5.54424E05 7.80527E05 4.05709E06 2.41688E06 2.49094E05 1.65276E06 2.69874E06 6.98173E05 1.44869E06 1.34378E07 1.93029E07 6.83956E06 3.49940E06 8.41973E06 5.81546E06 4.22570E05 6.07224E05 1.32842E06 2.39877E05 2.21460E04 4.56617E05 4.04380E05 1.74462E04 2.00561E05 5.24952E05 1.30649E05 2.15535E04 1.58808E05 1.19768E05 9.90783E04 3.49881E05 6.46288E05 2.62867E05 1.51222E04 2.08623E05 4.25318E05 1.20963E05 5.14682E04 4.21669E05 2.71910E05 4.07385E03 1.07533E05 4.72601E05 2.37043E05 9.76945E03 1.01948E05 1.47248E05 7.85126E03 1.12210E05 3.99293E05 2.53175E05 4.92163E03 3.17621E05 8.67011E05 1.78836E05 1.41748E05 1.64862E06 1.77700E06 2.28802E04 1.59601E06 3.21413E06 8.86978E05 4.59310E04 5.01497E05 6.41928E05 3.66065E04 1.01020E05 3.15279E05 1.65412E05 6.88145E03 8.21134E04 1.66203E05 2.67570E04 1.40641E04 1.11407E05 1.12249E05 4.16590E03 4.65383E04 2.17439E05 1.19845E05 9.20298E03 1.06888E05 3.26915E05 1.07241E05 4.88830E04 3.09853E05 2.56009E05 3.10614E04 2.93568E04 2.89341E05 1.76879E05 3.15543E04 4.03678E05 9.49819E05 3.24248E05 1.80645E04 4.13017E05 2.06110E05 1.09135E04 5.41655E03 2.00086E04 1.56856E04 1.04432E03 8.04305E03 2.28803E04 6.02812E03 3.95788E03 9.06397E03 3.00796E04 3.69582E04 6.69517E04 8.30681E04 6.02865E04 4.14025E03 8.75981E04 8.74019E04 3.75790E04 7.73260E04 9.01830E04 2.10559E04 1.01179E04 1.74408E03 6.22822E03 6.31515E02 5.16222E02 2.57126E03 1.61760E03 2.14322E03 7.51836E03 6.76708E03 1.25699E03 4.13367E03 3.94206E02 5.76277E03 4.60849E03 1.43470E03 1.26675E03 4.71273E03 6.76359E03 1.57009E04 2.58596E04 1.95677E04 4.87550E04 1.04403E05 3.85984E04 1.89127E03 2.02705E04 6.27634E04 5.29131E04 6.47418E04 1.14611E05 3.60888E04 1.39199E04 3.64351E04 1.61958E04 4.70900E04 1.43187E05 1.45148E05 5.89534E04 5.16904E02 2.12934E04 1.03743E04 7.41617E03 1.64669E04 2.88046E04 2.80762E04 4.11009E03 1.74990E03 5.41656E03 5.20917E02 6.51329E03 1.61078E04 2.40093E04 1.73350E04 7.20726E03 7.57226E03 1.27937E04 1.66627E04 8.26172E03 1.77196E04 2.68531E04 5.52902E03 2.83460E03 2.93973E03 1.84274E03 6.77795E02 1.84128E03 6.19142E03 7.80283E03 9.29538E03 7.84040E03 8.58694E03 9.43449E02 5.59684E03 1.27014E04 1.39376E02 2.26399E04 5.48834E04 2.59021E04 7.11504E03 4.01589E04 5.69218E04 7.52922E03 2.20787E04 1.60103E04 9.77746E03 8.42414E03 4.34985E03 8.74530E03 1.41497E04 2.60003E03 2.01726E03 1.06352E04 2.18372E03 3.18807E03 7.87819E02 1.82994E04 6.75385E03 6.76753E03 2.48309E04 8.25689E02 3.27215E04 1.34732E04 2.94421E04 1.71136E04 2.17295E03 1.66863E02 9.23853E02 5.71338E02 9.96827E02 5.55660E02 2.06488E03 9.60483E02 5.56869E02 -Frame 257 7.21082E04 4.25182E04 5.27489E04 2.91865E06 3.83868E06 8.61794E05 1.29893E06 8.90154E06 5.67625E06 8.25173E04 1.61651E07 2.83165E07 7.32969E06 4.37754E06 2.45647E07 1.55716E07 1.07389E06 5.28998E05 2.13245E06 1.21940E06 1.07220E04 2.12387E06 3.30597E06 7.11506E05 2.27412E05 1.93446E06 1.24561E06 5.05186E04 5.89112E05 1.83165E06 9.33565E05 1.73133E05 2.64500E06 2.63775E06 2.47620E05 1.62112E05 3.67355E06 8.96092E06 5.65002E06 9.05801E05 1.23102E06 1.69214E06 7.95161E05 2.05686E06 2.86046E06 5.52904E05 4.27039E05 1.39021E06 8.01907E05 1.78510E05 2.29052E05 2.62030E05 8.19808E04 4.80525E04 3.91441E05 3.28974E05 2.94557E04 1.56784E05 3.94494E05 1.37632E05 2.45491E04 4.01566E05 5.03325E05 1.15907E05 6.11387E04 5.02805E05 3.47140E05 4.61109E04 1.64411E05 4.35465E05 2.14430E05 3.01278E04 6.54125E05 9.04950E05 1.64550E05 7.97110E05 3.09191E06 1.79451E06 1.50779E05 4.32356E06 6.87673E06 1.76362E06 1.79457E06 5.44618E06 2.76105E06 3.20600E05 3.27384E05 1.01567E06 4.58029E05 5.66632E03 2.97140E05 3.62029E05 8.54816E04 3.36392E04 2.48417E05 2.13835E05 5.30132E04 1.80882E05 4.59299E05 2.06059E05 9.66517E03 1.95878E05 3.00745E05 2.67806E04 1.40892E05 5.55807E05 2.50781E05 4.18471E03 2.11755E05 4.59350E05 1.50589E05 6.06020E04 6.54833E05 9.17779E05 2.76263E05 4.70399E05 2.94029E06 1.91630E06 1.09885E05 5.19338E05 7.51673E05 1.48199E05 4.57232E03 2.78854E04 4.22133E03 3.50413E03 1.39172E04 7.54056E03 1.25423E04 9.22677E04 1.21674E05 4.75448E04 1.01797E05 9.42397E04 2.77875E05 1.91800E05 5.36134E03 1.30304E05 2.37030E05 1.05160E05 2.28612E04 1.54905E04 5.95219E04 2.22542E04 5.70509E01 2.46191E03 4.17778E03 2.06987E03 3.55845E03 5.14871E02 6.24987E03 6.13330E03 9.14786E03 1.60600E04 1.16156E04 2.02710E03 6.68129E03 3.38414E03 3.49446E02 8.56978E01 1.90133E03 5.49509E03 1.51774E04 4.21183E04 2.05839E04 1.24529E04 1.02258E05 2.53982E05 6.60368E04 2.14365E04 1.57662E05 1.03217E05 6.56416E04 1.93973E04 1.77019E05 3.81234E05 2.57935E05 6.67273E04 1.77511E03 1.13955E05 4.36538E04 5.89200E03 3.20822E04 3.00742E04 3.49841E03 1.81102E04 2.53021E04 3.60205E03 2.61717E04 6.77495E03 3.27644E03 5.54290E03 5.82353E03 8.03715E03 5.19969E03 4.80173E02 2.62120E03 3.58349E03 3.06997E03 6.14692E02 2.06556E03 9.43768E03 3.92834E03 7.18597E03 3.65462E03 1.55664E03 1.69785E03 3.58736E03 6.33008E02 2.92344E03 8.27678E03 1.47836E03 8.75150E03 9.97336E03 1.00728E04 5.33887E03 9.50504E03 3.09053E04 5.15242E04 5.31083E04 2.82606E04 1.19288E05 2.10370E05 1.37071E05 9.68935E04 1.11420E05 6.97392E04 7.16090E03 2.63016E04 2.06491E04 3.95073E03 1.14057E04 1.31648E04 8.30465E02 1.34881E04 3.45529E04 2.55539E04 3.32764E03 7.39342E03 1.94942E04 2.04774E04 8.18692E03 3.83183E04 1.11521E05 7.24310E04 2.23264E04 6.65782E04 5.41259E04 1.36359E04 1.39643E04 1.33382E04 5.27105E03 1.12440E03 4.36427E01 3.17619E02 5.83192E02 1.32242E03 -Frame 257 1.34601E05 1.18664E05 4.87596E05 4.41064E06 6.46198E06 1.38095E06 2.32355E06 7.89621E06 4.85335E06 6.12363E05 2.08258E07 2.89757E07 5.83972E06 2.35290E06 1.03307E07 5.70389E06 1.16140E05 8.04109E05 1.16244E06 4.56521E05 1.01388E05 1.71164E06 2.06885E06 2.65193E05 4.56472E05 1.15275E06 4.47448E05 1.61264E03 4.05956E05 5.84123E05 1.57304E05 2.42149E05 1.01693E06 4.57487E05 6.31782E03 3.42834E05 7.31072E05 3.42793E05 7.26160E05 1.69615E06 2.08302E06 1.98805E06 1.08267E06 4.49652E06 9.86544E06 6.35752E06 9.93377E05 4.34841E06 4.58425E06 1.31026E06 3.23064E06 2.92356E06 9.37333E05 3.17180E05 7.18884E05 3.96954E05 8.52956E04 5.26132E05 5.14640E05 6.63408E04 1.39264E05 5.13840E05 2.94529E05 4.66933E04 4.72848E05 5.73858E05 1.32642E05 1.26442E05 6.22885E05 5.69608E05 1.02705E05 7.43543E05 1.43493E06 2.91946E05 7.72455E05 3.31947E06 1.96956E06 3.63187E05 3.22265E06 5.83610E06 3.48927E06 1.01154E06 1.39518E06 2.44823E06 1.27467E06 3.49833E04 1.39967E06 1.32872E06 1.34147E05 6.56450E05 8.84090E05 2.79211E05 5.17155E04 2.91111E05 2.11792E05 7.42934E01 2.59333E05 4.52193E05 1.27666E05 3.29697E04 1.91169E05 2.34294E05 4.52581E04 4.69627E04 2.36838E05 2.78289E05 5.14491E04 1.35482E05 3.52282E05 1.73380E05 3.32930E02 3.35795E05 1.37021E06 2.31450E05 8.75571E05 3.81590E06 3.20526E06 1.38700E05 2.68286E06 3.14914E06 1.09331E06 8.93127E04 4.08437E05 1.04534E05 9.64928E03 3.47819E04 1.26830E04 1.28004E04 2.85863E04 1.24905E05 1.83724E05 1.97546E04 2.30286E05 2.65060E05 6.96709E04 1.16288E05 4.72832E05 1.67431E05 1.03651E05 1.03058E05 1.69550E05 1.23043E04 2.82661E04 9.72257E03 2.72210E04 8.49962E01 5.95199E03 5.47191E03 3.50576E03 1.02316E04 3.53209E02 2.16368E04 8.51967E03 1.23084E04 2.14868E03 2.80746E03 2.71061E03 9.10622E03 3.08253E03 4.27466E03 1.56028E03 1.49576E04 3.30625E04 5.19746E04 2.65458E05 3.78133E05 3.01378E05 1.22577E05 2.06668E05 1.77184E05 1.11921E05 1.74795E03 1.16494E05 8.26945E03 1.31900E05 4.47003E05 4.28389E05 8.94653E04 1.75872E05 2.60111E05 2.93587E05 8.44324E04 4.33714E04 1.23048E05 1.41788E05 4.47557E04 1.45341E04 1.09921E05 1.80225E05 1.04494E05 3.56817E04 8.56928E03 1.08126E03 1.20498E03 1.21145E03 8.41266E02 3.49786E03 5.40943E02 2.53433E02 8.07513E03 5.73160E03 2.11720E03 5.92816E03 1.95472E04 1.98538E04 1.37109E04 1.35790E04 2.97414E04 3.11445E04 1.37441E04 5.51632E03 3.01539E04 5.72919E04 4.46817E04 1.91356E04 3.70236E04 6.73607E04 6.91107E04 4.91660E04 1.87928E05 3.33645E05 1.87942E05 1.47771E05 4.10785E05 3.50110E05 1.05572E05 1.51366E04 4.37110E04 2.87449E04 1.08967E04 4.35918E03 9.60116E03 1.32244E03 1.51350E04 1.16158E04 1.44131E03 1.90541E04 4.14994E04 1.47665E04 5.27673E03 1.49201E04 5.21593E03 2.74689E04 1.29898E05 1.20946E05 3.67990E04 2.27195E04 1.00190E05 2.90318E04 8.04410E03 4.80587E04 3.78780E04 4.83342E03 5.63127E02 1.36943E02 6.63982E02 4.61635E03 -Frame 257 1.00766E05 1.15987E04 3.51647E05 3.42553E06 4.40185E06 7.04650E05 9.06180E05 2.26273E06 1.07192E06 1.93670E06 8.43111E06 7.80980E06 4.21066E06 3.08657E06 2.24060E06 7.80094E05 7.42432E04 3.51598E05 1.30239E05 6.22027E03 2.37760E05 3.70195E05 5.43219E05 2.01356E05 3.24200E05 2.29468E05 6.45999E04 5.95233E04 3.24966E04 2.98860E04 4.57249E04 1.92091E05 2.85555E05 1.29584E05 3.05380E03 1.67035E05 1.36132E05 1.01468E03 5.96570E04 9.62115E04 1.66641E04 9.23824E04 2.81175E05 6.70210E05 1.13794E06 2.76488E06 3.78131E06 4.77395E06 4.24464E06 3.60764E06 1.70618E06 1.12098E06 8.30132E05 2.13695E04 2.00606E05 5.31736E05 1.27440E05 1.59845E05 2.22845E05 5.96878E04 2.02751E04 4.24519E05 1.93479E05 7.46781E04 6.67423E04 1.14989E05 1.98645E02 1.93558E05 7.66117E04 7.78064E04 1.75911E05 3.32891E05 3.06351E05 7.52025E05 4.59795E05 6.34464E05 2.74337E05 4.89660E05 2.35372E05 1.56993E05 1.22311E05 2.52365E05 9.73613E04 3.15460E04 1.16177E05 4.17241E05 4.68339E05 6.52498E05 5.44632E05 2.68672E05 1.72856E05 1.92745E05 7.04153E04 8.71415E03 7.98990E04 4.89766E04 3.36664E04 5.94598E04 4.25122E04 6.95711E03 1.59579E04 5.39355E04 8.18777E04 8.95360E04 2.90822E05 4.31940E05 2.97618E05 2.88700E05 6.06737E05 5.89561E05 3.03122E05 9.42676E05 1.82135E06 1.64144E06 5.19306E05 6.58039E05 4.65442E06 5.52528E06 3.03613E06 9.80963E04 2.12309E06 3.86548E06 1.64190E06 2.58515E05 6.20583E04 6.12935E04 2.94685E04 1.36780E05 3.73172E05 1.99458E05 1.23512E05 3.70845E05 1.02938E06 8.99988E05 3.96944E05 5.44735E05 1.23172E06 1.50298E06 7.70827E05 4.51579E05 9.48378E05 1.56005E06 8.96889E05 2.90552E05 2.69742E05 4.25594E05 2.88350E05 3.87976E04 4.04665E04 1.64324E05 2.46798E05 1.28578E05 9.09586E04 2.12703E05 2.50060E05 1.24816E05 2.29297E04 3.21716E04 1.01151E05 6.71824E04 3.57973E04 2.98866E05 3.84372E05 5.12202E04 8.86689E04 6.77533E04 2.46996E05 3.30136E04 7.42760E04 1.12491E05 1.20289E05 7.29773E05 1.51608E06 1.26694E06 5.17910E05 5.10580E05 6.17517E05 4.89290E05 2.14177E05 1.98878E05 5.36335E05 4.26357E05 1.94638E05 1.69891E05 8.97343E04 2.99336E04 1.11238E05 9.82290E04 6.06316E04 2.50082E04 3.88671E03 3.09620E02 9.32728E03 1.29341E04 7.39147E03 5.24685E03 1.64253E04 2.18208E04 1.81083E04 2.31086E04 4.15296E04 3.19669E04 2.19380E04 4.89000E04 6.46592E04 2.57604E04 4.20795E04 8.23545E04 5.14731E04 1.53802E04 5.86181E04 1.06716E05 5.87210E04 1.66043E04 8.08351E04 1.25048E05 8.82974E04 2.49534E04 4.54741E04 2.97310E05 5.69459E05 5.10405E05 3.21645E05 4.23146E05 5.88954E05 4.97510E05 3.28491E05 1.51973E05 7.91767E04 7.65038E04 1.04450E05 1.55196E05 1.25117E05 8.66842E04 8.44163E04 1.49426E05 1.67792E05 7.40460E04 1.50338E04 3.36424E04 5.70675E04 3.33147E04 1.83759E04 1.84464E04 4.51161E04 3.17471E04 6.22576E04 1.19728E05 1.47937E05 2.66306E04 1.12712E04 5.90403E04 9.52853E04 3.86290E04 2.22089E04 5.19921E04 9.60245E04 -Frame 257 3.42389E05 7.32032E05 7.70945E05 4.13249E05 1.69039E05 2.21303E05 2.51480E05 2.51545E04 1.26056E05 1.99089E05 4.72164E05 2.63173E05 3.00978E04 1.45180E04 3.08825E03 7.96415E04 1.30639E05 3.14030E04 7.41774E03 7.76362E04 1.94390E05 2.86329E05 4.59857E05 4.65944E05 2.34249E05 1.47045E05 1.48604E05 1.72437E05 1.47902E05 9.95807E04 8.48576E04 5.05096E04 3.94247E03 2.95389E02 4.19905E04 1.84532E05 1.50955E05 3.38008E04 9.43248E03 2.49806E04 4.37801E04 4.83738E04 9.45693E04 1.11035E05 1.04673E05 5.18751E04 4.02382E04 8.64078E04 6.96663E04 1.06620E05 2.13812E05 2.26481E05 2.32652E05 1.40002E05 5.01712E04 3.07864E05 4.65393E05 4.04654E05 2.91468E05 1.80197E05 3.49271E05 5.44453E05 5.30402E05 3.51645E05 2.40904E05 3.28167E05 4.11515E05 3.92993E05 2.73480E05 1.66518E05 1.98259E05 2.29597E05 3.05833E05 3.32865E05 2.51108E05 2.34170E05 2.41110E05 2.45362E05 2.08340E05 1.37974E05 1.28085E05 7.73194E04 2.69871E04 1.01231E04 3.33846E04 4.44898E04 2.33427E04 2.34083E04 1.74224E04 2.16964E03 1.56113E04 1.47904E04 4.51390E03 1.71234E03 1.64609E04 4.82344E03 2.17415E03 3.51955E03 1.71807E03 3.17403E03 1.11434E04 1.87521E03 3.30015E04 1.11510E05 8.94841E04 3.17320E04 4.67912E04 3.43358E05 3.83139E05 1.26363E05 2.57331E04 2.37771E05 2.19238E05 5.07679E03 2.94581E05 1.08861E06 1.11534E06 3.60816E05 6.08599E04 7.96910E05 1.72044E06 1.50789E06 6.41675E05 5.73818E04 8.54536E04 1.27830E05 1.27948E05 2.96140E05 5.66919E05 7.36324E05 3.60819E05 3.36177E05 1.25303E06 1.84480E06 1.13233E06 3.49850E05 8.64834E05 1.94386E06 1.57661E06 5.01262E05 1.06759E06 2.07337E06 1.87473E06 8.01474E05 7.20296E05 1.20381E06 1.04382E06 5.99693E05 4.57887E05 6.27054E05 6.60844E05 3.83961E05 3.84980E05 8.14933E05 1.04461E06 9.37918E05 6.41453E05 6.19245E05 7.42817E05 6.96712E05 7.78680E05 1.24339E06 1.36045E06 9.97052E05 1.03033E06 1.24960E06 1.05399E06 7.29845E05 4.21106E05 1.28270E05 1.40095E05 7.05447E05 1.12319E06 1.09412E06 5.77740E05 5.54768E04 1.25380E05 3.61315E05 2.43177E05 3.02416E04 2.34616E05 3.84167E05 2.53387E05 5.61567E04 1.91124E04 5.07641E04 7.17458E04 6.61017E04 5.66129E04 7.14613E04 7.97133E04 6.74176E04 7.64240E04 4.70284E04 1.47191E04 1.50764E04 3.19312E04 3.30106E04 2.46847E04 1.29830E04 3.60866E04 3.60477E04 1.01869E04 1.69661E03 1.70224E04 6.05042E03 1.42693E04 4.01073E03 4.70399E03 1.40891E03 1.03366E04 1.47670E04 2.87714E03 9.20565E03 4.07527E04 1.33265E04 4.33862E03 1.38145E04 7.74423E03 3.66094E03 1.61683E04 1.02291E04 5.48836E03 1.09808E04 6.82020E03 2.93966E03 2.31345E04 8.85520E04 6.63160E04 9.21952E03 5.21471E04 9.67977E04 7.03486E04 1.17531E04 1.15468E05 2.30726E05 1.14087E05 2.13839E04 3.94934E04 7.00976E04 4.74294E04 1.76293E04 2.94606E04 3.93662E04 5.95734E04 5.42831E04 4.71601E04 9.23625E04 1.79899E05 1.67150E05 5.83903E04 1.01328E05 1.31693E05 7.83398E04 3.45025E04 9.10730E04 1.72185E05 -Frame 257 3.50752E06 2.25947E06 4.96518E05 5.56688E04 1.60235E04 1.87626E04 2.06208E04 1.28235E04 8.65818E03 1.58450E04 4.96530E04 3.61684E04 4.53623E03 2.50085E03 5.10655E03 7.12550E02 4.77052E03 2.08515E03 2.64930E02 1.37417E04 2.08663E04 4.91658E04 1.65225E05 6.48606E04 5.63591E04 9.32334E04 6.93679E03 1.21694E04 2.76963E02 1.36959E04 8.80365E03 8.99929E03 5.11279E04 5.06355E04 9.86076E03 2.07225E04 5.16943E04 1.02298E04 1.69001E03 1.46820E03 4.44732E03 3.07499E03 1.44415E04 1.43374E04 2.03928E03 1.07877E03 5.30633E03 2.68546E03 2.71840E04 1.91348E04 1.88650E01 3.45557E03 1.40448E04 1.18637E03 2.76672E04 4.90661E04 8.42837E03 1.09801E04 7.86305E03 3.09114E04 9.28542E02 2.65605E04 3.07520E04 2.52666E04 1.18117E03 2.40516E04 1.45425E04 5.77379E03 3.25527E04 2.07921E04 2.84969E03 4.14113E03 1.24773E04 2.23401E04 5.35393E03 5.79030E03 2.64896E03 1.85193E04 1.60311E04 3.23743E04 1.85118E04 3.60960E03 5.15558E03 2.01206E03 6.21611E03 1.83007E04 8.27632E03 5.64166E03 7.27324E02 1.75890E03 7.78691E03 5.38898E03 3.36916E03 1.21766E04 1.17162E04 2.26444E03 1.09768E03 2.82587E03 1.22198E03 2.52680E03 4.77593E03 2.85279E02 2.32229E03 6.71513E03 6.72114E03 1.34688E04 2.26230E04 1.21406E04 4.20164E02 1.67579E03 5.06261E03 3.75055E03 9.03923E03 1.58389E03 1.27876E04 1.08518E04 1.54369E04 1.46605E03 4.91090E03 3.07324E04 2.26324E04 3.65343E03 5.88237E03 5.01653E03 1.32430E04 3.87908E03 2.71067E04 1.00958E04 3.77576E04 6.86275E04 8.98852E03 2.06572E04 3.26514E04 4.04839E04 3.77279E04 3.99362E04 1.19035E04 2.56772E04 1.28119E05 1.11612E05 8.41031E03 4.39512E04 2.79940E04 6.40762E04 3.11445E04 4.18428E04 1.61885E04 5.55590E04 4.52149E03 2.88413E04 2.01824E04 9.09246E03 4.41434E04 3.15909E04 1.04459E04 2.03013E04 8.26019E04 3.78820E04 1.86824E04 3.56049E04 6.00320E04 9.01935E04 5.35410E04 3.50114E04 5.26265E04 8.45507E04 3.64926E04 1.17733E03 2.84070E04 8.07551E03 4.02221E04 2.15036E04 7.21756E01 2.69118E02 2.33019E04 3.35727E04 2.44369E03 2.47290E04 1.04639E04 1.61255E04 1.44385E04 2.93152E03 5.14998E03 6.58963E03 1.91651E03 3.55423E03 1.82751E04 8.01899E02 6.63239E03 1.20546E03 7.54567E03 1.14935E04 2.19870E03 2.00678E04 8.89005E03 1.05140E04 3.28703E03 2.24157E03 3.45328E03 3.15468E03 3.09933E03 3.27912E03 1.15768E03 7.11131E03 9.40379E03 1.06059E04 5.05303E03 6.50557E02 3.76379E02 3.44358E03 4.45026E03 5.58538E02 2.38858E02 4.09899E03 9.19618E03 6.39973E03 1.67726E03 1.05455E03 1.16763E03 2.80134E03 2.50833E03 6.87633E03 7.61862E03 3.30140E03 8.21332E02 1.38375E03 2.47465E03 3.74987E03 5.91971E02 3.52087E03 5.10039E02 1.70948E03 3.15181E03 4.43346E03 4.71048E03 1.24302E04 5.75602E03 3.56174E03 4.07728E03 1.18140E02 7.08041E03 4.78674E03 2.85433E02 4.79435E02 7.80257E03 1.12409E04 1.09997E03 9.48904E03 4.06640E03 1.01489E04 1.21821E04 1.51799E04 4.22992E03 9.59850E02 4.15008E03 4.65495E03 6.65449E03 -Frame 257 2.75456E04 8.41819E05 2.11567E05 1.87024E04 2.06640E03 2.35721E02 8.78569E02 3.25296E02 9.66452E02 3.86393E02 9.92017E02 1.23352E04 3.80407E03 2.55815E03 5.06756E03 8.20121E02 6.80678E02 7.39054E02 2.57622E03 1.60467E03 4.48698E03 3.80882E04 3.01732E04 6.67800E02 7.19169E03 3.62776E04 3.44494E04 3.55679E03 6.52304E03 1.05236E04 3.46760E02 9.47179E03 4.87372E04 6.24724E04 6.70751E03 1.01563E04 2.15574E04 8.72710E03 3.10846E02 5.16589E02 2.54854E03 2.17476E03 2.51795E03 2.78420E04 3.51179E04 1.34091E04 3.98045E03 3.54073E02 1.09915E04 1.71809E04 1.31989E04 6.54133E03 4.54011E02 1.94033E03 1.94375E03 1.39483E02 8.22461E03 7.83800E03 4.82458E02 5.28679E03 7.77269E03 5.76750E02 6.71650E03 1.62726E04 1.50795E04 5.51754E03 6.09957E03 1.00642E04 3.27677E03 1.15661E01 1.47261E02 3.73368E01 9.22437E01 3.77290E02 2.91928E03 3.56989E03 2.21301E03 2.07957E02 2.50128E02 1.61910E03 4.30572E03 2.23306E03 8.10297E03 6.14008E03 1.69966E03 1.36575E03 9.17517E03 1.12155E04 4.99755E03 2.69290E03 5.22783E03 4.67125E02 7.05215E02 1.15623E03 2.20784E03 4.50969E03 1.19349E03 2.82708E02 7.08265E02 5.42275E02 3.76011E03 3.87150E03 1.73236E03 1.61109E03 2.40047E03 4.97741E03 4.20365E03 8.13088E03 7.86877E03 5.18038E02 1.59961E03 5.54286E03 2.75763E03 1.60448E03 6.15576E03 6.76781E03 5.50511E03 3.01979E03 1.01209E03 3.70000E02 6.30490E02 3.88872E02 7.95986E01 1.14177E03 4.14369E03 9.18583E03 2.98947E03 1.20566E03 8.84006E03 5.31693E03 3.82008E02 1.14669E03 5.32524E00 2.34178E01 7.83673E02 4.15829E03 5.42778E03 1.21851E04 9.38073E03 3.76960E03 1.41688E04 6.64558E03 3.61435E03 3.46908E03 2.11031E03 2.73635E02 1.31388E04 1.35913E04 6.18696E01 1.29990E03 2.75714E03 2.56161E03 1.01162E02 1.62291E02 4.20522E02 5.98289E03 7.15496E03 3.38424E03 1.16147E04 1.24758E04 2.58784E04 3.03866E04 9.05337E03 2.51410E02 4.64140E03 3.34929E03 2.01477E03 5.57877E03 1.50548E04 6.34627E03 1.38489E03 4.20629E03 1.09266E03 4.30655E02 1.94465E03 5.60008E03 1.59659E03 6.00932E02 1.61473E03 7.11948E03 1.35428E04 1.20542E04 6.62234E03 7.89544E03 1.29278E04 2.39324E04 1.73894E04 4.91246E03 2.40096E03 4.95395E02 2.07423E03 4.62841E03 1.11228E04 8.41953E03 2.15722E02 8.20260E03 8.53968E03 4.71575E03 2.76331E03 3.75046E03 5.48944E03 7.47646E03 8.92152E03 4.27687E03 2.91864E03 6.37502E03 2.66061E03 1.56862E02 3.74807E02 1.66737E03 1.87018E03 1.16303E03 6.93093E02 1.34244E02 7.20745E02 6.40270E01 4.69057E02 2.04283E03 1.36356E03 1.50552E03 1.30730E03 4.61396E03 3.36598E03 2.36795E01 6.53186E01 3.24477E03 9.14089E03 5.87855E03 1.65669E03 3.52166E03 4.72439E03 5.60160E03 4.30281E03 1.37169E03 1.76173E03 2.94329E03 1.29028E03 1.88424E02 7.77064E02 2.98440E03 1.28289E03 5.83173E01 3.17844E01 4.90944E01 1.67995E03 4.58936E03 1.64665E03 2.84964E03 4.40272E03 5.37905E03 5.87786E03 2.77800E03 5.46458E02 3.82309E02 3.52928E02 5.06895E01 1.60990E01 -Frame 257 3.42235E06 1.45867E06 7.37312E04 1.79726E03 9.33941E02 2.26954E02 7.27416E02 8.27213E02 1.25782E03 7.42879E02 3.83543E03 5.28321E03 2.25877E03 1.18007E03 1.91522E03 9.78948E02 6.43162E02 3.29942E03 8.33748E03 5.43082E03 6.36282E03 1.35970E04 1.71825E04 4.19316E03 1.07255E03 1.14687E04 1.45848E04 2.42667E03 4.69193E03 1.27949E04 5.67608E03 1.23776E03 1.46141E04 2.72360E04 1.64124E04 3.07067E03 5.90964E03 1.29275E04 4.18970E03 3.74872E03 4.33991E03 2.44845E03 7.42593E03 2.57178E04 1.89186E04 4.68452E03 8.99494E02 3.89765E03 1.16733E04 4.16348E03 1.30731E04 1.05828E04 2.77862E03 7.60527E03 8.29554E03 6.24505E03 6.60452E03 8.13634E03 6.52106E03 2.30937E03 1.58679E03 9.57702E03 4.96533E03 5.15622E03 1.29432E04 9.98829E03 1.06503E04 4.20765E03 9.31470E02 2.89026E02 4.56423E01 4.08395E01 5.31905E01 6.33383E02 2.28581E03 1.03555E03 4.36484E03 3.76739E03 1.16632E03 2.29185E03 3.08929E03 1.97302E02 2.78784E03 1.27983E04 1.28801E04 2.93326E03 1.93895E03 4.47228E03 1.07283E03 5.75854E03 6.24004E03 1.98939E03 8.98643E02 9.07215E02 1.29163E03 1.06580E03 6.14811E03 8.32539E03 2.16232E03 1.52083E02 8.37751E02 3.41840E02 2.53141E02 1.65450E03 2.89200E03 1.51458E03 5.27271E03 1.12890E04 5.73906E03 1.90839E03 2.39419E03 4.97459E03 8.22669E03 3.26265E03 8.85491E02 4.06121E03 1.51178E03 6.89521E03 4.57558E03 2.33586E03 1.71429E03 3.46257E02 8.47176E02 4.55026E02 8.84808E02 7.53865E02 2.27999E03 1.00498E03 4.23810E03 8.31301E03 4.14359E03 2.81394E03 1.95536E03 8.75099E02 1.32939E02 2.04088E03 2.05536E03 8.17950E03 1.52486E04 1.14967E04 2.95463E03 7.08394E01 1.07518E03 1.09408E03 1.82574E03 3.82521E03 1.44689E04 3.23831E04 2.73272E04 1.53915E04 6.37941E03 1.36604E03 1.48991E03 1.53255E03 4.29439E03 4.30207E03 3.53205E02 5.32775E03 8.76817E03 4.72163E03 5.84937E03 6.55262E03 1.59189E04 1.51372E04 5.17229E03 3.18590E03 3.26473E03 2.40647E03 6.59613E03 8.90963E03 7.22861E03 2.63473E03 3.15505E02 2.69967E02 2.23959E01 1.10675E03 6.75077E02 2.56423E02 1.09532E03 1.34926E03 1.04335E03 3.59434E03 4.29358E02 1.67582E03 3.42187E03 8.34937E03 4.64654E03 8.30359E02 2.72225E02 8.11785E02 2.09558E03 1.79053E03 3.78174E03 2.38803E03 1.07394E03 8.39483E03 3.57029E03 1.59113E03 4.51091E02 1.35723E03 1.02884E04 6.13845E03 1.62506E03 4.63193E03 1.08055E03 1.65641E03 3.65013E03 1.72328E03 9.14839E02 9.55284E02 1.52531E02 2.26885E02 1.74498E03 3.78031E03 6.33682E03 6.21046E03 6.05756E03 6.29175E03 3.55271E03 2.43937E03 2.14176E03 2.82406E03 3.22149E03 7.36617E02 4.20396E02 2.93818E03 8.64053E02 3.42008E03 6.09099E03 4.73800E02 5.23056E02 1.21393E02 3.49247E03 2.64949E03 1.06955E03 3.33413E03 3.46793E03 2.55007E03 1.12378E03 5.00817E02 6.21348E02 2.67410E02 9.16839E02 1.64077E03 6.23918E02 9.46141E02 4.60181E03 5.92144E03 2.42078E03 2.16375E03 2.03699E03 6.94983E02 6.57932E01 6.76430E01 3.64290E02 8.63558E02 8.94781E02 -Frame 257 3.66743E06 1.76960E06 1.40607E05 2.18519E03 1.25543E03 9.18730E02 7.33317E02 1.71044E03 1.14714E03 8.72862E02 6.46185E02 9.43954E02 1.58451E03 3.46924E03 8.20162E03 3.43251E03 9.39974E02 5.90324E02 1.19576E03 1.99276E03 1.45948E03 4.09471E02 3.20245E03 1.67547E03 5.92443E03 1.23470E04 4.21726E03 8.51429E01 3.15662E03 7.89735E03 2.17924E03 1.58973E03 1.22170E04 1.03750E04 3.40452E03 1.02489E04 1.65621E04 5.01449E03 1.90599E02 2.32584E02 1.30532E03 1.14495E03 1.44647E03 4.06905E03 2.02357E03 2.41082E02 5.66647E02 4.65643E03 2.04930E04 9.36447E03 4.44120E03 1.50255E04 6.53321E03 7.77998E03 1.81917E04 9.67885E03 2.98615E03 4.38431E02 2.64170E02 2.59255E03 4.46213E03 4.07959E03 1.09933E03 1.15181E03 6.55130E03 1.37287E03 1.44793E03 3.55417E03 3.69001E03 4.17793E03 3.57681E03 3.41885E03 2.86316E03 3.08692E03 9.44309E02 1.37878E03 9.88562E03 2.06195E04 1.61948E04 1.33446E04 6.31759E03 3.80498E02 2.47847E03 5.05628E03 6.55422E02 1.23035E03 1.50155E03 2.64710E03 6.22165E02 2.36512E03 5.77947E02 1.26854E03 1.95861E03 5.46735E03 9.21311E03 1.23616E04 1.96087E04 1.14291E04 3.22566E03 3.72428E02 5.69417E02 1.57652E02 2.97921E02 4.06829E01 4.49849E03 8.03079E03 2.28107E03 5.85904E01 1.14711E03 9.40161E02 1.39812E03 5.51526E03 7.63820E03 1.21577E03 7.30504E03 8.05213E03 2.41823E03 2.87048E03 1.12013E04 2.78347E03 4.24461E03 1.10682E04 9.83178E03 1.32347E04 1.64242E04 1.23406E04 5.16958E03 6.01985E03 5.55438E03 1.47134E02 2.53699E03 5.01287E03 1.33190E04 1.32215E04 5.42333E03 3.57217E02 2.35938E03 1.41430E03 2.10822E03 1.11554E03 9.26350E03 5.30435E03 3.20283E02 3.13939E03 8.35723E03 9.03724E03 1.26808E04 9.91001E02 1.57729E04 8.53927E03 2.47777E03 1.63591E04 1.53619E04 1.83545E04 2.60625E04 1.29235E04 1.64935E03 2.55352E03 4.53935E03 1.74292E03 1.82668E03 3.54320E03 2.29925E03 8.65991E02 7.58723E02 7.20715E03 5.30489E03 8.10053E02 8.68417E02 1.89122E03 3.66964E03 8.51491E03 6.83669E03 6.55340E03 6.11823E03 3.61885E03 5.93758E02 5.00980E01 5.76031E02 3.07547E03 7.31891E03 3.10143E03 3.02210E00 1.76191E02 7.07310E01 1.65879E03 2.71104E03 9.41779E02 1.83337E03 2.34807E03 3.46767E03 1.96033E03 1.90979E03 1.72925E03 1.58976E04 1.16152E04 2.06530E03 2.19501E03 5.32870E03 5.73144E03 3.26777E03 6.64083E02 8.29712E02 3.29049E03 1.16857E03 3.10926E01 4.38515E02 1.97970E03 2.20358E03 2.57505E03 2.55087E02 3.42715E02 9.18107E02 4.77449E02 1.82389E03 1.59087E03 2.23048E02 7.07394E02 1.07583E03 6.17159E02 1.60698E03 1.62850E03 9.92944E02 2.85804E02 4.71188E03 5.83330E03 3.21736E02 2.72841E03 3.09868E03 5.52713E02 7.38671E02 1.63896E03 3.30409E03 3.48934E03 3.17251E03 3.38151E03 1.69057E03 2.29602E03 1.95172E03 8.41238E02 6.00769E02 1.24604E02 2.61830E03 2.27992E03 4.46553E02 1.68705E03 1.02168E03 3.49835E03 2.99282E03 2.03953E02 3.01555E01 1.34968E02 5.18127E01 2.31332E01 7.47009E01 6.48771E02 2.13042E03 -Frame 257 1.43430E05 4.01579E05 1.13531E05 1.36715E04 9.44222E02 8.77377E02 1.02977E03 4.18672E03 2.32724E03 2.14649E03 2.79447E03 2.33129E03 8.23144E02 7.72634E03 3.44139E03 1.17140E03 1.75547E03 1.40486E03 4.48292E02 4.60316E03 1.29154E04 1.31790E03 5.82922E03 1.45218E04 1.37064E04 1.45090E03 1.05303E04 7.17343E03 3.85131E03 4.20846E03 1.27876E04 3.82598E03 1.02484E04 4.23101E04 2.00255E04 8.49588E03 2.54683E03 8.63197E03 4.90608E03 1.62500E04 1.21487E04 6.14633E03 7.03466E03 2.86324E03 1.36022E04 1.34961E04 2.97262E03 1.04011E04 4.38283E04 6.51723E03 2.60786E04 5.22904E04 9.43361E03 5.99947E03 2.58141E04 6.72794E02 1.75772E04 1.01752E04 3.26754E03 1.04193E04 1.55111E04 2.21005E04 1.05274E04 2.74204E04 2.51123E04 2.49858E03 1.54779E04 2.36375E04 3.72538E04 5.22057E02 2.64040E04 1.26409E04 1.66801E04 2.82759E04 1.12410E04 1.66940E04 1.33364E04 4.61457E04 2.94313E03 3.85108E04 1.81029E04 1.45100E04 3.25640E03 1.18952E04 2.82947E04 2.38576E04 2.60479E04 4.06317E04 2.65205E04 1.33879E04 3.29592E04 1.92417E04 5.20264E04 3.75150E04 1.66773E04 4.58546E03 4.25083E04 4.79880E04 3.23177E04 2.32540E04 5.05345E04 3.92644E04 4.12187E04 7.79400E04 4.92267E04 4.30017E04 5.04830E04 4.80860E04 4.38540E04 3.28556E04 3.35275E04 8.43596E04 5.49852E04 5.78777E04 1.24219E05 7.93069E04 7.87793E04 5.40137E04 1.32262E05 1.42101E05 3.64643E04 6.44313E04 5.71933E04 4.75362E04 4.39355E04 1.21674E05 8.97709E04 1.38222E05 8.78773E04 1.50377E05 1.08662E05 1.52537E05 1.87759E05 2.10243E05 2.24765E05 1.13431E05 1.79120E05 2.13478E05 1.42475E05 1.27917E05 1.85400E05 1.23556E05 2.46187E05 2.62413E05 3.67637E05 3.66595E05 4.88266E05 2.79675E05 3.65418E05 3.74304E05 1.92662E05 2.96485E05 2.17569E05 4.14635E05 2.42258E05 3.87255E05 2.12378E05 1.53825E05 9.76840E04 1.41258E05 1.55273E05 3.06420E05 3.89550E05 3.73591E05 3.84026E05 3.43956E05 2.00368E05 1.36980E05 3.64398E04 1.58374E04 8.86085E04 1.51247E05 2.37369E05 2.98471E05 2.55348E05 1.46682E05 1.17391E05 9.87558E04 6.49894E04 4.95553E04 8.02503E04 5.20025E04 2.93151E04 3.44113E04 1.98306E04 1.74579E04 4.40329E04 3.19731E04 6.70548E04 5.69687E04 2.87275E04 7.28014E04 7.43161E04 3.02855E04 5.32308E03 5.84355E04 2.55054E04 5.45356E04 7.54535E04 1.51813E04 1.01175E03 5.98311E03 9.31816E03 1.01442E04 5.53762E04 3.91332E04 2.11187E04 4.22539E04 6.42302E03 5.07074E03 2.98291E03 2.53505E04 6.95906E03 1.76709E04 4.66938E04 3.00882E04 5.05236E03 2.09996E03 5.06973E03 2.41349E03 2.34224E04 1.23635E04 2.74747E04 1.56865E04 1.60436E04 3.38431E04 2.51315E03 5.82206E03 9.11207E03 3.94143E03 1.24392E03 5.76283E02 9.32763E03 1.98586E04 2.86903E04 2.35642E04 1.38347E04 1.80564E04 8.81043E03 9.69089E03 4.13555E03 4.41406E03 3.43533E03 3.34528E03 4.80724E03 8.66572E03 2.81689E04 1.39549E04 1.81554E03 7.73418E03 4.50444E03 1.52985E03 2.64170E03 1.52979E03 3.39849E03 6.26110E03 6.72405E02 -Frame 257 1.27689E06 6.33602E05 5.99947E04 3.86645E03 2.30619E02 9.58140E02 9.76290E01 3.14572E03 4.41190E03 9.65856E03 2.68383E04 2.52921E04 2.18040E04 1.78861E04 2.00192E04 2.35363E04 2.55840E04 3.07290E04 2.13614E04 1.41120E04 2.53787E04 2.28649E04 2.78041E04 4.84860E04 4.76581E04 3.48381E04 3.10022E04 4.25648E04 5.04538E04 4.44838E04 4.64411E04 5.27580E04 6.34487E04 5.70912E04 5.65199E04 5.28843E04 3.77515E04 4.01444E04 5.07305E04 6.30027E04 9.77356E04 1.08057E05 1.16827E05 1.20174E05 6.37350E04 5.12091E04 7.15061E04 8.22531E04 8.23478E04 9.11113E04 1.08342E05 1.08644E05 9.17111E04 6.68432E04 1.34552E05 1.42869E05 9.29077E04 6.20381E04 4.39736E04 5.80352E04 6.75764E04 1.55921E05 1.97411E05 2.38902E05 2.75717E05 2.05247E05 1.84596E05 1.91440E05 1.65222E05 1.69712E05 1.30970E05 1.16139E05 1.74657E05 1.46130E05 1.49700E05 1.80481E05 2.38321E05 2.48803E05 1.43359E05 1.20220E05 1.91763E05 1.82250E05 8.88837E04 8.46688E04 9.95350E04 2.18483E05 2.88899E05 3.49343E05 4.54828E05 2.92421E05 3.10494E05 3.06525E05 2.39151E05 2.10600E05 1.84600E05 1.63670E05 8.23091E04 3.53864E05 6.28545E05 5.09182E05 2.62035E05 5.33523E05 9.17569E05 6.83702E05 4.22960E05 8.42373E05 8.58451E05 2.91778E05 1.59352E05 8.92504E04 1.03513E06 1.72898E06 1.40168E06 1.27449E06 7.47167E05 1.26776E05 6.17938E05 3.71537E06 5.57538E06 4.09571E06 1.68838E06 2.31396E05 5.19648E05 2.53019E06 4.94818E06 2.07825E06 1.34289E05 1.10921E06 5.52111E05 1.71784E06 3.06116E06 4.28378E06 3.06679E06 2.09580E06 6.90296E05 1.55632E06 4.32929E06 3.23998E06 5.67324E06 4.11343E06 1.60363E06 8.02154E06 1.42335E07 6.81614E06 5.70446E05 1.23596E07 1.60595E07 2.03045E07 2.00247E07 4.52211E06 3.70064E06 6.65013E06 1.86719E07 2.91457E07 2.90135E07 2.88367E07 4.03577E07 7.63182E07 6.29345E07 1.28324E07 2.13539E06 1.01053E07 4.07343E07 7.86450E07 1.08367E08 1.23332E08 8.55619E07 3.21173E07 8.78443E06 1.31253E06 8.91110E05 3.61038E06 9.04829E06 1.90848E07 2.13519E07 1.04457E07 2.05631E06 2.16982E06 9.30774E06 1.39191E07 5.71694E06 1.49542E06 3.17025E06 1.88812E06 1.30445E06 4.15939E06 9.69480E06 1.08038E07 8.47273E06 5.60058E06 3.18274E06 4.22777E06 3.91211E06 6.55046E05 3.20969E03 1.51561E05 3.85172E06 1.13878E07 1.10312E07 3.96938E06 2.24658E06 6.71896E06 1.17809E07 1.06705E07 8.01191E06 1.21709E07 1.28658E07 6.97458E06 3.08287E06 2.60091E06 3.29199E06 3.52781E06 5.29823E06 7.04216E06 4.21090E06 1.50933E05 7.75340E05 9.63856E05 3.11750E05 5.86731E04 1.93531E06 5.78872E06 7.79034E06 6.97022E06 3.28623E06 8.93540E04 1.88883E06 7.34846E06 1.46027E07 1.52627E07 9.88564E06 5.70339E06 3.36900E06 2.66801E06 5.00777E06 1.67863E07 2.48743E07 1.60198E07 8.95302E06 1.72498E07 3.67009E07 6.55218E07 9.06078E07 8.95230E07 6.08697E07 3.78077E07 5.18427E07 9.15592E07 1.08719E08 9.05721E07 6.08632E07 3.71609E07 2.79272E07 3.65028E07 4.33781E07 2.63847E07 1.10813E07 -Frame 257 3.73233E06 1.64676E06 1.62381E05 9.58132E03 8.15857E02 2.91105E03 3.14182E03 1.71233E03 5.73116E02 2.27468E02 3.68532E03 7.11846E03 1.96294E03 3.80175E03 5.62308E03 1.06136E04 7.17476E03 1.31771E04 6.10389E03 3.07079E03 1.01759E04 8.28451E03 6.36462E03 6.89649E03 8.36564E02 3.97410E03 3.21132E02 1.00301E03 1.54151E04 7.17261E03 3.63193E03 3.67694E03 9.19897E03 1.21533E04 7.76389E03 1.08030E03 1.48052E03 5.73119E03 1.63894E04 1.15078E04 1.59336E04 7.12730E01 2.36290E03 3.62060E04 3.57601E04 2.60252E04 5.28344E03 6.98461E03 1.56958E03 1.40667E04 1.83322E04 1.19219E04 1.84652E04 1.34721E04 2.99752E04 4.49859E04 2.51681E03 6.56592E03 1.62217E04 3.68342E04 2.95248E04 4.25195E04 2.12537E04 2.48503E04 1.63505E05 7.41486E04 6.74779E04 1.36296E05 9.20896E04 9.90913E04 8.05440E03 6.25834E03 1.07841E05 7.32920E04 5.96392E04 2.73132E04 8.95942E04 9.50034E03 3.10326E04 9.23087E04 2.03195E05 3.00420E04 8.79626E03 7.23699E04 1.31205E05 1.21659E05 2.03275E04 2.43253E04 2.96116E05 2.03233E05 1.98572E05 8.04648E04 1.35042E04 1.46515E03 4.86725E03 2.61647E03 1.63740E05 4.90647E05 4.37658E05 7.94599E04 4.35300E04 1.51316E05 5.20745E05 4.66067E05 2.14291E05 6.16719E05 2.18759E05 1.78772E05 2.65197E05 3.68268E05 1.28270E06 1.84996E06 9.12001E05 1.87038E06 1.23113E06 4.72754E05 3.06136E06 8.78169E06 2.79513E06 7.20037E05 2.42169E06 4.28361E05 4.68020E05 1.30959E06 2.45121E07 6.34148E07 6.73456E07 4.15000E07 2.09366E07 1.44747E07 1.38849E07 9.21628E06 2.35759E07 2.95419E07 4.60404E07 5.58927E07 3.96729E07 1.84970E07 9.75057E05 2.47790E07 3.16155E07 1.21040E06 7.56459E07 1.25743E08 5.02129E07 3.19650E05 5.26493E06 2.85009E05 3.21361E07 9.36732E07 1.03195E08 9.98386E07 1.88186E08 1.58213E08 6.43044E07 1.38626E08 2.40562E08 6.64554E08 7.52024E08 3.52741E08 1.46467E08 1.21807E08 1.10015E08 3.53074E06 6.54684E07 8.69472E07 1.50103E08 1.56149E08 9.56083E07 1.68626E07 1.81505E06 2.88094E07 7.92000E07 2.09067E08 1.09039E08 2.06688E07 3.27515E07 4.27765E07 8.61720E06 4.64497E07 1.07834E08 1.07645E08 6.99789E07 4.61552E07 6.12722E07 1.49438E08 2.35165E08 1.49372E08 1.39899E08 1.22570E08 1.56991E07 1.00147E07 5.23668E07 4.24701E07 3.16867E07 3.79558E07 8.06244E07 1.70950E08 1.75163E08 8.26909E07 4.35389E07 5.03234E07 7.00204E07 1.18715E08 1.04594E08 2.91852E07 2.22231E07 7.99263E07 8.28331E07 9.89123E07 9.57624E07 8.73795E07 2.72964E08 3.38303E08 1.67816E08 6.38671E07 3.60538E07 4.71439E07 9.64425E07 1.42154E08 1.69499E08 1.27001E08 4.76667E07 4.67372E07 1.07361E08 1.11772E08 1.11211E08 1.66720E08 2.79534E08 3.63268E08 2.46444E08 5.41215E07 2.63819E07 2.06005E07 5.02880E07 1.98225E08 1.31595E08 5.86133E06 4.46113E06 1.53370E06 8.27827E07 3.56014E08 4.65508E08 1.55767E08 1.58437E07 5.21686E07 1.12757E07 2.15436E08 5.00487E08 2.68328E08 8.56360E06 4.15691E07 4.33509E07 5.59679E07 3.88327E08 5.91121E08 5.83207E08 -Frame 257 2.28354E06 8.03353E05 2.78056E04 1.18989E04 3.63152E03 4.40318E03 3.08392E03 3.78726E03 8.45977E01 1.56373E03 8.77106E03 1.66667E03 2.94408E03 1.16227E04 2.00373E03 1.00705E04 4.07751E03 7.43231E03 1.42787E03 1.66312E03 3.12229E03 1.67215E03 1.17222E04 1.10719E03 3.11635E02 1.24538E03 4.59709E03 6.31328E03 2.30362E04 3.42154E04 5.17967E03 2.40518E03 1.31701E02 1.62360E04 4.29790E03 2.98865E03 9.56452E03 1.42215E04 6.74467E03 2.61162E04 2.65151E04 7.05420E03 2.98892E04 3.49655E04 2.01298E03 5.07645E04 3.17405E04 1.32864E04 1.67599E04 1.19125E04 3.74238E04 4.77854E04 5.07496E03 1.08453E04 1.58032E04 8.90645E03 2.73359E04 1.38151E04 4.82347E04 8.30828E04 3.73693E04 8.55663E02 3.28565E04 1.17118E05 7.63080E04 8.19147E02 4.41377E04 5.19453E04 3.75176E05 8.15542E04 4.53573E04 1.22565E05 2.26834E05 5.70091E04 8.98299E04 1.36243E04 7.39243E04 1.17209E05 3.55541E03 5.72333E04 3.03419E05 4.82172E05 1.28670E05 1.26093E05 1.31759E06 1.86145E06 9.23173E05 6.42962E04 3.99780E04 5.97692E05 3.52721E05 4.05478E04 6.12148E04 3.73319E03 5.74544E04 5.30815E04 1.72080E04 3.45601E05 2.24757E04 6.54951E04 1.24119E05 2.71634E04 7.80684E04 1.45191E05 3.08807E05 5.17834E05 6.41752E04 8.78630E05 2.09204E06 7.13999E05 8.56473E05 2.27917E06 1.48897E06 7.95017E06 1.05894E07 1.72475E06 1.54648E06 1.39537E07 1.52620E07 1.41422E06 2.84348E06 3.54652E06 2.23212E05 7.42677E06 2.83353E07 5.73197E06 2.14825E08 2.74205E08 1.83315E07 1.27996E08 1.60097E08 2.23931E07 8.36270E07 7.77590E07 4.63906E06 5.35279E07 1.08168E08 2.60664E07 7.88890E07 1.33192E08 8.64613E07 6.24980E07 2.51436E07 1.04557E08 3.16233E08 3.20628E08 1.80423E08 1.22649E08 1.66849E08 9.89591E07 4.17964E07 2.60734E08 2.29481E08 9.66754E07 3.99967E08 2.14460E08 9.34519E07 1.19491E08 2.31950E08 1.72546E08 1.63315E07 1.00107E07 1.25043E08 2.92726E08 2.06264E08 1.56480E08 1.14908E08 1.12960E08 1.08349E08 2.30824E07 3.83463E05 6.94116E07 3.22449E08 4.73242E08 4.05562E08 1.43197E08 2.80200E07 5.47854E07 1.11337E08 9.62289E07 2.92152E06 5.57950E07 4.63857E07 4.60873E07 1.78423E07 9.27698E07 2.58074E08 1.65665E08 2.43119E08 2.42644E08 6.18978E07 8.58181E06 1.21484E08 2.65185E08 3.48527E08 2.14100E08 1.04674E08 4.31429E07 1.53160E07 1.33133E08 5.16482E07 4.36499E07 3.01046E07 4.21597E07 2.72748E07 1.39057E07 3.26769E06 8.83548E07 2.56369E08 3.70237E08 2.16017E08 1.16058E08 2.70672E08 4.72854E08 1.77321E08 4.01979E06 3.34247E07 4.17956E07 4.83586E07 1.15771E08 1.38746E08 7.03733E07 3.19807E06 1.18866E08 2.18518E08 5.04165E07 6.52222E07 5.47508E07 1.37820E08 1.97893E08 1.95978E07 3.13749E08 2.55383E08 1.07567E08 1.18679E08 3.07901E08 1.90704E08 4.04419E06 1.37234E07 1.66671E07 2.05767E06 6.85837E07 7.80856E07 5.09462E07 3.72116E07 3.45316E07 4.79893E07 2.49370E06 1.08343E08 1.38921E08 3.92956E07 1.96018E06 7.77340E07 2.58491E08 1.91050E08 3.12163E06 6.41417E07 -Frame 257 8.33795E05 1.89097E05 6.23226E04 1.48146E04 3.19693E04 1.57596E04 3.22740E03 1.68684E04 2.97008E04 2.01581E04 1.37340E03 2.99081E03 2.25407E04 1.81232E04 2.27850E04 1.27865E03 1.90988E03 1.90367E03 1.04223E04 1.01722E04 2.18981E04 1.77518E04 2.08701E04 2.95718E04 1.19262E04 9.61909E03 3.44073E03 1.84439E04 5.27678E03 2.65173E04 5.94536E04 1.87119E04 9.05247E03 4.30079E04 8.49817E03 4.33863E03 2.54726E03 3.04981E04 1.50665E04 2.19387E03 2.66076E04 3.56903E04 6.55018E04 1.33175E05 1.35537E05 6.30922E04 4.04476E04 1.03359E03 8.35744E04 1.07586E05 6.00035E04 1.04069E05 1.14161E05 1.94571E05 1.11606E05 1.45927E04 6.18347E04 5.09004E04 1.80733E04 4.62669E04 4.16324E04 1.46608E04 2.05057E05 7.05571E04 4.91222E04 2.02845E05 6.21014E05 1.88356E05 1.17280E06 1.38912E06 1.62375E05 1.72966E04 2.20379E05 8.14799E05 5.67254E05 2.35874E05 1.01126E05 2.59697E05 7.53571E04 4.16553E04 3.33927E02 1.04355E06 2.21686E06 5.22334E05 1.32665E06 1.31940E06 6.55660E05 6.57252E05 9.26073E05 1.41966E05 5.64196E05 1.00409E06 9.48121E05 8.97984E05 8.57937E04 1.30763E05 1.29191E05 1.06145E06 8.51045E05 6.51808E05 8.04860E05 7.00866E05 6.65390E04 3.91657E05 3.30699E06 1.02763E07 1.12540E07 5.83229E06 9.09730E06 1.41296E07 2.13065E07 1.96471E07 7.14413E06 3.98876E07 6.18073E07 2.08413E07 1.21186E07 4.46768E07 6.01824E07 1.44275E07 4.55529E07 6.94095E07 5.57233E07 8.51851E06 1.31086E07 1.00072E08 3.38817E08 4.73869E08 2.39089E08 1.14351E08 2.50403E08 2.51642E08 1.49363E08 5.12153E07 1.08300E07 4.54218E07 1.95934E08 2.78288E08 3.24739E08 1.58812E08 9.96248E07 6.83284E07 4.38435E07 8.15948E07 1.02109E08 5.96010E07 1.39767E08 1.23113E08 6.01227E07 1.23777E06 8.74966E07 1.14997E07 9.33015E07 3.87994E08 6.33804E08 2.26236E08 3.66425E06 1.68140E07 9.31527E06 2.54411E07 4.68784E07 2.08075E07 1.47892E08 3.41021E08 1.13094E08 1.84005E08 4.12994E08 1.25293E08 1.41089E06 1.35229E07 2.70485E06 5.37266E07 1.06723E08 9.58655E06 6.31157E07 6.94860E07 7.41081E06 2.60010E07 9.19495E07 5.26961E07 7.82798E06 1.14815E08 1.18540E08 2.50345E07 2.13578E07 5.56902E07 1.46825E08 1.26844E08 4.81406E07 1.31215E08 2.35384E08 4.91591E07 8.83462E06 1.44935E07 1.42031E07 6.92239E07 5.96521E07 5.39199E07 7.82278E06 1.12788E08 1.29037E08 1.76008E08 6.24468E07 1.59654E07 7.01781E07 1.28693E08 5.16208E07 5.30547E07 6.63127E07 1.37345E08 1.68696E08 1.39583E07 2.34843E06 9.30356E07 6.32511E07 7.01059E06 1.47633E06 1.21922E07 1.22575E07 6.19032E06 9.84186E06 2.17271E06 1.45137E07 2.59139E07 2.76863E07 1.27496E08 2.04055E07 3.03376E07 7.98168E07 2.95370E08 4.33079E08 1.56258E08 2.80661E06 7.92092E07 1.97727E08 3.42054E08 4.71501E07 1.93378E07 2.68482E07 3.48255E07 6.76588E06 3.07824E07 3.06864E07 2.85312E07 1.31256E07 4.01390E06 4.17565E06 4.36631E07 9.63825E07 3.31604E07 3.76021E07 3.35090E07 3.21992E07 1.37831E08 1.99549E07 2.22754E07 2.70276E07 -Frame 257 1.34665E06 1.39226E06 1.03026E06 2.10702E05 3.72812E03 6.67467E03 2.47347E04 4.23379E04 1.02884E05 3.68853E04 1.95677E03 1.15062E04 2.55986E04 2.08397E04 3.33381E03 6.52169E02 6.73521E03 4.43753E04 3.49685E04 4.36154E04 1.89976E03 8.19703E03 1.27910E04 9.91858E04 1.52635E05 5.73931E04 1.61435E04 3.05871E04 1.73467E04 1.28616E05 2.05441E05 1.13569E05 1.56217E05 3.31308E04 7.83990E04 1.10871E05 1.82497E05 2.56481E05 1.38646E05 1.23339E04 6.87686E03 1.71692E04 2.85616E04 1.28820E05 6.35329E04 4.06984E04 2.52887E03 6.83169E04 1.02177E03 7.70946E04 1.54894E05 1.20788E05 4.53330E04 4.62957E04 2.90971E05 1.49582E05 1.75184E05 2.02851E05 2.46986E03 1.34395E04 2.99130E04 1.65199E05 8.75647E05 1.28524E06 2.25024E06 6.03310E06 9.90917E06 6.31185E06 3.21974E06 9.93293E05 6.41899E05 1.54594E06 3.63993E06 4.29769E06 7.25301E05 9.23665E04 4.58034E05 6.93693E05 6.94755E03 3.83633E05 4.69772E05 5.21203E06 1.92912E07 2.18185E07 1.26559E07 1.91046E07 3.95512E07 4.20938E07 1.55852E07 1.41703E06 4.55193E05 1.34920E06 5.67977E05 3.63706E06 1.03754E06 7.21699E05 2.13032E06 3.50170E06 1.86235E06 2.66876E06 1.14308E06 1.07686E05 1.24797E06 2.69348E06 5.01470E06 6.74131E06 1.84631E06 3.11682E06 1.23979E07 3.47897E07 2.72483E07 6.62135E06 2.32682E07 4.31979E07 9.74894E07 3.41873E07 2.77970E07 8.43592E07 3.98964E08 3.77335E08 3.90415E07 1.11265E08 3.42595E07 2.58444E07 1.75004E06 3.99299E07 5.97838E05 1.25521E08 2.17210E08 1.27447E08 9.21737E06 7.19018E07 7.18638E07 6.55844E06 8.30314E05 3.93771E07 1.23031E08 3.02011E07 1.36716E08 3.41516E08 2.30269E08 1.24208E08 1.23324E07 4.03467E07 4.61131E07 1.11040E08 8.48067E07 2.41440E07 1.11810E07 4.19552E07 1.33859E08 5.55480E07 1.14481E07 1.33550E08 7.58180E07 1.84959E08 1.83194E08 2.59476E07 1.94978E07 6.36122E07 6.96463E07 2.55527E07 7.75664E06 1.06923E08 3.86206E07 1.40799E08 3.77183E08 1.41898E08 4.67531E07 7.94557E07 7.35456E07 3.19639E06 1.21490E08 1.34433E08 6.12327E07 8.92575E07 9.96932E07 1.26439E08 1.36042E08 7.17929E07 1.44361E05 6.55824E07 4.99919E07 1.19723E07 1.64834E07 5.67374E07 6.68232E07 4.50878E07 1.06148E08 1.62333E08 8.83721E07 1.09832E07 3.76113E07 2.59614E07 1.02686E07 4.41088E07 1.54501E08 2.15114E08 8.69764E07 2.39569E07 3.95040E07 1.04188E08 1.28299E08 5.80910E07 4.23730E07 1.97805E08 3.09788E08 1.32639E08 1.33755E08 2.06006E08 1.56173E08 8.90432E07 4.83643E06 4.54112E07 1.12066E08 9.70805E07 9.37695E07 4.45061E07 2.73544E06 4.55809E07 8.82058E07 9.29609E07 8.61491E07 9.45881E07 9.12981E07 9.07479E07 4.19535E07 5.27921E06 5.27079E06 7.17441E07 1.97671E08 7.61736E07 2.14725E05 3.03644E07 1.92703E08 3.61843E08 2.67021E08 9.91675E07 6.50612E07 1.15149E08 1.50249E08 6.17028E07 4.08847E07 7.34462E07 6.18266E07 7.84848E07 5.54829E07 1.02453E08 1.16641E08 1.15519E07 3.08665E07 2.21132E07 7.55919E07 3.45083E08 3.28869E08 1.19525E08 4.95108E07 -Frame 257 5.50832E06 6.25116E06 2.22420E06 2.10356E05 3.75797E04 5.53047E04 6.09715E04 6.79047E04 7.64999E04 1.23545E04 7.55912E03 8.07950E04 1.80984E05 1.08554E05 6.29729E03 5.84506E04 8.76581E04 1.86605E05 2.11018E05 1.64417E05 4.06927E04 5.93784E04 1.32309E05 9.36020E04 1.47431E05 9.01196E04 1.84148E05 2.19752E05 1.44385E05 6.03431E03 4.17677E04 3.48442E04 5.34205E04 8.58164E04 7.60759E04 9.60404E04 2.75719E05 1.89581E05 7.25842E04 6.29726E04 4.82312E04 3.83253E04 6.06993E04 1.67303E05 7.77922E04 3.55833E04 9.79017E04 1.07256E05 1.03310E05 1.66580E05 6.70099E04 1.31152E04 1.63547E05 6.54786E04 2.65442E05 6.70673E04 1.71991E04 3.29335E05 3.14781E05 2.90908E05 1.75457E05 1.78007E05 1.19113E05 9.68586E05 2.16484E05 3.63985E06 9.28088E06 9.18747E06 2.90441E06 9.72998E05 3.14660E05 5.27122E05 2.25968E06 2.37742E06 1.18895E06 1.05462E05 1.37888E06 5.75794E05 3.28658E06 1.07753E07 1.02612E07 5.26867E06 4.85031E06 1.54352E07 1.42038E07 3.18274E07 8.43753E07 5.99235E07 1.54230E07 6.95264E06 9.71517E06 2.63418E06 8.33853E05 7.11030E06 2.50320E07 3.33241E07 1.90119E07 4.35963E06 2.16471E06 1.43104E06 7.59759E04 9.02084E05 1.78320E05 1.86956E06 2.39323E06 5.63416E06 6.93582E06 4.03279E06 6.85918E06 2.01657E06 4.04344E06 1.19364E07 1.36094E07 2.81480E07 6.04489E07 2.26661E07 1.85031E08 2.68845E08 1.43193E08 5.18845E08 4.31598E08 2.50306E08 2.00521E08 9.46805E07 2.11843E07 1.10037E08 1.05279E08 8.29121E06 8.27661E07 1.50517E08 5.29389E07 1.34269E07 4.88933E07 7.85290E07 4.77787E07 1.03057E07 3.92482E07 8.12217E07 7.33447E07 3.79237E07 1.86330E07 6.79045E07 1.42214E08 8.74379E07 6.42791E07 9.29374E07 5.15866E07 7.24534E06 2.63556E07 8.39770E07 1.35039E08 9.53259E07 8.12617E06 2.82097E07 1.17080E08 1.23975E08 5.35379E07 3.53324E07 1.07989E07 3.86683E05 2.06084E07 5.34018E07 3.78657E07 2.09401E07 1.74857E07 1.23766E08 1.89003E08 1.97915E07 2.59184E07 1.22565E07 2.31857E07 1.27805E08 2.24497E08 2.23074E08 4.93131E07 6.49588E06 2.36318E06 3.74341E06 5.69113E05 7.30446E06 4.84788E07 3.45166E07 2.01384E07 1.38555E07 1.29619E07 2.40980E07 6.23225E07 5.26320E07 3.45426E07 4.97335E07 1.86480E07 9.13163E06 1.17978E07 1.75899E05 1.33032E07 7.83880E06 4.52839E06 4.65735E07 5.18501E07 3.69970E07 4.07165E07 7.91002E06 4.29277E07 3.46910E07 5.14788E06 7.30855E07 1.13408E08 7.37654E07 6.54276E07 3.26464E07 2.22247E07 1.96210E06 5.14025E07 1.23378E08 5.08717E07 2.01367E07 9.46350E07 4.57533E07 4.34991E06 7.68003E06 6.91914E06 1.33351E07 4.37244E07 3.25231E07 6.08412E06 9.89331E06 1.79215E06 3.80731E06 3.71928E06 2.38399E07 3.50364E07 2.42352E07 1.02411E07 5.92974E06 1.11022E07 1.40363E07 1.13744E07 1.97200E07 2.59731E06 2.53146E07 7.35015E06 2.86634E07 6.40050E07 8.30595E07 5.76193E07 5.52277E07 7.26944E06 1.97043E07 3.16117E07 2.72660E07 2.44730E07 3.25588E07 3.60534E07 1.04062E08 7.25153E07 2.66752E07 1.03060E07 -Frame 257 1.36680E07 8.64855E06 1.26957E06 7.36955E04 3.56422E04 1.66733E05 3.53214E04 4.32169E03 2.10616E04 9.10269E03 3.42987E04 2.79673E05 2.88986E05 1.04253E05 2.91534E05 1.74127E05 3.31726E04 1.34308E04 1.62543E05 1.55273E05 3.75386E04 3.91125E04 1.81968E03 3.25812E04 1.06379E05 2.80370E04 2.02344E05 4.15854E05 8.86474E04 1.10368E05 1.67031E05 2.43935E04 2.41121E03 7.49391E04 1.07025E05 1.01748E05 5.40142E03 3.88242E04 7.58034E04 8.81209E04 2.02226E04 3.34725E04 3.29049E03 1.22569E04 4.30485E04 1.40640E05 6.90272E04 4.65492E04 3.10375E04 2.08086E04 3.65759E04 1.42520E05 1.39167E05 8.91874E04 3.30760E05 1.07333E06 9.38850E05 4.50249E05 1.60279E05 5.30696E05 2.16875E06 2.45436E06 1.88278E06 7.27565E05 4.99343E06 1.71782E07 1.48992E07 1.46241E07 7.49073E06 6.70367E06 4.43877E06 3.82792E06 2.71017E06 1.98507E06 2.55999E06 1.46723E06 5.06738E05 4.74623E06 5.00351E07 7.83394E07 2.13849E07 5.33064E06 2.13736E07 5.00213E07 4.22696E07 8.32598E07 3.50314E07 7.10675E06 1.23255E07 1.49925E07 1.35358E07 1.68664E06 2.06014E06 1.48596E06 7.47840E06 1.68185E07 2.42750E07 9.78610E06 4.99794E06 4.10471E05 1.65154E05 3.13160E06 2.43257E06 1.24632E06 1.03030E06 1.68940E06 7.29029E06 8.24194E06 3.48513E06 1.53611E06 4.36859E06 8.28598E05 2.23427E06 7.32524E06 3.63056E07 1.14523E08 1.91399E08 8.57998E07 8.58800E07 1.89894E08 1.36938E08 9.89863E07 1.26776E08 1.21094E08 1.26684E08 1.08370E08 5.94138E07 2.41558E05 3.78492E07 5.86687E07 2.01533E07 2.59087E07 3.38408E07 6.70914E06 3.06958E07 3.21108E07 4.26205E06 7.09798E05 1.63323E06 4.18365E06 3.56116E06 2.61807E07 4.18099E07 1.19930E08 1.35853E08 1.01505E08 8.31266E07 7.52322E07 2.84355E07 3.16962E07 9.72429E04 1.68339E07 3.70637E05 5.87395E07 4.96846E07 3.97594E06 1.92766E07 2.23772E07 2.73271E07 2.22435E07 5.44586E07 1.62532E07 1.50620E07 1.11251E07 2.04358E07 4.46573E07 4.60062E07 4.09553E07 1.10165E07 1.18191E07 8.70088E06 2.20466E07 3.14901E07 4.56745E07 1.00313E08 2.79075E07 4.99178E06 1.89434E07 2.10814E07 2.81536E07 2.35213E07 1.99653E07 1.67557E07 1.20686E07 3.51876E06 5.13713E06 3.25702E07 4.61568E07 7.99681E06 2.54356E07 3.99482E07 2.68961E07 7.52186E06 6.63027E05 2.72512E06 1.60090E06 9.62468E05 2.05868E05 9.93691E06 6.40669E06 1.44473E07 8.51431E06 8.83518E06 3.63625E07 6.62254E07 5.28622E07 9.13048E06 2.81146E06 3.07304E06 2.80630E07 4.57298E07 5.17836E07 1.77503E07 1.65865E07 9.36396E07 5.81860E07 2.92665E06 1.09822E07 1.83735E07 7.86674E06 1.87196E06 2.54204E06 1.59632E04 7.31310E06 8.61092E06 1.35206E07 2.49764E07 3.03993E07 1.17710E07 1.65091E05 1.32807E06 7.97146E04 2.40868E06 4.49658E06 4.37990E06 8.86813E06 1.20445E07 3.54317E06 4.77022E06 1.57646E07 7.97134E06 7.46778E06 3.57386E07 8.91497E07 4.07426E07 1.60581E06 2.40778E07 3.76703E07 1.81003E07 5.95847E06 3.17118E06 4.92310E06 9.12128E06 1.10981E07 2.33292E07 5.18669E07 7.61801E07 -Frame 257 2.84914E06 5.99574E06 2.31981E06 3.00095E05 2.16434E04 1.67974E05 1.49744E05 5.97188E04 1.10214E05 1.08266E05 3.68522E05 5.18810E05 2.13424E05 2.00604E05 1.67736E05 5.72722E04 2.01522E04 1.29227E05 1.92566E05 7.20881E04 1.41726E04 5.22670E04 2.18685E04 4.18477E03 2.53756E05 4.93543E05 6.35243E05 4.54031E05 9.62908E04 2.13801E04 3.73345E04 1.95898E05 2.00701E05 3.45089E05 3.36647E05 2.19098E05 8.65372E04 1.03523E04 5.73842E04 4.98868E04 5.17626E03 2.72902E04 5.20612E04 1.05160E04 1.76886E04 5.29442E03 2.76388E04 1.96004E04 2.30759E04 3.02255E04 3.05026E04 8.41983E02 1.73071E05 1.39920E05 2.51652E05 5.50124E05 1.18309E06 9.08620E05 1.05536E06 7.56517E05 9.45425E05 1.50841E06 1.30140E06 9.96421E06 7.35182E06 3.47577E06 5.39422E07 5.48159E07 1.26985E07 2.69107E06 8.71177E05 7.18217E05 4.63993E05 3.49216E05 7.52758E05 2.38711E06 4.94520E06 7.52932E06 7.64226E07 3.07676E08 1.75275E08 4.71651E07 1.83667E06 6.00783E07 1.26617E08 6.79959E07 2.45072E07 5.54924E06 5.34565E06 1.55015E07 2.03316E07 2.90826E06 4.70507E06 6.02442E06 4.61712E06 6.06840E06 1.26311E07 1.26673E07 8.78889E06 3.05405E06 2.40068E06 5.26317E06 4.17742E06 2.10677E06 3.81713E06 3.29856E06 3.77886E05 1.04613E07 1.59836E07 1.10325E07 1.57215E07 3.10682E07 3.47917E07 1.24591E07 7.08509E06 1.85195E07 4.98094E07 5.05631E07 4.19991E07 2.86522E07 1.63492E06 5.50254E07 4.85186E07 4.64240E07 6.00048E07 1.85991E07 3.32265E07 3.00661E07 1.84475E06 1.61818E07 1.96088E07 1.67021E07 1.09287E07 9.24580E06 1.98470E07 9.81713E06 2.43878E06 8.59058E06 2.65509E07 1.92475E07 1.14363E05 1.66259E07 3.87726E07 6.11933E07 5.56482E07 2.17751E07 3.80091E07 5.98728E07 4.92434E07 4.08991E07 1.27439E07 3.29364E06 3.56044E07 5.07063E07 1.73119E07 9.86388E06 8.79414E06 5.81296E06 4.97099E05 2.78705E07 8.56798E07 9.02111E07 6.30684E07 2.04437E07 4.71203E06 3.81828E06 1.26825E06 2.42816E06 7.42600E06 4.79475E06 9.45423E06 5.22432E07 1.14870E08 1.03080E08 2.15475E07 3.11245E06 1.82786E07 2.80533E07 4.56951E07 1.77637E07 1.04914E06 1.09336E07 2.20752E07 4.65647E06 1.27536E07 1.60993E07 6.18953E06 3.95669E04 1.06045E07 2.32055E07 8.89765E06 2.72228E06 1.42012E07 7.98197E06 4.37615E06 6.55019E06 1.47714E07 2.16051E07 3.19947E07 2.54977E07 5.87867E06 1.58372E06 8.09395E06 2.20332E06 4.49226E06 3.35751E06 2.33740E06 9.64763E06 2.31171E06 6.39349E05 1.75403E05 6.15433E06 2.38542E07 2.14308E07 6.85449E06 5.06557E06 3.25197E06 2.10309E06 1.51100E06 7.18797E06 5.98219E06 3.66199E06 2.70275E06 1.25082E06 8.05643E05 2.84409E06 3.93900E06 4.18084E06 1.38756E07 9.59679E06 2.21960E06 1.12561E06 3.24029E06 3.42035E06 2.46808E06 1.78049E06 6.08346E04 5.19506E06 1.57513E07 1.09848E07 1.77768E06 9.05990E05 9.93090E06 2.39977E07 1.43271E07 1.52756E06 7.98278E06 1.47392E07 9.29375E06 2.09694E06 3.66959E05 2.51840E06 4.56968E06 2.43441E06 2.77689E06 1.12754E07 2.37552E07 -Frame 257 1.21077E07 1.13500E07 3.24569E06 1.57866E06 2.40051E05 5.12052E05 2.96173E05 2.28567E05 2.07082E05 5.03453E04 1.99516E05 2.15102E05 6.86089E04 6.30331E04 3.80280E03 1.21308E05 4.34385E04 8.50440E03 1.68019E05 1.46851E05 9.47881E03 2.30723E03 3.71298E04 1.09023E05 1.41579E05 9.39326E03 1.02292E05 1.29869E05 4.65940E02 6.83383E03 1.50546E04 4.74776E04 2.63251E04 3.69196E04 1.06588E03 3.70438E04 1.10313E04 3.73770E04 1.63640E04 2.24835E04 1.01466E04 1.73201E04 5.33547E04 4.36414E04 9.83675E03 3.47375E04 2.23736E03 1.52412E04 1.03516E05 2.49520E05 2.59115E05 1.23444E04 1.88994E05 1.96908E05 1.06337E06 1.25891E06 1.13447E05 5.86369E05 7.23371E05 1.16911E06 8.70570E05 1.30759E06 1.09126E07 1.09151E07 1.64896E06 6.72128E06 3.69518E07 4.33682E07 1.49752E07 5.66113E06 5.30221E06 4.48940E06 1.79279E06 4.23141E06 9.55519E06 8.71246E06 2.60381E07 7.34061E07 2.11702E08 4.31682E08 3.01263E08 6.40601E07 2.01042E07 1.53581E07 1.27133E07 4.56669E06 3.69404E06 1.01967E07 1.70265E07 1.49690E07 8.70808E06 9.14838E06 7.80419E06 2.09230E06 8.46968E05 1.84167E06 9.77209E04 3.32011E05 3.61272E05 1.72672E06 1.49219E06 3.34426E05 1.67664E06 9.80371E05 4.31985E06 4.71015E06 3.15852E06 2.72422E06 9.19926E05 2.09291E06 2.17945E06 1.29941E07 1.87414E07 4.42281E06 4.32324E06 2.67134E06 5.97140E05 5.06561E06 1.95029E05 2.08349E06 4.56995E06 1.36392E07 3.84148E06 2.77235E06 1.81914E06 1.03445E07 1.33804E07 3.46617E06 5.54208E06 6.14191E06 1.00902E06 6.10880E04 7.89822E04 7.08213E05 3.65353E06 4.34801E06 5.97174E06 1.68694E07 1.50426E07 1.05421E07 1.54936E07 1.09841E07 9.27063E06 3.71077E06 1.80278E06 8.00725E06 4.50135E06 9.51445E05 6.86927E06 9.92423E06 3.08127E06 4.12815E06 1.29229E07 5.11762E06 4.37394E06 4.93702E06 6.05071E06 5.58451E06 8.95965E06 8.56616E06 2.25502E06 1.67952E06 2.91204E06 7.08437E05 1.43770E06 4.07756E05 4.78862E05 9.27399E05 2.74099E06 3.77926E06 5.89016E06 6.01460E06 2.77641E06 7.44934E06 4.94561E06 7.31908E06 6.38286E06 1.51346E06 7.45876E06 1.73397E07 9.81636E06 1.37386E07 2.20589E07 9.50279E06 1.57270E06 3.75732E05 6.05719E04 4.99770E05 1.90701E06 3.14114E06 3.24524E06 2.07817E06 3.38705E06 1.75623E06 1.42168E06 3.13207E06 3.77631E06 1.08635E06 4.06410E05 1.90402E06 2.74245E06 2.91007E06 5.24734E06 5.18882E06 2.78179E06 2.67611E06 3.69621E06 5.23149E06 4.74369E06 2.54481E06 1.51719E06 4.78957E05 3.61597E06 1.53052E06 5.35433E05 1.13593E06 1.25014E06 8.02537E05 7.01729E04 7.13808E05 3.68411E05 2.54439E05 1.66755E05 9.03360E04 6.77340E04 5.28546E05 8.86687E05 7.01133E05 1.43020E06 3.68303E06 1.61800E06 3.43277E05 9.31581E04 1.58579E06 2.23196E06 9.76340E05 2.24667E05 2.71564E06 6.80805E06 3.38222E06 2.66199E05 2.51490E05 2.93738E05 1.11061E06 3.16356E04 1.39076E06 9.88061E05 4.45867E05 9.19083E05 2.54901E05 1.17097E05 3.54555E05 3.26047E05 3.13366E05 4.71603E05 6.59840E05 1.96555E05 -Frame 257 3.64836E07 4.15838E07 1.93577E07 3.07561E06 3.27794E05 1.72002E06 3.82175E06 1.63688E06 1.07736E05 9.60529E05 2.80464E06 2.42500E06 1.20008E06 2.23984E04 3.65380E05 2.57978E04 2.30005E05 2.11831E05 2.85682E04 1.48762E05 4.85686E03 6.42786E04 1.21493E05 4.48348E04 3.53863E04 1.37784E04 3.27488E04 4.33894E04 1.24575E04 2.89839E04 8.32015E03 6.13094E04 1.70528E05 3.35513E04 2.13256E04 3.82791E04 2.05609E04 9.64613E04 1.07366E05 6.57213E04 5.33603E04 3.49725E05 6.26520E05 1.78729E05 3.94537E05 1.34198E06 9.76327E05 2.30983E05 5.15668E05 2.31531E06 5.52320E05 2.21297E06 9.20200E06 1.23287E07 5.02396E06 4.26891E06 4.64655E06 1.96233E06 3.84836E05 8.95785E05 3.40242E06 1.55804E06 6.39511E06 3.92718E06 2.66774E05 4.91454E05 5.24338E06 3.85796E06 7.68159E05 5.44508E06 7.24279E06 1.60559E06 3.88871E06 4.44864E06 2.14081E06 1.13411E07 2.04340E07 2.10487E07 1.59879E06 4.54540E07 3.70413E07 6.08928E06 1.20771E06 8.07691E05 1.92598E05 4.29458E05 3.29239E05 1.58803E06 2.01820E06 2.31865E06 1.16060E06 6.89146E05 7.72041E05 4.08571E05 5.86869E05 7.03675E05 1.10845E06 3.96921E05 4.85333E04 3.38950E05 8.93628E05 1.09335E06 9.75162E05 2.78797E05 1.54324E05 5.78546E05 3.68011E05 3.36782E05 2.90285E05 2.35901E05 1.81156E06 1.48309E05 2.47501E06 6.03135E06 5.51699E06 4.33948E06 3.80482E06 2.42328E06 5.64291E05 4.33036E05 2.36011E05 8.09969E05 3.46990E06 4.53150E06 3.30237E06 1.93389E06 8.56265E05 1.12012E05 5.43871E05 2.09073E06 1.96000E06 9.17130E05 2.35175E05 4.91026E05 3.27207E05 8.01320E04 7.73795E05 2.74750E06 3.27371E06 2.34860E06 5.32064E05 6.46374E05 2.40595E06 3.49746E06 1.77892E06 4.47674E06 4.80261E06 2.75595E06 1.02584E06 8.21878E05 7.99473E05 1.78137E06 2.99889E06 3.07504E06 2.77187E06 1.24939E06 5.76941E04 5.05947E05 7.34131E05 3.60470E05 8.16252E05 1.05218E06 7.57759E05 1.37331E06 1.57564E06 7.71628E05 4.01500E05 2.82513E05 1.66316E05 6.21725E05 1.27806E05 3.16932E04 1.19340E05 5.94349E05 8.59734E05 1.68307E06 1.55182E06 5.75806E05 1.66304E06 5.69776E06 1.81119E06 1.26802E06 3.77708E06 4.36337E05 1.34151E05 5.78452E04 9.68622E04 2.74081E05 2.45006E05 8.76651E04 3.49463E05 9.14810E05 6.66525E05 1.67030E05 1.06843E05 3.62635E05 8.40314E04 2.23661E05 7.83067E05 9.59832E05 5.67863E05 1.38552E05 3.84511E05 8.29044E05 1.90838E05 2.14742E05 1.98643E05 1.00671E05 4.31819E05 4.88306E05 2.67616E05 7.89120E05 7.92427E05 4.16444E05 2.09503E05 2.79390E05 4.23555E05 9.69330E05 4.63597E05 1.98350E04 3.60976E04 8.65441E04 5.47710E04 3.69483E05 1.56061E05 2.70741E05 1.27355E05 4.90413E04 1.17559E05 5.49180E05 4.61998E05 1.99844E04 1.97118E05 2.16613E04 6.96149E04 1.08175E05 5.13974E04 4.62235E05 1.16078E04 5.39227E05 2.12972E05 2.83268E05 6.33964E05 2.66408E05 4.05274E04 3.31748E04 8.07092E05 6.70141E05 1.16752E05 6.83101E05 4.40111E05 1.94244E05 2.93122E04 2.07110E04 8.25761E04 1.45684E05 1.46623E05 -Frame 257 5.41009E07 2.85382E07 1.83342E06 2.79990E06 4.90503E06 1.15723E06 2.99269E06 1.10071E07 9.99516E06 4.08970E06 1.62713E07 4.28033E07 2.49352E07 3.56674E06 2.92827E06 4.35571E06 1.36821E06 6.42226E04 1.00918E06 9.95258E05 1.49545E05 1.66210E05 9.59864E05 8.37744E05 9.95830E04 1.20741E05 4.26662E05 2.63141E05 3.58611E04 1.65601E05 3.55985E05 1.43703E05 1.26414E05 3.92306E05 3.03773E05 9.18749E04 6.74723E04 3.13082E05 1.94702E05 2.34969E04 2.69164E05 9.96017E05 6.06537E05 3.32581E05 2.68606E06 5.72094E06 1.70322E06 2.62833E06 9.77199E06 8.69582E06 4.36541E06 1.80575E07 3.11837E07 1.14027E07 3.64024E06 6.37461E06 6.67944E06 7.58118E05 1.56798E06 2.68733E06 1.57836E06 1.60396E06 7.38309E06 1.07370E07 3.55010E06 2.43916E06 1.28707E07 1.93912E07 1.47539E07 2.14117E07 3.12970E07 2.24985E07 1.00883E07 1.49550E07 3.98831E07 3.67885E07 5.26823E06 3.37515E06 2.75982E07 2.49311E07 1.38871E06 5.34283E06 9.46919E06 3.91604E06 3.27018E05 2.04772E06 1.45056E06 1.05152E05 3.41400E05 1.66154E06 5.00544E05 9.07519E04 4.43989E05 3.97972E05 5.49079E04 2.69493E04 3.93320E05 4.60604E05 1.95383E05 2.03613E04 6.10800E05 2.31295E05 5.28645E04 2.48523E05 4.54999E05 5.83952E03 2.11365E05 5.03046E05 1.50611E06 3.62557E05 2.51152E05 2.34104E05 2.65044E06 2.69352E06 3.45441E05 6.44632E05 2.98943E05 6.83912E05 4.79279E05 1.53626E05 1.49442E05 2.33467E05 4.21510E04 1.03522E05 8.66627E03 6.25842E04 3.54976E03 3.60637E04 1.14519E05 2.70898E05 4.95225E04 3.27962E04 1.07205E04 6.86485E04 1.28264E05 1.58478E05 1.48269E05 9.42370E04 2.03914E05 8.06288E05 7.58655E05 4.23781E05 6.51461E05 1.81874E06 1.13503E06 3.85537E05 1.11153E05 3.41396E05 3.34814E05 9.31741E04 6.07034E03 8.10264E03 3.40779E03 6.93182E04 1.03042E04 3.62875E05 3.14155E05 6.55703E04 3.80022E04 2.06220E05 1.13353E05 2.50928E02 4.20633E04 1.80075E05 1.76249E05 2.01413E05 5.18834E04 1.58915E04 1.04882E05 2.00192E05 1.22490E05 9.11385E04 8.17304E04 2.70224E04 3.69057E04 3.31985E05 3.99185E05 2.74876E05 6.41729E05 1.39988E06 6.21681E05 5.95004E05 2.01318E06 2.63842E06 1.81541E06 1.14368E06 9.53549E05 3.77028E05 1.81529E05 4.84413E05 7.39832E05 5.62220E05 2.24567E05 1.38339E05 1.04100E05 8.40213E04 1.60977E05 4.92750E05 3.56928E05 4.77968E04 9.76537E03 2.49953E05 3.30779E05 6.40993E05 3.45576E05 4.98411E05 6.14297E05 2.06535E05 1.21296E05 4.97224E05 8.79389E05 5.28316E05 3.38999E05 3.55132E04 1.31386E05 1.72312E05 2.45288E05 1.83757E05 4.44523E05 9.47418E05 7.01216E05 3.76921E05 7.70759E05 2.29161E06 1.93010E06 1.12169E06 1.94720E06 1.83912E06 1.12301E06 5.04930E05 1.05762E05 1.27300E05 6.75159E04 7.40522E04 2.25604E04 6.34554E04 2.16079E05 3.45455E05 3.91225E05 3.32882E05 3.60821E05 4.51830E05 3.40386E05 2.96947E05 2.99021E05 5.76647E05 1.43563E06 2.03884E06 1.60382E06 4.23898E05 1.52713E05 7.55452E04 3.26390E03 8.28600E03 3.71184E04 2.39005E04 2.07175E04 -Frame 257 2.35754E05 6.55339E06 7.12267E05 1.44602E06 2.10961E06 3.15635E05 2.30772E06 1.55074E07 1.29146E07 9.09475E05 2.01975E07 8.16133E07 4.47871E07 3.79483E06 8.74588E06 1.15470E07 1.87299E06 1.89032E05 2.38304E06 1.80575E06 3.32258E04 7.72811E05 2.28648E06 8.52316E05 5.01089E04 8.90939E05 1.16167E06 2.26080E05 6.59104E04 4.46642E05 4.43068E05 3.96845E04 1.58522E05 5.50655E05 2.53620E05 1.55034E04 3.13372E05 4.44720E05 7.42110E04 8.40884E04 7.93757E05 7.59881E05 6.03129E04 2.32156E06 6.47100E06 1.06019E06 6.05029E06 1.95768E07 1.61411E07 5.13714E06 1.03024E07 2.41049E07 1.24384E07 7.75291E05 2.95454E06 6.96612E06 2.97244E06 6.82739E05 2.50970E06 2.14037E06 6.77053E04 7.58994E05 4.44663E06 3.49387E06 1.19213E06 3.97566E06 7.89772E06 1.88861E06 3.02757E06 9.59199E06 1.38661E07 4.08057E06 1.26896E07 1.94386E07 2.13492E07 2.03091E07 2.10898E07 2.59669E07 3.21018E07 2.21258E07 2.26278E07 2.15183E07 5.57804E06 2.66879E06 5.89612E06 4.06580E06 7.34156E05 1.52585E06 2.33198E06 1.12047E06 4.93717E05 1.74204E06 1.15868E06 1.91615E05 6.24445E05 1.13519E06 8.98988E05 2.15014E05 7.35168E05 9.22230E05 2.61122E05 6.42495E05 1.45558E06 1.08968E06 1.67024E05 5.51507E05 1.19967E06 9.62872E05 1.00388E06 1.95026E06 1.55546E06 9.55557E05 3.91176E06 9.17526E06 5.53368E06 8.16745E05 4.24614E04 1.50524E05 2.05960E05 3.18576E04 2.87226E04 1.34115E05 1.15656E05 7.50158E04 1.43188E05 8.80257E04 3.00910E04 1.97819E04 4.56439E04 8.59260E04 4.80860E03 2.59711E04 9.20052E04 3.36346E04 5.91034E04 1.15944E05 5.55394E04 4.30929E04 7.86373E04 9.50933E04 6.58801E04 1.15774E05 1.61010E04 9.87691E04 3.91765E05 3.97943E05 3.34576E05 1.39370E05 8.71521E04 8.48149E04 2.64738E04 4.54686E04 8.35262E04 1.66937E05 1.73473E05 7.67488E04 2.20748E03 6.36962E04 8.36996E04 1.24509E04 8.41294E03 8.10553E03 4.50427E04 7.07160E04 8.49000E04 1.17983E05 7.97540E04 1.11085E04 8.88486E03 2.41406E04 1.48818E04 3.27214E04 7.81164E04 1.09384E05 1.01141E05 3.78523E04 9.37115E04 1.01287E05 4.05130E04 3.26793E04 1.52175E05 7.58631E04 2.59779E04 4.17834E05 1.36027E05 7.47543E04 5.00196E05 5.26163E05 1.82728E05 1.93975E05 3.93636E05 2.56977E05 6.28205E04 4.18046E04 5.86600E04 2.66961E03 8.94484E04 3.99687E05 2.15853E05 1.89494E04 8.27068E04 3.30555E05 4.20024E05 3.89788E05 1.49310E05 1.13079E05 3.13177E05 1.52672E05 1.39102E04 2.27647E04 2.48332E05 3.05845E05 3.49212E05 4.08303E05 3.63409E05 8.97293E04 1.36375E05 2.44719E05 3.27570E05 2.12299E05 9.66459E04 1.33703E05 6.47231E05 1.39278E06 8.27184E05 6.14233E05 1.02123E06 3.73769E05 4.41213E05 1.02395E06 5.20019E05 1.15898E05 4.23228E03 6.97620E04 7.07077E04 9.26708E04 1.17204E05 9.67817E04 5.47975E04 1.80369E04 3.90009E04 2.65058E05 8.90650E04 8.57593E03 5.40123E02 3.38242E04 1.26352E05 4.74479E04 3.33053E05 8.23164E05 1.79391E05 4.30506E04 5.05489E04 5.40170E04 3.43793E04 4.97354E04 7.40474E04 -Frame 257 3.69598E07 2.16387E07 2.40175E06 2.06081E06 1.66926E06 3.77114E05 3.87350E06 1.51516E07 5.92282E06 1.19789E06 4.05502E07 8.38043E07 1.97637E07 9.76713E06 2.48872E07 1.54770E07 7.79272E05 2.10020E06 3.73448E06 8.99865E05 2.48674E05 2.41194E06 1.99129E06 4.49977E04 9.76281E05 2.10437E06 6.23460E05 8.67743E04 9.16224E05 7.95881E05 5.03659E04 2.32012E05 7.88932E05 3.32631E05 5.82935E04 7.07672E05 9.86608E05 1.51303E05 2.65377E05 1.10602E06 7.71559E05 1.47887E06 7.05962E06 2.70432E06 4.38809E06 2.45100E07 3.09458E07 1.31206E07 3.61471E06 4.70400E06 6.91506E06 4.05823E06 2.56786E06 4.16665E06 2.81920E06 3.38970E05 1.73309E06 2.07742E06 8.09815E05 2.53888E05 1.39701E06 1.03568E06 1.04263E05 1.24178E06 1.23459E06 2.85860E05 1.59018E06 4.81741E06 5.94603E06 4.47963E06 9.18415E06 1.14775E07 4.56575E06 1.08585E06 2.87443E06 1.67894E06 3.76749E05 3.94832E06 2.86626E06 5.66663E05 2.41363E06 7.28445E06 6.43769E06 2.08282E06 8.50684E05 2.81814E06 1.25685E06 6.61126E04 6.97139E05 1.01153E06 3.10280E05 3.87159E05 1.00470E06 5.14408E05 6.90659E04 3.70726E05 6.75283E05 8.66237E04 1.82049E05 8.19678E05 4.49432E05 4.15148E04 4.57593E05 1.07837E06 2.67399E05 3.05328E04 3.99790E05 2.01863E05 3.61739E03 5.91520E05 1.59476E06 8.58597E05 1.46213E06 3.71200E06 2.10244E06 7.53278E04 9.82881E03 2.95697E04 9.38468E04 7.97377E04 8.66119E03 2.32412E04 7.57587E04 6.44986E04 1.04275E05 2.19163E04 3.33176E04 2.39923E04 4.69410E04 6.15797E04 4.16114E04 1.35493E04 1.16208E05 1.92829E05 1.61899E05 4.70713E04 8.03770E03 4.29655E04 1.08093E05 4.03362E05 4.22369E05 1.38201E05 8.00677E04 3.46060E05 2.08593E05 8.39949E03 8.98496E04 3.68746E04 4.06664E04 5.47050E04 7.97593E03 3.06615E04 3.78404E03 3.38516E04 5.24533E04 3.87746E03 2.60590E04 5.65899E04 5.73118E04 6.22872E04 2.45701E04 3.66380E02 1.89393E04 8.10195E03 1.37801E04 8.77251E03 9.45431E03 8.98508E03 5.31436E03 1.36104E04 1.62323E04 4.30119E04 1.08588E05 1.08243E05 9.27989E03 2.06696E04 2.85870E04 3.69686E04 8.47904E03 3.60124E04 3.16728E04 6.84667E03 3.07768E03 1.62900E05 2.45989E05 7.22552E04 1.26341E05 8.61630E04 1.11925E05 4.89314E04 2.88700E04 9.54203E04 4.06577E04 8.98743E03 3.04202E04 1.42650E05 1.68263E05 9.42414E04 6.21059E04 3.51241E04 8.77594E04 2.86460E05 3.81992E05 1.30346E05 4.37359E03 1.38622E05 2.06307E05 4.62944E04 5.16198E03 5.65998E04 8.35336E04 2.76176E04 7.33114E03 3.55985E04 2.31053E04 3.37776E04 7.31513E04 7.39872E02 8.17619E04 3.16534E04 1.61379E04 2.60507E04 1.29073E05 6.21583E05 3.51534E05 4.13852E05 2.83829E04 1.29768E05 3.19365E05 2.01215E05 7.08612E05 1.23159E06 6.20132E05 6.44536E04 1.90395E05 4.74086E05 1.56373E05 7.45924E04 2.64453E05 1.83570E05 1.62974E05 2.68751E05 1.20921E05 3.68424E03 8.61712E04 1.59676E05 1.79303E05 8.80799E04 2.11208E05 3.20869E05 3.12200E05 1.92901E05 4.55370E04 6.23924E04 2.59251E04 9.07318E04 1.21309E05 -Frame 257 2.41680E07 8.95625E06 1.96267E05 2.20358E06 2.13673E06 3.02273E05 5.20194E06 1.09359E07 2.58614E06 6.63199E06 5.55759E07 4.53775E07 3.79548E06 2.51573E07 3.99064E07 1.01935E07 6.95475E05 4.86956E06 3.08608E06 1.02764E05 2.04617E06 2.56106E06 4.31774E05 4.25341E05 2.08876E06 1.05840E06 9.85979E04 1.35115E06 1.26821E06 1.70964E05 6.35539E05 1.30704E06 6.05092E05 1.08313E05 1.26478E06 1.41074E06 4.82720E05 3.04249E06 4.03834E06 3.02427E06 9.82151E06 1.44895E07 9.70027E06 9.51968E06 1.31731E07 1.01350E07 3.85860E06 3.54408E06 2.48574E06 1.14949E06 9.67667E03 5.71141E05 6.75086E05 2.29427E05 7.51454E05 1.05743E06 2.78675E05 9.86574E04 9.23889E05 7.49674E05 4.28227E04 2.52905E05 7.33768E05 2.89497E05 1.09345E05 8.14912E05 7.18600E05 1.45119E05 1.73829E06 1.87478E06 1.29378E06 2.68439E06 5.52000E06 2.03906E06 3.44013E05 1.44561E06 1.09349E06 1.31132E05 9.01257E04 1.34712E05 3.63033E04 1.53684E05 8.59709E05 8.94282E05 4.57038E05 5.43800E05 1.03329E06 4.43182E05 6.28274E04 5.12472E05 4.35702E05 6.18913E04 1.06976E05 2.30128E05 1.28509E04 3.66421E05 5.37546E05 2.97116E05 2.81816E04 2.25068E05 2.93051E05 7.89286E03 3.64560E05 7.30664E05 2.16453E05 3.70628E04 3.92756E05 2.62932E05 1.12693E04 5.44664E05 6.98002E05 7.24375E04 3.56335E04 7.01338E05 9.37357E05 5.02504E04 2.18440E04 3.54684E04 7.23674E03 6.83816E04 6.02314E04 1.71229E04 1.38684E02 1.50035E04 2.93319E04 4.87321E04 1.38958E05 1.97597E05 7.33885E04 9.47533E04 5.92107E04 9.56362E03 3.94373E04 2.91159E04 5.28036E04 3.77122E04 2.19777E04 4.32495E04 1.37128E05 2.94300E05 1.04631E04 1.69243E05 6.10694E04 6.92736E04 4.38563E04 1.20378E04 9.09499E04 1.91489E05 4.92529E04 2.30682E04 6.89680E04 2.01743E04 3.02724E04 1.04018E05 7.18719E04 1.31395E03 3.30541E03 4.29795E01 3.24747E03 1.33412E03 6.89429E04 9.78469E04 7.78530E04 5.43941E04 2.44747E04 2.24686E03 9.97173E03 9.29067E03 2.56961E04 6.33107E04 4.19183E04 6.16595E04 1.87338E05 1.01035E05 5.80326E04 1.74740E04 3.93432E03 3.25131E04 3.24432E04 8.74747E03 4.44949E04 4.78027E04 4.16062E04 8.36769E04 6.32936E04 1.15709E05 2.17010E04 2.52796E04 1.73776E05 2.47903E05 8.44928E04 3.83818E03 2.27922E03 6.60520E03 3.53793E04 6.27757E04 9.94778E03 4.89141E02 5.36604E01 5.38706E02 7.10075E03 1.70484E04 1.28282E04 1.57358E05 1.45351E05 3.11893E04 1.16875E05 1.23433E05 1.05954E05 2.69523E05 2.84071E05 9.19332E04 4.47414E03 2.22578E04 3.44410E04 9.32106E04 1.41851E05 1.18222E05 3.11189E04 2.20666E04 6.08184E04 1.27820E04 6.32460E04 7.62198E05 1.03313E06 2.44514E05 3.95023E04 1.40265E05 8.94766E03 1.69963E05 6.06209E05 6.12043E05 6.84617E04 3.00958E05 2.91205E05 6.71649E04 3.50928E05 3.07329E05 4.36945E04 9.35262E04 1.99712E05 2.40831E05 6.30123E04 2.99409E04 1.36495E05 7.65679E04 6.84304E03 9.09298E04 2.87704E04 3.60594E03 9.52014E03 5.99137E03 4.31228E04 7.21340E04 5.55093E04 4.62099E04 1.34270E04 -Frame 257 3.64889E06 1.96119E06 9.25562E04 2.01100E06 1.29962E06 6.70161E05 5.52799E06 8.90364E06 1.33918E06 1.33145E07 4.97580E07 2.02150E07 6.32152E06 4.70302E07 4.18651E07 3.60653E06 3.02611E06 5.47173E06 1.49296E06 6.72005E05 3.48726E06 1.96321E06 1.99011E05 1.32015E06 1.85358E06 1.15895E05 1.15459E06 1.95982E06 7.91579E05 5.65334E05 2.72853E06 2.14810E06 1.36934E06 4.33904E06 2.74006E06 1.49109E06 4.65961E06 2.37860E06 3.42144E06 9.14491E06 7.18904E06 1.25825E06 1.80979E04 2.58450E05 6.29227E05 4.41245E04 3.65765E05 5.91590E05 2.10733E05 1.47164E04 2.93355E05 1.16902E05 2.63746E04 1.99522E05 3.11200E05 8.53929E04 3.74406E04 2.88506E05 1.65525E05 1.54896E04 2.29276E05 1.36640E05 2.48157E03 1.07213E05 2.77196E05 7.89586E04 1.24869E05 6.81053E05 4.88381E05 2.55583E04 7.57698E05 1.35619E06 2.90665E05 1.08810E06 1.81747E06 7.32179E05 2.63012E05 7.42693E05 2.94217E05 1.12117E04 9.03600E04 6.60201E04 9.27284E03 7.77362E04 2.68722E04 6.54670E03 1.16917E05 3.42730E05 2.79412E05 8.15646E04 1.81163E04 1.74864E05 8.93349E04 2.52399E04 1.84072E05 2.38802E05 2.79602E04 1.68431E05 1.87825E05 2.19617E04 9.08949E04 3.03712E05 1.27940E05 3.98868E04 4.07497E05 2.43414E05 2.87505E04 1.86007E05 3.75249E05 1.09655E05 3.48331E04 1.59377E05 2.71980E05 7.07367E05 5.07065E05 1.06476E05 1.11241E04 9.49504E03 5.33921E04 1.22705E05 6.18491E04 3.70468E04 4.93563E04 2.20952E04 1.35669E04 2.96141E04 1.20184E05 1.12251E05 4.39369E03 2.24357E04 1.07342E04 8.20855E03 6.15529E04 1.07450E05 1.78036E05 1.53561E05 9.85874E04 2.48248E04 2.47056E05 7.15640E05 7.75436E05 4.31104E05 1.58773E05 7.26338E04 5.38887E04 6.83800E04 1.25378E05 5.37097E04 1.59563E04 8.62993E04 1.07198E05 4.02117E04 1.14716E05 1.03710E05 2.08190E04 2.80499E04 1.73987E04 4.11089E03 3.20172E03 4.66029E04 1.21425E05 4.42783E04 1.77012E03 8.70596E03 1.06530E04 2.60720E04 2.35649E04 1.10082E04 1.27547E04 7.94188E03 7.26442E04 1.19627E05 1.21781E05 5.11703E04 3.35841E04 2.28074E04 9.94824E03 2.02250E04 7.08646E04 7.35803E04 5.12831E04 1.51755E04 2.94020E03 9.68078E03 8.38283E04 1.73530E05 1.65379E05 1.65603E05 1.25075E05 4.84683E04 2.15656E04 1.79250E02 5.03526E03 1.15864E04 1.04385E04 2.20087E04 1.28505E04 4.03335E03 1.48393E03 1.41357E03 1.62488E04 4.06218E04 1.47273E05 1.34193E05 4.73051E04 2.55028E04 7.23198E03 3.85275E03 3.42238E04 2.13211E05 1.67545E05 3.68129E04 3.28162E04 3.32792E04 1.93186E04 2.13881E04 1.05296E04 4.32574E04 1.28340E05 5.74627E04 1.65171E02 7.64554E04 2.96217E05 2.22701E05 3.21814E04 4.47848E05 2.50185E05 3.95672E04 5.19426E04 2.30861E05 6.13413E04 7.83142E04 2.81125E05 2.88560E05 1.26853E05 2.80107E04 2.66784E05 1.25057E05 6.06906E04 3.50892E05 2.79101E05 3.32660E04 4.01105E04 2.97131E04 1.15215E04 1.00742E04 4.26635E04 2.85805E04 1.77054E03 4.48218E03 1.59327E04 1.33907E04 2.39678E03 9.40960E03 6.33310E03 1.25824E04 3.03095E04 -Frame 257 4.44871E-02 1.34516E05 2.09733E05 1.95175E06 1.03830E06 8.23798E05 5.59469E06 7.23620E06 1.05526E06 1.56970E07 3.74164E07 8.39882E06 1.50108E07 6.20438E07 3.34659E07 1.06172E06 3.79912E06 3.67879E06 2.84595E05 1.48748E06 3.06302E06 5.79535E05 7.22209E05 2.10076E06 9.77756E05 5.55994E05 3.62474E06 3.98623E06 2.51581E06 7.23690E06 5.55343E06 3.59620E06 1.09880E07 7.29563E06 2.16683E06 2.83997E06 2.30604E06 6.36490E05 2.00545E04 5.23379E05 4.30498E05 3.60252E03 2.46551E05 1.96300E05 4.60028E04 1.46575E05 3.36700E05 9.75812E04 2.95101E02 7.35709E04 7.53424E04 5.61714E03 1.15308E05 1.07053E05 1.36422E04 3.43281E04 1.24539E05 3.42102E04 2.39520E04 1.35347E05 8.56601E04 5.22950E03 5.88346E04 4.69164E04 5.59322E03 2.30638E04 1.28357E05 6.33840E04 4.44166E04 4.43554E05 3.25469E05 1.38232E05 1.02006E06 1.81579E06 8.53918E05 1.37051E04 4.98760E05 2.45420E05 5.03601E04 2.13508E05 1.07248E05 4.88571E03 1.34871E04 4.31587E04 2.64499E04 3.44032E02 3.15607E04 2.48703E03 7.01816E03 6.16951E03 1.96129E04 5.05576E04 5.08717E04 3.43065E04 2.09050E03 5.08375E04 1.56020E05 5.85755E04 1.77201E04 9.28996E04 5.15844E04 1.50204E04 1.81615E05 1.58154E05 9.63658E03 8.64848E04 5.05740E04 4.61834E01 6.87960E04 1.42009E05 1.80442E04 2.80935E04 1.26656E05 2.35648E05 7.01806E04 3.53294E03 5.01703E03 1.03845E04 9.65788E03 3.67351E04 3.02629E04 6.49853E04 4.37008E04 1.21207E03 3.21411E04 8.89281E03 4.32911E04 6.60804E04 2.89688E04 6.72094E03 2.65811E04 4.09998E03 6.09055E02 9.82871E02 5.74531E03 4.02823E04 4.63720E04 1.80728E05 4.31749E04 2.19563E04 1.07530E05 6.43862E04 8.62888E02 3.69472E04 2.84989E04 1.00058E04 9.47304E03 2.18531E04 6.36503E04 2.00663E04 3.62355E04 7.78130E04 3.67188E04 2.17824E03 7.53065E04 1.15895E05 5.39725E04 2.14064E04 2.69281E03 2.73613E04 1.20327E05 7.90705E04 3.85515E04 1.92150E04 2.43667E03 2.62145E03 6.02914E03 6.40720E03 1.54067E04 2.48229E04 3.65034E04 1.44739E04 7.05508E03 4.05982E04 1.11257E04 9.20798E03 1.50864E04 2.51394E04 7.47916E04 3.95749E04 2.32002E04 6.03570E04 8.43647E03 2.34991E04 1.50075E05 1.64263E05 3.30502E04 1.40462E04 5.05924E03 2.37857E04 3.34817E04 3.67994E04 1.71435E04 1.57790E04 3.60081E04 4.49276E04 1.19578E04 3.74179E03 1.00309E04 2.77328E04 5.01651E04 2.52853E04 4.35952E04 4.43857E04 1.46689E04 2.20430E04 2.70190E04 1.65577E04 6.04944E03 3.12369E04 2.07576E04 4.12396E04 1.88085E05 1.62479E05 3.22236E04 1.30334E04 6.09796E01 4.79123E04 5.22120E04 2.07612E03 2.32380E04 2.55054E04 5.28525E03 1.18892E05 3.09457E05 2.00246E05 3.80684E04 1.60945E02 1.46098E04 8.12934E04 1.02206E05 6.76004E04 2.22322E04 2.94044E04 8.45110E04 1.25721E05 2.51833E05 2.64746E05 1.31287E05 1.63560E04 1.76105E04 7.96101E04 7.84043E04 2.72398E04 9.79489E03 9.24101E03 9.02863E03 1.78599E04 8.79658E03 3.59977E03 7.21277E03 1.03924E04 4.41162E03 1.24375E04 6.89892E03 4.17738E03 1.17790E03 -Frame 257 4.64241E05 2.16320E05 1.22182E05 1.54639E06 1.02861E06 9.77736E05 5.60100E06 5.70644E06 9.01632E05 1.36025E07 1.89356E07 2.03774E06 2.81578E07 5.95740E07 1.91513E07 4.88485E05 4.41255E06 2.34818E06 3.74792E05 2.06047E06 2.02879E06 2.20839E05 2.22395E06 3.22191E06 1.53097E06 6.41694E06 1.09705E07 3.82896E06 1.37000E07 1.30217E07 4.99987E06 5.25152E06 4.70245E06 7.92388E05 2.97760E04 3.16816E05 3.18533E05 6.32745E04 4.40222E04 1.36089E05 3.17105E04 2.24060E04 1.03883E05 4.50976E04 1.13459E04 1.36427E05 1.23406E05 2.37055E04 2.00572E04 1.74194E04 7.17523E03 7.38478E04 1.24313E05 4.07682E04 1.27676E04 5.64205E04 1.53169E04 5.46886E03 6.29547E04 4.37463E04 3.59189E03 6.88174E04 4.83421E04 2.15490E03 4.64928E02 7.32070E03 2.31185E03 7.95607E04 1.52993E05 2.34798E04 5.43380E04 2.84556E05 3.00026E05 1.07726E04 5.01592E05 6.05888E05 8.02693E04 2.55009E05 3.60885E05 1.45047E05 7.80167E03 1.61173E04 7.24061E03 2.18415E02 2.37413E03 4.45035E03 2.92398E04 4.03479E04 2.43318E04 1.06784E04 6.71211E03 9.10457E03 1.43258E04 1.33849E04 3.65154E04 6.14404E03 3.92182E04 5.75761E04 1.98080E04 7.37594E02 5.21197E04 4.44633E04 6.28150E02 6.16311E04 9.50698E04 4.12886E04 1.32217E03 1.82222E04 2.90123E03 4.21368E04 1.17711E05 1.18293E05 2.77788E04 3.77440E04 5.53488E04 8.03607E03 1.09006E03 5.06675E03 1.83048E03 1.19318E04 1.66016E04 4.18119E03 1.29197E04 1.19118E04 2.47544E04 2.17030E04 8.66037E03 3.70860E03 1.97292E04 1.27867E04 2.22394E04 3.19912E04 7.25526E03 2.70814E03 3.85794E04 1.68635E05 2.38385E05 6.87216E04 2.18829E03 5.10063E03 2.68475E02 2.88627E02 5.39234E03 9.15787E02 9.85099E03 8.42182E03 4.81177E03 3.90942E04 6.99386E04 5.39123E04 2.16526E04 1.28148E04 1.39654E04 8.03703E04 1.44382E05 6.54613E04 2.12663E04 1.08277E04 3.24794E04 3.09507E04 2.46368E04 2.35863E04 5.25315E04 7.44136E04 3.82286E04 2.01527E04 7.18158E03 4.56025E03 9.38509E03 1.45108E04 1.81022E04 4.89497E03 2.01614E04 1.36515E04 2.78700E03 3.15997E03 6.11864E03 4.90318E03 2.02801E04 3.76999E04 1.54454E04 2.98869E04 5.65607E04 1.02408E04 9.46245E03 3.35270E04 8.79217E04 6.98194E04 3.18799E04 1.25894E04 1.55742E01 1.38514E04 1.48298E04 6.63661E03 3.92219E04 5.59247E04 2.96383E04 7.27872E03 6.28629E03 1.02359E04 5.76793E03 4.00975E03 1.99429E04 2.24109E04 1.28294E04 2.99232E04 3.29543E04 1.19397E03 2.72044E04 3.45088E04 7.09412E03 3.95965E04 9.05737E04 5.71704E04 1.77602E04 3.63595E03 1.99167E04 2.04048E04 1.21152E04 8.31311E02 3.19418E04 3.58244E04 2.27401E03 2.15952E04 6.60576E04 1.47076E04 5.74919E02 7.12279E03 9.99391E03 2.06110E04 1.99214E04 2.56676E04 5.86160E04 2.06649E04 1.70781E03 1.09628E04 1.82204E04 3.17728E03 3.72505E03 4.24699E03 6.83001E02 1.63169E04 1.96294E04 6.81042E03 7.12486E02 4.73959E03 5.44261E03 6.63367E03 9.80836E03 4.39221E03 5.22322E03 6.22337E03 1.27876E03 5.05778E03 4.40555E03 4.38580E03 1.11548E04 -Frame 257 5.58628E05 2.16323E05 7.82222E05 2.36394E06 1.41965E06 1.45242E06 6.06043E06 4.50227E06 1.06878E06 1.15105E07 1.17661E07 2.65741E05 2.59949E07 4.30668E07 8.46317E06 8.90736E05 3.83346E06 1.28687E06 5.27191E05 2.18248E06 1.14503E06 8.15701E05 4.54961E06 2.97163E06 4.00039E06 1.80222E07 9.27222E06 5.23624E06 1.02438E07 3.11690E06 5.07171E04 4.12725E05 8.23786E05 4.11051E05 1.39470E04 1.52409E05 4.82679E04 4.16572E03 2.06846E04 3.54175E04 9.86778E03 1.22462E04 1.68312E04 1.90022E03 4.02444E04 9.61112E04 1.44849E04 9.10915E03 3.32463E04 1.28668E04 2.49243E04 3.47356E04 7.34685E03 1.94065E03 7.06177E03 2.10042E04 4.65833E03 1.13039E04 3.04490E04 7.07880E03 8.60965E03 5.30540E04 3.08973E04 6.03436E03 1.67405E03 6.07396E02 1.93589E04 7.03814E04 3.86915E04 1.57355E03 3.08749E04 6.75910E04 3.63725E03 2.07396E05 3.00641E05 2.54191E04 4.08891E05 7.78705E05 1.76991E05 1.42952E05 1.43541E05 1.93329E04 5.03720E03 9.89289E03 2.39485E03 8.69923E02 4.66880E03 3.22636E04 2.00608E04 1.84326E04 3.32348E04 2.71377E04 4.86160E04 2.00860E04 1.21126E03 2.98647E04 9.18539E04 3.67990E04 2.08258E04 4.97548E04 2.10602E04 9.45762E03 5.55065E04 3.16670E04 4.61764E03 3.73199E04 4.18730E04 7.23092E03 6.23632E04 1.25977E05 4.89537E04 6.39029E04 1.53204E05 8.01395E04 2.03726E03 1.60896E04 6.67814E03 5.51638E03 1.61663E04 2.41540E04 1.74451E04 1.54052E03 1.30080E03 1.02611E04 1.53282E04 1.34459E04 2.41923E04 3.20294E04 1.46526E04 3.16767E04 5.79150E04 1.03220E05 3.00006E04 9.93930E02 2.92628E04 4.49434E04 1.15386E04 3.90725E04 5.89365E04 2.49847E04 8.10934E03 5.17917E03 2.39902E03 8.47852E03 2.35793E04 5.75002E04 4.68059E04 7.99164E03 6.70734E03 1.40704E04 2.71627E03 5.30167E03 1.25686E04 2.70073E04 4.10968E03 5.31324E03 6.11838E03 1.33830E04 1.64736E04 4.96519E03 4.99508E01 1.46065E03 5.75969E03 1.44322E04 6.47688E03 3.61626E03 6.56690E03 1.32164E04 5.66310E03 1.04175E04 3.39705E04 6.15226E04 4.40844E04 7.00232E03 1.13179E04 8.09275E03 2.10192E04 1.59146E04 8.17011E03 7.73616E03 9.45610E02 1.18871E04 5.94137E04 4.98088E04 1.14078E04 1.73949E03 7.83025E03 9.18902E03 3.75098E03 4.13706E03 4.15930E03 3.44798E03 5.90461E03 9.61213E03 1.00253E03 8.88698E03 6.79569E03 9.42375E03 8.54413E03 5.15404E03 8.64080E03 3.34204E03 5.32138E03 1.35418E04 1.60648E03 7.09788E03 1.91469E04 2.45335E04 3.93898E04 3.16082E04 3.52765E03 4.60114E03 2.44895E04 1.74605E04 2.12521E04 2.85074E03 6.80256E03 5.74048E03 8.46715E03 1.78497E04 2.59339E04 4.51371E04 1.98794E04 2.15920E04 1.51513E04 1.01362E04 7.51244E03 1.30294E04 2.51255E04 1.43506E04 9.39814E03 1.01119E04 1.41896E04 7.62237E03 5.54002E03 1.39476E04 5.22010E03 7.08262E02 1.12462E03 3.47828E03 1.00773E03 3.48857E03 4.94377E03 9.44672E02 5.52796E01 4.38782E03 2.27600E03 4.80434E02 3.77109E03 2.59668E03 2.04455E03 3.26356E02 3.27594E02 1.66857E03 9.10712E03 2.43911E04 4.06272E04 -Frame 257 2.95786E05 1.32109E05 5.90417E05 2.38894E06 1.39789E06 1.76425E06 6.82844E06 3.89271E06 1.77337E06 1.13303E07 8.41892E06 1.46280E06 3.59588E07 3.73540E07 2.97281E06 2.15306E06 1.97668E06 1.13947E05 1.88206E06 2.21062E06 4.66316E05 3.44436E06 5.94601E06 3.12551E05 1.53815E07 2.65435E07 4.78233E06 7.72757E05 4.32169E06 1.24565E06 3.09045E05 7.81644E05 2.12463E05 1.01201E05 2.57305E05 8.51580E04 3.07722E03 5.97782E03 2.86095E03 3.70138E02 1.73121E04 1.31523E04 2.97143E04 7.02535E04 6.72574E04 6.94927E03 4.07825E04 2.71043E04 4.32397E03 7.62694E03 4.04718E04 3.30372E04 1.93978E04 3.71674E03 1.33875E04 1.10241E04 2.92990E03 3.19636E03 1.46407E04 1.79179E04 1.09092E04 1.45684E04 4.38418E04 1.47629E04 2.12689E04 1.39080E04 5.63652E03 5.96441E03 2.36067E04 1.79806E04 5.03090E04 1.68807E05 1.41616E05 5.95617E03 1.50817E05 3.17046E05 5.96948E04 2.57777E05 1.01108E06 5.97746E05 4.61424E04 7.77630E04 1.31909E04 1.50122E04 4.14975E04 5.16576E04 7.73737E04 8.66433E04 2.65560E04 3.05169E03 5.17257E04 5.32556E04 2.60079E03 2.34894E04 1.23154E04 3.70806E04 1.06296E05 4.20445E04 1.22142E04 6.30719E04 4.57079E04 8.45113E02 3.58297E04 4.27290E04 1.40852E04 5.26528E04 5.89547E04 2.41529E03 1.49141E05 1.15679E05 1.98006E03 5.36064E04 5.63212E04 4.62132E04 1.32422E04 1.78115E04 7.71586E03 3.84665E03 1.43051E03 3.12279E03 1.25541E03 8.16876E03 1.47637E04 6.97574E03 7.23193E03 5.86068E03 8.03098E03 3.06387E04 3.26940E04 1.84040E04 2.10214E04 7.83494E04 1.29418E05 9.52991E04 1.23593E04 8.45429E02 1.30870E04 2.41644E04 3.03566E04 2.83170E04 7.96822E03 1.69619E04 6.38034E03 3.91493E03 1.15958E04 5.13364E03 1.00390E04 3.50920E03 1.22525E04 2.50887E03 8.69764E02 1.77319E04 3.30347E04 1.20245E04 3.81008E04 2.93781E04 1.65952E03 1.46823E03 4.23732E03 3.27283E02 1.15159E04 2.30472E04 1.94395E04 2.37322E04 1.14493E04 4.21840E03 1.40432E04 2.76775E04 5.51297E04 4.74403E04 1.88557E04 3.59940E04 1.08943E05 1.08180E05 2.55842E04 1.65811E04 4.22967E04 4.80550E04 1.34695E04 1.06803E04 3.43437E04 2.24004E04 1.06151E04 4.24144E04 2.51646E04 2.87353E04 1.61882E04 1.18413E04 2.20721E04 3.48800E04 3.77242E04 4.03595E04 2.32644E04 1.76922E03 2.11178E04 2.86439E04 1.71574E04 4.18333E03 7.30541E03 3.43798E03 2.42231E03 1.01624E04 1.04374E04 2.45857E04 1.66058E04 3.54376E03 7.03499E03 7.80824E03 5.07581E03 4.18740E03 5.64032E03 1.45867E04 1.56557E04 1.74834E04 3.01461E04 2.46141E04 1.59596E04 1.48818E03 1.33502E04 1.47721E04 1.23122E04 2.55055E03 1.64982E04 2.97368E04 1.52452E04 1.01406E04 2.38187E03 1.16242E04 7.84028E03 1.47498E03 6.09899E03 3.06860E03 1.74275E03 8.16898E02 1.09403E04 2.62011E04 1.79595E04 9.68528E03 6.17467E03 4.56804E03 2.06568E03 1.45695E03 1.11584E04 5.67297E03 9.03232E02 8.00423E03 6.79882E03 4.04423E03 3.30572E03 5.38361E03 7.52629E03 2.49854E03 1.02574E03 4.34569E02 6.94804E03 8.23428E03 2.77789E03 -Frame 257 4.10629E01 1.13139E05 1.44254E06 3.39848E06 1.50991E06 1.95761E06 7.65199E06 3.83638E06 1.26060E06 9.20445E06 8.30615E06 1.38578E06 4.10473E07 6.25190E07 1.22786E07 3.93077E06 2.55692E06 2.03161E05 2.81043E06 4.40565E06 1.52373E06 7.02100E06 1.08558E07 5.73093E05 1.95258E07 4.37681E07 9.33678E06 1.94812E06 8.07592E06 2.37951E06 4.46257E05 1.21835E06 4.61824E05 1.24237E05 4.20517E05 2.36101E05 6.75650E04 8.01623E04 6.29747E04 7.37726E04 1.42329E05 8.76355E04 2.95653E04 1.17594E05 8.44055E04 7.12385E03 6.37444E04 6.17402E04 2.01497E04 1.07683E04 8.96859E03 1.97904E03 5.09832E04 7.98171E04 3.97366E04 3.66536E03 7.89111E03 6.10565E03 6.84243E03 7.23434E03 2.52416E03 2.93496E04 5.06333E04 1.79614E03 3.31607E04 4.70538E04 1.61291E04 1.10688E04 1.94919E04 1.98380E03 5.88758E04 1.59494E05 6.33599E04 3.71080E04 2.39678E05 1.85071E05 6.76555E03 4.46663E05 5.17858E05 9.48963E03 5.10839E05 8.38817E05 3.16695E05 1.31639E05 1.59504E05 3.41615E04 4.25691E04 1.24483E05 4.15294E04 3.54220E04 4.47254E04 1.06694E04 2.11352E04 6.90213E04 2.78361E04 1.72860E04 8.10508E04 4.29448E04 1.07663E04 7.22496E04 3.01265E04 1.22087E04 6.97607E04 9.72329E04 2.03846E04 8.65113E04 5.61957E04 5.13321E04 4.20491E05 5.83005E05 1.90117E05 2.45855E04 4.20286E04 6.48283E04 1.98489E04 5.95240E03 7.50800E03 3.40546E03 8.08552E03 4.12260E03 2.36325E03 3.72149E03 1.25561E03 1.30674E04 1.23121E04 1.42311E04 1.56798E04 1.26840E03 3.73966E03 3.61647E04 4.50237E04 3.49769E04 9.53078E04 1.01801E05 3.83213E04 2.88148E04 3.80746E04 3.93160E04 5.12556E04 4.72654E04 1.69023E03 1.05176E04 8.61886E03 1.22404E04 2.22770E04 2.02356E04 2.39267E04 3.71648E04 6.06354E04 5.59153E04 2.29340E04 2.24355E04 5.21902E04 1.04145E05 1.17471E05 4.13379E04 5.19822E03 2.84801E03 1.08129E04 2.83779E04 3.67792E04 2.13120E04 9.74233E02 2.19027E04 1.30034E04 2.35771E02 1.27668E04 2.13924E04 6.06080E03 1.03146E04 4.80722E03 2.68499E03 1.83493E04 5.39289E04 2.87250E04 7.93146E03 1.68654E04 3.02806E04 7.58974E03 7.44643E03 6.71111E02 1.21534E05 2.97348E05 1.83589E05 7.31928E04 1.37229E04 7.17519E03 1.87592E04 1.18969E04 4.31359E04 2.18207E04 1.49013E03 1.63614E04 3.87701E04 3.10986E04 6.15248E03 1.17769E03 1.36740E04 1.40647E04 9.40447E03 4.21047E03 1.24675E03 5.76860E03 3.05312E04 7.35162E04 5.18554E04 3.15050E04 9.14073E03 1.04400E04 2.26476E04 5.62138E04 6.80111E04 2.29335E04 3.08939E03 1.30712E03 1.40473E03 2.26211E03 1.25247E04 3.25518E03 5.34988E02 8.61702E03 2.52772E04 1.73522E04 3.79165E03 9.72286E02 7.25249E03 1.94792E04 1.41628E04 7.16640E02 1.68741E04 7.96056E03 4.58010E03 1.21960E04 1.89534E04 1.13849E04 1.11371E03 1.14152E03 7.00721E02 2.86640E03 1.07151E02 1.85418E02 4.08149E03 9.02162E03 1.49985E04 1.16897E04 3.29949E03 9.16848E02 1.08997E04 1.07634E04 1.09599E04 3.73348E03 1.12695E04 2.07492E04 2.24974E04 6.81213E03 2.57639E03 4.95427E03 -Frame 257 2.13190E04 3.13269E04 1.54499E06 3.64733E06 1.45488E06 1.85931E06 8.27493E06 4.62550E06 7.29650E05 5.86006E06 6.34981E06 2.48527E05 3.54306E07 7.61749E07 1.84460E07 5.57646E06 1.56604E07 5.38196E06 8.40627E06 1.23200E07 3.20612E06 6.40581E06 1.77446E07 4.56139E06 1.38249E07 6.75258E07 4.64939E07 1.46333E06 1.84963E07 1.93223E07 2.35242E06 2.33421E06 9.26542E05 2.43296E05 8.62377E05 6.45056E05 4.39528E04 1.49502E05 1.94196E05 6.22722E04 2.67108E05 3.63815E05 5.06045E04 3.08147E04 1.59464E05 5.38826E04 6.29455E04 1.54193E05 5.82453E04 2.11850E04 6.38779E04 3.97684E04 3.78452E04 8.75509E04 6.03293E04 1.74917E04 6.47421E04 3.68660E04 7.08174E03 3.51396E04 5.07556E04 4.19662E04 1.32375E05 1.49979E05 2.50800E04 1.92628E04 7.31920E04 4.13217E04 3.77036E04 1.00611E05 5.31826E04 9.17877E03 1.35838E05 9.19515E04 6.27331E04 3.06612E05 1.90928E05 1.35876E04 3.96085E05 4.23610E05 7.46838E03 1.21584E06 2.38353E06 8.96214E05 2.36923E05 4.63188E05 1.43609E05 3.61453E05 2.68147E05 8.02192E04 1.21412E05 1.15116E05 2.61118E04 7.54529E04 1.17635E05 5.51187E04 2.84105E04 9.18541E04 1.58562E04 7.47394E04 2.50970E05 2.16110E05 1.93724E05 3.47734E05 9.43109E04 1.97713E05 1.14158E06 1.09668E06 4.36015E05 1.31469E06 5.62224E05 1.64662E05 2.12895E05 3.30375E05 1.82760E05 5.75772E04 9.36273E03 1.03787E03 1.56212E04 2.23267E04 1.91062E04 2.22423E04 1.83782E04 1.47002E04 1.03793E03 7.43794E03 4.92014E04 5.48002E04 7.89163E04 1.05669E05 5.71778E04 3.64034E04 2.07740E04 2.83900E04 2.92486E04 6.75353E04 2.83017E04 2.19577E04 5.51567E04 2.69182E04 6.08706E03 1.64142E04 1.42244E04 9.36251E03 1.77494E04 1.41808E04 2.46666E04 6.15443E03 3.52014E04 5.59326E04 3.21170E04 1.17038E04 1.05574E04 2.52829E04 4.20702E04 4.69941E03 6.53742E03 1.01925E04 5.73641E03 4.50621E02 1.05075E04 2.39691E03 6.01128E03 2.94024E04 1.88612E04 1.28098E03 3.49729E03 1.13921E03 1.47422E04 3.48853E04 1.92929E04 2.01602E03 5.42789E03 6.50164E04 8.76966E04 8.92617E04 1.69467E05 9.22450E04 9.15590E04 1.20824E05 2.12684E04 1.49631E05 4.36368E05 1.69934E05 1.47886E04 4.19497E04 1.09610E04 1.11313E03 2.49348E04 2.54341E04 7.74500E02 2.09307E04 1.70382E04 2.55442E04 1.16891E04 6.08413E03 1.12904E04 8.17512E03 6.47590E02 6.99753E02 7.55939E03 8.12466E03 1.82845E03 1.81141E04 3.05501E04 2.33112E04 4.36912E04 3.90352E04 2.09416E04 1.02864E04 3.58589E04 1.35419E04 2.58029E04 3.77326E04 3.67688E04 3.33653E04 2.02884E04 3.71512E03 4.31935E03 1.21547E04 3.29485E04 2.68230E04 6.88932E03 1.00792E04 1.00995E04 6.27735E03 1.85888E03 1.32543E04 6.21087E04 5.43070E04 1.65129E04 4.58192E03 6.10913E03 1.77591E03 6.13549E03 2.47718E03 1.98277E03 9.75785E03 1.34548E04 8.68875E03 2.39470E03 2.28920E01 1.40094E01 6.76255E02 5.91939E03 4.26881E03 6.16530E01 5.43914E03 4.29344E03 5.05101E03 1.20887E04 7.00277E03 2.68478E02 8.75368E03 2.51251E04 1.11102E04 1.43662E03 -Frame 257 6.08807E03 7.88454E04 4.02483E05 2.40172E06 1.46035E06 1.66895E06 9.03412E06 5.57147E06 6.41500E05 3.97057E06 3.72785E06 6.67610E05 2.44502E07 4.15559E07 7.48421E06 2.45963E07 7.40789E07 3.34719E07 7.22429E06 2.04644E07 4.66496E06 1.09937E07 3.17493E07 1.10914E07 5.12511E06 4.91134E07 4.24488E07 4.43186E06 8.82415E07 1.65845E08 6.25885E07 1.18365E07 7.64501E06 1.42766E06 2.12945E06 1.46964E06 2.01265E05 2.83323E05 3.45766E05 8.49579E04 5.34267E05 6.69928E05 2.79863E05 1.84289E05 3.87300E05 8.33318E04 6.57392E04 2.90408E05 1.47352E05 1.08814E05 3.89575E05 1.63657E05 5.72202E01 6.07716E04 3.99314E04 6.10022E04 2.54154E05 2.72408E05 4.02371E04 5.00797E04 4.94962E04 1.59723E03 3.18603E05 3.97500E05 6.10179E04 6.33576E04 1.54553E05 2.80366E04 6.13547E04 1.12943E05 3.37743E04 3.16532E04 2.45515E05 1.47088E05 1.19033E04 1.70718E05 1.84247E05 2.72143E04 4.39887E05 4.12121E05 2.74643E04 6.74994E05 1.52212E06 1.86674E05 1.64186E06 5.06432E06 2.80882E06 2.46260E05 3.80594E05 1.14254E05 2.93401E05 8.24159E05 4.30834E05 1.03517E05 2.45387E05 1.35009E05 1.12546E05 4.35585E05 3.22609E05 1.23261E05 6.15541E05 7.71189E05 3.91568E04 8.57523E05 1.42952E06 3.82749E05 2.73329E06 6.38991E06 2.48188E06 6.76384E05 3.93675E05 1.17680E05 1.24754E05 3.14577E05 1.26474E05 1.93950E04 5.32282E03 1.55874E02 9.16168E01 9.77457E03 1.35691E04 1.65994E03 2.51858E03 1.17215E04 2.33698E03 7.01263E04 7.91875E04 4.98280E04 1.24262E05 4.52986E05 5.48313E05 5.98622E05 4.33878E05 2.21269E05 1.73047E05 1.84666E05 2.22738E04 5.75500E03 8.87335E03 3.39734E03 2.97299E04 3.31844E04 3.71378E03 1.88108E04 1.78603E04 2.34073E03 2.57434E04 4.56541E04 1.48181E04 1.03342E04 2.07732E04 2.74278E03 1.00198E04 3.63487E04 9.18851E03 1.04573E04 8.60493E03 4.04760E03 3.94965E03 2.55274E03 1.69553E04 8.01144E03 9.25935E03 8.69666E03 1.44761E04 6.72376E04 6.75828E04 3.57473E04 6.93863E04 1.30012E05 5.91213E04 1.24011E04 7.92445E04 8.08737E04 9.47647E04 4.64757E05 7.75889E04 2.83449E04 1.62644E05 3.84872E05 7.04610E03 2.92663E05 3.07333E05 3.12586E04 3.07833E04 1.68242E05 1.30306E05 4.53636E04 8.77321E04 1.24540E05 3.04799E04 3.38725E04 5.89349E04 4.30637E04 1.74848E04 7.30379E03 6.59742E03 9.42037E03 6.57691E03 7.46355E03 2.76189E03 1.02024E04 1.24020E03 1.16714E04 8.92813E03 4.31294E03 2.30843E04 1.04074E05 5.06903E04 4.05878E04 2.52279E04 1.21971E04 9.76216E04 1.15474E05 2.09956E04 5.02097E04 6.67710E04 1.81821E04 1.91760E04 5.51973E04 2.72904E04 1.34793E03 5.03984E03 2.93801E03 4.00623E03 1.75756E03 8.37013E03 3.37533E04 3.61498E04 2.93781E03 4.51829E03 1.46927E04 1.77776E04 5.56660E03 4.73620E02 5.19552E03 5.32720E03 2.18349E03 4.03382E03 2.64959E03 3.15610E03 9.95206E03 9.39726E03 9.98916E03 3.87200E03 6.08294E02 5.18970E03 1.08820E03 1.19049E03 1.09169E04 5.55189E03 1.37971E03 4.84571E03 1.38380E03 5.64943E03 9.32177E03 2.79073E01 -Frame 257 3.54188E05 1.37329E05 8.86700E05 2.22434E06 1.09920E06 1.99231E06 1.06418E07 5.80105E06 5.43332E05 2.91599E06 2.43718E06 3.87022E05 1.12910E07 1.03592E07 1.15416E05 3.55276E07 1.09279E08 4.29040E07 1.11143E07 3.88501E07 1.03520E07 1.91151E07 4.87027E07 1.44738E07 3.43263E06 1.78085E07 3.38258E06 2.15700E07 1.23494E08 1.38960E08 6.77788E07 1.10052E08 1.45202E08 7.10286E07 3.65279E07 2.15314E07 3.47462E06 1.22472E06 1.03492E06 2.45903E05 1.22644E06 8.38818E05 2.56789E05 8.55936E05 8.57695E05 4.31317E04 1.04491E05 5.42805E05 1.85400E05 3.52170E05 6.84006E05 2.66030E05 6.08610E03 1.98288E05 1.63403E05 2.79123E05 7.38649E05 4.18069E05 4.47336E04 1.53154E05 9.43207E04 6.91500E04 7.06453E05 7.04253E05 1.78691E05 3.82872E05 3.05987E05 3.01698E02 8.03352E04 1.13818E05 4.64096E04 2.35169E05 2.23279E05 3.57689E04 5.19203E04 2.06405E05 1.40617E04 3.18374E05 6.95506E05 2.32685E05 3.37492E04 4.41153E05 1.08216E05 4.98625E05 3.55520E06 5.69205E06 5.06559E05 2.06143E06 1.23356E06 2.92536E04 1.16305E06 2.04212E06 5.49475E05 6.11564E05 4.40235E05 4.40113E04 4.68278E05 1.14904E06 4.29008E05 8.36818E05 1.39306E06 3.06865E05 4.14083E05 1.24309E06 2.71302E04 3.01233E06 8.49041E06 5.75048E06 8.46232E05 9.81678E04 1.53720E05 6.62085E04 6.17482E05 3.98034E05 3.56542E04 3.21198E04 3.27693E04 2.00874E04 5.98604E03 3.97065E03 1.32410E04 1.08243E04 2.14967E04 7.62863E04 1.29817E05 2.63881E05 1.67762E05 1.39695E05 6.28678E05 1.28729E06 1.30986E06 3.40808E06 4.64418E06 1.84243E06 9.59288E05 7.77256E05 3.27200E05 8.09012E04 3.13884E04 6.66733E03 2.58377E04 6.74661E04 2.75804E04 1.95317E03 8.14498E03 9.32127E03 1.66251E04 1.11830E04 1.21281E04 1.42686E04 4.48140E03 8.87611E02 5.18471E03 1.21044E04 1.48767E04 9.73081E03 2.38419E03 9.49535E03 1.81031E04 7.89905E03 1.50156E04 2.72576E04 4.32388E04 1.99356E04 3.95595E04 1.33771E05 7.39144E04 1.16200E05 1.66341E05 2.89586E03 3.55070E04 1.24262E03 1.35452E05 8.59519E05 1.91661E06 1.94959E06 1.28450E06 9.32414E05 1.19632E06 1.64690E06 2.12397E06 2.02152E06 8.71289E05 3.19023E05 5.00301E05 5.93680E05 2.65577E05 3.26708E04 4.78246E04 1.19471E05 2.25937E05 1.53601E05 3.12410E04 2.81859E04 5.23990E04 7.57901E04 7.25585E04 7.94150E04 9.81725E04 1.10320E05 7.63170E04 2.89420E04 7.60925E03 6.89890E04 1.13296E05 6.20145E04 1.22495E05 2.06430E05 7.96112E04 2.01913E04 8.68337E04 1.03129E05 1.12509E05 1.77793E04 4.48479E04 1.05612E05 6.83048E04 3.69440E04 3.29252E04 2.04728E04 1.61698E04 5.34219E03 7.99170E02 1.18936E03 4.10116E03 8.26732E02 5.30996E03 6.49746E03 6.47180E03 4.01382E03 3.93257E02 4.98071E03 7.71825E03 2.83082E03 3.17139E02 5.47456E03 5.59413E03 5.55190E03 4.42286E03 9.79201E03 7.02745E03 1.39812E03 1.72724E04 7.48030E04 7.09493E04 4.08659E04 4.14123E04 6.61444E04 5.14211E04 3.16175E03 2.01294E04 1.73604E04 2.58374E04 4.35488E04 3.00692E04 2.17257E03 4.90813E-01 -Frame 257 1.03278E06 6.68610E05 8.56676E05 1.89736E06 1.10580E06 2.23165E06 1.22318E07 6.53329E06 6.45098E05 2.77085E06 2.48605E06 2.50061E05 6.59331E06 6.02309E06 3.56533E05 3.27045E07 6.84359E07 1.82321E07 3.06232E07 5.98279E07 1.29366E07 2.31931E07 6.28487E07 2.04759E07 7.23147E05 1.28554E07 6.47183E06 8.54716E06 4.23400E07 1.66378E07 8.58435E05 4.14622E07 1.36740E08 1.24558E08 1.43594E08 1.85798E08 1.17938E08 6.02175E07 5.23428E07 1.83013E07 5.45574E06 3.23830E06 3.62694E05 3.18980E06 4.94296E06 1.71284E06 6.46841E05 1.38206E06 3.75553E05 4.23024E05 1.26809E06 4.05918E05 5.77060E05 1.25698E06 8.39435E05 8.89101E03 6.13326E05 4.08129E05 1.53399E05 1.02364E06 7.76421E05 4.29195E04 3.18437E05 6.03617E05 4.72338E04 9.01131E05 7.68896E05 1.57568E05 5.23753E04 1.09895E05 1.40142E04 1.09395E05 3.69935E05 1.27480E05 3.03843E05 6.42046E05 3.38879E05 4.52438E04 4.22197E05 2.74219E05 2.97515E05 1.23098E06 1.16415E06 2.80633E05 1.55041E06 9.91535E05 5.40203E06 1.35475E07 1.13783E07 2.81400E06 2.37911E06 4.01514E06 1.13528E06 4.36285E05 5.41513E05 1.75622E05 8.25295E05 2.33349E06 9.86881E05 4.48342E04 8.98154E05 2.62588E05 5.48811E05 2.62602E06 2.06050E06 1.33572E05 3.00820E06 3.96435E05 1.04111E06 1.55101E06 9.24568E05 7.53470E03 4.78981E05 3.26992E05 7.61768E03 4.71939E04 9.01387E04 5.17540E04 1.88127E04 7.85282E03 1.71895E04 2.20028E04 2.53471E04 1.21551E04 1.95995E04 1.62844E05 5.91679E04 2.40206E04 1.15141E05 2.33945E05 7.82549E05 1.93431E06 1.63625E06 6.39956E05 1.24429E05 2.84677E05 9.92090E04 2.58395E04 5.34013E02 3.19564E04 7.91028E04 4.82335E04 6.76440E03 3.57384E04 3.43299E04 6.98996E03 8.79542E02 1.72634E03 1.71377E04 2.11751E04 7.83124E03 1.47391E04 5.12958E03 9.03145E03 6.24192E03 5.62743E03 1.29329E04 1.55103E04 4.73716E03 5.43765E03 2.86463E04 3.76836E04 7.78877E04 1.21861E05 1.09787E05 2.29890E04 2.64465E05 4.12224E05 1.20695E05 2.17512E05 4.88857E05 3.74332E05 4.90744E05 3.04238E05 4.92489E05 5.05435E05 2.45475E04 6.10066E05 7.13916E04 1.52159E05 1.79300E05 6.12384E05 1.10934E05 1.58385E05 8.99945E03 1.01567E05 2.97085E04 3.46154E03 3.25906E04 3.95606E04 6.01661E04 9.11168E03 3.14142E04 6.06528E04 7.99684E04 6.50722E04 7.66128E04 8.80792E04 7.79174E02 7.29745E04 7.04242E04 2.09229E03 6.66123E04 1.31233E05 5.17939E04 5.01146E04 1.29594E05 8.76135E03 4.77610E04 9.90935E04 3.85134E04 5.76383E03 2.57485E04 2.13158E04 2.39316E04 1.21916E04 3.00585E02 2.32497E03 3.34808E03 2.88205E03 1.95072E03 1.94976E02 9.17505E02 2.71545E03 5.36912E03 3.00067E03 6.51625E03 6.36324E03 1.53686E03 7.39950E02 2.51064E03 2.32335E03 5.99717E03 5.22754E03 1.77009E03 4.35840E03 2.89345E03 3.81308E03 3.48597E04 2.85303E04 4.96132E03 1.62568E04 3.23473E04 6.76449E03 6.08810E04 4.07562E04 4.55603E04 7.53904E04 4.51487E04 6.96503E04 9.20972E04 2.22221E04 2.67407E04 6.65060E04 6.99056E03 3.70872E04 4.68810E04 -Frame 257 6.02227E05 3.97742E05 8.61364E05 1.97656E06 9.96966E05 2.72728E06 1.25603E07 5.66493E06 3.17390E05 3.01242E06 1.70294E06 7.91213E05 6.06515E06 4.19806E06 1.51942E06 2.43782E07 1.65850E07 6.61742E06 5.12443E07 6.10111E07 5.60164E05 4.71734E07 4.92974E07 1.24743E06 1.59243E07 1.79615E07 1.43251E06 1.34846E07 2.06110E07 1.63301E06 1.29679E07 2.68688E07 2.95285E06 6.74862E06 2.35475E07 3.59048E07 4.11309E07 1.51159E08 1.81487E08 9.04247E07 2.81310E07 1.66633E07 1.70176E07 3.72606E07 2.15968E07 4.19526E06 7.87578E06 2.18279E06 1.17829E06 4.93079E06 1.95680E06 6.77328E05 3.16033E06 1.39775E06 3.44311E05 1.51928E06 9.96032E05 4.11894E05 2.61354E06 1.46412E06 5.02943E04 9.65651E05 8.44738E05 2.19911E04 1.01746E06 1.65955E06 3.45950E05 2.18738E05 3.45866E05 6.25998E04 1.62677E05 3.25919E05 4.75697E04 6.90684E05 1.40518E06 2.16851E05 6.30231E05 1.17145E06 3.55373E05 1.12376E06 2.60770E06 8.07684E05 3.31067E06 4.12775E06 5.32172E04 4.98808E06 1.29907E07 7.46278E06 1.78621E06 6.00090E06 7.82799E05 1.96675E06 3.04347E06 9.97939E05 1.35903E05 1.32934E06 3.08847E05 8.71872E05 1.89891E06 2.02088E05 6.98921E05 2.03203E06 1.10922E06 3.36753E05 1.76757E06 1.39890E06 1.37216E06 3.86319E06 4.36973E06 1.97584E06 1.08091E06 9.18482E05 2.00806E05 9.51634E04 2.28634E05 2.80623E04 3.67575E04 3.27268E04 2.16976E02 4.54642E03 5.17390E04 2.26335E04 6.81762E03 2.43769E04 1.96860E03 7.76907E04 1.39127E05 7.09742E04 6.46935E04 3.91822E04 6.43465E04 9.83185E04 4.25936E04 6.22170E04 3.47669E05 5.25884E05 4.76942E05 3.26266E05 2.13259E05 2.75348E05 2.20703E05 7.39651E04 8.99902E04 1.57696E05 3.65426E04 5.42899E03 9.10935E03 2.81381E04 8.20759E04 3.73412E04 3.18662E03 1.33088E04 8.87505E03 2.17367E03 1.88835E03 4.04577E02 9.77609E02 6.42921E02 9.23034E03 5.86976E04 9.67439E04 4.52283E04 7.70881E03 5.26923E04 1.27762E05 2.93983E05 2.08437E05 1.03668E04 1.21838E05 1.45686E05 8.03022E05 2.37673E06 1.49433E06 4.93688E05 7.14895E05 5.81513E05 1.52553E04 4.32510E05 1.06826E06 4.87556E05 3.86710E04 3.99094E05 8.07937E05 5.39554E05 1.59846E05 1.19597E04 4.49095E03 7.85641E02 1.84347E04 6.51942E04 3.74594E04 5.97536E03 4.71483E04 1.29776E05 3.35826E04 4.27548E04 1.13904E05 5.29723E04 3.31069E03 3.30509E04 3.71264E03 4.16615E04 1.77780E05 1.26972E05 3.98589E03 4.79778E04 8.83449E04 6.12861E04 2.18068E04 6.06195E03 1.90530E04 1.88156E04 6.30902E02 3.90343E03 1.69916E04 1.69493E04 3.85220E03 4.34548E03 8.41858E03 1.43464E03 1.04034E04 1.43603E04 1.71322E04 1.27146E04 3.48541E03 5.55536E03 9.38807E03 6.30672E03 1.42584E04 1.00594E04 5.47205E02 5.68786E02 2.18903E03 1.29501E03 3.37531E03 5.33120E03 1.35926E03 1.69407E04 2.68013E04 6.36980E03 2.78609E04 7.95324E04 4.12959E04 2.15863E03 5.22248E04 1.32546E05 1.18635E05 1.10292E05 1.96684E05 2.32479E05 6.84807E04 6.62503E04 1.11390E05 4.37222E04 5.69847E04 5.74010E04 3.13720E04 -Frame 257 5.11997E04 2.40609E05 1.16719E06 2.45554E06 7.42856E05 3.33978E06 1.16646E07 3.73889E06 3.80841E05 3.31070E06 9.42124E05 1.35197E06 6.09886E06 2.29645E06 3.26564E06 1.58781E07 4.29397E06 1.55518E07 7.38021E07 3.93470E07 1.11806E07 5.97100E07 2.67395E07 1.70021E06 2.38404E07 1.39908E07 3.71152E06 1.44665E07 7.66076E06 1.57396E06 1.32541E07 6.86103E06 9.77372E05 7.87001E06 4.94578E06 1.09370E06 9.30671E06 8.47031E06 6.46721E06 1.70282E07 4.69362E06 1.90006E06 3.87709E07 1.16079E08 6.26945E07 2.62642E06 2.40282E07 5.33436E06 1.85721E07 2.71627E07 4.24206E06 9.00735E06 7.75595E06 1.11497E05 3.37434E06 2.55038E06 1.49843E05 4.53825E06 4.63377E06 1.24048E05 1.19178E06 1.20434E06 1.24420E05 2.22013E06 2.14791E06 1.17473E04 1.02305E06 9.00590E05 4.68215E04 5.40741E05 3.41339E05 6.92618E04 1.42144E06 1.77344E06 1.02197E05 2.82514E06 2.27594E06 1.41657E05 4.41292E06 2.64444E06 2.58896E05 4.22656E06 5.82308E06 5.81359E06 1.07813E07 1.06633E07 2.45732E06 1.80265E06 3.98338E06 1.37795E06 1.73389E06 2.60434E06 7.30883E04 2.21162E06 2.99930E06 4.51528E05 1.10004E06 1.70089E06 1.53714E05 1.10782E06 1.31776E06 6.53482E04 6.10609E05 5.47943E05 7.19520E04 6.75441E05 4.67235E05 3.35129E05 6.43655E05 1.32443E05 3.87501E04 9.07151E04 2.36388E05 2.04855E05 1.61007E05 2.02816E05 1.34338E05 4.82870E04 1.44226E04 1.83986E03 3.54666E04 5.71153E04 2.38764E04 1.27280E04 2.96647E04 6.09006E03 2.87695E05 4.42208E05 1.59845E05 3.11171E05 3.12933E05 7.21670E04 4.42735E04 9.34691E04 2.93808E04 7.72379E05 1.73358E06 5.33074E05 3.03522E05 7.18987E05 2.23627E05 5.72670E04 1.89904E05 3.41869E05 1.53054E05 1.34793E05 1.83203E05 5.47963E04 3.64078E04 4.35090E04 3.38864E03 2.57338E04 2.21791E04 1.58477E04 1.47705E04 7.46693E03 1.74506E04 1.23709E04 1.02067E04 4.68836E04 6.52935E04 9.67284E02 2.08589E04 1.13750E04 1.92307E04 2.97499E04 9.66557E04 3.79513E04 4.71206E04 2.53800E05 9.87331E05 8.80153E05 8.05443E05 2.80633E06 2.29561E06 8.54558E05 4.98727E04 5.59974E05 1.04096E06 1.70905E05 3.37760E05 6.22841E05 3.34385E05 1.79097E05 7.82175E04 7.41189E03 3.90210E04 2.47296E04 1.37602E04 4.77059E04 5.73804E04 1.70698E04 2.01168E04 1.08160E05 1.14229E05 1.79556E04 1.09949E04 1.99545E04 8.15979E03 7.05332E04 6.04599E04 4.06236E03 8.08613E04 8.72049E04 2.07555E04 3.12965E04 1.09793E04 4.10751E03 4.96966E03 3.70840E03 4.46460E03 1.77793E03 1.78751E03 4.75309E03 4.71896E03 1.48033E04 9.99628E03 3.25874E03 2.48864E04 2.26703E04 1.13219E04 1.40564E05 1.86350E05 4.49680E04 3.01666E04 5.81006E04 1.39911E04 1.20341E04 5.87613E04 1.04393E05 6.91449E04 5.51330E04 3.64811E04 8.61588E03 4.13170E03 1.89877E04 3.86734E04 1.19436E04 5.37169E03 1.16783E04 1.55663E04 8.83894E04 5.18621E04 4.58871E04 2.82647E05 4.02774E05 1.75162E04 3.97276E05 6.22818E05 6.30181E04 3.99637E05 4.50040E05 8.36985E04 3.48116E04 6.16025E04 3.91824E04 7.90450E03 -Frame 257 4.01860E05 9.60306E04 4.46844E05 2.10008E06 5.95240E05 2.97103E06 1.07230E07 4.03328E06 2.77683E05 3.16077E06 8.85349E05 1.44586E06 6.34248E06 2.16746E06 3.49754E06 1.28446E07 6.12748E06 2.46112E07 6.33026E07 2.85255E07 1.38337E07 4.00095E07 2.11208E07 2.78569E06 1.37172E07 8.87702E06 4.09246E06 9.42458E06 6.31789E06 4.31424E05 6.37548E06 4.42457E06 3.59510E05 2.77159E06 2.05990E06 3.31765E05 2.92468E06 2.29543E06 1.39918E06 4.82844E06 3.39247E06 1.61870E06 1.82001E07 3.14382E07 2.13779E07 6.89672E07 9.24664E07 5.57907E07 7.96310E07 1.02425E08 1.99767E07 7.93419E06 1.99584E07 2.85112E06 4.12099E06 6.36017E06 1.23189E05 5.99939E06 9.16476E06 7.20749E05 1.43219E06 1.97971E06 1.05483E05 3.82723E06 4.96135E06 3.58398E05 1.49972E06 1.41495E06 1.26152E05 8.32694E05 3.72789E05 1.84478E05 2.04391E06 2.62959E06 8.88803E05 2.47044E06 4.37429E06 2.73362E06 3.27472E06 4.22734E06 1.60793E06 8.80122E04 8.26692E05 7.59009E05 2.02090E05 3.53121E06 1.03864E06 1.63711E06 5.08681E06 2.02769E06 5.02268E05 2.95542E06 8.12152E05 2.13379E06 5.36641E06 1.60464E06 7.13749E04 1.35814E06 8.52606E05 5.31768E05 2.14872E06 7.34233E05 4.24038E05 1.34131E06 9.11728E05 1.41558E06 2.09758E06 1.14566E06 1.54641E05 1.54339E05 2.31449E05 2.27968E05 1.23920E05 1.87167E03 1.58988E04 2.38876E04 9.56155E03 5.43289E04 2.16599E04 4.41193E03 2.48702E04 9.69110E03 3.55631E03 2.49258E04 3.77068E04 2.90855E04 3.86682E05 5.05617E05 3.64742E02 4.06143E05 3.10198E05 7.62864E04 4.57308E04 2.77303E04 3.92395E04 6.27780E05 7.17923E05 1.95866E05 2.65024E05 4.64987E05 1.82497E05 4.77314E04 5.98461E04 1.68718E05 2.43367E05 2.69858E05 2.40800E05 1.31758E05 8.62279E04 1.85328E04 8.86903E03 2.49176E04 4.36783E04 4.56497E04 4.61866E04 1.69417E04 4.48016E04 8.53771E04 2.90278E04 6.81317E04 1.77780E05 1.57493E05 5.45156E04 3.34662E04 5.06873E04 7.56618E04 6.13902E04 1.65007E04 9.28585E03 2.60695E05 6.45289E05 7.90200E05 6.94948E05 3.34805E05 1.22729E04 8.36711E04 6.17606E04 3.24400E05 4.51979E05 3.31535E05 1.01803E05 1.19488E04 1.19057E04 1.59018E04 3.46943E04 7.02187E04 5.88995E04 1.44434E04 2.27288E04 5.03341E04 2.40123E04 1.25150E04 2.42118E04 1.15326E04 2.78770E04 7.34551E03 2.35957E04 4.88445E04 5.06363E04 2.55300E04 3.70786E04 4.80374E04 7.00529E03 9.30574E03 1.44243E04 1.97210E04 5.79695E03 4.33607E03 1.58556E04 1.87245E04 7.86979E03 4.28910E03 5.81013E03 3.99564E03 1.24544E03 1.12977E04 1.62884E04 4.84040E04 1.40954E05 1.34601E05 1.08471E04 1.26667E05 2.37251E05 4.57824E04 9.23030E04 1.13898E05 1.11080E04 6.09952E04 1.59548E05 1.08091E05 6.49100E04 7.07648E04 1.87095E04 1.66281E04 2.84866E04 4.93407E04 5.18832E03 4.06825E04 4.12547E04 1.63272E03 4.14695E04 7.08251E04 1.00791E04 8.08870E04 1.34063E05 2.52332E05 5.47394E05 1.36061E05 3.76311E05 8.58826E05 4.61534E05 9.35702E04 1.80588E05 1.37906E05 5.56729E04 6.12191E04 2.97451E04 -Frame 257 1.28891E06 4.93416E05 3.43130E05 1.08855E06 1.44607E05 2.34586E06 4.74811E06 1.75705E06 2.04389E06 1.29811E06 1.11071E06 1.93620E06 1.00678E06 3.26424E06 7.79058E06 5.72241E06 6.70619E06 1.39722E07 1.59595E07 1.35650E07 1.28777E07 1.07633E07 6.17459E06 4.39009E06 3.47998E06 2.62662E06 2.04108E06 2.28812E06 2.35609E06 2.64603E06 2.26112E06 1.50305E06 1.22870E06 9.64583E05 1.26204E06 1.68767E06 8.20436E05 4.70017E05 7.63603E05 3.14784E05 4.16938E05 1.84767E06 2.99334E06 3.95766E06 9.19653E06 2.69995E07 4.24450E07 2.51109E07 2.52147E07 4.49390E07 4.75656E07 3.19399E07 1.94590E07 1.13326E07 5.48799E06 4.60786E06 4.82039E06 3.65458E06 4.62619E06 4.98704E06 3.05444E06 2.81644E06 3.24873E06 2.92693E06 3.74113E06 3.67062E06 2.16796E06 1.47406E06 5.83127E05 2.89824E05 6.07889E05 4.24335E05 1.92336E05 3.72083E05 3.10360E05 6.23251E05 8.41819E05 2.43144E05 1.63590E05 4.54721E05 2.51220E05 9.87407E05 1.19891E06 2.01977E06 3.08553E06 2.49604E06 3.05425E06 4.54128E06 3.92352E06 3.54746E06 3.37336E06 3.87964E06 5.30005E06 6.06311E06 4.13775E06 1.43942E06 3.63426E05 8.47596E05 1.44096E06 1.95261E06 2.41167E06 2.50299E06 2.14783E06 1.32006E06 5.92647E05 7.63418E05 1.07493E06 6.71110E05 4.04386E05 8.15506E05 1.07781E06 8.36922E05 5.35007E05 2.82418E05 1.09749E05 1.45989E04 4.72847E04 1.25240E05 1.25412E05 7.42483E04 1.38153E04 2.12456E03 7.91183E03 1.51156E04 2.96261E04 1.19211E05 3.14014E05 3.76654E05 3.30449E05 2.06198E05 2.65899E04 1.52859E04 1.11623E04 1.96299E03 6.10317E04 1.71891E05 1.04704E05 6.96423E03 4.02792E04 1.23445E05 7.28834E04 2.27037E04 1.37329E04 1.50237E04 1.80113E04 2.76568E04 4.54397E04 4.27882E04 1.41750E05 2.76348E05 2.19052E05 2.58256E05 3.03545E05 2.68034E05 1.24323E05 3.73633E04 4.50149E04 4.96978E04 1.53564E04 6.54131E04 1.82400E05 9.95942E04 1.43376E04 6.44501E04 7.40535E04 1.63830E04 2.58909E03 1.14998E04 2.13261E04 1.53424E04 3.61428E03 2.71533E04 4.75324E03 1.98463E04 6.84586E04 5.78434E04 3.30840E04 4.43484E03 1.11085E04 3.67279E04 3.07186E02 9.99630E03 3.52785E03 2.29055E03 1.15071E02 2.71902E02 6.66331E03 6.42567E02 1.76341E04 5.03404E03 2.42079E03 1.00174E04 5.37306E04 5.21743E04 6.66337E03 6.09353E03 7.09324E02 1.91049E04 1.61647E03 1.08668E04 1.89833E04 6.33246E03 2.35203E04 2.96093E04 2.53838E04 1.31027E04 1.22871E04 1.40517E04 2.47320E04 2.94842E04 1.76500E04 1.58733E04 2.46294E04 1.59947E04 3.86389E03 1.96134E04 1.72050E04 9.29499E04 2.17011E05 3.68996E04 4.54294E04 4.86383E04 5.75896E04 1.16700E05 5.15438E04 6.87401E04 4.75616E04 2.24732E03 3.61404E04 1.43073E04 4.29385E04 4.64709E04 4.28644E03 1.04866E04 2.90534E03 3.66872E04 1.05039E05 5.56611E04 8.09999E04 9.11014E04 2.40132E04 3.63283E04 1.57662E04 2.57500E04 7.03476E04 1.27616E05 3.14888E05 5.70667E05 4.13409E05 2.81706E05 2.08362E05 6.27582E03 3.14334E04 2.70700E04 1.47963E04 4.80218E04 7.85159E04 -Frame 257 2.10746E06 9.88525E05 1.68281E05 3.53805E05 1.43433E05 1.25937E06 2.35691E06 8.34663E05 6.29048E04 1.48949E05 2.26721E05 5.80327E05 9.21939E05 3.46502E05 3.31081E05 2.54608E05 3.06278E05 4.22887E05 5.65361E04 5.34830E04 8.90003E04 4.28050E05 7.50184E04 8.20875E03 1.05360E04 1.96139E04 1.89817E02 6.25056E04 1.71241E04 7.92003E03 5.61606E04 7.49105E04 1.55458E04 7.33793E04 2.91375E03 8.28241E04 2.27111E05 2.29284E05 5.13275E04 5.84755E04 4.36676E04 1.36346E05 2.08544E04 3.66241E05 2.90031E05 8.49413E05 2.92543E06 2.27500E06 4.66724E05 3.52187E05 1.75007E05 3.17413E05 7.12437E03 2.73171E05 4.06920E04 1.76884E04 1.75055E05 1.60121E05 1.01938E05 2.24005E05 5.48533E04 4.49598E04 3.75509E05 2.12799E05 9.76010E04 1.90434E05 5.63228E04 9.66282E04 4.55104E05 8.19312E04 1.31750E03 7.27190E04 6.88391E04 2.74598E04 9.97950E04 3.23335E04 1.32408E05 3.44232E05 4.27260E05 2.91439E05 2.69085E05 2.04282E04 9.79374E04 4.83011E05 4.06982E05 4.74553E04 5.17503E04 1.97812E05 2.78749E05 7.29533E05 9.00087E04 1.30859E05 5.85500E04 1.85005E05 9.19851E04 2.41794E04 5.47016E04 1.94875E04 9.04639E04 3.08629E04 1.08658E04 9.67134E03 1.67022E04 8.36323E03 2.26941E04 7.45403E03 6.17964E03 3.55906E04 1.98637E04 3.42755E04 5.90270E04 2.44727E03 1.11120E04 2.45569E04 2.04283E04 1.24346E04 7.27821E03 1.73060E03 1.14624E04 5.01900E03 7.51069E03 1.04364E04 9.30986E03 5.00839E03 1.29933E04 1.46587E04 6.20840E03 4.75314E03 4.13712E03 8.25145E03 9.28419E03 3.50675E04 1.05157E04 6.47151E03 8.28790E03 1.17498E04 4.20095E03 6.58599E02 1.85753E04 3.91517E04 1.34403E04 1.13318E04 1.72015E03 1.59902E04 5.11277E03 2.11004E04 5.63210E03 1.21874E04 2.95002E04 1.64953E04 1.23964E05 1.29981E05 1.20242E04 7.70803E03 1.48018E04 8.72877E03 2.89270E03 1.07798E04 5.48423E03 1.03393E04 2.70225E04 1.61745E03 1.07106E04 4.88278E03 3.98873E03 6.93251E03 1.38231E03 1.85875E03 3.38379E03 4.50558E03 2.47708E03 3.81852E03 3.65599E02 2.04610E03 8.25089E02 6.44423E03 7.97878E02 1.42633E03 6.31637E02 1.47243E04 2.83537E04 8.94391E03 1.59452E03 9.23948E03 6.53497E03 8.48015E03 1.94150E04 2.13393E04 1.61892E04 1.87667E04 2.01148E04 3.01055E04 4.10833E04 4.44807E04 5.66264E04 5.96900E04 5.15028E04 2.39985E04 3.22771E04 3.39053E04 1.90211E04 2.51542E04 4.51147E04 5.39029E04 3.60746E04 2.28457E04 5.10193E04 1.04174E05 9.66940E04 5.06554E04 3.70417E04 5.57117E04 5.02904E04 4.73552E04 4.31173E04 3.55942E04 4.89169E04 7.95077E04 9.71338E04 9.68504E04 7.00986E04 6.72264E04 9.05226E04 7.62510E04 3.60374E04 5.54809E04 1.19475E05 9.55203E04 4.15430E04 4.08799E04 6.32447E04 9.42730E04 1.08063E05 6.65409E04 3.73576E04 6.41933E04 7.17922E04 2.62338E04 3.29500E04 5.41593E04 2.59946E04 1.41397E04 5.09761E04 9.09095E04 6.19005E04 3.13094E04 5.50655E04 1.24325E05 1.97937E05 1.16263E05 7.82370E04 7.58295E04 5.09435E04 4.10288E04 2.57992E04 2.62519E04 4.17376E04 -Frame 257 5.04680E02 6.60775E05 4.73963E05 1.21729E05 5.83875E04 1.11102E06 1.88526E06 5.20148E05 1.09890E05 2.96091E04 7.58832E04 4.63799E05 4.25478E05 1.74602E05 4.07936E05 2.60305E05 7.16356E04 1.24798E05 1.27863E05 4.10681E04 3.82321E04 2.25424E04 6.84556E04 8.52753E03 4.46676E03 4.80501E04 4.56575E04 1.65952E04 5.63290E03 1.38213E03 9.62971E03 1.23591E04 9.69708E03 3.76762E04 1.05218E05 1.10533E05 6.41282E04 3.26178E04 4.64831E04 3.27771E03 2.66030E04 3.77521E04 1.01026E05 1.70199E05 4.99647E05 7.32683E05 5.01507E05 5.09858E05 3.29658E05 1.27615E05 8.78683E04 6.82324E04 4.22285E04 5.23385E04 1.11711E05 8.96335E04 1.45037E05 3.84707E04 1.27267E04 9.21870E04 6.71321E04 6.87496E04 1.87497E05 1.16427E05 1.04413E05 1.63877E05 6.49593E04 1.29800E05 2.47561E05 6.39833E04 5.86812E04 3.12587E04 4.98779E03 2.26968E04 3.85617E04 2.40427E04 8.29883E04 6.67957E04 2.74741E04 9.41624E04 2.11844E05 3.53465E05 4.84857E05 2.62910E05 2.39341E05 1.13115E05 1.63851E05 5.78563E05 1.08954E06 8.40458E05 5.21610E05 5.69732E04 6.31313E03 3.67387E03 2.52415E04 3.82149E04 3.88709E04 1.57160E04 7.65367E03 3.06053E02 2.62343E02 4.55441E02 4.59813E02 4.04508E03 4.31591E03 2.99248E03 1.44369E03 1.65365E03 1.26293E04 1.79663E04 6.96323E03 3.06319E03 9.09752E02 8.67960E02 2.07820E02 1.11780E03 8.55514E03 1.71433E04 8.14525E03 5.42917E03 7.25166E03 9.97031E03 1.81578E04 7.04189E03 1.86164E03 1.72231E02 2.22172E02 1.69031E03 9.76456E03 8.55132E03 3.14443E03 2.42490E03 2.00112E04 1.80542E04 1.29213E04 8.06801E03 5.12681E03 1.37757E04 2.62351E04 1.17355E04 3.15762E03 1.81852E04 3.25699E04 6.12024E03 1.91847E04 1.03041E04 1.61882E04 1.97787E04 1.38126E04 3.37427E04 4.95486E04 1.40502E04 7.74807E02 2.29652E03 2.93897E03 1.06809E03 7.20042E02 3.14736E03 5.87132E02 3.08505E03 5.58536E03 2.56554E03 2.69878E03 1.32354E03 5.86628E02 5.42035E02 2.31064E03 1.46334E03 7.29026E02 1.11186E03 4.10933E03 4.08501E03 2.91330E03 2.74922E03 1.61925E03 1.24919E03 7.00794E03 3.78598E03 4.26396E02 1.52563E03 4.56325E03 1.31843E04 2.03373E04 6.53543E03 1.00643E03 1.14723E02 1.07132E04 8.54637E03 3.81688E03 5.59212E03 6.41514E03 7.28229E03 9.88448E03 8.01964E03 8.05523E03 2.32067E04 2.83770E04 1.02156E04 7.23073E03 8.65700E03 3.62220E03 1.86288E03 3.85103E03 6.90463E02 5.95591E03 8.55437E03 2.79043E04 1.53371E04 1.25799E03 2.28534E03 3.98638E03 6.23252E03 5.18583E02 2.96613E03 1.34176E04 4.07766E03 8.36976E03 5.36213E03 1.43435E03 7.42628E02 2.62633E03 2.19727E01 8.14540E03 1.46230E04 8.37594E03 2.30303E04 2.87773E04 1.24723E04 4.22315E03 3.85508E03 2.82712E02 2.57859E03 5.92061E03 3.70006E03 2.15226E03 5.51047E03 1.55667E04 1.27351E04 1.03688E04 1.48266E04 8.42217E03 1.39796E04 2.54851E04 1.22361E04 1.08128E04 4.30101E04 6.63670E04 9.20894E04 1.08428E05 4.10932E04 1.82046E04 2.13648E04 7.07704E03 1.13230E04 1.29333E04 5.94519E03 3.24450E03 -Frame 257 3.20992E06 1.56035E06 6.56461E04 1.04605E05 4.27233E04 8.60072E05 1.29622E06 1.41067E05 5.82704E04 1.19161E05 8.47921E04 7.18148E05 7.05431E05 1.46845E05 3.53470E05 1.53337E05 4.67147E04 9.07052E04 1.29748E04 1.09602E05 7.67244E04 2.54971E04 2.41690E05 1.09941E05 8.32994E03 1.48824E05 5.78158E04 7.56393E03 2.10965E04 2.56582E04 3.67528E04 6.62020E04 9.61517E04 8.11565E04 6.03985E03 1.66248E03 6.55554E04 8.98315E04 1.52267E04 1.36985E05 6.60409E04 3.75322E01 2.10408E05 1.46469E05 1.77419E05 1.26677E06 6.29933E05 2.31723E05 1.92443E05 1.43539E04 3.25799E05 6.08942E05 1.41141E04 2.47812E05 1.15191E05 1.44132E04 1.12055E05 3.39587E04 1.32340E05 1.14369E05 1.08175E04 1.23233E05 1.17353E05 1.89671E04 1.01991E05 3.41276E05 1.91730E05 1.09378E05 1.95654E05 1.78210E05 9.85856E04 6.21717E02 4.88862E04 6.88280E04 2.49635E03 7.06276E04 1.29292E05 3.25688E04 3.79844E04 3.20477E05 2.84002E05 1.60563E05 1.50615E05 3.02117E05 2.96579E05 8.53879E04 7.24409E03 4.41282E05 1.01730E06 2.92924E05 7.23016E04 6.70932E05 3.33833E05 2.61642E03 9.17888E04 1.11588E05 1.26590E05 3.88187E04 6.96367E04 2.38510E05 2.68445E05 1.96442E05 1.93630E05 1.97287E05 2.39951E05 1.41598E05 1.39797E05 7.60735E04 1.34491E05 9.08224E04 7.66606E04 1.06532E05 8.51071E04 3.53172E04 8.16441E04 9.41794E04 4.37530E04 1.12161E05 3.02607E04 2.08661E04 2.83487E04 1.39957E04 4.17088E03 2.81522E04 2.29115E04 1.08226E04 2.98311E04 5.02287E04 3.05748E04 1.61908E03 7.52650E03 2.25365E04 1.44199E04 1.71855E03 1.26804E04 1.48533E04 3.01225E04 3.12055E04 3.11978E03 3.57071E02 3.09327E04 5.74542E04 2.64899E04 3.15601E04 4.95080E04 2.53940E04 4.98347E03 7.33073E04 3.99018E04 1.53443E04 1.05696E04 2.37678E04 4.11977E04 4.04532E04 5.43831E03 3.68703E03 5.45631E03 4.50520E01 1.87400E03 8.69551E01 7.29755E03 7.56974E03 1.24288E03 9.03120E01 2.71275E02 2.70476E03 4.66133E03 3.73962E03 8.09629E03 1.12633E04 5.75432E02 7.38485E02 1.99917E03 3.59081E03 2.67013E03 7.87956E03 6.16201E03 1.08148E03 9.54586E02 1.58065E03 1.23057E03 1.06752E04 1.77482E04 9.74142E03 6.82910E03 1.25350E04 3.03328E03 1.24270E03 2.02006E03 3.26163E02 8.01382E03 2.61003E04 6.17004E02 1.10402E04 5.10797E03 1.83833E03 7.73015E03 1.04191E03 1.28866E04 1.44653E04 4.61317E03 5.37543E03 6.42484E03 1.91327E03 1.30971E03 5.54826E02 6.39419E03 1.34326E03 1.02814E04 3.93068E03 9.54498E02 4.14790E03 5.58301E02 5.62315E03 5.29415E03 1.12743E03 1.17054E03 1.61452E03 5.62922E03 1.25638E03 2.51968E03 3.29396E03 4.13861E03 3.05699E02 9.13680E02 5.24484E03 1.42968E04 1.38907E04 1.79108E03 2.23036E04 1.81594E04 2.19242E03 1.68651E03 2.82002E03 1.53593E03 2.40043E03 1.61175E02 8.70148E02 3.47163E03 2.06991E03 1.54460E03 1.35067E04 6.93173E03 7.19741E03 3.72629E04 2.95368E04 7.91830E03 1.93173E03 1.33721E04 1.81423E04 1.75312E04 7.86201E03 3.00859E04 8.64743E03 6.11045E02 1.05332E04 1.60633E04 -Frame 257 3.60894E06 1.54517E06 8.03050E03 3.12023E05 1.47872E05 1.47942E06 3.24757E06 9.81597E05 3.57732E05 4.74327E05 3.62254E05 1.69168E06 1.82224E06 5.16580E05 1.47497E06 1.89499E06 1.76415E06 2.84663E06 2.23610E06 4.64723E05 1.00479E06 1.50237E06 9.51352E05 1.06150E06 8.42530E05 1.64836E06 1.28424E06 1.66541E05 3.45779E05 8.35667E04 4.16961E04 1.61368E05 4.47903E04 6.93093E04 4.73724E04 8.18996E04 1.46215E05 6.20730E05 1.27432E05 5.24091E05 1.01047E06 8.20644E05 1.55985E06 1.10129E06 2.93166E06 8.35072E06 6.19805E06 3.85617E06 5.75136E06 8.95345E06 1.54354E07 1.75934E07 7.94035E06 1.26686E06 1.13374E06 1.05550E06 4.21760E05 2.65654E05 2.22552E05 3.94513E05 1.25322E06 8.41555E05 6.00209E05 6.00570E05 4.04069E05 5.92680E05 1.20052E05 9.13262E04 1.49528E04 2.54000E05 2.96710E05 2.60027E05 3.99356E05 6.69772E04 3.76901E05 4.88959E05 9.61736E05 5.05303E05 1.96987E05 7.84421E05 6.51001E05 5.73829E05 3.38398E05 1.05656E06 1.14425E06 5.28231E05 9.82354E05 2.86181E06 5.38168E06 5.79555E06 6.16760E06 3.88086E06 4.87348E05 1.06215E06 6.21081E05 9.37116E04 5.82397E05 1.49370E06 1.53933E06 2.46299E06 4.55113E06 5.32742E06 5.42079E06 4.52491E06 4.29105E06 3.43488E06 1.91967E06 1.20608E06 8.39527E05 9.03271E05 3.60018E05 1.05662E06 1.82665E06 1.69540E06 1.81926E06 1.59980E06 1.28777E06 5.23183E05 1.41901E05 2.15849E05 2.34854E05 1.74646E05 8.46978E03 6.42018E04 2.39425E05 4.76248E05 6.20855E05 1.10368E06 1.16187E06 4.68508E05 1.95460E04 1.14813E05 1.73017E05 5.56755E04 1.20671E05 8.85660E04 4.81561E04 1.50119E05 9.26905E04 2.98084E04 1.37606E04 7.92310E04 3.17040E04 4.34823E03 7.33818E04 6.89780E04 7.63300E04 1.16701E05 1.23614E05 6.90284E04 8.14376E04 6.53897E04 5.41417E04 4.88762E04 2.39244E04 3.45159E04 2.79016E04 3.65642E04 4.52905E04 8.40986E04 7.56179E04 1.17942E04 2.82789E03 2.42942E03 7.66402E03 1.77552E04 1.64217E04 2.32975E04 2.89824E04 1.70581E04 4.67876E03 1.94327E03 6.38677E03 5.23235E03 2.61984E03 3.11825E03 3.29775E03 5.57977E02 1.58067E03 3.50845E02 3.90693E03 1.02318E04 5.24063E03 9.57696E02 1.20877E03 2.75499E03 7.11781E03 3.01369E03 5.54687E03 5.31377E04 1.18236E05 7.62833E04 1.78616E04 1.92938E04 3.41151E04 5.18189E04 5.50144E04 4.11199E04 1.86526E04 1.90404E04 1.53089E04 1.33790E04 4.91541E03 1.16824E04 2.47549E04 1.60243E04 7.87681E03 1.12719E03 5.49332E03 1.86384E04 4.07195E04 3.79043E04 7.14892E03 4.04671E03 1.89476E04 1.34208E04 2.67018E03 1.30628E04 3.13186E04 2.86155E04 2.96482E04 2.91566E04 4.30804E04 3.42330E04 2.21252E04 1.88522E04 3.95379E04 5.06812E04 1.28316E05 2.58188E05 1.92154E05 4.95085E04 1.02681E04 1.09179E04 7.33769E03 5.64208E02 6.24585E03 3.77186E03 1.49308E04 4.50498E04 4.64210E04 2.50189E04 6.25904E04 1.37191E05 1.26733E05 3.10209E04 1.83603E04 1.04937E03 2.03576E04 1.31869E05 1.17989E05 6.46496E04 5.02655E04 4.08757E04 2.84797E04 5.03844E04 9.95990E04 -Frame 257 1.41790E04 4.79951E05 1.41500E06 1.62807E06 1.40341E06 4.60628E06 6.67084E06 2.32788E06 9.00882E05 1.12598E06 1.03798E06 3.46616E06 3.94199E06 2.63701E06 4.87058E06 5.61837E06 2.03752E06 1.20975E07 2.47532E07 2.06916E07 1.76583E07 9.74846E06 3.68827E06 4.00776E06 5.12233E06 9.50070E06 7.61324E06 3.64488E06 2.84115E06 2.04274E06 2.12733E06 2.30699E06 1.88368E06 1.40180E06 1.00178E06 6.00490E05 9.01303E05 1.44131E06 1.39952E06 2.07530E06 2.14205E06 8.20919E05 1.58995E06 1.85801E06 5.79043E06 2.84966E07 2.98412E07 1.18037E07 2.22774E07 2.78431E07 1.98260E07 8.16423E07 5.28499E07 2.30430E07 2.09067E07 1.02368E07 2.26673E06 2.23700E06 3.68742E06 5.48307E06 4.58201E06 1.30433E06 1.18403E06 1.96003E06 1.61845E06 2.58897E06 1.61763E06 6.28952E05 3.96125E05 7.08739E05 5.13368E05 3.38623E05 6.66076E05 9.51938E05 8.90975E05 2.67596E05 5.41618E05 1.20340E06 1.87308E06 2.30945E06 1.05352E06 8.71795E05 1.20196E06 3.08178E06 9.32744E06 8.73557E06 2.36315E06 5.03196E06 1.30739E07 9.44100E06 2.12790E07 1.35325E07 7.37337E06 5.80499E06 1.67828E06 6.09603E05 1.14330E06 7.66574E05 5.87399E05 1.23243E06 4.53229E05 3.65091E05 6.40357E05 1.27808E05 7.23116E05 1.28901E06 1.70968E05 4.25377E05 7.18511E05 2.65669E06 3.78730E06 2.68453E06 2.36731E05 2.87458E05 2.66604E05 1.63126E05 5.29342E05 1.81572E05 3.16995E04 1.52618E03 7.97729E04 1.19834E05 5.97930E03 5.22296E04 1.74793E04 9.29423E04 4.19121E04 3.93197E05 7.09014E05 1.11680E06 4.58655E05 6.52475E05 1.32339E06 1.10237E06 1.78163E06 2.63055E06 1.36816E06 3.06012E05 3.74186E05 1.34647E04 2.57318E05 4.58573E05 4.86462E04 1.12844E05 1.12431E05 7.03188E03 2.87285E04 6.02214E04 4.97263E03 6.02432E02 3.74096E04 2.72848E04 7.94730E03 4.47473E04 7.60573E04 7.12733E04 2.09732E04 2.19699E04 1.82306E04 2.01415E04 1.69325E05 1.65949E05 9.62507E04 9.28390E04 5.72053E04 6.99647E03 3.01793E04 5.09997E04 1.86189E04 3.08914E04 6.22685E04 3.67452E04 2.16998E04 2.24002E04 6.30039E04 8.64593E04 7.59687E04 6.30574E04 3.42524E04 1.10923E04 6.12510E04 7.95571E04 2.84120E04 1.20684E04 5.54612E03 1.98371E03 1.06216E04 4.35409E04 3.38417E04 4.01827E04 9.08265E04 2.99782E03 4.60449E04 3.50020E04 6.55854E03 1.47467E03 1.60533E04 3.06521E03 2.34098E03 3.07800E03 3.41736E03 1.79327E04 5.14133E03 2.43573E04 4.43846E04 1.49138E04 5.90404E03 7.96818E03 2.37129E04 2.28112E04 5.46240E04 1.27364E05 1.27304E05 6.01502E04 1.25270E04 6.41894E03 7.02236E04 8.13978E04 4.24582E04 3.05315E04 6.77650E04 3.56932E04 4.57341E04 7.21367E04 6.24173E04 1.00433E04 6.17263E04 2.84879E04 6.24194E04 2.72063E05 1.14888E05 1.11592E04 8.85283E02 8.50126E03 4.83330E04 5.25330E04 3.79472E03 1.58567E04 5.22207E04 5.92977E04 3.84476E04 1.52001E04 2.95679E04 4.49242E04 1.78489E05 2.17431E05 3.24520E05 2.98141E05 2.07945E05 1.63965E05 3.40854E04 5.40661E02 2.00286E02 2.96089E03 1.62870E03 1.58159E04 7.17727E04 -Frame 257 8.43581E04 2.51358E04 3.01579E05 1.20696E06 1.26070E06 4.66673E06 6.53027E06 1.31525E06 1.32436E06 1.40959E06 4.77690E05 3.53867E06 3.46953E06 1.66952E06 5.17598E06 2.74068E06 4.32429E06 2.88541E07 1.94420E07 6.44591E06 3.69550E07 1.31872E07 3.39330E06 7.72151E06 6.94870E05 9.40481E06 1.38556E07 3.13714E06 4.63985E06 4.99548E06 7.38279E05 2.43054E06 2.10634E06 6.47369E05 2.53813E06 1.34927E06 4.10385E05 1.48957E06 9.90316E05 1.72816E06 2.52533E06 7.94242E05 1.48957E06 3.28947E06 3.74145E06 3.26397E07 4.73133E07 2.59707E07 7.13220E07 5.26739E07 4.57490E07 9.52537E07 4.49116E07 2.36204E07 4.70307E07 2.25890E07 2.84423E06 2.11929E06 2.44219E05 2.67423E06 5.13901E06 2.77287E06 3.32657E06 3.06707E06 6.12677E05 7.70395E05 1.37195E06 6.41537E05 1.11112E06 1.08207E06 2.85802E05 2.25416E05 1.79627E05 6.38297E05 2.30251E06 1.94410E06 8.20928E05 1.08952E06 3.73476E05 7.59636E05 2.66370E06 1.34868E06 2.08682E06 4.11426E06 7.43956E05 4.18278E06 5.70856E06 4.45088E06 4.02682E07 5.10209E07 1.35450E07 1.69968E05 3.30756E05 2.51831E06 5.22407E06 3.55160E06 1.10970E06 3.51691E05 2.44511E05 4.93155E05 1.41985E06 8.44539E05 3.03134E05 4.08869E05 1.72252E05 6.25934E05 1.44482E06 7.12754E05 1.62100E06 3.08749E06 2.31302E06 3.73139E06 1.36657E06 3.28312E05 4.44394E05 1.60201E05 2.14702E04 2.70813E04 1.20234E04 5.81378E04 5.07839E04 9.87027E03 3.25884E04 1.21307E05 1.81470E05 2.87914E05 3.51784E05 7.81373E04 1.32376E04 3.42530E05 6.15012E05 8.19570E05 1.40779E06 8.61533E05 1.33320E06 1.86272E06 8.09900E05 8.73195E05 1.28226E06 1.69395E06 3.23368E06 3.18556E06 1.36349E06 6.30796E05 1.64524E05 2.90883E04 1.34662E05 8.33973E04 2.86943E04 7.60007E04 2.81193E04 5.85159E03 3.39923E04 9.90431E04 1.59814E05 5.58572E04 7.75931E02 4.27662E03 7.45738E03 7.63701E04 1.03767E05 2.79489E04 3.45424E03 1.15850E04 5.80135E03 1.52744E04 3.85527E03 2.78216E04 2.08856E04 5.69270E04 5.92007E04 8.65250E05 1.12202E06 8.50101E05 4.95344E05 5.74555E04 3.20661E05 3.94703E05 2.59179E05 2.78670E05 2.96898E05 2.13478E05 1.13216E05 1.24119E04 2.97608E04 2.95127E04 5.00152E04 1.46756E05 1.61376E05 7.21351E04 1.22895E05 2.32087E05 2.53003E05 1.97102E05 6.40735E04 3.79039E04 3.69684E04 3.03723E04 8.46339E04 1.37543E05 1.27650E05 6.81700E04 2.38348E04 1.28233E03 3.14643E04 2.92334E04 5.53814E03 2.30912E03 7.21006E03 3.58294E04 3.28625E04 3.21631E03 2.07921E04 5.72759E04 1.64675E04 3.84196E04 8.92556E04 7.08246E04 6.14135E04 2.74803E05 2.95547E05 8.61958E04 1.67284E04 2.11978E04 1.58628E05 3.69012E05 4.05568E05 2.42045E05 1.18518E05 7.08580E04 3.52875E04 1.44920E04 4.81605E04 8.49973E04 2.47943E04 4.81874E04 1.74742E05 3.66468E05 4.64921E05 2.40512E05 2.19556E05 2.02445E05 3.00136E05 4.08919E05 4.35432E05 4.10414E05 7.27707E05 3.52975E05 1.03180E05 1.33024E05 4.94683E04 6.41043E04 5.15722E04 2.01855E04 8.90742E03 1.72201E04 2.63232E04 -Frame 257 1.44609E06 1.13781E06 1.43603E06 1.55293E06 5.51580E05 4.35286E06 4.78396E06 2.62516E05 1.42366E06 9.52094E05 5.15556E05 3.61303E06 1.39070E06 1.37678E06 4.31324E06 3.20608E05 8.96242E06 1.64362E07 1.83085E06 3.90816E07 3.53629E07 5.09820E05 8.59407E06 3.81765E06 3.50448E06 1.76900E07 6.19574E06 1.89667E06 7.48123E06 7.81854E05 1.55831E06 2.23670E06 2.78912E05 3.67244E06 2.63024E06 4.97299E04 9.52243E05 3.36656E05 1.75282E06 4.05745E06 2.66503E06 5.02258E06 6.70942E06 4.66132E04 1.40675E07 1.28689E07 2.85961E07 9.43988E07 1.92010E07 9.39795E06 2.26926E07 1.31605E07 7.52219E06 2.41052E07 4.50261E06 2.63959E06 3.63226E06 4.18382E05 2.07036E06 1.71750E06 8.19969E05 4.15439E06 2.85354E06 2.39138E05 1.44331E05 5.03424E04 7.74008E05 9.60445E05 1.43691E05 2.52870E05 6.96512E04 2.57017E05 8.09328E05 4.59753E05 2.62017E05 1.11172E06 1.52899E05 3.03353E05 3.41223E05 2.35455E05 1.53369E06 4.63085E05 1.11353E05 3.09026E05 8.39570E05 3.85344E06 9.36650E06 9.62503E06 7.59219E06 8.00762E06 1.66166E06 3.41951E06 1.86926E06 9.13480E04 3.77440E05 2.56681E05 1.03533E05 3.17771E05 3.05617E03 4.72649E05 9.59264E05 2.43473E05 1.30946E05 3.23290E04 2.96155E05 9.73059E05 8.60919E05 1.90565E04 3.54784E05 1.68144E05 1.66670E06 3.64435E06 1.79725E06 9.67032E04 1.46349E05 2.43212E04 6.69705E04 4.05564E04 1.07164E03 1.15944E04 1.43729E04 6.02306E03 5.36814E04 7.52392E04 1.25839E04 2.74612E04 3.17685E04 1.64994E05 3.42683E05 4.40942E05 1.75299E05 1.05879E05 4.18041E05 2.71483E05 7.43515E04 5.80900E05 7.56296E05 1.16781E06 7.37429E05 3.92616E05 1.66761E06 1.77563E06 2.44945E05 2.18027E05 4.18046E05 2.62312E05 8.42088E04 9.58756E04 2.40804E05 3.45737E05 1.50599E05 2.44669E04 9.67545E02 1.93526E04 8.22311E03 7.76399E03 2.84709E04 1.24600E04 2.51944E03 5.16017E03 2.84311E04 5.10174E01 1.66868E03 1.21872E03 9.25182E03 2.02910E04 4.94652E04 2.79124E05 6.20198E05 9.53579E05 1.26407E06 1.64674E06 2.06433E06 2.40365E05 7.20536E05 1.06642E06 6.48508E05 1.11886E05 4.37486E04 1.31820E05 1.53042E05 5.15087E04 1.14023E05 9.22123E04 4.28993E04 1.41944E04 1.42944E04 6.68769E04 9.13655E04 6.07185E04 7.09369E04 9.49924E04 6.76702E03 5.23717E04 7.05211E04 5.11005E04 3.89706E04 3.89384E04 8.76475E04 4.16489E04 1.01308E04 1.36006E04 2.65279E04 4.32722E04 2.99573E04 5.60811E03 4.71424E02 8.93427E02 2.19823E03 3.35173E03 3.31295E03 1.92561E03 3.60151E03 4.03493E04 6.48275E04 1.38006E04 1.79318E03 1.93804E04 3.55644E04 1.48216E05 9.21256E04 1.49523E03 1.12429E05 1.67707E05 2.10197E04 2.69670E04 4.52616E04 6.65631E04 4.66018E04 1.39405E04 2.74023E04 4.12144E04 8.07639E04 8.59574E04 3.45101E04 5.54443E03 3.26589E04 1.70685E05 2.40404E05 2.63898E05 7.10249E04 7.89071E04 4.24446E05 3.13545E05 1.29928E03 2.96826E05 2.45648E05 1.12712E05 1.29582E05 1.00226E03 1.24962E05 1.36061E05 2.93095E04 1.01179E03 1.75525E03 2.07009E02 2.82236E03 -Frame 257 3.28462E06 8.36052E05 5.52390E05 1.43039E06 2.25710E05 3.98386E06 3.43249E06 1.23949E04 1.62290E06 4.73277E05 9.09788E05 3.39536E06 3.09022E05 1.93454E06 2.78776E06 2.96861E05 8.87893E06 5.23032E06 1.29704E07 4.44654E07 1.71349E07 3.12380E06 9.77859E06 1.59727E06 1.30143E07 1.56290E07 8.26940E04 8.16316E06 5.73196E06 4.71223E05 1.68370E06 9.46642E04 2.66176E06 4.51743E06 2.71992E05 9.10516E05 8.49555E05 4.57282E05 3.44928E06 1.02307E06 2.82300E06 7.17818E06 6.60135E05 9.48529E06 3.01519E06 5.28520E07 1.40535E08 5.38936E07 7.15136E06 9.24982E06 3.77966E06 8.74641E06 7.96752E06 7.39693E04 4.56160E06 4.63467E06 7.41688E05 7.61270E05 2.60814E05 9.11578E05 3.09567E06 6.00716E05 3.19017E05 6.35591E05 2.30448E05 4.97136E05 4.96145E05 1.56216E04 3.31804E05 1.88043E05 1.03850E05 1.24503E05 3.80014E04 8.46079E05 6.75107E05 4.43208E04 2.32884E05 1.07738E05 1.35783E06 3.14286E06 1.06692E06 6.32028E04 1.60802E05 4.87343E02 2.39617E05 7.09709E03 7.01245E05 8.99430E05 5.85427E05 1.32955E06 1.94744E06 7.72661E05 8.52148E05 1.18321E06 2.36664E05 2.44238E05 4.12131E05 4.99191E05 5.17936E05 5.91017E04 3.15670E05 5.19391E05 4.80333E04 2.69021E05 2.17458E05 1.96708E05 1.15422E06 4.16195E05 4.76082E05 1.67575E06 1.18140E06 1.86276E06 1.16533E06 1.20509E03 2.42246E05 2.51921E05 4.95375E04 5.94280E04 3.50966E04 5.70861E03 9.60341E03 8.70126E03 4.62866E04 4.88349E04 4.56202E03 2.88056E04 4.59506E04 6.70743E04 3.21433E04 1.46383E04 8.80048E04 8.84038E03 4.00216E04 1.40643E04 1.90311E04 1.78210E05 1.54865E05 5.32870E04 4.57507E05 9.15131E04 1.08344E05 2.09837E05 1.07168E05 7.77389E03 1.61541E05 5.05126E04 2.15173E04 1.50397E05 2.76100E05 1.41237E05 7.31292E03 1.59382E04 6.08666E03 1.05516E03 2.16935E03 1.16607E04 2.67385E04 1.78115E04 1.76940E04 4.58655E04 8.28091E04 6.28006E04 3.71589E04 6.79701E04 1.22808E05 2.47839E05 3.44581E05 4.77396E05 1.73441E05 1.19977E05 1.53471E06 2.43111E06 4.08329E06 1.58440E06 4.06629E05 4.19657E04 4.09605E05 2.99251E05 1.48839E04 3.52814E04 1.18176E05 2.83971E04 1.02802E03 1.66651E03 1.09599E04 1.60500E04 4.84273E03 9.61403E02 3.42238E02 1.13328E04 1.18229E04 6.66947E04 7.63605E04 1.02405E03 1.25323E04 5.41035E04 9.88542E04 1.43910E05 1.53865E05 2.89455E04 2.17292E04 1.03252E04 8.14373E03 1.12502E03 4.01095E03 1.51949E02 9.53580E02 7.57759E01 5.27915E02 2.51941E02 2.28501E03 8.40632E03 5.74229E03 2.90474E04 2.90119E04 4.05047E03 2.62458E03 9.40724E03 3.64234E04 4.77384E04 6.45927E03 2.91416E04 8.32821E04 9.86810E04 2.20374E04 6.41856E03 2.48538E04 2.03083E04 2.93510E03 6.58953E02 1.77104E04 2.43586E04 1.08000E04 4.35091E04 1.44450E04 2.50167E04 3.46888E03 1.27709E04 1.54851E04 8.33626E03 1.61135E04 7.88379E04 5.43933E04 3.32319E03 1.18341E05 1.35831E05 6.71062E04 8.71060E03 2.01372E04 1.53790E05 1.20659E05 6.66791E03 4.05101E04 1.46563E04 4.53678E03 4.78141E03 6.06382E03 -Frame 257 3.67521E05 9.76541E05 1.31244E06 1.22724E06 1.08466E05 3.51392E06 2.36006E06 4.44026E05 1.79328E06 4.30471E05 1.49762E06 2.69674E06 5.15420E05 2.45966E06 1.95282E06 1.71616E06 6.82379E06 5.40975E06 2.45148E07 4.04280E07 9.75977E06 8.81078E06 8.03317E06 6.74369E06 1.49070E07 6.72647E06 6.85678E06 1.10298E07 2.71425E06 1.34070E06 1.02767E06 1.16728E06 4.26417E06 1.46360E06 8.93220E05 1.61047E06 6.17039E05 1.92173E06 1.92642E06 6.67012E05 5.87359E06 4.37541E06 9.96195E06 1.46240E07 3.48271E07 1.01507E08 7.82138E07 1.48852E07 6.85891E06 3.85088E06 2.89195E06 3.07802E06 1.54245E06 2.97228E06 3.14399E06 9.06266E05 4.48315E05 1.19473E05 7.15547E05 1.96399E06 5.85732E05 4.76748E05 6.49913E05 4.89808E05 3.40537E05 1.55437E05 1.61657E05 3.25712E05 5.74197E04 9.59756E03 5.39977E03 8.08958E04 4.63609E05 4.63916E05 1.85427E05 1.69142E05 1.78432E05 6.79944E05 1.22540E06 1.01640E06 2.14322E06 1.63084E06 1.55026E06 1.20350E06 1.89920E05 1.72638E05 4.85487E05 1.26335E05 9.95902E04 9.45510E04 3.20171E05 4.71074E05 3.83265E05 4.83123E05 1.99256E05 1.05582E05 1.01361E05 5.51503E04 1.33981E05 2.33937E05 1.76923E05 5.52388E05 5.75868E05 2.53963E05 3.59272E05 1.91607E05 1.27365E06 1.46854E06 4.60392E05 1.67574E06 1.73139E06 1.02939E06 1.24667E06 4.40505E05 1.44023E05 2.70907E05 7.51887E04 2.70256E04 1.71462E04 1.77365E03 2.23008E04 1.29037E04 5.23278E03 1.06367E04 1.75139E04 4.64866E04 2.76302E04 6.17490E04 4.35579E04 9.06022E04 1.75322E05 8.32419E04 1.86379E04 9.04069E04 6.28738E04 9.51640E04 3.56962E04 2.75757E04 1.67171E05 1.71900E05 1.39655E04 9.24617E03 4.76576E03 4.30846E04 5.13722E04 7.65966E03 7.88772E04 9.37924E04 1.26425E03 2.28428E04 2.82467E04 1.13856E04 9.36475E03 2.51280E04 3.54183E04 2.75265E04 6.39545E03 1.14038E03 3.11256E03 9.29895E03 4.89808E04 3.06157E04 2.49921E04 6.93241E04 6.56729E04 2.21575E05 8.58458E05 5.99960E05 2.24938E05 2.81176E05 1.81032E06 7.77498E06 6.17305E06 7.73556E05 1.43876E05 5.68648E05 7.78755E05 4.79712E05 1.80818E05 6.69359E04 3.43744E04 6.39298E03 8.40884E03 5.04045E03 1.01113E03 1.95331E04 1.71543E04 9.72346E03 4.45291E03 8.22164E02 2.44832E04 3.33786E04 8.44062E04 1.12037E05 3.35364E04 5.19581E03 9.39554E04 1.57128E05 2.35417E05 7.68069E04 5.90665E03 2.86200E04 1.53972E04 1.07065E04 7.80463E03 2.40946E03 6.21645E01 1.28449E03 3.11463E03 7.48385E03 5.06942E03 4.19444E03 1.01784E04 4.40371E03 2.45234E03 4.23295E03 7.53212E03 8.69988E03 6.27133E03 1.34495E04 1.07958E04 1.03581E04 1.49109E04 1.73794E04 6.88493E03 3.22563E04 2.82877E04 1.52067E04 2.55346E03 1.15594E02 7.69562E03 1.75103E04 1.26412E04 2.48635E04 3.44396E04 1.46723E04 2.39349E04 3.75952E04 1.40949E04 5.67038E03 1.96574E04 4.00702E03 1.56197E03 5.83500E04 6.42898E04 2.77195E03 1.74122E03 2.07247E04 2.91226E04 5.64580E04 8.52335E04 9.22512E04 8.52837E04 1.98606E04 2.43134E03 5.37364E02 3.68162E02 -Frame 257 1.14384E06 8.19763E05 4.61619E05 7.45517E05 7.57246E05 2.93544E06 2.26808E06 1.35202E06 1.18901E06 8.65995E05 1.99336E06 1.63325E06 1.62441E06 2.98976E06 1.43018E06 3.36904E06 5.27267E06 9.72430E06 3.38905E07 2.92585E07 1.25078E07 1.02495E07 6.08500E06 7.40319E06 7.96381E06 7.42225E06 1.12907E07 6.55006E06 2.53270E06 1.11574E06 1.24923E06 2.91851E06 2.35243E06 1.32916E06 1.73952E06 1.30389E06 1.72663E06 7.29088E05 2.01633E06 5.69558E06 4.50787E06 5.64058E06 1.02074E07 8.69025E06 2.25019E07 2.98593E07 1.59080E07 6.67222E06 2.27205E06 1.12962E06 1.69443E05 5.74363E05 1.53123E06 7.10007E05 3.93835E05 2.15379E05 1.88329E05 6.23605E05 4.41535E05 4.56979E05 9.08096E05 3.79292E05 1.60085E05 1.11698E05 1.80655E05 4.97598E05 1.68275E05 5.16477E04 5.13394E04 2.39254E04 4.40433E04 6.79619E04 9.14515E04 1.29287E05 1.22119E05 3.23879E04 5.04111E04 3.58124E05 7.43525E05 5.61674E05 3.98239E05 2.89505E05 6.10773E05 1.70641E06 8.01133E05 2.22383E05 2.82671E05 5.75465E04 4.23704E04 7.53982E04 9.57294E04 1.61580E05 6.15714E04 4.72034E04 8.34447E04 1.13601E05 8.06676E04 3.99839E04 4.58786E04 1.33246E05 2.36251E05 2.05708E05 1.89387E05 2.28773E05 3.98612E05 5.13188E05 9.40473E05 2.71679E06 4.17153E06 5.65435E06 3.11940E06 5.10278E05 5.47267E05 6.12107E05 4.31956E05 3.16151E05 4.60609E04 1.10136E04 9.74527E03 1.76898E04 9.68111E03 3.10240E04 3.02290E04 3.40300E04 5.46353E04 3.56357E04 3.38118E04 1.47722E04 2.73789E04 1.50817E05 3.03302E04 2.34445E04 8.40305E04 8.29475E04 2.23380E05 2.34556E05 2.53532E04 4.82145E04 4.03782E03 1.39710E05 1.75846E05 5.23411E03 5.40287E04 4.94037E04 6.13647E04 9.36321E04 3.12075E04 4.03712E04 6.51153E04 1.44371E04 1.26210E04 5.25700E03 2.37499E04 2.75704E04 8.49694E03 2.70106E04 7.33800E03 2.18541E04 8.25211E03 2.71758E02 1.25925E04 1.88765E04 1.34331E04 3.76447E03 3.00962E04 1.53042E05 2.08234E05 6.27830E04 1.13148E05 2.82668E03 4.41090E05 3.16536E06 2.94241E06 8.41337E05 1.27625E05 1.12609E05 1.39931E05 5.02409E03 5.18123E04 3.28096E04 4.86144E03 1.72108E04 2.78494E04 2.24179E04 1.16144E04 3.86472E03 1.30260E03 2.21509E02 5.17405E03 1.28460E03 1.69417E04 7.95092E03 7.14716E04 1.41684E05 1.51701E05 1.46561E05 7.53315E04 6.49497E04 7.24412E04 4.89821E04 2.20661E04 5.85338E03 3.19668E03 2.37998E02 2.45811E03 2.19057E03 2.90032E02 2.30642E03 8.74525E02 7.37985E03 1.83516E04 1.18139E04 9.84131E03 9.48288E03 4.27938E03 5.17876E03 8.03984E03 1.56069E04 8.78780E03 2.33619E03 4.96206E03 9.43274E03 1.71997E04 1.31505E04 7.68738E03 4.65685E03 1.03172E03 9.37377E00 5.72158E03 5.52002E03 1.91589E02 4.32670E02 3.17265E03 1.62424E02 6.47100E03 1.40432E04 1.19708E04 3.68019E03 6.15264E03 1.30533E04 2.37375E04 2.88088E04 2.19285E04 4.38442E04 7.37906E04 1.07239E05 1.10696E05 1.01025E05 5.86190E04 3.77480E04 1.78599E04 1.52566E04 1.50956E04 2.91302E04 3.18940E04 1.56025E04 3.93074E03 -Frame 257 2.13052E06 7.47608E05 1.68443E05 6.52018E05 9.60186E05 2.71594E06 1.83859E06 1.18088E06 1.29402E06 1.03269E06 1.86626E06 1.66471E06 1.59829E06 2.73395E06 2.18280E06 3.18076E06 3.91361E06 1.20652E07 3.74070E07 1.97811E07 6.74351E06 7.00231E06 3.10760E06 6.15454E06 5.39472E06 4.98960E06 9.06608E06 3.91028E06 9.61904E05 8.25379E05 1.24129E06 2.85190E06 1.71803E06 7.02175E05 8.64273E05 6.84029E05 1.70966E06 2.21680E06 5.03790E06 8.96797E06 7.77632E06 1.17767E07 4.18304E06 5.86420E06 1.70097E07 6.94592E06 2.35117E06 2.12907E06 3.98924E05 8.70962E05 1.13831E06 1.32257E06 1.49241E06 4.65854E05 1.42239E05 7.25166E04 2.13544E05 6.11788E05 4.33027E05 3.08045E05 2.79491E05 9.09266E04 2.02528E05 1.99660E05 2.13184E05 2.58589E05 1.04183E05 1.91609E04 1.15462E04 4.98766E03 2.07504E04 4.11330E04 6.36466E04 7.63763E04 1.38282E04 5.71060E04 1.42233E05 3.87076E05 4.66501E05 2.41422E05 1.63480E05 8.06665E04 2.07742E05 9.33276E05 1.03371E06 7.00413E05 3.92509E05 9.54371E04 7.32916E04 1.17986E05 1.71622E05 2.05003E05 9.23503E04 5.45841E04 3.11098E04 9.39872E03 4.26426E04 8.28397E04 9.54782E04 6.95847E04 3.15534E04 3.54201E03 3.00889E04 1.13512E05 2.85547E05 2.87583E05 4.33568E05 3.57783E05 2.97090E05 2.29944E06 2.59076E06 7.26025E05 4.10475E05 1.04777E05 1.75311E05 3.41440E04 3.53326E03 8.54735E02 8.10804E02 5.10321E03 8.79411E03 1.15624E04 1.91295E04 4.11896E03 8.05647E02 4.55329E03 9.14397E03 1.96028E04 2.65201E03 1.02515E05 8.15233E04 2.04183E03 2.23768E04 2.08945E04 2.27736E05 3.09857E05 8.05858E04 4.07066E05 1.53405E05 1.43951E05 2.21552E05 8.52586E04 2.07545E05 1.03046E05 6.07647E04 9.75603E04 9.25574E03 1.42734E04 4.57172E04 2.59905E04 1.34144E04 2.15069E03 1.13079E04 2.16830E04 1.52005E03 7.01970E03 2.37960E04 2.27489E04 1.54114E04 5.09463E03 4.21295E03 1.79070E04 2.24261E04 3.69969E04 4.42433E04 3.93678E03 1.56269E05 3.69073E05 4.34419E05 1.93299E05 5.99842E05 1.60116E06 2.50580E05 7.87499E04 6.30614E05 4.46439E05 3.23352E04 1.11588E04 3.03148E04 9.38022E04 7.06128E04 3.04551E04 3.53301E04 2.81280E04 3.67013E03 7.07023E02 2.62790E03 6.46986E03 2.55038E04 2.39503E04 3.83719E04 4.50294E04 6.11576E04 3.36419E04 2.14872E04 6.80557E04 6.17267E03 4.93637E04 1.36400E04 5.07825E03 1.12994E04 1.45116E04 1.63470E04 9.26722E03 7.72696E03 6.81692E03 3.14549E03 6.53177E03 6.93528E03 3.77271E03 1.04112E04 2.60663E03 2.09979E03 8.93897E03 3.79434E03 1.71639E03 5.38108E02 1.37940E03 8.59904E03 1.08311E04 9.00169E03 3.98212E03 1.78036E03 5.96588E03 8.07439E03 9.20573E03 2.04991E04 2.97116E04 1.60475E04 7.86303E03 2.18750E03 2.49110E03 5.50977E03 1.02770E04 1.41580E04 5.08366E03 4.75387E02 3.17652E03 1.72888E03 4.72937E01 1.71004E03 1.32850E04 5.82739E03 2.56597E03 2.95610E03 2.93342E03 3.15847E04 5.73686E03 9.09110E03 9.33342E03 2.10425E03 1.04503E04 8.32114E03 4.37236E03 3.12088E04 2.09173E04 4.68073E03 -Frame 257 3.10068E05 3.79756E05 9.77538E05 8.83908E05 1.17920E06 2.38953E06 1.06637E06 6.50894E05 1.01502E06 5.96042E05 1.76464E06 1.10567E06 1.34816E06 2.14975E06 9.64437E05 2.92744E06 1.20818E06 1.17002E07 3.35787E07 7.64327E06 4.05926E06 4.36308E06 2.17311E06 8.57212E06 3.77778E06 4.36420E06 5.22758E06 1.30396E05 9.28909E05 5.47657E05 1.84691E06 2.61373E06 6.14585E05 5.08083E05 2.87097E05 1.96502E06 3.61074E06 2.45504E06 5.03311E06 4.64519E05 8.88932E06 1.24026E07 4.17657E05 5.62873E06 6.12269E06 2.43919E05 4.45733E05 1.22681E05 6.30696E05 6.57919E05 1.17116E05 4.63021E05 1.16221E05 9.18724E04 2.01080E05 1.05637E05 3.26343E05 1.59135E05 1.16656E04 4.36124E04 3.16977E04 2.55564E05 1.55531E05 1.23457E04 1.03546E05 3.33615E04 2.05869E04 1.56835E04 1.50299E03 3.41149E03 2.67704E03 1.50574E04 1.20268E04 2.79065E03 1.48797E04 1.29954E04 5.59516E04 7.55509E04 4.84258E03 7.04925E04 1.88139E03 3.40395E05 4.69238E05 1.82239E05 6.27361E05 3.48004E05 1.09770E04 1.10064E05 9.35829E04 2.53299E05 7.86720E04 2.85743E03 2.68445E04 7.36956E03 8.36805E04 6.55594E04 1.11301E05 2.01946E05 7.70052E04 6.02775E03 1.15506E04 6.29641E04 1.67663E05 4.84130E04 5.00416E04 7.69326E03 7.31101E04 3.36473E05 2.13502E05 3.39247E03 3.03366E05 1.40194E05 8.46366E05 9.92273E05 2.05168E05 1.21685E04 2.11699E04 1.40708E04 1.50864E04 2.58763E04 1.53809E04 4.54234E03 2.27607E04 2.86644E04 1.70664E04 1.94820E04 4.80441E03 5.80023E04 9.58009E04 1.97206E05 3.35550E05 1.68128E05 1.81480E05 4.02533E05 1.00543E06 1.57928E06 1.36215E06 1.20080E06 7.71963E05 3.05173E05 1.38145E05 1.00890E05 2.01524E05 2.28571E05 1.22149E05 8.81268E04 2.44162E04 9.44692E03 3.56433E04 2.17824E04 1.42902E04 3.14158E04 2.82159E04 2.83664E04 1.33865E04 2.45950E03 4.98268E03 3.60710E03 3.11002E03 7.39506E00 5.03333E03 1.46251E04 1.00002E04 1.74387E04 1.64474E04 2.36913E05 2.79634E05 4.23372E04 3.13387E05 9.01306E05 6.47572E05 1.67568E06 2.08539E06 2.37128E06 3.40307E06 1.53057E06 2.86729E05 6.06917E04 3.55938E04 4.06877E04 3.96356E04 3.17371E04 2.11780E04 3.64456E04 1.41444E04 3.02466E02 6.72322E03 5.25349E03 1.43078E02 5.40207E01 3.26232E03 1.49306E04 3.09246E04 7.70742E03 2.55783E04 4.55059E04 6.62888E04 3.27914E04 1.51597E03 1.15180E03 7.25945E03 1.66830E04 4.57529E03 3.58210E02 1.13079E03 1.17163E04 9.20440E03 6.30841E03 6.83247E03 3.84777E03 5.85113E02 4.29364E03 3.25704E03 2.31506E03 2.52776E03 1.73725E03 3.44617E03 4.09473E03 1.44012E04 2.99364E04 1.77433E04 3.50860E03 3.67678E03 2.09329E03 6.70299E02 1.01071E03 9.56000E03 4.07764E04 1.78306E04 4.09097E03 9.04641E03 3.63050E03 2.71470E03 2.66697E03 4.39359E01 3.01913E03 5.13685E03 3.80545E01 4.32469E03 7.39852E03 9.18941E03 3.08637E03 4.42544E03 4.25601E03 7.89490E03 3.74514E04 1.98720E04 1.15748E04 5.05742E04 7.68043E04 1.35322E05 1.40965E05 4.45048E04 6.76513E03 4.39756E04 9.30013E04 8.13976E04 -Frame 257 1.56582E05 2.01359E05 8.07115E05 6.84079E05 5.21011E05 2.09356E06 4.50946E05 5.23132E05 7.65172E05 1.63600E05 1.59063E06 4.21964E05 1.06344E06 1.54084E06 1.52635E05 2.70412E06 1.08042E05 1.57116E07 2.51713E07 1.82858E06 5.47094E06 1.40300E06 3.52777E06 8.56990E06 3.99736E05 3.39320E06 2.04553E06 7.33630E05 1.34319E06 2.12716E05 1.94612E06 1.20213E06 9.13169E04 6.24569E05 3.39696E04 2.59073E06 2.38130E06 7.61902E05 4.08642E06 5.62891E06 1.47210E07 8.29161E06 5.82690E04 3.57606E06 1.26432E06 2.73845E05 1.14330E05 2.38481E05 9.99388E05 4.21211E05 3.85912E04 1.93850E05 5.11357E03 2.75724E05 1.60687E05 5.04157E04 1.27323E05 5.14398E04 8.49088E04 1.85506E04 7.13702E04 1.21078E05 1.89994E04 8.25774E04 1.98216E04 4.53662E04 7.53435E04 7.15249E03 1.02732E03 3.59516E03 1.78713E04 1.65094E04 6.21428E03 7.51946E03 4.68454E04 1.18033E05 1.01359E05 7.83626E03 7.36849E03 1.50134E04 3.22752E05 5.69213E05 2.62188E04 2.90809E05 1.91874E05 2.52737E05 2.58206E05 8.88022E04 3.51275E05 2.16978E05 2.14583E04 8.83590E03 2.14602E04 1.23206E05 1.05756E05 5.67587E03 3.74534E04 1.08661E04 2.38147E05 2.03907E05 3.64177E04 1.14133E05 9.51223E04 8.50354E04 3.08517E04 8.79552E03 7.49385E04 3.51214E04 1.10847E04 2.31146E03 1.47097E05 5.84707E05 6.72845E05 1.82660E05 1.71886E05 4.87310E03 5.72515E04 7.73241E04 6.81566E03 7.18280E03 2.35729E02 1.68715E04 3.15192E04 9.56143E03 3.28937E03 1.03085E04 4.49048E04 1.03494E05 1.02350E05 1.67812E05 3.18029E05 2.82345E05 3.37288E05 3.01429E05 6.41762E05 1.01854E06 1.36585E05 1.77455E05 3.29962E05 9.65833E04 4.62594E04 4.91222E04 1.11587E05 6.94605E04 1.09666E04 2.43825E04 3.12893E04 7.86367E03 2.84053E04 3.63573E04 2.33427E04 3.33941E04 2.02746E04 2.42045E04 1.80649E04 7.14849E02 5.93411E03 1.02858E04 4.93024E03 1.50713E03 4.43114E03 1.49210E04 1.86103E04 6.27420E04 3.51492E05 3.55684E05 6.81187E04 3.49004E04 5.71182E05 1.30397E06 7.86318E05 9.88538E04 3.33037E05 1.77162E06 2.34632E06 3.02785E05 7.45415E04 5.39427E04 9.48398E03 4.97849E02 1.60399E04 5.67199E04 4.09077E04 3.95227E04 3.07324E04 1.86627E04 1.07307E04 4.40453E03 2.37328E03 7.26313E02 6.30533E02 2.72636E03 8.98493E03 1.73107E02 2.40600E04 1.62928E04 1.65510E04 9.66166E03 2.00443E04 1.75646E04 9.78614E03 1.58663E04 1.95753E03 3.56251E03 1.83861E04 1.39841E04 8.50418E02 6.68517E02 2.48578E03 4.30994E01 4.98339E03 4.00185E03 2.10214E03 7.22429E03 2.86217E03 9.99183E02 2.67609E03 1.94871E03 6.06247E03 1.14848E04 8.61808E03 2.48153E03 4.61896E03 1.33041E03 2.28794E03 3.49653E03 1.79138E04 2.20673E04 4.95276E03 7.15006E01 1.08683E03 1.41987E03 3.68386E03 1.52876E03 1.76112E03 4.96081E03 7.51799E03 1.02154E04 4.00604E03 5.42629E02 7.43108E03 6.25215E03 1.02225E04 1.07873E04 7.32023E03 4.28205E04 7.88195E04 5.95028E04 2.81188E03 1.20012E05 2.75005E05 1.11092E05 8.39066E03 2.67854E04 5.64641E04 4.32679E04 1.36191E03 -Frame 257 6.71220E05 2.06483E05 4.56871E05 3.59598E05 3.51456E05 1.88186E06 6.38245E05 6.67447E05 5.06370E05 3.46953E05 1.47265E06 3.41082E05 1.33847E06 1.21937E06 8.24589E05 2.46172E06 3.11823E06 1.91930E07 1.81271E07 5.33531E06 4.90362E06 1.61889E06 6.47253E06 5.71941E06 1.18639E06 3.07621E06 1.79074E06 1.55017E06 8.07969E05 4.18282E05 1.99241E06 8.61744E05 5.89906E05 8.89265E04 9.76090E05 2.61301E06 7.40602E05 1.90912E06 2.96083E06 6.92027E06 1.10357E07 2.00045E06 2.44855E06 2.02658E06 7.56712E05 3.24422E05 2.73736E03 4.60204E05 7.02112E05 1.36078E05 7.14144E04 1.67647E05 4.25278E05 2.35063E05 5.08329E04 1.34768E05 9.91902E04 8.80218E04 5.99463E04 4.11781E03 5.66510E04 8.11294E04 9.37117E04 4.06786E04 2.43747E04 1.17702E05 9.31960E04 4.23259E04 8.34675E03 1.17392E03 1.22278E04 6.59600E03 3.78531E03 9.35924E03 5.46177E04 1.09161E05 3.86292E04 6.12817E03 3.43382E04 2.83113E05 4.97380E05 3.03890E05 3.62659E05 2.17765E05 3.13267E05 2.92303E05 8.55459E04 2.34857E05 1.64326E05 7.32103E04 1.90696E04 1.01440E04 9.56052E04 8.71318E04 3.87933E04 1.31373E04 1.70568E04 1.81678E05 2.71391E05 1.39814E05 1.35880E05 1.07655E05 1.00388E05 8.31484E04 1.14882E04 2.28489E04 3.53558E04 8.15955E04 4.66450E04 4.92170E03 5.01699E04 3.46542E05 5.85984E05 2.00886E05 9.90788E04 9.45237E04 1.27982E04 4.62867E04 3.51650E04 1.66007E04 1.15473E04 1.32992E03 4.99765E03 2.37878E03 5.23393E03 1.09308E04 2.65056E04 1.45398E04 1.61462E04 1.14620E05 2.70605E04 9.40288E04 1.54326E05 5.72866E04 3.90268E05 1.78731E05 6.97746E04 7.57830E04 4.71961E04 9.97853E04 2.42277E04 2.21433E04 6.11029E04 1.14132E04 9.44958E03 1.00735E03 9.11952E03 2.60037E04 4.87300E04 2.02758E04 1.12144E03 1.78375E04 4.48029E03 3.62344E03 1.89165E04 2.78533E04 1.37258E04 3.45243E03 1.16117E04 9.20772E03 6.17767E03 8.09133E02 2.48003E04 7.77895E04 1.77753E05 1.58167E05 1.03141E05 1.87977E05 7.37999E05 1.78413E06 5.19421E05 2.80476E05 7.99172E05 1.02952E06 2.08505E06 7.49022E05 1.20221E05 4.29523E05 2.18239E05 4.91137E04 1.34645E04 7.37152E04 7.94517E04 5.14706E03 5.61989E03 1.47975E03 1.96342E03 4.82572E03 9.33750E03 1.12429E04 8.96853E03 3.40145E03 1.10776E04 3.45045E04 7.87747E04 3.39724E04 6.23461E02 7.79932E03 1.83288E04 4.56148E04 3.51492E04 2.11120E03 7.70777E03 8.68955E03 5.49959E03 7.89393E03 4.98136E03 2.94831E03 5.05420E03 2.78947E03 2.12541E02 3.60698E03 6.31470E03 8.24743E03 1.02039E04 4.13770E03 6.69557E01 1.85656E03 9.56770E02 3.99252E03 2.39494E03 1.44803E04 3.08437E04 1.18901E04 2.73674E03 3.36819E03 6.01876E03 6.78755E03 3.63135E03 3.51837E03 1.64427E03 2.22629E03 4.01502E03 3.10769E02 1.80677E03 2.50294E03 3.32010E03 8.84187E03 4.33303E03 1.90388E03 5.71990E03 4.10821E03 3.64826E03 2.74576E03 1.23610E04 2.57076E03 5.63425E03 1.13639E04 4.03186E03 7.86402E04 8.04359E04 2.07809E02 2.10439E04 6.93875E03 1.36269E04 2.04024E04 1.40318E03 -Frame 257 3.04831E05 3.15926E05 3.34770E05 3.72145E05 5.97245E05 1.67892E06 8.09677E05 7.33227E05 6.33960E05 7.95173E05 1.18193E06 9.62097E05 1.69781E06 1.22511E06 1.95451E06 2.22150E06 7.44383E06 2.09498E07 1.44042E07 5.19443E06 3.75005E06 4.78398E06 6.24486E06 3.63491E06 3.07062E06 2.30502E06 1.06682E06 8.37684E05 9.48989E05 1.90674E06 1.30058E06 5.48204E05 3.21357E05 9.04522E05 2.77834E06 1.96611E06 1.68963E06 2.29512E06 3.50795E06 1.07227E07 7.04089E06 3.41278E06 2.50122E06 8.90973E05 2.97894E05 2.78586E05 6.03079E05 4.05106E05 1.44301E05 7.75459E04 3.32752E04 1.50694E05 1.74543E05 9.22435E04 6.80818E04 2.48597E04 1.76090E04 2.00322E04 3.03340E04 3.50223E04 1.94135E04 7.88681E03 1.29745E04 7.11822E04 5.27126E04 1.87882E04 6.70149E02 2.12046E02 1.28264E04 9.53670E03 1.32056E04 5.16636E03 1.24955E04 8.04691E04 6.81507E04 2.44800E04 1.78754E04 7.73060E04 3.40013E05 4.67738E05 3.34503E05 2.27882E05 2.20723E05 1.80521E05 1.68347E05 2.13419E05 1.27915E05 6.86806E04 4.70398E04 2.86289E04 8.48828E04 1.17371E05 1.04165E05 4.30069E04 2.06885E04 3.84358E04 4.32319E04 4.49698E04 6.49854E04 6.82749E04 3.97345E04 3.49686E04 1.36957E05 2.60744E05 1.77117E05 6.32562E04 3.50857E04 5.32823E04 6.56472E04 5.97140E04 3.99996E04 2.15732E05 4.97669E05 1.87108E05 4.78214E04 8.16638E04 8.78819E04 5.11021E04 9.30398E03 4.42832E02 9.61246E02 6.94199E03 4.21952E03 2.51853E03 1.86584E03 9.08207E03 9.41535E03 2.12280E04 2.50328E04 2.74316E04 6.11672E04 2.06115E03 3.29516E04 4.29324E03 2.53941E05 3.16664E05 8.61449E04 1.28451E05 8.39518E04 3.94087E04 7.51476E04 3.61905E03 2.74835E04 9.45212E03 1.28744E03 5.29581E03 1.71293E03 9.11204E02 2.16709E04 1.33617E04 3.74946E02 4.83403E03 9.58556E03 3.53357E03 9.31426E03 9.29653E03 2.92585E02 4.17207E03 9.04732E03 1.15763E04 8.70647E03 5.85195E03 1.36523E04 1.00334E04 5.14877E04 6.50160E04 6.48006E04 7.12715E04 3.22967E05 1.12905E06 6.86883E05 9.02815E05 1.67214E06 4.46106E05 5.17503E05 8.16230E05 6.45849E05 4.11019E05 1.53190E05 7.51485E03 1.87696E04 4.87474E04 5.63344E04 1.97969E04 1.30132E03 2.39946E03 9.09357E02 4.13682E03 7.71348E03 1.54131E04 1.57457E04 1.54393E04 3.73919E03 5.06139E03 3.92774E04 6.18868E04 2.81141E04 7.30728E03 2.65806E03 1.38880E04 2.19423E04 8.17903E03 1.23219E03 1.38771E02 8.78041E02 2.22915E03 2.60225E03 8.01284E02 2.39796E01 1.43398E03 3.63830E03 1.86039E03 3.50814E02 5.88185E02 1.30617E03 4.63433E01 3.26831E03 8.38218E03 1.13854E04 8.56949E03 4.68473E03 2.14540E04 3.60559E04 1.11978E04 5.96378E02 1.07629E03 2.30300E03 1.91161E03 2.82024E03 4.95896E03 7.80066E03 1.22578E04 7.49584E03 1.34470E02 8.75210E02 3.00936E02 1.27209E03 3.79196E03 2.16075E04 1.62080E04 1.48500E03 5.99796E03 3.72892E03 1.77400E04 1.61311E04 3.58515E02 1.51056E04 2.00615E04 5.22278E04 6.32211E04 5.22417E04 7.62960E04 1.89670E04 1.92697E03 1.69670E03 2.04729E04 4.97677E04 -Frame 257 1.71546E04 8.78571E04 2.38811E05 4.48869E05 8.73515E05 1.34038E06 6.34533E05 6.64482E05 6.63002E05 7.76005E05 1.01789E06 8.11874E05 1.43818E06 1.09737E06 1.59529E06 2.17520E06 7.92119E06 2.01979E07 6.75902E06 2.01272E06 2.23975E06 2.73530E06 5.55855E06 2.96165E06 2.67217E06 1.45912E06 2.00112E05 8.15890E05 7.10506E05 1.19660E06 6.69055E05 1.77960E05 2.51651E05 7.67227E05 2.32988E06 1.54484E06 1.01133E06 1.25673E05 3.76260E06 7.72458E06 2.26641E06 7.71155E05 3.75945E05 4.50781E04 2.88436E05 1.98168E05 3.28174E05 1.85149E05 5.82037E04 2.40126E04 7.60837E04 1.95254E05 7.07799E04 2.04950E04 2.01256E04 6.42635E03 1.85324E04 8.05512E03 2.44107E03 1.47673E03 8.54433E03 1.33650E04 8.32794E03 2.34310E04 1.58947E04 2.45215E02 3.23112E03 3.64109E03 5.11932E03 8.98901E03 1.04914E04 1.27311E03 1.64504E03 2.08841E04 2.75661E04 1.29558E04 1.14251E04 1.80593E05 4.70450E05 1.68569E05 1.27017E05 8.42870E04 5.42750E04 1.83670E05 6.69988E04 7.86854E04 6.21676E04 3.58729E04 4.55815E04 3.19170E04 5.54504E04 2.06294E04 3.35987E04 2.64193E04 2.37498E04 4.28848E04 1.86601E04 4.97562E03 1.07129E04 8.84465E04 1.32521E05 5.84257E04 7.94424E04 3.18484E04 6.65402E03 3.15215E04 1.47177E04 1.57634E04 1.55702E04 4.32912E04 4.05594E04 3.05052E05 4.84751E05 8.75130E04 1.63324E04 6.00066E03 2.98412E04 2.90945E04 3.39876E03 1.83913E03 2.58426E03 3.82628E02 2.74431E03 1.61507E03 8.35375E03 2.25057E04 1.85818E04 2.31068E04 2.64318E04 1.75942E04 2.13061E04 8.91526E04 1.60569E05 2.58816E05 4.62583E05 2.17935E05 3.49694E04 7.31271E04 1.28285E05 1.49232E05 8.18575E04 5.21699E04 2.30747E04 1.09716E04 3.30013E03 1.14526E03 8.53666E02 4.38503E03 1.70723E04 1.29060E04 1.93981E03 6.13307E02 3.65254E03 1.19322E03 4.51122E03 5.42272E03 9.58066E02 3.22233E03 5.53912E03 3.03786E03 4.50901E02 2.34841E02 6.18886E03 6.10443E03 1.68346E04 1.41699E05 1.97308E05 1.80167E05 4.49597E05 3.18356E05 1.02783E05 1.75141E05 7.70672E05 8.02990E05 1.11209E05 9.02780E02 9.71828E02 2.13825E03 1.16605E03 1.30625E04 4.43902E03 1.57809E03 1.57132E03 7.15575E03 1.51635E04 6.56780E03 1.91490E03 2.49759E03 2.38677E03 1.87636E03 1.06633E03 5.84424E03 2.09545E03 2.01812E03 1.85224E04 1.85060E04 1.89168E02 3.08008E03 2.19940E03 1.88004E03 1.53912E03 1.14215E03 8.00156E00 1.88464E02 1.99796E02 9.79490E02 3.95750E03 3.41286E03 7.79795E02 6.35554E02 4.67422E02 5.48180E02 6.39653E02 3.57304E03 4.63987E03 5.55156E02 4.51138E02 8.15266E02 3.98607E03 2.67798E03 1.03008E04 7.59039E03 1.03085E04 6.07729E03 5.84163E02 4.71481E02 2.36487E03 2.88649E03 6.77351E02 1.24401E03 5.23241E03 1.19840E04 9.60062E03 4.97118E03 8.89602E02 2.09380E03 8.48758E03 1.20531E04 2.53640E03 1.33596E04 3.29138E04 5.29129E04 4.53859E04 2.27048E04 3.95988E04 3.11141E04 2.45260E04 2.54553E04 4.12382E04 5.44645E04 4.47820E04 4.08284E04 2.56044E04 2.08717E04 1.23039E04 4.99698E03 1.60964E04 -Frame 257 1.33002E04 6.07712E04 4.43192E05 3.76584E05 7.76175E05 1.08530E06 8.22741E04 6.49891E05 2.68400E05 5.46790E05 5.08650E05 2.74957E05 9.45124E05 1.35415E05 1.56528E06 2.52371E05 7.25878E06 1.13793E07 9.58840E05 2.86666E06 4.88039E05 3.09689E06 2.97836E06 1.52732E04 6.19798E05 2.43742E05 1.79446E06 7.99690E05 3.97336E05 3.54029E05 1.07885E05 7.77007E05 3.81827E05 1.12721E06 3.01706E05 1.04700E06 8.22251E05 1.44230E06 6.50675E06 3.09010E06 1.46143E04 6.15184E04 1.59776E05 4.55614E05 1.20939E05 5.97903E04 3.95772E04 8.41059E04 1.81206E05 7.36795E04 1.22607E05 6.83125E04 3.26210E04 1.27462E04 3.92180E04 1.49577E04 3.57220E03 1.03622E04 1.12955E04 1.89578E04 2.49128E04 3.24389E03 1.82254E03 1.11141E04 2.48369E04 1.48700E04 4.17149E03 7.09072E03 1.58539E04 2.73260E04 1.85121E04 1.62173E03 2.33892E02 5.38187E03 4.65178E03 1.01162E04 6.61381E04 8.13156E04 2.71624E05 1.53289E05 5.32833E04 1.76712E05 5.62760E04 6.30481E04 1.72111E04 3.99936E03 1.04112E04 5.03836E03 2.71970E04 7.27990E02 4.04919E04 3.78501E04 7.55047E02 5.33345E03 3.55675E03 4.30319E04 3.17846E04 7.58964E02 1.14709E03 1.94744E04 5.90331E04 1.42008E04 9.32691E03 1.14872E04 9.25875E03 3.37280E02 2.92382E03 1.93111E03 6.07981E03 7.88380E04 6.14967E04 8.34132E04 2.59051E05 7.70406E04 2.68768E04 1.82042E04 7.49854E03 3.05938E03 1.32088E04 1.44033E04 1.13260E04 1.14359E04 1.30925E03 3.29885E03 1.67168E04 3.34886E03 2.30566E03 9.04096E03 1.16604E04 3.08152E03 1.01059E04 4.29095E04 2.67099E04 1.14592E04 2.06175E05 3.82256E05 1.98735E05 4.73253E04 1.93739E04 3.12173E03 1.80651E03 4.74589E03 1.08908E04 7.34469E03 1.29585E04 1.18312E04 7.82327E03 5.95622E03 1.78418E04 7.61058E03 4.61942E02 1.15821E03 5.54146E03 5.59563E03 2.23955E03 2.69210E03 2.51406E03 2.62242E02 7.08169E03 2.06304E04 1.06094E04 8.67270E03 4.31833E03 3.89952E03 4.39670E04 2.96679E04 1.58369E04 7.77073E04 1.01675E05 7.69454E04 6.49765E04 1.98194E05 1.19034E05 1.91385E05 4.36507E05 2.65257E05 1.56794E05 9.20848E04 8.13524E04 6.00071E04 3.91946E04 2.28487E04 7.62495E03 6.09111E03 7.76629E03 9.41153E03 4.69599E03 1.01844E03 2.02290E02 7.09958E02 2.32879E03 3.09339E03 8.91906E02 3.30278E03 1.69744E04 1.88974E04 4.91624E03 3.74910E01 3.09720E03 8.90713E03 1.35989E04 1.53113E04 1.06825E04 1.12943E04 6.63962E03 1.38022E03 4.36716E02 1.40552E03 3.71532E03 2.96276E03 8.18837E02 5.27198E01 6.41689E02 5.12759E03 1.21875E04 7.16855E03 1.16972E03 5.96631E02 3.77605E02 3.41615E03 3.23516E03 4.56531E03 4.05017E03 2.67073E03 8.41552E02 3.33209E03 6.57343E02 2.86034E01 6.97117E02 1.46671E03 4.11730E02 6.83639E02 2.98935E02 6.78735E02 2.70083E03 6.63036E03 4.74923E03 1.33801E03 4.12667E03 6.35529E03 1.25013E03 1.44707E04 2.71260E04 2.09797E04 8.44944E03 6.52813E03 1.02878E04 1.37604E04 1.77927E04 1.13301E04 8.97647E02 3.05220E03 3.92403E02 9.62146E02 1.26781E04 2.25645E04 2.34481E04 -Frame 257 2.50918E04 1.78152E05 6.71892E05 2.07627E05 4.52076E05 1.15419E06 1.86801E05 5.82395E05 1.50235E05 4.42017E05 4.17997E05 3.16501E05 8.12331E05 2.82958E05 1.48308E06 9.42000E05 6.87318E06 8.01011E06 2.91192E06 2.02946E06 2.70829E05 3.23268E06 2.39290E06 2.91499E05 2.59887E05 9.32593E05 2.12134E06 5.83587E05 2.93872E05 4.47326E05 4.55870E05 6.64777E05 1.04990E05 1.06236E06 1.38448E06 3.19805E06 3.67152E06 3.26065E06 5.11713E06 1.63254E06 1.38432E05 1.93605E04 2.32074E05 3.71333E05 9.19622E04 4.29834E04 7.14715E04 1.16208E05 5.67858E04 1.92383E04 5.12658E04 4.29309E04 3.22599E04 2.83586E04 1.28386E03 4.45920E03 9.96985E03 1.52921E04 8.50823E02 1.38216E04 3.00420E04 2.84317E04 1.19073E04 6.91420E03 3.86656E04 3.33143E04 1.12053E04 9.42132E03 2.63421E02 1.48509E04 6.40465E03 1.19284E02 2.59572E03 1.75312E04 1.00410E04 4.65237E03 2.99285E04 1.00496E05 2.84007E05 2.75827E05 8.35165E04 6.00866E04 6.99732E04 7.69706E04 2.79439E04 5.99553E03 1.06106E04 2.58431E04 2.47914E04 6.65013E03 8.51258E03 1.07884E04 1.02983E04 1.83678E03 8.75433E03 3.51642E04 2.41041E04 3.23687E03 1.88629E03 1.02086E04 9.82657E03 1.68421E04 4.61264E03 9.75667E02 5.86678E03 1.51429E04 1.14441E04 1.15487E04 5.02459E04 9.39421E04 1.76235E04 5.11230E04 1.52676E05 1.10660E05 4.42061E04 2.46874E04 2.07661E04 4.42416E03 2.64614E03 7.33465E03 1.67652E03 4.38970E03 9.04706E03 1.55623E04 4.91210E03 1.49123E03 3.64640E03 1.14823E04 1.03844E04 3.15165E03 4.24901E04 1.10287E05 1.03239E05 1.61609E05 1.08234E05 7.02235E05 6.58600E05 7.97846E04 2.40007E04 5.54954E04 4.61839E04 2.67442E04 1.88691E04 4.05921E04 1.68328E04 3.93919E03 2.56692E04 1.47170E04 5.31031E03 1.86619E04 1.44717E04 1.50124E04 8.64908E03 2.73240E03 2.19360E03 1.30136E03 4.70480E03 8.27615E03 1.91599E03 4.51702E03 1.23904E04 9.67426E03 7.38512E03 5.02379E04 1.29204E05 6.57126E04 2.26211E04 9.40023E04 2.01123E05 3.72491E05 1.76339E05 6.40886E03 1.11327E05 2.58371E05 1.38688E05 4.85367E04 2.62768E05 6.34168E04 5.99339E04 6.97137E04 3.78151E04 6.17257E04 2.25995E04 8.43749E03 3.94798E03 3.33112E03 3.88482E03 7.56633E02 1.12575E03 1.18747E03 6.29091E02 3.07542E03 5.64105E03 3.51757E03 7.73713E03 1.83805E04 7.85221E03 5.99207E03 1.18560E04 6.96517E03 2.74937E04 2.18136E04 8.81730E02 1.34127E04 1.07979E04 1.93084E03 8.46884E02 1.57432E03 8.36036E02 2.76991E03 7.41825E03 4.35403E03 2.30379E03 8.22347E02 1.60343E03 2.97973E03 3.19582E03 2.16764E03 2.52244E03 1.08701E03 2.74874E02 9.19464E02 4.54290E02 6.17061E02 1.45890E03 2.75128E03 8.08448E02 6.78008E01 3.58861E02 2.43225E03 3.72431E03 2.78602E03 5.61353E03 9.55716E03 5.63798E03 6.80076E03 7.32178E03 4.17804E03 3.98429E03 8.15062E03 1.88666E03 1.30059E03 4.97433E03 5.64777E03 2.17671E03 1.22065E04 5.06130E04 3.60376E04 6.26549E03 9.74462E03 1.02094E04 5.46282E03 8.88774E03 2.78723E04 2.99678E04 5.01583E03 2.10982E04 -Frame 257 7.11021E04 1.16373E05 6.39617E05 3.46325E05 7.10500E05 1.15411E06 6.56899E05 4.77090E05 3.72637E05 4.97897E05 4.78124E05 6.09483E05 6.20991E05 8.98794E05 1.37989E06 2.55247E06 6.40347E06 5.95600E06 2.33379E06 1.82395E06 1.74387E06 2.56242E06 1.85345E06 3.41522E05 1.39830E05 8.04847E05 1.88830E06 1.22175E06 3.36744E05 3.85049E05 6.34347E05 5.97020E05 4.66986E05 8.01862E05 1.32795E06 3.62429E06 2.94962E06 1.54177E06 1.62920E06 6.38549E05 3.48067E04 4.06926E04 9.53443E04 1.02870E05 2.74209E04 1.14202E04 9.43783E03 2.31528E04 3.14351E04 4.97302E03 4.29064E03 5.12212E03 3.03966E04 3.04578E04 2.13584E03 4.26457E03 1.57082E03 1.11249E04 4.55340E03 2.05355E03 5.67863E02 7.52712E03 7.48557E03 2.33617E04 5.37850E04 1.72184E04 1.36811E02 1.19924E03 5.32728E03 1.65138E04 1.29562E04 2.40700E03 6.39142E03 2.94694E04 5.72322E04 1.52879E04 3.36271E03 2.73607E04 2.54459E05 1.67202E05 1.39410E04 1.26380E03 2.13860E04 7.67642E04 4.23580E04 3.75941E03 2.06228E03 1.49939E04 1.23026E04 1.12257E03 1.77046E03 3.16003E03 4.30249E03 2.09655E03 5.51626E03 3.77834E03 1.85953E02 6.62728E03 2.12536E03 2.34103E03 1.37745E04 3.37479E04 2.75019E04 5.45487E03 1.55081E04 2.23759E04 4.62782E03 2.98193E03 6.85707E04 1.69416E05 6.96739E04 3.19324E03 5.89364E04 2.66341E03 5.35407E04 5.93082E04 1.46843E04 9.86457E02 9.81137E02 4.35852E03 9.83594E03 3.94272E03 1.82941E03 1.88862E03 5.16505E03 6.08571E03 5.52140E03 8.17398E03 3.52441E03 8.15502E03 4.60686E04 9.96504E02 2.45178E05 5.70145E05 4.04650E05 4.95225E05 1.72861E05 6.94603E04 7.57961E04 4.17545E03 1.30270E04 7.87658E03 2.68408E04 2.74343E04 5.06410E02 1.50952E04 1.32453E03 5.40410E04 5.66018E04 1.17182E04 6.71345E03 2.34012E03 6.12103E03 1.44482E04 6.45011E03 2.36598E03 1.34626E03 7.45015E02 1.70060E03 1.87764E03 2.72559E03 3.12485E03 1.79929E04 7.69291E04 1.27833E05 2.57800E04 3.84405E04 2.96359E04 9.46476E04 1.78054E05 4.09360E04 2.99479E04 6.30549E02 1.15000E05 1.07882E05 1.01162E05 9.04465E04 3.12019E04 7.20796E04 2.73711E04 1.34653E04 2.99326E04 2.58698E04 1.53291E04 8.96021E02 1.97605E03 4.38830E03 2.17179E03 2.48739E03 9.22976E02 1.03561E03 3.42122E02 1.66221E03 3.28502E03 1.22880E04 9.34938E03 3.81214E02 4.74872E03 1.29474E03 1.68279E04 1.39675E04 8.10338E03 1.29057E04 5.12086E03 4.29655E02 1.99508E03 6.43818E03 8.81740E03 2.78581E03 3.74045E03 9.36716E03 6.45445E03 1.10069E04 9.50185E03 5.46538E03 1.90882E03 1.43322E03 4.63344E02 9.21198E02 1.74145E03 1.87024E03 1.71704E03 3.99892E02 2.75409E02 7.27966E02 2.06283E03 7.27618E02 5.90156E02 1.55395E03 2.29944E03 8.08064E02 3.78846E02 1.73860E03 4.63006E03 8.16100E03 4.25785E03 9.49529E01 3.00008E03 6.62206E03 9.59685E03 8.57471E03 1.59866E03 7.07889E02 2.52911E02 3.36388E03 8.56048E03 1.49162E04 4.63953E04 3.16539E04 5.04217E03 5.82483E03 4.29946E03 1.85958E04 3.86548E04 3.42651E04 2.43809E04 2.00534E04 -Frame 257 1.37059E05 2.45248E05 5.81036E05 6.12242E05 9.20763E05 9.87183E05 3.04713E05 3.50559E05 2.63720E05 4.11407E05 3.75986E05 4.21155E05 6.13429E05 6.35502E05 1.31544E06 1.29028E06 5.03454E06 3.23623E06 4.11178E05 1.59992E06 1.45511E06 1.93414E06 4.88485E05 1.12573E05 2.61059E05 9.29909E05 1.40586E06 5.13015E05 1.78750E05 7.93465E04 5.32804E05 6.72789E05 5.63774E05 4.26088E05 1.23442E06 5.90749E06 3.17078E06 7.51779E05 5.24779E05 7.60214E03 5.05236E04 1.02741E05 1.60055E05 8.36790E04 3.41422E04 2.19112E04 1.51551E04 1.92514E04 9.31253E03 4.78629E02 2.18776E03 1.00434E04 3.19700E03 2.02107E04 1.90157E04 9.35366E03 1.45649E04 2.25160E04 8.87883E03 3.68511E02 5.67805E03 6.42585E03 9.14008E03 1.23724E04 8.68723E03 1.04737E04 5.71994E03 4.91757E03 3.85353E03 9.08864E03 4.62680E03 7.66616E03 7.26157E03 6.17343E03 1.05201E04 5.19417E04 1.47720E05 1.64730E05 7.08270E04 6.80820E04 5.35166E04 3.44306E04 2.94249E04 1.27025E04 2.43854E03 1.34112E03 7.15633E03 2.18934E04 1.45350E04 4.50222E03 4.63294E03 1.28614E03 1.18586E03 3.41496E03 1.47890E03 6.12511E02 1.91576E03 5.32369E02 9.83892E03 1.62731E04 1.03105E04 1.38903E04 2.17874E04 8.01838E03 4.43120E03 3.48988E03 4.19052E03 1.65981E04 4.84224E04 5.93629E04 5.96203E04 1.12610E05 1.07110E05 2.35863E04 9.77865E03 1.16927E04 1.26861E03 6.18029E02 4.58624E03 1.18779E04 1.52109E04 2.28148E03 1.33941E03 4.39619E03 2.62943E03 9.27038E02 8.78136E02 9.97943E03 6.10730E03 1.43289E04 4.78736E04 7.56465E04 1.76551E05 1.03909E05 8.14340E04 1.42368E05 1.77041E05 9.88380E04 1.22862E04 2.65032E03 1.68487E04 2.42682E04 9.42582E03 1.39422E04 1.64242E04 4.86793E04 7.31056E04 2.51423E04 8.23538E03 1.67922E04 1.14853E03 4.48284E03 4.96688E03 2.65950E03 7.74303E02 3.80059E02 1.47614E03 4.04752E02 5.95773E01 7.94891E02 4.57159E03 2.46750E03 9.81813E01 7.26543E03 3.19463E04 2.59213E04 2.42481E04 5.53297E04 5.51270E04 2.89332E03 4.48063E04 1.12359E05 1.35788E05 6.94756E04 3.05594E04 2.94618E04 3.52965E04 1.43353E04 4.79056E03 5.35392E03 4.12648E03 5.09133E03 4.65123E03 2.42602E03 1.61777E02 2.90986E03 4.64786E03 3.11968E03 4.16517E03 2.16518E03 1.69771E03 4.09335E02 5.34088E01 2.06405E03 2.82331E03 1.68363E02 6.94630E03 8.25906E03 4.61190E03 2.86482E03 5.33880E03 8.77423E03 3.79973E03 5.17918E03 1.05378E04 8.28990E03 9.74606E03 7.09094E03 5.35780E03 5.08736E03 5.57570E03 3.90148E03 1.51766E03 3.04584E02 2.52511E03 1.05140E03 1.71924E02 3.38062E02 2.75180E03 2.02809E03 7.12810E01 2.49915E03 2.28880E03 6.36408E02 6.30673E02 1.27919E02 1.18303E03 2.43004E03 2.05692E03 8.08165E01 9.56939E02 1.96416E03 2.06760E03 3.07330E03 2.40691E03 4.67341E02 5.96104E02 1.86956E03 6.67315E02 3.06224E03 6.15258E03 6.73816E02 8.26988E02 5.56516E03 1.85576E04 1.81993E04 1.22172E04 1.03778E03 8.79720E03 1.15916E04 9.17966E03 2.21985E03 9.07291E02 1.74969E03 3.24931E02 3.12430E02 1.27890E02 -Frame 257 1.04337E04 2.49358E04 2.85989E05 2.52198E05 6.18472E05 7.07539E05 1.88005E02 2.66852E05 2.36556E04 3.35582E05 7.48322E04 3.13764E05 3.05824E05 2.39976E05 8.00387E05 3.97825E05 4.48850E06 1.77607E06 7.99149E05 5.21226E05 6.48356E05 2.10658E06 3.74982E05 5.54732E04 3.67841E04 9.04009E05 6.46311E05 1.11773E05 1.52085E05 3.02232E05 7.03509E05 1.75501E05 4.78941E05 4.46970E05 3.48818E06 2.60627E06 2.78270E05 1.35386E06 2.64303E05 2.13800E04 2.40090E04 1.43383E05 1.47020E05 2.36569E03 1.33202E04 7.56215E03 3.89456E04 1.89692E04 9.49490E03 4.28207E03 5.91837E03 2.25504E04 1.66422E04 2.41113E03 6.03660E03 9.44646E03 4.81766E03 1.44573E04 2.49919E04 1.60873E04 7.44044E03 6.73238E03 9.19526E03 5.09320E03 1.42685E03 3.31214E03 4.44184E03 6.34513E03 1.08543E04 1.65477E04 1.86168E04 2.49228E04 1.05131E04 2.08684E03 3.13784E02 1.85294E04 1.25772E05 1.06142E05 2.01474E04 2.66728E03 9.93856E03 1.26374E04 3.76162E03 7.35099E01 1.42280E03 9.40016E02 1.31487E03 5.88402E03 4.74216E03 1.12950E03 1.59336E03 3.14855E03 2.53870E03 1.28649E03 5.83596E03 7.70130E03 4.35744E03 4.10815E03 5.82359E03 5.51228E02 2.12232E03 4.67836E03 2.74707E03 3.58361E03 5.75452E03 6.09858E03 2.95430E03 5.68492E03 3.51415E03 1.40701E03 1.08915E04 2.63184E04 4.35314E04 3.78332E04 6.28726E03 4.70068E02 6.57820E03 5.88007E03 2.44883E03 3.84805E03 8.36979E03 8.93276E02 6.00456E03 9.42925E03 4.09462E02 3.90601E03 1.26580E04 2.25243E04 1.67128E04 1.11720E04 2.23346E04 3.08275E04 3.94606E04 6.06248E04 1.46833E05 1.05624E05 6.32531E04 9.41439E04 3.42308E04 1.49283E04 3.49178E04 5.88696E04 4.27794E04 2.38119E04 2.09097E04 2.64107E04 1.82619E04 1.58311E03 1.95041E04 2.76779E04 9.36626E03 5.94378E02 2.20395E03 1.65705E03 1.72715E02 1.37131E03 3.81435E03 2.22964E03 7.06392E02 3.12225E03 4.22617E03 7.25159E02 1.99680E03 6.57562E03 3.70821E02 5.16168E03 9.79582E03 9.35982E03 1.07228E04 2.27759E04 7.69641E04 7.98968E04 9.98069E03 5.71597E03 2.15731E03 2.04775E02 6.72621E03 1.35846E04 8.41206E03 8.96089E03 9.08037E03 7.30403E03 5.98203E03 2.39188E03 6.09867E03 6.32032E03 9.40154E02 6.16681E02 4.23747E03 1.47838E03 1.76301E03 6.40913E03 4.94127E03 7.23129E01 5.56225E03 1.09359E04 2.43944E03 4.01925E03 2.50412E03 5.02796E03 7.73749E03 7.57787E03 9.37335E03 6.81129E03 2.84345E02 2.08713E03 4.16276E03 1.19853E03 1.17256E03 2.17271E02 1.41133E03 1.36827E03 4.92988E02 5.53502E02 1.33309E03 3.89298E01 5.19396E02 1.51888E02 6.48022E02 2.41426E03 1.34795E03 3.83982E02 3.59249E03 2.81794E03 1.31159E03 4.33365E02 1.61713E03 3.70801E03 7.26062E02 4.60009E02 2.28350E03 4.62509E03 3.94838E03 4.22983E03 1.55283E03 2.50448E02 1.13594E03 6.30789E03 8.66996E03 1.14647E04 7.21130E03 4.85483E03 1.30310E04 2.70484E04 8.02461E03 9.19760E03 4.53472E02 1.91803E04 2.72844E04 1.38110E04 1.10426E04 4.59734E03 3.85164E03 2.35985E03 5.61717E03 7.85349E03 6.54549E03 -Frame 257 8.93416E04 1.71046E05 2.67791E05 2.46539E04 4.47223E05 6.82307E05 2.55045E05 2.54684E05 1.12136E05 2.92562E05 1.48778E05 4.63572E05 3.90574E05 6.66590E05 7.00865E05 2.00850E06 4.20276E06 2.32870E06 8.99768E05 1.60126E05 1.34540E06 1.41624E06 4.32142E05 2.37222E05 5.49074E05 1.01248E06 2.37892E05 1.85002E05 2.89339E05 5.33846E05 3.24458E05 2.01457E05 1.07233E06 2.36740E06 3.53360E06 2.01191E06 1.31461E06 6.92571E05 1.06418E05 3.81252E02 7.36663E04 1.60579E05 4.52062E04 1.35446E04 2.42243E04 5.61037E04 3.26022E04 1.16725E03 2.73263E04 4.09701E04 2.56708E04 4.37673E03 6.96511E03 1.23729E04 1.16518E04 7.42708E03 6.82560E03 1.49554E04 9.91216E03 1.54710E03 3.23952E03 1.09355E04 2.48282E04 1.04935E04 9.37517E02 3.42943E03 7.11573E03 6.68520E03 4.66550E03 2.19818E03 1.03634E04 1.63724E04 4.84882E03 5.80102E03 1.62133E04 3.64309E04 1.97702E04 2.05725E04 1.75144E04 3.33666E03 1.09461E04 9.95978E03 6.95082E03 4.39721E03 5.72318E03 1.95985E03 3.57046E02 1.36575E03 5.09186E02 1.17038E03 1.26250E03 3.16869E03 2.90891E03 1.01812E03 4.10678E02 6.19724E03 7.72364E03 5.78196E03 1.17944E03 1.44511E03 6.16007E03 3.18563E03 2.72202E02 6.43162E02 9.18618E03 2.07112E04 1.35562E04 6.12282E03 1.64556E04 2.83429E04 3.06307E03 3.93046E03 8.41751E03 1.62843E04 6.67673E03 5.34865E03 8.00599E03 9.64585E03 4.69129E03 4.79306E02 1.71346E03 1.81794E04 3.12527E04 1.74592E04 4.74901E03 1.34669E04 2.92890E04 4.86048E03 2.24991E03 7.81167E03 1.76137E04 1.86995E03 2.00535E04 1.05553E05 5.35610E05 3.92371E05 1.90848E03 8.75486E04 7.11644E04 1.01000E05 4.80834E04 2.30137E04 4.51790E04 9.04427E03 3.11389E04 2.02776E04 1.24756E04 2.39806E04 2.97875E04 1.80689E04 6.18395E03 2.87696E01 3.89984E03 6.65912E03 5.78140E03 3.74602E03 1.70334E03 3.73815E03 8.53172E03 9.67548E02 4.34908E03 4.11315E03 1.07448E03 1.19456E03 1.99718E03 1.64607E04 3.68520E04 3.16626E04 1.91862E04 1.73898E04 2.79867E03 6.52455E04 1.05826E05 6.79738E04 2.89348E04 2.81283E04 1.85674E04 1.32313E04 1.63053E04 1.49162E04 1.85324E04 5.72339E03 1.71276E03 2.38374E03 1.45065E04 9.62940E03 1.54139E03 6.52555E02 1.58071E02 2.08132E03 6.30922E03 6.68143E03 2.70468E03 2.32724E03 1.26607E04 1.57302E04 7.23039E03 3.61435E03 4.58562E03 1.11824E04 7.53099E03 2.06664E03 1.32767E03 5.08461E03 4.21957E03 3.77267E03 7.30079E03 4.88777E03 1.22060E03 2.36133E03 2.50518E03 2.52936E03 5.60221E03 6.31590E03 1.14115E03 1.58233E03 3.43226E03 2.61622E03 9.28117E02 3.52635E02 1.06456E03 2.34434E02 2.22019E03 5.11331E03 3.14686E03 4.44649E02 1.40784E03 3.59583E03 1.04152E03 3.37819E02 1.72883E03 1.72221E03 2.95960E02 4.49388E01 7.75176E02 1.72554E03 2.39293E03 4.03039E03 8.99603E03 1.99208E03 5.23461E02 1.72490E03 1.04510E04 1.87867E04 1.52556E04 1.48165E04 2.50132E04 6.04847E04 6.08211E04 9.30142E03 3.35701E03 8.19660E03 9.49180E03 3.61970E03 1.92173E03 4.09508E03 9.73915E02 -Frame 257 4.57311E05 1.48174E05 4.45776E04 2.51638E05 5.44611E05 6.45382E05 3.20789E05 2.31120E05 2.69966E05 2.09092E05 3.19116E05 4.00852E05 4.57258E05 6.49918E05 8.99269E05 2.35955E06 2.43829E06 4.88504E05 5.56020E05 8.62249E05 1.11746E06 5.77153E05 1.35618E05 1.43841E05 5.48357E05 8.04219E05 3.49997E05 1.23902E05 8.71626E04 3.22004E05 3.61099E05 5.61527E05 1.79047E05 8.63406E05 1.90968E06 7.42893E05 4.43698E05 1.47612E05 5.54705E03 6.10480E04 9.01239E04 5.48507E04 8.00163E03 1.65018E03 2.06659E04 3.60143E04 3.25661E04 1.29337E04 2.58275E02 5.45288E03 1.07436E04 4.94219E03 3.15897E03 9.28942E02 4.01239E03 6.73154E02 7.88980E02 2.31079E03 4.44733E03 8.95624E03 1.03991E04 5.07808E02 8.81190E03 1.75780E04 1.40383E04 5.59896E03 2.95889E03 6.38365E03 8.05470E03 1.47775E04 6.71618E03 1.92391E03 4.90056E03 1.91850E04 2.48066E04 2.67820E03 5.97646E03 4.33467E04 9.95717E04 8.13222E04 2.92634E04 8.87257E03 7.35284E03 3.95681E03 7.03502E03 1.22668E04 5.84435E03 2.03387E03 1.96637E03 2.18270E03 7.20541E01 7.11004E02 1.68037E03 2.39177E03 3.08303E02 1.19791E03 2.34567E03 3.80565E03 2.58593E03 8.82597E02 2.74260E03 4.34563E03 1.82306E03 8.04754E02 4.50399E03 6.77676E03 1.81198E04 1.54019E04 1.78128E04 2.33113E04 2.99794E04 2.37652E04 4.96844E03 6.89735E03 3.77772E03 4.89508E02 2.56162E02 2.70118E03 4.10910E03 1.47596E03 4.98974E03 1.19041E04 4.92651E03 2.49827E03 8.23107E01 6.25074E03 2.08308E04 1.45138E04 7.53578E03 5.90300E03 1.86726E04 3.64062E04 5.75943E04 1.02930E05 4.04751E05 4.76095E05 2.14497E05 6.77999E04 1.29714E04 4.39496E04 9.36613E04 3.43844E04 1.18449E04 1.09577E04 2.01920E04 1.13920E04 1.23479E04 8.65159E03 1.84189E04 1.03386E04 2.91803E03 5.51195E02 1.55160E03 7.33889E02 1.22012E03 5.49860E02 5.05278E03 8.09094E03 8.69171E03 9.41554E03 1.04064E04 7.25393E03 3.33794E03 1.38374E03 1.08374E03 1.07343E03 3.11976E04 4.83702E04 1.34747E03 2.62299E04 1.70987E04 5.18394E04 8.99659E04 1.50892E04 4.02043E04 7.28661E04 1.26869E05 6.88428E04 3.09787E04 2.92131E04 7.91417E03 5.66316E03 1.60360E03 4.94088E03 3.76048E03 2.66530E03 8.01916E02 1.86027E03 2.19958E03 1.16241E03 1.82599E03 2.37502E02 8.52837E02 2.94701E03 5.38778E03 1.96131E03 6.76958E02 6.06486E02 1.26986E03 7.28175E03 1.40752E04 9.74216E03 2.61545E03 4.39225E02 2.78181E03 8.42380E03 2.33459E03 5.17439E01 1.19369E03 9.01233E03 3.31756E03 1.34635E03 3.28374E03 3.79031E03 3.44217E03 4.05050E03 3.50365E03 1.28475E03 6.47076E03 6.03771E03 4.30186E02 2.08269E03 3.39008E03 1.02398E03 3.35107E03 1.40837E03 4.68223E02 1.66501E03 1.95846E03 3.29968E03 7.77804E03 2.93126E03 4.52665E01 2.81885E02 1.01993E02 4.08861E02 7.43619E01 4.47847E02 3.77729E03 6.43700E03 5.92202E03 2.55314E03 8.02209E03 4.41824E03 4.50115E03 6.36561E03 5.40990E03 2.40342E03 9.70865E03 1.25302E04 1.03090E04 3.08149E03 3.25911E03 1.77767E03 1.91217E02 1.15918E03 3.83155E03 -Frame 257 1.87185E05 1.37128E05 1.80207E05 1.67863E05 4.22753E05 1.82077E05 3.75478E04 7.52850E04 6.55753E04 1.03315E05 9.74160E04 1.36893E05 7.89928E04 3.17366E05 1.76154E05 7.93263E05 3.61273E05 8.89042E05 2.87724E05 1.19004E05 3.66977E04 1.97028E05 1.37730E05 1.80263E05 2.20249E05 9.58264E04 1.94543E05 2.61437E05 3.61567E05 2.61385E04 6.57853E04 4.38077E05 1.66920E06 7.87669E05 9.98703E04 7.94910E04 1.24460E05 1.34672E05 6.84784E03 7.07601E03 7.82975E03 5.76167E04 5.56293E04 3.57837E04 7.38189E03 5.06767E03 9.42899E02 1.87847E03 1.24769E02 6.86239E03 1.33139E04 1.67856E04 1.68936E04 8.36226E03 1.27888E03 7.35726E03 8.41760E03 5.03085E03 1.21763E03 1.37035E02 2.50214E03 4.52663E03 1.71970E03 1.83634E04 1.31665E04 1.83217E04 7.85884E03 7.76701E02 2.30238E03 5.54849E03 7.60208E03 1.06887E02 8.23801E02 7.85452E03 1.23188E04 1.27643E03 8.63458E03 1.32455E04 4.68259E04 3.40036E04 9.34983E03 1.73614E03 1.88127E03 1.92210E03 4.15379E02 5.63837E03 9.44659E03 3.35964E03 2.31875E02 4.34964E03 5.64827E03 2.05301E03 2.07388E02 1.39230E03 9.22320E02 6.68531E02 8.15393E02 2.91981E02 1.17608E02 4.81088E02 1.36863E03 2.53102E02 5.67697E03 4.23843E03 8.31953E02 3.73653E03 7.21136E03 4.96889E03 2.59322E03 1.74148E03 1.21020E04 2.13337E04 4.10790E03 1.14331E03 3.87643E03 4.89767E03 5.06292E03 3.55665E03 1.63424E02 3.99161E02 7.11189E02 1.32868E03 4.60367E03 4.84292E03 4.33270E02 4.31962E03 5.21627E03 1.11296E03 2.27986E03 2.47198E04 2.11303E04 1.48195E04 2.35173E04 3.19747E04 2.63872E04 2.30526E04 2.94966E03 3.47076E03 8.21819E03 1.96167E04 1.11516E04 8.84252E03 1.49707E03 2.13825E02 4.24667E03 1.64283E04 2.73669E04 2.42679E04 2.56915E04 1.96277E04 4.71485E03 1.46448E03 2.25233E02 8.83741E02 6.14608E03 2.02708E04 1.92222E04 8.52136E03 4.36212E03 2.82949E03 1.12492E03 1.96096E03 2.30956E03 6.53261E01 2.62926E01 2.07199E03 1.22387E04 2.52595E04 2.88291E04 3.09684E04 3.91369E04 2.90998E04 2.25721E04 2.99828E04 2.05733E04 2.77535E04 6.60436E04 7.36198E04 4.26869E04 1.87935E04 2.40714E03 3.46021E02 6.06350E02 5.66361E03 1.12051E04 1.29633E04 1.00212E04 3.10743E03 6.78326E02 4.30531E03 3.57661E03 1.67792E03 4.60495E03 4.54798E03 4.08848E03 7.73563E03 4.30661E03 3.28929E02 4.85064E03 5.89542E03 1.40186E03 1.85987E03 2.54655E03 1.03177E03 1.26757E03 1.43628E03 8.36660E03 8.41663E03 8.72582E03 1.10057E04 5.73569E03 2.11083E03 2.56937E03 2.50797E03 2.38276E03 1.22417E03 5.88164E02 2.71018E03 8.45716E03 9.46792E03 6.20054E03 6.04421E03 5.87235E03 8.32498E03 6.36822E03 8.92980E02 1.75050E03 2.10674E03 9.35198E02 3.94672E03 6.84787E03 1.64973E03 6.26818E02 1.07646E03 6.28964E02 4.70303E01 7.18999E02 9.03332E02 6.79259E01 4.63506E02 4.22908E03 2.18623E03 4.73471E03 1.24570E03 2.03272E03 1.10934E04 1.28003E04 6.14578E03 3.13937E03 2.85959E03 5.28751E03 1.99340E03 4.48176E02 3.06755E02 1.53697E02 8.83929E02 1.23175E02 -Frame 257 7.24434E-01 5.06037E04 1.42792E05 1.50243E04 2.58765E05 2.90009E05 1.16983E05 2.80001E04 6.84793E04 1.02915E05 1.16669E05 1.06323E05 1.58026E05 2.49257E05 3.17197E05 3.05242E05 3.95630E05 4.85701E05 1.72010E05 1.37739E04 7.79606E04 2.47550E05 1.59650E05 3.17178E04 7.43309E04 1.97932E05 1.71755E05 1.15022E05 1.04873E05 2.26573E05 1.90079E05 2.62710E05 8.38591E05 1.40288E06 6.06994E05 1.52353E05 8.34246E04 3.39555E04 3.35458E04 4.30174E02 1.95009E04 3.99583E04 1.43451E04 7.94722E03 1.40897E04 6.47097E03 7.55927E02 2.42519E03 7.42121E03 5.50286E03 1.59887E03 1.00374E04 3.18654E03 3.59940E03 8.74043E03 5.79349E03 1.45229E04 6.11693E03 8.64345E02 1.74006E02 2.22555E03 8.17276E03 9.21319E03 5.90569E03 2.01523E04 3.41695E04 2.28370E04 1.17956E04 5.14034E03 8.19620E03 1.02975E04 3.35005E03 3.38466E02 2.85242E03 1.87774E04 2.18118E04 2.49920E03 8.74908E03 1.16674E04 1.53046E03 1.78273E03 3.70895E02 3.73563E02 7.26010E02 1.19522E02 6.35151E02 1.35313E03 3.14303E02 4.25250E02 2.47629E03 8.32650E03 8.84429E03 9.27550E03 1.09068E04 7.09051E03 4.58551E03 1.81635E03 7.04300E02 1.41681E03 5.92214E02 2.05185E03 9.52103E03 1.22380E04 3.46077E03 3.08914E03 8.50461E03 5.66078E03 1.31871E03 6.19857E03 9.25982E03 2.94920E04 2.57841E04 6.68811E03 6.31182E03 3.20378E03 4.86016E03 1.21142E03 2.19915E03 1.53180E03 1.63941E03 4.96801E03 9.69639E03 7.25172E03 8.72586E03 9.81524E03 6.47162E03 5.15671E03 2.43058E03 2.17762E03 3.23616E04 4.68495E04 1.17244E04 1.16962E04 2.69749E04 1.32017E04 8.29998E03 1.96002E03 3.91988E03 1.01751E04 1.84107E03 1.83022E03 8.77302E03 1.93634E04 7.15468E03 3.65556E03 4.89720E03 7.42202E03 1.37046E04 2.32047E04 1.77035E04 4.94462E03 3.65415E03 9.92483E02 2.24600E03 2.43892E03 9.37581E03 1.83828E04 1.03999E04 1.00478E04 3.85604E03 3.63683E03 1.55246E03 2.05660E03 3.64317E03 1.77959E03 2.64791E03 5.10238E03 3.15474E03 5.76189E03 6.64466E03 2.02821E04 1.33308E04 4.37492E03 3.54323E02 1.13670E04 6.89175E03 5.06448E03 9.87911E03 1.81356E04 2.51586E04 9.83316E03 1.05303E04 8.66966E03 2.31539E02 1.05538E04 1.70267E04 3.41320E03 2.90962E03 3.96603E03 1.72446E03 3.13449E02 3.42236E03 4.99203E03 1.78881E02 5.09533E03 9.04154E03 9.13954E03 9.71378E03 3.38943E03 1.08467E03 3.03785E03 2.10351E03 3.77986E02 3.02690E03 6.59489E03 7.57503E03 6.37007E03 1.28126E02 7.21394E02 1.72167E03 3.38470E03 3.48233E03 5.52861E03 3.11778E03 1.11063E03 5.77563E03 5.01486E03 2.66708E03 8.78059E02 2.55392E02 4.84503E01 8.29215E01 9.31970E02 2.95354E03 5.60894E03 2.82711E03 4.55887E03 6.40284E03 2.73620E03 3.68382E03 9.32305E02 5.67191E02 2.69292E03 2.37912E03 6.64270E02 3.55507E02 7.05830E02 1.89617E03 1.27701E03 1.28566E03 5.45326E03 1.05590E04 7.81427E03 2.08172E03 9.26556E00 7.83800E02 3.56909E03 2.42654E03 2.52095E03 7.80713E02 1.28659E03 2.13614E03 5.46463E02 4.71079E01 1.68185E03 1.72927E03 8.66361E02 -Frame 257 1.71744E05 1.18742E05 2.42860E05 2.39934E05 2.03125E05 1.69467E05 6.89080E04 7.15570E04 3.27586E04 3.40939E04 6.41920E04 6.85529E04 5.25661E04 3.00023E04 5.05491E04 8.22390E04 1.95677E05 1.65795E05 2.16573E04 9.05447E03 1.23596E05 2.12335E05 6.64944E04 6.73881E03 6.90599E04 1.40750E05 1.02316E05 3.59242E04 4.73927E04 1.21363E05 1.91389E05 1.74467E05 4.44904E05 1.24611E06 6.82540E05 1.20093E05 7.41850E04 2.53500E04 2.26899E04 1.10155E04 3.16710E03 5.75985E02 8.63821E03 3.13158E04 1.74668E04 9.70803E02 2.03356E03 6.41340E02 2.66832E03 1.16654E03 1.69186E03 1.73609E03 2.47327E03 8.22034E03 1.28719E04 9.43212E03 7.69958E03 1.14201E04 7.16520E03 6.16022E03 5.30756E03 1.98919E03 1.24822E03 3.55489E03 1.09729E04 3.18304E03 2.88055E01 3.18763E03 1.05685E04 1.42013E03 1.76863E03 1.59144E03 3.42049E00 1.40419E03 2.13553E04 6.79717E04 4.53773E04 1.64039E04 7.89532E03 7.82967E02 2.39074E03 4.84899E03 6.12274E03 3.53178E03 6.39403E02 2.64523E02 2.01261E02 1.17966E03 1.03206E03 7.72846E02 3.59715E02 5.99244E02 2.59799E03 1.02529E04 7.26188E03 9.47808E02 8.69548E03 9.55544E03 3.25822E03 2.81229E02 9.36943E02 1.25485E03 2.91362E03 6.16301E03 2.24404E03 1.56829E03 3.04227E03 4.79866E02 4.78473E03 3.12202E03 2.12159E04 7.01865E03 1.11419E03 8.94226E03 2.19966E04 2.55480E04 1.55459E04 4.66180E03 1.19463E03 2.78397E03 1.57350E03 4.82805E03 9.85189E03 1.11490E04 5.24906E03 8.11330E02 5.63023E02 1.21139E04 1.29080E04 6.33352E03 9.85532E03 1.70356E03 5.02310E03 2.27320E04 2.13289E04 8.07717E03 1.40695E04 7.24886E03 1.32243E03 3.82923E03 6.83486E03 1.96606E04 2.24859E04 6.50469E03 2.60884E03 3.24142E03 2.36058E03 1.15544E04 6.62598E04 4.77861E04 7.94833E03 1.07643E04 6.49150E03 1.02660E03 1.43137E02 1.83923E03 3.68481E03 2.33536E03 2.28377E03 7.66125E03 1.57325E04 1.79840E04 8.49446E03 4.12393E03 5.72619E03 6.52281E03 6.96624E03 2.82921E03 8.91617E02 2.29644E03 1.07936E03 2.06214E03 6.23585E03 5.61255E03 1.35100E03 2.05929E04 4.23127E04 1.97787E04 1.48308E03 4.52449E03 8.13717E03 1.36916E04 1.11098E04 3.06688E03 5.08173E03 5.66690E02 2.73192E03 2.26977E03 1.58531E01 1.21988E03 3.30781E03 4.60843E03 4.15988E03 8.01859E02 1.25706E03 2.47287E03 2.66498E03 3.51737E03 7.56985E00 3.47278E03 2.17180E03 1.38601E03 1.67037E03 2.58512E02 1.49003E03 4.69597E02 1.03040E03 4.03964E03 9.03182E03 8.53058E03 3.44931E03 1.04868E03 3.84308E01 7.58332E02 3.07087E03 1.22546E03 2.10655E03 3.58542E03 1.31457E03 1.70616E03 3.50558E03 3.62600E03 3.85368E02 1.91817E03 3.72860E03 1.49623E03 2.44070E03 6.35099E03 3.51522E03 8.85324E00 1.25624E03 2.10900E03 2.61203E03 2.76554E03 1.70300E03 1.47269E03 1.29983E03 1.21404E02 3.52561E03 4.51232E03 9.99639E03 1.51712E04 8.20467E03 2.82839E03 5.13478E03 3.52506E03 3.59756E03 5.56389E03 2.76079E03 4.15102E02 2.11642E02 1.71366E03 2.06281E03 8.09343E02 2.45838E03 3.73054E03 2.27011E03 -Frame 257 2.95226E05 2.89118E05 3.91751E05 3.34230E05 3.18376E05 3.50112E05 4.92399E04 4.66640E04 9.11210E04 1.50907E05 1.84673E05 6.57517E04 1.33253E05 2.15717E05 2.88324E05 4.79340E05 1.27755E05 6.62934E04 1.61438E05 1.93468E05 1.95103E05 1.57876E04 6.76840E04 9.33935E04 1.33643E05 1.57386E05 3.13870E04 1.08441E05 9.46537E04 2.25120E05 2.16040E05 1.30492E05 9.12624E05 2.80277E05 7.25288E04 2.08307E05 4.06468E04 7.32167E03 3.67705E03 4.42512E03 1.23215E04 1.20817E04 9.71812E03 1.02564E04 1.01043E04 2.15130E04 2.36667E04 1.64286E04 7.90672E03 3.54153E03 1.25565E03 1.14641E03 1.48487E03 1.13473E03 3.82013E03 2.50565E03 1.38177E02 2.88748E03 9.71902E03 3.01726E03 1.24668E03 2.06743E03 3.91640E03 1.36553E04 2.08818E04 9.90407E03 2.24414E03 5.55123E02 1.65004E03 3.27805E03 1.84519E03 9.73333E00 1.56575E03 8.69562E03 3.06273E04 4.54728E04 4.70792E04 1.90440E04 1.15165E04 5.97671E03 9.11341E02 6.58084E02 1.74988E03 1.49417E03 8.51972E02 8.71586E02 1.90338E03 5.14519E03 7.15824E03 3.19375E03 9.13938E02 3.68898E03 3.96188E03 9.53212E02 8.14531E01 4.80958E03 1.60516E04 5.34461E03 3.56792E02 1.11799E03 4.16118E02 1.65401E02 8.63204E02 4.19257E03 4.26688E03 3.51395E03 6.99494E03 8.17402E03 9.56915E02 6.17850E03 3.14240E04 3.96703E04 2.10343E04 9.52636E02 4.39306E03 6.14053E02 1.16157E04 8.50203E03 2.79836E03 3.84492E03 6.28631E03 4.49095E03 3.28778E02 1.66904E04 2.02818E04 2.13542E03 7.16208E03 1.87864E04 1.13877E04 8.23651E03 2.95823E04 5.42765E04 5.67569E04 5.05544E04 2.46130E04 1.91879E04 1.68656E04 3.29274E03 6.50793E02 4.45296E03 9.61759E03 2.28715E04 1.94735E04 4.15417E03 4.83227E03 3.36866E03 2.39138E03 3.69943E04 8.08026E04 2.22195E04 5.13556E03 5.80360E03 1.28566E02 6.15160E02 2.73116E03 1.33277E03 3.17331E03 2.62517E03 4.74104E02 2.01636E03 2.08877E04 1.67622E04 5.84384E02 2.44805E03 3.00970E03 1.69553E03 7.63119E02 6.83291E02 4.52210E02 1.23891E02 5.74609E02 5.02904E02 1.69643E03 2.85315E02 5.11692E03 1.77689E04 4.08202E04 4.15538E04 1.08997E04 1.16808E02 1.09525E03 2.35470E03 3.21453E03 3.99775E03 2.41945E03 1.71775E03 2.89962E03 3.20723E03 1.00911E04 9.73662E03 1.63580E03 6.66939E02 1.96542E03 2.26563E03 6.41693E02 1.85795E03 2.78482E01 1.45142E03 2.84551E03 3.74800E03 3.27881E03 1.61499E03 1.34453E03 1.05208E03 2.09786E03 4.10176E03 2.69873E03 4.52008E03 3.82209E03 9.43050E02 3.34725E03 3.70207E03 2.28510E03 1.81063E03 2.16651E02 1.74550E03 5.64609E03 3.29088E03 4.93475E02 2.24459E02 1.82411E03 2.05210E03 2.24419E03 2.30961E03 1.61448E01 1.50049E03 1.65406E03 6.62217E02 1.20552E02 9.76891E02 4.03693E02 1.54527E02 8.43134E02 4.68214E02 2.38542E03 3.71750E03 2.95158E03 4.21288E03 4.98872E03 2.49799E03 8.14960E02 6.98771E01 3.01970E03 1.06276E04 2.83021E03 1.83013E03 1.86353E03 3.23317E03 1.83968E03 5.66533E02 1.07693E03 1.54795E03 4.55054E02 3.52838E02 1.80987E03 1.44934E03 6.58622E01 -Frame 257 9.46312E04 4.55278E03 2.25874E05 2.96451E04 1.18299E05 1.32682E05 4.77900E04 2.59604E04 2.53809E04 1.94255E04 3.17191E04 6.02391E04 6.91667E04 1.29187E05 2.14399E05 2.24983E05 1.24930E05 9.06285E04 5.03751E04 3.93300E04 4.65687E04 4.46993E04 5.30323E04 5.65798E04 7.22777E04 1.00289E05 5.25014E04 4.24911E04 3.71691E04 6.43437E04 3.61968E05 6.42900E05 5.57996E05 2.20043E05 4.43350E04 1.20226E04 1.79610E04 4.17344E03 9.46828E03 1.88648E04 7.94081E03 4.08286E03 1.19203E03 1.57228E03 1.45881E03 4.03210E03 5.33197E03 1.08629E03 2.05007E03 3.50673E02 3.48683E02 1.77987E03 8.31918E01 2.79570E03 6.32948E03 3.52668E03 1.11502E03 2.68101E03 7.84128E02 3.06608E03 6.20532E03 4.85203E03 9.12088E02 2.28972E03 2.20119E03 3.22305E03 3.62372E03 9.12297E02 4.37200E02 1.01166E03 1.22214E03 8.01390E02 5.66975E02 2.41412E03 9.49427E03 7.99383E03 1.31832E04 1.93310E03 4.84256E03 2.42540E03 1.24464E03 2.27154E03 1.57514E03 8.44133E02 7.50986E02 4.62341E02 1.15187E03 3.52490E03 8.48677E02 4.53674E03 1.02782E04 6.29316E03 1.92077E03 1.31799E03 2.86010E03 8.34021E03 1.62515E04 9.53512E03 9.69131E02 9.91602E01 4.22733E01 1.19621E01 3.52158E02 1.60159E03 8.60925E01 5.50919E02 2.01601E03 2.03272E03 1.01648E04 1.79000E04 5.79205E03 8.85270E03 5.05106E04 4.11338E04 1.49883E04 1.13943E03 2.22758E03 1.83249E03 9.61576E01 9.91674E02 1.37549E03 1.05987E04 3.24706E03 5.01290E03 1.67139E04 5.04703E03 1.81439E04 1.06247E04 9.97899E02 3.91002E03 1.51367E04 3.42591E04 7.21236E03 9.60286E03 2.80258E03 1.70657E03 3.60567E03 1.31367E03 6.75229E02 2.67563E03 8.03112E03 2.14762E04 8.77807E03 5.53935E01 1.86772E02 3.70288E03 2.91517E03 3.56807E03 4.06838E04 3.31562E04 6.43967E03 2.63594E03 2.09462E02 8.42854E02 7.30663E03 9.63596E03 6.21520E03 5.63836E03 1.54814E03 4.39123E03 2.15458E04 1.39502E04 8.38942E03 7.07348E03 4.20884E02 3.32275E03 3.57602E03 7.24968E02 9.17297E02 4.78978E03 6.00665E03 1.76701E03 1.84973E03 2.51103E03 7.46605E02 3.67418E02 1.34819E03 4.83705E03 3.31353E03 1.24923E03 6.10921E03 3.13275E03 1.26220E03 9.44873E02 8.07680E02 9.94242E02 2.23221E03 6.04556E03 1.62947E04 1.22862E04 2.02436E03 1.13633E03 2.18351E03 9.16837E02 6.87465E02 8.51639E02 3.84901E03 3.16887E03 1.92359E03 2.48788E03 3.87296E03 1.04160E04 9.97053E03 3.87134E03 2.18339E03 1.79059E03 1.54608E02 5.63508E03 7.84910E03 7.13417E03 9.64728E03 8.42322E03 2.25920E03 9.35376E02 2.05128E02 3.01602E03 2.78649E03 1.37664E03 1.31637E03 2.75613E02 1.30748E02 2.08902E02 2.86320E02 2.56159E03 5.69385E03 8.16902E03 7.89089E03 3.06651E03 1.85977E03 1.85861E03 6.71977E02 1.26285E03 1.75835E03 1.87155E03 3.62481E03 5.90353E02 2.00727E02 7.81768E02 2.70865E02 2.62581E02 7.48329E02 2.53473E03 6.88791E03 4.92805E03 1.89149E03 4.21569E03 4.87746E03 5.32755E02 9.19411E01 5.00354E01 2.11929E02 1.22258E03 4.23514E02 6.70907E01 2.08211E03 4.32760E03 2.70937E03 -Frame 257 3.05388E04 1.30582E05 3.21700E05 2.75377E05 4.06355E04 2.27149E02 7.89182E03 1.20090E04 2.65669E03 3.14622E02 3.82017E03 8.01695E02 1.63248E03 9.03970E02 1.59431E02 6.97376E03 1.03048E04 5.31384E03 7.83953E03 4.58277E01 1.48395E03 1.56368E03 7.05909E03 6.69072E03 9.09971E03 1.13933E04 1.24737E04 3.76475E03 1.77363E03 4.03163E04 2.83680E04 1.49682E04 4.00076E04 9.40926E02 2.96252E03 6.11156E03 6.93708E02 4.70110E03 8.52394E03 6.20849E03 3.50185E03 1.20756E03 3.84775E02 1.29562E03 4.72554E02 2.22218E03 6.69883E03 5.64523E03 2.38115E03 1.48191E03 1.82938E03 1.27979E03 1.74768E03 6.90345E03 1.12118E04 5.39360E03 2.15507E03 2.54806E03 3.07580E03 1.33321E03 1.69215E02 2.83534E03 4.61570E03 1.87254E03 2.14346E03 3.35664E03 3.13438E03 1.31272E03 4.35417E01 2.69779E02 4.50339E02 2.59821E02 1.52887E02 1.04257E03 2.45375E03 4.73597E03 7.34660E03 3.36194E03 2.38176E03 7.82804E02 7.71155E02 1.05334E03 1.51277E02 3.76872E02 2.31515E03 1.12587E03 6.37834E02 1.68720E03 2.93636E03 4.90603E03 1.34468E03 3.54252E02 4.00146E02 4.45806E03 8.98951E03 2.21442E03 2.19599E03 7.19924E02 1.70699E03 3.15555E03 1.36343E03 1.18197E02 6.78048E02 3.60634E03 1.96147E03 7.12286E02 5.87349E03 6.87773E03 1.82553E03 1.46575E03 3.50314E03 6.62341E03 7.38333E03 4.88111E03 7.37354E02 2.53174E03 2.86201E03 1.35550E03 1.76472E02 8.67833E02 3.58135E03 1.25573E04 1.73785E04 1.08838E04 4.45233E03 8.77645E03 2.21193E04 2.36950E04 1.64738E04 6.64116E03 9.52275E03 2.55067E04 1.65599E04 3.58030E03 6.82050E02 6.92069E00 8.93315E02 2.45768E02 1.14181E03 2.46122E03 3.31334E03 1.20055E03 2.95472E03 2.36492E03 1.22252E03 1.94468E03 2.87299E03 2.58943E03 3.17944E04 2.82837E04 4.23861E03 3.64186E02 1.86786E03 9.16295E03 9.76501E03 2.51010E03 2.21809E03 3.21269E03 2.03704E03 1.53064E04 1.94129E04 6.55771E03 4.83746E03 5.89050E03 3.79083E03 2.03791E03 1.95632E03 1.65186E03 2.37920E03 1.07676E03 3.43455E03 9.95865E03 4.09872E03 1.67241E03 1.01512E03 2.77719E03 3.55052E03 2.31414E03 4.09861E03 5.18992E03 3.60903E03 9.51259E02 8.40520E01 1.04849E03 1.82160E03 1.01862E03 1.08753E03 1.22697E03 5.67016E03 4.17835E03 1.64540E01 2.17700E03 6.04019E03 6.42229E03 5.40577E03 4.27737E03 4.24242E03 4.38529E03 3.33016E02 1.04642E03 2.06068E03 2.47242E03 1.34116E03 1.31108E03 4.55329E02 1.47972E03 2.84580E03 9.53916E02 1.13348E00 5.16613E02 2.03917E03 3.18880E03 2.86162E02 6.80568E01 1.94584E03 1.87997E03 1.38215E02 4.20550E02 1.69176E02 9.29207E02 6.00846E02 1.49595E02 8.78276E02 2.68052E03 1.36742E03 2.44669E03 2.41758E03 3.59583E02 4.99585E03 6.07790E03 3.89131E03 2.95360E03 1.05448E03 2.24822E03 5.95033E03 5.31785E03 2.96408E03 1.42676E03 2.49170E02 9.69506E02 5.32517E03 9.22239E03 2.34904E03 2.83310E02 7.38396E02 1.67930E03 2.53259E03 2.04389E03 1.65113E03 2.27581E03 3.07971E03 1.81373E03 6.27864E01 4.68401E02 1.47513E03 1.42795E03 1.54537E03 -Frame 257 1.13420E05 2.86860E04 7.90767E04 1.21806E05 9.40851E04 6.96091E04 8.66933E04 5.21992E04 3.66250E04 3.35809E04 4.59864E04 4.28433E04 3.66444E04 6.15738E04 9.29128E04 1.01996E05 4.74565E04 2.78290E04 2.85202E04 2.07258E04 1.17424E04 9.00264E03 2.28792E04 6.67839E04 6.90504E04 1.59079E04 6.09198E03 3.88188E04 6.39708E04 1.13002E04 4.64565E04 7.53227E04 4.06494E04 6.54747E03 1.07955E03 4.88930E03 1.41176E04 9.52742E03 1.31281E03 4.63540E02 2.03958E03 5.37319E03 7.81944E03 5.65726E03 1.86023E03 4.79157E03 8.79662E03 1.99263E03 1.80723E03 2.75413E03 5.89815E02 7.91151E02 9.61205E02 1.42455E02 1.94919E03 4.68512E02 1.58018E02 1.25196E02 1.04999E03 7.70601E02 5.57684E01 1.66509E03 2.89357E03 5.95047E02 5.02150E03 1.84798E03 2.15263E02 1.16692E03 1.08999E03 8.20687E02 1.34243E03 1.27339E03 2.55953E03 2.61778E03 9.04217E02 5.87361E01 7.74745E02 7.14494E03 1.15012E04 7.98294E03 4.71996E02 1.24652E03 1.64269E03 3.39699E03 6.07959E03 3.24270E03 1.34334E03 1.51490E02 4.31805E02 2.77965E03 2.97490E03 3.52749E03 2.42817E03 2.34528E02 6.02738E03 1.04779E04 4.32055E03 1.33416E02 2.78143E03 7.51645E03 4.22587E03 4.26095E02 2.54331E03 2.46356E03 1.05573E04 1.94175E04 1.11827E04 7.83254E02 1.98941E03 5.41444E03 6.39225E03 4.65150E03 2.44242E03 1.19067E03 1.17710E03 1.80904E03 3.35627E03 3.51155E03 5.34441E03 1.57762E03 2.29580E02 2.17169E03 1.70068E03 6.63545E02 9.23099E02 7.04480E03 1.35208E04 5.08395E03 7.73206E03 5.25425E03 9.46381E03 1.83636E04 8.84770E03 2.45434E03 2.89439E03 2.71927E02 1.96934E03 4.56418E03 2.09986E03 3.64875E01 1.96889E03 2.93758E03 1.64556E03 2.39639E02 2.95161E02 2.92297E03 7.85183E03 2.23535E03 2.83854E04 1.51130E04 2.22564E03 1.08901E04 8.57853E03 1.06513E04 4.39531E03 4.71839E02 2.13307E03 4.19283E03 3.85478E03 1.67040E03 7.08180E03 3.29390E03 5.03834E03 4.63032E03 4.84256E03 5.35186E03 2.78315E03 4.31889E02 7.50176E02 7.14197E03 1.58235E04 1.12787E04 2.50550E03 1.93437E03 1.88899E03 4.31476E03 2.42646E03 7.11341E01 3.16662E02 2.08250E03 5.95981E02 7.82303E02 3.07712E02 8.59515E02 6.49071E03 1.05067E04 5.03946E03 4.76828E02 9.35084E02 1.93630E03 2.87632E03 4.88282E03 3.96497E03 6.93478E03 3.36193E03 2.66041E03 1.85127E03 1.47133E03 2.37991E03 3.39809E03 2.39469E03 8.38505E02 3.40331E02 6.56974E02 2.41372E02 5.97127E02 2.95392E03 3.54372E03 6.39070E03 1.14158E04 4.85210E03 2.23000E02 1.05852E03 4.57709E02 2.78616E03 4.42981E03 3.17722E03 4.00704E03 6.06692E03 6.76553E03 3.35089E03 1.52497E03 5.29158E02 9.98332E02 4.00138E03 2.21809E03 5.29836E02 1.90586E03 2.84340E02 1.17280E03 2.67043E03 2.29400E03 6.18071E02 5.07154E02 2.18182E03 1.12277E03 1.98697E02 1.98110E03 3.86273E02 3.19940E02 1.17513E03 4.72308E03 2.27739E03 8.88539E01 3.68144E01 2.84423E01 1.18690E02 1.75337E01 3.54228E02 6.47485E02 1.88732E03 8.65936E02 2.40041E02 3.10655E02 5.77298E02 1.48031E03 1.67326E03 -Frame 257 3.01184E05 1.24162E05 4.79231E04 3.92849E04 4.10870E04 3.14688E04 4.00437E04 1.16728E04 8.64570E03 5.61991E03 9.69043E03 1.25946E04 3.48056E03 2.70349E04 7.93351E04 6.14356E04 9.22414E03 2.87988E03 8.20331E03 1.40985E03 8.21055E03 3.35484E03 1.19071E03 1.37702E04 4.47412E04 3.71406E04 3.53802E04 6.58617E04 8.95156E04 1.12094E05 6.05096E04 2.89114E03 1.58303E04 7.96954E03 5.47834E03 2.32508E03 2.52204E03 2.30910E03 8.82610E02 4.35778E02 2.66814E02 1.47924E03 1.13097E03 7.63575E02 1.53224E03 1.54292E03 9.89183E02 1.16079E03 4.99034E02 1.31651E03 1.49148E03 2.59118E02 1.64138E02 1.28926E03 3.84325E03 3.08775E03 1.19738E03 1.01848E03 1.62176E03 2.58430E02 2.99730E02 3.25118E03 6.59345E03 5.85742E03 4.51626E03 2.13336E03 8.69659E02 1.18144E03 3.57532E02 9.18199E01 6.28101E02 1.32937E03 3.38246E03 3.08856E03 3.64112E03 4.54182E03 1.05394E04 3.47081E04 4.98548E04 1.59259E04 7.86991E02 2.06913E03 6.83910E02 4.71572E02 1.60998E03 2.88488E03 2.11789E03 1.63809E03 3.63567E03 2.98932E03 6.14535E02 7.71169E02 1.46727E03 4.86129E01 3.37954E03 3.55856E03 8.70272E03 2.66092E03 3.78411E02 2.38094E03 4.85670E03 2.31849E03 4.41508E03 5.75558E03 1.48993E04 1.42839E04 1.63312E03 1.75095E03 5.18981E03 1.98132E03 1.41081E04 3.05904E04 2.62137E04 1.10513E04 3.70277E03 3.53101E03 5.30713E03 6.82682E03 5.84676E03 2.89736E03 4.17243E03 4.94040E03 1.25513E03 4.91601E02 9.51519E03 1.49014E04 1.79702E03 2.74054E03 6.41781E03 2.00175E03 4.17453E03 2.15458E03 1.29048E03 1.19393E04 2.96911E04 1.45681E04 3.97064E02 6.95739E03 2.22618E03 1.41356E03 2.03985E03 3.86440E02 1.54429E03 3.52778E03 8.24503E03 2.18130E04 1.45842E04 1.78649E04 6.20126E04 6.33067E04 1.45279E04 9.45556E02 3.62108E03 6.17278E03 1.04337E04 8.54942E03 7.24861E03 4.15680E03 1.04662E04 1.70819E04 1.44983E04 1.46333E03 1.77882E03 2.86725E03 8.25152E03 6.59070E03 1.07223E04 3.47329E03 4.31261E01 5.17555E03 2.18669E03 3.15249E03 7.94464E03 1.79692E03 1.69540E03 4.83761E03 9.28789E02 4.02225E03 1.00507E04 8.38506E03 1.43228E03 4.14020E01 1.05010E03 3.09081E02 3.41258E03 2.69664E03 1.77310E03 6.68795E03 3.09631E03 1.01079E03 2.06357E03 1.72989E03 1.67260E02 2.58123E03 5.17482E03 5.94841E03 6.84876E03 4.96616E03 6.82724E03 1.13471E04 5.95295E03 1.40792E02 2.40590E03 4.53939E03 1.70117E03 1.34862E03 2.45125E02 2.99901E03 7.45482E03 5.13455E03 1.24079E04 1.45832E04 7.32512E03 1.24440E03 2.27531E03 3.17919E03 4.02918E02 1.36077E03 2.79629E03 5.08328E03 2.55558E03 1.60829E03 2.72719E03 1.19314E01 1.83376E03 3.39993E02 5.53634E02 1.98865E03 1.24181E03 1.34376E02 1.81642E02 8.02919E02 2.20505E03 1.96806E03 8.33387E02 3.49768E02 1.70091E03 1.09781E03 1.19180E03 1.91711E03 2.23279E03 1.25465E03 9.77475E02 7.78887E02 7.13855E01 2.47494E00 4.19239E02 1.46818E03 1.67829E03 1.19869E03 7.31971E01 1.46274E02 1.30943E03 4.09315E03 3.74387E03 1.23853E03 1.25402E03 -Frame 257 1.34116E05 6.55199E04 8.21871E04 1.27113E05 2.63136E04 1.14697E03 1.35551E04 3.92312E03 3.34626E03 4.38714E03 1.76786E02 1.13142E03 1.07932E03 3.97861E03 1.32557E03 5.87830E02 3.12990E03 9.86635E02 1.97559E03 2.83310E03 9.01032E03 7.23865E03 2.29581E03 2.81783E03 6.33424E03 3.75424E03 1.24952E04 1.79652E03 5.83100E02 1.10147E04 2.19056E04 8.11905E03 1.48829E04 1.17824E04 9.69108E03 7.31003E03 3.76051E03 1.12487E03 1.81010E02 1.02785E02 1.72774E02 5.16878E02 3.27165E-01 1.26102E02 8.35232E02 1.39524E03 3.48105E02 5.79305E02 2.02203E03 1.51319E03 2.61823E03 2.35973E03 6.31231E02 1.06040E03 4.02658E03 4.98699E02 7.57185E02 9.50202E02 1.60613E03 3.15356E03 4.75568E03 2.95499E03 2.72859E01 5.34542E02 4.12626E02 5.76487E02 4.94676E02 1.36513E02 1.42940E03 1.41116E03 7.48014E02 3.53713E02 1.10043E03 7.88648E02 1.40714E03 4.00626E01 1.85341E03 2.67910E03 2.00588E04 1.38474E04 9.44307E03 7.60351E03 2.91594E03 4.70824E02 1.28528E02 2.87223E02 4.99851E02 9.09506E02 9.05709E02 3.63431E02 1.19742E03 1.37776E03 1.90468E03 1.31640E03 2.89593E03 6.53854E03 1.11143E04 7.29967E03 2.36395E03 3.01431E03 6.07556E03 7.23950E03 4.61575E03 1.15748E03 4.53542E03 7.64843E03 1.53835E03 3.65328E03 7.10910E03 7.43181E03 1.97950E03 1.50802E03 3.39110E03 3.14286E03 1.12914E03 1.27437E03 2.92405E02 2.60503E02 1.22933E03 2.01411E03 4.79638E03 1.15311E04 1.27541E04 1.03009E04 7.99819E03 5.70078E03 1.47843E03 3.20143E02 1.12187E03 3.30494E03 3.39892E03 1.85840E03 6.09848E02 8.42098E03 2.50671E04 2.07317E04 2.30961E04 2.70280E04 1.62820E04 3.37539E03 1.42041E03 5.25664E03 2.74388E03 2.89874E03 1.87978E04 1.27064E04 3.08947E03 9.06344E03 4.45084E04 3.04596E04 5.23403E03 7.26190E02 3.67646E03 1.04987E04 1.34076E03 2.69906E03 3.32125E03 1.45092E03 6.88768E03 1.72477E03 8.85246E03 1.27973E04 6.63593E03 6.39459E03 8.38528E03 9.59665E03 1.28896E04 1.17767E04 7.77125E03 3.52211E03 8.16438E02 4.85249E03 6.20391E03 5.19521E02 2.24104E02 5.06940E03 5.78896E03 4.51859E03 5.62523E03 7.58588E02 5.71364E03 6.39682E03 1.14850E04 1.31580E04 9.34930E03 3.41882E03 3.65864E03 3.67795E03 1.55581E03 2.00067E03 3.05291E03 1.42840E03 3.78070E03 3.81271E03 1.59370E03 1.51878E03 2.10504E03 2.19633E03 2.54959E03 1.24175E03 1.57684E03 2.82469E02 2.92025E03 1.08480E04 5.75970E03 1.34726E03 5.77324E03 8.27489E03 2.71207E03 3.56245E02 3.93435E03 1.88037E04 1.96351E04 5.21036E03 6.18167E03 3.83789E03 6.20422E02 6.85603E02 1.07167E03 3.08914E03 2.04631E03 9.42573E02 6.03682E03 2.33254E03 2.43501E03 6.12770E03 2.89746E03 2.33038E02 1.64990E03 3.15328E03 2.23433E03 4.91077E02 2.69247E03 3.88772E03 6.32396E02 1.58081E03 3.63598E03 2.79581E03 1.18416E03 3.03486E01 1.61419E03 5.47183E03 5.79107E03 2.85794E03 1.69098E01 4.70584E02 1.50799E03 1.74052E03 1.87396E02 1.20266E03 2.46259E03 1.27507E03 2.91848E03 4.28049E03 2.58740E03 4.09522E02 4.26278E01 -Frame 257 3.20781E04 7.50550E04 1.57048E05 1.16195E05 2.49540E04 3.02000E04 3.37592E04 9.81135E03 1.80698E03 7.04738E03 6.39750E03 4.43372E03 2.52640E03 2.01555E03 3.24223E03 5.91699E03 8.59069E03 6.51113E03 1.37813E03 6.81331E02 2.18205E03 4.88214E03 3.17473E03 5.19867E03 1.18775E04 1.98486E04 3.85335E03 2.72609E03 1.42254E04 1.28116E04 1.08846E03 3.57600E03 1.51211E04 1.35576E04 1.44951E03 5.31372E03 2.19159E03 3.43736E03 3.91523E03 1.92080E03 2.01180E03 4.29199E03 4.99390E03 4.72512E03 6.03294E03 2.43359E03 7.75663E02 4.49959E03 3.48729E03 2.67554E03 9.18362E03 1.07796E04 8.82139E03 1.28918E04 1.78523E04 8.41724E03 2.53980E03 1.61192E03 1.54443E03 1.21801E03 3.98565E03 1.44610E03 1.25951E03 3.88375E03 2.06795E03 9.54054E01 2.34715E02 2.21938E03 2.60254E03 6.28661E02 1.57054E02 4.44520E01 1.74041E02 2.41145E02 1.86694E03 3.41063E03 5.63184E03 1.46290E04 1.26033E04 3.31006E03 2.32009E03 5.94342E02 1.23188E03 1.52413E03 6.88705E02 5.69725E02 1.32919E03 1.86615E03 9.36800E02 3.55912E02 2.92483E02 1.04997E03 9.53150E02 6.72312E02 1.83400E02 5.96362E03 1.02328E04 2.25875E03 1.60121E03 1.80257E02 2.56052E03 2.99878E03 3.11071E03 2.11310E03 2.08412E02 1.76848E03 5.57849E03 3.69744E03 6.46406E02 4.34526E03 4.69545E03 1.40919E03 7.49425E02 2.25473E03 2.32211E03 1.89991E03 2.98020E00 2.85527E03 1.71109E03 1.00307E03 6.47233E02 1.36307E03 2.71448E03 1.59582E03 1.22431E03 2.63790E03 1.42591E03 6.78716E02 2.24896E03 8.01795E02 1.32555E03 3.62667E03 4.01605E03 4.11435E03 2.83481E02 1.99455E03 8.93420E03 8.61829E03 1.54615E03 9.06653E03 2.69045E03 9.22406E03 1.26259E04 8.20997E03 3.19402E03 1.44292E02 8.20309E02 9.50269E02 2.41700E04 3.28370E04 1.45440E04 1.17394E04 4.73701E03 2.51664E03 6.58087E03 2.04676E03 1.57696E03 3.17254E03 2.93205E03 3.18956E03 3.93178E03 2.45526E03 3.58810E01 1.00242E02 1.88800E03 2.15316E03 7.48683E02 5.18444E01 7.96453E02 1.91965E02 3.91559E02 2.63055E03 9.19632E03 6.72863E03 4.13813E03 2.51010E03 4.20642E03 5.82723E03 6.38365E03 3.80113E03 7.33562E03 1.38061E04 2.07344E03 1.55337E03 1.06056E03 4.09257E02 1.76307E03 1.86759E03 5.71375E02 1.46536E03 6.19799E03 8.42342E03 7.70912E03 5.18517E03 6.33581E03 5.69540E03 2.86187E03 5.18031E03 4.97038E03 2.03479E03 2.31240E02 2.09439E03 1.18533E04 6.48606E03 4.89330E02 5.43259E03 2.40075E03 1.30756E03 4.75859E03 4.28204E03 8.32808E02 4.90887E03 3.66549E03 4.10333E03 5.05149E03 2.89676E03 5.82695E02 1.80641E03 4.23821E03 2.15607E03 2.19944E03 4.88619E03 4.18849E03 5.92204E03 7.67700E03 3.85555E03 2.36802E03 3.84868E02 8.69039E01 3.15309E03 4.59016E03 1.23183E02 1.14334E03 3.39990E03 1.78085E03 2.68581E02 2.44889E03 1.71550E03 1.11540E02 9.81686E01 2.91622E02 2.15210E03 7.76102E03 4.13477E03 4.68602E02 1.32891E03 1.16893E03 7.49654E02 1.73458E03 1.45852E03 1.48267E03 1.49266E02 7.20848E02 5.64526E00 3.56643E02 3.86777E02 5.50594E02 -Frame 257 7.09418E04 8.85267E04 1.30039E05 6.12928E04 4.91698E03 2.92067E03 8.78179E03 7.78007E03 2.46906E03 6.93703E02 1.87380E02 2.76275E02 8.63911E02 1.21167E03 1.14819E03 3.94257E01 1.49447E03 4.71727E03 1.33593E03 2.53338E02 6.69171E01 9.31898E02 9.15842E03 7.89974E03 8.73203E03 8.08501E03 3.74649E02 1.57885E04 2.17130E04 2.74245E03 3.15741E03 8.24440E03 2.92649E03 1.02733E03 3.60779E03 4.51525E03 4.36374E03 2.94646E03 1.56973E03 5.96078E02 3.93043E02 1.88214E03 2.71839E03 2.45601E03 3.07756E03 5.69684E03 3.63963E03 9.52334E02 6.70600E02 6.20955E02 1.46348E03 2.85721E03 2.53796E03 1.22502E04 2.14112E04 6.61242E03 5.11397E03 1.08809E04 8.15252E03 4.76431E03 5.10247E03 5.63456E03 1.23815E03 1.97312E03 5.88393E03 1.81954E03 1.27950E02 1.55843E03 4.10920E02 3.99536E02 1.40462E03 2.18111E03 2.31973E03 1.60834E03 5.35553E01 9.07210E02 1.70915E03 6.28631E03 7.10915E03 1.76004E03 3.11979E02 6.85208E02 8.03815E01 5.67871E02 3.94246E02 6.66562E02 2.53622E03 2.87821E03 2.62656E03 3.86455E03 2.66487E03 1.06862E03 1.57760E03 3.16004E03 1.78030E03 9.92908E02 1.18258E04 7.82108E03 2.18109E02 1.08244E03 4.16357E02 2.94930E03 3.66974E03 1.79253E03 6.91547E02 1.86433E03 1.70603E03 2.35060E02 1.88341E03 9.84482E02 4.26082E02 2.93272E03 3.77295E03 4.28808E03 2.16587E03 3.26555E03 6.34640E03 1.09055E04 9.96482E03 2.01541E03 2.37170E03 7.28495E02 6.65346E01 4.55385E02 3.13218E03 8.99882E03 6.69918E03 3.41405E03 6.54903E02 2.43035E03 4.18564E03 3.72982E02 1.41978E02 2.84111E03 4.07933E03 3.48771E03 7.90023E03 1.04787E04 9.39574E03 4.52840E03 1.23352E03 6.09221E03 9.75783E02 4.29882E02 3.63618E02 2.82406E03 9.38957E03 2.23395E04 3.78826E04 1.56265E04 2.35111E02 1.08922E04 1.27245E04 2.65523E03 9.92429E02 8.99592E03 8.01953E03 1.48355E03 1.98190E03 1.80496E03 1.20368E03 1.37667E03 3.51558E03 7.12212E02 7.78071E02 5.96854E03 8.61657E03 8.02294E03 5.08063E03 2.01045E03 3.61120E03 9.65755E03 6.07060E03 5.39565E02 4.85383E03 4.41991E03 4.30247E03 3.05085E02 2.49388E03 3.38874E03 2.87686E03 1.92080E03 3.32026E03 3.88711E03 1.05722E03 3.28873E02 3.07737E03 3.75916E03 2.70250E02 9.55584E02 2.08226E03 3.20374E03 1.34657E04 1.04815E04 1.14139E04 5.11537E03 9.31487E02 1.01796E02 6.71459E01 7.37052E02 5.04029E02 3.49078E03 1.32162E04 7.55764E03 2.78210E03 3.65498E03 1.40886E03 1.97176E03 3.27812E03 2.46621E02 2.79070E03 2.46087E03 7.02159E02 1.60562E03 1.18208E03 6.68591E02 3.95062E03 5.47384E03 1.82785E03 3.60367E02 1.55914E03 2.95335E03 2.85704E03 6.29097E03 6.84015E03 1.61562E03 6.54098E02 3.88153E02 6.76116E02 4.08158E03 6.72968E03 5.24500E03 2.72293E03 4.56243E03 2.04092E03 3.65401E02 1.36463E03 8.74890E02 3.28846E02 3.09497E02 4.39823E02 1.52651E03 1.06139E03 7.90138E02 1.71847E03 1.34252E02 1.55093E03 2.75741E03 1.38159E03 1.08684E03 1.44768E03 1.12646E03 5.11541E02 3.20172E02 2.84328E02 9.46222E01 6.86480E00 -Frame 257 1.43102E05 8.94697E04 8.96640E04 4.69952E04 3.38342E03 2.09524E03 1.24298E03 3.58235E01 9.30130E02 4.23508E01 4.08333E01 3.64738E02 5.63596E01 1.12156E03 3.85755E02 2.86319E02 2.33558E03 4.49692E03 2.16823E03 5.80327E02 1.81580E03 3.31208E03 5.02585E03 6.49038E03 6.13659E03 7.18435E03 9.66565E03 1.84169E03 1.23651E04 1.48551E04 7.86745E02 2.38887E03 4.71300E03 7.75161E02 4.29990E01 7.96353E02 3.09290E03 2.11931E03 7.42985E02 1.26903E02 2.67541E02 6.85649E02 1.66587E03 2.22462E03 2.90041E03 1.47056E03 1.82293E02 8.05307E01 8.13917E02 2.46595E03 3.99197E03 1.79515E03 5.45279E02 6.78596E02 7.69932E03 1.12091E04 3.79806E03 3.98393E02 9.96660E02 3.14737E03 2.08071E03 4.15728E03 9.20066E02 1.59497E03 8.07210E03 5.37646E03 1.90468E03 1.74412E03 1.60269E02 1.14870E03 3.42219E03 1.49890E03 1.88004E03 1.25847E03 6.57259E03 8.37442E03 2.25928E03 5.29117E02 1.96393E02 2.01017E03 1.30655E03 7.32788E02 3.22416E03 8.97880E02 1.95618E03 1.72948E03 1.88854E03 7.46081E02 1.28929E03 6.10247E02 4.83346E03 2.70124E03 2.74491E03 6.85335E02 1.50880E02 2.81285E03 1.20602E04 1.01460E04 6.54219E02 4.06699E03 5.72868E03 2.58267E03 1.54503E03 5.78127E02 4.86663E02 1.59219E03 4.10632E03 3.47695E03 7.05668E02 1.08950E03 1.35919E03 2.61850E03 3.11748E03 2.21593E03 3.70235E02 2.46958E03 1.05956E03 3.47411E03 9.37618E03 1.11523E04 8.23754E03 2.03017E03 5.98662E01 2.71214E02 1.98259E03 1.90431E03 1.01537E03 2.55719E03 6.61806E03 1.20967E04 1.05310E04 3.73666E03 3.94857E02 1.41391E03 2.61892E03 1.78703E03 1.00591E03 4.38566E02 5.60328E02 3.89711E03 5.76623E03 2.61018E03 2.35440E02 4.46429E03 4.16700E03 6.90005E03 1.47868E04 8.76180E02 1.65410E04 1.44398E04 1.83640E03 7.85057E03 1.33754E04 1.43871E03 2.44628E03 3.26908E02 9.33182E03 1.11228E04 1.53067E03 7.24569E03 1.24456E04 1.10528E04 3.85326E03 1.28601E03 4.86972E02 2.36018E03 4.39401E03 2.26072E02 3.07836E03 2.28849E03 1.72974E03 1.27519E04 1.23695E04 3.12225E02 4.19299E03 5.51980E02 1.58633E03 2.37924E03 2.79795E03 6.59831E02 7.65769E00 8.06540E02 2.42911E03 1.71125E03 3.03344E03 2.09625E02 2.64985E03 3.59036E03 3.54235E03 6.60170E03 1.05251E04 1.69058E04 2.09852E04 8.05680E03 2.54413E02 1.38497E03 6.73364E02 2.33533E03 2.08607E03 3.08208E02 9.40838E02 4.12791E03 1.52155E03 2.47981E03 5.08995E03 5.67675E03 1.33481E03 4.05905E03 6.08367E03 2.26509E03 1.90228E03 3.53325E02 2.32440E01 1.54213E02 2.30650E03 7.27203E03 4.82079E03 1.59761E03 2.62363E03 6.22556E02 4.83807E02 4.35047E02 2.12965E02 5.95241E02 4.71964E03 1.68061E03 6.72234E02 6.53073E02 1.44325E03 1.31100E03 7.50874E01 6.72928E02 4.26110E03 5.04465E03 1.89754E02 1.77689E03 1.55264E03 6.41699E02 1.40048E03 8.85178E02 6.22490E02 1.61678E03 7.55942E02 9.06691E02 3.53508E03 5.41839E03 5.54823E03 2.41934E03 1.59779E03 9.23248E02 1.32485E02 8.77860E02 2.96436E02 2.00802E01 1.11992E02 5.91136E01 2.42321E02 -Frame 257 1.18547E05 2.94447E04 1.06136E04 8.59183E03 4.39300E03 1.07789E03 1.34598E03 1.63560E03 8.14879E02 1.04585E02 3.19422E02 1.65380E03 7.11416E02 7.76712E02 2.01111E03 2.77705E03 3.97613E03 1.43898E03 4.43299E02 1.98030E03 3.20105E03 3.22019E03 1.02316E03 2.99043E03 5.05524E03 4.01876E03 4.09179E03 2.64869E03 8.00421E03 1.29479E04 2.60669E03 2.15665E02 1.25553E03 4.20138E03 2.50510E03 3.81179E02 5.68731E02 3.02099E03 4.83232E03 5.11890E03 2.26766E03 1.03366E03 7.19407E03 1.02779E04 2.57634E03 1.94834E03 1.83168E03 1.74021E03 3.16581E03 1.64717E03 6.11742E02 1.87060E03 8.04081E02 4.75003E03 8.14112E03 1.83669E03 2.39839E02 1.65308E02 1.67771E02 6.89821E02 3.71515E03 3.92306E03 3.32412E02 2.20088E03 5.88447E03 1.54637E03 1.01126E03 3.30234E03 2.04595E03 1.56599E02 1.14566E03 2.35346E03 3.95125E03 7.90461E03 1.18735E04 3.42079E03 6.91058E02 5.58254E03 6.61203E03 3.38508E03 5.73543E02 2.22273E03 1.31293E04 1.82010E04 1.05581E04 3.77398E03 3.53017E01 8.44662E02 1.34925E03 3.38724E03 8.85261E03 9.15005E03 2.33136E03 5.96455E02 1.73742E02 7.97126E02 2.10287E03 4.48679E03 8.99834E03 2.49250E03 4.81485E03 5.55012E03 2.28756E03 1.97437E03 1.94227E03 1.39979E03 2.62323E03 5.02303E03 2.04392E03 1.16460E02 3.31111E02 9.59821E02 2.41355E02 5.33387E01 9.86837E02 4.08486E03 2.58309E03 1.99672E02 1.62895E03 2.54884E03 5.46545E03 6.45185E03 3.52155E03 1.76905E03 1.74730E03 4.08869E03 7.08045E03 8.37333E03 8.38605E03 5.97206E02 7.32370E02 2.42855E03 5.16797E03 3.08253E03 1.12101E03 1.27048E03 8.56800E03 8.10981E03 4.09511E03 2.90338E03 4.31448E02 5.27177E03 4.85094E03 7.76198E03 2.03875E04 6.16048E03 4.80670E03 2.00773E03 2.12678E04 3.70557E04 1.13100E04 5.80884E03 4.54048E03 1.16811E04 1.61894E04 9.22054E03 9.52628E02 1.19090E04 7.72493E03 2.01647E02 2.15671E03 8.03910E02 3.00617E02 7.12368E01 2.87994E02 6.64550E02 5.45455E02 9.37334E02 8.30344E03 1.12178E04 1.28366E04 1.29050E04 5.94421E03 8.85428E03 3.11175E03 3.61869E03 6.43466E03 3.62292E03 2.63701E03 2.20658E03 2.79632E03 3.53674E03 8.49091E02 2.64585E03 7.80094E03 1.21024E04 6.96665E03 1.46111E03 3.01864E02 3.37023E02 2.76218E02 5.70928E02 8.64846E02 4.50340E03 4.05137E03 2.94851E03 2.80491E03 1.70753E03 2.69476E03 3.00774E03 8.79502E02 2.41500E03 5.07313E03 1.77197E03 5.69163E02 2.93434E03 4.30819E02 6.03179E03 7.35041E03 4.68976E03 3.83364E03 1.70401E03 4.53426E02 4.23342E02 8.76650E02 4.03857E03 3.51077E03 2.16877E02 1.36714E03 3.34794E03 1.36910E03 2.56489E02 3.69210E03 8.10732E03 7.52940E03 7.44095E02 1.66979E03 7.49582E02 1.29901E02 3.96134E02 1.76161E02 4.39771E02 1.16943E03 4.30097E03 4.02300E03 8.94207E02 2.57762E02 4.82972E02 1.17824E03 4.12320E02 9.11824E02 2.01866E03 4.87489E02 2.55717E02 1.56769E03 2.02353E02 1.79389E03 1.94314E03 3.08180E02 2.36232E02 3.44006E02 1.55298E03 1.59656E03 1.99412E03 1.39354E03 6.16535E02 2.74813E02 -Frame 257 5.68992E04 4.25316E04 1.29686E04 3.35083E03 1.25791E03 7.29452E02 1.75025E02 5.87006E02 2.42254E02 3.83580E02 9.86288E02 1.94051E03 1.26124E03 6.37424E02 1.29774E03 6.69657E02 8.26147E00 1.19470E03 1.53249E03 8.64377E02 1.09540E03 1.40208E03 9.84992E02 1.47230E03 6.98140E03 6.85835E03 1.46819E03 2.45855E03 5.60980E03 9.79040E03 3.73944E03 6.48938E02 3.82081E03 7.05868E03 2.03237E03 1.26666E03 1.99564E03 5.46122E02 1.73452E03 8.96290E02 7.71137E02 3.27293E03 2.45991E03 1.62671E03 3.45442E03 2.97386E03 7.10568E02 3.26163E02 1.09094E03 1.02215E03 1.20728E03 1.31632E03 1.83639E03 2.76239E03 4.62153E03 1.18562E03 7.18697E01 9.04746E02 1.85325E03 2.04381E03 2.78046E03 1.40784E03 6.78119E01 3.67170E03 7.57006E03 4.53454E03 4.72595E03 5.05767E03 8.40126E02 2.77340E02 5.13850E02 4.11321E02 1.99101E03 9.59028E02 3.59474E03 3.87021E03 8.13670E02 6.43891E02 3.67307E02 1.11480E03 8.77269E01 3.83638E03 9.73230E03 8.62382E03 2.93401E03 7.19925E03 6.61969E03 2.16744E03 8.45326E02 8.55555E02 6.97791E02 3.44786E03 4.54120E03 4.44124E03 4.19740E03 6.60353E03 9.49783E03 1.16228E04 1.05316E04 6.25327E03 5.01426E03 5.68330E03 3.87486E03 3.54014E03 9.45960E03 5.15069E03 1.38915E03 1.28906E03 1.71869E02 8.19571E01 1.76734E03 4.01847E03 2.20647E03 3.16793E02 3.38198E02 1.68163E03 9.77016E01 3.36072E02 4.48078E02 1.28930E03 2.06940E03 9.90421E02 9.41173E02 4.16730E03 2.68345E03 5.10548E02 9.59758E03 2.30791E04 1.86346E04 5.56961E03 1.34665E03 1.59812E02 1.27579E03 1.95507E03 1.04427E03 6.56282E03 1.35756E04 8.02434E03 3.34881E03 2.64614E03 4.81426E02 2.12143E03 7.21780E03 1.29242E04 1.55335E04 6.37031E03 7.95190E03 2.88721E04 3.79105E04 5.67006E03 9.47491E03 1.26521E04 2.77066E03 1.19714E03 6.07926E03 1.16989E04 1.66737E04 8.00401E03 8.92268E02 4.11783E03 6.78347E03 5.69021E03 3.24420E03 1.78487E03 1.60216E03 2.86162E03 6.35564E03 8.69780E03 2.93524E03 1.58809E03 6.23138E03 2.71302E03 1.52668E03 4.12838E03 7.10777E03 9.75330E03 9.71215E03 1.63314E03 1.22002E03 3.66153E03 1.44811E04 1.12471E04 1.43865E03 8.71150E02 7.67126E03 6.30507E03 2.97444E02 2.43316E03 7.25599E02 2.18883E03 3.85577E03 4.18459E03 1.35224E03 3.87559E03 1.97417E03 8.58182E02 2.34780E02 4.16212E02 7.72423E01 1.94670E03 2.01597E03 4.25466E03 5.00000E03 4.64536E02 3.02057E03 4.13735E03 3.25838E03 8.66274E02 1.69159E02 8.95164E02 3.86734E03 9.65006E02 2.72007E02 3.38337E02 1.00514E03 2.45082E03 3.59643E03 3.04455E03 2.02670E02 3.09338E03 9.39488E02 3.46756E03 7.16793E03 2.83614E03 3.79068E03 2.93683E03 2.06135E03 1.94714E03 8.54486E02 1.04675E02 1.76349E03 1.05262E03 1.63997E02 1.78574E02 1.33550E03 1.38758E03 1.96520E03 2.37509E03 6.15112E02 3.80696E02 1.43661E03 1.68087E03 5.39441E02 1.42345E02 1.20595E03 2.08987E03 8.99245E02 2.57053E02 2.54225E03 4.40241E03 3.20603E03 6.06672E02 3.23282E02 5.76114E02 3.77179E02 9.94569E02 6.91897E02 -Frame 257 8.37456E00 7.70283E03 2.64063E04 6.41874E03 1.62242E03 2.41018E02 1.01058E02 1.38019E03 2.79606E03 1.23639E03 6.27495E02 4.19172E02 1.05866E02 5.87845E02 1.08010E03 9.96661E02 1.61803E03 1.77615E03 2.23452E02 1.49645E02 2.16940E02 2.27990E02 4.58727E02 4.29731E02 1.30514E03 6.94044E03 7.37046E03 1.42736E03 5.66329E02 1.87360E03 4.24259E03 4.17473E03 5.00018E03 3.30350E03 3.55080E03 7.71157E02 3.20731E02 4.18340E01 1.38223E03 1.46434E03 1.56794E03 2.32592E03 9.38909E02 2.96012E02 7.81638E02 9.13034E02 3.18949E02 6.76585E02 6.30083E02 5.00724E02 4.11293E02 4.10264E02 1.18974E03 2.42742E03 7.04534E03 6.10866E03 2.56561E03 2.17970E03 8.40205E02 1.45413E02 4.17230E01 7.00349E02 5.01054E02 1.83146E03 6.68049E03 2.29314E03 2.44965E03 1.41822E03 4.05209E02 1.90285E03 9.77095E02 4.39698E02 1.94285E03 2.60841E02 4.52973E02 4.80030E02 4.07559E02 2.98661E02 9.25369E02 2.47360E03 2.79286E03 5.34009E02 6.17853E02 3.85515E02 5.79191E03 5.27829E03 1.26429E03 1.30174E02 2.72267E03 2.08946E03 6.58297E02 9.30077E01 1.51825E03 3.04433E03 1.02160E03 4.53701E02 7.05393E03 6.06665E03 5.08288E02 1.41166E03 3.09404E02 2.32126E02 2.90731E02 3.08096E03 4.58434E03 3.80727E03 3.52409E03 3.96938E03 2.42020E03 1.34195E03 1.70968E02 1.67465E03 1.31114E03 1.54270E02 9.26965E02 3.49255E03 5.56093E03 4.87378E03 2.93803E03 2.24242E02 1.28747E03 5.75792E02 6.87487E02 2.97601E03 1.53458E03 3.26345E03 7.06053E03 3.49379E03 7.93828E03 1.33799E04 4.29889E03 6.15312E03 9.69670E03 8.87387E03 8.14508E03 1.23669E04 5.76179E03 4.92041E03 9.16585E03 1.94132E03 1.90133E03 5.19715E03 3.73727E03 2.27401E03 9.89331E03 3.07159E03 2.52610E03 2.06293E04 3.21958E04 1.01346E04 2.98324E03 5.64631E03 4.08667E03 5.64700E03 5.64438E03 9.21991E03 8.54437E03 1.88995E03 4.35405E02 1.89200E03 8.79546E03 2.20387E03 6.20921E03 4.41670E03 3.67130E03 6.83760E02 2.35743E03 4.53047E03 2.45924E02 2.53060E03 3.36784E03 1.26619E03 8.15698E02 4.34816E03 3.38995E03 4.91433E03 6.42901E03 1.23978E03 8.59564E02 1.96555E03 7.44538E03 1.13314E04 1.04044E04 3.52756E03 1.21293E03 8.57656E03 6.01512E03 2.14496E03 1.84275E03 4.06458E03 2.63377E03 6.58551E02 6.13733E03 1.80796E04 1.74707E04 6.69628E03 3.94209E03 4.57923E03 5.88827E03 4.85195E03 2.53126E03 2.98772E03 1.97383E03 4.05418E03 3.52116E03 3.32383E02 2.68801E02 9.36973E02 1.41698E03 2.27436E03 3.21475E03 1.21349E03 2.30986E02 7.80803E02 1.63269E03 8.54049E02 7.61950E02 1.93476E03 4.45044E03 7.42705E03 9.40958E03 7.36153E03 2.18696E03 7.80702E02 1.85769E02 1.21781E02 1.97221E02 6.54624E02 6.26121E01 3.47601E03 8.03240E03 7.37819E03 5.13741E03 5.01526E03 2.61149E03 2.34731E03 2.31203E03 7.09821E02 3.11365E02 7.54573E02 5.93781E02 1.31306E03 6.53855E02 3.88074E02 1.55058E03 8.46760E02 7.69376E02 2.76931E03 3.97401E03 2.31287E03 2.42738E03 1.36483E03 4.89418E02 2.57630E02 8.98636E02 1.77599E03 8.90385E02 -Frame 257 1.72934E03 1.50104E04 4.32666E04 2.26398E04 2.56697E03 1.08237E01 1.75191E00 5.40294E02 8.79914E02 4.05225E02 2.40922E02 1.26897E02 3.84211E02 7.03123E02 4.68094E02 1.40547E02 1.30662E03 2.44119E03 2.87156E03 2.31846E03 1.05620E03 3.22927E02 7.66049E02 2.64126E03 1.49479E03 2.56041E02 9.28246E02 6.67861E02 1.13116E03 6.03784E02 1.25426E02 2.95829E03 2.80906E03 3.40400E02 8.84118E02 3.02718E03 2.52529E03 1.11022E03 1.19048E03 8.80116E02 2.84083E02 1.44078E02 1.33636E03 1.44432E03 5.02202E02 1.44219E03 5.62440E01 7.27591E02 2.31733E02 3.63618E01 4.91449E02 3.30058E02 3.38648E02 5.21320E03 9.60804E03 1.64560E03 4.05666E02 6.52967E02 9.36065E01 6.89463E01 3.21830E02 1.44173E03 6.56636E02 2.46084E03 1.27900E04 5.48030E03 1.24029E03 2.78824E03 1.54136E03 7.18583E02 2.37951E03 3.49524E03 4.90113E03 2.30956E03 2.73781E02 2.86242E01 1.57682E02 1.66633E02 2.78897E02 3.51231E02 4.40466E02 3.85676E02 2.01085E03 1.56238E03 2.39887E03 3.64641E03 2.58475E03 4.16978E03 5.02638E03 3.18857E03 4.12036E03 4.41081E03 5.60559E03 3.64991E03 1.37921E03 2.51804E03 2.80000E03 1.34164E03 2.50480E03 3.88519E02 1.17683E02 9.45025E02 2.77710E02 1.55135E02 4.59798E02 1.55207E03 1.43210E03 1.72941E03 7.26468E03 3.79511E03 3.02956E02 5.82074E02 1.16274E03 1.46826E02 1.26417E03 2.92236E03 5.23388E02 1.26306E03 2.12869E03 2.70524E01 2.71931E03 4.55755E03 3.00886E03 1.46846E02 2.96661E03 2.95279E03 3.18895E03 1.14185E04 1.29879E04 3.28981E03 1.99423E03 1.94820E03 4.43072E03 4.21453E01 5.72211E03 5.24944E03 2.48291E02 3.88840E03 1.28559E04 5.89928E03 1.83546E03 9.78134E02 3.37106E03 3.58914E03 1.64263E03 5.67047E03 1.02089E04 4.23316E03 1.49093E04 3.21239E04 1.38777E04 3.22847E03 9.79142E02 3.45605E01 2.01937E03 7.47253E03 6.03306E03 1.28717E03 1.68319E02 6.55559E03 2.14853E04 2.52212E04 1.98033E04 9.83816E03 3.09766E03 9.16885E02 7.73041E02 8.58343E01 1.75352E03 2.23157E03 8.16596E02 1.14525E02 3.23268E03 1.01146E04 9.31289E03 3.88910E03 2.29463E03 4.75560E03 6.31987E03 8.46052E03 5.92313E03 6.24691E03 1.67477E03 2.13687E03 4.98266E03 2.52798E03 8.24257E02 2.41649E02 4.99081E02 3.86841E02 3.22019E03 1.77815E03 2.53650E03 5.00278E03 2.28638E03 6.12277E02 8.82510E01 1.41101E03 8.93572E02 1.29234E03 1.36643E03 1.61138E02 5.93613E02 2.23227E03 3.96633E03 8.80332E02 3.32497E01 6.67792E02 1.65312E03 5.28909E02 2.58385E03 2.28280E03 2.10396E02 9.82184E02 1.06579E03 7.92457E01 3.19085E02 6.69675E01 4.39454E02 2.53927E01 3.74193E03 2.27549E03 1.36400E01 3.56910E02 1.42998E03 1.69112E03 9.48169E02 9.45007E00 2.71425E03 7.76424E03 2.35928E03 2.74763E03 5.90427E03 8.30017E01 3.96042E03 3.40635E03 1.14484E03 1.70530E03 2.60733E03 9.44234E02 3.24196E01 4.65108E02 7.22841E02 2.34960E02 1.67954E03 1.14865E03 9.49898E02 1.17397E02 6.92691E02 3.03663E02 5.32688E02 1.78493E03 1.75923E03 1.10962E03 1.17399E03 1.47672E03 1.85389E03 -Frame 257 2.88428E04 1.28114E04 2.22431E04 5.22717E03 6.42244E02 4.41432E02 5.32815E00 6.39499E02 6.66186E02 4.26129E01 1.04309E02 1.62244E02 1.76617E02 9.59186E01 3.12121E02 6.46087E02 2.42073E02 3.79377E02 2.12576E01 7.66485E02 4.16918E02 1.93469E01 2.74563E02 4.55858E02 1.47274E03 2.28251E03 1.39406E03 5.51564E02 1.06522E03 9.48452E02 3.26426E01 2.97285E03 1.28646E04 1.00083E04 2.28535E03 3.44561E02 7.40305E02 1.74204E03 2.51335E03 2.98622E03 1.41826E03 5.23745E02 3.26971E02 2.10568E03 3.84197E03 2.70989E03 1.91761E03 1.78583E03 6.15079E02 1.72476E02 3.09610E02 6.81022E02 6.06289E02 4.06835E03 8.82261E03 3.79561E03 7.44453E02 1.43458E03 1.38433E03 1.98638E03 2.40165E03 4.61495E02 1.64841E03 6.27762E03 1.17271E04 8.10686E03 3.63304E03 6.44329E02 4.14416E03 3.70290E03 1.66920E03 1.44602E03 3.87288E03 4.74117E03 2.06334E03 1.11473E03 1.03604E02 5.25029E02 3.10694E02 5.25316E02 2.73614E03 4.73214E03 3.03463E03 7.96554E02 1.26831E02 8.79872E02 3.37206E03 4.04000E02 1.98937E03 2.47960E03 1.59869E03 5.37390E03 5.48836E03 4.62223E01 2.48874E03 6.24524E03 1.01057E04 5.31372E03 5.32249E02 2.73481E02 1.05187E02 1.31375E03 3.55835E03 5.18409E03 6.16351E03 9.17593E03 9.81429E03 2.14676E03 4.87584E03 4.28648E03 4.71328E02 3.50899E03 2.51013E03 6.38244E02 1.15135E03 2.09339E03 9.75309E01 1.43074E03 1.25629E03 4.51672E02 1.25013E03 3.40359E03 7.58509E02 6.10432E03 8.23884E03 1.22346E03 6.00428E02 1.44791E03 7.28160E03 2.76482E03 2.87386E03 4.17450E03 1.16819E03 1.64210E02 1.38998E03 6.95830E03 6.09777E03 3.61047E03 5.93820E03 1.68631E04 1.41741E04 4.45767E03 2.27309E03 8.44927E02 5.13790E02 3.09547E02 4.01535E03 6.61488E03 3.54529E04 3.66959E04 6.71518E03 1.18818E03 2.64879E03 6.92178E01 1.35750E02 1.20890E03 2.93585E03 3.09439E03 3.40373E03 1.63885E03 3.94222E03 4.04458E03 9.31846E02 4.36007E02 1.31057E01 5.63730E02 2.81544E03 4.38344E03 1.42000E03 3.31048E02 6.18247E02 1.02221E03 1.90943E03 4.30613E03 8.13582E02 7.35304E02 4.50695E03 1.49910E04 1.01326E04 1.79183E02 1.83152E04 2.68346E04 3.27859E03 4.56237E03 6.64836E03 4.40760E03 5.60375E03 5.68139E03 4.29384E03 8.49163E02 1.87280E03 9.43243E03 2.20244E03 9.43782E02 9.41480E02 7.37097E02 1.84586E03 3.98027E03 1.64759E03 4.53029E02 2.23443E03 2.68762E03 1.14295E03 1.72728E03 4.70030E03 2.97134E03 1.11907E03 6.75444E02 3.26562E01 9.86361E02 5.02293E03 3.48942E03 1.24840E03 5.25684E02 3.57162E02 6.61104E02 1.86495E02 1.47256E02 3.97251E02 3.80177E02 2.43956E03 1.97013E03 5.18076E02 7.12771E02 2.48933E03 1.33333E03 1.21082E01 7.07566E02 1.10306E03 1.35938E03 3.53060E03 2.74265E03 5.16395E03 4.80616E03 1.08599E03 3.52989E02 1.82700E03 9.14554E02 3.95875E02 8.97427E02 3.57176E02 9.16224E02 1.77518E03 9.65904E02 1.48810E02 1.11993E03 2.15788E03 2.16267E03 6.43736E02 1.56217E02 3.10189E01 3.91288E02 5.04816E02 5.32669E01 2.13354E02 1.05724E02 1.39182E02 -Frame 257 8.61166E04 6.82418E04 4.16936E04 1.25459E04 7.27919E02 1.60880E02 1.28211E03 2.70744E03 2.47373E03 1.13690E03 1.20868E02 2.12633E00 9.59185E01 1.34850E02 6.29271E02 5.78494E02 3.72127E02 1.32398E03 2.97668E03 2.08729E03 6.28215E02 3.77432E02 2.06253E02 5.29225E02 1.01595E03 1.82342E03 6.94931E02 1.27854E02 8.71067E01 6.74688E02 6.25050E00 5.86574E03 1.28843E04 1.97729E03 1.23150E03 1.59564E03 3.03451E03 9.76176E02 6.60107E01 7.79577E02 5.74591E02 4.41720E02 5.00358E02 4.09209E02 9.82934E02 1.65748E03 2.06048E03 2.37405E03 3.84035E02 9.69218E02 2.82907E02 8.66264E02 2.76292E03 2.26847E03 9.16843E03 4.17553E03 6.41904E02 1.51814E03 8.28121E01 2.95738E03 3.29404E03 1.79497E03 1.04678E03 2.16659E03 7.18335E03 5.14029E03 6.49207E03 4.35279E03 3.09773E03 8.07515E02 9.08005E02 2.22856E02 9.04371E02 6.52196E00 1.02582E03 2.87260E03 6.98994E03 4.24376E03 1.07814E03 1.02672E03 9.10268E02 6.61118E02 7.43362E02 2.84324E01 2.49743E02 1.90901E03 2.89695E03 2.42526E02 7.70439E02 7.99946E02 8.07795E02 4.59139E03 7.98898E03 5.31879E03 7.24597E03 7.45232E03 9.44891E03 4.35800E03 1.56669E03 4.32211E02 2.81202E03 2.43320E03 1.26900E03 5.05588E03 2.40139E03 2.27875E03 1.83624E03 3.57187E03 6.14281E03 8.87012E03 2.77515E03 1.18550E03 1.25446E03 3.22246E02 1.09978E03 1.16679E02 2.59211E03 3.31149E03 1.75478E03 7.97444E02 1.58351E03 7.56927E03 1.16617E04 3.96850E03 1.26973E03 7.53028E03 6.51611E03 1.43988E04 2.53299E04 1.54159E04 1.27717E04 4.77779E03 3.15081E02 6.04550E01 4.39591E02 5.39732E03 4.46778E03 8.93116E02 7.42263E02 6.04411E03 1.30548E04 6.51757E03 5.36971E03 5.40446E03 5.06154E03 6.44884E03 7.20636E03 1.01256E04 7.94885E03 9.32744E02 3.58389E03 1.18459E03 4.83187E03 8.99097E03 5.83858E03 1.14558E03 7.19626E02 9.46021E02 1.40520E03 1.97434E03 4.54284E02 3.56217E02 1.02912E03 9.39435E02 8.89435E02 1.70906E03 5.56406E02 3.26848E03 3.45411E03 3.17429E03 2.94903E03 1.77201E03 4.73861E02 1.57857E03 2.93600E03 1.90359E03 4.81044E03 4.29195E03 4.96681E03 1.80291E01 1.15936E04 2.20687E04 2.31839E04 1.84672E04 4.07942E03 3.95606E03 7.57251E03 8.03982E02 4.24758E03 4.87292E03 8.22941E03 9.45789E03 5.13345E03 8.92553E03 9.12193E03 6.07509E03 7.63025E03 3.98090E03 5.22146E02 1.85904E02 3.66487E02 2.06450E03 1.23883E03 4.40812E02 3.54820E03 3.96409E03 2.59498E03 3.37633E03 2.28665E03 2.99235E03 2.79622E03 6.29197E02 4.24928E02 1.99490E03 3.23974E03 1.79208E03 9.10215E02 1.51225E03 1.49348E03 8.83874E02 9.49608E01 6.73472E02 7.93153E02 3.62140E02 1.18749E03 2.20754E03 1.74941E03 6.94222E02 7.74714E02 1.21898E03 8.95889E02 1.03293E03 2.31636E03 1.69003E03 4.32146E02 5.07134E02 2.14307E03 3.57257E03 2.12854E03 2.36498E02 9.91688E01 7.64345E01 1.86614E02 5.25066E02 2.81188E03 5.54496E03 2.20387E03 8.03009E01 4.70979E02 2.29054E02 6.67400E02 1.00551E03 1.31903E03 7.95225E02 1.01315E03 1.58616E03 1.38859E03 -Frame 257 6.31581E04 4.55799E03 2.11760E04 8.31253E03 6.94088E02 1.19132E03 1.79039E02 6.90117E02 3.71819E02 4.58128E02 9.08580E02 6.14875E02 1.26224E03 3.12270E03 3.76662E03 3.25257E03 1.63094E03 4.84438E02 2.51906E03 5.41269E03 3.76349E03 2.08376E03 2.87181E03 6.94939E03 5.86882E03 5.49737E02 4.33498E02 1.07389E02 1.18157E02 9.76262E02 3.73888E03 6.60329E03 6.93682E03 3.81958E03 2.20026E03 4.68986E03 6.03002E03 4.83774E03 2.63617E03 2.85520E03 1.57245E03 7.65445E02 1.35501E03 2.63937E03 2.20745E03 5.51757E02 1.83228E03 8.68014E03 9.70853E03 4.58486E03 1.08431E03 1.10082E03 3.83046E03 4.66550E03 7.08726E03 5.03261E03 2.10163E03 6.25641E02 1.00280E03 1.45508E03 2.44421E02 4.43817E02 6.55441E01 3.28491E03 5.11753E03 9.93853E02 4.75410E03 3.95507E03 3.16685E03 2.38764E03 8.43578E02 4.13800E02 5.15414E02 4.51754E02 3.59117E03 8.52212E03 6.22856E03 1.58986E03 3.52170E02 1.09200E03 3.48405E03 2.46659E03 3.88067E02 4.20881E01 1.59627E02 1.22051E03 5.03877E03 2.13565E03 9.87348E01 4.01069E02 1.35985E03 3.65901E03 1.72751E03 6.98379E02 1.66537E03 3.64753E03 7.40881E03 6.58947E03 4.57427E03 7.47826E03 1.08269E04 7.40037E03 1.09111E03 9.01541E03 7.90011E03 8.88172E02 8.38245E02 9.22477E02 2.22679E03 5.07656E03 1.54024E03 1.65946E02 5.39138E02 4.20412E03 4.92316E03 3.33133E03 3.92368E02 1.77650E03 1.16368E03 1.03045E03 7.95029E02 2.96281E03 1.53916E03 1.43236E03 7.69962E02 2.26411E03 2.27973E03 7.33207E03 2.05827E04 1.26819E04 2.06692E03 2.40943E03 4.29583E03 3.98630E03 8.69716E03 8.92448E03 2.27034E03 2.89562E02 5.96983E02 2.09133E03 8.51715E02 2.55014E03 1.26208E03 2.30929E03 2.77194E03 5.22365E01 7.37951E02 2.02202E03 8.73483E02 5.89503E03 2.50990E03 1.25651E03 1.08838E03 5.97560E03 5.27919E02 5.58844E03 4.14059E03 1.28193E03 4.42552E03 2.59626E03 9.98362E03 8.75774E03 2.12559E03 4.48058E03 8.48146E03 7.48064E03 8.05255E03 5.49369E03 3.06550E03 3.15038E03 1.27509E03 1.50166E01 1.51813E02 3.33431E02 4.07498E02 1.62905E03 4.21149E03 2.60831E03 1.79629E03 1.00303E03 4.48432E03 2.69228E03 2.44440E03 5.84192E03 7.38085E02 3.69200E03 8.12907E03 5.19598E03 4.49626E02 3.60144E02 3.36202E03 3.91085E03 1.53478E02 2.61445E03 1.54438E04 1.97688E04 4.13794E03 2.43839E03 2.07616E03 1.05376E03 1.21804E03 1.10102E03 7.75274E01 1.03336E02 5.02032E02 1.96002E03 1.03156E02 1.90249E03 1.92818E03 1.04868E03 1.32990E02 2.19015E03 6.00541E03 8.81084E03 7.05611E03 6.00704E03 1.00462E03 1.99327E02 5.76214E02 7.55754E02 4.04341E02 7.71895E02 4.96788E03 4.94642E03 1.48466E03 1.29155E03 6.26692E02 2.83600E02 1.66330E02 1.10364E03 1.60237E03 2.40135E03 1.00653E03 5.17898E02 1.48683E03 1.30262E03 5.17606E02 2.34823E03 2.22002E03 2.01773E02 5.27923E02 9.94162E02 8.74046E02 3.76254E02 8.12294E02 2.87684E03 2.30192E03 1.29149E03 1.32579E02 1.23638E01 2.77618E02 4.98012E02 8.74282E02 1.87204E03 1.34258E03 1.69878E02 1.39665E03 -Frame 257 5.76791E04 5.85322E04 4.12540E04 1.01052E04 6.23457E01 8.30892E02 2.75138E01 1.04456E03 1.11468E03 7.63713E02 5.90036E02 2.58269E02 8.18996E02 2.19403E02 3.58756E02 8.78024E01 1.03708E03 3.09515E02 6.79362E02 8.31631E02 6.89716E01 2.32335E01 1.00788E03 4.12078E03 2.63342E03 2.38663E03 2.37593E03 1.03957E03 3.85960E02 3.06892E02 5.48845E02 1.82012E02 4.02846E02 1.22682E02 3.22803E02 1.07482E03 3.97912E02 1.26728E03 3.79832E03 6.19448E03 3.51607E03 1.76737E03 2.43145E02 2.91950E03 2.25367E03 2.20529E03 2.42787E03 1.55358E02 1.61888E03 2.44540E03 8.41653E02 5.74363E02 8.79615E02 3.17819E03 6.65208E03 6.84703E03 4.36487E03 3.12626E03 1.09610E03 6.56300E01 2.98018E02 1.49039E03 1.30300E03 1.93562E02 2.54873E03 3.08635E03 1.02169E03 9.16059E02 1.52483E03 2.95900E02 1.70365E02 5.28751E02 1.06586E03 1.43159E03 4.28868E02 4.41712E02 1.03103E03 1.22589E02 4.43528E02 1.88313E03 5.77334E03 6.75416E03 3.43040E03 1.51154E03 1.63356E03 3.03040E03 5.21058E03 3.49335E03 2.76229E02 3.75276E02 1.20376E03 2.60919E03 1.37258E03 7.11160E02 1.85625E02 3.85595E03 8.86071E03 4.60835E03 2.15140E02 3.61806E03 7.04724E02 1.75351E03 5.28614E03 6.37682E03 6.39163E03 3.31244E03 1.77745E03 4.43483E02 1.05021E03 5.34207E03 4.57708E03 3.99629E03 7.15563E03 4.10242E03 7.16899E02 3.83845E03 7.03718E03 5.40426E03 3.02043E03 1.45235E03 8.28889E02 1.07333E03 4.35676E02 1.36917E03 3.38857E03 5.77463E03 3.96507E03 7.23424E03 1.21532E04 4.94496E03 5.50878E03 7.20374E03 4.30368E03 3.98005E03 3.17419E03 2.65862E03 1.38605E03 1.20545E02 9.31907E02 4.01933E02 2.78362E03 4.27847E03 2.60706E03 1.07067E02 9.93814E02 2.84321E03 5.38704E03 1.54391E04 3.18346E04 2.53477E04 8.98799E03 5.31602E03 5.65157E03 9.36642E03 1.51679E04 1.33123E04 4.51775E03 3.63238E03 7.01266E03 1.17332E04 1.99221E04 1.25142E04 9.95543E02 2.88423E03 7.10644E02 3.67600E02 5.67682E02 7.17247E03 5.96151E03 1.65323E03 2.30943E03 1.28563E03 8.94569E02 1.23590E03 1.60406E03 1.85174E03 1.01229E03 6.38832E02 6.26284E02 3.95434E00 1.85942E03 4.25770E03 2.83803E03 7.20453E03 3.94737E03 2.69433E01 1.68296E03 6.02600E02 1.83172E03 3.48670E03 7.36747E03 1.26907E04 1.02995E04 2.86241E03 4.30643E03 8.66725E03 2.26225E03 4.06941E03 3.07855E03 2.53452E03 2.34952E03 3.40872E02 1.77177E03 2.02893E03 1.32061E03 5.04309E02 4.33502E03 4.98403E03 1.40695E03 1.25089E02 1.32631E03 6.29172E03 6.13353E03 4.73596E03 4.09767E03 7.35998E03 3.10128E03 1.54566E03 1.68591E03 1.72100E03 2.11951E03 4.10827E03 3.88018E03 8.94007E01 2.51500E03 2.15441E03 5.43649E02 2.57627E02 2.53627E02 6.69448E01 1.60929E03 2.71049E03 1.49985E03 5.05671E02 5.86320E02 2.75044E03 3.69034E03 1.61219E03 8.96611E01 5.01095E02 1.47817E03 1.18653E03 7.59497E02 2.33789E03 3.34846E03 1.79942E03 7.16654E02 1.92954E02 2.82147E02 8.37000E02 1.74512E03 7.95461E02 1.19689E02 2.16860E02 3.23616E02 2.32009E03 3.15767E03 -Signal: SpeechEndSignal -Signal: DataEndSignal: creation time: 1422745326840, duration: 5235ms diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-mel.dump b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-mel.dump deleted file mode 100755 index ab6420b7..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-mel.dump +++ /dev/null @@ -1,321 +0,0 @@ -Signal: DataStartSignal: creation time: 1422745326849 -Signal: SpeechStartSignal -Frame 40 2.29468E01 2.75997E01 4.82547E01 3.70051E01 5.53570E01 2.63290E01 8.29951E01 1.60334E02 6.52554E01 3.05997E01 3.48380E01 1.20349E02 1.72823E02 6.19980E01 2.72282E01 1.24413E01 2.18152E01 6.45479E01 1.28285E02 2.49309E02 8.58705E01 2.05119E02 9.37074E01 9.74660E01 6.30589E01 4.69776E01 6.25067E01 8.47647E01 1.52696E02 2.85306E02 1.59758E02 2.50474E02 3.97901E02 2.01596E02 1.31341E02 1.33400E02 1.41848E02 1.33579E02 1.31293E02 3.89525E01 -Frame 40 1.41197E02 4.74661E01 6.31284E01 3.41885E01 1.84778E01 1.36248E01 2.26614E01 4.82651E01 1.15192E02 3.16447E02 1.10123E02 1.70014E01 1.72118E02 1.18005E02 3.53404E01 1.48883E01 1.00338E02 1.69379E02 9.01381E01 1.21943E02 8.09687E01 2.00854E02 8.38461E01 1.25113E02 9.30848E01 4.88426E01 1.40455E02 2.72049E02 6.69514E01 6.78196E01 9.15709E01 9.83409E01 1.24876E02 2.06714E02 2.83060E02 1.64376E02 1.27718E02 1.24668E02 1.24388E02 4.61960E01 -Frame 40 8.09543E01 3.63000E01 8.06983E01 6.63013E01 1.19875E02 2.79674E01 2.20183E01 1.41659E01 2.21445E01 2.56527E02 9.35613E01 1.06708E01 4.62123E01 4.53524E01 2.51971E01 5.23865E01 1.11042E02 1.39796E02 4.50457E01 1.19094E02 2.36414E01 2.22247E02 4.77382E01 8.05045E01 2.82928E01 5.46551E01 5.95675E01 2.91980E02 7.73064E01 8.42805E01 1.40805E02 2.04712E02 7.40085E01 9.59810E01 2.52481E02 1.70625E02 7.78308E01 1.18437E02 1.16475E02 8.06060E01 -Frame 40 1.36578E02 3.64702E01 1.97970E01 3.82987E01 3.04263E01 9.04172E00 3.42135E01 3.22133E01 1.19559E02 1.05569E02 7.23215E01 3.36641E01 8.12839E01 7.36726E01 7.91339E01 1.08577E02 1.34595E01 6.28761E00 5.20007E01 1.29950E02 4.69102E01 1.02170E02 7.87861E01 6.36736E01 1.47972E01 2.01292E01 9.79449E01 1.26349E02 9.98528E01 1.18258E02 2.27389E02 2.70630E02 2.24306E02 1.89636E02 3.05425E02 1.92270E02 1.01223E02 1.06066E02 6.57495E01 8.34842E01 -Frame 40 1.39217E03 4.28948E01 2.64936E02 7.79908E01 4.98719E01 4.50918E01 1.22777E02 4.02979E01 6.63814E01 5.37295E01 3.13690E01 1.48270E01 3.66941E01 6.40491E01 6.70050E01 2.72595E01 6.06929E00 2.72033E01 2.90671E01 3.20514E01 5.95000E01 1.97250E02 2.08212E02 1.23171E02 8.03503E01 5.06059E01 1.02649E02 1.72824E02 1.60044E02 1.92018E02 1.99903E02 2.28974E02 3.03152E02 2.32903E02 2.60271E02 1.40844E02 1.78551E02 1.04829E02 5.45225E01 5.14963E01 -Frame 40 7.73972E03 1.91860E03 5.78308E03 1.38153E03 6.75999E03 5.47708E03 1.70006E03 2.64935E03 2.67657E03 1.59227E03 5.73166E02 1.99131E02 4.23805E01 8.38886E01 6.40944E01 4.94372E01 2.68000E01 2.74497E01 5.47397E01 1.08805E02 3.11008E01 7.76567E01 8.87472E01 1.27619E02 7.67013E01 9.05778E01 9.45406E01 1.34208E02 1.01435E02 5.18869E01 8.06410E01 1.94361E02 1.71727E02 1.78705E02 1.47907E02 7.74692E01 1.59751E02 1.24980E02 1.61680E02 1.31276E02 -Frame 40 2.15970E04 2.31139E04 1.17125E04 1.46576E04 1.80637E04 3.23353E04 1.29986E04 1.89062E04 2.97776E04 2.31062E04 7.64341E03 3.52529E03 1.67270E02 8.11377E01 2.72474E02 1.67970E02 4.41043E01 7.23199E01 1.19951E02 1.18183E02 1.08636E02 1.59695E02 2.39867E02 1.17076E02 2.35686E02 3.93950E02 2.09088E02 2.32958E02 2.50716E02 9.07701E01 8.55176E01 2.15500E02 1.54197E02 3.08860E02 4.06157E02 3.94141E02 1.76455E02 2.80982E02 3.02807E02 1.14815E02 -Frame 40 1.04605E04 8.10665E04 3.76581E04 8.28605E04 1.43781E05 8.91765E04 1.61438E05 1.30648E05 9.15071E04 1.48562E05 7.02294E04 3.78696E04 2.24400E03 2.01609E02 2.68683E02 2.84660E02 3.69872E02 5.29333E02 1.23778E02 7.14597E01 3.08571E02 3.49072E02 4.41207E02 9.39426E02 4.75314E02 2.13276E02 1.40744E02 4.32323E02 9.44993E02 1.79539E02 1.00886E02 2.86069E02 3.63151E02 7.21593E02 8.17812E02 6.53192E02 1.15960E02 6.85594E02 5.26264E02 1.43226E02 -Frame 40 1.69750E04 1.78508E05 7.82553E04 2.24457E05 2.52180E05 5.75120E05 1.33704E06 3.72883E05 3.90183E05 1.44181E06 7.41668E05 3.37248E05 2.56211E04 7.16441E03 4.37212E03 2.21659E03 3.25726E03 2.35404E03 1.52385E03 1.80512E03 2.08527E03 3.75266E03 3.93418E03 1.10965E04 2.71699E03 4.09606E02 3.66706E02 1.14713E03 7.80518E03 1.88555E03 1.47471E02 2.40772E02 4.87823E02 6.00041E02 4.02658E02 3.88688E02 3.62992E02 1.23185E03 1.24453E03 7.76197E01 -Frame 40 3.14763E04 2.25481E05 1.86053E05 1.68497E05 6.87616E05 4.91197E05 4.69060E06 1.72587E06 1.49214E06 4.36592E06 4.51752E06 2.88631E06 9.07333E05 4.78384E04 1.54055E04 5.85725E03 1.30214E04 8.22359E03 6.41335E03 5.26278E03 4.67959E03 9.80460E03 1.58474E04 5.47822E04 3.16195E04 3.83026E03 2.45006E03 6.33530E03 1.35194E04 5.37560E03 1.69024E02 3.43094E02 1.07425E03 3.52712E03 1.46136E03 4.55624E03 7.51941E03 7.53380E03 6.98560E03 1.67865E02 -Frame 40 5.94515E04 2.26966E05 3.28709E05 6.54923E04 8.99907E05 3.84664E05 5.60121E06 3.94346E06 4.82538E06 4.08121E06 7.56430E06 4.52782E06 4.88839E06 6.69648E05 1.27769E05 2.79633E04 3.08855E04 2.18003E04 2.21868E04 1.79554E04 1.38308E04 1.28518E04 1.78403E04 7.49776E04 1.67370E05 3.33770E04 6.45805E03 1.50145E04 3.01395E04 2.32393E04 6.96975E02 4.63804E02 2.14831E03 1.47335E04 6.27276E03 6.80294E03 9.86198E03 5.52294E03 6.88277E03 2.89141E02 -Frame 40 9.04067E04 1.88082E05 4.51758E05 3.58332E04 8.45379E05 5.98263E05 3.97292E06 6.02375E06 6.63764E06 4.11141E06 4.53803E06 2.72489E06 6.46176E06 3.84577E06 2.07982E06 9.22619E04 5.84878E04 3.58213E04 5.84391E04 3.98898E04 4.41964E04 1.98590E04 2.73337E04 1.30964E05 5.39849E05 1.40484E05 1.94197E04 1.42071E04 6.35157E04 7.27116E04 3.36188E03 2.08269E03 6.22382E03 2.60286E04 1.13461E04 1.70720E04 4.12660E04 1.05337E04 1.25420E04 5.25285E02 -Frame 40 1.02078E05 1.60902E05 4.43484E05 3.26432E04 6.64218E05 5.50065E05 2.74707E06 6.07964E06 5.85421E06 4.31728E06 3.04820E06 1.37978E06 3.49405E06 4.61580E06 5.51635E06 4.74746E05 2.03818E05 6.80519E04 1.28203E05 7.74201E04 7.38211E04 3.21207E04 4.29171E04 1.56959E05 7.31028E05 1.96513E05 4.88140E04 2.09879E04 1.01167E05 1.46422E05 7.67574E03 4.52106E03 1.13986E04 5.19245E04 5.71617E04 1.41477E04 2.01919E04 5.94342E04 2.96887E04 1.23866E03 -Frame 40 1.20865E05 1.20542E05 4.16876E05 4.00642E04 5.04426E05 5.38480E05 2.35078E06 5.90322E06 4.21753E06 3.95648E06 2.67149E06 1.13830E06 1.68611E06 1.39474E06 1.24439E06 1.99389E06 6.78171E05 1.37285E05 1.98606E05 1.84309E05 1.48976E05 7.54365E04 3.27227E04 6.25539E04 6.24602E05 6.01172E05 1.70648E05 3.21684E04 3.27782E04 5.66789E04 1.67191E04 1.62289E04 1.04274E04 2.82926E04 7.09239E04 3.97149E04 2.74053E04 6.49824E04 2.26640E04 2.42457E03 -Frame 40 1.08723E05 1.17448E05 3.81036E05 3.54201E04 4.54492E05 4.25378E05 2.41332E06 4.73124E06 2.91856E06 2.18742E06 2.36761E06 6.84455E05 6.78364E05 4.54406E05 3.06020E05 8.72600E05 1.78088E06 4.03702E05 3.66305E05 2.83472E05 1.71528E05 6.99188E04 2.06667E04 3.66573E04 2.84755E05 7.82052E05 2.64272E05 4.65778E04 2.44823E04 3.22103E04 4.37233E04 4.61611E04 3.09928E04 4.78512E04 1.56095E05 1.09680E05 8.19558E04 6.60567E04 2.82265E04 4.89981E03 -Frame 40 1.20293E05 1.04193E05 2.81916E05 5.52358E04 3.86247E05 3.85873E05 2.19959E06 3.37875E06 1.16533E06 1.04246E06 1.06852E06 4.64873E05 2.51154E05 1.60861E05 1.12497E05 1.76359E05 1.59960E06 5.21601E05 2.68948E05 2.45432E05 1.37133E05 6.44887E04 1.27358E04 1.68872E04 4.95251E04 1.62205E05 1.64552E05 4.68761E04 1.26779E04 9.02063E03 1.12256E04 1.37735E05 1.66050E05 5.17218E04 1.09143E05 1.67470E05 1.57423E05 6.59928E04 8.54079E03 1.49216E03 -Frame 40 4.01593E04 5.63170E04 6.96571E04 2.71134E04 1.54223E05 6.60725E04 4.83338E05 3.88782E05 1.37403E05 7.64130E04 1.84655E05 5.57410E04 2.62752E04 4.57696E04 1.89719E04 7.30851E04 2.21027E05 7.42263E04 7.30019E04 4.03887E04 2.86782E04 1.27883E04 2.84072E03 2.86129E03 7.13402E03 8.97200E03 2.11210E04 7.51754E03 8.08206E03 1.81884E04 1.12422E04 4.08715E04 7.40087E04 1.04458E05 1.28990E05 8.83148E04 8.14307E04 3.86929E04 7.64987E03 6.41089E03 -Frame 40 1.57279E04 8.33390E03 2.00748E04 2.14509E03 4.12987E04 2.26857E04 2.39198E03 1.91889E03 7.74769E03 5.78198E03 1.36849E04 1.12116E03 1.53402E03 1.53796E04 6.58420E03 4.56619E03 8.87621E03 2.46504E03 1.42082E04 8.12973E03 6.35854E03 8.78132E03 3.94343E03 1.31451E03 5.37800E03 1.11183E04 2.02006E04 4.43329E03 2.29235E03 3.92663E03 2.93993E03 3.72083E03 7.59284E03 2.34094E04 2.87991E04 2.22337E04 1.68193E04 8.50327E03 1.77825E03 1.99083E03 -Frame 40 1.06176E04 8.86316E03 1.92013E04 1.84802E03 3.97084E04 2.77131E04 9.55669E02 4.43144E02 4.64238E03 4.53735E03 9.19940E03 5.74224E02 1.51783E03 1.54102E04 4.99734E03 1.06618E03 5.47925E03 9.60828E02 6.43565E03 4.00203E03 6.57507E03 1.42088E04 3.42400E03 8.04867E02 3.02678E03 7.28908E03 2.43491E04 3.71430E03 9.13731E02 5.98612E02 1.82379E02 3.42851E02 6.58032E02 1.36178E03 1.18700E03 1.35942E03 5.27967E02 3.79496E02 2.45508E02 2.15406E02 -Frame 40 8.61562E03 7.99106E03 1.90169E04 1.62883E03 3.49715E04 2.02277E04 3.22614E03 3.04843E03 2.71148E03 3.45969E03 1.17634E04 1.34529E03 1.32091E03 7.84998E03 2.37102E03 1.82656E03 3.43810E03 2.20177E03 2.62361E03 3.96289E03 4.54387E03 1.79232E04 2.28464E03 8.34051E02 4.37537E03 7.92099E03 1.65982E04 4.13409E03 7.54147E02 4.41513E02 1.59566E02 2.04437E02 6.24839E02 5.97874E02 7.41914E02 1.16666E03 5.29007E02 3.17511E02 3.03010E02 1.97718E02 -Frame 40 7.41884E03 9.81929E03 1.88673E04 1.52374E03 2.61698E04 1.36001E04 5.12292E03 5.06299E03 2.25130E02 1.89879E03 6.82948E03 9.18088E02 7.90187E02 1.56674E04 4.88094E03 5.08781E02 2.60093E02 8.68221E02 3.08929E03 3.65785E03 3.69110E03 1.29188E04 1.68067E03 7.89274E02 4.30459E03 5.39789E03 9.78040E03 2.83631E03 4.72338E02 3.91020E02 4.90990E01 1.89845E02 5.82654E02 6.86919E02 7.28749E02 1.26196E03 5.04113E02 2.41504E02 2.36220E02 2.30317E02 -Frame 40 3.87994E03 6.18924E03 1.27625E04 1.28684E03 2.13898E04 9.02623E03 3.90332E03 4.19233E03 9.14829E02 1.12143E03 1.64290E03 7.52456E02 1.07716E03 6.63443E03 1.64075E03 2.83097E02 7.06681E02 1.61976E03 5.35309E03 2.03611E03 2.75131E03 4.05015E03 6.91014E02 1.09708E03 2.16997E03 2.08383E03 5.58232E03 2.86720E03 4.82758E02 5.39976E02 1.23012E02 2.06731E02 6.28403E02 1.14796E03 1.40001E03 8.28787E02 3.99466E02 2.36453E02 4.46109E02 4.75788E02 -Frame 40 5.15658E03 4.37277E03 7.15478E03 9.75306E02 1.82591E04 7.20726E03 4.28110E03 3.93884E03 4.18993E03 2.56195E03 1.28137E03 3.61123E02 9.35531E02 8.96407E02 2.72872E02 3.91115E02 7.39475E02 2.75270E03 2.82737E03 1.16375E03 1.58911E03 1.56060E03 1.30569E03 9.75934E02 1.82916E03 1.05055E03 1.09386E04 1.01190E04 5.45584E02 7.34917E02 1.62413E02 3.09401E02 3.49954E02 5.71040E02 6.25568E02 7.41801E02 1.01992E03 5.43703E02 5.57731E02 3.13376E02 -Frame 40 4.24575E03 3.96999E03 5.84018E03 8.65482E02 1.44658E04 4.56396E03 3.85739E03 2.28006E03 5.50351E03 1.93293E03 3.89954E02 5.73114E02 4.79094E02 8.36790E02 6.27850E02 2.66488E02 4.43902E02 1.44156E03 7.59208E02 8.70199E02 2.28326E02 9.73910E02 5.24071E02 4.70975E02 6.84156E02 9.96545E02 6.32292E03 4.30873E03 2.44481E02 6.43520E02 5.28472E02 1.88660E02 2.43656E02 7.25570E02 3.82182E02 5.09665E02 3.64091E02 4.15634E02 5.06428E02 3.44983E02 -Frame 40 3.80013E03 2.48155E03 3.67199E03 7.00347E02 1.17742E04 3.31056E03 5.51746E02 5.44801E02 3.78783E03 7.70766E02 4.19378E02 8.04185E02 8.99281E02 1.86031E02 4.60774E02 2.87679E02 5.55467E02 8.99594E02 6.70072E02 8.06802E02 7.83673E02 1.10168E03 1.10767E03 6.57327E02 8.59048E02 1.35251E03 2.68797E03 2.79950E03 8.95556E02 1.36789E03 1.56173E03 2.44109E03 2.71992E03 3.42754E03 3.28941E03 4.22188E03 4.16502E03 3.98121E03 2.98816E03 1.81716E03 -Frame 40 6.18185E03 1.18524E03 2.76172E03 1.53872E03 1.29591E04 6.62434E03 2.52066E03 2.10261E03 5.90735E03 7.15136E02 6.18678E02 2.50836E03 1.51619E03 7.64276E02 7.55639E02 3.10191E02 5.96735E02 1.08978E03 1.47873E03 2.34331E03 2.66405E03 2.55338E03 3.57426E03 3.12242E03 3.57266E03 5.25967E03 4.35669E03 2.36812E03 4.18228E03 6.84673E03 1.13313E04 1.42146E04 2.24881E04 2.87355E04 2.16159E04 2.95019E04 3.22070E04 4.33457E04 6.01350E04 4.07128E04 -Frame 40 2.30618E03 1.79863E03 9.10762E02 1.41670E03 7.94484E03 1.46336E03 1.21784E03 7.78815E02 2.49531E03 7.23381E02 1.28333E03 3.43197E02 1.98887E02 5.43095E02 3.61945E02 1.99822E02 2.31685E02 1.13662E03 3.29021E03 2.31190E03 7.75828E02 9.08960E02 3.56696E02 4.95957E02 7.55143E02 5.00129E02 4.49657E02 5.97251E02 6.76161E02 4.23509E03 7.38930E03 1.00218E04 2.12596E04 2.92737E04 8.86034E04 7.23105E04 6.68376E04 3.97829E05 9.61650E05 2.55629E05 -Frame 40 3.09975E03 3.99913E03 2.71350E03 2.28265E03 3.90293E03 7.59063E02 1.15473E03 7.99700E02 1.02889E03 3.79064E02 7.35254E02 6.77419E02 2.28487E02 1.05314E03 5.76025E02 4.16353E02 2.08741E02 1.16787E03 2.85800E03 1.94791E03 4.74339E02 1.53648E03 1.70864E03 8.32181E02 1.20098E03 1.25315E03 1.76480E03 1.12548E03 2.27356E03 8.34605E03 1.40729E04 3.30181E04 5.58142E04 1.62281E05 8.07690E05 3.98980E05 7.28534E05 1.44007E06 1.38853E06 9.83141E05 -Frame 40 2.47034E03 9.59619E02 1.01468E03 2.96255E02 5.53845E02 1.22913E02 2.14863E02 3.67817E02 6.59870E02 2.76399E02 4.37803E02 3.32490E02 4.74483E02 7.88682E02 4.55788E02 1.08611E02 6.79209E02 1.10471E03 7.60863E02 1.07632E03 1.27110E03 2.71030E03 2.40681E03 1.92819E03 2.80822E03 3.14908E03 2.62054E03 2.66245E03 2.62355E03 8.10216E03 3.84233E04 9.98730E04 1.12857E05 1.18899E05 7.49262E05 8.73620E05 1.36653E06 2.08079E06 3.80082E06 4.58755E06 -Frame 40 4.44096E02 1.19214E02 1.62386E02 5.73021E02 1.27522E02 1.35313E02 2.77047E02 4.21865E02 1.63192E02 1.63720E02 4.23672E02 3.54923E02 3.34218E02 2.48767E02 3.00436E02 2.06271E02 5.00787E02 3.17584E02 1.18229E03 1.66787E03 2.24279E03 4.29605E03 4.39694E03 1.87724E03 4.02257E03 7.26031E03 4.82495E03 5.31594E03 9.78866E03 2.22113E04 3.21840E04 1.38793E05 1.50885E05 5.07931E05 6.37170E05 1.39031E06 7.52226E06 7.26568E06 4.41770E06 4.59772E06 -Frame 40 3.49874E02 2.16566E02 9.43763E01 1.54038E02 8.38486E01 2.02584E02 2.32369E02 8.27308E02 1.97100E02 4.62363E02 1.53555E03 8.28481E02 5.53226E02 1.78764E03 9.39889E02 5.03694E02 3.48969E02 7.88783E02 1.13503E03 3.29484E03 8.43095E03 7.10459E03 5.29288E03 7.84564E03 5.98942E03 3.49076E03 8.97246E03 2.94317E03 1.57986E04 1.40387E04 4.10538E04 4.28778E04 2.72066E05 6.65111E05 7.57769E05 5.84340E05 3.67992E06 9.29566E06 8.69969E06 7.69066E06 -Frame 40 9.17533E01 1.79255E02 6.71533E01 2.06640E01 1.69790E02 2.42335E02 9.18152E02 4.63057E02 3.14630E02 3.08419E02 4.37641E02 1.82368E02 5.17629E02 7.85825E02 1.08285E03 8.25690E02 3.18454E02 4.54463E02 2.22056E03 5.17965E03 2.58546E03 2.17365E03 4.50214E03 5.32848E03 4.45215E03 5.17727E03 8.68113E03 8.34345E03 9.42033E03 1.69899E04 5.45759E04 4.34362E04 9.85939E04 4.24715E05 5.93625E05 3.86088E05 1.31143E06 2.24034E06 8.08440E06 8.44668E06 -Frame 40 1.01806E02 5.64543E01 5.31546E01 3.76926E01 1.07200E02 9.36156E01 1.82597E02 2.71898E02 4.10475E02 2.35753E02 7.88615E01 8.11447E01 2.22641E02 2.11283E02 4.71670E02 2.03893E03 1.08731E03 1.10118E03 2.24533E03 5.10768E03 1.71035E03 1.31214E03 2.92318E03 5.68799E03 8.22320E03 5.71930E03 3.11660E03 7.28570E03 1.01222E04 7.57981E03 1.98719E04 9.76661E04 1.36341E05 2.47493E05 5.92465E05 8.85737E05 1.53626E06 1.53757E06 2.31873E06 3.69954E06 -Frame 40 3.54086E01 1.10209E02 2.13794E01 4.25332E00 1.43007E02 1.46977E02 2.30503E02 1.08436E02 1.15890E02 2.31163E02 1.54103E02 7.99657E01 1.13595E02 9.55562E01 7.21718E02 6.61896E02 4.16228E02 5.46025E02 1.82478E03 4.32205E03 2.76961E03 4.82760E03 9.82959E03 6.46548E03 7.50579E03 2.54932E03 6.76381E03 1.03031E04 1.51492E04 1.68546E04 2.43519E04 2.50909E04 8.12429E04 1.68151E05 3.12660E05 9.18239E05 1.94979E06 1.23562E06 2.61193E06 2.47419E06 -Frame 40 3.26240E01 1.33740E01 2.06462E01 1.26870E01 1.27402E01 5.78420E01 4.44929E01 1.67879E02 8.31053E01 1.47680E02 3.33545E02 2.04258E02 2.47578E02 3.44537E02 9.71350E01 4.89205E02 9.96367E02 5.91002E02 2.48003E03 4.46809E03 4.83914E03 7.86406E03 8.90928E03 5.31497E03 7.04600E03 1.11999E04 1.53983E04 6.57574E03 1.09477E04 2.45682E04 1.44335E04 5.06065E04 4.64284E04 9.19995E04 2.10260E05 5.22946E05 5.27017E05 1.60148E06 6.55509E05 1.62451E06 -Frame 40 3.56800E01 3.85988E01 2.43890E01 1.09076E01 4.24893E01 3.06653E01 1.28301E02 3.76617E01 1.06973E02 5.18368E02 3.07263E02 7.02690E02 3.68011E02 2.79242E02 3.47247E02 1.15454E03 8.01406E02 5.86705E02 2.72726E03 6.59803E03 4.32325E03 8.64516E03 9.02576E03 6.52154E03 5.88220E03 1.92433E04 1.85053E04 7.33939E03 2.24012E03 9.87211E03 7.93138E03 1.70413E04 7.29863E04 7.50807E04 1.26947E05 3.53714E05 5.35080E05 1.18024E06 6.45833E05 1.49200E06 -Frame 40 2.98622E01 9.53305E01 5.40482E01 1.67837E01 1.26385E02 9.87296E01 1.17944E02 9.60846E01 1.56674E02 2.66407E02 1.55052E02 5.20996E02 8.16464E02 6.79371E02 3.50505E02 6.04458E02 5.08202E02 7.08414E02 1.31076E03 4.67302E03 3.59912E03 1.01349E04 1.08456E04 7.50122E03 1.48134E04 1.26870E04 6.21045E03 5.87679E03 7.59236E03 1.02966E04 8.75208E03 1.14342E04 3.89074E04 1.29709E05 2.10954E05 6.71059E05 8.08810E05 1.36380E06 1.26448E06 2.84342E06 -Frame 40 6.78941E01 3.90513E01 5.05910E01 3.57102E01 2.76298E01 3.72480E01 2.02593E02 1.48505E02 1.45726E02 6.49543E02 3.56713E02 9.35135E01 4.31454E02 7.86114E02 1.16562E02 7.82684E02 1.14544E03 8.90932E02 1.66182E03 6.10981E03 5.92760E03 6.92543E03 7.62454E03 3.92117E03 6.28916E03 9.15137E03 4.83817E03 1.02607E04 1.41818E04 7.62457E03 3.07245E04 3.41722E04 7.81591E04 2.24645E05 6.44269E05 2.10576E06 1.41268E06 1.47457E06 2.39224E06 6.05586E06 -Frame 40 5.53219E01 1.29592E02 8.22212E01 4.13049E01 3.13683E01 6.65228E01 4.00783E02 4.16929E02 3.44148E02 3.71756E02 4.88744E02 1.16966E02 4.39567E02 5.81745E02 4.82135E02 2.78939E02 6.10306E02 6.21980E02 7.39662E02 1.37145E03 1.77970E03 2.62240E03 4.51200E03 7.21428E03 1.21186E04 4.21847E04 3.29395E04 1.38919E04 1.35017E04 1.75172E04 2.72686E04 2.55986E05 4.40273E05 3.18815E05 5.33364E05 8.14978E05 1.44083E06 1.68972E06 3.27504E06 3.32812E06 -Frame 40 1.97875E02 2.00396E02 6.37393E01 1.47777E02 1.46290E02 4.40352E02 3.41518E02 3.15230E02 5.67962E02 4.51124E02 4.99432E02 9.38426E01 1.15033E03 7.52603E02 7.55941E02 7.08749E02 8.53160E02 1.13996E03 2.88002E03 1.25364E04 6.01961E03 8.65535E03 4.01462E03 2.77931E03 9.42775E03 5.07342E04 2.01609E04 1.51286E04 2.01901E04 3.41390E04 5.57833E04 7.63978E05 1.69682E06 4.61910E05 4.85280E05 1.05260E06 1.08305E06 1.76097E06 1.42716E06 1.94681E06 -Frame 40 1.67909E03 6.22810E02 5.59286E02 1.28635E03 2.69286E03 2.34992E03 1.67119E03 9.53548E02 1.04448E03 4.72128E03 3.11700E03 2.75713E02 1.32904E03 1.91630E03 1.69781E03 1.57939E03 5.84685E02 1.25595E03 1.61936E03 7.38653E03 2.20426E04 4.78893E04 2.00927E04 3.40459E03 2.27780E04 3.91478E05 2.47970E05 1.18389E04 1.58937E04 4.24738E04 5.45815E04 4.82823E05 1.68341E06 6.52314E05 3.35442E06 3.57123E06 1.13402E06 1.03692E06 9.10408E05 6.98943E05 -Frame 40 4.99005E04 1.36055E04 7.05842E04 7.78630E04 2.95788E04 1.14318E05 4.18505E04 5.78963E03 2.20908E03 1.41890E04 1.49480E04 2.08055E03 1.14410E03 1.90418E03 1.29369E03 1.31403E03 3.98027E03 3.02149E03 9.37417E03 6.27069E04 6.71527E04 2.82931E04 1.84772E04 1.86170E04 3.23812E04 2.74596E05 1.80607E05 2.42225E04 1.34423E04 3.71426E04 1.03486E05 6.72814E05 1.71960E06 3.64573E05 7.21088E05 1.05725E06 3.83546E05 3.00335E05 9.16923E04 1.11545E05 -Frame 40 2.27177E04 2.87100E05 2.51266E05 2.81094E05 6.37531E05 3.77038E05 4.78211E05 6.11241E04 3.37716E04 7.06347E04 4.12903E04 3.74531E04 6.65091E03 6.57879E03 6.29735E03 6.45789E03 1.98855E04 2.84117E04 8.46347E04 4.35892E05 2.63532E05 8.84505E04 4.68961E04 7.74798E04 9.79636E04 3.44760E05 1.73299E05 3.70828E04 4.90012E04 1.01965E05 1.31750E05 2.26829E05 8.59121E04 4.07091E04 5.81711E04 3.46944E04 1.59697E04 3.56771E04 1.57916E04 1.68596E04 -Frame 40 2.64215E04 3.89096E05 3.79232E05 2.57532E05 1.63770E06 3.83254E05 8.76209E05 1.95943E05 6.99110E04 9.53411E04 7.84328E04 7.57493E04 2.00286E04 1.04891E04 1.52978E04 4.26723E03 4.30390E04 4.67202E04 2.54415E05 8.28753E05 5.16184E05 1.64931E05 7.35100E04 1.86902E05 3.27971E05 4.96179E05 6.97094E04 2.97321E04 4.27143E04 7.98022E04 1.28187E05 1.52519E04 8.38539E03 2.68303E04 3.74180E04 8.76280E03 5.45002E03 1.34785E04 1.03004E04 9.20252E03 -Frame 40 2.93029E04 4.33657E05 3.64466E05 3.62648E05 1.67503E06 3.78345E05 1.39644E06 2.46363E05 7.73331E04 1.44256E05 1.11815E05 1.19896E05 2.74561E04 2.15744E04 2.74349E04 6.71291E03 9.26011E04 7.96085E04 6.07733E05 3.38551E06 1.33115E06 4.18225E05 1.43654E05 2.12030E05 6.79013E05 4.14976E05 5.80815E04 4.44295E04 9.24143E04 8.66445E04 2.23259E04 1.30926E03 1.96571E03 6.18759E03 7.19617E03 2.36126E03 2.38175E03 5.94959E03 6.02764E03 8.60573E03 -Frame 40 2.53966E04 4.55323E05 3.24249E05 5.07940E05 1.41944E06 4.31907E05 1.65690E06 1.92184E05 8.17172E04 1.79470E05 1.00692E05 1.40467E05 2.72790E04 3.02982E04 2.87938E04 1.42648E04 1.00969E05 1.76581E05 1.52838E06 5.07197E06 8.20925E05 5.75989E05 2.76234E05 2.57873E05 2.01840E05 1.65413E05 4.75954E04 6.65319E04 1.63280E05 6.19363E04 8.64010E03 8.67950E02 3.17083E03 4.04091E03 1.16563E03 1.26004E03 1.63842E03 8.45588E03 8.18353E03 2.68799E03 -Frame 40 2.20363E04 4.73967E05 2.75662E05 6.55261E05 1.21864E06 5.28398E05 1.50814E06 1.38538E05 8.41231E04 1.48993E05 1.10585E05 1.48723E05 1.94721E04 4.11683E04 2.98959E04 3.61244E04 1.55238E05 6.35003E05 2.28509E06 3.84675E06 5.46601E05 5.82349E05 3.65770E05 3.17066E05 4.97509E04 2.85531E04 1.95229E04 4.74683E04 6.69739E04 1.23572E04 1.28880E03 1.11265E03 3.09149E03 6.66770E03 1.27994E03 6.37673E02 1.07698E03 4.87774E03 5.50399E03 3.10816E03 -Frame 40 2.49631E04 4.70789E05 2.50465E05 7.19050E05 9.42949E05 5.56120E05 1.25886E06 9.99446E04 6.59301E04 1.44192E05 1.15291E05 1.28936E05 2.86705E04 4.94271E04 3.52039E04 9.41223E04 5.70593E05 1.47640E06 1.42911E06 1.43610E06 5.16371E05 5.87182E05 1.68516E05 9.71745E04 2.35360E04 2.02576E04 1.20315E04 1.99466E04 2.84864E04 2.46541E03 6.57026E02 5.40389E02 1.61336E03 3.15055E03 9.35681E02 9.43153E02 1.31684E03 4.88957E03 2.33957E03 1.27715E03 -Frame 40 3.10826E04 4.40138E05 2.08670E05 7.28261E05 6.95023E05 5.46589E05 9.10023E05 7.98634E04 5.79095E04 1.17234E05 1.47487E05 1.02880E05 2.83617E04 6.79732E04 4.55297E04 2.25525E05 1.74734E06 1.64576E06 5.20833E05 5.82731E05 4.91395E05 4.31403E05 1.14955E05 2.73547E04 2.07921E04 2.32483E04 1.96187E04 1.27581E03 2.46316E03 6.56130E02 2.71634E02 3.85991E02 1.11928E03 1.19286E03 9.13530E02 6.13979E02 4.74093E02 1.90005E03 1.65739E03 1.34131E03 -Frame 40 2.90634E04 3.72432E05 1.73489E05 6.45867E05 4.34525E05 4.95516E05 6.28719E05 6.39220E04 4.97103E04 9.47272E04 1.22759E05 6.40615E04 2.86586E04 8.95869E04 4.73597E04 3.60585E05 1.07956E06 6.24640E05 1.53253E05 1.76438E05 3.71250E05 1.77963E05 3.43615E04 1.59102E04 1.07984E04 1.83027E04 1.10803E04 3.89730E02 1.64153E02 2.45536E02 2.05077E02 3.26551E02 4.81410E02 5.51470E02 5.03890E02 4.08576E02 1.00316E03 1.62753E03 1.21096E03 6.94843E02 -Frame 40 2.49312E04 3.18993E05 1.44711E05 5.35765E05 3.36093E05 3.64672E05 4.24390E05 4.51613E04 3.60860E04 7.69600E04 1.35032E05 6.65063E04 3.18752E04 1.07929E05 8.39082E04 7.24717E05 4.97119E05 1.70799E05 8.54889E04 1.49681E05 2.98512E05 7.12292E04 1.73204E04 1.33797E04 8.42745E03 1.28578E04 5.94748E03 1.32727E02 2.17926E02 2.86265E02 1.42222E02 2.12920E02 4.04152E02 3.35412E02 4.77070E02 2.35404E02 7.23874E02 1.20407E03 1.28929E03 3.31857E02 -Frame 40 2.41238E04 2.53702E05 1.09428E05 4.46844E05 1.68111E05 4.13049E05 3.09174E05 3.72399E04 4.55622E04 6.38666E04 1.14629E05 3.02441E04 4.82189E04 1.20151E05 1.16279E05 4.56784E05 1.44593E05 5.92132E04 6.43866E04 1.50376E05 2.55923E05 1.43807E04 4.87317E03 4.82122E03 4.64333E03 1.41212E04 2.64862E03 2.01235E02 1.36344E02 1.36463E02 1.31237E02 3.98483E02 2.14193E02 3.99436E02 5.67754E02 3.44875E02 2.43573E02 4.96064E02 3.12655E02 1.80720E02 -Frame 40 2.42998E04 2.27704E05 9.27013E04 3.93850E05 1.45051E05 4.55133E05 3.20378E05 3.46450E04 5.28033E04 7.20666E04 1.06293E05 2.45174E04 7.50249E04 2.02409E05 1.48431E05 1.71638E05 6.38570E04 3.74991E04 8.34323E04 1.19378E05 2.42309E05 8.53888E03 2.89273E03 3.19005E03 3.88770E03 1.56533E04 1.48952E03 2.69722E02 1.58022E02 1.65803E02 2.40995E02 2.95921E02 2.76249E02 5.09095E02 6.16216E02 7.57336E02 2.92320E02 5.13152E02 3.80579E02 3.34500E02 -Frame 40 2.78502E04 2.22034E05 8.99342E04 4.05344E05 1.93802E05 4.58132E05 3.15727E05 3.55684E04 5.63498E04 8.16962E04 9.93831E04 3.00367E04 1.18139E05 3.08025E05 3.79272E05 9.00498E04 4.17187E04 1.93494E04 3.93159E04 9.68159E04 1.89009E05 1.87503E04 2.18377E03 4.14330E03 3.20555E03 1.12883E04 2.60984E03 2.85749E02 1.90166E02 2.76198E02 2.58932E02 4.39377E02 3.78196E02 3.90816E02 7.21209E02 3.75711E02 2.59621E02 5.55917E02 5.27445E02 2.37318E02 -Frame 40 3.19741E04 2.51446E05 1.00135E05 4.55409E05 1.89843E05 5.77687E05 4.10468E05 4.24010E04 6.74496E04 9.68613E04 1.58915E05 3.66241E04 1.63793E05 3.78147E05 3.72760E05 5.33184E04 4.55422E04 1.97851E04 2.62232E04 1.02628E05 1.58871E05 3.11373E04 4.41086E03 4.01987E03 4.12736E03 6.09082E03 2.63090E03 1.86293E02 1.96369E02 1.24744E02 1.22768E02 3.42672E02 4.28754E02 3.48516E02 2.94091E02 4.47151E02 1.89004E02 3.77707E02 1.97358E02 1.03094E02 -Frame 40 3.11167E04 2.73044E05 1.16131E05 4.92477E05 2.44797E05 7.47814E05 6.12643E05 5.38633E04 7.44612E04 1.12162E05 2.26762E05 6.10678E04 2.13359E05 5.55660E05 1.47033E05 4.08253E04 4.26461E04 2.11907E04 2.01022E04 6.14261E04 1.37748E05 6.36523E04 7.40207E03 7.91683E03 4.71251E03 1.29453E04 3.02170E03 3.39118E02 1.52040E02 8.56712E01 9.72461E01 1.95473E02 2.71318E02 2.43614E02 1.82088E02 2.10998E02 2.46069E02 1.44710E02 2.24107E02 3.63933E02 -Frame 40 2.34465E04 2.74611E05 1.11114E05 4.82504E05 2.65409E05 8.50093E05 9.06138E05 8.43575E04 7.91882E04 1.58989E05 3.50356E05 1.35753E05 3.16613E05 1.07081E06 1.44875E05 3.63522E04 2.81672E04 2.07039E04 1.46142E04 3.71587E04 8.70480E04 1.25281E05 4.23797E04 1.25563E04 9.38306E03 3.32821E04 8.12169E03 4.19306E02 7.96222E01 7.08845E01 1.16870E02 2.56751E02 3.37942E02 2.41582E02 2.87103E02 2.65950E02 1.50594E02 1.50046E02 3.08520E02 1.64857E03 -Frame 40 2.54276E04 2.98179E05 1.16985E05 4.97541E05 3.12278E05 1.12256E06 1.26442E06 1.15742E05 1.10910E05 1.76805E05 5.07119E05 1.74203E05 4.73477E05 1.49250E06 1.00842E05 3.28205E04 2.50677E04 1.72732E04 1.28849E04 1.80264E04 2.27301E04 8.26049E04 1.42443E05 2.28275E04 1.41097E04 2.54633E04 2.61771E04 1.75445E03 1.12528E02 7.35510E01 5.87679E01 9.54774E01 4.16821E02 4.21454E02 3.66589E02 3.34814E02 2.21246E02 2.89417E02 4.22279E02 2.96716E03 -Frame 40 2.93784E04 3.09206E05 1.27000E05 5.45516E05 3.00562E05 1.50239E06 1.54024E06 1.36570E05 1.29652E05 2.45271E05 6.67674E05 2.39689E05 6.37942E05 2.06061E06 8.97509E04 2.32089E04 1.94261E04 1.28286E04 1.26702E04 1.19838E04 1.21236E04 2.30483E04 8.51847E04 1.02816E05 3.72450E04 1.12009E04 3.19134E04 1.33179E04 2.68309E02 1.23921E02 1.32739E02 1.19956E02 2.69728E02 3.69440E02 1.51787E02 2.72919E02 2.77488E02 3.90533E02 1.61759E03 8.29729E03 -Frame 40 2.45975E04 3.23187E05 1.27616E05 5.52962E05 2.91970E05 1.72056E06 1.62433E06 1.15518E05 1.44069E05 3.20508E05 7.00368E05 2.89833E05 6.90151E05 2.26806E06 9.81128E04 2.05090E04 1.63626E04 8.50071E03 7.74615E03 9.00007E03 6.00166E03 6.36260E03 1.57781E04 1.34489E05 6.75562E04 8.11320E03 8.67624E03 1.16987E04 3.91161E03 2.12998E02 1.94281E02 3.55992E02 4.67653E02 5.16821E02 3.35724E02 1.25518E02 2.65209E02 4.32897E02 1.24995E03 5.25919E03 -Frame 40 2.82801E04 3.06440E05 1.31310E05 5.48440E05 2.87372E05 1.62218E06 1.51537E06 9.06027E04 1.38541E05 3.29610E05 6.64627E05 2.92139E05 5.29539E05 1.49329E06 7.77485E04 1.37534E04 9.63737E03 6.59935E03 4.47055E03 6.51480E03 4.25202E03 5.65816E03 7.10178E03 8.02655E04 6.20628E04 1.98733E04 4.71719E03 6.33824E03 1.15372E04 7.94555E02 3.43810E02 5.70447E02 2.50078E03 2.82671E03 4.94744E02 1.88845E02 7.52735E02 1.71480E03 1.13947E03 7.41786E03 -Frame 40 3.44063E04 2.74543E05 1.23148E05 5.24829E05 2.32124E05 1.42925E06 9.77388E05 7.87283E04 1.38449E05 2.39699E05 5.19984E05 2.37413E05 3.94152E05 7.37255E05 4.29667E04 8.28678E03 5.28452E03 5.88974E03 5.49146E03 5.22304E03 2.91155E03 3.45783E03 3.06383E03 1.87981E04 5.18684E04 2.02608E04 3.91212E03 4.86877E03 1.11191E04 4.06445E03 4.46454E02 2.24017E02 7.96326E02 1.81846E03 2.97659E02 1.74706E02 3.52299E02 8.65552E02 4.22191E02 4.72054E03 -Frame 40 3.25967E04 2.39738E05 1.22215E05 4.75066E05 1.59438E05 1.11975E06 5.60132E05 5.78913E04 1.08989E05 1.69830E05 3.24061E05 1.59770E05 2.85107E05 4.53381E05 2.80180E04 5.87762E03 5.44748E03 3.73621E03 3.12748E03 2.25316E03 1.62703E03 2.33392E03 2.08811E03 9.69567E03 4.95329E04 2.79999E04 1.89618E03 4.84258E03 1.01982E04 6.41939E03 4.80305E02 3.61985E02 1.79360E03 4.03379E03 7.56051E02 3.91155E02 3.75721E02 1.03013E03 3.76236E02 1.57035E03 -Frame 40 3.10778E04 2.03680E05 1.00703E05 3.81438E05 1.07478E05 7.24288E05 3.10702E05 3.44923E04 8.57750E04 9.53770E04 1.33002E05 1.32930E05 2.34111E05 3.02933E05 1.49211E04 2.67958E03 2.64981E03 2.93540E03 2.31630E03 1.75638E03 1.23045E03 1.19226E03 1.62654E03 5.50660E03 3.84126E04 1.93498E04 2.30990E03 1.91826E03 4.76439E03 7.85368E03 3.78785E02 1.67731E02 1.50569E03 3.10388E03 7.19137E02 3.55767E02 3.65906E02 6.95809E02 4.94655E02 2.99420E02 -Frame 40 3.03197E04 1.67565E05 8.31925E04 2.87277E05 7.68367E04 5.24255E05 1.74609E05 1.92715E04 6.45113E04 4.92406E04 4.68549E04 9.14979E04 2.16421E05 2.77402E05 6.23859E03 2.30276E03 3.06316E03 7.64830E02 1.30928E03 1.06693E03 2.00249E03 1.19587E03 2.20508E03 4.00330E03 1.74446E04 1.21716E04 2.13138E03 1.72759E03 4.41797E03 5.08935E03 1.84637E03 2.50378E02 4.15980E02 1.46792E03 3.86382E02 3.17412E02 4.17050E02 1.46664E03 5.40434E02 2.12573E02 -Frame 40 2.98750E04 1.39283E05 6.81886E04 2.22216E05 5.71060E04 4.07244E05 1.10066E05 1.26343E04 4.79334E04 2.77111E04 1.92889E04 4.07315E04 1.05014E05 2.03586E05 5.58617E04 6.44862E03 2.48028E03 2.81187E03 1.82940E03 9.83551E02 1.19058E03 1.43503E03 1.83092E03 4.44148E03 2.70358E04 1.41363E04 1.99349E03 1.07430E03 1.95490E03 4.72001E03 1.03164E04 4.70757E02 5.83693E02 1.61374E03 4.38132E02 1.85955E02 6.48552E02 2.26165E03 1.25872E03 3.14667E02 -Frame 40 2.91247E04 1.24175E05 5.98376E04 1.95151E05 4.54728E04 2.69568E05 7.99971E04 1.31510E04 2.95936E04 2.25330E04 1.48003E04 2.13501E04 1.87000E04 1.69101E04 5.42941E04 1.77107E04 1.41549E04 7.44098E03 1.76768E03 1.78378E03 1.23313E03 2.01265E03 3.04057E03 5.79752E03 1.90021E04 1.49306E04 8.21459E02 4.87445E02 7.45270E02 3.19565E03 9.00104E03 4.06445E02 6.94393E02 9.30063E03 8.84753E02 2.73085E02 1.46276E03 3.56313E03 1.49364E03 1.85568E02 -Frame 40 3.21957E04 1.18712E05 5.75467E04 1.83464E05 3.23087E04 1.67000E05 3.98345E04 1.37499E04 1.28465E04 1.02385E04 1.33325E04 9.83621E03 7.46877E03 7.59972E03 1.01479E04 2.46828E04 3.54548E04 2.06198E04 5.82562E03 1.28451E03 1.41860E03 1.60802E03 2.16470E03 3.72886E03 9.31727E03 4.83090E03 8.83402E02 3.55720E02 6.09287E02 2.83977E03 8.09786E03 1.00974E03 1.95211E03 6.43336E03 1.22347E03 8.70805E02 2.81325E03 3.80177E03 3.19858E02 1.27752E02 -Frame 40 3.37886E04 7.69711E04 6.10046E04 1.69058E05 2.27330E04 7.50618E04 1.30984E04 9.01314E03 3.43676E03 7.74023E03 1.39401E04 1.86562E03 2.10839E03 2.23794E03 2.66691E03 1.10704E04 2.56034E04 3.84013E04 5.89082E03 2.48367E03 4.31300E03 2.72811E03 1.29474E03 1.17703E03 7.59707E03 8.80808E03 1.75551E03 6.73044E02 1.40844E03 8.16269E03 3.74672E04 6.34850E04 4.12148E04 2.12068E04 6.11011E03 6.23957E03 1.08214E04 7.73198E03 1.73624E03 6.97972E02 -Frame 40 8.42734E03 1.10083E04 3.70674E04 4.50147E04 1.34622E04 1.35785E04 2.42902E03 1.38651E03 9.48481E02 1.61474E03 2.57609E03 5.48649E02 4.75214E02 1.07302E03 8.63144E02 2.49862E03 5.32867E03 4.05795E03 2.66860E03 9.70269E02 1.78664E03 7.84319E02 5.98837E02 9.57615E02 2.48423E03 2.26384E03 2.09273E03 7.53090E03 1.23887E04 2.24422E04 1.97100E05 1.72217E06 1.34180E06 2.56968E05 2.93435E05 2.28819E05 2.54098E05 1.81766E05 2.58002E04 8.77811E03 -Frame 40 3.00075E03 8.49211E02 5.17352E03 4.13737E03 2.38795E03 5.88207E02 1.94722E02 1.36576E02 6.70711E01 3.44407E02 6.90736E01 1.26035E02 7.73902E02 7.14538E02 8.53748E01 5.66957E02 7.59773E02 4.55780E02 6.32063E02 3.61446E02 3.16527E02 3.48467E02 3.73159E02 6.52985E02 9.36904E02 2.22485E03 7.49771E02 6.27648E03 2.15821E04 6.61564E04 9.46602E04 4.23975E05 4.78252E05 4.43101E05 2.19856E06 2.71656E06 7.22471E05 5.04804E05 2.06326E05 1.46246E05 -Frame 40 4.26950E02 3.58182E02 2.12588E02 2.38126E02 3.27286E02 2.45361E02 3.39892E02 2.79839E02 3.65895E02 4.70457E02 3.26319E02 2.96301E02 8.26389E02 1.15277E03 5.50768E02 1.05561E03 7.47555E02 1.52078E03 2.18172E03 2.82422E03 2.14316E03 1.14671E03 1.68316E03 2.06982E03 2.17319E03 2.54858E03 2.73082E03 1.38350E04 1.38369E04 3.57395E04 1.96322E05 1.94132E05 3.82552E05 8.09605E05 4.36841E06 5.03551E06 1.08543E06 1.34674E06 1.15763E06 8.40099E05 -Frame 40 1.55561E02 1.34926E02 3.66385E02 4.30136E02 1.95152E02 9.94854E01 3.69958E02 1.04794E02 3.65635E02 1.59888E02 1.32077E02 1.69879E02 5.42430E02 1.25497E03 2.61423E02 3.17075E02 2.54607E02 7.25344E02 3.67925E03 1.92799E03 7.51407E02 8.47247E02 1.75362E03 1.42358E03 3.91876E03 6.25215E03 1.50249E03 6.07742E03 1.26132E04 5.57283E04 1.45611E05 2.32459E05 6.18389E05 1.28633E06 5.00518E06 7.76526E06 1.15202E07 3.05577E06 9.12160E05 2.03990E06 -Frame 40 2.19581E02 9.65147E01 2.00690E02 4.99766E02 1.13378E02 1.15697E02 8.44136E01 1.00779E02 3.53206E02 1.20724E02 1.52779E02 4.26917E02 5.64590E02 6.41987E02 9.42928E02 6.82059E02 8.98745E02 2.09032E03 1.49154E03 6.19688E03 7.67291E03 2.37590E03 3.12309E03 2.94484E03 2.46005E03 2.52958E03 2.92457E03 4.37677E03 1.71890E04 7.19898E04 3.16419E05 2.86880E05 3.32183E05 3.14236E06 6.92563E06 6.52229E06 1.08143E07 9.75020E06 3.30379E06 2.39265E06 -Frame 40 8.09766E01 2.02403E01 5.25375E01 8.91399E01 4.67960E01 1.70378E02 1.45668E02 3.47224E02 4.49912E02 2.13164E02 3.20351E02 1.43272E03 1.59147E03 1.39380E03 3.66776E02 3.18231E02 8.97048E02 1.13565E03 1.05959E03 4.64145E03 6.93842E03 2.94928E03 1.45859E03 3.38616E03 3.30455E03 3.76817E03 5.80547E03 6.98215E03 2.49381E04 3.19292E04 8.65707E04 2.58174E05 8.11613E05 2.63572E06 2.93415E06 6.46580E06 1.80751E07 1.15757E07 6.00116E06 2.03272E06 -Frame 40 1.27208E02 9.84976E01 1.46515E02 2.36475E01 9.23211E01 2.27099E02 2.71586E02 1.89268E02 2.38047E02 2.90405E02 6.87000E02 7.01518E02 5.14603E02 1.15634E03 7.32949E02 3.28030E02 3.89132E02 1.88022E03 3.46243E03 4.12895E03 1.41482E03 1.99457E03 1.74300E03 5.15086E03 9.06524E03 7.13096E03 6.94142E03 4.55659E03 1.11305E04 3.71102E04 6.12252E04 1.47147E05 9.75613E05 1.11777E06 1.25424E06 1.78293E06 7.60870E06 7.78697E06 6.49487E06 2.75022E06 -Frame 40 1.82903E02 3.43950E02 2.34006E02 1.10171E02 1.81559E02 9.03920E01 1.56155E02 3.14397E02 1.62903E02 9.87572E01 2.65485E02 2.44628E02 2.77335E02 1.20990E03 6.87720E02 9.27907E02 7.51847E02 3.33476E03 4.40443E03 2.48949E03 3.42126E03 3.85605E03 3.24659E03 2.42593E03 4.15032E03 6.89430E03 4.05074E03 2.95512E03 2.20135E04 2.79114E04 3.34629E04 1.71067E05 5.14294E05 1.36838E06 1.66721E06 2.18364E06 2.82705E06 4.30526E06 2.83568E06 2.19880E06 -Frame 40 1.08599E02 1.59615E02 1.52069E02 7.63569E01 1.01656E01 3.87583E01 2.91015E01 1.95311E02 1.19261E02 1.99264E02 5.15548E02 6.13795E02 4.25606E02 3.89947E02 2.15228E02 6.01330E02 8.57159E02 1.16293E03 1.39639E03 1.70354E03 6.23064E03 3.63758E03 3.99096E03 7.26811E03 6.13977E03 7.70033E03 1.97496E03 5.39725E03 2.68536E04 1.76651E04 4.76931E04 8.74663E04 6.40532E05 7.27590E05 2.45168E06 2.64257E06 1.36822E06 7.80092E06 7.17137E06 2.64348E06 -Frame 40 5.39025E01 1.19882E02 2.02781E02 1.00282E02 2.90487E01 1.55830E02 2.14190E02 1.30180E02 3.66335E02 2.47402E02 2.55464E02 3.35963E02 1.20054E03 2.10774E02 4.67750E02 4.79782E02 1.29424E03 3.24822E03 2.83548E03 3.86564E03 4.72103E03 2.72808E03 5.85115E03 3.51337E03 5.65212E03 1.03504E04 6.81339E03 7.48879E03 4.04885E03 1.08156E04 7.47518E04 1.35567E05 4.03349E05 2.00924E05 7.17396E05 7.68398E05 2.16034E06 5.61532E06 1.98395E06 1.50872E06 -Frame 40 1.07276E02 6.28560E02 6.27001E02 4.03985E02 6.37120E02 1.40932E03 2.34382E03 1.30555E03 3.20825E03 4.31632E03 3.13783E03 1.62319E03 4.36953E02 8.80184E02 5.20368E02 3.71639E02 5.54028E02 3.75271E03 1.82507E04 7.47910E03 3.17445E03 4.31909E03 5.75877E03 4.97121E03 1.44152E04 1.98479E04 8.20161E03 6.65000E03 1.13209E04 1.63559E04 1.73168E05 1.50246E05 6.28786E05 1.65439E05 8.23967E05 2.37211E06 1.66601E06 1.22275E06 1.85780E06 1.48983E06 -Frame 40 4.86998E03 4.44305E02 8.86699E02 7.20626E02 1.42463E02 2.68300E03 2.82251E03 7.49867E02 1.66333E03 2.99554E03 3.76976E03 1.72716E03 4.96300E02 4.24747E02 6.82382E02 7.93105E02 4.92648E02 1.42483E03 5.73264E03 4.75289E03 6.62754E03 1.05868E04 5.70447E03 4.94039E03 5.56440E03 9.47010E03 5.85318E03 5.36344E03 1.08966E04 1.61855E04 2.45210E04 1.16148E05 2.99426E05 1.74094E05 3.03007E05 5.68874E05 5.32532E05 2.76400E05 2.24686E05 1.99538E05 -Frame 40 2.97849E04 3.97055E04 4.04617E04 7.24200E04 7.42052E04 1.13087E05 3.45596E04 1.04037E04 1.16086E04 5.11748E03 5.33082E03 1.66183E03 2.71274E03 4.56848E03 3.19918E03 2.77160E03 4.29436E03 1.18902E04 4.63811E04 5.22569E04 1.27343E04 7.97099E03 2.72730E03 2.76695E03 7.35987E03 2.24063E04 3.97663E03 6.06689E03 6.65123E03 1.27513E04 3.09894E04 6.06849E04 5.47719E05 1.68341E05 2.34584E05 2.72681E05 1.04137E05 5.87377E04 4.35789E04 2.87484E04 -Frame 40 6.18825E04 1.56779E05 8.78044E04 2.39974E05 2.16303E05 7.47917E05 1.37251E05 4.07577E04 5.91392E04 1.20751E04 1.74159E04 9.98216E03 3.05479E03 3.26018E03 1.26860E03 3.65439E03 8.19288E03 1.97944E04 7.55080E04 1.01095E05 2.23230E04 1.81417E03 1.66870E03 2.64577E03 3.77585E04 3.81089E04 1.00688E04 8.05830E03 3.56677E03 8.07282E03 4.43615E04 3.97912E04 4.33601E04 4.33066E04 6.16869E04 2.91504E04 9.58113E03 2.85909E04 9.16957E03 3.38120E03 -Frame 40 8.11994E04 2.56456E05 1.39861E05 3.88779E05 3.40652E05 1.95308E06 4.29614E05 7.61943E04 1.42745E05 5.11983E04 4.63466E04 8.21104E03 1.05458E04 6.45223E03 3.36944E03 7.64745E03 2.60031E04 2.20407E04 1.30391E05 1.31795E05 7.58425E04 1.69660E04 2.90835E04 6.17100E04 1.96064E05 1.68164E05 3.48504E04 2.62647E04 2.22660E04 1.35127E04 1.28361E04 3.57278E03 2.31292E03 7.91851E03 1.92229E04 9.16880E03 9.77897E03 2.29409E04 1.23887E04 2.79259E03 -Frame 40 9.57261E04 2.81659E05 1.63837E05 4.37677E05 3.92296E05 2.64951E06 6.61171E05 1.08031E05 1.67903E05 1.08387E05 7.94979E04 3.64328E03 1.51482E04 4.43499E03 5.02137E03 4.55781E03 2.99825E04 5.14710E04 3.07573E05 5.57710E05 1.78641E05 3.72266E04 7.68601E04 1.53079E05 4.73559E05 4.96056E05 5.29823E04 3.56216E04 3.00648E04 2.56917E04 4.92870E03 2.25721E03 2.16608E03 7.70756E03 2.08544E04 5.81560E03 9.05273E03 1.89423E04 1.75742E04 6.40826E03 -Frame 40 9.37971E04 2.69317E05 1.56206E05 3.68096E05 5.17335E05 2.37529E06 4.24817E05 1.69294E05 1.86373E05 1.15949E05 8.07390E04 8.26516E03 2.18364E04 4.52327E03 9.00045E03 6.53233E03 2.96006E04 5.36005E04 2.50514E05 3.14389E05 6.31468E04 3.63263E04 1.75922E04 1.45575E05 5.61529E05 2.35867E05 4.08781E04 3.30526E04 3.02189E04 1.02829E04 1.95635E03 2.08520E03 1.33592E03 2.56882E03 5.96855E03 2.36650E03 3.39551E03 3.57082E03 4.65434E03 3.88975E03 -Frame 40 9.70737E04 2.48884E05 1.54478E05 3.05014E05 6.08269E05 1.84048E06 3.09972E05 1.71291E05 1.82758E05 9.71132E04 5.85438E04 1.93784E04 2.59636E04 7.83933E03 7.81552E03 6.65465E03 4.06951E04 8.46967E04 4.96059E05 3.02044E05 4.59179E04 4.22887E04 3.62906E04 2.23035E04 1.76144E05 7.77629E04 3.54847E04 6.23868E04 3.97490E04 2.29333E03 2.84674E02 7.18194E02 9.54814E02 2.97644E03 6.82759E02 9.08179E02 3.66518E03 1.13805E04 3.40597E03 1.18875E03 -Frame 40 1.14766E05 2.17958E05 1.46196E05 2.47799E05 6.65696E05 1.37649E06 2.25662E05 1.59160E05 1.61117E05 6.67408E04 4.79845E04 3.22915E04 2.57187E04 1.38312E04 1.21502E04 1.45888E04 8.58229E04 2.26149E05 6.57021E05 4.14620E04 4.12853E04 1.35555E05 5.15714E04 1.84999E04 1.40152E04 1.50500E04 1.76038E04 1.75106E04 4.84596E03 2.64791E02 2.25263E02 2.43939E02 1.37132E03 1.91847E03 5.78524E02 9.42489E02 3.31718E03 5.50072E03 1.22113E03 4.43631E02 -Frame 40 1.25093E05 1.90134E05 1.35334E05 1.76978E05 7.15092E05 1.11028E06 2.64016E05 1.59834E05 1.55957E05 5.48459E04 6.09845E04 3.88174E04 2.64279E04 1.60068E04 1.86151E04 5.02551E04 2.51268E05 6.10458E05 5.28029E05 9.42410E04 9.08840E04 1.44513E05 1.24147E04 8.20970E03 1.10587E04 4.79401E03 3.27274E03 5.85277E03 1.58344E03 9.53905E01 1.94312E02 4.06441E02 7.84942E02 4.48249E02 5.82738E02 8.20965E02 1.84198E03 1.34234E03 4.98998E02 3.62963E02 -Frame 40 1.20186E05 1.61062E05 1.23832E05 1.25204E05 7.16980E05 8.34377E05 2.61104E05 1.54994E05 1.41113E05 5.56776E04 7.90028E04 4.28280E04 2.89085E04 2.51180E04 2.99682E04 1.39115E05 6.40045E05 8.29806E05 1.96936E05 1.65090E05 8.47856E04 4.70634E04 8.13508E03 7.86143E03 1.98504E04 1.43756E04 3.16675E02 8.52869E02 8.40073E02 1.33506E02 7.48954E01 2.41551E02 3.62560E02 3.45112E02 1.06868E03 7.52271E02 3.12507E03 2.99548E03 2.99715E02 2.77797E02 -Frame 40 1.24639E05 1.42029E05 1.12985E05 9.26112E04 7.11278E05 6.99106E05 2.88323E05 1.55450E05 1.25876E05 5.67580E04 1.07920E05 4.56990E04 3.55812E04 3.39924E04 4.75084E04 3.57560E05 1.08284E06 8.01494E05 1.79360E05 3.17226E05 1.79699E05 6.03832E04 8.47547E03 7.30984E03 2.17540E04 1.49297E04 5.49007E02 1.00444E02 8.49797E01 1.30628E02 8.36232E01 1.98503E02 5.28918E02 3.08063E02 4.64075E02 4.45902E02 1.77589E03 1.85459E03 5.27342E02 2.02535E02 -Frame 40 1.31950E05 1.30793E05 1.17994E05 8.62758E04 7.01965E05 5.76759E05 3.37373E05 1.62517E05 1.21803E05 6.16110E04 1.22979E05 4.59369E04 3.97983E04 4.47523E04 9.77041E04 7.05255E05 1.04902E06 4.76405E05 1.94829E05 3.10865E05 2.46679E05 4.74928E04 7.66508E03 5.82566E03 1.67947E04 1.44570E04 4.60227E02 1.83467E02 1.58336E02 1.54579E02 5.62800E01 3.54761E02 3.92413E02 6.24946E02 6.30519E02 3.52725E02 8.34486E02 6.87211E02 3.36140E02 2.39683E02 -Frame 40 1.33081E05 1.41894E05 1.16123E05 1.07099E05 6.67507E05 6.64812E05 3.48597E05 1.93086E05 1.46424E05 8.49111E04 1.38075E05 5.80351E04 5.32664E04 6.87465E04 2.05079E05 9.16935E05 7.69306E05 2.55684E05 1.64581E05 3.16785E05 4.19748E05 7.51723E04 1.38733E04 8.55217E03 2.07468E04 1.64096E04 5.82230E02 1.95390E02 1.49984E02 1.31498E02 1.51304E02 3.17195E02 2.69788E02 4.61582E02 4.87518E02 2.94991E02 7.59126E02 9.88961E02 2.45227E02 1.97985E02 -Frame 40 1.38956E05 1.45640E05 1.17016E05 9.64630E04 7.28584E05 6.93963E05 4.57873E05 2.34600E05 1.70229E05 1.24167E05 1.58075E05 8.09011E04 7.51277E04 1.15939E05 3.36820E05 5.93597E05 3.87981E05 1.14047E05 8.17279E04 2.06936E05 3.97834E05 2.36155E05 1.85624E04 8.91783E03 1.63867E04 1.96739E04 1.36888E03 7.13170E01 1.59673E02 6.41373E01 9.23059E01 2.64207E02 4.96170E02 5.73495E02 6.57929E02 2.55151E02 8.15081E02 1.13967E03 5.36722E02 2.00133E02 -Frame 40 1.31638E05 1.50725E05 1.19757E05 9.02392E04 7.28089E05 6.37625E05 6.36077E05 2.69184E05 1.79385E05 1.82783E05 1.43492E05 1.10637E05 9.64942E04 1.99211E05 4.48493E05 4.56878E05 2.13111E05 6.24667E04 5.96685E04 7.78999E04 2.07641E05 1.85956E05 1.75242E04 4.54592E03 6.22625E03 2.03767E04 2.02172E03 1.91755E02 3.60110E01 1.07691E02 2.68021E02 2.00750E02 5.11590E02 4.46806E02 3.86168E02 1.70590E02 7.45888E02 1.15321E03 3.95182E02 1.00188E02 -Frame 40 1.37477E05 1.45154E05 1.16904E05 7.91613E04 7.00790E05 5.69791E05 8.42102E05 2.92783E05 1.95095E05 2.05990E05 1.54725E05 1.50558E05 1.24793E05 3.98222E05 4.90270E05 2.02587E05 1.18790E05 3.91865E04 4.11327E04 3.95698E04 1.00307E05 2.14070E05 5.14834E04 9.82088E03 5.59465E03 1.47972E04 6.05694E03 3.56076E02 3.88515E01 6.92451E01 1.89325E02 1.36699E02 4.78993E02 5.79847E02 8.43140E02 3.84592E02 3.59000E02 3.53467E02 2.25332E02 1.01254E02 -Frame 40 1.37053E05 1.47327E05 1.14240E05 7.29400E04 6.82449E05 5.37550E05 8.98821E05 3.12625E05 2.13785E05 2.10643E05 1.97480E05 1.60406E05 2.17298E05 6.73368E05 6.06436E05 9.66390E04 7.53220E04 2.65917E04 2.26125E04 2.85876E04 4.30052E04 1.46488E05 9.45395E04 1.78533E04 5.52959E03 1.13154E04 1.31025E04 6.33878E02 1.15454E02 1.59273E02 1.61648E02 2.72076E02 3.07794E02 4.48487E02 3.03973E02 3.15251E02 4.21622E02 4.63383E02 2.29877E02 1.74452E02 -Frame 40 1.35247E05 1.45429E05 1.11086E05 7.83525E04 7.14178E05 5.97394E05 8.73791E05 3.33988E05 2.32306E05 1.92544E05 2.72689E05 1.95955E05 3.82850E05 8.09496E05 5.78879E05 5.53579E04 4.85562E04 1.64486E04 1.52119E04 1.67226E04 1.95736E04 4.43136E04 8.84207E04 2.81667E04 1.06979E04 5.91671E03 1.65227E04 5.16217E03 2.17844E02 1.34019E02 1.18978E02 3.06077E02 7.79810E02 8.41023E02 3.20031E02 2.01288E02 2.81022E02 3.88707E02 2.66656E02 2.48310E02 -Frame 40 1.33895E05 1.37165E05 1.08180E05 6.88416E04 7.81120E05 6.03891E05 8.77577E05 3.31981E05 2.30509E05 1.79429E05 3.56158E05 2.17403E05 6.61679E05 7.37257E05 2.60761E05 4.37274E04 3.14633E04 1.34721E04 9.35892E03 1.31605E04 1.44487E04 2.25842E04 9.44057E04 6.24722E04 1.67596E04 3.69856E03 1.62954E04 1.57362E04 1.29094E03 1.25491E02 1.07498E02 3.62969E02 1.01677E03 8.08425E02 3.37573E02 2.49887E02 3.55969E02 5.02048E02 1.38104E02 2.68235E02 -Frame 40 1.35054E05 1.30046E05 1.05759E05 6.81869E04 8.06621E05 5.85115E05 8.17940E05 3.10866E05 2.10665E05 1.82600E05 3.89038E05 2.54961E05 9.99230E05 7.65958E05 9.10732E04 3.88086E04 2.74789E04 1.30084E04 9.05786E03 1.07030E04 1.05460E04 1.38078E04 4.58422E04 1.20067E05 3.98683E04 4.40975E03 4.88535E03 2.26021E04 5.07106E03 4.41564E02 3.24545E02 1.06909E03 2.36597E03 1.82943E03 5.34162E02 2.25948E02 5.80044E02 1.02254E03 3.95198E02 5.44422E02 -Frame 40 1.39569E05 1.27276E05 1.08157E05 6.91627E04 8.45283E05 5.67229E05 6.82367E05 2.78849E05 1.97582E05 1.80735E05 3.47313E05 3.28089E05 1.33552E06 8.87251E05 5.35035E04 2.46636E04 1.83595E04 1.12917E04 8.27193E03 8.08567E03 7.97367E03 1.08112E04 2.25964E04 1.47695E05 4.85428E04 6.92891E03 4.49996E03 1.19871E04 1.08344E04 1.16387E03 9.37332E01 1.10114E03 4.35882E03 4.11887E03 6.15483E02 3.24856E02 1.07644E03 1.97676E03 3.03666E02 4.94662E02 -Frame 40 1.42188E05 1.30859E05 1.11600E05 6.53323E04 9.14414E05 5.61657E05 4.84685E05 2.30883E05 1.76028E05 1.69745E05 2.60812E05 4.63552E05 1.30286E06 7.66327E05 5.24290E04 1.45693E04 1.28702E04 8.58763E03 5.52328E03 6.40678E03 5.38317E03 6.44435E03 1.27518E04 9.16323E04 6.90285E04 7.45122E03 4.59153E03 1.00766E04 1.31717E04 2.07986E03 3.12213E02 2.75820E03 6.15903E03 5.02057E03 4.45981E02 2.56743E02 1.16894E03 2.51647E03 2.30449E02 2.69590E02 -Frame 40 1.36058E05 1.30058E05 1.13047E05 7.01080E04 9.27258E05 5.99838E05 2.95951E05 1.74696E05 1.51897E05 1.45259E05 1.80386E05 5.22525E05 9.02332E05 4.76867E05 5.00994E04 1.18784E04 1.22170E04 6.24953E03 4.73210E03 5.44107E03 3.35234E03 3.38449E03 7.24759E03 4.90179E04 9.02064E04 7.08583E03 2.90871E03 5.34649E03 7.21790E03 2.90594E03 1.92669E02 6.90112E02 3.95484E03 1.94829E03 2.06996E02 2.52984E02 1.06300E03 1.90941E03 2.00960E02 6.68118E01 -Frame 40 1.26891E05 1.15867E05 1.15151E05 6.53927E04 9.10474E05 5.32857E05 1.86600E05 1.21722E05 1.09542E05 1.08742E05 1.47476E05 3.31006E05 5.41998E05 2.91606E05 3.04639E04 1.12007E04 9.32634E03 4.92623E03 3.81110E03 4.25198E03 3.32379E03 2.61175E03 3.41726E03 2.45413E04 6.21616E04 1.03624E04 2.82554E03 4.09165E03 5.76272E03 4.77728E03 2.05103E02 7.07882E02 1.75616E03 1.14597E03 4.34458E02 2.04652E02 7.33472E02 1.46601E03 2.07966E02 5.89887E01 -Frame 40 1.22284E05 1.11826E05 1.07920E05 5.76234E04 8.73214E05 4.58878E05 1.10368E05 8.79258E04 7.71207E04 7.48244E04 1.22115E05 2.23123E05 3.71987E05 1.96617E05 2.19728E04 9.26335E03 6.40557E03 4.10971E03 2.80973E03 2.65405E03 2.86352E03 2.66575E03 1.66291E03 1.22997E04 3.95602E04 1.22216E04 3.27564E03 3.72714E03 5.28674E03 7.06577E03 5.60602E02 1.08118E03 2.89889E03 1.44954E03 3.86253E02 1.24761E02 4.30074E02 1.04726E03 2.17361E02 1.20919E02 -Frame 40 1.17429E05 1.02801E05 1.02353E05 5.43149E04 8.04059E05 4.33754E05 6.89148E04 6.86068E04 5.50127E04 4.84550E04 9.11302E04 1.40351E05 3.65481E05 2.16608E05 2.29389E04 7.09350E03 4.76741E03 4.51290E03 2.42489E03 1.50342E03 2.24305E03 1.78422E03 1.56193E03 1.09022E04 4.28453E04 1.27760E04 2.55684E03 3.21843E03 5.17014E03 6.66207E03 5.57521E02 6.76067E02 1.28428E03 8.62900E02 4.42956E02 3.46172E02 3.16150E02 5.62704E02 2.06292E02 1.43777E02 -Frame 40 1.16318E05 9.14507E04 9.09834E04 4.76228E04 7.39444E05 3.70884E05 6.41831E04 6.16818E04 4.34389E04 3.68715E04 7.39485E04 6.47988E04 3.18148E05 3.05137E05 2.57034E04 4.96899E03 5.54404E03 4.47891E03 2.47677E03 1.61404E03 1.27406E03 1.72813E03 2.93551E03 1.44965E04 7.36940E04 1.68094E04 3.97188E03 2.79943E03 4.72612E03 3.84517E03 1.07289E03 3.03502E02 6.39048E02 4.10010E02 2.34048E02 1.63391E02 2.34006E02 2.43316E02 2.06431E02 1.41710E02 -Frame 40 1.19149E05 8.39771E04 7.98311E04 4.10966E04 6.81472E05 2.85512E05 7.21862E04 5.33041E04 3.57746E04 2.98258E04 4.55330E04 3.00278E04 1.31113E05 2.03392E05 1.05690E05 2.43109E04 9.70009E03 4.92804E03 3.14399E03 2.12422E03 3.27063E03 1.89973E03 4.42320E03 1.93374E04 7.93197E04 1.06002E04 3.36861E03 2.55126E03 3.23296E03 4.04170E03 2.13908E03 2.72649E02 1.07406E03 9.85705E02 3.92497E02 2.36007E02 3.01979E02 4.40672E02 2.43129E02 1.46357E02 -Frame 40 1.20389E05 8.01493E04 6.70531E04 3.94068E04 6.17930E05 2.24830E05 7.60161E04 5.04743E04 2.96602E04 2.28298E04 3.76136E04 2.00847E04 4.02360E04 5.96152E04 1.41709E05 1.05120E05 4.15259E04 1.19094E04 6.70257E03 4.02668E03 4.11390E03 3.50318E03 8.69852E03 2.88152E04 6.34887E04 1.56403E04 6.34312E03 4.47735E03 5.49462E03 9.56554E03 5.08098E03 8.83964E02 2.72673E03 2.77703E03 4.15752E02 3.13041E02 1.67126E03 1.91888E03 2.59885E02 2.44196E02 -Frame 40 1.12720E05 6.69747E04 5.83179E04 4.90692E04 5.22437E05 1.68785E05 6.70607E04 3.65860E04 1.89729E04 2.02574E04 3.41167E04 9.21075E03 1.93817E04 1.55216E04 5.66281E04 7.98343E04 1.28867E05 4.38946E04 1.50019E04 1.00331E04 6.94876E03 3.51101E03 1.01526E04 2.81471E04 3.53950E04 3.66080E04 8.52193E03 4.17491E03 5.22334E03 1.16808E04 1.02532E04 3.43573E03 6.59560E03 2.71455E03 5.30624E02 1.88740E02 2.15934E03 2.78476E03 3.81715E02 4.71959E02 -Frame 40 5.00385E04 2.51451E04 3.21527E04 7.34595E04 2.07482E05 8.40744E04 3.03099E04 8.69892E03 1.13870E04 7.42987E03 9.39220E03 6.29877E03 5.09357E03 8.17587E03 4.77390E03 2.93449E04 1.38777E05 5.83318E04 9.78890E03 6.65702E03 5.43199E03 1.91934E03 2.56313E03 7.37937E03 4.09520E04 2.95769E04 5.05085E03 2.39306E03 7.17188E03 1.06309E04 5.30294E04 1.87491E05 2.39747E05 2.95229E05 3.87882E04 8.45718E04 5.89202E04 2.08217E04 1.40626E04 1.50286E04 -Frame 40 1.11262E04 1.00513E04 1.09010E04 2.40057E04 1.64771E04 7.07128E03 6.97916E03 2.06180E03 9.50427E02 2.02360E03 1.89350E03 1.02483E03 1.33721E03 1.03179E03 2.02169E03 3.69528E03 4.96155E03 4.91646E03 9.22953E02 7.43975E02 4.69023E02 4.84959E02 3.82736E02 1.83755E03 7.04993E03 5.63323E03 2.04265E03 1.37193E03 5.69839E03 9.91736E03 8.76777E04 3.55856E05 5.63526E05 2.92048E05 8.68258E05 2.37176E06 5.94475E05 8.66532E05 5.51188E05 8.31491E04 -Frame 40 1.91391E03 2.43011E03 2.43180E03 2.47841E03 3.15148E02 5.80410E02 5.84416E02 3.15553E02 1.11500E02 1.21210E02 2.05517E02 1.95498E02 1.52197E02 2.86737E02 4.12212E02 5.36127E02 4.43324E02 4.99265E02 2.63860E02 1.03247E03 4.04738E02 2.30620E02 3.56778E02 3.39448E02 4.26792E02 4.09796E02 6.68280E02 4.42163E02 6.40508E03 1.81565E04 3.76264E04 1.02985E05 1.14592E05 2.47421E05 1.16777E06 3.72112E06 8.29667E05 4.90271E05 5.66504E05 3.47387E05 -Frame 40 9.27508E01 2.04050E02 1.57253E02 8.06215E01 3.34316E02 1.42319E02 2.85606E02 1.59532E02 6.69471E01 1.92216E02 6.19739E02 8.65495E02 5.30596E02 6.16924E02 2.49647E02 1.62495E02 2.81580E02 4.04995E02 4.56038E02 6.41087E02 6.63795E02 4.14060E02 5.65681E02 5.53616E02 6.12409E02 3.90336E02 3.39727E02 3.09636E02 7.53596E03 1.85259E04 3.44442E04 1.39777E05 2.99868E05 5.35822E05 1.39513E06 7.34524E06 1.12231E07 2.87942E06 6.77915E05 4.92362E05 -Frame 40 5.40669E01 4.54946E01 6.30564E01 1.15374E02 2.02283E02 1.19243E02 3.26645E02 2.48123E02 2.53335E02 1.54911E02 3.77848E02 3.97863E02 6.31771E02 2.21298E02 8.76574E01 1.36828E02 2.98811E02 8.55619E02 1.35231E03 1.42374E03 1.06564E03 8.64333E02 1.28756E03 7.56249E02 1.91168E03 9.82154E02 1.42993E03 1.78485E03 4.90331E03 1.87686E04 1.36331E05 6.96890E05 8.43357E05 7.39457E05 2.14058E06 1.75702E07 3.15427E07 4.66732E06 1.35141E06 1.18218E06 -Frame 40 5.19728E01 2.83259E01 6.96470E01 7.11382E01 4.95657E01 7.05923E01 5.22316E02 3.95181E02 3.11437E02 1.79117E02 2.19150E02 2.59091E02 2.17175E02 8.25215E01 1.25688E02 2.60661E02 2.09836E02 3.84700E02 1.20638E03 1.07593E03 1.29402E03 3.05312E03 1.42773E03 1.12476E03 2.33569E03 2.48314E03 2.35755E03 2.76186E03 7.06826E03 1.64490E04 7.26577E04 3.85408E05 7.55649E05 7.10991E05 1.72953E06 6.72391E06 1.51741E07 5.41538E06 2.36904E06 1.86178E06 -Frame 40 4.10365E01 5.91029E01 8.21002E01 4.82992E01 1.13465E02 1.16883E02 2.50010E02 5.32600E02 3.05505E02 3.67367E02 2.37565E02 3.52757E02 3.58670E02 5.72343E02 6.04745E02 4.65691E02 3.81689E02 2.67570E02 5.81604E02 7.92185E02 7.30432E02 4.29787E03 3.68068E03 3.07279E03 5.45194E03 3.15322E03 1.83627E03 6.48966E03 1.07107E04 5.10287E04 1.92340E05 8.23179E05 1.17915E06 5.02846E05 2.84150E06 1.12604E07 8.04173E06 3.33141E06 2.53519E06 3.24657E06 -Frame 40 6.54249E01 1.66572E02 1.61579E02 1.30759E02 3.40253E02 3.24067E02 9.55390E02 5.31080E02 2.40819E02 1.07123E02 1.21272E02 9.85178E02 8.59346E02 5.92210E02 5.56889E02 4.60120E02 4.50001E02 1.22337E03 1.72254E03 8.73382E02 1.09330E03 1.49256E03 1.54468E03 6.24805E03 8.06518E03 5.46254E03 2.79696E03 2.87004E03 4.76970E03 5.65354E04 2.03870E05 3.59018E05 4.35293E05 5.95927E05 6.68251E06 9.81884E06 3.88066E06 2.54471E06 3.95662E06 3.23744E06 -Frame 40 4.01330E01 1.32189E02 8.65080E01 4.34091E01 1.39045E02 1.19232E02 2.43165E02 2.43147E02 7.27751E01 2.33096E02 5.73434E02 1.82310E02 3.85903E02 5.10324E02 1.18948E02 4.06870E02 3.94039E02 2.91829E03 4.95335E03 1.55089E03 2.94176E03 8.68646E03 2.39866E03 7.28749E03 8.09121E03 2.15687E03 4.25260E03 2.85552E03 1.56986E04 7.79208E04 1.07649E05 3.25660E05 5.91231E05 1.42936E06 3.82961E06 6.40968E06 2.53643E06 1.49933E06 3.23630E06 2.05346E06 -Frame 40 7.47818E02 5.82509E02 1.62439E03 2.59400E03 3.02566E03 4.66148E02 4.04293E02 4.84202E02 2.18254E02 4.57953E02 5.64762E02 2.10871E02 2.59795E02 3.94117E02 2.36170E02 2.02530E02 2.85530E02 1.76930E03 5.89942E03 4.19841E03 1.20497E03 3.23568E03 1.03987E03 5.69097E03 1.53830E04 6.05568E03 2.99134E03 3.42954E03 7.95745E03 1.83076E04 5.63560E04 6.05043E05 1.46463E06 6.37081E05 1.35402E06 1.39310E06 1.54404E06 8.31474E05 3.09098E05 3.74421E05 -Frame 40 1.10033E04 1.94969E04 1.42020E04 5.01138E04 2.39234E04 2.82947E04 1.60743E04 8.45405E03 3.62989E03 2.48186E03 3.70898E03 3.21818E03 1.88809E03 2.12770E03 1.63064E03 2.16382E03 3.96895E03 1.14002E04 1.24298E04 6.12128E03 2.58665E03 4.63542E03 4.14486E03 7.25641E03 1.97811E04 1.01485E04 1.26936E03 1.89722E03 2.80495E03 1.68866E04 6.58551E04 4.31484E05 7.23542E05 6.20146E04 1.50450E05 3.09381E05 2.02575E05 9.91300E04 3.36734E04 2.39220E04 -Frame 40 4.94356E04 2.13280E04 4.44275E04 6.13236E04 1.97805E05 7.35461E04 5.36191E04 2.90272E04 1.68655E04 6.95934E03 9.33899E03 5.41455E03 3.63199E03 2.77982E03 2.30687E03 2.43667E03 5.81499E03 2.06650E04 3.29790E04 1.57389E04 3.69149E03 3.41336E03 3.79384E03 6.69884E03 2.63324E04 9.43381E03 1.91157E03 1.41655E03 2.45938E03 6.95863E03 1.62764E04 7.33380E04 2.54968E04 1.81262E04 2.12827E04 1.44130E04 1.66677E04 1.69464E04 8.34679E03 4.69151E03 -Frame 40 9.25816E04 6.57867E04 8.74736E04 5.33898E04 4.74427E05 2.71283E05 1.70251E05 4.48082E04 4.30148E04 3.88884E04 1.10169E04 9.16429E03 5.93786E03 4.18888E03 3.84481E03 3.81229E03 9.79774E03 2.74822E04 3.76842E04 1.68871E04 4.55895E03 1.10324E03 5.24188E03 2.83377E04 1.55411E05 2.39352E04 5.19615E03 3.18888E03 5.42365E03 1.20697E04 1.08595E04 2.37477E03 4.59540E03 1.12783E04 4.17556E03 7.93566E03 1.68613E04 2.34039E04 7.24839E03 1.10890E03 -Frame 40 1.23903E05 6.77781E04 1.17227E05 6.94861E04 5.79644E05 3.26461E05 4.09687E05 5.17995E04 7.27031E04 5.72448E04 2.40403E04 8.22811E03 9.99070E03 5.30631E03 4.97662E03 4.43746E03 1.63187E04 6.91112E04 1.33101E05 4.33243E04 2.03102E04 4.65523E03 1.05342E04 8.05048E04 2.39403E05 1.94071E04 1.16198E04 1.24502E04 2.59581E04 2.11068E04 3.34231E03 1.67116E03 4.76937E03 8.47107E03 3.31265E03 5.64287E03 1.20244E04 2.57559E04 7.84350E03 2.24018E03 -Frame 40 1.21053E05 5.13868E04 9.82608E04 8.95933E04 4.19162E05 4.05946E05 5.33011E05 4.78625E04 1.10086E05 5.75768E04 3.84487E04 9.28330E03 1.51209E04 4.89265E03 7.00255E03 7.28995E03 4.08671E04 8.48937E04 2.83193E05 9.42198E04 7.45347E04 4.86233E04 1.13999E04 3.34382E04 1.31839E05 2.51773E04 2.13358E04 4.59716E04 2.42238E04 5.45116E03 6.66320E02 1.22265E03 3.25903E03 5.39008E03 1.96339E03 4.65001E03 9.12135E03 1.12053E04 2.48206E03 1.93612E03 -Frame 40 1.15621E05 4.84566E04 8.57742E04 9.32206E04 3.94269E05 4.57946E05 5.37533E05 5.09823E04 1.21635E05 6.09064E04 3.56854E04 1.63570E04 2.24781E04 3.73444E03 9.12050E03 1.19457E04 8.56202E04 1.32539E05 3.20708E05 9.43350E04 8.74069E04 9.98302E04 1.76588E04 7.51133E03 2.86060E04 1.70119E04 1.90204E04 4.01470E04 9.10712E03 1.17561E03 1.40826E02 9.24438E02 3.74451E03 2.50605E03 7.23006E02 2.23638E03 4.47934E03 8.48840E03 1.37876E03 1.97906E03 -Frame 40 1.19879E05 5.38155E04 7.65411E04 9.51807E04 4.01133E05 4.27007E05 5.43552E05 7.26384E04 1.27995E05 6.26254E04 3.20701E04 3.21203E04 2.27558E04 8.29464E03 1.26713E04 4.57428E04 1.72526E05 1.80843E05 1.80679E05 5.07276E04 7.31014E04 8.48189E04 1.16532E04 7.22577E03 9.99015E03 8.72882E03 3.08541E03 2.98836E03 2.34604E03 2.97192E02 1.66841E02 9.61550E02 4.53688E03 1.19298E03 3.64490E02 1.20170E03 3.07208E03 4.05551E03 9.98726E02 1.20569E03 -Frame 40 1.27604E05 4.95949E04 7.92604E04 9.15646E04 4.28871E05 4.41653E05 5.91920E05 1.00970E05 1.35367E05 6.61107E04 3.74980E04 4.27588E04 2.48190E04 1.51630E04 2.49743E04 1.74885E05 4.86234E05 1.51795E05 9.61370E04 4.72049E04 3.94462E04 1.89296E04 2.52219E03 1.45219E03 4.33338E03 5.09700E03 6.05445E02 4.12491E02 3.01715E02 1.52734E02 1.11872E02 4.65286E02 1.87229E03 5.39088E02 2.78368E02 1.58181E03 2.79655E03 3.11674E03 5.75047E02 1.01158E03 -Frame 40 1.26638E05 4.71193E04 7.64951E04 1.04719E05 3.89788E05 4.55643E05 5.63275E05 1.05707E05 1.60410E05 7.64363E04 5.88229E04 4.03341E04 3.19215E04 2.72798E04 5.75893E04 4.29340E05 5.04955E05 1.62542E05 6.39043E04 1.02321E05 7.57193E04 2.03205E04 5.14122E03 3.29588E03 8.26117E03 4.46364E03 2.58906E02 1.87560E02 2.10457E02 3.57547E02 3.23127E02 3.60143E02 7.52385E02 4.57694E02 4.69766E02 8.09007E02 2.87842E03 2.57257E03 8.76568E02 3.04329E02 -Frame 40 1.19658E05 5.20166E04 8.05599E04 1.22843E05 3.65829E05 5.35568E05 5.13095E05 1.00605E05 1.63300E05 8.43983E04 5.11144E04 4.29524E04 3.87827E04 3.90013E04 1.30767E05 5.80790E05 5.50668E05 1.21974E05 7.90089E04 1.78105E05 1.70583E05 1.22842E04 3.54016E03 2.56423E03 9.87842E03 2.87459E03 1.90438E02 1.74211E02 8.78891E01 2.92554E02 2.37137E02 2.30521E02 1.47261E03 6.60268E02 8.73648E02 8.99179E02 1.08568E03 1.41762E03 4.60183E02 1.82493E02 -Frame 40 1.18260E05 5.14082E04 8.22690E04 1.30343E05 3.52608E05 5.50015E05 5.04976E05 9.09210E04 1.63645E05 7.18655E04 6.00975E04 4.14540E04 4.35932E04 5.60117E04 1.88418E05 5.21704E05 2.90478E05 6.07528E04 8.57422E04 2.14234E05 1.06041E05 6.48931E03 1.08663E03 7.86755E02 3.51885E03 1.84635E03 1.28763E02 3.11601E02 2.85991E02 3.12503E02 1.15959E02 3.29141E02 8.28825E02 3.84583E02 6.35803E02 1.31375E03 8.76771E02 2.91818E02 5.16168E02 2.85964E02 -Frame 40 1.23197E05 6.00783E04 8.31937E04 1.19776E05 3.65408E05 5.68880E05 5.51816E05 9.16885E04 1.83338E05 9.53978E04 5.51057E04 4.76798E04 5.02728E04 8.70626E04 3.87748E05 4.05044E05 2.34361E05 7.64636E04 7.22358E04 1.35578E05 1.17384E05 9.06357E03 2.14078E03 1.29523E03 3.36686E03 2.00133E03 1.56372E02 1.69939E02 3.77904E01 2.06597E02 1.59602E02 2.46132E02 1.21852E03 4.41209E02 8.57447E02 6.48907E02 4.93806E02 1.83449E02 1.14528E02 3.53834E02 -Frame 40 1.25791E05 5.96517E04 8.58190E04 1.31491E05 3.47618E05 6.49219E05 6.53368E05 1.16032E05 1.94207E05 9.18710E04 7.66597E04 7.75438E04 6.76076E04 1.17065E05 3.85060E05 3.85711E05 1.19912E05 5.63675E04 6.29551E04 1.43368E05 1.06293E05 2.12394E04 4.29963E03 2.05113E03 3.38392E03 1.84582E03 1.93304E02 5.99164E01 4.15453E01 9.57694E01 2.09654E02 1.30960E02 4.00687E02 4.83950E02 7.22541E02 2.95697E02 5.36681E02 2.22563E02 1.98167E02 1.69336E02 -Frame 40 1.24234E05 6.51370E04 9.15573E04 1.24320E05 3.42087E05 7.74579E05 8.15472E05 1.30294E05 2.30993E05 1.27454E05 8.46083E04 8.59351E04 7.71630E04 1.65119E05 4.31649E05 2.63283E05 9.19094E04 3.56975E04 4.17576E04 6.48613E04 1.61966E05 3.56551E04 6.39332E03 2.61516E03 6.87495E03 3.19180E03 2.17575E02 8.59316E01 9.21950E01 1.99293E02 6.41198E01 1.69385E02 7.76786E02 3.72734E02 6.59214E02 5.43632E02 4.56022E02 2.53593E02 1.59297E02 1.51434E02 -Frame 40 1.25562E05 6.24396E04 8.40224E04 1.25192E05 3.55551E05 8.02575E05 8.98129E05 1.72813E05 2.66172E05 1.29100E05 1.01893E05 1.24991E05 1.08560E05 2.75519E05 3.56351E05 1.65213E05 6.77332E04 2.45516E04 2.75734E04 3.66158E04 7.34805E04 1.50145E05 2.23895E04 3.40307E03 3.94260E03 2.89955E03 4.05029E02 3.05204E02 3.26509E02 2.01423E02 1.35023E02 3.22176E02 4.74285E02 1.94302E02 3.59456E02 6.48655E02 6.75564E02 5.26140E02 2.97743E02 2.60441E02 -Frame 40 1.33390E05 6.65707E04 8.60517E04 1.08061E05 3.94659E05 7.69904E05 1.02153E06 2.08996E05 3.07534E05 1.52050E05 1.24617E05 1.57068E05 1.80722E05 4.40767E05 4.52500E05 7.01947E04 4.84906E04 2.38181E04 1.66031E04 1.90470E04 2.25820E04 1.03162E05 4.06187E04 1.00002E04 5.88697E03 7.04391E03 1.34946E03 4.04663E02 3.62208E02 4.28656E02 2.14980E02 1.81991E02 8.57831E02 1.72756E02 2.40694E02 4.34398E02 3.37208E02 2.22391E02 4.23800E02 4.46019E02 -Frame 40 1.35535E05 6.57531E04 8.98124E04 9.70757E04 4.24987E05 7.83143E05 1.12493E06 2.29694E05 3.54736E05 1.61125E05 1.59738E05 2.40610E05 2.67429E05 4.54409E05 3.50161E05 3.35417E04 2.83443E04 1.82978E04 1.19002E04 1.16898E04 7.63410E03 2.48432E04 4.73601E04 4.09887E04 1.42724E04 8.26376E03 8.45587E03 1.59087E03 1.28107E02 7.68357E02 3.72034E02 3.67183E02 2.43674E03 3.95417E02 1.81563E02 5.20119E02 7.05462E02 3.32266E02 4.13645E02 6.36708E02 -Frame 40 1.27278E05 6.29012E04 9.25016E04 9.59098E04 4.25010E05 8.40282E05 1.13805E06 2.09378E05 3.74862E05 1.71292E05 1.68641E05 3.04758E05 4.15745E05 5.54313E05 1.25389E05 2.08958E04 1.48266E04 1.07250E04 5.33321E03 3.95925E03 3.72592E03 6.12740E03 1.64873E04 2.45401E04 9.03423E03 1.35942E03 2.69830E03 2.27097E03 1.10513E03 1.11272E03 4.67147E02 4.61918E02 3.28456E03 1.84412E03 1.79839E02 6.01837E02 5.05922E02 2.78138E02 2.26952E02 4.02728E02 -Frame 40 1.18030E05 4.97696E04 8.91517E04 1.09266E05 3.79625E05 9.40247E05 9.63452E05 1.97248E05 3.23277E05 1.77405E05 1.97918E05 2.95400E05 5.26743E05 5.70953E05 4.39815E04 1.31943E04 8.54983E03 6.24826E03 2.64459E03 1.99935E03 1.49919E03 2.02759E03 5.04151E03 1.52358E04 1.20891E04 1.59565E03 1.00829E03 2.24397E03 2.84171E03 1.01309E03 7.86172E02 9.27633E02 2.86822E03 2.74330E03 2.68707E02 4.04813E02 4.40251E02 3.56144E02 3.38239E02 1.55862E02 -Frame 40 1.13475E05 4.12674E04 9.17165E04 1.03953E05 3.73642E05 9.98383E05 9.62365E05 1.56894E05 2.84425E05 1.85584E05 2.03939E05 3.52084E05 6.52011E05 3.67096E05 2.80447E04 6.40166E03 6.53490E03 3.24861E03 1.87075E03 1.40069E03 1.13760E03 1.19046E03 2.53304E03 1.01419E04 2.28749E04 3.42087E03 1.29380E03 1.66567E03 4.82251E03 3.26532E03 5.87377E02 6.07394E02 4.39445E03 5.32858E03 4.26355E02 2.05233E02 4.48002E02 7.92209E02 3.36814E02 1.66543E02 -Frame 40 1.00410E05 2.80837E04 7.35262E04 1.74040E05 2.60802E05 1.18224E06 6.34584E05 1.71190E05 2.07591E05 1.50364E05 2.48814E05 4.26878E05 4.80841E05 1.21800E05 1.63143E04 3.97894E03 4.26659E03 1.46218E03 1.25304E03 1.38745E03 7.36038E02 8.14808E02 1.65051E03 6.62295E03 2.60272E04 4.04050E03 8.01858E02 8.72861E02 8.05573E03 9.61367E03 1.53268E02 2.08473E02 1.53626E03 2.17597E03 4.81872E02 1.37152E02 5.64308E02 8.49056E02 3.36440E02 2.60824E02 -Frame 40 9.17355E04 2.81078E04 7.00247E04 2.05997E05 2.75216E05 1.17150E06 4.94474E05 1.51350E05 1.64824E05 1.46980E05 2.84014E05 6.32935E05 2.52958E05 4.48011E04 5.56369E03 2.77014E03 1.65303E03 1.04293E03 9.55663E02 8.94770E02 2.67030E02 3.52653E02 5.51708E02 1.85360E03 1.31454E04 3.37595E03 4.83326E02 4.38393E02 3.53771E03 5.52506E03 2.03202E02 1.82596E02 6.44266E02 7.89970E02 1.61683E02 1.07684E02 6.17820E02 5.56414E02 4.28972E02 1.73525E02 -Frame 40 8.69800E04 3.00027E04 7.13444E04 2.45375E05 3.30231E05 1.05743E06 3.94446E05 1.45977E05 1.62730E05 1.90567E05 6.62147E05 9.13785E05 1.58371E05 1.73022E04 2.63634E03 2.64873E03 1.58589E03 9.76447E02 4.86268E02 3.65366E02 2.70515E02 2.44551E02 3.85630E02 1.09291E03 6.31686E03 4.39766E03 7.62525E02 5.98741E02 3.33659E03 4.41224E03 2.49481E02 2.79891E02 1.03140E03 7.40635E02 2.93306E02 2.49312E02 8.87624E02 6.68650E02 4.76727E02 3.97355E02 -Frame 40 8.36260E04 3.34469E04 7.73452E04 2.72019E05 3.69534E05 9.37372E05 3.22378E05 1.38090E05 1.54458E05 3.58559E05 9.29469E05 4.05322E05 5.44692E04 6.99012E03 3.48106E03 1.69350E03 1.01666E03 1.08804E03 2.91516E02 4.42628E02 3.73397E02 6.35263E02 4.03143E02 5.80809E02 3.70175E03 3.88165E03 1.49605E03 1.24311E03 3.61497E03 4.89929E03 4.68315E02 5.24830E02 1.44419E03 4.02508E02 2.71991E02 2.58824E02 9.36744E02 3.87306E02 2.53303E02 2.55806E02 -Frame 40 8.52395E04 4.27414E04 8.12567E04 2.77776E05 3.54278E05 7.96758E05 2.94302E05 1.39066E05 1.72109E05 5.25359E05 1.15216E06 8.02047E04 2.60416E04 5.71086E03 1.36282E03 8.74898E02 1.29760E03 5.09179E02 2.53122E02 2.22652E02 3.69438E02 4.51767E02 5.87216E02 8.00762E02 5.54579E03 7.45406E03 1.89730E03 1.00352E03 3.68974E03 3.72099E03 2.67402E02 2.77270E02 1.29514E03 3.15554E02 2.42143E02 1.46583E02 4.95842E02 3.83230E02 1.55589E02 1.87251E02 -Frame 40 8.19111E04 4.62156E04 7.53213E04 2.94045E05 2.84815E05 5.98614E05 1.75347E05 1.20875E05 2.08026E05 5.17368E05 7.47340E05 2.03107E04 9.25004E03 3.16660E03 9.31033E02 1.05458E03 6.99090E02 5.09205E02 8.25416E01 6.22631E01 1.90410E02 3.08194E02 2.12372E02 3.36928E02 2.76180E03 4.43003E03 1.48488E03 1.04598E03 4.81130E03 3.37337E03 1.74490E02 2.33907E02 7.75728E02 3.05923E02 2.75386E02 2.30890E02 3.75043E02 1.96160E02 7.56582E01 1.04800E02 -Frame 40 6.19814E04 3.74630E04 6.22582E04 2.76463E05 1.70285E05 4.06131E05 9.84193E04 8.55305E04 1.84645E05 2.84877E05 3.09885E05 4.77444E03 1.63605E03 8.90767E02 3.47420E02 2.29102E02 1.58736E02 1.49092E02 5.91857E01 2.12094E02 2.19553E02 9.28613E01 1.50102E02 2.48272E02 9.26295E02 3.19218E03 4.86232E02 2.92454E02 2.92166E03 1.57701E03 1.46884E02 2.61417E02 4.49712E02 2.50501E02 2.24440E02 1.36405E02 2.36146E02 1.51513E02 1.35137E02 2.01924E02 -Frame 40 5.77554E04 3.24102E04 5.84277E04 3.02168E05 1.00086E05 2.15309E05 4.98673E04 6.04083E04 1.46225E05 1.62496E05 8.16514E04 1.71563E03 9.03732E02 2.36309E02 3.65745E02 1.73889E02 4.96070E02 8.06581E01 9.87760E01 1.19352E02 1.29416E02 1.79695E02 8.79983E01 1.09025E02 6.51882E02 1.66730E03 4.50853E02 7.08227E02 1.62208E03 8.24146E02 1.26069E02 2.08016E02 2.69745E02 1.40521E02 2.24686E02 1.98231E02 1.01319E02 1.41310E02 1.73689E02 1.32453E02 -Frame 40 4.91018E04 2.34696E04 5.49871E04 3.00933E05 8.16045E04 8.97342E04 4.29317E04 4.49687E04 1.20914E05 7.39786E04 2.87357E04 4.65761E02 4.71579E02 3.93989E02 3.00173E02 9.87946E01 3.23838E02 1.12078E02 7.19242E01 6.67023E01 1.29608E02 2.00961E02 9.25101E01 9.13690E01 1.16013E02 7.11517E02 3.48146E02 5.28173E02 1.36605E03 4.68763E02 1.25806E02 1.42804E02 3.20641E02 7.89545E01 1.44269E02 2.05694E02 1.22198E02 2.73254E02 2.20088E02 2.30813E02 -Frame 40 4.04948E04 1.69529E04 6.30072E04 2.32897E05 7.58346E04 6.24473E04 2.36053E04 2.92439E04 8.63812E04 3.82739E04 1.34132E04 4.06402E02 3.71641E02 2.43079E02 2.18416E02 8.22125E01 6.00182E01 9.89149E01 7.01356E01 5.11093E01 7.28693E01 2.73827E02 1.59570E02 1.82723E02 1.37573E02 5.01830E02 3.53948E02 3.56292E02 9.27293E02 3.96998E02 1.63037E02 1.89729E02 2.14160E02 2.03122E02 1.58056E02 2.05591E02 2.37539E02 2.36366E02 1.59858E02 1.79553E02 -Frame 40 3.70612E04 1.92500E04 5.85602E04 1.76451E05 7.03696E04 5.69328E04 1.90297E04 1.80389E04 5.93634E04 2.42208E04 2.45147E03 5.20000E02 4.25053E02 9.48285E01 1.09735E02 1.49000E02 1.23774E02 7.52232E01 9.81401E01 7.65665E01 7.47398E01 2.42867E02 6.59818E01 7.22337E01 3.25618E02 4.87904E02 3.52556E02 4.22352E02 1.25541E03 3.82513E02 1.90389E02 3.38149E02 3.27741E02 2.03430E02 2.42149E02 1.22828E02 2.18222E02 2.11406E02 5.47125E01 1.46462E02 -Frame 40 3.80548E04 2.04187E04 5.00415E04 1.55269E05 7.42659E04 7.05006E04 2.64470E04 1.18891E04 4.29031E04 2.42109E04 7.33516E03 2.07646E03 5.86837E02 2.96479E02 1.19510E02 1.08487E02 2.98206E01 3.90396E01 6.57331E01 2.54475E02 2.15308E02 1.54648E02 5.90107E01 5.78529E01 1.72249E02 3.68006E02 2.00555E02 4.75934E02 1.06437E03 2.88178E02 9.04128E01 3.98170E02 6.78543E02 1.25334E02 1.79687E02 9.93977E01 1.22295E02 1.46107E02 9.03051E01 1.09097E02 -Frame 40 3.91949E04 2.06592E04 4.33908E04 1.63558E05 1.06075E05 1.10638E05 3.34099E04 1.82658E04 4.95369E04 3.57536E04 4.98810E03 1.13883E03 1.03114E03 3.05840E02 2.26299E02 3.11089E02 8.25278E01 1.65237E02 1.67934E02 1.47849E02 1.13313E02 1.44450E02 1.19006E02 8.12123E01 1.63871E02 1.41416E02 1.14893E02 3.11165E02 4.73271E02 1.08239E02 2.28742E02 2.43761E02 1.85110E02 1.55554E02 1.50939E02 8.22655E01 2.21004E02 1.89640E02 1.61341E02 1.13849E02 -Frame 40 4.70078E04 2.24034E04 3.93511E04 1.79390E05 1.27763E05 2.45926E05 6.00623E04 4.71766E04 7.60819E04 1.02409E05 5.12402E04 2.94331E03 2.13510E03 1.31464E03 8.36991E02 2.23949E02 3.14753E02 4.80855E02 2.34166E02 2.32892E02 7.75192E01 8.75678E01 6.96774E01 7.56719E01 3.04909E02 4.26117E02 1.77819E02 1.97561E02 4.36199E02 1.39027E02 1.22535E02 3.03694E02 6.49679E02 1.34112E02 1.90854E02 2.18564E02 4.06139E02 4.92305E02 1.75885E02 1.22260E02 -Frame 40 3.92484E04 1.41166E04 3.01314E04 1.33254E05 1.54064E05 4.77326E05 8.47609E04 1.33677E05 1.57695E05 2.64357E05 2.02117E05 1.75468E04 4.73469E03 1.61065E03 7.00764E02 7.13972E02 5.70103E02 3.94997E02 2.46120E02 3.37292E02 7.52156E01 1.88828E02 1.28430E02 1.35171E02 5.20910E02 1.31115E03 5.29642E02 6.12025E02 2.50036E03 5.58669E02 9.46230E01 4.34658E02 5.28654E02 1.67614E02 2.75914E02 3.97151E02 2.34269E02 3.52988E02 1.64687E02 1.07793E02 -Frame 40 3.47420E04 1.10672E04 2.40051E04 6.20955E04 1.89099E05 3.82672E05 5.05807E05 2.03999E05 2.38413E05 5.23996E05 6.00128E05 2.02115E05 9.80246E03 6.03650E03 8.49312E02 1.20644E03 7.18796E02 7.58966E02 3.29980E02 5.38203E02 2.82432E02 1.79543E02 2.03622E02 4.00142E02 1.99324E03 1.69161E03 3.31665E02 1.85418E03 1.19063E04 3.52333E03 3.60810E02 1.51937E03 5.77024E03 1.63337E03 1.00223E03 3.30590E02 7.83029E02 2.09281E03 7.01821E02 2.29318E02 -Frame 40 3.35728E04 1.32469E04 2.50713E04 4.83867E04 1.15553E05 2.10934E05 8.54252E05 8.55843E05 3.63837E05 6.50672E05 2.31329E06 9.94837E05 4.66334E04 1.00873E04 1.58470E03 1.25445E03 1.02864E03 8.85595E02 6.53353E02 4.99643E02 6.75224E02 7.17477E02 2.38843E02 6.20080E02 1.77871E03 6.77390E02 2.42625E02 1.49125E03 2.19766E04 8.25840E03 3.15413E02 9.71842E02 2.82300E03 4.93102E02 4.63095E02 1.26974E02 4.72852E02 2.23513E03 4.44117E02 1.19308E02 -Frame 40 3.30874E04 1.38867E04 2.45203E04 4.59640E04 7.80914E04 1.44178E05 3.41042E05 7.34141E05 5.27250E05 5.90300E05 2.27572E06 1.10386E06 2.38101E05 2.25756E04 4.25115E03 2.38113E03 2.01683E03 1.82273E03 1.10404E03 7.15812E02 1.11649E03 1.13622E03 4.75756E02 6.71614E02 1.58976E03 3.98488E02 1.28249E03 1.68635E03 5.49189E03 6.33774E03 4.90920E02 2.53935E02 1.66408E02 1.99773E02 2.38720E02 5.81599E01 3.92302E02 2.31999E03 4.85663E02 8.00347E01 -Frame 40 3.02779E04 8.67386E03 1.71616E04 3.31362E04 4.09720E04 5.97525E04 1.33988E05 6.21336E05 3.37987E05 6.87815E05 9.02396E05 1.52582E06 4.85320E05 1.80723E04 6.25343E03 1.69027E03 1.37055E03 1.13651E03 1.16710E03 1.05783E03 1.21420E03 7.83573E02 1.53895E02 4.53155E02 4.65791E02 5.40015E01 9.64241E02 5.99677E02 1.40849E03 1.95416E03 1.70400E02 1.28666E02 2.75991E02 3.71205E02 2.41701E02 1.22016E02 3.52935E02 4.06328E03 9.91715E02 1.03054E02 -Frame 40 2.82534E04 5.44326E03 1.32298E04 2.47109E04 2.74757E04 3.42825E04 8.47851E04 4.93002E05 2.25660E05 4.57196E05 5.97769E05 1.17682E06 4.60494E05 4.03749E04 6.55091E03 1.93546E03 1.65464E03 8.01036E02 7.42363E02 5.17450E02 5.78430E02 6.32585E02 1.32727E02 2.23920E02 3.45544E02 1.60913E02 9.16491E02 8.61556E02 1.44945E03 1.33029E03 1.78288E02 2.15361E02 2.64118E02 1.78765E02 1.83413E02 2.36810E02 4.10243E02 3.75397E03 8.34506E02 1.08147E02 -Frame 40 2.56434E04 4.46629E03 1.01065E04 1.54887E04 2.47086E04 2.45637E04 8.86741E04 4.18515E05 2.20424E05 3.27519E05 3.43327E05 6.66192E05 9.91596E05 6.46736E04 6.21857E03 2.43039E03 1.83088E03 1.29214E03 4.77727E02 6.05486E02 3.62532E02 3.99786E02 2.26434E02 3.45897E02 4.08883E02 1.98556E02 2.19924E03 1.15612E03 2.72456E03 7.89741E03 1.81896E02 3.29077E02 3.04803E02 2.35538E02 7.88554E02 6.55291E02 8.26215E02 6.46470E03 1.14302E03 1.56915E02 -Frame 40 2.53406E04 9.11485E03 1.26937E04 1.66453E04 2.58287E04 2.62522E04 1.30700E05 4.41001E05 3.34271E05 3.61841E05 4.02089E05 5.60866E05 1.76167E06 3.78277E05 1.24237E04 3.12581E03 2.82099E03 1.42045E03 8.89315E02 6.27359E02 3.93193E02 6.62169E02 2.23930E02 5.97812E02 6.42489E02 2.10157E02 3.10638E03 1.97345E03 2.27055E03 7.47379E03 4.10990E02 2.92258E02 3.86218E02 3.32912E02 4.39787E02 1.98067E02 1.18176E03 5.34176E03 4.37982E02 1.12771E02 -Frame 40 3.50560E04 1.52614E04 1.98445E04 2.32517E04 3.42885E04 3.70829E04 1.40779E05 3.91366E05 3.87176E05 4.12258E05 3.64042E05 4.00202E05 5.15575E05 5.51220E05 6.94907E04 5.90711E03 3.25021E03 1.98021E03 6.74449E02 2.71349E02 4.02411E02 3.84055E02 9.86267E01 2.53619E02 7.65117E02 4.23883E02 1.93406E03 2.49106E03 2.53794E03 6.81878E03 9.47079E02 2.22372E02 3.12542E02 4.98029E02 4.48958E02 9.88828E01 2.31969E03 5.73819E03 4.97140E02 1.22402E02 -Frame 40 3.27357E04 1.82905E04 2.24298E04 2.27313E04 2.79289E04 2.98250E04 1.49039E05 2.69161E05 3.08961E05 3.24745E05 2.07510E05 2.76598E05 2.16851E05 2.45868E05 2.03059E05 1.49102E04 4.43880E03 3.22459E03 1.30273E03 2.67513E02 9.16703E01 1.57458E02 1.12342E02 3.87768E02 5.70303E02 5.90816E02 1.71260E03 1.83869E03 1.05746E03 3.52488E03 9.60815E02 5.89008E02 4.78284E02 1.89355E03 6.78923E02 4.88634E02 4.48800E03 3.17095E03 1.96802E02 6.76179E01 -Frame 40 1.65434E04 1.51648E04 1.40947E04 9.10605E03 2.32010E04 1.70379E04 9.48532E04 1.56191E05 1.96289E05 1.47674E05 1.39568E05 7.48635E04 6.02687E04 1.50585E05 1.28640E05 1.70745E04 5.35144E03 2.97788E03 1.41730E03 1.01303E03 6.34756E02 3.04344E02 1.76759E02 1.53997E02 3.40540E02 1.63994E02 1.75708E03 1.10775E03 8.04712E02 1.22657E03 6.71866E02 1.32736E03 2.95054E02 2.74146E03 1.52131E03 1.91622E03 9.65962E03 1.76800E03 2.66041E02 7.92772E01 -Frame 40 2.32814E04 1.43192E04 1.30277E04 1.22161E04 1.58580E04 1.86787E04 6.45451E04 2.16165E05 1.88772E05 1.40152E05 1.31232E05 6.90914E04 3.49329E04 5.18819E04 9.11677E04 4.62227E04 1.66248E04 5.00817E03 1.57162E03 1.10144E03 8.89240E02 3.76243E02 9.73846E01 4.51167E01 6.77568E01 1.34366E02 7.17896E02 7.05342E02 6.19897E02 1.58626E03 9.00875E02 5.82994E02 7.43437E02 2.35640E03 2.44241E03 1.86710E03 5.65581E03 6.10392E02 1.37030E02 1.10596E02 -Frame 40 3.02421E04 1.76427E04 1.49054E04 1.65044E04 1.60000E04 2.49098E04 7.03563E04 9.07036E04 1.20449E05 6.35795E04 7.19539E04 4.01621E04 2.72916E04 2.18314E04 4.84358E04 3.62520E04 1.99338E04 3.77959E03 2.00514E03 1.61446E03 7.29179E02 6.18976E02 3.92202E02 2.79336E02 9.76950E02 1.42308E03 1.95880E03 3.95982E03 3.05428E03 1.05425E04 1.28037E04 1.40529E04 2.59335E04 1.79666E04 6.30505E03 1.71320E03 1.19075E03 4.62016E02 5.67715E02 9.78923E02 -Frame 40 4.24091E03 5.07604E03 1.52362E03 1.52558E03 1.35775E03 2.56834E03 4.92161E03 6.39915E03 3.26168E03 2.32489E03 3.95491E03 5.55917E02 1.11007E03 1.14959E03 3.04305E03 2.68435E03 1.00720E03 4.55180E02 6.99105E02 5.26146E02 2.08596E02 3.01498E02 2.77415E02 5.93813E02 1.52971E03 1.41075E03 1.60063E03 2.37428E03 2.93605E03 7.49087E03 1.28873E04 2.16737E04 3.57549E04 1.55529E04 5.13168E03 2.19852E03 9.56726E02 3.60735E02 8.26597E02 9.22774E02 -Frame 40 3.20066E03 3.36042E03 5.67788E02 1.26519E03 7.61175E02 7.79400E02 3.81112E02 2.16835E02 4.77139E02 7.38816E02 5.12900E02 2.84694E02 2.41506E02 5.57911E02 6.72978E02 4.17292E02 3.62566E02 6.32602E01 1.12050E02 1.16018E02 3.56179E02 3.54233E02 2.68758E02 3.22862E02 6.62837E02 8.60151E02 2.39847E02 5.34056E02 5.10140E02 1.08244E03 1.68333E03 2.11184E03 1.12837E03 4.27970E02 8.05318E02 8.81715E02 1.45933E02 1.66803E02 4.60597E02 4.89742E02 -Frame 40 3.37422E03 2.66766E03 4.67993E02 1.22211E03 5.59640E02 4.77550E02 4.06938E02 9.26033E01 1.86527E02 4.42291E02 6.39637E02 2.56630E02 3.11603E02 6.30957E02 5.84227E02 2.33290E02 2.56242E02 1.40219E02 4.17085E01 1.17074E02 3.33402E02 5.59067E02 3.10070E02 1.99418E02 5.84386E02 1.08630E03 1.60343E02 1.25430E02 1.28420E02 1.79270E02 1.34890E02 1.19298E02 2.53701E02 5.82247E02 3.93269E02 1.92923E02 1.78724E02 2.74612E02 5.30840E02 1.31325E02 -Frame 40 2.36416E03 1.93928E03 2.60876E02 3.42715E02 7.03577E02 1.92002E02 2.54202E02 8.54975E01 1.04486E02 1.41720E02 1.77952E02 2.44976E02 2.53134E02 2.19828E02 1.40640E02 2.87361E02 4.32016E02 1.26437E02 1.03883E02 1.62980E02 1.87121E02 8.36145E02 3.60196E02 1.93396E02 2.51626E02 3.73421E02 1.03861E02 1.06649E02 1.71306E02 2.32257E02 1.51790E02 1.14058E02 2.05969E02 5.20098E02 6.46157E02 1.48346E02 1.41853E02 8.89880E01 1.43390E02 6.42797E01 -Frame 40 8.11880E02 1.21766E03 2.52449E02 6.16490E02 5.68359E02 1.09793E02 2.83298E02 8.65564E01 6.59413E01 3.44554E02 5.57076E02 1.16229E02 1.26250E02 7.95920E01 1.26817E02 2.11672E02 1.49288E02 1.33373E02 2.97183E02 1.97218E02 9.08446E01 4.69782E02 1.11437E02 1.08232E02 5.20404E02 8.42870E02 3.23335E02 1.81944E02 6.77106E01 1.13075E02 1.21560E02 1.03452E02 1.14356E02 5.49176E02 4.08186E02 1.98301E02 1.27484E02 5.39396E01 4.21803E01 4.75039E01 -Frame 40 1.21564E03 8.43869E02 1.88374E02 2.26017E02 1.14976E02 2.61763E02 1.44062E02 2.41636E02 9.48016E01 3.26205E01 2.13103E02 2.89707E02 6.79047E01 1.82097E02 1.21573E02 2.06946E02 8.79572E01 7.30783E01 6.74009E01 1.95768E02 6.46966E01 8.21699E01 1.45996E02 1.54468E02 4.15836E02 2.59704E02 1.29207E02 1.45466E02 1.46491E02 1.57404E02 2.45441E02 2.89012E02 2.09753E02 1.19594E02 2.81326E02 2.30159E02 1.08866E02 7.41648E01 8.21226E01 1.10072E02 -Frame 40 7.36043E02 8.83122E02 3.89260E02 4.52527E02 4.62198E02 2.50652E02 3.32959E02 2.03331E02 2.46461E02 2.55493E02 1.14614E02 6.02576E01 1.67378E02 1.33673E02 2.65742E02 3.43839E02 4.91771E02 2.55883E02 3.28541E02 3.88947E02 3.10420E02 6.30809E02 2.48451E02 9.77549E01 8.96467E02 1.21586E03 1.41139E02 8.97212E01 5.19039E01 7.78637E01 1.31362E02 3.48298E02 1.56517E02 2.74979E02 1.53168E02 2.34272E02 1.60326E02 8.78095E01 1.74345E02 8.33723E01 -Frame 40 3.74449E02 9.93047E00 2.86211E01 6.35187E01 2.66744E01 7.22884E01 5.30587E01 5.72544E01 1.89437E02 2.00324E02 1.61703E02 3.17144E01 1.34073E02 1.53061E02 2.23436E02 2.55743E02 5.22668E02 2.45578E02 2.93130E02 1.64160E02 3.60547E02 8.22287E02 2.25304E02 1.69344E02 6.30616E02 7.56006E02 1.02765E02 1.33118E02 1.06581E02 1.35581E02 4.05191E01 1.17762E02 2.26076E02 4.51401E02 2.58706E02 1.72516E02 1.45904E02 1.57938E02 1.16862E02 8.87655E01 -Frame 40 4.14544E02 5.73569E02 8.90153E01 1.03030E02 1.42054E02 8.95049E01 3.38588E01 1.75421E01 6.26489E01 7.77574E01 1.51442E02 6.02959E01 5.96237E01 6.93478E01 1.87986E02 7.62868E01 4.80017E01 6.09459E01 9.58162E01 1.86220E02 2.09336E02 2.13613E02 9.52410E01 2.28647E02 2.71303E02 3.37623E02 6.65760E01 1.29662E02 2.43036E02 1.46589E02 2.99227E01 1.32086E02 1.63640E02 2.72278E02 1.18329E02 3.16281E02 6.23346E01 8.52734E01 9.95145E01 9.26799E01 -Frame 40 1.09410E03 6.04514E02 1.56096E02 3.85196E02 1.96709E02 1.57319E02 1.19442E02 7.38474E01 4.93727E01 1.80189E01 3.56082E01 8.82912E01 1.58151E02 1.56328E02 6.21825E01 9.91497E01 1.14528E02 7.68628E01 7.29648E01 6.65561E01 1.49418E02 4.71756E02 1.43623E02 1.30754E02 7.96951E02 7.00813E02 1.21595E02 1.43577E02 1.39412E02 1.58026E02 1.14608E02 7.56518E01 2.81246E02 2.16913E02 1.40591E02 7.68291E01 7.17064E01 1.80081E02 2.61637E02 1.51840E02 -Frame 40 4.46536E01 9.06054E00 1.15048E02 2.09497E02 4.31677E01 3.24295E01 3.06413E01 1.24659E02 7.95515E01 6.00340E01 1.04353E02 1.71718E02 9.43406E01 1.07465E02 1.47602E02 1.88779E02 2.49018E02 9.26854E01 2.01720E02 7.75255E01 1.31162E02 2.05891E02 7.25474E01 9.29159E01 3.31173E02 4.32767E02 1.74621E02 2.13474E02 8.66464E01 1.78303E02 1.58215E02 2.20260E02 2.14320E02 2.14259E02 1.85102E02 2.10185E02 1.28711E02 2.47247E02 1.85223E02 1.05980E02 -Frame 40 5.34360E01 2.04479E01 6.50131E01 1.93743E01 9.19338E00 1.06958E01 2.46715E01 4.69185E01 1.19381E01 1.80790E01 3.85315E01 6.56279E01 5.14162E01 8.55645E01 4.16848E01 2.84857E01 4.21339E01 7.45334E01 2.32333E02 4.16148E02 1.06111E02 9.13018E01 5.99278E01 7.80844E01 7.56318E01 1.19522E02 1.46832E02 2.37582E02 1.57026E02 1.55063E02 1.54569E02 2.41325E02 1.65795E02 4.06988E02 4.37531E02 1.88266E02 1.24380E02 1.66922E02 8.33548E01 6.32301E01 -Frame 40 1.48105E01 3.59791E01 5.74444E01 2.97213E00 2.82736E01 2.02193E01 3.35636E01 2.23274E01 1.69535E01 3.31898E01 8.73254E01 5.99035E01 3.29176E01 1.79737E02 1.61778E02 1.08669E02 1.78497E02 9.26511E01 1.40051E02 1.13834E02 1.39474E02 2.01693E02 4.50623E01 4.98326E01 8.61190E01 1.25586E02 1.25118E02 1.04373E02 1.24563E02 6.22374E01 8.57597E01 1.88558E02 1.28332E02 2.24426E02 1.59121E02 9.92342E01 1.17680E02 2.04261E02 1.36519E02 9.49055E01 -Frame 40 4.35265E01 4.95220E00 1.76388E01 1.29678E01 8.91210E00 3.70806E01 5.78971E01 8.74110E00 2.22876E00 7.66194E00 1.46276E01 9.98987E00 1.62289E01 3.55492E01 1.25291E02 1.14112E02 5.66440E01 5.14062E01 9.83185E01 1.33374E02 1.17551E02 1.59439E02 4.80406E01 4.07142E01 8.22248E01 2.01119E02 1.00783E02 1.20995E02 8.86865E01 9.33685E01 1.32940E02 6.99900E01 1.29990E02 4.63831E02 4.17670E02 8.45039E01 1.23933E02 1.16178E02 8.34425E01 6.17054E01 -Frame 40 6.28512E00 1.71149E01 6.45554E00 3.65925E00 1.49599E01 1.79482E01 1.31071E01 5.70170E00 7.61756E00 5.66404E00 9.51240E00 7.15121E00 6.07028E01 1.32969E02 6.28418E01 6.85184E01 6.08363E01 4.50666E01 7.18953E01 1.37185E02 7.03312E01 7.51791E01 1.13297E02 1.03149E02 4.73679E01 8.75021E01 1.01729E02 1.26698E02 7.19881E01 8.39386E01 1.07971E02 1.43538E02 1.63702E02 2.88087E02 2.49644E02 6.77627E01 8.47155E01 7.34678E01 1.13145E02 5.58163E01 -Frame 40 2.79211E01 5.10622E01 3.57631E01 9.49390E00 3.07539E01 3.02453E01 5.83704E00 1.99505E01 1.78804E01 3.13869E01 6.91934E01 6.21743E01 7.17425E01 9.01008E01 1.68145E02 9.17737E01 4.94324E01 7.38729E01 1.15397E02 8.39541E01 7.71392E01 1.47206E02 1.25369E02 8.93792E01 8.82579E01 2.61549E02 2.81626E02 1.11080E02 1.17245E02 1.47491E02 1.46348E02 2.26002E02 1.85592E02 1.84897E02 2.23812E02 2.45802E02 7.26716E01 1.93536E02 1.05479E02 7.27934E01 -Frame 40 4.08599E-01 1.60574E01 4.64268E00 3.60456E00 2.79717E01 1.35240E01 1.15454E01 3.38993E01 6.13091E00 4.89519E01 4.70479E01 1.07472E02 7.35339E01 3.57658E01 3.82798E01 3.99948E01 6.33567E01 7.03868E01 1.08427E02 9.46656E01 4.24808E01 9.29675E01 8.63210E01 6.73973E01 4.59344E01 1.12208E02 1.16249E02 1.08188E02 1.25382E02 8.82661E01 6.05518E01 1.37047E02 9.46587E01 3.22842E02 2.04766E02 1.48893E02 1.48389E02 2.26577E02 9.40110E01 7.84933E01 -Frame 40 2.72642E01 1.45378E01 1.12214E01 1.70346E00 7.06687E00 6.86633E00 1.65572E01 2.30680E01 3.73959E01 3.05938E01 3.33560E01 8.22858E01 7.84808E01 7.11758E01 2.47672E01 6.79654E01 1.26826E02 7.11189E01 2.13467E02 1.60937E02 6.81818E01 1.03896E02 7.33440E01 2.29469E02 1.47775E02 4.18222E01 5.68712E01 8.31108E01 1.34170E02 7.71206E01 2.19401E02 9.76093E01 1.63775E02 2.73090E02 2.53863E02 2.10854E02 1.07593E02 1.00053E02 1.46421E02 7.76151E01 -Frame 40 1.25727E02 8.72312E01 7.85361E00 9.31410E00 1.96515E01 8.81019E00 1.96855E01 2.01665E01 4.11823E01 6.04314E01 2.30135E01 2.63915E01 5.76218E01 3.71913E01 2.60057E01 9.18795E01 2.13906E02 4.87755E01 8.77720E01 9.13166E01 1.48978E02 8.50986E01 5.04913E01 4.80048E01 4.21259E01 6.37759E01 5.23492E01 6.19251E01 7.34503E01 7.20826E01 8.84479E01 1.27479E02 1.38118E02 3.06429E02 6.32373E02 1.32819E02 6.87959E01 1.90014E02 2.81216E02 1.39150E02 -Frame 40 1.48741E02 1.78075E01 1.17634E01 6.77228E00 8.03595E00 1.43787E00 1.84025E01 1.09549E01 1.26703E01 4.40520E01 6.53172E00 3.03354E01 8.09984E01 5.01824E01 2.93873E01 4.05932E01 1.63353E02 2.89403E01 8.84745E01 1.29199E02 1.07042E02 6.05474E01 1.21553E02 1.78791E02 7.24977E01 8.61351E01 2.11686E02 7.70462E01 7.15239E01 4.57175E01 3.62369E01 1.11325E02 1.13373E02 1.51132E02 3.69345E02 2.14194E02 1.18975E02 1.71700E02 2.09746E02 6.02004E01 -Frame 40 2.83069E01 5.71393E01 2.94671E01 3.61273E01 2.22031E01 1.64918E01 8.79476E00 4.71774E00 6.82479E00 2.02779E01 3.20060E01 3.56857E01 4.29768E01 4.35314E01 5.45185E01 1.09691E02 1.22511E02 5.53380E01 4.59350E01 6.69919E01 7.43760E01 2.41494E02 1.47414E02 4.72377E01 3.88690E01 4.46375E01 1.25484E02 9.01566E01 4.54116E01 8.41252E01 1.76613E02 8.14940E01 1.27839E02 1.81747E02 3.26897E02 4.20219E02 1.89212E02 1.46017E02 1.00297E02 4.77746E01 -Frame 40 1.55709E01 2.21183E01 5.03597E00 5.83378E00 1.03807E01 2.80534E01 1.09412E01 8.04030E00 1.67926E01 1.48529E01 3.36144E01 3.89314E00 5.04420E01 2.10517E01 4.91619E01 1.03930E02 7.42315E01 2.94835E01 3.13980E01 6.92188E01 7.40510E01 1.23745E02 5.04027E01 6.79006E01 6.53207E01 6.26862E01 8.14364E01 6.82043E01 9.04101E01 6.64052E01 1.34941E02 1.15075E02 1.87816E02 2.29576E02 3.32633E02 1.54974E02 1.34028E02 7.88815E01 1.16643E02 6.66422E01 -Frame 40 9.55636E00 3.49591E00 1.20816E01 2.13431E01 2.79982E01 9.49171E00 1.34767E01 1.19462E01 1.29973E01 5.08345E00 1.66780E01 1.25001E01 4.30156E01 9.42075E01 4.82498E01 1.43366E02 7.29452E01 5.08135E01 6.60225E01 8.74366E01 1.04042E02 7.64433E01 8.05520E01 3.98759E01 4.37165E01 1.38849E02 1.09943E02 3.03495E02 1.03453E02 9.96441E01 6.27700E01 1.73811E02 1.63654E02 2.16084E02 3.92835E02 1.02646E02 7.12275E01 1.32449E02 1.03239E02 7.02810E01 -Frame 40 4.75190E00 4.93460E00 1.45331E00 1.21977E01 1.17890E01 2.29516E01 4.57268E01 1.00654E01 1.02661E01 3.78854E00 1.55493E01 2.08445E01 2.91549E01 4.53374E01 7.25720E01 6.05695E01 3.76128E01 3.18933E01 4.91157E01 1.51081E02 9.14841E01 3.58559E01 2.04171E02 3.31836E01 4.01892E01 7.23537E01 4.01879E02 4.95111E02 1.36633E02 8.17411E01 2.45396E01 6.71762E01 1.53457E02 2.34262E02 2.08679E02 1.52347E02 1.45768E02 2.52745E02 1.28439E02 8.25673E01 -Frame 40 3.66384E01 1.92266E01 7.25326E00 7.05319E00 2.94955E00 1.34712E01 2.15226E01 5.49158E01 2.51130E01 2.06018E01 1.16884E01 1.08887E01 1.64428E01 1.37294E02 1.01807E02 3.33945E01 5.71088E01 3.53476E01 1.11964E02 1.47354E02 3.29352E01 1.42696E02 1.37692E02 8.55564E01 4.13541E01 7.28007E01 1.47931E02 1.64332E02 1.10869E02 6.07973E01 7.77577E01 7.68952E01 5.22342E01 9.54355E01 9.90682E01 9.50901E01 1.11161E02 1.39064E02 5.90346E01 5.78600E01 -Frame 40 6.62786E01 2.36879E01 9.54986E01 1.06047E02 8.70213E01 9.38978E01 8.67483E01 4.78707E01 1.07953E02 4.29942E01 1.30682E02 9.02391E01 2.03830E02 8.56407E01 5.30310E01 7.72595E01 9.13143E01 2.43894E02 2.78070E02 1.79249E02 2.33381E02 3.51117E02 3.57901E02 3.42501E02 4.14047E02 4.36862E02 3.43898E02 3.02031E02 4.93826E02 5.31767E02 4.92701E02 2.06917E03 4.99619E03 5.12412E03 6.51618E03 5.74827E03 2.55083E03 1.04066E03 7.14432E02 5.71305E02 -Frame 40 2.17160E01 9.14028E01 1.21285E02 1.70817E02 1.86057E02 1.14930E02 1.94585E02 7.81854E01 2.20259E02 1.46611E02 1.42765E02 4.79312E02 4.24949E02 2.54981E02 9.92566E01 1.41258E02 2.78228E02 5.61835E02 5.39809E02 3.87983E02 3.36610E02 4.02330E02 8.67710E02 7.71898E02 1.00145E03 1.46464E03 1.48572E03 1.65173E03 3.56625E03 5.58017E03 1.69518E04 4.24324E04 3.23568E04 7.56247E04 2.12092E05 2.70997E05 1.22964E05 4.48528E04 1.38767E04 4.90392E04 -Frame 40 8.05898E01 5.80503E01 1.04358E01 1.84695E01 1.39678E01 1.50019E01 1.24831E01 1.64193E01 1.38561E01 9.03377E00 2.89457E01 4.89167E01 1.56982E02 8.91744E01 1.89084E01 1.44479E01 1.09196E02 4.65243E01 4.94680E01 2.27537E02 9.75282E01 1.55177E02 8.29955E01 8.36564E01 8.64873E01 1.74371E02 2.66474E02 3.40642E02 5.71415E02 1.08583E03 3.50940E03 1.26727E04 6.10591E03 1.55090E04 5.24269E04 7.03486E04 2.75051E04 1.01816E04 3.76714E03 1.31592E04 -Frame 40 9.40000E01 1.45138E02 1.60785E01 9.44996E00 1.57585E01 6.50838E01 1.15788E02 1.44523E01 1.26662E01 1.53939E01 3.16670E01 3.34991E01 9.35092E01 5.36946E01 2.25594E01 2.19873E01 6.05886E01 6.70392E01 1.75003E02 1.51950E02 5.94883E01 4.67188E01 1.51419E02 8.19618E01 3.31779E01 7.64021E01 1.32018E02 1.80744E02 1.15042E02 7.12706E01 1.15820E02 1.20161E02 1.71807E02 5.65110E02 4.40220E02 2.87490E02 2.12221E02 2.15603E02 2.95512E02 3.63929E02 -Frame 40 7.01820E01 1.10569E02 5.27459E01 3.71768E01 2.79786E01 9.01184E01 1.13739E02 1.92434E01 5.76840E01 4.57397E01 8.30991E01 8.23897E01 1.68892E02 5.01329E01 3.01263E01 3.52205E01 1.03158E02 3.37857E01 1.19003E02 2.85414E02 4.96048E01 8.76890E01 1.52227E02 1.42003E02 2.06078E02 7.30060E01 1.17347E02 1.27051E02 7.66286E01 5.83257E01 1.38103E02 1.71405E02 1.45410E02 1.92266E02 2.78304E02 3.26080E02 3.09559E02 3.41330E02 2.39802E02 1.46279E02 -Frame 40 1.34773E01 2.47672E01 1.14236E01 6.50999E00 1.00390E01 1.21484E01 9.67609E00 3.05871E01 1.83230E01 3.34196E01 2.54250E01 3.13769E01 1.26638E02 5.88806E01 2.37287E01 1.07048E01 3.46263E01 6.50493E01 7.63827E01 1.42659E02 8.03343E01 1.22258E02 4.53178E01 7.72312E01 6.65302E01 1.09708E02 1.58437E02 7.97464E01 1.27387E02 9.88289E01 6.61082E01 2.55522E02 2.81679E02 1.60131E02 1.85635E02 2.42593E02 1.11976E02 7.42982E01 6.79072E01 5.94451E01 -Frame 40 3.56848E01 3.04925E01 3.73933E01 5.81554E01 1.38371E01 2.38107E01 1.56695E01 6.58358E01 5.48891E01 1.33108E01 7.12130E00 1.25199E01 1.27996E02 6.90897E01 9.22156E00 3.40140E01 6.53036E01 5.50369E01 8.50191E01 1.24314E02 7.21644E01 1.44277E02 6.65842E01 4.73745E01 6.25092E01 7.10778E01 6.47021E01 1.85908E02 9.46863E01 1.53697E02 5.82078E01 3.02328E02 2.04808E02 9.28072E01 1.69581E02 1.38601E02 1.24620E02 8.13261E01 1.49343E02 9.27179E01 -Signal: SpeechEndSignal -Signal: SpeechStartSignal -Frame 40 7.04329E00 7.53295E00 1.68106E01 1.47579E01 1.36525E01 2.40016E01 2.11091E01 2.15457E01 2.98493E01 2.62346E01 2.68470E01 1.19755E01 8.29643E01 7.85436E01 2.92601E01 1.47192E01 2.35577E01 5.56553E01 8.95958E01 5.99293E01 5.89195E01 1.29946E02 6.63422E01 7.32348E01 8.07516E01 5.00657E01 5.93722E01 5.36251E01 7.86157E01 1.25050E02 1.20189E02 1.20686E02 6.78934E01 1.03467E02 2.52276E02 1.37193E02 1.11203E02 1.00828E02 8.72405E01 8.01003E01 -Frame 40 1.72261E00 4.10876E01 5.09838E01 1.04036E01 5.16249E00 3.56623E01 2.87037E01 1.29436E01 8.68005E00 1.47929E01 6.42959E01 5.07177E01 3.07977E01 2.49922E01 4.11184E01 9.43553E01 1.10188E02 4.25490E01 6.83934E01 7.62266E01 1.05053E02 4.96235E01 4.05007E01 3.12898E01 7.02224E01 4.12980E01 8.10450E01 6.09685E01 9.03507E01 8.80108E01 9.17389E01 1.49904E02 8.48155E01 1.87372E02 4.02457E02 8.81252E01 6.87111E01 1.83754E02 2.25718E02 1.01355E02 -Frame 40 2.36313E01 3.88032E01 1.01771E01 4.68850E00 1.06556E01 2.73481E01 2.20209E01 5.40039E01 3.43511E01 1.95665E01 4.75859E01 3.52585E01 2.76318E01 7.87159E01 9.25148E01 6.76477E01 1.04791E02 1.59970E02 2.94537E01 3.25720E01 4.04835E01 6.24157E01 5.09948E01 5.18615E01 1.04625E02 1.15554E02 7.36424E01 1.30637E02 1.17558E02 1.00886E02 1.04862E02 2.58907E02 8.01185E01 1.01745E02 1.65332E02 1.22227E02 2.34747E02 1.45565E02 1.26150E02 9.81811E01 -Frame 40 9.35405E00 2.81161E01 7.00193E00 3.75049E-01 1.81265E01 1.18734E01 2.42342E00 1.19805E01 1.40339E01 2.07683E01 1.48259E01 1.94438E01 2.33696E01 6.24740E01 7.07432E01 4.29978E01 7.05171E01 3.61419E01 3.72825E01 5.47518E01 6.26713E01 5.69812E01 4.91384E01 3.38826E01 9.88571E01 7.62437E01 4.95192E01 5.34857E01 1.08308E02 1.10357E02 1.65847E02 1.94052E02 1.98945E02 1.17453E02 1.63228E02 1.37776E02 2.13902E02 1.64697E02 1.17620E02 1.28651E02 -Frame 40 3.60833E01 1.14342E02 4.35813E01 9.65398E00 1.68398E00 3.10589E00 4.23321E00 4.02343E01 1.48372E01 1.68762E01 2.31822E01 4.63179E01 4.70211E01 6.26404E01 4.24018E01 2.57419E01 5.16445E01 3.03049E01 3.20810E01 5.25041E01 1.81429E01 7.74931E01 1.53186E02 1.39080E01 3.54804E01 6.03778E01 5.05105E01 1.45337E02 6.72764E01 7.70552E01 8.28794E01 8.00393E01 6.60225E01 9.27868E01 1.91310E02 1.06715E02 1.74090E02 1.59819E02 1.13308E02 5.90309E01 -Frame 40 1.14462E01 2.95562E01 1.59397E01 1.14644E01 6.68347E00 3.11884E00 1.37768E01 2.78992E01 1.25437E01 1.62890E01 1.45322E01 1.43929E01 6.14873E01 3.98057E01 5.51580E01 4.30690E01 2.86995E01 1.75035E01 5.08472E01 1.15535E02 3.60171E01 4.50695E01 1.05153E02 6.01420E01 3.46541E01 2.04599E01 5.92669E01 1.50418E02 5.48155E01 1.06678E02 1.01792E02 1.80104E02 1.16316E02 1.36202E02 3.09851E02 1.65959E02 1.37155E02 1.43440E02 1.08826E02 5.10326E01 -Frame 40 1.02501E03 1.31114E02 1.85480E02 2.06998E02 2.90389E00 4.81710E01 6.39672E01 2.26134E01 1.53662E01 4.60615E00 5.22071E01 7.09427E01 9.36143E01 1.11081E02 8.29987E01 8.09306E01 5.20625E01 2.33847E01 2.08565E01 1.58157E02 9.01900E01 9.03896E01 7.30896E01 7.31068E01 5.14658E01 8.50106E01 1.38741E02 1.28211E02 4.88097E01 1.88085E02 1.09739E02 6.12654E01 9.30064E01 1.99314E02 2.00874E02 1.84333E02 1.03815E02 1.25140E02 2.40664E02 1.13106E02 -Frame 40 9.23386E03 2.14687E03 1.19087E03 2.87413E03 2.11964E03 2.12339E03 1.32183E03 2.91712E02 9.25145E01 1.43404E02 8.16955E01 1.29388E02 2.82836E02 6.99475E02 6.29040E02 5.15598E02 3.00200E02 1.15068E02 1.72534E02 2.08454E02 1.51459E02 4.56763E02 5.77061E02 3.82557E02 2.07167E03 2.74389E03 3.01311E02 2.23297E02 7.54250E01 1.30329E02 1.16154E02 7.43648E01 1.51789E02 1.87185E02 1.21041E02 7.29565E01 1.50272E02 1.42181E02 2.60511E02 1.15226E02 -Frame 40 9.63615E02 1.44984E03 5.17626E02 9.49050E02 2.17097E02 2.36755E02 1.33628E02 6.24629E01 3.41768E01 5.26551E01 8.59766E01 6.42925E01 1.58738E02 2.22948E02 1.85453E02 1.59556E02 1.28259E02 8.83211E01 8.99819E01 1.39592E02 5.44562E01 6.46853E01 8.51903E01 1.42536E02 6.09852E02 9.99782E02 1.05543E02 6.51107E01 7.03410E01 1.32541E02 1.29497E02 1.44849E02 1.23997E02 2.33057E02 3.23828E02 1.36434E02 1.63547E02 2.15957E02 2.23282E02 9.64986E01 -Frame 40 1.88598E03 5.16268E02 7.85097E02 1.10139E03 8.86746E02 2.15449E02 4.46676E02 2.08855E02 1.00909E02 8.74131E01 8.43604E01 3.30720E01 3.26798E02 1.20549E02 7.26408E01 1.04364E02 1.89127E02 4.12872E02 4.10647E02 1.72378E03 1.67299E03 1.03298E03 6.15261E02 6.00816E02 1.04791E03 8.30680E02 6.01967E02 6.21462E02 3.88450E02 4.75597E02 3.40641E02 4.36175E02 1.14308E03 1.49815E03 1.56313E03 2.16622E03 2.39235E03 7.50301E02 4.06443E02 1.98884E02 -Frame 40 2.81180E04 5.29122E04 3.72469E04 5.87563E04 4.10673E04 5.76966E04 1.20969E05 1.55321E05 8.59004E04 3.90541E04 1.70894E04 4.78193E03 1.20051E04 1.37471E04 5.34562E03 3.07419E03 8.07192E03 2.64297E04 7.66291E04 1.78271E05 1.02227E05 1.85206E04 3.42795E04 1.75098E04 7.76201E04 1.24688E05 9.73993E04 3.11362E04 2.47983E04 2.65907E04 1.74770E04 7.22500E03 3.14376E04 2.05855E04 1.11319E04 9.93514E03 8.20656E03 2.07432E03 1.21886E03 1.03498E03 -Frame 40 1.00531E05 1.07657E05 7.04253E04 3.98518E04 1.30227E05 1.23775E05 9.86092E05 5.18856E05 4.39629E05 1.98348E05 1.21566E05 4.76987E04 4.41853E04 3.30766E04 1.75438E04 1.19386E04 1.74235E04 6.88426E04 3.74722E05 7.78358E05 3.31024E05 5.64388E04 4.36003E04 4.30395E04 1.44098E05 4.40155E05 8.93785E04 2.05370E04 1.26934E04 1.49030E04 7.84736E03 2.92451E03 1.40357E04 8.60223E03 8.04218E03 3.75125E03 3.00753E03 3.65214E03 2.99743E03 6.88834E02 -Frame 40 1.24460E05 3.04602E05 1.01933E05 2.22753E05 7.16032E04 2.87016E05 8.24880E05 2.03975E06 1.85209E06 7.09112E05 4.29406E05 2.75409E05 1.54139E05 1.03734E05 7.01814E04 8.28916E04 1.65723E05 4.49952E05 1.58282E06 1.42699E06 4.96729E05 9.16845E04 4.01927E04 6.88188E04 1.88125E05 3.61853E05 1.21047E05 6.62805E04 5.27669E04 5.24901E04 1.54447E04 2.58430E03 2.05694E03 1.79545E04 5.46854E04 1.60426E04 1.44051E04 9.02326E03 4.36860E03 1.22949E03 -Frame 40 1.59322E05 4.14334E05 1.17681E05 2.23300E05 1.11958E05 3.07607E05 8.78930E05 1.90607E06 5.00747E06 1.56389E06 1.09774E06 8.16987E05 3.49481E05 2.91915E05 2.09991E05 2.01249E05 3.15336E05 1.15671E06 3.22278E06 1.99633E06 4.48964E05 2.29559E05 1.79539E05 2.76075E05 2.54957E05 2.92465E05 1.28427E05 8.62272E04 5.60616E04 5.00107E04 1.95503E04 1.77933E03 2.57470E03 3.77113E04 9.74156E04 1.80382E04 2.69219E04 3.70470E04 5.07121E03 1.18306E03 -Frame 40 1.95516E05 5.34558E05 1.35041E05 2.85357E05 8.51565E04 3.63141E05 6.86969E05 2.19582E06 5.74593E06 3.00238E06 2.39050E06 1.13920E06 7.45031E05 4.08345E05 3.39171E05 4.21389E05 1.20071E06 3.92162E06 3.46221E06 1.78356E06 6.70918E05 3.45228E05 1.54478E05 5.59492E05 1.65417E05 1.15298E05 1.75378E05 8.36665E04 5.95395E04 6.53364E04 2.84868E04 2.99037E03 7.38138E03 2.85853E04 8.17613E04 2.53266E04 4.39147E04 5.25428E04 9.78639E03 2.24762E03 -Frame 40 2.46258E05 6.29864E05 1.56372E05 2.49840E05 8.75210E04 3.08948E05 9.83871E05 1.94214E06 5.06392E06 4.70641E06 3.59063E06 1.49444E06 8.03320E05 5.87852E05 3.98938E05 9.26656E05 1.94548E06 8.60753E06 4.32116E06 8.55039E05 4.89774E05 1.82734E05 1.05488E05 3.49430E05 2.02202E05 2.66980E05 3.78341E05 8.00664E04 4.05160E04 6.37581E04 2.59998E04 1.99540E03 2.66004E03 1.90374E04 9.31457E04 5.48764E04 9.45468E04 8.34025E04 7.54922E03 1.98616E03 -Frame 40 2.57729E05 6.59529E05 1.68247E05 2.38875E05 9.89208E04 2.71140E05 1.02683E06 1.93244E06 4.00782E06 5.17565E06 4.13486E06 2.51950E06 5.96715E05 7.52218E05 4.30531E05 1.18616E06 3.49444E06 7.39513E06 5.46883E06 9.74784E05 4.69326E05 1.58157E05 7.16436E04 1.96629E05 1.90618E05 3.82804E05 3.31717E05 1.44056E05 4.88825E04 4.15591E04 1.33753E04 4.22195E03 1.21378E04 3.96045E04 1.73454E05 1.82500E05 1.66015E05 1.10341E05 1.76450E04 4.37267E03 -Frame 40 2.54136E05 6.98802E05 1.67353E05 2.49377E05 1.02749E05 2.75364E05 1.02525E06 2.02083E06 3.78689E06 4.74758E06 3.55839E06 2.20056E06 5.06240E05 7.05965E05 3.26646E05 9.91576E05 2.71483E06 6.30450E06 7.98228E06 1.48524E06 6.03217E05 1.76550E05 7.35409E04 2.88422E05 3.23410E05 5.36437E05 3.33711E05 1.21963E05 5.35650E04 5.35032E04 9.99372E03 5.24499E03 1.49345E04 6.57902E04 1.84016E05 1.36540E05 1.33076E05 1.16480E05 1.42158E04 1.95580E03 -Frame 40 2.20939E05 7.72984E05 1.72362E05 2.83512E05 7.88948E04 3.05392E05 9.24914E05 2.26786E06 3.52676E06 3.98439E06 3.89570E06 1.69778E06 4.58129E05 4.84216E05 3.10787E05 6.55547E05 1.85721E06 4.50750E06 9.52321E06 3.20158E06 7.23454E05 2.65006E05 7.96340E04 3.09796E05 4.28672E05 1.42955E05 1.56695E05 6.83136E04 4.63860E04 6.27348E04 1.10061E04 5.58112E03 1.66832E04 7.50124E04 2.45475E05 1.89497E05 1.29661E05 8.08178E04 1.73025E04 3.06690E03 -Frame 40 1.81069E05 7.91860E05 1.81120E05 3.35271E05 6.90066E04 3.07710E05 9.03869E05 2.80249E06 3.07859E06 3.24385E06 3.52133E06 1.10257E06 3.51463E05 2.67817E05 2.17641E05 3.75875E05 1.09971E06 2.54313E06 8.92909E06 9.49633E06 1.16286E06 4.92500E05 1.73045E05 3.54236E05 6.20458E05 2.39220E05 4.97904E04 3.59792E04 1.45702E04 2.45579E04 1.24527E04 7.37415E03 2.38871E04 9.96067E04 2.20943E05 2.02542E05 6.91648E04 4.04076E04 1.73345E04 4.07490E03 -Frame 40 1.44056E05 7.55618E05 1.76197E05 3.57215E05 7.41767E04 3.05241E05 8.87323E05 3.48868E06 2.16234E06 2.14813E06 3.07133E06 7.20449E05 2.97674E05 1.68856E05 1.62547E05 1.91520E05 5.89317E05 1.31276E06 7.61293E06 1.72838E07 1.45040E06 4.94631E05 1.71562E05 2.26105E05 3.69357E05 1.91598E05 1.03608E05 4.70902E04 2.47954E04 3.89555E04 1.19503E04 1.11014E04 2.76521E04 9.73089E04 3.05415E05 2.56225E05 6.46501E04 6.02487E04 3.99204E04 3.96695E03 -Frame 40 1.40910E05 6.84891E05 1.74806E05 3.32302E05 6.95427E04 3.34055E05 9.95657E05 3.33115E06 1.12689E06 1.19272E06 2.03350E06 3.69910E05 1.82660E05 1.16664E05 1.14631E05 7.43308E04 2.66273E05 7.56419E05 5.66525E06 1.34153E07 1.13486E06 3.79050E05 1.38694E05 1.65172E05 1.55303E05 2.33767E05 3.76982E05 8.91337E04 2.64360E04 3.09103E04 2.68981E04 2.64155E04 1.31854E05 3.56868E05 1.72412E05 7.82518E04 2.42607E04 3.12135E04 3.60706E04 4.22391E03 -Frame 40 1.07430E05 2.45490E05 7.88297E04 7.01047E04 7.46652E04 1.93404E05 6.70324E05 7.30926E05 3.17251E05 3.34263E05 3.42707E05 1.47163E05 3.81664E04 4.55231E04 3.08758E04 2.81256E04 8.73961E04 5.09154E05 2.73888E06 2.44751E06 1.88238E05 1.38719E05 2.92920E04 4.43186E04 4.38290E04 8.12309E04 1.83762E05 2.40225E04 4.27860E03 4.17857E03 5.12167E03 1.09955E04 4.75276E04 9.73944E04 2.72126E04 1.93358E04 5.00127E03 1.98725E04 1.69803E04 1.05013E03 -Frame 40 8.84895E03 7.01309E04 2.11679E04 5.11833E04 1.81896E04 1.51322E04 1.49114E04 1.52624E04 3.83284E03 3.58575E03 8.04875E03 1.30837E03 2.36106E03 4.06477E03 4.56494E03 1.27012E03 7.72485E03 4.60311E04 2.59580E04 1.24228E04 2.06996E04 3.25002E04 1.46702E04 7.24474E03 2.07546E04 2.79118E04 3.93504E04 5.37757E03 8.44658E02 2.53062E02 1.92596E02 2.71202E02 4.23488E02 9.12991E02 1.73343E03 1.89332E03 6.92083E02 3.52238E03 3.19933E03 2.88538E02 -Frame 40 6.03208E03 5.32926E04 1.81602E04 5.97405E04 1.18361E04 2.01397E04 1.08012E04 7.12622E03 1.52205E03 2.19004E03 5.50604E03 1.75361E03 2.09117E03 2.43721E03 1.70171E03 1.31146E03 4.38364E03 3.98898E04 2.82573E04 2.15207E04 1.83270E04 2.49252E04 1.22233E04 4.42424E03 1.53425E04 1.37689E04 2.69591E04 5.93850E03 4.12108E03 2.76220E03 1.19329E03 7.59381E02 1.19294E03 8.86848E02 8.44831E02 8.86952E02 5.01857E02 4.67903E03 4.75270E03 3.71352E02 -Frame 40 3.30917E03 8.44553E04 2.81605E04 9.81838E04 4.91646E04 8.46911E04 1.19610E05 4.90407E04 2.89196E04 1.72161E04 2.41138E04 6.98703E03 6.52819E03 8.00110E03 9.29071E03 1.13960E04 4.07704E04 3.96356E05 8.10922E05 2.02934E05 7.01861E04 7.81610E04 2.74635E04 1.54971E04 1.99911E04 7.70375E04 2.57001E05 1.07397E05 1.03160E05 6.75264E04 2.46377E04 9.56480E03 1.15836E04 2.61394E03 1.20546E03 1.50616E03 5.27526E02 4.09884E03 4.01601E03 1.58519E03 -Frame 40 4.35545E04 2.93866E05 1.13994E05 2.46911E05 1.17464E05 2.88004E05 3.78078E05 8.23097E05 4.09814E05 2.40371E05 2.91178E05 1.12154E05 9.90948E04 8.74535E04 4.42068E04 3.56982E04 1.19623E05 5.22031E05 6.73937E06 5.97265E06 6.77988E05 1.82435E05 7.81141E04 7.70678E04 8.27028E04 2.81750E05 8.32403E05 2.32253E05 1.67324E05 6.47968E04 5.09816E03 2.06619E03 8.99023E03 1.02100E04 1.68634E03 1.48217E03 7.66098E02 2.37969E03 2.16213E03 1.36026E03 -Frame 40 3.76250E04 3.92911E05 1.24454E05 2.66386E05 1.34174E05 2.81410E05 2.73851E05 1.67161E06 7.57661E05 4.29988E05 5.25043E05 1.80653E05 1.38549E05 1.02047E05 4.23411E04 4.38973E04 1.84029E05 8.43621E05 5.37590E06 3.48314E06 9.06368E05 2.72280E05 9.52741E04 1.65631E05 1.97087E05 2.73287E05 4.43072E05 1.83905E05 1.11427E05 1.41774E05 2.56488E04 1.23954E03 1.62083E03 1.21688E04 7.57921E03 5.31002E03 2.18409E03 1.60846E03 2.19584E03 8.48695E02 -Frame 40 3.99509E04 3.75715E05 1.16774E05 2.54764E05 1.24421E05 2.83152E05 2.64074E05 1.74818E06 6.93430E05 4.32243E05 5.84345E05 1.83251E05 1.60336E05 1.40667E05 6.53589E04 8.31597E04 4.19170E05 3.70474E06 4.94635E06 9.06340E05 2.77190E05 1.24445E05 4.30329E04 1.03481E05 2.12561E05 4.11490E05 1.84231E05 8.68676E04 3.24779E04 3.51685E04 2.24051E04 9.11866E02 4.51492E02 4.09976E03 3.39403E04 1.20300E04 4.77802E03 1.00147E03 1.11381E03 9.93820E02 -Frame 40 4.78093E04 3.61848E05 1.09363E05 2.33954E05 9.19659E04 3.24103E05 2.83809E05 1.77926E06 5.76211E05 3.62429E05 5.25972E05 1.47033E05 1.64745E05 1.84175E05 9.58844E04 2.99136E05 1.43546E06 2.46074E06 6.97227E05 2.17314E05 1.10823E05 5.34523E04 2.05601E04 3.65831E04 6.41320E04 2.54160E05 1.01656E05 2.46306E04 9.87483E03 2.14243E03 3.49555E03 9.38553E02 2.83523E03 1.41622E04 4.85707E04 1.05267E04 4.16365E03 1.03057E03 7.07752E02 7.99826E02 -Frame 40 5.48354E04 3.48646E05 1.01849E05 2.34322E05 6.87227E04 3.65354E05 3.32668E05 1.57234E06 3.99611E05 2.74790E05 3.92527E05 1.32150E05 1.58359E05 1.74710E05 2.23465E05 5.04691E05 6.80389E05 1.75128E05 1.68185E05 6.50817E04 4.77078E04 3.67700E04 1.12452E04 1.46612E04 2.67658E04 1.10235E05 6.51936E04 1.88267E04 1.24850E04 6.06020E03 5.29002E03 7.26398E02 7.91051E02 8.48846E03 1.83392E04 3.62551E03 2.46293E03 5.92325E02 3.56928E02 2.62867E02 -Frame 40 5.51930E04 3.10532E05 9.53303E04 2.30298E05 7.67930E04 4.51827E05 3.32447E05 1.14464E06 2.55330E05 1.85646E05 2.62812E05 1.19526E05 1.74531E05 2.81983E05 5.31774E05 6.14598E05 1.30681E05 4.13723E04 5.99945E04 2.50390E04 2.36052E04 1.89272E04 5.84043E03 6.90423E03 1.05449E04 4.31512E04 3.20049E04 1.15367E04 1.25959E04 1.38217E04 6.92796E03 1.33475E03 9.64076E02 5.46441E03 5.13274E03 1.79614E03 8.45484E02 2.97486E02 2.11706E02 1.44571E02 -Frame 40 5.07004E04 2.82356E05 9.21936E04 2.40329E05 9.42666E04 5.74266E05 2.85432E05 6.39765E05 1.63624E05 1.22827E05 1.78822E05 1.15361E05 2.14336E05 5.66119E05 5.37532E05 1.61265E05 2.52637E04 1.97792E04 2.20574E04 2.50945E04 9.93232E03 1.05548E04 4.34734E03 4.47282E03 8.78506E03 2.82911E04 1.67912E04 9.45989E03 1.14704E04 1.23374E04 3.67216E03 7.60664E02 9.96237E02 1.28966E03 8.78810E02 5.27315E02 5.71193E02 2.91817E02 1.48224E02 1.91534E02 -Frame 40 4.12568E04 2.63144E05 9.24230E04 2.70209E05 1.23659E05 8.08748E05 2.67193E05 2.89172E05 1.20469E05 1.04087E05 1.58348E05 1.03048E05 2.98781E05 6.81676E05 4.31627E05 3.16556E04 1.49207E04 9.52990E03 8.29442E03 2.30151E04 7.81008E03 7.15160E03 3.55742E03 4.40720E03 6.70559E03 1.46122E04 7.24791E03 4.12509E03 4.56911E03 1.09000E04 4.66716E03 1.06435E03 3.66389E03 3.42023E03 5.03528E02 2.92315E02 4.86896E02 2.06889E02 2.41952E02 3.75500E02 -Frame 40 3.37103E04 2.42860E05 1.03411E05 3.52301E05 1.83646E05 1.05256E06 2.49093E05 1.18547E05 9.15473E04 7.93620E04 1.27304E05 7.59192E04 3.41445E05 3.43023E05 1.17128E05 1.88125E04 5.86221E03 6.02877E03 7.55340E03 9.71006E03 5.81956E03 7.96479E03 3.65811E03 4.83162E03 1.22504E04 1.32689E04 7.32633E03 2.09521E03 4.05766E03 6.24163E03 4.95871E03 1.13302E03 3.22457E03 2.70589E03 3.32112E02 5.69655E02 6.82504E02 5.43325E02 1.97360E02 2.09065E02 -Frame 40 3.50342E04 2.34209E05 1.36507E05 5.02843E05 2.18952E05 1.04058E06 2.20728E05 5.52232E04 6.71330E04 5.55599E04 7.04811E04 4.87577E04 1.94203E05 3.12820E05 1.39512E05 1.99243E04 8.19537E03 7.43259E03 5.54507E03 9.09429E03 6.70669E03 6.37557E03 4.53097E03 8.75315E03 3.37045E04 2.65601E04 5.15304E03 2.49655E03 4.37451E03 6.38756E03 7.88291E03 8.14469E02 1.59022E03 1.01248E03 1.10455E02 5.91203E02 1.63751E03 1.30673E03 3.84008E02 2.72676E02 -Frame 40 3.69030E04 2.50446E05 1.76051E05 7.76512E05 2.03060E05 5.52628E05 1.45987E05 4.11322E04 5.36380E04 4.04597E04 3.37448E04 2.74772E04 4.31855E04 4.50174E04 1.65681E05 5.39349E04 5.24313E04 2.38368E04 7.25539E03 6.89803E03 7.26592E03 8.26295E03 9.38456E03 2.92910E04 9.88875E04 5.39408E04 8.17889E03 6.09171E03 6.95159E03 1.59167E04 2.44081E04 2.15137E03 3.93920E03 1.34194E03 1.95599E02 9.40453E02 3.63036E03 1.70308E03 2.11739E02 1.39102E02 -Frame 40 6.42992E04 2.20222E05 2.15231E05 8.40290E05 1.49678E05 2.29745E05 5.39223E04 2.43538E04 3.79626E04 2.54487E04 1.75220E04 1.08622E04 1.46366E04 1.19737E04 2.12687E04 6.04557E04 1.72303E05 1.09996E05 6.55124E04 1.37392E04 9.05209E03 1.06483E04 1.58225E04 4.35971E04 8.95537E04 3.64327E04 1.37768E04 6.11532E03 5.05670E03 2.37022E04 5.03054E04 5.28419E03 5.31810E03 1.85444E03 2.40125E02 2.77273E03 5.54987E03 4.58616E03 8.98339E02 5.82100E02 -Frame 40 2.68481E04 5.97053E04 1.07012E05 2.56541E05 1.22751E05 6.67830E04 1.02414E04 4.98480E03 1.02705E04 9.79953E03 4.54920E03 1.24703E03 4.97174E03 3.64120E03 2.33909E03 4.37136E03 4.48729E04 1.24620E05 4.75922E04 8.52865E03 5.15524E03 3.63005E03 5.70699E03 1.49035E04 7.12403E03 1.01559E04 6.45415E03 1.40102E03 7.73184E03 3.50735E04 7.44942E04 1.67986E04 2.30474E04 2.01807E04 4.83461E03 4.31963E03 1.57555E04 8.60298E03 8.50412E02 1.47141E03 -Frame 40 7.72547E03 1.88122E03 7.97117E03 1.06508E04 7.96945E02 8.02688E02 2.97858E03 1.78782E03 8.59814E03 1.15335E04 5.25997E03 4.20856E03 1.52535E03 2.31298E03 2.24601E03 1.59910E03 2.70010E03 2.64720E03 5.71679E03 8.82767E03 1.19801E04 1.15718E04 8.55430E03 8.34691E03 4.51408E03 9.96093E02 3.45357E02 2.67671E02 3.09232E03 8.82614E03 2.24326E04 1.50025E04 3.28148E04 3.62251E04 2.20911E04 2.93560E04 1.86418E04 5.76630E03 1.41567E03 4.42824E02 -Frame 40 6.40045E02 3.65921E02 7.20010E02 1.30122E03 1.23449E02 1.07412E02 9.87099E01 2.23028E02 1.92345E03 2.76638E03 1.20273E03 2.35864E02 7.50906E02 9.78206E02 5.67639E02 1.74636E02 2.12752E02 3.34105E02 3.03014E02 6.86785E02 5.55138E02 5.61309E02 4.80955E02 3.18556E02 4.69212E02 2.37836E02 1.83443E02 1.13502E02 2.43500E02 2.22058E02 3.64312E02 6.51550E02 1.29965E03 1.38292E03 9.56949E02 1.51815E03 6.92514E02 2.94528E02 2.20869E02 1.39143E02 -Frame 40 2.12572E01 1.72485E01 2.18500E01 2.73733E02 1.08440E02 1.08107E02 2.33643E01 7.05431E01 7.25772E02 4.17810E02 8.03969E02 1.97539E02 7.09615E02 8.37954E02 2.86544E02 1.17459E02 6.22339E02 2.52445E02 2.36603E02 1.08187E02 1.77285E02 3.09626E02 7.97915E01 4.88817E01 8.72810E01 1.69491E02 9.89330E01 5.62117E01 1.13201E02 1.33071E02 7.92847E01 1.07485E02 1.27489E02 1.93606E02 1.27730E02 3.39445E02 1.30027E02 2.65484E02 1.99340E02 1.08177E02 -Frame 40 1.79390E01 3.10640E01 5.26321E01 1.53620E02 6.07746E01 4.79156E01 4.45175E01 2.01327E02 3.61478E02 2.21726E02 3.04658E02 2.08988E02 2.99821E02 4.63553E02 2.33958E02 1.84817E02 4.20159E02 1.84355E02 2.66785E02 2.14754E02 1.62680E02 2.69777E02 6.41635E01 5.14397E01 1.04442E02 1.72089E02 8.93772E01 8.93701E01 9.26164E01 1.42975E02 8.88698E01 7.25617E01 1.26483E02 2.45176E02 2.47077E02 2.22291E02 1.04847E02 6.58240E01 9.70029E01 8.97652E01 -Frame 40 2.54439E01 4.87255E01 2.83124E01 2.70303E01 7.08080E01 1.86440E02 4.72222E01 4.23157E01 4.66936E01 1.45177E02 1.85165E02 1.17638E02 1.84299E02 2.85300E02 2.09886E02 3.76971E01 5.88291E01 2.40245E02 3.31998E02 2.28424E02 8.08148E01 9.32370E01 1.07466E02 1.64709E02 2.99371E02 6.28171E01 1.17562E02 2.27845E02 6.92746E01 1.18887E02 2.24527E02 2.58755E02 1.63986E02 1.76957E02 3.60856E02 1.19374E02 1.27779E02 6.78839E01 1.32606E02 6.12707E01 -Frame 40 3.13272E01 1.14141E02 7.53175E01 7.95420E01 9.99746E01 1.26244E02 4.86975E01 1.09115E02 1.84028E02 3.46338E02 2.51560E02 1.85680E02 3.70022E02 6.20387E02 2.33058E02 3.05922E02 2.81525E02 5.44284E02 8.20748E02 3.48084E02 4.41506E02 6.02011E02 5.90294E02 6.05510E02 6.53348E02 7.29916E02 9.17844E02 1.12694E03 1.52776E03 1.94956E03 2.65536E03 3.21650E03 5.37147E03 8.28402E03 9.25442E03 7.85133E03 5.24934E03 2.06658E03 1.29361E03 7.55522E02 -Frame 40 1.23029E01 1.14169E02 4.04538E02 8.25839E02 6.55938E02 6.51686E02 8.43466E02 6.98797E02 7.47394E02 1.35389E03 1.16987E03 1.49597E03 1.70535E03 1.74475E03 1.46945E03 2.98192E03 2.71788E03 2.57276E03 3.13509E03 3.13514E03 3.26512E03 6.94865E03 5.15321E03 5.50155E03 5.15589E03 7.17498E03 8.81331E03 1.16904E04 1.85621E04 2.99981E04 7.61964E04 6.05995E04 8.94781E04 2.70779E05 7.14047E05 1.52125E06 7.06403E05 1.95017E05 1.55121E05 2.22595E05 -Frame 40 9.80768E01 4.26430E01 3.77069E01 1.91170E02 8.24281E01 2.05292E02 3.05121E02 2.32084E02 2.46712E02 1.53103E02 4.80114E01 2.80435E02 1.99177E02 2.14892E02 2.32965E02 3.59817E02 7.60915E02 2.92348E02 4.89405E02 7.01356E02 8.57486E02 2.67478E03 2.33187E03 1.74531E03 2.34985E03 3.25107E03 3.11366E03 6.74952E03 1.08125E04 3.99737E04 1.34253E05 8.96693E05 9.04720E05 1.31085E06 5.14632E06 6.57339E06 2.32758E06 2.81292E06 2.59633E06 3.05628E06 -Frame 40 1.12758E02 8.16972E01 9.58649E01 1.29114E02 1.86783E02 2.05606E02 2.05263E02 9.33573E01 1.30165E02 9.71669E01 1.11205E02 6.49340E02 2.42808E02 2.17028E02 3.71156E02 6.87092E02 8.17082E02 7.24575E02 7.93433E02 6.65020E02 1.35196E03 2.15993E03 4.11290E03 2.76789E03 6.18449E03 2.35164E04 5.49876E03 3.08757E03 1.27743E04 9.76825E04 2.24506E05 2.80324E06 2.31749E06 4.20565E06 5.83692E06 4.43682E06 5.07047E06 3.39716E06 4.59166E06 3.66448E06 -Frame 40 2.36953E02 6.76669E02 5.71123E02 7.84536E01 6.74183E02 5.19776E02 5.60166E01 3.25823E02 5.91057E02 6.54900E02 2.95050E02 6.65533E02 9.33949E02 4.68577E02 4.73792E02 1.15113E03 3.04124E03 1.65032E03 3.47653E03 2.27992E03 1.80182E03 7.48814E03 1.99727E04 1.12579E04 1.48073E04 3.10317E04 2.05710E04 1.86428E04 1.64127E05 6.81572E05 1.25850E06 5.74940E06 4.91211E06 3.49982E06 4.67084E06 4.09032E06 2.47064E06 2.28226E06 2.29563E06 2.45789E06 -Frame 40 5.98870E02 2.00063E03 1.42889E03 2.66337E02 7.68393E02 2.25276E02 4.67983E02 1.11189E03 3.89088E02 2.89880E03 1.54339E03 2.39186E03 4.35829E03 3.06458E03 5.45754E03 1.10334E03 1.88979E03 1.47754E03 3.24521E03 4.74897E03 7.40520E03 1.25397E05 1.04212E05 4.94192E04 1.39061E05 6.66778E05 1.87207E05 6.16721E04 1.72886E05 9.41215E05 4.39189E06 2.28613E06 2.57169E06 3.14951E06 2.49208E06 2.78153E06 3.16384E06 2.08579E06 2.29179E06 3.89817E06 -Frame 40 1.89064E03 2.26463E03 8.70144E02 1.80426E03 5.01889E03 1.43679E03 3.36298E03 5.47194E03 2.65557E03 3.68747E03 5.16157E03 3.48425E03 1.37515E03 3.27496E03 5.06440E03 1.96870E03 2.73880E03 3.30889E03 3.15400E03 5.22829E03 8.30175E03 9.80143E04 9.72588E04 4.17267E04 2.11337E05 9.69363E05 4.76488E05 3.00651E05 9.86083E04 8.80350E05 7.01264E06 3.44181E06 1.67781E06 2.20289E06 2.02272E06 1.50035E06 2.40599E06 9.52584E05 7.72621E05 1.51406E06 -Frame 40 2.53201E03 3.16853E02 5.88525E02 6.33221E03 7.27707E03 6.89159E03 2.03122E03 3.65167E03 1.49511E03 1.45608E03 5.94460E03 5.45063E03 2.12399E03 2.42582E03 1.66667E03 1.22561E03 1.63678E03 1.66650E03 3.35820E03 1.84339E04 4.28188E04 2.63992E05 2.44447E05 1.38089E05 1.03268E06 1.14777E06 2.84962E05 2.59407E05 9.34827E04 7.19705E05 3.68765E06 2.31108E06 6.31981E05 1.68504E06 1.11021E06 8.40593E05 9.50327E05 7.04463E05 4.21307E05 8.17865E05 -Frame 40 4.98625E03 2.44961E03 5.56213E03 1.49988E04 6.69283E03 4.74678E03 1.81443E03 3.96752E03 1.23749E03 4.46469E03 1.63312E04 4.48006E03 5.08528E03 8.62419E03 2.09026E03 9.75447E02 6.50709E02 7.29933E02 2.45821E03 2.07444E04 5.01830E04 5.36639E05 4.44126E05 1.59649E05 3.46380E06 1.57208E06 2.83554E05 2.32253E05 1.65004E05 6.34428E05 1.12106E06 9.20656E05 4.20211E05 1.01757E06 8.90348E05 9.86038E05 1.02704E06 5.30857E05 3.66331E05 2.49482E05 -Frame 40 1.17802E04 7.08497E03 4.05831E03 6.71701E03 2.13601E03 1.53557E03 1.73352E03 3.49864E03 9.74612E02 2.88134E03 2.82473E03 9.59677E02 9.56252E02 6.70154E02 8.05151E02 7.42108E02 8.91239E02 2.70160E03 6.90688E03 2.25272E04 8.29363E04 4.51619E05 4.37031E05 7.11474E05 5.63371E06 7.03180E05 2.55276E05 3.55494E04 7.71976E04 1.98210E05 1.31273E05 1.82525E05 1.78180E05 2.60594E05 1.94723E05 1.09520E05 1.51158E05 2.42534E05 7.40631E04 9.59305E04 -Frame 40 9.98775E04 3.60693E04 3.86675E04 8.16496E04 2.58406E04 6.23165E03 5.58111E03 3.01155E03 2.27648E03 1.71219E03 9.65434E02 7.19976E02 2.14812E03 1.41769E03 2.30840E03 6.88639E03 1.96514E04 2.75354E04 1.45885E05 1.54521E05 8.11525E04 8.55839E04 1.26546E05 2.57256E05 6.14613E05 7.06349E04 3.42607E04 1.93448E04 1.64717E04 6.96811E04 7.61335E04 5.30637E04 3.40779E04 7.34867E04 6.12201E04 2.72023E04 2.51888E04 4.31238E04 1.19280E04 1.30217E04 -Frame 40 7.61880E04 3.41434E05 2.75567E05 1.08670E06 5.69997E05 1.10232E05 5.72508E04 2.24595E04 1.37932E04 1.82312E04 8.60059E03 5.07512E03 6.94690E03 7.37268E03 5.61410E03 1.35603E04 7.19494E04 1.68585E05 4.64973E05 2.10241E05 9.87513E04 2.56543E05 6.14711E05 7.20770E05 4.03278E05 7.34123E04 1.49353E04 8.47372E03 1.07969E04 3.06209E04 1.45320E04 2.51911E03 5.32830E03 1.95748E04 5.41533E03 3.82629E03 6.41082E03 3.22179E04 1.19660E04 1.14604E04 -Frame 40 5.25980E04 4.68580E05 2.79448E05 1.95652E06 9.95936E05 2.62668E05 1.23856E05 4.72635E04 3.25135E04 2.97721E04 2.41327E04 7.99234E03 8.24722E03 8.40915E03 7.85393E03 1.87887E04 1.01996E05 3.76811E05 3.91125E05 1.20169E05 5.56049E04 1.10263E05 2.53480E05 6.05616E05 6.61810E05 1.47959E05 3.53663E04 2.25239E04 2.77842E04 8.47642E04 2.83730E04 2.10107E03 1.99295E03 4.73438E03 3.58411E03 1.61937E03 1.89873E03 5.52547E03 6.05135E03 6.83910E03 -Frame 40 8.66572E04 3.86410E05 3.90951E05 2.22036E06 5.25808E05 6.00149E05 1.53086E05 6.99825E04 4.95786E04 3.06298E04 3.06584E04 1.92894E04 1.24556E04 1.43325E04 1.69656E04 6.31992E04 3.38022E05 4.45375E05 1.37714E05 5.82136E04 3.13097E04 4.81845E04 1.86224E05 1.06446E05 9.68012E04 6.82334E04 1.78720E04 1.26567E04 1.28940E04 3.65743E04 1.07581E04 1.61387E03 3.54850E03 5.12646E03 1.28826E03 7.45391E02 1.07389E03 2.22967E03 2.89605E03 3.34201E03 -Frame 40 1.14199E05 2.60885E05 5.71408E05 1.56086E06 3.49314E05 9.21309E05 1.31632E05 8.02743E04 5.34440E04 3.05477E04 2.78532E04 2.90510E04 2.37570E04 2.81609E04 8.03718E04 2.85997E05 3.36716E05 1.09132E05 2.06678E04 1.92436E04 1.36607E04 1.59671E04 5.80120E04 5.44181E04 1.13387E04 1.83433E04 8.41974E03 8.14580E03 9.25389E03 1.09549E04 3.51566E03 2.30768E03 2.00492E03 2.82502E03 1.55240E03 1.20293E03 1.69243E03 1.91497E03 1.49950E03 2.85550E03 -Frame 40 1.25079E05 2.04229E05 6.21810E05 9.62005E05 6.36514E05 1.07493E06 1.21044E05 7.47424E04 5.90280E04 3.44833E04 3.62191E04 3.91409E04 6.94913E04 9.21223E04 1.20654E05 1.41198E05 1.18676E04 9.95554E03 4.75442E03 4.96009E03 4.22683E03 6.40847E03 1.69241E04 2.97974E04 6.38943E03 3.29759E03 4.18849E03 4.26981E03 5.99440E03 7.69370E03 3.43705E03 1.56902E03 4.86289E03 7.31621E03 1.97288E03 9.65499E02 1.51434E03 2.00929E03 1.26655E03 1.76306E03 -Frame 40 1.28141E05 1.65628E05 5.58925E05 5.78282E05 9.82032E05 1.04030E06 9.87100E04 5.29491E04 4.45246E04 4.22276E04 8.08248E04 1.43164E05 2.07659E05 1.42456E05 3.52889E04 8.78770E03 4.82152E03 3.90170E03 1.93921E03 2.01757E03 2.07623E03 1.43081E03 1.08004E04 2.21275E04 4.19759E03 6.09055E02 1.01265E03 2.14344E03 2.36618E03 2.43450E03 1.13736E03 9.32655E02 1.15468E03 1.36439E03 1.39016E03 1.25559E03 6.55968E02 1.49609E03 9.65066E02 1.15249E03 -Frame 40 1.29917E05 1.31355E05 3.76338E05 2.45451E05 1.23616E06 7.86921E05 9.32942E04 4.60646E04 4.31638E04 9.59170E04 2.26217E05 3.32317E05 1.74127E05 2.60577E04 4.86343E03 1.98520E03 2.14673E03 1.61827E03 1.67811E03 1.18702E03 1.12310E03 8.04431E02 3.40716E03 9.74059E03 4.42985E03 4.53208E02 5.33381E02 9.58958E02 1.26160E03 1.60872E03 4.06828E02 4.74533E02 1.84041E03 7.23094E02 1.39126E03 1.10524E03 4.49954E02 8.92449E02 7.35497E02 7.37739E02 -Frame 40 1.44782E05 1.07449E05 2.86846E05 1.31174E05 1.01394E06 4.87071E05 7.87561E04 3.84933E04 5.86413E04 1.78186E05 3.23054E05 1.91446E05 2.31649E04 7.25623E03 1.20259E03 5.34396E02 1.11588E03 8.08247E02 6.11358E02 3.78396E02 6.73729E02 5.89541E02 1.22118E03 7.13281E03 6.16221E03 4.77124E02 8.98444E02 1.17424E03 1.09153E03 2.06260E03 5.36353E02 7.86313E02 1.11824E03 6.68630E02 4.23111E02 2.40408E02 6.29878E02 5.31626E02 2.09548E02 4.23999E02 -Frame 40 1.64492E05 1.01960E05 2.62823E05 1.21008E05 1.16556E06 3.63621E05 4.97629E04 4.56732E04 9.55535E04 2.86563E05 3.58292E05 7.22115E04 1.68349E04 4.83617E03 4.10090E02 5.55861E02 1.42921E03 6.74591E02 7.04314E02 2.94928E02 5.15060E02 5.65471E02 1.56704E03 5.84266E03 1.02247E04 1.50192E03 1.10672E03 1.31992E03 1.38063E03 1.58992E03 2.92948E02 7.24331E02 1.30704E03 3.70795E02 4.48218E02 5.07095E02 1.34906E03 8.80580E02 6.19135E02 3.45487E02 -Frame 40 1.84124E05 9.52892E04 2.23805E05 1.18162E05 1.54255E06 7.28057E05 7.39822E04 8.13698E04 1.91146E05 4.30177E05 5.88776E05 1.38049E05 2.83554E04 8.93019E03 2.88512E03 2.94775E03 2.15122E03 1.18263E03 8.57657E02 7.13118E02 4.56643E02 8.73303E02 1.38012E03 5.23076E03 1.13176E04 4.99426E03 1.26786E03 1.37631E03 3.26031E03 4.54183E03 3.02475E02 5.89442E02 1.52535E03 8.03280E02 1.46797E03 6.25106E02 5.26828E02 2.16834E03 6.14722E02 8.11225E02 -Frame 40 1.96365E05 1.06460E05 1.50397E05 7.30332E04 1.56838E06 9.49146E05 3.38234E05 2.60855E05 2.75484E05 5.78034E05 1.23969E06 4.21038E05 1.17782E05 1.89665E04 5.80313E03 6.21002E03 3.25243E03 2.59990E03 1.60058E03 1.42044E03 1.74910E03 2.11653E03 1.98064E03 4.33026E03 1.88108E04 1.81231E04 3.74534E03 3.19325E03 1.38961E04 1.46724E04 1.37766E03 1.25974E03 1.29002E03 6.76229E02 6.68335E02 3.25528E02 1.43081E03 3.38268E03 4.58820E02 6.67019E02 -Frame 40 2.10530E05 1.25701E05 9.84839E04 5.40061E04 9.64867E05 6.48965E05 1.64981E06 5.01224E05 4.71037E05 5.98450E05 1.01268E06 2.84011E06 1.22044E06 7.12151E04 1.24396E04 1.27507E04 8.32364E03 5.70812E03 4.69996E03 3.65675E03 3.79286E03 4.87643E03 2.73265E03 4.11063E03 1.43012E04 5.50921E04 1.33325E04 9.98837E03 4.67348E04 2.90028E04 9.03622E02 4.84321E03 6.98680E03 6.29346E02 4.75913E02 7.07127E02 3.22261E03 4.70885E03 1.23664E03 9.29908E02 -Frame 40 2.48277E05 1.29551E05 7.04999E04 3.42531E04 3.51372E05 3.68941E05 2.37591E06 7.92539E05 8.10469E05 6.02236E05 3.47957E05 3.19375E06 3.43505E06 1.57646E06 1.22562E05 2.47483E04 1.73836E04 1.01758E04 9.16823E03 9.90311E03 8.10520E03 1.12602E04 4.17236E03 4.85033E03 1.25795E04 6.29905E04 2.98539E04 2.10366E04 6.76864E04 3.16903E04 1.73716E03 2.11397E04 4.20242E04 1.33557E03 2.94790E02 1.25754E03 1.94189E04 3.01791E04 3.44282E03 2.64390E03 -Frame 40 2.84749E05 1.46258E05 6.93827E04 3.18525E04 2.04903E05 3.15525E05 1.50247E06 1.07439E06 1.06476E06 7.25344E05 2.50326E05 7.42292E05 1.92277E06 4.64417E06 2.57889E06 3.52107E05 8.85370E04 2.92063E04 2.34683E04 1.71580E04 1.64665E04 1.36934E04 6.30041E03 9.56064E03 1.69058E04 1.28371E05 1.10308E05 2.84522E04 4.07009E04 1.94429E04 1.68809E03 8.43777E03 1.60361E04 9.98302E02 3.37515E02 2.60418E03 1.02033E04 5.90118E03 1.65015E03 1.77124E03 -Frame 40 2.97043E05 1.24237E05 6.43614E04 3.50439E04 1.74169E05 2.52921E05 5.13325E05 1.22130E06 1.18442E06 5.43993E05 3.25852E05 4.19386E05 4.29616E05 7.11228E05 3.64459E06 1.63868E06 6.18413E05 1.15840E05 6.44807E04 4.01684E04 3.06189E04 2.41039E04 9.11157E03 2.07388E04 4.74650E04 1.54497E05 8.49577E04 3.11659E04 5.31045E04 3.83944E04 1.29751E03 1.88719E03 7.45397E03 4.07743E03 5.81308E02 2.53941E03 2.13364E04 1.10331E04 1.74376E03 1.49190E03 -Frame 40 2.84470E05 8.38253E04 6.35549E04 3.88914E04 1.54605E05 1.97646E05 3.20142E05 1.42766E06 1.19871E06 4.56028E05 3.61200E05 2.60625E05 2.07965E05 1.53062E05 2.66954E05 6.22004E05 1.63999E06 4.64453E05 2.97037E05 8.38899E04 5.28857E04 3.67583E04 1.77153E04 4.50221E04 1.01323E05 1.80675E05 6.04737E04 3.50742E04 1.52766E04 7.00844E03 2.20911E03 5.09304E03 1.34060E04 8.64488E03 1.25672E03 1.38361E03 2.48822E04 1.20052E04 1.45318E03 8.06935E02 -Frame 40 2.60448E05 8.90053E04 5.98766E04 4.02887E04 1.58426E05 1.76057E05 3.97686E05 1.27023E06 8.87051E05 3.25759E05 2.46978E05 1.72070E05 1.06477E05 5.57177E04 7.35795E04 2.30870E05 1.20011E06 2.34381E06 8.91693E05 1.66217E05 8.83653E04 7.22290E04 2.69220E04 6.85855E04 7.46458E04 5.42733E04 7.10256E04 4.42246E04 3.42318E04 9.39365E03 7.10471E02 5.45322E03 8.33926E03 6.34002E03 2.16189E03 2.65989E03 9.47082E03 3.42276E03 8.92567E02 5.47757E02 -Frame 40 1.26316E05 5.92853E04 4.60065E04 5.31532E04 5.62966E04 1.96542E05 2.64856E05 4.64404E05 3.45055E05 1.36613E05 7.80314E04 7.70287E04 5.36867E04 3.96080E04 2.33976E04 4.34575E04 4.23052E05 1.05764E06 9.44158E05 2.00191E05 1.18856E05 9.39259E04 2.64598E04 1.37498E04 2.23851E04 8.88720E04 1.28578E05 6.38336E04 4.04655E04 1.84632E04 2.50719E03 4.78329E03 2.48705E03 1.92361E03 5.01745E03 1.96101E03 7.65363E02 3.84077E02 5.02537E02 5.71681E02 -Frame 40 6.37140E04 1.84771E04 4.70019E03 1.47987E04 2.33641E04 1.01062E04 1.03204E04 4.26626E03 6.94682E03 7.58783E02 6.14791E02 9.26427E02 1.59802E03 2.00464E03 4.92810E03 2.77950E03 1.96630E04 4.64303E04 7.14836E03 3.61434E03 4.75701E03 5.48984E03 4.11085E03 3.33359E03 8.23201E03 7.36957E03 6.08777E03 1.54839E03 6.01584E02 7.01042E02 3.01951E02 3.06531E02 3.82835E02 5.52901E02 1.05241E03 2.55195E02 1.15350E02 3.51809E02 1.09801E03 1.54242E03 -Frame 40 5.20697E04 1.22687E04 1.95993E03 1.07038E04 1.09393E04 1.00062E04 4.22699E03 2.94892E03 1.22813E03 7.90399E02 1.11971E03 2.31191E02 4.08140E02 2.43875E03 1.53915E03 1.51460E03 1.22777E04 1.29960E04 2.92899E03 2.65090E03 2.61213E03 4.08304E03 3.01380E03 1.18523E03 5.68063E03 1.23600E04 9.90100E03 4.74170E02 1.17699E02 1.71525E02 2.50382E02 1.81471E02 3.71078E02 5.45394E02 3.94816E02 6.89527E01 8.27646E01 2.04848E02 3.03097E02 2.52048E02 -Frame 40 3.68267E04 3.63099E03 3.05107E03 1.62249E04 1.66155E04 8.05698E03 2.69977E03 2.00922E03 2.99553E03 3.66013E03 2.09396E03 6.94207E02 2.03104E03 1.22832E03 2.02562E03 2.78208E03 1.32295E04 1.19488E04 8.57495E03 2.94450E03 2.65639E03 4.81168E03 4.21036E03 1.67397E03 5.84961E03 8.68628E03 1.04936E04 4.29417E03 5.54053E03 2.83637E03 1.43657E03 7.00145E02 5.16311E02 9.71801E02 7.14785E02 1.22358E02 1.19927E02 2.10117E02 2.24033E02 1.41211E02 -Frame 40 8.50620E04 2.47566E04 1.33491E04 3.99531E04 4.43847E04 4.28921E04 6.61594E04 5.50933E04 3.58761E04 3.38984E04 3.51649E04 6.38284E03 2.87983E03 2.25970E03 1.07217E04 2.80967E04 1.13151E05 2.14134E05 3.35653E05 3.68999E04 2.11512E04 1.38715E04 6.74455E03 1.30763E04 1.95772E04 5.88386E04 9.73109E04 6.37296E04 1.08040E05 4.11007E04 1.95040E04 1.45827E04 5.05242E03 2.00449E03 1.96824E03 9.43802E02 2.76687E02 3.01975E02 1.12807E03 5.43335E02 -Frame 40 1.91445E05 5.92708E04 3.35266E04 8.50165E04 1.12224E05 1.43972E05 1.74327E05 6.46176E05 3.87353E05 1.59151E05 2.23705E05 8.62019E04 6.53779E04 3.48263E04 4.12493E04 5.36435E04 3.39465E05 7.02014E05 1.37911E06 4.00910E05 1.03746E05 5.24738E04 2.32867E04 2.35860E04 5.49356E04 2.03651E05 3.06210E05 4.00208E04 2.38037E04 4.32547E04 4.53752E03 1.10140E04 3.54159E04 6.68502E03 1.14711E03 2.25703E03 1.42391E03 1.19641E03 7.13387E02 9.08173E02 -Frame 40 1.89091E05 4.21851E04 3.69699E04 8.05870E04 9.18249E04 1.18097E05 3.21947E05 6.46203E05 5.33365E05 1.66609E05 2.80649E05 1.25246E05 6.62177E04 5.02200E04 3.67912E04 5.64149E04 4.08529E05 1.45974E06 1.84788E06 6.05010E05 9.49418E04 5.11133E04 2.31818E04 3.60102E04 4.70517E04 3.01896E05 3.94538E05 4.44599E04 2.69224E04 5.20766E04 3.66876E03 8.88979E03 3.74807E04 3.52762E04 2.07272E03 1.05986E03 1.13315E04 5.98888E03 3.56431E03 1.16761E03 -Frame 40 1.48488E05 2.07860E04 3.07472E04 8.25772E04 4.43539E04 8.25909E04 2.77453E05 6.13004E05 5.30039E05 2.09250E05 2.57351E05 1.21219E05 5.27602E04 5.89020E04 3.74303E04 1.19658E05 3.36678E05 1.30309E06 4.67992E05 1.72645E05 6.35188E04 2.63584E04 1.20920E04 1.53783E04 1.66363E04 1.39675E05 1.09964E05 1.05385E04 1.37197E04 3.43657E04 2.26557E03 4.35668E03 1.60444E04 1.92299E04 2.86641E03 2.41802E03 2.42281E04 5.40194E03 1.64570E03 6.36977E02 -Frame 40 1.15721E05 1.75754E04 2.78339E04 8.21387E04 2.72276E04 6.24555E04 1.86280E05 6.52042E05 4.38505E05 2.60767E05 2.42198E05 1.36818E05 4.96482E04 5.39847E04 4.23221E04 1.16478E05 8.62476E05 1.61037E06 2.01175E05 8.12195E04 3.70006E04 1.26922E04 7.05883E03 1.23852E04 3.16947E04 1.45646E04 3.07128E04 1.28075E04 1.41156E04 2.81115E04 2.55934E03 1.14259E03 3.01826E03 4.10497E03 1.62127E03 3.79075E03 3.16073E04 3.91519E03 1.37924E03 5.73517E02 -Frame 40 8.78297E04 2.86009E04 3.32148E04 7.35050E04 3.72319E04 6.46516E04 1.66188E05 7.35039E05 4.19966E05 2.93638E05 2.79360E05 1.21158E05 6.00526E04 4.87431E04 4.66830E04 1.72607E05 1.33131E06 9.93425E05 9.85290E04 4.44115E04 2.50928E04 1.07744E04 4.33789E03 1.04166E04 3.83481E04 1.83075E04 9.42359E03 6.67147E03 1.96678E04 3.01764E04 2.80592E03 1.51802E03 2.51280E03 1.56131E03 7.92004E02 4.50562E03 5.53006E04 5.31829E03 1.83032E03 7.49131E02 -Frame 40 7.96972E04 4.15258E04 3.93148E04 5.61051E04 6.65448E04 7.37533E04 1.89109E05 7.99073E05 4.01707E05 2.33331E05 2.83757E05 8.91900E04 6.54355E04 5.17821E04 5.92805E04 1.87280E05 5.55358E05 2.70097E05 2.74892E04 1.45166E04 1.57735E04 6.89255E03 2.56810E03 4.25296E03 1.70507E04 1.51043E04 2.95953E03 3.42210E03 3.43152E04 5.67603E04 3.23863E03 1.36669E03 3.22984E03 2.00890E03 7.84328E02 1.35068E03 2.28405E04 2.08260E03 1.87779E03 4.98776E02 -Frame 40 6.81932E04 3.89950E04 4.18052E04 5.54205E04 6.32589E04 8.22424E04 1.84585E05 7.53597E05 2.51462E05 1.65991E05 2.06667E05 4.96776E04 5.68956E04 3.12637E04 1.05947E05 2.54394E05 2.91272E05 6.42841E04 3.27945E04 1.10788E04 9.19141E03 5.44910E03 1.28721E03 3.28240E03 9.84694E03 1.51324E04 3.73172E03 1.72153E03 1.08272E04 2.56906E04 9.27805E02 6.63962E02 4.51642E03 3.83228E03 6.31132E02 2.02791E03 1.22932E04 1.97619E03 9.20262E02 3.06814E02 -Frame 40 4.82375E04 2.47126E04 3.17739E04 4.24104E04 5.16913E04 5.60485E04 1.36352E05 5.87231E05 1.37006E05 1.74489E05 1.21107E05 2.52780E04 4.91375E04 3.56723E04 9.62928E04 1.99266E05 1.27679E05 1.21820E04 9.76690E03 4.98761E03 3.37802E03 2.13388E03 2.91046E02 6.78674E02 4.49804E03 8.36029E03 2.30464E03 2.68745E03 2.97986E03 1.03112E04 2.59164E03 2.58038E03 2.22933E04 8.42546E03 7.94967E02 2.37387E03 3.34365E04 7.16250E03 5.72136E02 2.53719E02 -Frame 40 3.19515E04 1.93220E04 2.14640E04 2.59686E04 3.91223E04 3.64018E04 1.49054E05 4.61693E05 9.50235E04 1.50161E05 6.15388E04 3.20066E04 3.02882E04 3.20182E04 8.33450E04 2.46652E05 5.73173E04 1.25785E04 6.92091E03 3.41666E03 2.16284E03 1.46552E03 4.87113E02 1.45035E03 5.12128E03 7.40831E03 3.09694E03 2.96472E03 2.06789E03 7.27499E03 1.60943E03 2.97803E03 1.16756E04 2.78740E03 6.42625E02 3.78547E03 1.91844E04 3.96916E03 3.33649E02 2.42457E02 -Frame 40 3.36891E04 1.96402E04 2.13835E04 2.29847E04 4.15608E04 4.26422E04 2.23130E05 4.21313E05 1.26754E05 1.37882E05 6.41548E04 3.23334E04 2.93585E04 3.43561E04 8.05814E04 1.81645E05 3.85667E04 1.08128E04 7.31178E03 3.93750E03 1.91170E03 2.06721E03 7.11626E02 1.21143E03 7.41673E03 7.47553E03 2.20760E03 3.77038E03 2.16211E03 5.58266E03 1.50036E03 9.61778E02 4.01280E03 1.12857E03 4.61847E02 3.71847E03 2.10757E04 5.08658E03 6.39440E02 3.03653E02 -Frame 40 3.51816E04 2.24044E04 2.72499E04 3.31320E04 4.92877E04 5.88450E04 3.04471E05 3.78778E05 1.55365E05 1.22531E05 5.17873E04 3.93282E04 2.73768E04 5.71992E04 1.06558E05 1.77295E05 3.16039E04 9.64880E03 3.55639E03 1.49990E03 7.63479E02 9.43225E02 3.75726E02 1.75338E03 8.30514E03 4.88385E03 2.24406E03 1.80776E03 3.31372E03 4.69502E03 1.35551E03 4.79877E02 3.32579E03 1.03420E03 2.21237E02 1.96816E03 1.87609E04 4.21231E03 5.16906E02 1.60537E02 -Frame 40 2.78341E04 2.12476E04 2.58632E04 2.81774E04 4.23864E04 5.17052E04 3.05724E05 2.42514E05 9.82867E04 1.02512E05 3.16355E04 2.73818E04 1.54280E04 4.57840E04 6.82464E04 8.63812E04 8.63551E03 4.97982E03 2.77790E03 5.00578E02 2.71391E02 3.24184E02 1.95856E02 1.48105E03 5.36443E03 2.40939E03 1.10996E03 1.35763E03 1.27567E03 4.10376E03 7.04002E02 8.62234E02 5.20662E03 1.34438E03 1.42784E02 1.67968E03 7.78017E03 8.57558E02 1.58323E02 5.64842E01 -Frame 40 1.33318E04 1.67273E04 1.49650E04 1.12913E04 2.16071E04 2.81468E04 2.09194E05 1.11645E05 7.50973E04 2.55859E04 3.28114E04 1.36853E04 1.70371E04 2.29604E04 8.22116E04 4.09922E04 5.58601E03 3.05204E03 2.26442E03 5.42467E02 4.11295E02 3.93249E02 4.21497E02 9.47683E02 3.85215E03 1.00758E03 6.11714E02 5.84048E02 4.67687E02 2.28770E03 5.83942E02 3.08985E02 3.19325E03 6.60651E02 1.82287E02 6.37051E02 4.27827E03 1.63609E03 2.02462E02 1.77952E02 -Frame 40 1.62964E04 1.40269E04 1.16181E04 1.12106E04 2.03479E04 3.35290E04 1.81588E05 1.07011E05 6.76629E04 2.52425E04 3.99551E04 1.32587E04 1.64471E04 5.84915E04 1.14453E05 2.88539E04 4.97205E03 2.22362E03 1.15113E03 3.40780E02 5.59833E02 6.69217E02 2.66235E02 9.32038E02 4.37054E03 1.02204E03 4.00088E02 3.77459E02 4.83040E02 1.94167E03 5.54430E02 6.17144E02 6.51372E03 1.75494E03 3.04959E02 1.38604E03 4.31920E03 1.40652E03 2.27934E02 2.17964E02 -Frame 40 2.63244E04 1.41527E04 1.47724E04 1.81023E04 2.28349E04 4.96884E04 1.70523E05 9.09958E04 6.73243E04 2.08608E04 3.94540E04 1.81218E04 1.84200E04 5.77876E04 6.41627E04 1.01256E04 1.58334E03 5.52109E02 4.57965E02 2.76325E02 1.77319E02 6.56589E02 2.89620E02 1.05140E03 2.60299E03 6.51769E02 1.38178E02 2.36015E02 8.13361E02 1.56194E03 4.08158E02 7.68643E02 7.06446E03 1.08938E03 3.78908E02 9.93156E02 2.18879E03 8.64654E02 1.57953E02 2.08867E02 -Frame 40 1.70305E04 1.02916E04 1.17002E04 1.29951E04 1.98652E04 3.64533E04 1.16765E05 4.58361E04 4.71265E04 1.07626E04 3.03274E04 8.52168E03 1.67714E04 7.14844E04 5.53299E04 3.73505E03 2.03221E03 4.06210E02 2.52070E02 4.50182E02 2.53881E02 2.75141E02 2.04449E02 1.49792E03 2.21069E03 4.10933E02 1.51649E02 2.16048E02 4.89039E02 1.65623E03 2.78416E02 5.79681E02 2.87056E03 9.79287E02 3.12038E02 3.64913E02 1.55968E03 2.90390E02 1.02653E02 1.84954E02 -Frame 40 7.55110E03 5.94517E03 6.15722E03 7.49184E03 9.08398E03 1.79086E04 8.92072E04 2.88101E04 3.71207E04 7.28094E03 1.68593E04 8.24272E03 1.29444E04 6.16115E04 2.76422E04 2.81602E03 1.30261E03 5.32072E02 3.73602E02 3.20589E02 3.76690E02 1.53253E02 4.22061E02 1.01604E03 9.03766E02 9.57651E01 1.01149E02 1.30675E02 1.34449E02 5.19628E02 2.11245E02 4.30335E02 2.03438E03 1.05841E03 2.38895E02 1.53328E02 6.77201E02 1.81099E02 1.39027E02 1.04648E02 -Frame 40 1.27189E04 6.62937E03 6.76830E03 1.14765E04 1.54425E04 3.26146E04 1.01942E05 3.35275E04 3.30575E04 1.48075E04 1.52116E04 1.08274E04 2.23972E04 7.73204E04 2.46473E04 2.33889E03 1.32938E03 8.13721E02 5.22158E02 3.04367E02 2.91633E02 2.45872E02 2.22002E02 5.44792E02 3.87157E02 1.08499E02 6.63017E01 1.20504E02 2.81124E02 3.39564E02 2.92529E02 4.68066E02 4.57965E03 1.30751E03 2.98620E02 2.50369E02 1.09974E03 3.64931E02 1.91332E02 1.42459E02 -Frame 40 1.37276E04 7.81019E03 8.05812E03 1.19554E04 1.66873E04 3.84640E04 6.17971E04 2.23692E04 2.14701E04 1.08198E04 1.44753E04 6.19711E03 1.40454E04 3.40067E04 7.62762E03 1.62947E03 6.80977E02 4.77762E02 1.57022E02 7.48409E01 2.16860E02 2.99901E02 2.53948E02 5.64411E02 1.31714E03 2.14546E02 4.69365E01 7.23832E01 2.60141E02 4.61945E02 1.18880E02 4.34308E02 4.98610E03 1.21431E03 1.85277E02 2.85370E02 1.30000E03 6.13417E02 8.93745E01 1.30693E02 -Frame 40 2.74318E03 2.30555E03 2.95697E03 3.95948E03 5.07042E03 1.17035E04 1.92388E04 1.05448E04 4.22433E03 5.47716E03 5.92080E03 6.80498E03 1.99040E04 1.36092E04 2.67804E03 8.66768E02 7.32628E02 1.01024E02 3.79236E02 1.91915E02 1.12952E02 3.48973E02 1.45347E02 2.65761E02 5.45281E02 1.22468E02 7.67511E01 2.92404E01 1.09423E02 2.27487E02 7.97062E01 2.38031E02 5.66882E02 3.54795E02 3.33821E02 2.28849E02 9.14022E02 5.01803E02 1.34960E02 1.34447E02 -Frame 40 5.58906E03 1.32778E03 3.12783E03 3.51269E03 6.02996E03 9.51114E03 1.26576E04 5.76039E03 4.91444E03 2.90655E03 4.94077E03 4.82293E03 1.59109E04 2.08123E04 1.73721E03 6.40894E02 3.81972E02 1.26201E02 1.77744E02 2.17701E02 1.45403E02 5.54776E02 2.96374E02 3.16441E02 1.37643E02 2.98093E01 2.04555E02 1.22501E02 1.96985E02 3.63116E02 1.38977E02 3.61787E02 4.31311E02 2.76240E02 2.58958E02 1.64535E02 2.69041E02 2.86441E02 1.42815E02 1.20589E02 -Frame 40 3.27769E03 1.87597E03 1.32111E03 2.14718E03 1.44143E03 1.70672E03 5.11510E03 1.94291E03 4.23677E03 1.70167E03 3.03528E03 2.68877E03 1.12479E04 1.88413E04 1.42545E03 2.80266E02 4.27354E02 4.87143E01 1.07507E02 2.91018E02 1.68160E02 1.47292E02 9.65607E01 7.24578E02 3.38950E02 5.34176E01 8.93516E01 1.51113E02 9.61697E01 3.08276E02 2.56806E02 2.14234E02 3.46036E02 4.12532E02 3.84529E02 2.27232E02 2.36472E02 2.52561E02 7.28387E01 8.09897E01 -Frame 40 4.78498E03 1.96746E03 4.62086E03 3.37255E03 5.14371E03 1.01736E04 6.40914E03 4.97405E03 3.12560E03 3.44055E03 3.00902E03 4.74839E03 1.12149E04 7.63743E03 1.14967E03 3.01546E02 4.38006E02 4.33299E02 6.77732E01 8.99087E01 1.25135E02 3.08765E02 7.46051E01 7.26034E02 3.33124E02 7.27263E01 1.09053E02 1.24085E02 1.30121E02 4.73534E02 1.98571E02 4.97416E02 8.28675E02 4.55631E02 3.52869E02 1.60616E02 2.03347E02 2.38217E02 8.49301E01 8.22198E01 -Frame 40 2.43479E03 8.24551E02 7.67608E02 1.62344E03 2.85355E03 6.26373E03 4.52377E03 1.75913E03 1.47675E03 2.10830E03 2.10815E03 2.84117E03 1.44107E04 4.17100E03 3.49391E02 2.53483E02 7.97270E01 7.11774E01 4.61748E01 9.32973E01 1.07318E02 7.67471E01 3.94948E01 1.81616E02 1.05175E02 5.52669E01 1.55051E02 1.57971E02 6.98240E01 5.32867E02 1.96852E02 3.20809E02 2.38761E02 2.53535E02 2.76742E02 2.28321E02 8.52327E01 1.05110E02 1.20166E02 1.45968E02 -Frame 40 1.70782E02 2.84529E02 5.68488E01 5.78513E01 4.44685E01 6.55727E01 2.63178E02 1.41077E02 7.80519E01 2.57081E02 3.19806E02 5.11866E02 7.92579E02 2.26467E02 1.59497E02 1.08838E02 5.16841E01 1.26501E02 9.24279E01 1.59580E02 6.70862E01 8.29460E01 2.43402E01 8.69850E01 6.12258E01 4.71768E01 8.41961E01 7.54680E01 8.12429E01 1.31550E02 1.44509E02 4.41982E02 1.99242E02 1.36850E02 2.50209E02 2.01182E02 1.07877E02 7.19005E01 1.07778E02 4.91584E01 -Frame 40 2.59195E03 1.50425E03 1.19819E03 1.40451E03 1.43853E03 2.79516E03 1.79790E03 7.70125E02 4.50292E02 1.65836E03 7.56780E02 1.36191E03 1.48632E03 2.87571E02 2.30386E02 1.10996E02 1.59843E02 1.12770E02 3.47345E01 2.14584E01 3.00679E01 6.84312E01 3.98968E01 7.02851E01 1.51178E02 7.86555E01 9.46998E01 1.26251E02 2.17036E02 1.24763E02 7.72242E01 2.01519E02 1.55665E02 1.23563E02 2.41453E02 1.30333E02 1.48209E02 7.96801E01 1.02369E02 8.43163E01 -Frame 40 1.18993E03 3.41240E02 2.36608E02 3.72049E02 3.62624E02 1.97713E03 6.62110E02 1.70496E02 1.26641E02 7.24138E02 1.38221E03 2.78202E03 1.00059E03 1.96895E02 5.86577E01 2.48443E01 4.02154E01 3.41938E01 3.11143E01 6.34684E01 6.63172E01 1.12294E02 3.28451E01 2.72704E02 4.91993E02 6.12128E01 6.17309E01 1.08867E02 2.11854E02 3.96822E02 1.69821E02 1.57350E02 2.67328E02 3.53630E02 5.22106E02 2.27846E02 1.34535E02 9.63444E01 1.24888E02 1.49430E02 -Frame 40 3.01410E02 1.19387E02 9.83786E01 2.60227E01 6.54639E01 5.77406E01 6.26741E01 9.42218E01 1.96324E02 1.20832E02 2.30498E02 2.06417E02 4.29266E02 3.05427E02 6.63838E01 6.59183E00 1.92492E01 3.84378E01 6.07662E01 4.73292E01 7.91982E01 1.89469E01 2.78931E01 5.89882E01 2.72441E02 4.30452E01 6.08102E01 1.74093E02 1.46099E02 1.01198E02 1.27038E02 1.51376E02 4.00350E02 3.48971E02 2.98105E02 2.29842E02 1.65153E02 1.83471E02 8.69232E01 1.62573E02 -Frame 40 1.04233E03 2.28583E02 1.78394E02 1.62826E02 7.53957E01 1.15336E02 2.36876E02 7.44354E01 1.04337E02 2.72903E02 2.86822E02 3.13502E02 2.47169E02 2.11213E02 1.05814E02 1.05094E02 1.37396E02 1.10419E02 2.99215E02 2.44040E02 6.91535E01 5.40263E01 2.83229E01 1.06837E02 1.66827E02 3.38561E01 4.19761E01 1.01793E02 7.83332E01 7.83584E01 5.03434E01 5.65123E01 1.22415E02 2.47053E02 2.69005E02 6.30261E01 1.06402E02 1.34044E02 1.43925E02 1.21702E02 -Frame 40 2.18499E02 1.92312E02 3.23507E01 7.89259E00 3.13546E01 2.83799E01 6.19651E01 4.97377E01 7.21941E01 2.68740E02 2.12090E02 4.15846E02 1.44607E02 1.03818E02 9.17960E01 4.29574E01 1.07524E02 5.90354E01 1.42514E02 3.14766E02 1.74356E02 8.26983E01 3.68662E01 6.12675E01 7.61962E01 4.67851E01 8.09309E01 1.19684E02 5.09881E01 8.33696E01 1.47258E02 1.03916E02 1.33966E02 2.18793E02 2.95450E02 1.03541E02 1.45147E02 8.33932E01 1.47885E02 9.90613E01 -Frame 40 4.88662E01 1.06856E01 8.44532E00 8.21664E00 1.31656E01 1.74351E01 7.56352E01 6.92331E01 9.25310E01 1.98261E02 2.22996E02 3.00181E02 1.20165E02 3.93882E01 5.31660E01 2.28858E01 6.04741E01 3.23077E01 7.11894E01 1.54772E02 7.17675E01 1.20472E02 5.63286E01 1.17103E02 5.16542E01 5.20380E01 7.52611E01 1.53614E02 6.56674E01 6.48215E01 1.44340E02 1.21146E02 9.74606E01 1.55703E02 2.31329E02 1.68442E02 1.23367E02 8.63150E01 1.83430E02 8.87578E01 -Frame 40 4.02118E01 4.35848E01 1.07478E01 3.86882E01 2.34618E01 6.06079E01 9.73462E01 4.54401E01 8.35316E01 1.05110E02 1.25189E02 2.41016E02 9.07402E01 6.57945E01 9.01872E01 1.30128E02 1.46740E02 6.36495E01 7.16624E01 7.83267E01 5.78879E01 8.71543E01 6.38628E01 1.82049E02 1.70682E02 1.91889E02 1.21552E02 1.13249E02 8.86930E01 4.07911E01 8.61262E01 1.43532E02 1.17819E02 2.59393E02 3.53509E02 1.03175E02 1.98820E02 1.22730E02 8.28243E01 9.06150E01 -Frame 40 1.15147E01 1.51068E01 1.59656E01 5.19179E01 3.37057E01 3.12205E01 1.50470E01 3.93117E01 3.72860E01 1.13986E02 1.22839E02 1.87040E02 1.20592E02 1.01562E02 4.00413E01 5.52061E01 8.17561E01 3.12893E01 5.53557E01 5.86131E01 5.62591E01 1.37700E02 5.39355E01 6.23312E01 8.00287E01 1.56472E02 1.03873E02 2.39673E02 1.39167E02 4.79208E01 3.57748E01 2.20519E02 1.52435E02 3.11954E02 3.39396E02 1.63108E02 1.51249E02 1.59599E02 7.05762E01 6.62384E01 -Frame 40 4.72677E00 5.92687E01 4.71707E01 1.56356E01 8.52881E00 2.99577E01 4.80710E01 1.64301E01 8.34382E00 4.91861E01 1.68271E02 5.04739E01 1.28664E02 8.57693E01 2.05046E01 4.83915E01 2.53220E01 1.84623E01 3.99517E01 1.18253E02 2.33304E01 8.84077E01 4.09039E01 2.00432E01 4.50226E01 7.79850E01 4.68397E01 8.00960E01 8.07675E01 5.92469E01 7.46029E01 1.56800E02 2.45079E02 2.18169E02 2.52986E02 1.26639E02 9.28445E01 1.60276E02 2.02368E02 7.56743E01 -Frame 40 1.52827E-01 2.09120E01 1.54503E01 5.27697E00 1.56965E01 1.42389E01 4.15598E01 7.66702E01 2.79412E01 5.25589E01 2.47185E01 2.44406E01 5.57797E01 5.23444E01 5.21582E01 2.19883E01 2.98958E01 1.42689E01 4.82989E01 8.75409E01 1.99132E01 1.55565E02 7.44954E01 4.59267E01 1.91612E01 9.11521E01 1.24823E02 5.51011E01 4.31221E01 5.70613E01 5.79703E01 1.46460E02 1.34543E02 1.89688E02 2.33819E02 2.88866E02 1.20899E02 1.23382E02 5.58678E01 3.95717E01 -Frame 40 4.82227E00 2.07486E01 6.84577E00 4.57384E00 4.79096E00 1.09300E01 1.20769E01 1.10196E01 8.83288E00 2.98983E01 4.71352E01 2.53976E01 1.62381E02 1.46370E02 5.35617E01 4.87275E01 7.46190E01 4.19884E01 4.67823E01 1.06707E02 5.89071E01 1.92901E02 9.71505E01 6.60374E01 4.99905E01 5.45833E01 1.04882E02 1.13748E02 1.53519E02 8.77289E01 5.59957E01 1.01844E02 1.43223E02 2.41128E02 2.26220E02 6.67195E01 9.86793E01 2.47426E02 8.86226E01 6.12802E01 -Frame 40 2.90678E01 8.41451E01 3.89472E01 1.33462E00 3.48466E00 1.57751E01 2.11738E01 6.70670E01 2.04177E01 2.45434E01 2.96079E01 7.71724E00 1.63664E02 9.51438E01 4.09059E01 1.64579E01 3.14721E01 4.70268E01 5.72608E01 1.06139E02 6.29798E01 1.43279E02 6.87708E01 6.55973E01 5.48542E01 3.32915E01 1.31371E02 1.44314E02 9.80735E01 8.68055E01 9.57780E01 3.00791E02 1.57447E02 1.92880E02 1.37077E02 4.59235E01 8.66528E01 2.86983E02 1.75500E02 7.47352E01 -Frame 40 1.65269E01 1.86886E01 1.75732E01 2.28089E01 6.02365E01 1.11268E02 5.59911E01 9.75902E01 1.00261E02 1.59758E02 3.59675E01 2.64830E01 1.63403E02 1.30085E02 1.40056E02 5.72898E01 5.51721E01 1.82222E02 1.08888E02 1.16532E02 2.75030E01 9.66250E01 6.79311E01 1.01486E02 6.57800E01 4.80584E01 6.31955E01 1.81017E02 1.48928E02 6.95696E01 5.71319E01 1.64919E02 1.60286E02 5.71070E01 8.91429E01 1.73885E02 8.23164E01 9.63862E01 1.50022E02 6.88465E01 -Frame 40 9.44980E00 3.41738E01 2.58571E01 1.18035E01 1.98122E01 8.19774E00 1.97719E01 1.80676E01 1.08847E01 9.18513E01 6.86671E01 1.65541E01 1.02364E01 1.48059E01 6.92040E01 1.01383E02 6.66166E01 4.71434E01 5.39588E01 1.38413E02 3.51953E01 5.31306E01 2.72483E01 2.28413E01 8.50470E01 9.31364E01 5.60338E01 1.05678E02 1.14260E02 1.25292E02 9.48811E01 1.55955E02 1.12907E02 1.64908E02 3.56001E02 2.23402E02 6.23226E01 8.55531E01 1.50477E02 8.80822E01 -Signal: SpeechEndSignal -Signal: DataEndSignal: creation time: 1422745326979, duration: 5235ms diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-preemp.dump b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-preemp.dump deleted file mode 100755 index b33d5f7a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-preemp.dump +++ /dev/null @@ -1,323 +0,0 @@ -Signal: DataStartSignal: creation time: 1422745323757 -Signal: SpeechStartSignal -Frame 160 8.50000E01 -3.45000E00 2.37000E00 5.37000E00 4.46000E00 -1.48000E00 1.40000E00 3.37000E00 -6.00000E-01 3.10000E-01 4.25000E00 3.10000E-01 2.25000E00 -2.75000E00 1.10000E00 -1.93000E00 -4.05000E00 4.77000E00 8.60000E-01 -3.17000E00 1.68000E00 6.80000E-01 -4.35000E00 1.47000E00 3.47000E00 -3.47000E00 3.38000E00 1.44000E00 7.44000E00 -1.38000E00 -4.70000E-01 7.47000E00 -4.35000E00 -5.53000E00 3.26000E00 -4.68000E00 -1.86000E00 9.05000E00 -7.10000E-01 -1.77000E00 1.14000E00 -3.86000E00 -4.01000E00 -1.16000E00 3.78000E00 3.87000E00 -2.04000E00 2.87000E00 4.93000E00 2.05000E00 -4.92000E00 -2.10000E00 5.81000E00 2.96000E00 -1.29800E01 -4.40000E00 -2.55000E00 -2.64000E00 -2.73000E00 1.18000E00 -3.79000E00 9.00000E-02 -1.91000E00 2.03000E00 -9.10000E-01 1.06000E00 1.09000E00 -8.80000E-01 -2.91000E00 -4.00000E00 -1.12000E00 1.85000E00 -5.09000E00 1.76000E00 3.82000E00 -6.06000E00 -3.24000E00 -3.33000E00 -1.42000E00 -5.45000E00 2.40000E00 3.49000E00 1.61000E00 2.67000E00 -1.24000E00 1.73000E00 -5.21000E00 -1.36000E00 -7.39000E00 -7.60000E00 -8.10000E-01 -1.08100E01 2.89000E00 3.01000E00 3.13000E00 3.25000E00 3.70000E-01 -5.60000E00 7.25000E00 5.49000E00 -4.33000E00 -2.45000E00 -5.10000E-01 -3.51000E00 3.40000E00 -6.48000E00 -1.36600E01 3.95000E00 -1.90000E00 -9.30000E-01 -4.93000E00 2.95000E00 -9.30000E-01 -2.93000E00 6.01000E00 -6.78000E00 4.00000E-02 3.07000E00 1.19000E00 2.50000E-01 -6.72000E00 1.00000E-01 8.13000E00 -6.00000E-01 4.00000E-01 -2.57000E00 3.70000E-01 2.40000E00 2.49000E00 -1.42000E00 -4.50000E-01 5.50000E-01 1.58000E00 -3.36000E00 -5.45000E00 7.40000E00 -6.36000E00 -6.54000E00 1.28000E00 1.34000E00 -3.60000E00 -6.90000E-01 3.10000E-01 -2.66000E00 2.80000E-01 -1.69000E00 -6.72000E00 -3.90000E00 5.01000E00 1.01900E01 -7.48000E00 3.10000E-01 -1.66000E00 -6.90000E-01 -1.69000E00 -7.72000E00 4.07000E00 7.22000E00 -5.54000E00 1.31000E00 -Frame 160 -2.63000E00 -2.69000E00 2.50000E-01 2.80000E-01 -7.69000E00 5.10000E00 -7.20000E-01 -4.72000E00 1.60000E-01 3.19000E00 3.10000E-01 3.40000E-01 -6.63000E00 -8.10000E-01 -1.81000E00 -2.84000E00 1.00000E-01 2.13000E00 1.22000E00 -1.72000E00 2.50000E-01 4.28000E00 -5.57000E00 -3.72000E00 6.19000E00 2.40000E00 -3.51000E00 -4.60000E00 2.80000E-01 6.31000E00 5.52000E00 2.70000E00 -4.21000E00 6.70000E-01 -3.30000E00 -5.39000E00 2.46000E00 7.55000E00 -4.21000E00 -1.33000E00 5.64000E00 -3.18000E00 -1.27000E00 -3.00000E-01 5.70000E00 3.88000E00 -2.00000E00 -6.00000E-02 8.94000E00 5.21000E00 -6.64000E00 1.50000E-01 5.15000E00 3.30000E00 -6.61000E00 -1.82000E00 2.12000E00 1.18000E00 2.21000E00 -2.73000E00 -2.82000E00 6.09000E00 2.70000E-01 -2.73000E00 6.18000E00 -7.64000E00 -2.88000E00 6.03000E00 3.21000E00 -1.70000E00 -1.07600E01 -6.09000E00 7.30000E-01 -1.24000E00 -7.27000E00 5.20000E-01 6.55000E00 8.76000E00 1.03000E00 -6.94000E00 6.85000E00 1.06000E00 -2.91000E00 9.00000E00 2.27000E00 9.33000E00 8.60000E00 7.84000E00 -1.49500E01 -1.04300E01 -2.76000E00 6.15000E00 -2.67000E00 -7.60000E-01 3.21000E00 5.30000E00 -5.55000E00 -6.73000E00 4.06000E00 5.18000E00 -1.36700E01 5.91000E00 3.09000E00 3.18000E00 -4.73000E00 -1.88000E00 2.06000E00 1.20000E-01 -3.88000E00 4.00000E00 -2.88000E00 -4.97000E00 1.88000E00 6.94000E00 1.15000E00 -8.20000E-01 1.50000E-01 4.15000E00 -7.30000E-01 -1.07600E01 -3.09000E00 -6.18000E00 -5.36000E00 -2.51000E00 6.43000E00 -8.36000E00 2.40000E00 4.90000E-01 -9.48000E00 3.25000E00 -6.30000E-01 3.70000E-01 4.40000E00 5.50000E-01 -5.42000E00 -2.57000E00 3.70000E-01 -4.60000E00 -1.72000E00 -7.50000E-01 4.25000E00 -3.60000E00 -3.69000E00 2.22000E00 1.31000E00 -2.63000E00 -2.69000E00 2.25000E00 -5.66000E00 -2.81000E00 1.30000E-01 -8.40000E-01 -1.84000E00 -1.87000E00 1.00000E-01 -9.87000E00 -5.14000E00 -3.26000E00 -5.32000E00 -3.44000E00 -Frame 160 -7.50000E00 1.33200E01 -6.23000E00 -7.38000E00 3.44000E00 4.59000E00 -2.02300E01 -1.80000E00 2.00000E-01 -5.74000E00 2.14000E00 -1.74000E00 -4.74000E00 -1.08300E01 -1.10000E00 -3.07000E00 -6.10000E00 -2.20000E-01 -3.16000E00 -7.19000E00 -4.34000E00 4.60000E00 -5.19000E00 -1.12800E01 -7.55000E00 -1.70000E00 -1.67000E00 -4.64000E00 -2.70000E00 -8.70000E00 -1.88000E00 1.50000E-01 -2.76000E00 -7.60000E-01 -5.70000E00 -2.79000E00 1.21000E00 -1.67000E00 -6.64000E00 -2.76000E00 -1.27600E01 -6.06000E00 -5.15000E00 -7.21000E00 -4.33000E00 -9.36000E00 -4.54000E00 5.43000E00 -1.30000E00 -1.02400E01 -2.45000E00 -1.42000E00 -3.36000E00 3.64000E00 -8.15000E00 -7.30000E00 -1.14200E01 -2.66000E00 -7.63000E00 -3.75000E00 6.25000E00 -1.45000E00 -9.39000E00 -8.57000E00 -5.72000E00 -8.78000E00 -1.93000E00 -1.87000E00 -6.81000E00 1.00000E-01 -3.78000E00 -1.78000E00 -6.72000E00 1.19000E00 -2.66000E00 -3.63000E00 -2.63000E00 2.40000E00 -3.42000E00 1.58000E00 6.73000E00 3.03000E00 -4.79000E00 -5.85000E00 -9.40000E-01 -8.80000E-01 -8.82000E00 -5.00000E00 -1.06000E00 -7.00000E00 -1.12000E00 -1.06000E00 -2.00000E00 6.03000E00 -7.00000E-01 -6.40000E-01 4.42000E00 -9.37000E00 -3.58000E00 8.39000E00 2.72000E00 6.87000E00 -1.86000E00 -4.86000E00 -5.95000E00 -4.07000E00 1.87000E00 -8.01000E00 -2.19000E00 -5.19000E00 -1.52800E01 2.33000E00 -1.52000E00 -1.49000E00 -4.46000E00 -5.20000E-01 6.54000E00 6.81000E00 -5.92000E00 -6.04000E00 -6.16000E00 -4.28000E00 2.66000E00 3.81000E00 -2.01000E00 -1.01000E00 -1.98000E00 -3.98000E00 -1.04000E00 -6.01000E00 -9.13000E00 -3.34000E00 -6.37000E00 5.10000E-01 -6.40000E00 -3.52000E00 -5.55000E00 -2.64000E00 -6.40000E-01 -3.58000E00 -3.61000E00 -6.40000E-01 -4.58000E00 1.36000E00 1.48000E00 -3.40000E00 -6.43000E00 1.45000E00 5.70000E-01 -1.34000E00 -1.31000E00 -1.22800E01 -6.58000E00 -7.00000E-01 3.60000E-01 -2.55000E00 -2.55000E00 4.50000E-01 5.40000E-01 4.63000E00 -Frame 160 -1.16000E00 8.70000E-01 -3.04000E00 1.93000E00 3.05000E00 -3.80000E00 -8.60000E-01 -2.83000E00 -7.86000E00 -6.04000E00 7.84000E00 -1.86000E00 -2.86000E00 -8.90000E-01 -6.86000E00 -1.00100E01 2.75000E00 -8.10000E00 -8.28000E00 6.54000E00 5.81000E00 3.05000E00 -3.80000E00 -2.86000E00 -5.89000E00 -7.01000E00 8.40000E-01 9.30000E-01 -7.98000E00 -1.16000E00 5.87000E00 -1.89000E00 -8.90000E-01 -8.60000E-01 -2.83000E00 1.40000E-01 1.20000E00 -4.71000E00 -1.08000E01 1.93000E00 2.05000E00 -4.83000E00 7.08000E00 -1.65000E00 3.50000E-01 -3.59000E00 4.35000E00 4.53000E00 7.10000E-01 -5.23000E00 -2.35000E00 2.62000E00 -2.26000E00 -2.90000E-01 -4.26000E00 -3.35000E00 2.59000E00 -6.29000E00 -4.40000E-01 -3.41000E00 5.30000E-01 2.59000E00 -8.29000E00 -6.50000E00 -6.50000E-01 -6.20000E-01 -5.59000E00 -1.71000E00 5.29000E00 -2.50000E00 -1.53000E00 -1.15300E01 1.17000E00 2.60000E-01 1.32000E00 -6.59000E00 -3.74000E00 2.20000E00 -6.80000E-01 -4.65000E00 -6.74000E00 -2.89000E00 4.08000E00 -4.74000E00 2.17000E00 6.29000E00 -1.04700E01 -1.74000E00 1.26000E00 -1.65000E00 6.35000E00 -9.41000E00 2.35000E00 6.47000E00 -4.29000E00 -1.38000E00 6.20000E-01 5.68000E00 -3.11000E00 -7.17000E00 -2.35000E00 6.20000E-01 -5.32000E00 -4.40000E-01 5.90000E-01 -7.35000E00 -1.53000E00 4.47000E00 -5.35000E00 -5.47000E00 4.10000E-01 -4.53000E00 -2.62000E00 1.35000E00 2.44000E00 -5.44000E00 -4.56000E00 8.35000E00 -7.35000E00 -8.53000E00 -7.40000E-01 -3.71000E00 -6.77000E00 2.08000E00 2.00000E-01 2.26000E00 -3.62000E00 -6.68000E00 -4.83000E00 -1.92000E00 -1.92000E00 -2.92000E00 1.05000E00 1.14000E00 -1.77000E00 -3.77000E00 -9.83000E00 -7.00000E-02 9.90000E-01 -7.92000E00 -5.10000E00 -1.19000E00 -4.16000E00 -1.02200E01 -5.46000E00 4.50000E-01 -4.46000E00 -1.05200E01 2.24000E00 -6.10000E-01 4.50000E-01 -1.46000E00 -1.43000E00 -2.40000E00 -1.40000E00 7.63000E00 -5.07000E00 -9.16000E00 6.30000E-01 2.72000E00 -Frame 160 -6.13000E00 -5.25000E00 6.66000E00 1.93000E00 4.05000E00 1.23000E00 -3.68000E00 -7.74000E00 3.08000E00 -5.77000E00 -8.89000E00 7.90000E00 2.20000E00 -2.68000E00 -5.71000E00 1.17000E00 4.26000E00 -3.56000E00 3.38000E00 5.53000E00 7.74000E00 -2.99000E00 9.50000E-01 4.01000E00 -6.84000E00 -5.02000E00 -1.14000E00 8.60000E-01 1.92000E00 -2.99000E00 1.95000E00 1.04000E00 -9.00000E-01 9.10000E00 1.40000E00 -9.54000E00 -8.10000E-01 3.19000E00 3.31000E00 -5.70000E-01 -3.57000E00 6.34000E00 -3.45000E00 4.60000E-01 1.49000E00 -2.45000E00 4.49000E00 7.64000E00 -2.12000E00 3.82000E00 7.94000E00 -8.20000E-01 -3.85000E00 2.03000E00 7.09000E00 -2.70000E00 -2.79000E00 1.12000E00 6.15000E00 -6.70000E-01 -3.70000E00 2.18000E00 2.24000E00 -4.70000E00 1.15000E00 -4.82000E00 8.03000E00 5.27000E00 2.42000E00 8.48000E00 7.20000E-01 -1.28000E00 -3.34000E00 6.54000E00 -2.80000E-01 -1.31000E00 -2.37000E00 5.40000E-01 2.54000E00 -4.40000E00 -5.55000E00 1.27000E00 9.30000E00 -1.43000E00 2.51000E00 2.57000E00 6.30000E-01 6.30000E-01 2.63000E00 6.69000E00 -2.13000E00 8.78000E00 5.02000E00 -4.86000E00 7.96000E00 1.01700E01 -3.56000E00 2.90000E-01 7.26000E00 -1.56000E00 3.50000E-01 5.32000E00 -6.56000E00 2.00000E-01 3.17000E00 5.23000E00 6.35000E00 1.50000E00 -2.50000E00 7.38000E00 8.56000E00 5.77000E00 -2.11000E00 -2.30000E-01 7.71000E00 7.89000E00 6.07000E00 3.19000E00 5.22000E00 -6.90000E-01 4.22000E00 1.42800E01 -3.60000E-01 -2.45000E00 2.40000E00 3.40000E00 4.43000E00 7.49000E00 -3.60000E-01 4.55000E00 4.61000E00 1.67000E00 1.64000E00 8.61000E00 1.47900E01 1.15000E00 1.09000E00 1.10300E01 1.42700E01 -4.40000E00 -3.64000E00 1.11500E01 6.39000E00 5.48000E00 7.54000E00 6.66000E00 9.75000E00 1.09300E01 6.14000E00 5.20000E00 8.23000E00 9.35000E00 3.50000E00 2.47000E00 5.41000E00 2.44000E00 9.38000E00 9.53000E00 -2.32000E00 1.47000E00 -Frame 160 1.43800E01 9.68000E00 -3.17000E00 4.59000E00 7.59000E00 1.26800E01 9.20000E-01 4.80000E00 4.80000E00 -3.20000E00 5.60000E-01 5.44000E00 1.04700E01 1.65000E00 2.56000E00 1.15000E01 -2.29000E00 5.50000E00 -4.70000E-01 5.38000E00 6.41000E00 1.44700E01 -2.23000E00 -7.44000E00 3.20000E00 2.17000E00 5.11000E00 -8.60000E-01 2.99000E00 4.96000E00 4.99000E00 -1.09800E01 -3.43000E00 7.36000E00 2.48000E00 -5.50000E-01 3.33000E00 5.33000E00 -4.61000E00 -8.50000E-01 -9.70000E-01 -9.00000E-02 4.82000E00 2.88000E00 1.88000E00 -2.15000E00 -2.30000E00 6.55000E00 2.67000E00 2.67000E00 -5.33000E00 -5.70000E-01 5.34000E00 4.43000E00 -5.51000E00 -4.75000E00 -3.96000E00 8.60000E-01 1.83000E00 3.83000E00 7.89000E00 -6.93000E00 -3.20000E00 2.65000E00 -1.32000E00 -3.41000E00 4.44000E00 1.53000E00 5.30000E-01 3.50000E00 -2.44000E00 -6.56000E00 6.20000E00 2.35000E00 -6.62000E00 4.14000E00 3.23000E00 -7.10000E-01 2.30000E-01 6.20000E00 3.35000E00 -1.59000E00 -6.80000E-01 6.26000E00 8.41000E00 4.62000E00 2.71000E00 1.87400E01 -7.50000E-01 -2.84000E00 1.30100E01 7.34000E00 2.49000E00 9.49000E00 6.70000E00 2.82000E00 6.82000E00 4.94000E00 4.00000E00 2.03000E00 6.00000E00 2.40900E01 8.72000E00 2.87000E00 8.84000E00 4.99000E00 1.00200E01 1.02000E01 1.03800E01 1.05600E01 8.74000E00 5.86000E00 4.89000E00 1.58900E01 8.22000E00 1.03100E01 8.46000E00 1.55500E01 8.85000E00 -5.06000E00 6.61000E00 1.26400E01 9.85000E00 3.97000E00 5.91000E00 3.91000E00 2.85000E00 3.76000E00 1.70000E00 8.58000E00 6.70000E-01 2.52000E00 1.14300E01 6.10000E-01 3.46000E00 4.00000E-01 6.25000E00 3.28000E00 1.22000E00 -9.00000E-01 -6.08000E00 6.59000E00 4.65000E00 4.65000E00 -3.50000E-01 2.50000E00 4.44000E00 -5.56000E00 2.14000E00 2.08000E00 -4.98000E00 2.75000E00 -7.28000E00 -2.61000E00 2.10000E-01 -1.88000E00 -1.03000E00 -3.15000E00 -3.33000E00 5.49000E00 -Frame 160 -3.42000E00 -1.60000E00 3.28000E00 2.31000E00 3.10000E-01 -2.75000E00 -9.00000E-01 4.01000E00 -7.93000E00 -3.23000E00 -4.38000E00 -1.56000E00 -1.65000E00 -5.74000E00 1.05000E00 -3.95000E00 -1.00000E-01 4.87000E00 -4.01000E00 -5.16000E00 6.60000E-01 -2.34000E00 -2.43000E00 1.48000E00 -1.49000E00 -5.55000E00 -1.73000E00 -1.79000E00 -8.50000E-01 -2.88000E00 -3.97000E00 -4.09000E00 -2.10000E-01 7.90000E-01 -5.18000E00 -5.33000E00 5.20000E-01 -4.45000E00 -1.57000E00 -1.60000E00 5.37000E00 3.55000E00 -1.33000E00 8.64000E00 1.29100E01 3.00000E-01 7.30000E00 1.45100E01 1.89300E01 2.24700E01 1.71000E01 2.05500E01 2.60900E01 2.87800E01 3.45300E01 2.74300E01 1.90900E01 2.34800E01 2.39900E01 2.45000E01 1.90100E01 2.93400E01 1.59700E01 7.18000E00 1.11200E01 8.18000E00 2.15000E00 2.94000E00 6.76000E00 2.70000E00 -4.80000E-01 -2.75000E00 3.92000E00 4.80000E00 7.10000E-01 3.50000E00 8.38000E00 5.41000E00 6.35000E00 1.43200E01 3.53000E00 3.41000E00 1.22900E01 -5.60000E-01 1.02000E01 3.29000E00 -3.83000E00 4.84000E00 7.80000E-01 7.60000E00 6.63000E00 -1.37000E00 7.39000E00 3.42000E00 -2.67000E00 1.00600E01 5.18000E00 6.15000E00 -8.50000E-01 1.09400E01 9.09000E00 -1.82000E00 3.94000E00 -9.12000E00 5.43000E00 -3.57000E00 -6.84000E00 -5.20000E00 3.50000E00 -4.53000E00 -1.38000E01 6.60000E-01 -1.04300E01 -1.08500E01 -5.27000E00 -1.45100E01 2.98000E00 -3.99000E00 -1.51700E01 -7.68000E00 -3.95000E00 -9.10000E00 -1.44000E01 1.50000E-01 -8.50000E-01 -9.88000E00 -6.18000E00 -6.36000E00 -9.54000E00 -1.38100E01 -9.20000E00 -1.04400E01 -8.71000E00 -1.49200E01 -1.43100E01 -5.67000E00 -1.57600E01 -2.15000E00 -1.20000E-01 -1.60300E01 -4.42000E00 -6.45000E00 -9.54000E00 -5.72000E00 -1.07800E01 -1.09900E01 -5.20000E00 -1.32300E01 -1.55000E01 -8.83000E00 -1.29500E01 -9.19000E00 -1.63100E01 -1.26400E01 -1.38500E01 -1.70900E01 -1.64200E01 -1.97200E01 -2.51100E01 -1.46500E01 -Frame 160 -6.86000E00 -1.48300E01 -1.50400E01 -3.25000E00 1.39000E01 3.35600E01 2.97900E01 2.78700E01 2.08600E01 3.66100E01 4.08100E01 5.51000E01 5.47800E01 5.04000E01 4.68400E01 4.91300E01 4.04500E01 2.54700E01 2.10100E01 1.14000E01 5.49000E00 -7.60000E00 -8.08000E00 -1.55600E01 -2.72500E01 -2.52700E01 -2.52000E01 -3.21000E01 -1.91800E01 -8.84000E00 -4.17000E00 -4.35000E00 -4.53000E00 1.62900E01 5.74000E00 1.58600E01 2.32800E01 1.39100E01 -7.60000E-01 1.20000E-01 -6.97000E00 -4.27000E00 -3.48000E00 -9.66000E00 -2.00200E01 -1.36800E01 -1.01300E01 -2.54600E01 -9.24000E00 -5.10000E-01 -7.51000E00 -7.72000E00 1.07000E00 1.01300E01 7.46000E00 1.67000E01 1.32100E01 9.60000E00 1.28700E01 1.52300E01 2.65000E00 1.06800E01 -3.05000E00 -1.22000E01 -6.62000E00 -6.86000E00 -1.41000E01 -1.25500E01 -1.69400E01 -2.14500E01 -1.50800E01 -5.50000E00 -7.62000E00 -7.80000E00 -4.98000E00 -1.07000E00 9.60000E-01 4.05000E00 8.23000E00 6.53000E00 1.27700E01 2.11900E01 1.68500E01 1.43600E01 9.78000E00 2.30500E01 1.57100E01 1.01300E01 1.43700E01 3.73000E00 3.76000E00 1.79000E00 -4.24000E00 1.55000E00 -1.14800E01 -1.49000E01 -4.41000E00 -8.59000E00 -1.38900E01 -4.34000E00 -4.90000E-01 -2.52000E00 -6.61000E00 1.80000E-01 -6.82000E00 1.29700E01 1.23600E01 -3.28000E00 6.00000E-01 -4.00000E-01 -3.43000E00 -2.55000E00 -2.64000E00 -7.73000E00 -1.19700E01 -2.13300E01 -1.19600E01 -4.29000E00 -2.13800E01 -1.49800E01 -2.73700E01 -1.21200E01 -3.90000E-01 -2.33000E01 -1.29000E01 -3.17000E00 -9.14000E00 -7.29000E00 -1.33800E01 -8.65000E00 -3.77000E00 -2.77400E01 -4.30000E-01 -9.28000E00 -3.44000E01 -1.02700E01 -7.39000E00 -3.34200E01 -2.02300E01 -1.76200E01 -3.19200E01 -2.76400E01 -1.62100E01 -1.44200E01 -3.05700E01 -3.02000E01 -1.28000E01 -3.58600E01 -4.16100E01 -1.95100E01 -3.97200E01 -4.25300E01 -3.34000E01 -3.99700E01 -3.27200E01 -1.92300E01 -1.53200E01 1.17100E01 2.45500E01 4.17500E01 -Frame 160 6.74300E01 6.88300E01 6.82000E01 9.74800E01 1.04570E02 1.03780E02 9.68700E01 8.96600E01 8.41500E01 5.44000E01 3.76900E01 5.04400E01 1.05500E01 -1.25700E01 -1.53800E01 -4.22500E01 -5.59000E01 -5.39100E01 -6.08000E01 -7.08400E01 -5.71200E01 -3.89200E01 -3.51200E01 -1.41700E01 1.44000E00 5.53000E00 1.77400E01 2.23100E01 3.70000E01 2.01100E01 3.36800E01 4.06400E01 1.87800E01 1.32300E01 5.50000E00 -6.47000E00 1.20000E00 -8.89000E00 -2.42800E01 -1.31200E01 -2.26000E01 -1.23500E01 2.23000E00 2.60000E-01 7.23000E00 9.41000E00 2.36500E01 3.53100E01 2.73000E01 2.60200E01 3.26800E01 2.65200E01 2.21500E01 2.26300E01 9.11000E00 3.17000E00 1.30500E01 1.62300E01 -1.75000E01 -1.22500E01 -4.82000E00 -8.15000E00 -9.57000E00 1.98000E00 1.18900E01 -1.90000E00 2.89000E00 1.48300E01 1.13000E00 -1.99000E00 1.08000E01 -2.02000E00 -6.23000E00 -1.15600E01 -1.90400E01 2.27000E00 -1.76000E00 -1.19100E01 -1.03600E01 -1.75000E00 5.13000E00 1.22000E00 8.19000E00 5.37000E00 -3.54000E00 5.28000E00 -1.63000E00 -1.75000E00 -1.58700E01 -1.24100E01 -2.08300E01 -2.54900E01 -3.32700E01 -4.02600E01 -3.04300E01 -2.92700E01 -2.70500E01 -2.17400E01 -2.22500E01 -2.07600E01 -1.62100E01 4.90000E-01 -1.33000E01 -2.45100E01 -1.60500E01 -1.43200E01 -2.95300E01 -4.11900E01 -3.41800E01 -3.49300E01 -4.06800E01 -4.35800E01 -4.85400E01 -4.96200E01 -4.17000E01 -4.25100E01 -3.63200E01 -3.09200E01 -3.73400E01 -4.69400E01 -4.68100E01 -3.46500E01 -4.91000E01 -6.79700E01 -5.43800E01 -5.63400E01 -7.43300E01 -8.68300E01 -8.16600E01 -4.72800E01 -6.82000E00 3.38700E01 8.37600E01 8.70900E01 9.54200E01 1.42900E02 1.72700E02 1.83250E02 2.03950E02 1.84100E02 1.75470E02 1.55420E02 1.14620E02 8.44700E01 3.83300E01 7.75000E00 -1.67600E01 -8.19900E01 -1.22140E02 -1.40400E02 -1.66080E02 -1.36390E02 -1.27650E02 -1.44520E02 -1.14780E02 -7.50200E01 -4.59700E01 -1.99000E00 8.34000E00 3.29700E01 -Frame 160 5.63200E01 6.83300E01 7.56400E01 6.41000E01 6.01400E01 8.20000E01 5.44600E01 2.80200E01 9.74000E00 -8.11000E00 -2.50000E00 -6.71000E00 -1.40400E01 -3.58000E00 -6.79000E00 -6.09000E00 2.26400E01 7.24000E00 3.63600E01 5.63500E01 5.69100E01 5.94400E01 3.90000E01 1.59000E01 2.50800E01 1.55300E01 -3.20000E-01 -2.96500E01 -5.38500E01 -5.77400E01 -5.76900E01 -6.75800E01 -6.87100E01 -5.88100E01 -2.85500E01 -2.23300E01 -1.59000E01 7.40000E-01 3.68900E01 6.51200E01 7.71600E01 7.55000E01 8.17200E01 7.90600E01 8.52500E01 7.75600E01 6.05700E01 4.70100E01 2.70000E01 1.03600E01 9.21000E00 -2.49700E01 -2.91700E01 -1.04600E01 -2.71500E01 -4.73200E01 -6.50600E01 -5.92800E01 -3.92600E01 -3.95800E01 -4.28700E01 -3.22200E01 -4.52100E01 -2.65600E01 -1.23100E01 -1.56100E01 -1.80000E01 -4.50000E-01 1.96400E01 1.13300E01 -1.42500E01 -2.61000E00 1.93900E01 1.10500E01 9.44000E00 -1.23000E00 -2.42300E01 -2.79200E01 -2.87000E01 -3.04800E01 -5.42900E01 -6.97900E01 -5.77100E01 -5.52100E01 -7.05900E01 -6.93900E01 -6.21000E01 -4.75400E01 -3.65000E01 -4.11000E01 -5.18200E01 -4.38400E01 -5.15900E01 -4.55500E01 -5.73000E01 -8.53800E01 -8.22700E01 -8.50100E01 -9.37800E01 -1.05760E02 -1.23040E02 -1.36770E02 -1.36830E02 -1.48800E02 -1.55040E02 -6.83700E01 3.50000E01 1.41490E02 2.36100E02 2.51380E02 2.46870E02 3.26970E02 3.70230E02 3.85480E02 3.73850E02 3.09530E02 2.56960E02 1.73560E02 4.54600E01 -5.86000E01 -1.46780E02 -1.92510E02 -2.37440E02 -3.24510E02 -3.75950E02 -3.97620E02 -3.42590E02 -2.27550E02 -1.85760E02 -1.41530E02 -3.98300E01 1.60200E01 1.00550E02 1.64570E02 1.78390E02 2.18450E02 2.30530E02 1.90760E02 1.52580E02 8.40800E01 4.43900E01 4.34400E01 4.30000E-01 -3.69000E01 -8.13400E01 -1.01070E02 -5.93100E01 -4.32000E01 -2.05500E01 3.38200E01 5.88400E01 7.55800E01 1.13770E02 8.40400E01 1.01320E02 1.24050E02 8.73800E01 6.15100E01 -1.22000E01 -8.91600E01 -Frame 160 -9.74000E01 -1.36790E02 -1.49260E02 -1.42970E02 -1.56350E02 -1.31000E02 -8.87500E01 -6.81200E01 -1.48000E01 5.21700E01 1.21150E02 1.76140E02 1.80660E02 1.84150E02 2.04580E02 1.82460E02 1.80500E02 1.48330E02 9.30500E01 6.60000E01 2.20800E01 -2.71900E01 -6.29300E01 -1.06690E02 -1.30680E02 -1.12270E02 -1.34170E02 -1.16610E02 -9.63900E01 -9.74500E01 -5.14500E01 -2.49800E01 -2.96700E01 1.35200E01 3.60300E01 4.52000E01 5.26100E01 4.22000E01 4.24300E01 2.96300E01 1.34100E01 3.86800E01 5.70000E00 -3.33000E01 -3.47000E00 -2.07100E01 -4.94600E01 -4.80500E01 -6.25500E01 -5.14400E01 -6.29400E01 -8.87400E01 -5.82600E01 -5.67900E01 -5.42300E01 -2.85500E01 -4.50600E01 -6.20500E01 -5.35200E01 -5.76900E01 -4.49500E01 -6.37900E01 -9.21700E01 -1.09360E02 -1.38000E02 -1.41420E02 -1.58840E02 -2.01680E02 -1.99690E02 -1.89490E02 -2.23840E02 -1.97090E02 -2.12380E02 -2.19000E02 -1.46800E01 1.54910E02 2.88540E02 5.24980E02 5.21200E02 4.36790E02 5.77350E02 5.73720E02 5.20460E02 5.02100E02 3.29750E02 1.15820E02 -4.27700E01 -2.21160E02 -3.65800E02 -4.72520E02 -5.34060E02 -5.43980E02 -5.71690E02 -5.72730E02 -5.22290E02 -3.25840E02 -5.20600E01 4.21800E01 1.39240E02 2.56120E02 2.52330E02 3.63150E02 4.45030E02 3.36010E02 2.88300E02 1.98850E02 5.04600E01 -1.15500E01 -1.15450E02 -1.58440E02 -9.66000E01 -1.27750E02 -1.44740E02 -1.12120E02 -5.83900E01 6.80500E01 1.47330E02 1.85920E02 2.09530E02 1.51680E02 1.52910E02 1.15050E02 -1.10700E01 -1.20600E01 -7.10500E01 -1.82780E02 -2.40780E02 -3.36340E02 -3.18540E02 -2.12900E02 -1.67810E02 -6.91900E01 -3.48000E00 2.42400E01 1.68770E02 2.81590E02 2.98620E02 3.56890E02 3.45630E02 3.07710E02 2.44350E02 1.38830E02 1.01950E02 3.78700E01 -5.19000E00 -3.85400E01 -1.92850E02 -2.29720E02 -1.82490E02 -1.99610E02 -1.50060E02 -9.78300E01 -9.78900E01 -5.38600E01 -5.04200E01 2.17000E00 7.63800E01 5.88100E01 9.76400E01 1.12580E02 -Frame 160 2.88800E01 1.65700E01 5.08700E01 7.61900E01 6.82300E01 -9.03000E00 -9.66000E00 -5.29000E00 -4.77700E01 -3.05100E01 -6.80000E-01 -5.89200E01 -8.69000E01 -9.46600E01 -9.75700E01 -1.06480E02 -1.18570E02 -3.69300E01 -3.17400E01 -7.13700E01 -2.61700E01 7.44000E00 5.07000E00 2.46100E01 -1.22800E01 -7.23100E01 -1.17140E02 -1.44260E02 -1.59100E02 -2.02270E02 -2.52610E02 -2.44300E02 -2.39540E02 -2.83450E02 -2.76500E02 -1.98130E02 -1.59210E02 -1.64000E02 -7.38500E01 1.47090E02 3.72660E02 6.36800E02 8.23470E02 6.96120E02 6.09180E02 6.61000E02 5.90840E02 4.73010E02 2.94160E02 2.65800E01 -2.18220E02 -4.31310E02 -5.91520E02 -6.83080E02 -7.15800E02 -6.40850E02 -5.47990E02 -5.17770E02 -4.25170E02 -2.04360E02 1.09410E02 3.21720E02 3.72240E02 4.00930E02 3.85100E02 3.42400E02 3.69050E02 3.14180E02 1.64330E02 3.97100E01 -7.57800E01 -1.63750E02 -2.13270E02 -1.50110E02 -1.68500E01 2.95500E01 1.43600E01 8.46900E01 1.30120E02 1.96840E02 2.45450E02 1.83350E02 9.01800E01 -2.49300E01 -1.19550E02 -1.89960E02 -3.01350E02 -3.20890E02 -2.57730E02 -2.61380E02 -2.63910E02 -1.70290E02 -4.96400E01 1.14760E02 2.99110E02 3.26860E02 2.74150E02 3.27550E02 3.50300E02 3.19440E02 2.71350E02 1.30550E02 3.10000E-01 -1.39200E01 -4.15400E01 -1.18940E02 -1.11590E02 -1.41880E02 -1.98950E02 -1.13580E02 -6.44500E01 -9.67300E01 -1.59100E01 5.94300E01 3.05000E00 -2.60700E01 1.94000E00 2.28200E01 2.43300E01 1.87000E00 5.72000E00 1.76900E01 -1.19800E01 4.64500E01 8.46500E01 5.19600E01 4.92200E01 5.93600E01 3.17700E01 -3.06900E01 -3.40400E01 -3.45000E00 -4.69000E01 -9.06400E01 -1.08640E02 -1.34090E02 -8.12000E01 -2.86000E01 -4.73500E01 -5.76400E01 -7.82000E01 -9.33300E01 -5.98500E01 -9.29000E00 -8.17000E00 -4.80200E01 -8.10700E01 -1.30080E02 -2.13500E02 -2.03320E02 -1.78660E02 -2.22100E02 -2.48710E02 -2.43950E02 -2.28860E02 -2.63140E02 -2.59290E02 -9.81400E01 -8.59800E01 -1.23430E02 -Frame 160 9.80100E01 4.11140E02 6.76510E02 9.95410E02 9.40220E02 6.50450E02 5.93140E02 5.13550E02 3.88080E02 2.96440E02 -8.72300E01 -4.46600E02 -5.87590E02 -8.09330E02 -8.87130E02 -6.82490E02 -5.67890E02 -5.05240E02 -3.64220E02 -2.25550E02 -4.14400E01 3.05340E02 5.54500E02 5.00800E02 3.79940E02 2.82970E02 2.19730E02 2.36330E02 1.39230E02 -1.19900E01 -8.60000E-01 -1.10370E02 -2.03150E02 -5.36000E01 5.06300E01 1.80040E02 3.29290E02 1.97860E02 3.92000E01 8.06200E01 9.62700E01 2.13400E01 -1.09900E02 -2.63070E02 -4.06710E02 -4.19400E02 -3.42090E02 -3.01080E02 -1.83540E02 7.80000E-01 4.77700E01 1.22140E02 2.36670E02 2.94500E02 4.67830E02 4.89080E02 2.55540E02 1.38560E02 7.68600E01 -7.79000E00 3.89800E01 1.71900E01 -9.22600E01 -1.15980E02 -1.27300E02 -9.18300E01 -3.41600E01 5.33400E01 8.25100E01 3.52000E00 -4.69000E01 -1.06820E02 -1.26480E02 1.53800E01 4.62000E00 -1.00470E02 -1.05710E02 -7.30100E01 -2.02300E01 8.52000E01 1.33810E02 1.66800E02 1.42660E02 6.96500E01 6.63300E01 5.18600E01 2.91000E00 1.24600E01 -4.76900E01 -1.74640E02 -2.22340E02 -1.41300E02 -3.36200E01 4.42000E00 -5.37000E00 -8.46000E00 -2.06400E01 -1.61800E01 -1.55700E01 -3.99300E01 -6.70100E01 -1.04870E02 -1.05810E02 -1.24690E02 -2.39050E02 -2.31740E02 -1.30010E02 -2.01040E02 -2.45110E02 -1.61350E02 -1.68890E02 -2.02550E02 -9.21100E01 -5.22200E01 -2.09100E02 -2.18690E02 -3.84300E01 -8.16200E01 -1.33130E02 1.74830E02 5.28090E02 9.52730E02 1.03658E03 7.61050E02 6.55310E02 5.14730E02 3.43380E02 3.76480E02 -1.66700E01 -5.40880E02 -7.02720E02 -8.21850E02 -8.93860E02 -7.59250E02 -5.66780E02 -3.25860E02 -2.45230E02 -1.25930E02 5.01200E01 2.87510E02 5.86920E02 6.00000E02 3.47900E02 1.56670E02 1.73800E01 9.37700E01 1.58440E02 -4.10300E01 -7.62000E00 8.84000E00 -6.51900E01 1.40560E02 2.31550E02 2.49150E02 3.79080E02 2.16700E02 -5.48700E01 -1.46750E02 -1.93300E02 -1.92080E02 -Frame 160 -2.72620E02 -4.60380E02 -4.53510E02 -3.66010E02 -2.29480E02 4.46000E00 1.01600E02 1.85620E02 3.10040E02 2.83000E02 2.67850E02 2.86980E02 2.69440E02 2.79120E02 1.59860E02 -1.19210E02 -2.03770E02 -2.27300E01 5.69500E01 3.30600E01 1.52420E02 2.01350E02 3.36300E01 -5.28000E00 6.96400E01 -6.21600E01 -1.67950E02 -9.58300E01 -1.78370E02 -3.64280E02 -2.57590E02 -2.93600E01 5.79500E01 6.79000E01 9.10900E01 1.61910E02 1.76770E02 1.62930E02 2.18520E02 1.49640E02 7.51000E00 -1.60000E01 -7.72000E01 -1.94200E02 -1.25620E02 -5.79000E00 -4.24000E00 -4.66300E01 -3.32800E01 2.55200E01 9.11200E01 9.46700E01 2.02500E01 -6.24800E01 -1.30700E02 -1.78900E02 -2.45420E02 -2.98770E02 -2.16500E02 -9.15000E01 -6.15700E01 -3.46800E01 -3.59500E01 -4.02500E01 -3.26700E01 -5.28500E01 -1.08630E02 -2.65060E02 -2.94110E02 -2.21820E02 -2.99130E02 -3.08600E02 -1.54130E02 -2.38800E02 -1.07930E02 9.70200E01 3.11500E01 3.36150E02 8.45210E02 1.16518E03 1.12794E03 6.18510E02 3.53790E02 3.07610E02 -2.32200E01 -8.41900E01 -2.90900E02 -8.13670E02 -7.93800E02 -6.86550E02 -6.83340E02 -3.55410E02 -1.51040E02 2.77500E01 7.10000E01 -7.95200E01 7.93400E01 2.94000E02 2.39990E02 2.83060E02 6.11800E01 -2.13630E02 4.82500E01 2.24170E02 1.97310E02 2.93430E02 2.72250E02 2.18170E02 2.25230E02 1.55320E02 1.33130E02 1.23160E02 -5.22000E01 -2.32900E02 -3.92940E02 -4.39540E02 -2.35160E02 -1.45240E02 -2.07410E02 -1.43320E02 -1.09130E02 1.42000E01 1.66310E02 1.01950E02 7.14900E01 1.62010E02 5.71700E01 -3.19700E01 1.71600E01 5.47900E01 1.71530E02 2.62720E02 2.10490E02 9.24600E01 7.57100E01 1.97390E02 2.75670E02 1.74140E02 6.93400E01 -8.67300E01 -2.65510E02 -3.23540E02 -2.48040E02 -1.51960E02 -1.34760E02 -1.27900E02 -9.67100E01 -5.34700E01 8.71500E01 2.17030E02 2.06720E02 5.89000E01 -6.15400E01 -1.66400E01 1.16700E01 -1.50000E-01 4.66700E01 4.90000E00 -3.01600E01 3.27300E01 -Frame 160 6.85400E01 1.01400E02 1.13190E02 5.62500E01 -3.74900E01 -1.42080E02 -1.43760E02 -4.73500E01 -8.79100E01 -1.01640E02 -4.87000E01 -1.30080E02 -1.09860E02 -6.29200E01 -2.00480E02 -1.71120E02 -4.07100E01 -7.82500E01 -1.89000E01 -1.97200E01 -1.93570E02 -2.14640E02 -1.87190E02 -2.51750E02 -2.59110E02 -2.27500E02 -2.58750E02 -1.86780E02 -8.94700E01 -6.81300E01 -4.31300E01 -3.53800E01 -1.24200E01 1.34200E02 4.80170E02 1.01334E03 1.23102E03 7.19280E02 4.06070E02 3.17840E02 -3.33600E01 -2.63300E01 -1.52000E02 -6.13360E02 -7.31370E02 -7.67320E02 -5.75660E02 -2.19550E02 -1.19250E02 -9.67700E01 -4.25400E01 -2.08630E02 -1.70000E00 1.77590E02 1.15220E02 1.95780E02 9.66200E01 -5.07200E01 7.84100E01 3.28440E02 4.09880E02 3.86450E02 3.62940E02 1.59380E02 6.04000E01 8.13300E01 7.48600E01 -5.78500E01 -1.68580E02 -3.29550E02 -3.14170E02 -1.94010E02 -7.39500E01 8.90000E-01 -7.99600E01 -7.62400E01 -1.83400E01 -6.96400E01 -3.04700E01 1.39300E01 -5.63200E01 -1.03700E02 -6.04600E01 4.16000E00 1.74760E02 2.83460E02 2.10250E02 2.04580E02 2.10550E02 2.36520E02 2.32090E02 1.76330E02 -1.32900E01 -8.73000E00 2.01000E00 -4.18900E01 -5.10800E01 -9.64800E01 -1.71170E02 -1.79990E02 -9.19000E01 -5.19900E01 -3.57900E01 -4.50500E01 -9.35500E01 -6.94600E01 -4.95600E01 5.60000E01 7.97700E01 -8.00000E-01 4.01400E01 1.21310E02 9.98800E01 1.18700E02 1.64000E02 2.95600E01 1.69500E01 3.49500E01 -4.45100E01 -1.16370E02 -2.13300E01 6.68000E00 -1.15440E02 -5.62200E01 3.98900E01 -2.00600E01 -2.18400E01 1.23500E01 -1.08410E02 -2.30800E02 -2.75760E02 -2.84860E02 -1.77990E02 -5.76700E01 3.74000E01 3.33500E01 -5.38800E01 -1.55780E02 -1.33710E02 -1.13860E02 -2.76320E02 -2.50580E02 -2.46850E02 -3.44820E02 -1.98550E02 2.03700E01 -9.70200E01 -1.90100E01 8.93700E01 1.20960E02 2.59360E02 7.33750E02 1.36409E03 8.72640E02 1.39200E02 2.47990E02 4.69600E01 -2.95280E02 2.22200E01 -2.96440E02 -Frame 160 -6.68640E02 -4.25700E02 -3.74840E02 -2.21060E02 2.76700E01 -6.95000E00 -2.97650E02 -4.71080E02 -2.45460E02 1.83300E01 4.12200E01 6.47400E01 1.14890E02 6.74500E01 2.66450E02 5.16330E02 5.25440E02 3.26340E02 2.37790E02 1.00300E02 -1.38510E02 2.54500E01 2.34800E01 -1.55550E02 -1.24950E02 -1.20270E02 -1.65320E02 7.34000E01 1.31440E02 -4.68400E01 -1.62580E02 -2.32740E02 -1.51850E02 -1.62320E02 -1.25970E02 -8.63900E01 -1.03520E02 -2.61000E01 7.67200E01 1.60630E02 2.49970E02 2.16830E02 1.28460E02 6.32400E01 9.50000E-01 5.47400E01 1.57150E02 1.47590E02 1.10610E02 3.54000E01 1.36850E02 1.43330E02 2.11900E02 1.72420E02 -1.42410E02 -3.03810E02 -2.73890E02 -2.47770E02 -1.29600E02 -7.66500E01 -1.58990E02 -8.37300E01 1.89300E01 9.87400E01 1.54920E02 1.26690E02 -2.55300E01 -1.08430E02 -1.17900E01 2.08500E01 1.01480E02 1.91510E02 7.51500E01 2.91300E01 1.08670E02 1.11580E02 2.24900E01 -2.73600E01 -1.01710E02 -1.92250E02 -1.80400E02 -2.50100E01 4.21000E00 -8.26700E01 -2.91600E01 -7.39700E01 -1.94100E02 -1.78770E02 -1.38810E02 -1.72500E02 -1.25090E02 1.78800E01 -2.47700E01 -1.20740E02 -9.95900E01 -1.06720E02 -2.81000E02 -1.98440E02 -1.74180E02 -2.95050E02 -1.84430E02 3.47300E01 -1.19420E02 -2.08280E02 2.32500E01 8.58600E01 -1.10730E02 3.50650E02 7.32920E02 9.29290E02 7.45850E02 3.39050E02 1.22380E02 2.19930E02 -1.97670E02 -1.44960E02 -1.91450E02 -5.25170E02 -3.33700E02 -6.59900E01 -1.81940E02 3.56900E01 -5.79900E01 -5.07520E02 -3.54490E02 -1.20420E02 -2.53030E02 -8.35400E01 9.82300E01 3.54900E01 2.03740E02 3.88970E02 4.03540E02 4.12170E02 2.85680E02 4.20200E01 6.08000E01 -6.88000E00 -5.16300E01 -3.70000E00 1.07300E01 -7.39000E00 5.49500E01 2.51800E01 1.40480E02 4.82300E01 -2.15900E02 -2.05980E02 -1.33550E02 -2.70750E02 -2.01940E02 -8.28200E01 -6.69500E01 1.24600E01 1.23300E02 8.84400E01 1.13410E02 1.78040E02 5.15000E01 -1.80000E01 -Frame 160 -1.63000E00 1.12500E01 8.35200E01 1.70950E02 2.16930E02 2.61140E02 6.44900E01 1.25720E02 2.96750E02 1.36820E02 -1.17150E02 -1.73830E02 -2.32070E02 -1.87870E02 -1.00110E02 -4.55300E01 1.27900E01 -1.40900E01 -9.37800E01 -1.68400E01 8.65000E01 -2.00400E01 -1.25850E02 -7.78100E01 -3.92100E01 -1.13800E01 8.33200E01 1.44870E02 1.66190E02 1.16020E02 9.82000E01 8.77500E01 1.29100E01 -7.32400E01 -8.79700E01 -1.01060E02 -1.74500E01 6.77000E00 -2.32600E01 -2.01900E01 -6.00000E00 -2.13600E01 -1.25170E02 -2.01070E02 -2.15130E02 -1.83430E02 -9.85900E01 -9.05000E00 4.62500E01 -1.22800E02 -1.82980E02 -1.87870E02 -2.00760E02 -2.23890E02 -1.69560E02 -2.14430E02 -1.52530E02 -9.26200E01 -1.44820E02 -6.55500E01 1.02180E02 2.95000E00 1.09600E02 4.14400E02 8.92200E02 6.83920E02 1.88560E02 3.83720E02 3.16580E02 -2.90900E02 -7.58600E01 2.02930E02 -3.36820E02 -2.47920E02 8.49800E01 -7.38900E01 -5.90000E-01 -6.50100E01 -4.45350E02 -2.91030E02 -8.76700E01 -3.45950E02 -2.36910E02 1.36700E02 -1.72900E01 -5.90500E01 2.65930E02 3.60690E02 1.93030E02 8.10000E01 6.44300E01 9.92900E01 7.11400E01 -3.19400E01 7.18300E01 1.43750E02 6.97700E01 8.54500E01 1.94550E02 1.97860E02 6.71100E01 -1.28720E02 -1.08460E02 -4.74500E01 -1.61490E02 -1.93890E02 -5.81000E01 -2.80500E01 -6.10400E01 -1.79900E01 2.04100E01 6.29800E01 8.81000E00 -4.70400E01 -3.35700E01 1.43500E01 -3.62600E01 -6.84000E01 9.95300E01 1.07560E02 1.09740E02 2.81890E02 1.13110E02 1.09020E02 2.11720E02 5.24200E01 -5.08300E01 1.20800E02 -5.33500E01 -2.23810E02 1.26900E01 2.35100E01 -3.73400E01 -1.50200E01 -3.59800E01 -3.15400E01 -4.92000E00 -9.94600E01 -1.23820E02 3.31900E01 -6.49700E01 -1.49100E02 8.23100E01 1.20800E02 -2.96300E01 3.33200E01 1.19190E02 2.56100E01 -2.98800E01 -2.60500E01 -2.80700E01 -3.61200E01 -5.43800E01 -3.01500E01 6.88600E01 3.98700E01 -3.10500E01 1.98700E01 4.63500E01 -6.03900E01 -Frame 160 -1.21370E02 -6.51200E01 -7.60700E01 -5.92900E01 1.00600E01 2.45400E01 -3.55600E01 -6.94900E01 -7.34100E01 -1.13390E02 -1.25510E02 -1.60900E02 -1.32250E02 -1.12610E02 -7.52800E01 -3.17500E01 -7.58700E01 -4.23100E01 1.03000E01 -5.35000E01 3.07500E01 1.82550E02 2.75850E02 1.75760E02 2.00400E02 2.09610E02 6.89100E01 -3.42000E01 2.85400E01 -3.38000E01 -2.30300E01 3.01000E01 5.48500E01 3.13200E01 3.50400E01 -4.15000E00 1.04600E01 4.95200E01 -4.52500E01 -7.89000E01 -4.55100E01 2.39600E01 -1.84400E01 -2.51300E01 4.90000E01 1.33800E01 8.65000E00 3.87700E01 4.07900E01 1.28400E01 -2.89800E01 -2.70600E01 -5.05000E00 1.46500E01 -1.30500E01 4.84100E01 6.47300E01 1.85000E01 3.68300E01 4.27000E01 2.47200E01 3.91700E01 1.04000E00 -2.72600E01 5.06000E01 1.08300E01 -5.31700E01 9.91000E00 5.09400E01 -3.80000E00 4.57800E01 7.08600E01 7.66000E00 -4.49000E00 2.40000E01 6.23600E01 -2.91400E01 -1.41430E02 1.61950E02 5.15700E01 -1.39260E02 1.01150E02 1.61910E02 -1.75900E01 -1.76100E01 8.94000E01 -5.53500E01 -7.35100E01 1.38500E01 6.39100E01 -8.35300E01 -3.51440E02 4.11700E02 6.20600E01 -2.53440E02 9.75500E01 2.04310E02 -1.18810E02 -6.08000E01 1.53070E02 -1.32580E02 1.40700E01 1.28250E02 -7.31500E01 1.03000E01 9.33300E01 -6.31500E01 9.60000E00 3.66000E01 -5.85900E01 -3.06600E01 -7.83000E00 -1.72800E01 2.10000E01 5.04500E01 3.27700E01 3.05200E01 3.41800E01 -6.07000E00 -2.95500E01 1.28000E00 -1.49300E01 -4.76200E01 -2.12700E01 -3.08000E00 -4.32000E00 8.41000E00 -2.04700E01 -4.92200E01 -3.88100E01 -4.00400E01 -4.12700E01 -2.65000E01 -3.32500E01 -2.71800E01 -4.89000E01 3.75000E00 -1.59800E01 -6.31000E00 -3.13400E01 -8.12000E00 2.58200E01 3.97800E01 7.11300E01 1.13380E02 2.28300E01 -5.45400E01 -2.92500E01 -3.15000E00 -7.24000E00 5.15500E01 4.41100E01 -5.60000E00 -2.48400E01 5.33500E01 5.09100E01 4.83500E01 2.66700E01 1.73000E01 9.63000E00 -Frame 160 6.97200E01 3.46100E01 3.23900E01 2.60800E01 -9.44000E00 1.79600E01 5.22000E01 2.94600E01 1.00000E01 -1.70600E01 -1.39300E01 -1.16800E01 1.36600E01 2.77800E01 1.13200E01 1.33500E01 7.44000E00 -1.65000E00 -9.01000E00 4.42000E00 4.27000E00 -1.88000E00 2.17900E01 4.11800E01 1.41400E01 8.26000E00 6.20000E00 2.08000E00 2.08400E01 4.01700E01 2.70700E01 1.65500E01 2.77000E01 2.41800E01 2.35400E01 2.68700E01 5.29000E00 -6.95000E00 3.45000E00 1.01800E01 9.12000E00 4.60300E01 3.70500E01 -7.23000E00 7.14000E00 2.79600E01 8.41000E00 -2.57400E01 -1.39100E01 -2.96900E01 -4.19200E01 1.52000E00 5.73100E01 2.78000E00 -1.74300E01 1.17600E01 4.85000E00 1.47300E01 1.99100E01 1.24000E00 -3.00000E00 -4.36000E00 -2.75000E00 1.69200E01 5.19000E00 -3.19000E01 -2.51000E01 -1.06000E00 8.73000E00 1.78200E01 1.21800E01 -3.64000E00 -4.94000E00 8.73000E00 1.98200E01 5.24000E00 -6.79000E00 -3.21800E01 -1.43200E01 -1.18900E01 -1.33700E01 4.12000E00 1.50000E-01 -5.94000E00 -1.32100E01 -2.36900E01 -4.94700E01 -5.20000E01 -4.05600E01 -3.37300E01 -2.26600E01 -3.02300E01 -2.70100E01 -4.16700E01 -3.67500E01 -2.86500E01 -4.42800E01 -3.83600E01 6.77000E00 2.42800E01 9.13000E01 1.02300E02 3.75400E01 -3.22600E01 -3.01900E01 -3.00300E01 1.16000E00 4.43100E01 3.67500E01 -1.10800E01 -3.33800E01 3.56600E01 5.18000E01 3.83900E01 2.85300E01 1.03400E01 2.58000E00 5.55800E01 6.21700E01 1.89100E01 9.30000E00 -2.66100E01 3.40000E00 4.13400E01 2.94200E01 1.31100E01 -5.71000E00 -2.01000E01 1.09000E00 1.29400E01 2.61500E01 -2.50000E-01 8.54000E00 -9.40000E00 -3.88000E00 -1.01800E01 -3.66000E00 -7.93000E00 -1.43200E01 1.41100E01 2.94100E01 1.61600E01 1.04900E01 6.40000E-01 1.14900E01 3.96700E01 4.56900E01 2.98600E01 1.45200E01 6.70000E00 2.06400E01 1.50000E01 1.01800E01 -4.79000E00 7.90000E-01 7.55000E00 2.85200E01 1.51200E01 3.73000E01 1.01400E01 -Frame 160 8.14000E00 1.60800E01 2.62600E01 -1.02600E01 -1.89000E00 -1.92500E01 -4.21200E01 -6.50000E-01 1.51100E01 1.33500E01 -1.14700E01 9.96000E00 5.00000E-02 1.18400E01 2.19900E01 2.44000E00 -2.27100E01 1.13900E01 1.35400E01 1.77500E01 2.00800E01 -5.30000E-01 -3.77000E00 -2.10000E00 1.36300E01 2.84000E00 1.07200E01 2.08400E01 2.60000E-01 1.10500E01 2.11700E01 2.45900E01 -1.90000E00 -7.20000E00 1.03500E01 1.24400E01 1.59000E00 -4.59000E00 -2.69500E01 -2.49700E01 -1.39000E01 2.05300E01 1.80100E01 1.40000E00 -2.27200E01 -3.75600E01 -4.08200E01 -4.01400E01 -2.84000E01 -3.42700E01 -2.92900E01 -3.51300E01 -2.01200E01 -3.46300E01 -3.15600E01 -3.13700E01 -1.21500E01 1.46700E01 5.23000E01 1.04040E02 7.62800E01 -4.10000E-01 -3.84700E01 -1.96700E01 -3.27000E00 3.26400E01 5.56300E01 2.82800E01 -3.94000E00 8.50000E-01 7.57900E01 4.39800E01 2.01500E01 3.57000E00 1.24800E01 3.66600E01 7.05600E01 4.74500E01 2.25900E01 9.50000E-01 6.50000E-01 4.23500E01 4.03100E01 2.41800E01 6.54000E00 -5.64000E00 -3.18000E00 1.93700E01 1.76100E01 6.79000E00 1.76400E01 1.48200E01 5.91000E00 7.73000E00 1.61000E00 -2.86900E01 -1.28900E01 1.42000E00 4.31800E01 3.62000E01 3.39800E01 1.76700E01 1.48500E01 4.19400E01 5.48400E01 5.01000E01 1.21800E01 5.09000E00 1.67900E01 2.18500E01 2.06000E00 5.67000E00 -6.60000E00 9.77000E00 1.86500E01 3.78000E01 1.25200E01 3.24600E01 7.00000E00 2.76000E00 1.24000E01 4.53400E01 1.27000E00 -8.15000E00 1.16000E00 2.77000E00 -5.60000E-01 2.80200E01 2.94700E01 -4.05000E00 1.41000E00 3.05000E00 7.75000E00 -7.40000E00 8.00000E00 -1.01200E01 1.02200E01 1.71900E01 3.13700E01 2.89700E01 1.14800E01 4.50000E-01 1.70900E01 9.24000E00 1.21500E01 -8.50000E-01 9.76000E00 -2.30000E00 1.52800E01 8.40000E00 5.31000E00 9.13000E00 8.07000E00 5.98000E00 1.88300E01 -3.93000E00 -7.38000E00 -1.69200E01 -2.67300E01 -3.81000E00 -Frame 160 1.68300E01 1.31000E01 -7.75000E00 -1.02300E01 -2.57700E01 -4.07600E01 -3.91700E01 -2.24900E01 -3.22700E01 -4.13200E01 -2.96100E01 -3.25100E01 -2.64700E01 -1.82200E01 -3.97000E01 -3.38100E01 -2.71000E00 2.23500E01 6.81600E01 8.83200E01 3.50200E01 -4.39600E01 -2.53400E01 -8.12000E00 3.06400E01 5.65700E01 5.42500E01 8.10000E-01 -1.82800E01 3.00600E01 3.88700E01 2.39200E01 -5.51000E00 -1.84000E00 2.19500E01 6.14600E01 5.01400E01 2.14300E01 1.08200E01 -1.11200E01 2.02800E01 2.36400E01 2.60900E01 -1.40000E00 -1.07300E01 -1.73300E01 -1.01100E01 9.35000E00 1.14100E01 -7.47000E00 1.10800E01 1.20000E00 -4.98000E00 2.66000E00 -2.14600E01 -2.13000E01 -1.01100E01 2.94400E01 3.91900E01 1.92100E01 8.60000E00 1.06600E01 2.07800E01 3.32000E01 3.29800E01 9.73000E00 6.76000E00 4.70000E00 1.35800E01 6.73000E00 -3.30000E-01 -2.60000E00 -1.09300E01 9.50000E00 1.75600E01 4.86000E00 -1.12300E01 -1.08000E01 -3.43400E01 -5.57000E00 1.31000E01 3.23400E01 3.71500E01 2.20800E01 -7.47000E00 2.08000E00 -2.20700E01 -5.94000E00 -9.30000E00 -9.75000E00 -2.20000E00 -5.41000E00 -1.07100E01 5.84000E00 -7.10000E00 -5.43000E00 1.43000E01 1.76300E01 5.05000E00 1.08000E00 -4.01000E00 -7.25000E00 -4.58000E00 -1.82000E00 -3.97000E00 -1.01800E01 -1.25700E01 7.98000E00 1.11600E01 -8.57000E00 -1.90000E00 -6.02000E00 -7.26000E00 1.04700E01 6.74000E00 -1.11100E01 -2.05000E01 -3.21600E01 -4.01500E01 -1.93500E01 6.11000E00 2.35000E00 -9.53000E00 -1.37700E01 -4.11300E01 -4.53000E01 -2.65600E01 -3.82200E01 -3.22100E01 -4.49900E01 -3.71300E01 -3.40000E01 -3.77500E01 -4.35900E01 -4.95800E01 -6.37200E01 -1.02500E01 1.48700E01 6.67400E01 6.31400E01 3.13600E01 -3.84400E01 -1.93700E01 -7.70000E00 2.43300E01 4.53200E01 1.79100E01 -2.63700E01 -7.00000E00 1.99700E01 1.97500E01 2.25000E01 7.31000E00 1.26400E01 2.31200E01 6.29000E01 2.58500E01 -2.37000E00 5.54000E00 -1.93100E01 -Frame 160 9.00000E-02 2.70900E01 -8.10000E00 -2.33700E01 -2.90900E01 -9.96000E00 -6.23000E00 1.62000E00 -1.29000E00 -4.29000E00 -1.38000E00 2.62000E00 8.74000E00 -1.19600E01 -2.22900E01 -3.59200E01 1.50600E01 2.46000E01 1.94100E01 -5.96000E00 3.89000E00 1.04000E00 2.81000E01 2.59700E01 2.57500E01 -2.50000E00 -1.62000E00 -6.71000E00 5.00000E-02 -1.89800E01 -1.65800E01 -1.50900E01 -1.55400E01 1.10100E01 1.23700E01 1.76000E00 -4.18000E00 -9.30000E00 -1.25700E01 3.07000E00 4.21900E01 3.14800E01 -2.59000E00 -1.97100E01 -1.53400E01 -1.68200E01 -2.03300E01 7.00000E-02 2.10000E00 -1.38100E01 -1.12000E01 7.50000E00 -9.23000E00 3.53000E00 -1.13200E01 3.80000E-01 -6.56000E00 3.29000E00 -2.56000E00 2.41000E00 -1.84700E01 -2.39800E01 -1.86400E01 -3.12000E00 -1.01200E01 -9.33000E00 -5.10000E-01 -4.42000E00 -7.45000E00 -7.57000E00 -6.69000E00 -9.78000E00 -1.59600E01 -1.23200E01 -1.75600E01 -3.29500E01 -4.87900E01 -4.30800E01 -3.01600E01 -4.82000E00 6.30000E00 -1.25000E00 -3.00400E01 -4.27000E01 -5.37200E01 -4.00400E01 -3.09100E01 -3.64800E01 -4.32000E01 -5.61000E01 -3.53600E01 -4.89600E01 -4.09500E01 -5.56700E01 -7.18100E01 -4.94000E01 -1.62700E01 -1.71200E01 3.50000E01 4.76800E01 6.90000E-01 -3.17700E01 -2.32200E01 -2.14000E01 -1.85200E01 3.54500E01 4.04000E00 -7.36000E00 -3.31200E01 3.23400E01 -6.22000E00 2.00200E01 -1.29600E01 8.04000E00 -1.73300E01 3.45200E01 -7.00000E-02 -5.74000E00 -1.55900E01 -3.97400E01 -1.46100E01 -2.27000E01 -6.03000E00 -3.08500E01 -9.42000E00 -3.33300E01 -1.59600E01 -1.90500E01 -1.52300E01 -1.52900E01 -5.35000E00 -2.11100E01 -2.53500E01 -3.17100E01 -3.92500E01 -4.00000E01 -2.57500E01 4.95000E00 2.58000E00 -8.80000E-01 -2.46000E00 -9.10000E00 -4.95000E00 -4.68000E00 -1.14100E01 -2.43500E01 -1.96800E01 -4.18600E01 -1.57000E01 -3.27300E01 -1.22700E01 -4.61800E01 -3.31100E01 -1.66200E01 -1.36200E01 -1.05300E01 -1.43500E01 -1.82900E01 -1.13500E01 -2.12000E01 -Frame 160 -9.35000E00 -1.61400E01 -3.51400E01 -2.47100E01 -1.79500E01 -2.49800E01 -4.22200E01 -2.39700E01 -2.31500E01 -3.30000E00 -2.68500E01 -1.11200E01 -4.09100E01 -2.36000E01 -2.87500E01 -1.30500E01 -2.28700E01 -2.29900E01 -2.71100E01 -3.53500E01 -2.08300E01 -3.58600E01 -3.03400E01 -2.66400E01 -1.68200E01 -2.07000E01 3.00000E-01 -3.07000E00 -1.65600E01 -2.24700E01 -2.55600E01 -1.77400E01 -1.86800E01 -3.86500E01 -4.32200E01 -4.29100E01 -3.65700E01 -3.40200E01 -3.53800E01 -2.87700E01 -2.69500E01 -2.80700E01 -3.52200E01 -5.75800E01 -4.96000E01 -5.23500E01 -4.61600E01 -2.57600E01 -4.37300E01 -3.52400E01 -4.64800E01 -6.30500E01 -4.71000E01 -5.26400E01 -7.53300E01 -5.76800E01 -2.74600E01 -2.03100E01 -1.19500E01 2.56500E01 -6.40000E-01 -5.47700E01 -4.75500E01 -1.70900E01 -2.67000E01 1.39000E00 2.73200E01 3.00000E00 -1.91000E01 -1.68900E01 1.93800E01 7.30000E-01 -9.52000E00 -1.51000E01 -2.18600E01 -1.08300E01 -4.70000E-01 -1.58100E01 -1.76300E01 -2.95100E01 -2.37500E01 -1.38100E01 -2.15700E01 -1.05700E01 -3.12400E01 -2.75400E01 -2.47200E01 -2.48100E01 -5.90000E00 -3.44200E01 -1.78100E01 -2.56900E01 -2.48100E01 -1.19000E01 -2.26000E01 -3.16300E01 -2.29300E01 -1.96000E00 4.64000E00 -6.58000E00 -6.16000E00 -2.07400E01 -1.27700E01 2.44000E00 -1.59000E01 -1.28100E01 -1.56300E01 -1.95400E01 -1.95700E01 -2.66000E01 -2.88400E01 -1.61400E01 -3.80500E01 -1.62000E00 -1.08000E00 -1.35400E01 -5.39000E00 -1.70000E01 -6.97000E00 -1.86400E01 3.23300E01 7.83000E00 -2.74500E01 -5.98100E01 -1.61300E01 -2.81000E01 1.35700E01 5.00000E-01 -1.59900E01 -3.79900E01 -1.76500E01 1.23200E01 -2.38100E01 -4.50500E01 -3.89200E01 -1.75800E01 -2.35800E01 1.32400E01 -3.48300E01 -1.63700E01 -3.03400E01 -2.07300E01 -8.20000E-01 -2.31000E00 -3.28600E01 -1.03400E01 -1.11300E01 -9.50000E-01 2.53000E00 -4.90000E00 -3.85700E01 -1.32600E01 -1.41700E01 -2.11000E00 -1.56900E01 -4.46900E01 -6.95600E01 -3.71500E01 -4.72000E00 1.47000E01 -Frame 160 -1.63100E01 -3.22800E01 -4.17300E01 -3.24500E01 -1.88700E01 -2.68700E01 -4.91100E01 -4.50100E01 -2.17600E01 -3.07900E01 -1.20900E01 -4.88200E01 -4.96600E01 -4.65000E01 -4.12200E01 -3.17600E01 -4.00000E01 -3.44800E01 -4.07800E01 -1.12600E01 1.91600E01 2.94800E01 -1.19300E01 -2.36300E01 -1.86900E01 -6.60000E00 1.48500E01 2.99300E01 1.74300E01 -1.84900E01 6.48000E00 3.92000E01 6.88000E00 -1.14600E01 -1.23700E01 -2.23100E01 -3.55000E00 4.97800E01 -1.33000E01 2.67000E00 -1.38800E01 -2.79400E01 5.80000E-01 9.70000E-01 -8.64000E00 -1.65500E01 -6.70000E00 -9.55000E00 5.51000E00 8.02000E00 -1.24100E01 -4.70000E-01 1.78300E01 2.16700E01 1.06000E01 -8.30000E-01 -1.46200E01 -1.48300E01 8.96000E00 1.84700E01 2.02500E01 6.00000E-02 -1.07600E01 1.00900E01 2.45700E01 -1.53000E00 -2.44000E00 -1.03800E01 4.44000E00 6.71000E00 1.00400E01 -4.54000E00 1.74300E01 8.06000E00 3.33900E01 2.14700E01 1.21600E01 5.50000E-01 1.65800E01 4.00900E01 1.92900E01 1.48300E01 -1.87800E01 6.59000E00 9.74000E00 5.59800E01 9.60000E00 1.77800E01 -2.28000E01 6.39000E00 4.48000E00 8.51000E00 -4.34000E00 -8.58000E00 4.06000E00 2.09000E00 3.10600E01 1.39000E01 7.20000E00 -2.71000E00 1.60800E01 1.14400E01 2.86500E01 9.37000E00 1.54900E01 1.87900E01 1.71800E01 2.15100E01 2.59600E01 1.15300E01 4.65000E00 1.15600E01 3.36800E01 2.14600E01 -1.50000E-01 -1.44200E01 1.89000E00 2.37100E01 2.01900E01 1.65500E01 1.87900E01 -1.91000E00 2.17600E01 1.31500E01 -2.73000E00 1.09100E01 -4.03000E00 5.80000E-01 2.34000E00 6.16000E00 2.10000E00 -1.00800E01 -2.36200E01 -8.55000E00 -2.60000E01 -9.96000E00 -1.14100E01 3.11000E00 1.80800E01 9.50000E00 2.46500E01 1.12500E01 5.94300E01 3.30500E01 6.38300E01 -5.49000E00 2.70600E01 -7.40000E00 6.20900E01 4.66800E01 4.97600E01 3.19000E01 3.54700E01 4.61300E01 1.90900E01 2.92100E01 1.46300E01 3.36000E01 1.01400E01 4.29600E01 -Frame 160 9.77000E00 3.85600E01 2.20000E-01 1.17100E01 1.45600E01 2.45000E01 2.47400E01 1.69800E01 2.09800E01 1.81000E01 4.11300E01 4.18500E01 2.35700E01 1.17200E01 2.25100E01 3.56300E01 3.41400E01 1.95900E01 1.35900E01 1.34100E01 3.42300E01 2.26800E01 3.57700E01 1.02500E01 1.09500E01 1.76800E01 2.96200E01 2.79200E01 1.21600E01 3.09200E01 2.32500E01 1.83400E01 3.52800E01 3.47300E01 8.15000E00 1.27600E01 3.25200E01 4.68800E01 4.46600E01 3.83500E01 1.58300E01 8.62000E00 1.22000E01 3.39000E01 2.82600E01 1.84400E01 1.83200E01 9.20000E00 1.88100E01 2.87200E01 2.59300E01 6.05000E00 1.55700E01 4.39000E00 5.48800E01 2.19000E01 7.90000E00 1.84800E01 -6.10000E-01 2.27300E01 2.97900E01 2.40600E01 6.15000E00 7.00000E-01 2.41000E01 3.62200E01 9.70000E00 3.13700E01 3.07000E01 1.00000E01 1.36700E01 2.44600E01 2.45800E01 9.70000E00 2.37000E00 3.83000E00 2.63500E01 1.75600E01 6.50000E00 1.11100E01 2.08700E01 2.99300E01 3.72600E01 9.80000E00 -7.50000E00 5.69000E00 1.93000E01 1.13300E01 1.11200E01 -1.00900E01 -9.93000E00 -4.74000E00 5.63000E00 1.33300E01 -1.37300E01 -7.60000E00 -2.72600E01 -2.49000E00 1.60600E01 1.41800E01 -3.76000E00 1.67600E01 3.91000E00 1.76700E01 6.28500E01 1.73800E01 2.55000E01 3.86000E00 4.45600E01 1.64900E01 6.25500E01 2.29900E01 3.82000E01 1.98600E01 5.19500E01 1.90000E01 3.70300E01 1.66000E01 8.54000E00 3.02400E01 2.26000E01 4.97200E01 1.46500E01 2.05000E01 1.65300E01 2.74400E01 2.66800E01 2.88900E01 1.01600E01 2.78600E01 2.41000E01 2.72200E01 3.94300E01 2.60000E01 1.51500E01 3.09700E01 2.42700E01 3.03600E01 1.96300E01 1.25700E01 -4.70000E00 1.35200E01 2.33100E01 2.54000E01 1.95500E01 4.52000E00 2.20400E01 2.51000E01 3.02500E01 1.65500E01 1.94300E01 5.40000E00 2.89500E01 2.12200E01 3.22500E01 1.96100E01 4.35800E01 1.52700E01 4.70900E01 3.28700E01 -Frame 160 2.72000E01 -5.65000E00 1.95100E01 -1.15500E01 1.94600E01 1.34300E01 2.62200E01 -1.60000E00 6.74000E00 2.83500E01 4.62000E00 9.17000E00 1.87000E00 4.36000E00 7.94000E00 2.36400E01 -1.80000E-01 2.12800E01 -6.00000E-01 -4.14000E00 1.22300E01 4.11000E00 -1.25000E00 2.40000E-01 1.79000E00 7.40000E00 -1.81000E00 6.71000E00 8.50000E00 7.35000E00 -9.83000E00 1.04800E01 1.44200E01 -1.55200E01 -2.36000E00 1.32200E01 -7.20000E-01 -5.08000E00 5.44000E00 -2.07100E01 -1.96400E01 1.84900E01 -1.21000E00 -7.51000E00 -8.99000E00 -1.25000E01 -6.10000E00 3.51000E00 -1.75800E01 -2.23000E01 -2.51400E01 -1.30400E01 -1.85500E01 -1.42100E01 -2.67200E01 -3.55900E01 -3.37000E01 -2.17200E01 -1.53500E01 -1.07700E01 -2.30400E01 -1.06700E01 -2.09100E01 -1.84500E01 -1.29000E01 -1.41700E01 1.45300E01 -5.90000E00 2.20400E01 -1.51800E01 6.46000E00 -2.62400E01 1.90700E01 -1.22400E01 2.84900E01 -2.75500E01 6.70000E00 0.00000E00 1.00900E01 -1.55200E01 3.09000E00 -2.73000E00 -7.30000E-01 1.73300E01 1.89300E01 1.55600E01 3.07000E00 -1.18100E01 1.86000E00 -5.00000E-02 7.98000E00 -1.75000E00 -1.78000E00 1.11900E01 -3.45000E00 1.84600E01 -4.97000E00 1.88000E00 -6.06000E00 2.76000E00 9.85000E00 8.15000E00 -2.66100E01 -1.04200E01 1.28000E00 1.33400E01 3.76000E00 1.88000E00 -5.06000E00 7.90000E-01 1.08200E01 1.15000E00 1.11800E01 2.05100E01 2.21100E01 1.37400E01 2.51000E01 2.37900E01 3.42000E00 5.42000E00 1.24800E01 2.47500E01 8.38000E00 5.00000E-01 5.38000E00 4.41000E00 4.41000E00 2.04100E01 1.28900E01 1.01300E01 1.12800E01 4.46000E00 4.43000E00 4.00000E-01 -4.75000E00 -4.05000E00 6.68000E00 1.74000E00 2.26500E01 7.19000E00 2.02500E01 -1.63000E01 -9.60000E-01 -2.14000E00 2.65000E00 -4.41000E00 3.20000E-01 -2.80000E00 2.09900E01 7.50000E00 3.59000E00 -2.44000E00 5.35000E00 3.80000E-01 -3.74000E00 4.02000E00 -4.98000E00 -1.32500E01 -5.76000E00 3.97000E00 -Frame 160 5.00000E00 -9.40000E-01 -1.50600E01 -4.60000E00 -1.68100E01 5.62000E00 -1.72600E01 -2.98300E01 3.00240E02 -8.67600E01 -3.29640E02 2.11280E02 -5.82700E01 -7.61000E01 2.05900E01 -2.67500E01 -4.35300E01 -3.67900E01 -8.28100E01 -1.71800E01 -4.05100E01 -3.55300E01 -3.03700E01 -2.30300E01 -2.44500E01 -2.90000E00 -2.69000E00 -1.84800E01 -2.97500E01 -9.35000E00 -6.32000E00 -5.20000E00 -5.05000E00 -1.29000E01 2.01000E00 -4.26300E01 2.43800E01 1.34300E01 1.20000E-01 -2.46100E01 1.59100E01 -1.13400E01 -1.74300E01 -1.97000E01 -1.03000E00 -2.17900E01 -1.81800E01 -8.45000E00 -9.42000E00 -1.64200E01 -1.16300E01 -2.46900E01 -1.11400E01 -3.61700E01 -1.49500E01 -6.07000E00 -2.19200E01 -1.32500E01 -3.31000E00 2.93000E00 -8.65000E00 -2.25900E01 -7.95000E00 -1.58600E01 2.99000E00 -3.75900E01 -2.74000E01 -1.98800E01 8.80000E-01 -1.67300E01 -8.80000E-01 -1.25500E01 -2.55800E01 -9.00000E00 1.70900E01 3.96000E00 -8.59000E00 -4.53000E00 2.65000E00 -1.39600E01 -6.08000E00 5.04000E00 3.44900E01 -9.19000E00 -1.42200E01 1.46000E01 -3.71000E00 -2.95900E01 -5.25000E00 -3.21600E01 8.12000E00 4.76300E01 -9.76900E01 3.95800E01 4.20500E01 -1.36450E02 7.06500E01 -4.92000E00 -4.18300E01 -3.85000E00 4.43000E01 -5.21100E01 3.05400E01 -2.82900E01 1.30800E01 2.57100E01 -1.05300E02 5.97300E01 2.18000E01 -6.53300E01 3.89000E01 -1.10690E02 2.02190E02 -1.93450E02 5.58500E01 3.28000E01 -4.70000E01 -3.23000E00 3.08900E01 -8.69700E01 1.11600E02 -7.08000E01 -8.07800E01 1.82000E02 -2.21270E02 1.31190E02 -8.25800E01 2.11100E01 5.98000E00 -4.26300E01 1.05290E02 -8.43200E01 1.12800E01 -3.61800E01 1.39920E02 -1.62670E02 -2.04700E01 1.61140E02 -1.91790E02 9.95400E01 7.80000E-01 -1.28040E02 1.50270E02 -1.32960E02 1.71700E01 -2.20800E01 4.47000E00 6.68300E01 -1.35950E02 1.45120E02 -1.92600E01 -6.77100E01 3.24000E01 -1.04300E01 3.34200E01 7.59000E00 1.99500E01 6.26700E01 -2.43500E01 3.99600E01 -Frame 160 3.32200E01 7.24000E00 2.14500E01 2.60800E01 1.08300E01 -1.19000E01 1.56800E01 1.41000E01 2.14600E01 6.03000E00 2.21200E01 1.06900E01 1.69000E01 2.52900E01 1.59200E01 3.02500E01 1.30000E01 7.21000E00 1.52400E01 4.55100E01 -4.32000E00 -2.68000E00 5.20200E01 2.23700E01 -3.02100E01 2.76200E01 2.52200E01 7.73000E00 1.37000E01 1.08500E01 1.09100E01 3.69700E01 -3.19000E00 3.74200E01 1.32600E01 3.03500E01 4.19500E01 8.88000E00 4.77900E01 -8.13000E00 5.12400E01 2.84100E01 -1.14000E00 5.64100E01 1.67000E01 5.57600E01 2.39900E01 1.22300E01 4.11000E00 3.37500E01 3.82900E01 -6.50500E01 7.74900E01 -1.62000E00 6.88400E01 -1.95700E01 3.23200E01 2.68000E01 -5.49000E01 1.08940E02 -3.12400E01 -1.97100E01 5.82100E01 3.45000E01 -6.96000E00 7.83200E01 -9.28200E01 6.38500E01 1.04320E02 -1.78040E02 1.43050E02 1.49500E01 -1.21110E02 3.03750E02 -3.48520E02 2.37380E02 1.64190E02 -4.39400E02 4.24770E02 -1.21720E02 -2.25980E02 4.11760E02 -2.48150E02 -1.04220E02 4.89270E02 -5.89330E02 5.23280E02 -2.19180E02 -1.20380E02 3.61600E02 -3.58840E02 1.05790E02 1.91700E02 -3.10900E02 3.39260E02 -1.62780E02 -7.18000E00 1.41250E02 -1.67850E02 3.86600E01 1.12530E02 -1.88410E02 1.59530E02 -8.79100E01 -3.29100E01 1.50830E02 -8.18800E01 -1.71700E02 1.51870E02 -2.56900E01 -1.49710E02 8.58000E00 1.55760E02 -9.66500E01 -1.54770E02 3.17460E02 -2.41000E02 2.05000E01 1.01070E02 2.20400E01 -1.41450E02 1.35140E02 -6.84000E00 -5.20000E00 -4.05000E01 9.91500E01 -5.59700E01 3.01700E01 -1.05000E00 6.77000E00 -1.91700E01 2.11100E01 3.06200E01 -2.86000E01 4.73800E01 6.67000E00 -3.73000E01 3.44100E01 1.03100E01 -2.55400E01 8.53000E00 1.66500E01 1.80100E01 -5.60000E00 -2.69300E01 2.71100E01 3.48000E01 -9.93000E01 2.25500E01 6.41500E01 -3.10200E01 -5.61000E01 3.71000E01 4.71500E01 -2.15300E01 -4.43100E01 8.02500E01 -4.84100E01 0.00000E00 2.49100E01 -Frame 160 -2.74300E01 -1.33600E01 1.31160E02 -1.80970E02 1.13420E02 2.88100E01 -7.44400E01 6.81900E01 -5.38300E01 5.43000E00 7.95200E01 -4.61700E01 -2.27000E01 1.03520E02 -5.24500E01 -3.61900E01 -1.13900E01 1.37190E02 -1.47760E02 -2.73800E01 2.11750E02 -1.36920E02 -1.58240E02 2.31930E02 -3.50500E01 -2.16250E02 1.44150E02 1.15600E01 -4.41400E01 3.14800E01 -9.35900E01 2.18560E02 -6.28400E01 -2.53880E02 4.09410E02 -2.24170E02 -2.43130E02 5.49550E02 -3.80770E02 -8.15000E01 3.63100E02 -1.32890E02 -4.19090E02 6.93250E02 -5.47660E02 3.13570E02 -2.30860E02 3.50900E01 3.68230E02 -5.34670E02 1.42010E02 4.02480E02 -5.86370E02 3.00750E02 1.08020E02 -2.69770E02 2.50100E01 1.25880E02 1.25750E02 -4.34500E02 4.12330E02 1.19600E01 -3.89800E02 2.96380E02 -4.65000E01 -2.29940E02 3.31160E02 -4.00700E02 2.43180E02 5.17400E01 -4.06670E02 4.84120E02 -2.05000E02 -2.77240E02 3.42540E02 -1.74840E02 -1.40060E02 3.59920E02 -4.77980E02 2.36650E02 -2.98500E01 8.43000E00 -2.55120E02 3.17410E02 -1.74660E02 -7.07900E01 7.13500E01 2.08100E01 -1.05320E02 -8.26000E00 2.36800E02 -2.17790E02 4.97600E01 3.45300E01 1.00790E02 -3.32000E02 3.18130E02 -1.01940E02 -1.30910E02 2.97340E02 -2.01450E02 -4.24800E01 2.14440E02 -2.13900E02 9.27100E01 2.57100E01 -8.43900E01 1.46180E02 -8.12600E01 -7.46600E01 1.98210E02 -1.32670E02 -5.46600E01 1.72810E02 -1.10850E02 8.68200E01 -6.14800E01 9.69000E00 9.40500E01 -1.22070E02 4.62400E01 1.19710E02 -1.38660E02 9.41100E01 -1.06010E02 1.81780E02 -2.07700E02 3.79700E01 1.68200E02 -2.04700E02 1.26060E02 -1.12070E02 1.49540E02 1.01000E01 -2.66660E02 4.54270E02 -3.77930E02 5.94900E01 3.93380E02 -6.28770E02 3.34060E02 1.75350E02 -3.14430E02 2.59400E01 2.65810E02 -1.37150E02 -2.01440E02 4.27470E02 -3.52570E02 -3.40000E00 3.55570E02 -4.19690E02 1.11470E02 2.37950E02 -4.06880E02 2.52730E02 1.85500E02 -5.81980E02 5.53350E02 7.32700E01 -Frame 160 -9.42720E02 1.28475E03 -8.26100E02 9.55500E01 3.59610E02 -4.79500E02 5.44890E02 -6.87550E02 4.61540E02 2.11730E02 -8.76000E02 1.02645E03 -7.86230E02 1.08770E02 4.22340E02 -6.10790E02 6.11700E02 -6.85580E02 7.55660E02 -5.63240E02 -1.26400E02 7.34060E02 -8.16560E02 4.99630E02 -5.00950E02 6.48990E02 -6.75120E02 3.24450E02 4.62000E00 -2.01110E02 5.29800E01 1.71870E02 -3.26730E02 2.17550E02 -1.39550E02 1.64430E02 -2.70350E02 6.36700E01 1.18950E02 -1.24180E02 -1.10720E02 1.92500E01 3.15210E02 -7.14980E02 7.41630E02 -5.01420E02 -1.51450E02 6.99470E02 -9.79960E02 6.96580E02 -3.07700E02 3.82400E01 1.98300E01 -1.46180E02 2.14800E02 -2.14270E02 -6.14200E01 3.07200E02 -3.56080E02 -1.65500E01 4.56480E02 -6.04300E02 3.58670E02 -1.68930E02 4.13000E01 3.89800E01 -1.34600E01 -2.77520E02 3.36500E02 -1.01820E02 -2.26610E02 2.40940E02 -1.37290E02 6.79000E01 -1.86400E01 -5.38500E01 -3.71100E01 1.67170E02 -2.09400E02 -1.14300E01 2.32660E02 -1.75930E02 -8.70000E01 1.10750E02 6.85000E01 -1.43130E02 -1.15180E02 3.44730E02 -3.46470E02 9.42700E01 1.19540E02 -1.11530E02 -1.44650E02 3.31330E02 -4.96290E02 4.46950E02 -1.92070E02 -1.14680E02 3.18200E02 -3.75840E02 1.35000E02 8.85000E01 -1.59530E02 1.17910E02 2.98100E01 -7.90500E01 -5.21000E00 1.68910E02 -4.02750E02 4.06280E02 -1.27060E02 -3.81780E02 8.62970E02 -9.01600E02 3.80100E02 3.74070E02 -8.69500E02 6.02280E02 2.98000E02 -1.25897E03 1.57808E03 -1.14762E03 5.35460E02 -1.67920E02 -7.19000E01 3.71150E02 -6.56450E02 4.45780E02 3.56700E01 -3.66160E02 4.88920E02 -4.81020E02 4.41490E02 -3.20890E02 2.32450E02 -3.32320E02 5.70750E02 -8.20790E02 1.08740E03 -1.30542E03 9.83980E02 -1.47750E02 -5.83340E02 8.37140E02 -7.75240E02 8.86240E02 -1.29173E03 1.49615E03 -1.48216E03 1.50181E03 -1.22935E03 3.95180E02 7.25570E02 -1.49350E03 1.53220E03 -1.13697E03 6.87380E02 -3.32500E02 2.05390E02 -7.92800E01 -Frame 160 -2.56800E01 -4.44000E01 4.06340E02 -9.09360E02 8.91100E02 -1.68600E02 -2.88910E02 2.88330E02 -1.66850E02 -5.19500E01 4.97550E02 -8.15420E02 6.33770E02 -1.34820E02 -1.13050E02 -5.95000E01 4.05760E02 -6.20970E02 5.47130E02 -1.31160E02 -3.38300E02 4.47470E02 -4.58800E01 -5.27440E02 9.03600E02 -8.31950E02 4.21610E02 -1.14460E02 2.13000E02 -4.70610E02 5.87080E02 -2.32070E02 -3.06330E02 4.51400E02 8.81400E01 -8.42430E02 1.23301E03 -9.47520E02 6.87410E02 -7.40740E02 6.92640E02 -2.72300E02 -1.37820E02 5.10950E02 -5.87690E02 3.41250E02 7.46000E01 -3.79360E02 4.40000E02 -1.27710E02 -1.03850E02 -1.04150E02 5.51640E02 -6.11800E02 2.34360E02 3.42470E02 -5.02390E02 1.41100E02 3.83360E02 -4.24240E02 -1.54100E01 4.93080E02 -6.16160E02 5.44880E02 -5.73680E02 7.13710E02 -6.93750E02 5.70920E02 -3.18830E02 6.52100E01 1.05070E02 -4.59300E01 -1.80550E02 4.43840E02 -5.23870E02 3.36990E02 1.17160E02 -3.10570E02 -4.23000E00 3.96590E02 -4.04560E02 -1.05100E02 6.62720E02 -6.26330E02 -3.66500E01 6.91300E02 -4.43880E02 -4.76740E02 9.53830E02 -5.43250E02 -2.85110E02 8.19280E02 -6.04940E02 -1.65630E02 8.69420E02 -8.45330E02 1.18690E02 4.81410E02 -4.27100E02 -3.42300E02 1.24944E03 -1.34576E03 4.44050E02 5.89790E02 -8.49510E02 1.71480E02 7.91880E02 -1.30527E03 1.08695E03 -3.61870E02 -5.39150E02 1.00059E03 -8.00990E02 7.64700E01 6.41990E02 -7.59600E02 1.41180E02 5.30680E02 -5.25270E02 -3.97380E02 1.26083E03 -1.14786E03 -2.09600E01 1.17380E03 -1.44259E03 1.06546E03 -5.07930E02 -1.58500E02 5.97880E02 -3.96910E02 -3.13090E02 7.32610E02 -5.17040E02 9.41500E01 -1.78850E02 4.85870E02 -4.13310E02 -9.99100E01 3.94270E02 -4.21640E02 3.41610E02 -2.65860E02 -1.94870E02 9.09490E02 -1.09885E03 2.51730E02 9.59830E02 -1.37707E03 7.57050E02 1.83450E02 -7.57060E02 7.38050E02 -4.98300E02 1.13580E02 6.01270E02 -1.27252E03 1.30393E03 -6.91170E02 -2.00320E02 5.22890E02 -Frame 160 -1.45030E02 -5.21470E02 7.98930E02 -4.44590E02 -3.53150E02 1.07544E03 -1.26380E03 7.63800E02 -8.96200E01 -3.19350E02 5.19110E02 -5.83990E02 4.45340E02 -1.48920E02 -1.48420E02 1.59230E02 -7.57600E01 1.80050E02 -4.32400E02 2.42610E02 3.47260E02 -6.57180E02 4.35930E02 1.98430E02 -7.56600E02 7.86540E02 -3.82340E02 -1.56010E02 5.04460E02 -4.22120E02 1.08040E02 1.28490E02 -1.01550E02 -1.81610E02 4.83020E02 -8.76250E02 9.46260E02 -6.47760E02 3.94530E02 -2.89320E02 1.84950E02 -5.52900E01 -1.44910E02 1.53830E02 1.66660E02 -3.68270E02 2.81600E02 2.83000E01 -2.19860E02 7.25100E01 -5.11500E01 1.78410E02 -2.11100E02 2.09540E02 -4.14010E02 8.35540E02 -1.04605E03 6.33150E02 -5.33200E01 -2.25970E02 1.79250E02 8.83000E00 -1.28870E02 2.69290E02 -5.79490E02 5.66020E02 -5.15800E01 -3.30230E02 7.78100E01 4.65390E02 -8.48480E02 8.16810E02 -2.77170E02 -2.28720E02 3.47440E02 -2.75910E02 1.52720E02 -1.26540E02 1.81680E02 -2.46740E02 4.04820E02 -4.63850E02 1.34050E02 3.42310E02 -9.27310E02 1.31267E03 -8.60310E02 9.32000E00 5.92830E02 -6.91170E02 3.99770E02 -2.46930E02 3.17600E02 -4.81710E02 4.96710E02 -1.50080E02 -2.83730E02 4.36750E02 -1.45900E02 -7.22430E02 1.67788E03 -2.03415E03 1.42993E03 -7.12100E01 -1.11170E03 1.62967E03 -1.36171E03 6.85680E02 -1.09260E02 -2.00680E02 -3.17400E01 6.66450E02 -1.16239E03 1.14830E03 -7.50630E02 3.83420E02 -1.39820E02 -1.02110E02 3.07860E02 -3.76780E02 2.94760E02 4.27900E01 -7.38010E02 1.20773E03 -1.07449E03 6.01720E02 -2.02800E02 -3.76010E02 8.88770E02 -6.90170E02 -2.35290E02 1.15887E03 -1.29194E03 8.59670E02 -3.17990E02 -2.24770E02 6.63540E02 -9.92300E02 1.01258E03 -6.96490E02 8.62400E01 5.61090E02 -6.39900E02 3.28570E02 -1.67320E02 1.07610E02 2.26940E02 -7.88250E02 1.06190E03 -7.22730E02 1.73130E02 7.65300E01 1.17870E02 -7.33620E02 1.18724E03 -1.22761E03 9.49010E02 -6.96950E02 6.96840E02 -6.71920E02 -Frame 160 4.14620E02 -1.23630E02 9.45900E01 -2.14530E02 3.39990E02 -3.00660E02 9.91600E01 8.92500E01 -1.80050E02 2.35490E02 -6.83400E01 -3.91500E02 9.78710E02 -1.28662E03 1.00920E03 -4.75930E02 1.24600E01 2.86940E02 -4.25360E02 3.90710E02 -8.03500E01 -3.17900E02 4.21500E02 -2.35630E02 1.91400E01 2.07770E02 -3.56960E02 1.78180E02 2.27700E02 -6.28460E02 7.52490E02 -3.12560E02 -4.86250E02 1.03414E03 -1.10342E03 7.60950E02 -2.77740E02 3.67100E01 -1.77150E02 5.09540E02 -6.29010E02 7.09820E02 -9.25610E02 1.16425E03 -1.22635E03 8.81270E02 -2.09760E02 -4.31330E02 6.61650E02 -3.52190E02 -7.70500E01 3.59670E02 -3.49440E02 5.58500E01 2.54620E02 -4.42700E02 3.75830E02 -2.85680E02 3.46620E02 -4.25850E02 3.42190E02 -8.93400E01 -1.94130E02 4.80020E02 -7.23430E02 6.70580E02 -2.36930E02 -2.01280E02 6.26660E02 -9.38380E02 1.01506E03 -9.39040E02 9.68310E02 -8.79260E02 6.61860E02 -4.87980E02 4.55080E02 -5.33120E02 4.50620E02 7.36000E00 -1.78610E02 -8.11600E01 3.09380E02 -4.23290E02 4.04780E02 -3.05920E02 2.04690E02 2.64900E02 -9.73270E02 1.27918E03 -7.86910E02 -1.71500E01 4.13430E02 -3.69060E02 2.00600E02 6.16900E01 -3.01570E02 5.79220E02 -5.86290E02 3.71000E00 7.18950E02 -8.41360E02 4.11870E02 1.84700E01 -2.03110E02 4.34650E02 -5.44270E02 2.47050E02 4.28610E02 -9.83610E02 1.03342E03 -5.78140E02 -9.69900E01 7.57130E02 -1.21504E03 1.43394E03 -1.30750E03 9.76510E02 -6.15760E02 3.10310E02 -8.72700E01 2.59400E01 -6.73700E01 1.65500E02 -1.58580E02 2.67470E02 -2.80550E02 2.15750E02 -3.39800E02 4.33790E02 -3.09100E02 2.27330E02 -3.86860E02 7.96320E02 -9.60650E02 4.65950E02 2.55230E02 -5.12240E02 2.72040E02 2.74320E02 -6.38580E02 7.05890E02 -5.89720E02 4.51160E02 -2.89190E02 8.98400E01 5.85100E01 -3.08400E01 2.00800E01 -2.73440E02 7.85220E02 -9.90110E02 6.12590E02 2.25280E02 -7.47210E02 4.46930E02 1.24580E02 -3.11850E02 1.95200E01 3.53120E02 -Frame 160 -3.49290E02 3.00910E02 -4.21060E02 5.44040E02 -4.05520E02 2.43940E02 -2.44740E02 2.52700E02 -1.01710E02 -1.02980E02 3.51810E02 -5.19660E02 4.41410E02 -5.72100E01 -2.30190E02 1.54700E02 2.43500E01 -3.50500E01 3.67500E01 1.74000E00 -1.21350E02 2.08870E02 -1.54890E02 -6.17500E01 4.13300E01 3.66560E02 -5.84490E02 3.16600E02 2.93260E02 -5.38070E02 2.83400E02 7.20100E01 -2.33980E02 3.18790E02 -3.60640E02 2.88260E02 -2.07040E02 2.36540E02 -2.66380E02 1.21400E02 1.86060E02 -3.07450E02 1.19070E02 1.13670E02 -1.17000E02 -2.96900E01 2.65350E02 -6.48730E02 9.04530E02 -6.70020E02 1.61370E02 9.03200E01 1.60990E02 -5.57300E02 7.42720E02 -6.36750E02 4.84720E02 -4.69580E02 6.66050E02 -8.77820E02 8.54390E02 -5.51630E02 2.57390E02 -1.15810E02 -1.54400E01 1.46050E02 -3.94600E02 6.78400E02 -7.04050E02 5.63410E02 -4.87460E02 4.30630E02 -2.87290E02 -2.01140E02 8.51860E02 -1.01337E03 5.75670E02 7.83100E01 -5.71500E02 7.24130E02 -6.55850E02 6.13110E02 -4.58260E02 -5.43300E01 6.94140E02 -1.02989E03 8.29730E02 -1.70920E02 -3.76350E02 3.96220E02 -1.07690E02 -2.35080E02 2.90810E02 1.15690E02 -5.32950E02 7.14850E02 -6.80430E02 5.00780E02 -3.86950E02 3.02230E02 -4.05600E01 -4.44910E02 6.94650E02 -7.26200E02 8.02690E02 -6.71890E02 3.69560E02 1.48870E02 -5.90780E02 6.30250E02 -5.21550E02 3.05520E02 -1.73120E02 3.56000E01 3.50740E02 -4.55700E02 2.07350E02 -3.52900E01 -2.54000E01 1.70820E02 -3.85050E02 4.74250E02 -4.54320E02 2.39820E02 3.12000E01 -2.22900E02 2.77350E02 -1.39190E02 -1.04480E02 2.16400E02 -1.93000E02 2.38120E02 -5.65650E02 7.94250E02 -5.75540E02 2.70850E02 -2.39840E02 2.67900E02 -2.78910E02 2.06630E02 -4.60100E01 -1.97420E02 4.69670E02 -5.23050E02 3.58020E02 -8.70000E01 -6.57000E01 -2.36800E01 9.86600E01 7.69000E00 -2.75100E02 5.38620E02 -6.23000E02 4.52040E02 -1.94100E02 4.96000E00 1.11170E02 -1.73440E02 8.43100E01 -9.20500E01 -Frame 160 3.02220E02 -5.48600E02 4.94780E02 -1.72040E02 2.16800E01 -2.29630E02 5.15500E02 -6.94810E02 5.79100E02 -1.90140E02 -2.89990E02 4.33340E02 8.63000E00 -4.51220E02 4.08130E02 -3.33000E00 -4.71510E02 4.97270E02 -8.04600E01 -3.09980E02 3.44690E02 -7.27200E01 1.15030E02 -6.56520E02 1.10868E03 -8.63570E02 -3.00000E01 8.10370E02 -9.38030E02 3.95380E02 4.11650E02 -7.89960E02 5.48010E02 -1.73160E02 -1.42470E02 2.98300E02 -2.35580E02 -3.77500E01 4.02230E02 -5.68560E02 4.67160E02 -3.33530E02 3.12330E02 -3.86130E02 3.62170E02 -2.92730E02 3.86390E02 -5.30850E02 5.40040E02 -3.22460E02 -5.33300E01 2.03170E02 -3.55900E01 -5.47000E01 -2.13500E01 -2.89500E01 1.50240E02 -1.76170E02 3.74900E01 2.93720E02 -8.56400E02 1.20771E03 -1.15048E03 9.76480E02 -6.40700E02 2.92710E02 -2.79290E02 4.87280E02 -6.19900E02 5.48260E02 -3.79970E02 3.44450E02 -4.74050E02 5.86580E02 -6.12540E02 2.92830E02 2.79920E02 -6.66650E02 8.16130E02 -7.35000E02 3.82590E02 -4.06200E01 -2.49880E02 3.57620E02 -9.54300E01 -1.77400E02 2.14260E02 -1.74170E02 1.07550E02 -1.43120E02 1.15590E02 5.61900E01 5.59000E01 -3.14450E02 4.36040E02 -3.02670E02 -9.99400E01 2.85150E02 -1.14120E02 -5.86300E01 1.52630E02 -3.71720E02 7.15060E02 -8.90220E02 6.80690E02 -2.59460E02 -9.24400E01 2.93830E02 -2.92230E02 8.38600E01 1.78500E02 -2.23100E02 1.29090E02 -1.62950E02 3.06130E02 -3.39570E02 1.96080E02 4.91100E01 -2.29450E02 9.25900E01 1.71500E02 -1.70310E02 8.47000E00 7.47700E01 -1.13950E02 7.26000E01 -1.50150E02 2.60350E02 -2.76700E02 2.84900E02 -1.91400E02 2.07750E02 -4.69950E02 4.87830E02 -1.32230E02 -5.13400E01 -1.12900E02 3.84740E02 -4.96590E02 3.55290E02 -2.26820E02 7.92800E01 1.17770E02 -2.36660E02 3.24170E02 -1.56960E02 -3.28820E02 6.54310E02 -6.57770E02 4.11190E02 -1.20180E02 9.91300E01 -3.49870E02 5.23570E02 -4.27470E02 1.59480E02 4.34300E01 -1.30250E02 -2.01800E01 3.09310E02 -Frame 160 -3.55300E02 9.48700E01 1.92870E02 -3.50280E02 4.62100E02 -5.33830E02 5.43940E02 -5.96470E02 6.89410E02 -6.87590E02 5.99470E02 -4.61230E02 3.17700E02 -1.38580E02 -1.97840E02 3.55250E02 -1.10890E02 -2.55340E02 3.00980E02 -4.77800E01 -2.01280E02 2.50660E02 -3.46600E01 -1.02770E02 -6.18900E01 4.54310E02 -9.14950E02 8.54300E02 -2.69540E02 -3.62880E02 7.10230E02 -6.55140E02 3.77880E02 -2.11510E02 2.03070E02 -2.05720E02 2.62040E02 -3.85980E02 3.84320E02 -2.57920E02 1.18220E02 -1.61200E01 1.14000E01 -1.36240E02 8.26800E01 1.88290E02 -5.13010E02 7.44480E02 -6.51840E02 2.90270E02 -8.37600E01 -4.32800E01 7.94900E01 1.25980E02 -3.61210E02 4.51870E02 -3.27330E02 1.76680E02 -5.58900E01 -2.96600E02 5.93520E02 -5.80390E02 4.47940E02 -4.26350E02 5.11720E02 -3.87680E02 -7.05300E01 4.54490E02 -6.25680E02 4.87330E02 -2.24700E02 1.79460E02 -2.27050E02 1.21080E02 -2.51400E01 -9.98600E01 2.78200E02 -4.74310E02 4.74350E02 -3.48100E02 3.89340E02 -3.18780E02 6.35000E01 5.35400E01 -1.45780E02 1.21870E02 5.66800E01 -2.44580E02 2.19070E02 2.68500E01 -1.98340E02 8.46900E01 7.73900E01 1.47900E01 -2.03760E02 1.06120E02 8.48000E00 2.88100E01 -1.69260E02 3.68700E02 -3.48050E02 5.63600E01 2.12220E02 -4.19300E02 4.51040E02 -4.35130E02 4.21700E02 -4.90370E02 5.89810E02 -6.27160E02 5.38820E02 -3.32650E02 3.92400E01 2.41590E02 -4.04030E02 4.35760E02 -4.28890E02 4.12120E02 -4.93250E02 4.51840E02 -9.52700E01 -2.72210E02 6.14630E02 -7.20680E02 2.48390E02 1.00190E02 -1.50690E02 2.28810E02 -1.39170E02 -1.24000E01 2.73000E01 -4.28000E01 -7.40300E01 1.19840E02 3.45900E01 -2.51330E02 1.92140E02 2.00140E02 -4.89800E02 7.43380E02 -8.93000E02 6.12850E02 -1.49310E02 -2.36900E02 3.75020E02 -2.07490E02 -8.82000E00 2.70000E01 -1.17100E02 4.17450E02 -6.13860E02 6.10510E02 -5.07830E02 2.00720E02 1.67990E02 -4.08910E02 5.50730E02 -6.68470E02 8.28250E02 -8.89520E02 -Frame 160 9.07420E02 -8.78920E02 7.92320E02 -7.75500E02 7.04920E02 -5.61540E02 4.33360E02 -3.11380E02 2.97140E02 -4.77800E02 5.41740E02 -7.16700E02 8.80610E02 -6.96510E02 5.66250E02 -4.39470E02 3.88120E02 -4.77060E02 2.66450E02 1.35700E02 -4.08220E02 5.22420E02 -4.81650E02 2.43680E02 3.02100E01 -2.13890E02 2.22660E02 -1.05000E01 -2.60860E02 2.75280E02 -1.30260E02 2.57800E01 8.56200E01 -2.39770E02 3.18000E02 -4.00280E02 4.24600E02 -3.24410E02 2.95720E02 -2.81250E02 2.18200E02 -2.97110E02 4.59920E02 -5.06070E02 3.93540E02 -3.72400E02 5.78320E02 -8.62100E02 1.00074E03 -9.28750E02 7.90960E02 -8.25890E02 8.25030E02 -6.03770E02 3.04810E02 -4.80000E00 -1.40980E02 -3.62400E01 3.06770E02 -4.68900E02 4.17880E02 -2.74310E02 2.13350E02 -2.71110E02 2.39700E02 -1.36920E02 3.89400E01 -1.98000E01 1.55660E02 -2.71600E02 3.06180E02 -3.84460E02 2.98900E02 -2.57890E02 2.95340E02 -3.88600E02 4.32670E02 -2.24070E02 -1.11910E02 7.48200E01 3.02250E02 -6.26570E02 5.59470E02 -2.15340E02 -7.59100E01 9.39000E01 7.68700E01 -1.34760E02 -2.81000E00 8.92200E01 -1.59990E02 2.26240E02 -4.03800E02 5.35050E02 -4.99570E02 3.47280E02 -3.39010E02 4.47790E02 -6.80500E02 8.54950E02 -9.21920E02 6.30120E02 -1.15440E02 -4.30950E02 8.29180E02 -8.17500E02 5.91660E02 -4.65160E02 3.37770E02 -3.96790E02 4.30300E02 -2.23440E02 -3.13190E02 8.33570E02 -8.67990E02 5.68640E02 -3.57840E02 2.60360E02 -3.47570E02 4.03020E02 -5.50560E02 5.88880E02 -4.16000E02 3.50430E02 -4.79770E02 5.46800E02 -5.39400E02 3.70310E02 -1.40200E02 -1.05370E02 2.33630E02 -2.46110E02 1.53540E02 3.04000E01 -2.49580E02 2.90100E01 4.16180E02 -7.89070E02 8.25140E02 -4.21510E02 -1.23320E02 5.05200E02 -7.16320E02 5.42050E02 -3.48180E02 4.55380E02 -5.39640E02 2.49070E02 9.89300E01 -5.55950E02 9.16430E02 -1.00652E03 8.29000E02 -4.41500E02 -1.13880E02 3.18970E02 -6.81000E01 -2.16080E02 2.21560E02 -3.34800E01 -Frame 160 -1.04380E02 -1.48380E02 2.85390E02 -2.37000E01 -5.44330E02 9.28440E02 -1.05712E03 9.29900E02 -8.07510E02 6.27100E02 -4.24520E02 2.53730E02 -3.22900E01 -2.79130E02 4.47650E02 -5.04520E02 3.81330E02 -6.37900E01 -2.93620E02 4.28710E02 -4.77030E02 3.05660E02 -3.67400E01 -3.40700E02 6.73250E02 -8.43080E02 7.16480E02 -5.60410E02 4.79730E02 -6.54420E02 7.04960E02 -4.67290E02 1.25640E02 1.34780E02 -3.18930E02 3.43620E02 -2.68670E02 -1.67650E02 5.95640E02 -7.22030E02 4.86220E02 -2.47630E02 4.50500E01 8.17300E01 -2.98540E02 5.64700E02 -6.62900E02 4.02150E02 -1.75250E02 8.16500E01 -7.65900E01 -5.66000E00 2.58460E02 -7.64500E02 1.01461E03 -9.29220E02 4.47700E02 1.11770E02 -4.34660E02 5.60410E02 -8.38280E02 9.69550E02 -9.44630E02 7.75870E02 -3.10160E02 -3.07490E02 5.37540E02 -6.05810E02 4.84040E02 -3.65870E02 3.36270E02 -3.75200E02 3.46670E02 -2.64470E02 1.01730E02 -3.88500E01 -1.09750E02 1.05250E02 -3.12100E01 -4.38700E01 1.28110E02 -5.47200E01 -2.91160E02 6.93350E02 -1.20435E03 1.30838E03 -1.04342E03 5.99020E02 -9.43200E01 -2.70200E01 -1.36620E02 8.35100E01 -3.36400E01 -1.84390E02 4.35360E02 -4.98140E02 3.68950E02 -1.47500E02 -8.67900E01 2.88700E01 2.20700E01 2.50300E01 -1.27950E02 1.20450E02 3.54100E01 -3.29300E02 3.83010E02 -2.81020E02 8.26700E01 2.30520E02 -4.60280E02 5.64980E02 -8.00590E02 8.89350E02 -7.82290E02 4.51100E02 -1.68000E01 -4.05160E02 5.84840E02 -3.68100E02 -4.17000E00 5.20100E01 1.27870E02 -3.28050E02 2.93230E02 -8.05600E01 -7.28400E01 -1.79820E02 4.82050E02 -4.57070E02 1.11900E01 4.72910E02 -5.55540E02 1.99720E02 1.95140E02 -2.08770E02 -1.89980E02 4.62560E02 -5.53160E02 6.55220E02 -8.35650E02 8.67150E02 -7.19210E02 3.44040E02 1.57840E02 -4.60270E02 4.92930E02 -4.46860E02 2.41700E02 -2.46800E01 -3.24280E02 7.09150E02 -8.46130E02 6.92280E02 -2.63390E02 -3.37370E02 8.18670E02 -9.71310E02 7.68260E02 -6.25100E02 -Frame 160 6.04030E02 -4.95400E02 3.21630E02 -4.33380E02 9.00660E02 -1.50989E03 1.51242E03 -6.45230E02 -4.33000E02 9.53190E02 -8.30650E02 4.88120E02 -4.53790E02 5.57590E02 -3.81280E02 -2.01830E02 8.40350E02 -1.20103E03 1.24858E03 -1.14923E03 7.91880E02 -2.37730E02 -2.26960E02 3.83350E02 -1.57830E02 -2.61600E02 6.65660E02 -8.84030E02 6.03180E02 -1.98190E02 8.40000E-01 -1.68980E02 6.09100E02 -1.01033E03 1.12810E03 -9.35400E02 7.24160E02 -7.20640E02 7.92550E02 -9.09210E02 8.40250E02 -5.85980E02 4.09230E02 -3.05170E02 3.09620E02 -3.95870E02 3.41190E02 -3.13280E02 3.39300E02 -5.34260E02 8.40660E02 -8.59690E02 5.13180E02 3.30200E01 -5.38020E02 5.63780E02 -3.09880E02 1.95730E02 -4.12210E02 6.49430E02 -3.37710E02 -3.04060E02 6.45910E02 -3.00350E02 -5.62590E02 9.80580E02 -6.01450E02 -3.48400E01 4.00320E02 -3.84440E02 5.30890E02 -8.78970E02 8.90390E02 -5.65370E02 1.16380E02 9.61000E01 -9.09000E01 -6.60000E00 1.71310E02 -1.95440E02 -2.77350E02 8.52460E02 -9.13590E02 7.99600E02 -7.39980E02 6.44520E02 -4.78770E02 6.65000E00 5.29070E02 -5.79850E02 1.24480E02 4.83470E02 -8.99890E02 8.24810E02 -4.75930E02 2.05550E02 -2.10090E02 2.16610E02 6.53000E01 -2.66750E02 1.23180E02 1.60500E01 1.10590E02 -3.15050E02 3.74440E02 -2.66100E02 -3.72000E01 3.53810E02 -3.07420E02 1.34190E02 -3.06670E02 2.58120E02 3.09130E02 -1.03457E03 1.39414E03 -1.11535E03 6.03600E02 -2.42860E02 1.87300E01 2.02390E02 -5.62460E02 1.06156E03 -1.47719E03 1.36593E03 -6.47310E02 -1.95200E02 7.10070E02 -6.26330E02 3.69530E02 -3.99160E02 5.75750E02 -4.79730E02 8.26000E01 4.03240E02 -6.82580E02 5.70660E02 -4.62880E02 4.02050E02 -1.90650E02 -1.35000E01 -2.68600E01 8.53900E01 -8.09700E01 1.47600E02 -2.81900E02 5.87580E02 -8.35600E02 8.09990E02 -4.19290E02 -2.19190E02 8.26300E02 -8.81650E02 4.83410E02 -1.63770E02 2.79190E02 -7.48410E02 1.03591E03 -8.65560E02 4.74980E02 -1.15470E02 -Frame 160 -6.60700E01 -1.14080E02 5.84530E02 -9.11800E02 8.56450E02 -6.28420E02 4.33380E02 -2.82390E02 2.35970E02 -1.16860E02 -6.34900E01 -2.74100E01 2.87810E02 -5.00490E02 6.98300E02 -6.59490E02 3.85350E02 -2.19860E02 2.01420E02 -1.14460E02 1.91000E02 -2.88270E02 2.36910E02 -2.08890E02 3.53720E02 -5.07600E02 5.51920E02 -3.04310E02 -1.75730E02 4.25990E02 -2.80800E01 -5.55160E02 9.55980E02 -1.13304E03 9.42400E02 -4.45860E02 5.03700E01 1.89900E02 -2.38430E02 1.01220E02 7.72800E01 -3.26470E02 6.17600E02 -4.49710E02 3.64000E01 2.63510E02 -2.54600E02 1.15100E01 1.66840E02 -1.18180E02 2.97100E02 -4.97050E02 3.40710E02 6.70600E01 -2.48110E02 1.07210E02 9.64200E01 -8.07900E01 -8.04000E01 3.66080E02 -5.83970E02 7.59150E02 -7.17900E02 3.69050E02 1.21270E02 -3.13280E02 1.34030E02 1.87050E02 -2.78460E02 -1.40100E02 7.99670E02 -9.21240E02 8.10500E02 -8.73960E02 8.83310E02 -6.05900E02 2.20410E02 1.07070E02 1.31300E01 -2.57720E02 4.19300E02 -7.78130E02 1.01414E03 -5.50110E02 3.27900E01 1.65690E02 -2.34450E02 4.68260E02 -6.88730E02 7.25150E02 -3.07920E02 1.79360E02 -8.24450E02 1.39247E03 -1.18935E03 8.63110E02 -6.79760E02 4.91300E02 -3.73880E02 6.40540E02 -9.41260E02 8.64910E02 -3.55870E02 1.47940E02 -4.73800E02 7.59680E02 -4.96400E02 1.61150E02 -7.11100E01 3.85200E01 4.13510E02 -1.04528E03 1.13880E03 -4.27640E02 -3.15110E02 5.74200E02 -3.47520E02 2.06590E02 -2.41350E02 3.06090E02 -1.66820E02 4.08100E01 1.18300E01 5.59500E01 -1.48610E02 3.42650E02 -5.65210E02 6.50390E02 -5.99020E02 2.98500E02 3.35500E02 -4.26660E02 -1.94980E02 8.10050E02 -8.17590E02 2.55210E02 3.91950E02 -6.10440E02 6.59750E02 -4.08390E02 -1.41700E01 2.53260E02 -2.59270E02 4.24600E02 -3.50770E02 -4.77800E01 3.41630E02 -2.80230E02 2.84950E02 -5.34650E02 8.09910E02 -6.66700E02 1.38660E02 2.06800E02 -1.24140E02 1.80810E02 -1.45970E02 -2.16710E02 6.78570E02 -7.37090E02 -Frame 160 1.06170E02 5.07410E02 -2.43410E02 -1.34210E02 1.05500E02 6.65300E01 3.19300E02 -5.64400E02 2.44110E02 5.54000E01 1.16810E02 -1.73980E02 -7.95900E01 1.73800E02 1.44870E02 -2.42080E02 1.20240E02 -1.22340E02 3.31700E02 -2.52520E02 -2.52560E02 8.64640E02 -8.68410E02 3.56770E02 1.56510E02 -2.25080E02 2.09750E02 8.98400E01 -3.94850E02 2.05850E02 2.72940E02 -3.41140E02 1.71200E01 1.95450E02 -1.88000E00 -2.26300E02 3.67560E02 -1.95550E02 1.05120E02 -1.85000E02 8.09000E00 1.73150E02 1.07160E02 -1.34960E02 -5.14300E01 1.62740E02 -9.96100E01 8.03000E00 -1.87000E02 4.21120E02 -1.09340E02 -3.35090E02 3.87500E02 -3.39200E01 -1.28330E02 3.00470E02 -3.76740E02 6.04700E01 3.49150E02 -4.26560E02 2.88150E02 1.97000E01 1.59400E01 -2.35940E02 3.17620E02 -2.35990E02 1.50510E02 -1.91700E01 5.69300E01 -1.99660E02 2.02010E02 5.39200E01 -2.14790E02 2.92400E02 -1.44990E02 -6.07600E01 1.38140E02 -8.29300E01 -6.37500E01 2.43090E02 -1.04800E02 5.66600E01 -2.37930E02 4.59600E02 -3.16720E02 -2.30740E02 6.39120E02 -3.33710E02 -2.36300E02 3.74350E02 1.78540E02 -3.22480E02 4.93200E01 -5.14200E01 9.07800E01 7.23000E01 -1.80810E02 -1.55570E02 7.39600E02 -4.67230E02 -3.70930E02 5.62700E02 -5.33200E01 -5.73300E01 -3.38400E02 5.16160E02 -8.63300E01 -1.09360E02 -1.87990E02 2.13130E02 3.40460E02 -6.99580E02 1.42880E02 4.88260E02 -3.38130E02 4.32500E01 -1.96610E02 4.32300E02 -1.73740E02 -3.51350E02 6.61880E02 -5.02170E02 2.46260E02 -6.63900E01 -1.91640E02 4.77420E02 -3.22270E02 -2.01380E02 4.50440E02 -9.20000E01 -2.64120E02 9.76900E01 2.33600E02 -1.34500E02 5.61500E01 -3.59350E02 5.15640E02 6.21000E00 -7.79970E02 6.94270E02 1.20450E02 -5.04220E02 4.92700E01 2.17830E02 1.13400E02 -2.29360E02 -1.30500E02 2.72540E02 1.07790E02 -4.87150E02 4.45970E02 -1.98470E02 2.04350E02 -2.87560E02 1.46590E02 8.30300E01 1.09430E02 -3.96450E02 3.45400E02 2.68700E01 -Frame 160 -2.29530E02 1.24360E02 -1.02920E02 3.99870E02 -4.51160E02 1.12920E02 2.57340E02 -3.56010E02 1.66010E02 2.04020E02 -3.18980E02 1.81150E02 -1.64420E02 2.49480E02 -1.52050E02 -1.26850E02 4.42250E02 -4.35460E02 -4.09000E01 4.08900E02 -3.09770E02 -4.43700E01 3.33280E02 -2.04700E02 -2.40120E02 4.31590E02 9.67000E00 -4.11300E02 3.06100E02 -2.56000E01 6.47000E00 -3.14700E01 1.94500E01 3.24930E02 -5.06440E02 1.06960E02 6.34230E02 -6.85780E02 4.80400E01 5.09510E02 -3.53220E02 -1.72290E02 3.96400E02 1.93100E01 -5.69450E02 3.98120E02 1.95240E02 -4.20090E02 3.41950E02 3.51240E02 -7.20500E02 9.33000E01 4.55180E02 -3.42170E02 2.51500E01 3.08810E02 -2.40400E01 -4.65150E02 1.80540E02 5.50030E02 -3.79560E02 -4.61530E02 1.02140E03 -7.04760E02 -3.15630E02 6.42830E02 1.32330E02 -6.50070E02 1.02950E02 3.61160E02 -3.17980E02 9.11800E01 3.09910E02 -3.01880E02 -1.43000E01 3.71900E01 -7.17600E01 2.00990E02 3.38990E02 -1.94050E02 -4.77380E02 1.70980E02 2.48230E02 -2.04360E02 2.07250E02 -3.36000E01 -1.90860E02 1.05200E02 7.03200E01 3.30000E00 -3.27900E01 1.22040E02 -3.61450E02 4.94500E01 6.58010E02 -2.82220E02 -3.65250E02 4.24500E02 -7.67200E01 -6.62360E02 6.59510E02 3.12640E02 -4.83240E02 1.17730E02 -4.82000E00 -4.64150E02 6.31750E02 1.40950E02 -8.13150E02 5.52010E02 5.48700E01 -3.57690E02 2.01330E02 2.46450E02 -2.56260E02 -1.65270E02 2.18690E02 -1.73680E02 2.84980E02 2.21560E02 -4.23020E02 2.67870E02 -1.07120E02 -1.71600E02 2.45090E02 2.04400E01 1.67830E02 -3.10370E02 -1.33060E02 4.78860E02 -6.87400E01 -4.48200E02 3.37030E02 1.47230E02 -3.36570E02 9.39900E01 1.91780E02 5.04200E01 -1.45350E02 -1.18030E02 3.02500E01 1.92090E02 7.57600E01 -1.57230E02 7.47300E01 1.82800E02 -2.87950E02 -1.32980E02 2.12910E02 3.50300E02 -2.79380E02 -2.85260E02 4.34950E02 1.01030E02 -3.18300E02 2.77100E01 3.14400E02 -1.78330E02 -5.21200E01 4.70500E01 -Frame 160 3.27250E02 -1.43180E02 -2.07010E02 1.90390E02 -2.60900E01 -1.54230E02 2.03820E02 1.91760E02 -2.11840E02 2.02900E01 -4.84100E01 1.82820E02 -1.09600E01 -1.85710E02 1.17320E02 9.36200E01 -1.39890E02 4.55200E01 -3.63700E01 4.00250E02 -2.96990E02 -3.89500E02 2.98500E02 2.55500E02 -2.65060E02 -2.25460E02 6.40580E02 -2.80190E02 -3.26160E02 3.88760E02 3.84300E01 -2.97760E02 -1.16060E02 3.01370E02 1.38430E02 -3.26700E01 -2.30200E01 -2.76040E02 1.69380E02 5.14200E01 -9.52300E01 -1.93200E01 2.35960E02 -1.09080E02 -3.66680E02 3.66100E02 8.72000E01 -3.03400E02 2.82100E01 -1.28950E02 6.11500E01 -7.99300E01 2.13700E02 -1.28790E02 -5.07500E01 -1.20250E02 3.22100E01 -4.65000E00 -2.39650E02 2.17300E02 -5.28300E01 -1.62270E02 -3.19500E01 1.44420E02 1.91100E02 -2.11960E02 -2.03290E02 1.02830E02 2.81310E02 -1.60960E02 -8.87600E01 4.31750E02 4.49500E01 -3.15850E02 4.90000E-01 3.49610E02 3.92000E01 -1.96840E02 1.33010E02 1.70940E02 -2.71100E01 -5.02500E01 1.02950E02 5.78000E01 -1.97900E01 -1.34750E02 -5.91300E01 1.88890E02 2.84100E01 -1.22050E02 -2.60400E01 2.11970E02 -1.50850E02 -1.65740E02 1.30070E02 6.49100E01 -1.16320E02 -1.02040E02 1.18780E02 6.93200E01 -9.57300E01 -5.87900E01 8.35000E00 6.85600E01 -5.14300E01 -5.50800E01 1.07210E02 6.14200E01 -3.28400E01 -2.19800E01 5.12400E01 2.06680E02 1.12740E02 -1.00200E02 1.53380E02 1.78670E02 -7.44100E01 1.87700E01 1.81830E02 1.84780E02 -4.33000E00 -1.51260E02 6.34300E01 1.14720E02 -7.34900E01 5.05700E01 9.64400E01 -1.07340E02 -1.73000E01 -3.14400E01 5.70300E01 1.22000E01 1.59900E01 -8.61000E01 -5.92500E01 5.35000E01 1.02700E02 -3.16600E01 -8.81300E01 2.37500E01 -9.69200E01 -9.92200E01 8.55100E01 7.68800E01 -1.11080E02 -1.43740E02 -6.27000E00 1.09460E02 -5.83300E01 -6.52500E01 -4.43200E01 -6.70000E00 6.30900E01 -8.90200E01 -8.07500E01 2.18500E01 3.46000E01 -1.54290E02 -7.48800E01 8.30500E01 -Frame 160 -6.22000E00 -1.14250E02 -1.90520E02 -1.12980E02 1.10500E01 -4.41100E01 -2.56950E02 -1.59150E02 -4.02000E01 -6.75600E01 -8.57300E01 1.37590E02 6.76600E01 3.40480E02 2.79400E02 -1.11840E02 -5.80800E01 -1.14610E02 2.72100E01 3.21380E02 3.95340E02 3.18220E02 -1.35700E01 -5.05900E01 1.24310E02 2.15200E01 -1.24450E02 2.12000E01 8.73500E01 5.64800E01 -2.38000E00 1.16960E02 1.01900E02 2.03000E01 -3.30820E02 -3.30470E02 -3.17900E01 1.38160E02 5.82400E01 -5.02000E01 -1.55940E02 -3.28000E01 -1.15820E02 -1.98300E02 -4.21500E01 -3.21400E01 -4.98000E01 -7.19700E01 5.22300E01 1.32210E02 1.13530E02 -1.16840E02 -1.37230E02 -6.21300E01 6.53400E01 1.40680E02 1.75210E02 1.10640E02 1.01970E02 -4.30600E01 2.34700E01 1.64040E02 4.28100E01 -2.20000E00 -3.25900E01 4.51200E01 1.54200E02 1.74520E02 -4.68000E00 -6.34000E01 -1.48860E02 -6.98100E01 -8.24000E00 6.22500E01 4.48700E01 1.19200E01 -9.10500E01 -1.39110E02 -1.29520E02 9.54900E01 4.53700E01 -4.23400E01 -1.38720E02 2.30500E01 1.92800E02 1.49620E02 1.37970E02 -1.47160E02 -2.99600E01 1.99900E02 9.26900E01 -6.19100E01 2.67800E01 2.08200E02 8.20500E01 4.29400E01 1.96000E01 -1.84600E01 -1.01660E02 -1.33200E01 3.57800E01 7.43800E01 1.01120E02 3.96100E01 -1.48200E01 -1.48900E02 -2.69700E01 -2.12300E01 -3.92800E01 -1.18400E01 3.24700E01 5.31300E01 -8.56100E01 -3.55500E01 -1.03900E02 -9.42600E01 -1.49230E02 -1.36760E02 -3.97800E01 5.72300E01 -2.82000E00 -3.37300E01 -1.16570E02 -6.78700E01 -6.86100E01 -1.90320E02 -1.40630E02 -2.42900E01 3.16500E01 -6.73000E00 -2.93100E01 -6.45800E01 -1.25900E02 -2.05020E02 -1.64420E02 -1.16440E02 -1.17900E02 -7.13300E01 -7.29000E00 -4.83000E01 8.14300E01 1.76060E02 2.21420E02 3.47950E02 2.39050E02 -2.04450E02 -8.24800E01 1.17330E02 3.39200E02 4.97610E02 2.58460E02 2.26900E01 -8.93700E01 -1.87900E01 1.30010E02 -5.86900E01 -7.01500E01 7.31200E01 2.27700E01 -1.48140E02 -Frame 160 -1.41800E01 8.09500E01 -2.04000E00 -3.03580E02 -2.66150E02 -2.29310E02 7.48800E01 1.06400E02 -3.12100E01 -1.91050E02 -1.25660E02 -2.61400E01 -1.47530E02 -1.62550E02 9.21000E01 3.52000E00 -3.88200E01 -1.24500E01 1.01730E02 1.41330E02 9.20100E01 -9.59300E01 -5.96000E01 4.79000E01 2.01670E02 1.71000E02 9.92200E01 6.31300E01 1.46870E02 1.07000E00 -4.32300E01 7.61500E01 7.21600E01 7.89900E01 -3.30300E01 -3.74700E01 9.00000E00 6.09100E01 -7.62000E00 -8.62500E01 -1.59220E02 -7.62900E01 -4.07200E01 -3.40100E01 -5.06000E00 -2.12100E01 -2.38400E01 -1.32530E02 -1.23460E02 1.31000E02 1.51200E02 6.68800E01 7.38900E01 6.70500E01 2.09400E01 1.39390E02 1.21380E02 2.67100E01 -5.39000E01 6.50600E01 1.97650E02 1.04170E02 9.07200E01 5.07900E01 -7.24000E01 -1.04310E02 -2.20900E01 5.47100E01 8.28500E01 3.58000E01 1.82800E01 -7.27800E01 -5.85700E01 -1.88500E01 -5.68700E01 5.00000E00 -1.09210E02 6.16000E00 -4.29000E01 -4.24300E01 -1.89000E01 -7.36200E01 -1.35960E02 -1.57100E02 -1.12750E02 -7.59300E01 -6.29100E01 -3.34400E01 -2.90400E01 -3.84900E01 -7.02100E01 -6.28600E01 -1.57240E02 -1.29410E02 -1.29620E02 3.26000E00 1.22000E00 -4.29100E01 -9.23900E01 -1.38340E02 -1.80610E02 -1.50050E02 -1.66440E02 -1.49220E02 -9.63700E01 9.16000E00 1.12900E02 2.65700E02 3.01940E02 5.05990E02 3.07860E02 -6.16900E01 -3.38610E02 -1.72780E02 1.89330E02 6.37450E02 5.99830E02 3.48500E02 -2.19000E01 -2.56700E02 -1.94490E02 -1.72150E02 -2.19400E01 3.29500E01 4.75200E01 -1.94900E01 -2.15400E01 1.83800E01 -8.47000E00 -2.01130E02 -3.80550E02 -3.87160E02 -2.15620E02 5.44100E01 2.42720E02 1.28610E02 -7.31600E01 -2.33110E02 -2.99800E02 -2.29290E02 -6.44100E01 1.36600E02 1.94670E02 9.63300E01 8.38400E01 4.78700E01 2.47300E01 1.88400E01 -1.42600E01 -5.03800E01 8.54200E01 1.62330E02 2.52460E02 2.54140E02 1.04640E02 -2.15700E01 -1.13650E02 -1.61460E02 1.54100E01 1.49740E02 -Frame 160 7.90900E01 3.81900E01 -3.80000E01 -9.55000E01 -8.76800E01 -7.85300E01 -1.14020E02 -1.62500E02 -7.93300E01 -6.15200E01 8.90000E-01 -6.57800E01 3.85400E01 -3.49600E01 -1.58710E02 -1.25150E02 -5.64500E01 1.83410E02 4.42500E02 2.92180E02 1.06940E02 -1.39120E02 -6.26500E01 -1.97500E01 1.75000E01 1.13890E02 1.04160E02 1.78040E02 1.92050E02 1.05330E02 -3.31500E01 -2.20860E02 -1.90150E02 -1.34300E02 -6.25900E01 9.74000E01 1.83250E02 1.24590E02 -2.49900E01 -1.88160E02 -1.85190E02 -2.08950E02 -7.22500E01 1.67400E01 -9.54000E00 4.53700E01 1.89300E01 -5.63500E01 -1.03910E02 -2.13850E02 -1.71000E02 -1.80680E02 -1.34510E02 -5.48100E01 3.03800E01 1.03150E02 5.00500E01 -5.37600E01 -2.14750E02 -2.56540E02 -2.18410E02 -8.49300E01 4.17200E01 5.32100E01 3.19700E01 -7.29900E01 -2.23160E02 -2.63800E02 -2.53490E02 -2.24670E02 -1.63800E02 -1.03950E02 1.97900E01 2.24280E02 3.92830E02 4.93180E02 4.57140E02 9.75400E01 -3.20280E02 -3.82730E02 -1.12770E02 4.85620E02 7.12040E02 5.78790E02 1.89890E02 -1.18190E02 -1.88660E02 -2.18110E02 -2.72250E02 -1.73800E02 1.38600E01 1.71310E02 1.76470E02 3.26300E01 -7.26800E01 -1.55170E02 -2.94060E02 -4.42970E02 -3.84080E02 -9.40300E01 2.43050E02 2.28300E02 3.68600E01 -2.21550E02 -2.30760E02 -2.34060E02 -1.38270E02 -2.94200E01 5.47900E01 1.02520E02 1.45600E02 8.78500E01 5.32100E01 9.04300E01 7.07000E01 -3.77200E01 -5.24700E01 -1.96400E01 1.21210E02 2.81290E02 2.46050E02 1.51490E02 4.08700E01 -8.52000E01 -1.49080E02 -7.67900E01 -3.61900E01 7.87000E01 9.80700E01 -7.05000E00 -1.54100E01 -1.18010E02 -5.06700E01 -1.61200E02 -1.63000E02 -1.15710E02 -7.38600E01 -2.36600E01 3.01000E01 2.34800E01 -1.13800E01 -8.53200E01 -5.84800E01 -6.37700E01 9.28200E01 1.75150E02 3.00850E02 1.67150E02 8.41600E01 9.75300E01 5.92300E01 -5.30000E00 -9.88100E01 -4.91100E01 1.36180E02 2.15080E02 2.03230E02 1.03840E02 -1.02700E02 -1.19510E02 -Frame 160 -1.72710E02 -1.57380E02 -7.04200E01 5.30000E00 1.36360E02 1.58350E02 -5.12000E00 -1.25630E02 -1.37740E02 -1.49090E02 -9.86500E01 -9.55600E01 -4.32900E01 5.96300E01 7.96700E01 6.25000E00 -6.14500E01 -1.84190E02 -1.39560E02 -1.23430E02 -1.41700E02 -1.19420E02 -5.83600E01 5.86200E01 1.35140E02 9.28800E01 -6.87900E01 -2.02410E02 -2.83990E02 -2.20850E02 -1.39580E02 6.30000E00 7.26500E01 8.89500E01 -3.13600E01 -1.95390E02 -3.35340E02 -3.59340E02 -2.39790E02 -1.04370E02 1.28000E00 1.39140E02 3.11080E02 5.48000E02 6.35700E02 3.58500E02 -1.28610E02 -4.58660E02 -3.20490E02 1.49240E02 4.99340E02 6.75790E02 4.72070E02 2.74630E02 4.18600E01 -2.30110E02 -5.14240E02 -4.04650E02 -2.08280E02 1.80360E02 3.21850E02 1.90420E02 4.27600E01 -8.94900E01 -2.64730E02 -3.47130E02 -4.02750E02 -2.78720E02 -2.16100E01 8.04500E01 9.25700E01 1.39600E01 -5.21100E01 1.18100E01 -8.83200E01 -1.72480E02 -2.28100E02 -1.10250E02 2.23200E01 2.36940E02 2.57950E02 2.36350E02 1.04850E02 3.11800E01 -9.68000E01 -4.46500E01 -6.58500E01 1.42350E02 2.01850E02 2.55000E02 1.88560E02 8.99000E01 -1.98800E01 -5.20200E01 -1.04090E02 -8.76600E01 -5.56300E01 -4.55500E01 6.88900E01 3.78100E01 9.74000E00 -3.62000E01 -1.19520E02 -1.57300E02 -1.44100E02 -1.58360E02 -4.89200E01 -2.30600E01 2.66100E01 4.97800E01 4.66100E01 -7.10000E-01 -2.75000E01 -9.71000E01 3.12300E01 2.85490E02 3.79340E02 2.94740E02 1.16260E02 -1.04830E02 -1.57640E02 -1.42920E02 3.44000E01 2.18180E02 2.23450E02 2.20690E02 1.61660E02 -1.03320E02 -2.41370E02 -2.39440E02 -1.46210E02 2.80500E01 1.16800E01 1.25800E02 1.05340E02 -7.84000E00 -5.35000E01 -1.12510E02 -1.70230E02 -1.22570E02 -8.73200E01 -5.89000E01 1.24500E01 -1.00100E01 4.48400E01 5.43400E01 -3.79200E01 -1.57000E02 -1.66620E02 -2.48390E02 -1.40470E02 -7.71000E01 7.42800E01 1.38250E02 1.22050E02 3.32200E01 -1.42400E02 -2.39330E02 -2.88050E02 -1.77030E02 -Frame 160 -6.74400E01 9.57000E00 4.89200E01 3.14100E01 -1.04700E02 -1.98950E02 -2.95960E02 -2.88730E02 -2.05050E02 -9.86400E01 6.81000E01 2.76880E02 4.93810E02 6.37950E02 5.13930E02 1.11590E02 -2.53290E02 -4.15210E02 -1.41750E02 1.52290E02 5.00270E02 6.12540E02 4.88720E02 2.78640E02 -6.01600E01 -3.84340E02 -4.70150E02 -3.83150E02 -4.10900E01 1.80590E02 1.94960E02 1.72600E02 2.34000E01 -8.94200E01 -1.89630E02 -2.61750E02 -3.10850E02 -2.80180E02 -1.68310E02 -1.88400E01 5.32500E01 6.25000E01 1.01960E02 6.05300E01 -6.52500E01 -1.40870E02 -1.95710E02 -1.56080E02 -2.21000E01 1.23020E02 1.89490E02 2.31820E02 2.04230E02 1.56590E02 7.73300E01 -2.84500E01 -5.14700E01 -2.71500E01 6.29500E01 1.39780E02 1.92860E02 1.67410E02 1.41030E02 2.77200E01 -1.81000E01 -1.08300E02 -1.62170E02 -1.01540E02 -5.19300E01 3.02700E01 6.59900E01 1.67600E01 -1.40000E01 -7.46900E01 -1.23180E02 -1.03050E02 -1.35200E02 -9.02200E01 -4.67700E01 2.40600E01 5.10500E01 2.18200E01 2.46600E01 6.55600E01 8.26600E01 7.82100E01 4.15500E01 9.47200E01 2.66450E02 3.54250E02 2.25450E02 -1.55200E01 -1.58900E02 -1.51540E02 -6.37900E01 1.59750E02 2.05070E02 2.00620E02 1.13870E02 1.23600E01 -1.40270E02 -3.05460E02 -2.47450E02 -9.04000E01 1.06600E02 1.10600E02 9.76300E01 1.21800E01 -5.59100E01 -9.10400E01 -8.01600E01 -1.03860E02 -1.01190E02 -7.73400E01 -1.66800E01 -4.13000E00 -3.21900E01 -9.09000E00 -5.27000E00 -1.83300E01 -5.97800E01 -1.75460E02 -1.96560E02 -1.46140E02 1.09600E01 1.23890E02 1.02180E02 2.06900E01 -6.03500E01 -1.42850E02 -1.98780E02 -2.16270E02 -1.18120E02 -3.98500E01 -9.15000E00 1.74800E01 -8.81100E01 -1.90910E02 -2.80740E02 -2.02120E02 -1.48920E02 -1.19800E01 1.95160E02 4.14480E02 6.34160E02 5.22020E02 3.12920E02 -9.49300E01 -3.39290E02 -2.46880E02 -1.73800E01 3.46230E02 4.83760E02 5.25100E02 3.84250E02 1.62720E02 -1.96770E02 -3.53150E02 -3.48000E02 -2.52340E02 -Frame 160 3.53000E00 8.43200E01 1.24540E02 6.79000E01 4.34600E01 -5.57600E01 -9.49800E01 -2.39310E02 -2.28870E02 -2.03890E02 -1.84950E02 -1.55260E02 -7.25200E01 8.30000E-01 1.22430E02 1.63660E02 6.70000E01 5.28000E00 -1.22360E02 -1.81840E02 -7.20000E01 -5.07100E01 3.82700E01 2.06950E02 2.60640E02 2.67740E02 2.00810E02 6.36300E01 -3.78400E01 -5.74000E01 -1.85000E01 5.56300E01 9.40100E01 1.08500E02 1.18350E02 8.64100E01 5.04200E01 -1.87100E01 -4.39400E01 -6.98900E01 -6.45600E01 -9.09900E01 -8.41400E01 -6.09900E01 -5.00600E01 -8.74000E00 8.70000E-01 1.67800E01 -4.88300E01 -3.14200E01 -9.84400E01 -7.84400E01 -7.07500E01 -2.47600E01 4.06700E01 9.10800E01 1.54960E02 1.83670E02 2.01100E02 1.59890E02 1.43270E02 6.60200E01 -6.60000E-01 -6.03800E01 -4.58700E01 -8.85000E00 8.93400E01 1.56500E02 1.62610E02 1.22780E02 -3.70000E-01 -5.03000E01 -1.70700E02 -1.74640E02 -1.52520E02 -6.15600E01 2.52800E01 5.47900E01 6.61700E01 4.28500E01 -1.62200E01 -7.30900E01 -7.06400E01 -1.19040E02 -1.20820E02 -1.09540E02 -6.78100E01 -2.57300E01 1.67000E00 1.59100E01 2.05700E01 -2.66500E01 -8.53100E01 -1.18710E02 -1.68040E02 -1.44750E02 -4.76200E01 3.25400E01 8.21300E01 7.41600E01 2.58600E01 -8.39700E01 -1.65130E02 -1.43660E02 -1.31410E02 -1.01680E02 -6.99600E01 -8.02200E01 -1.04750E02 -1.56970E02 -1.80690E02 -1.43010E02 -1.29070E02 -2.16200E01 1.68130E02 3.29550E02 5.56620E02 5.16170E02 2.84980E02 1.93800E01 -2.48440E02 -2.31300E02 -6.74100E01 1.88610E02 3.62370E02 4.60170E02 3.91580E02 2.61530E02 -1.67500E01 -2.27580E02 -2.79680E02 -2.88100E02 -1.46490E02 -9.35000E00 7.40500E01 8.59700E01 4.51900E01 -2.68800E01 -7.01400E01 -7.16600E01 -1.01150E02 -1.00450E02 -2.07630E02 -2.54930E02 -2.25460E02 -1.31880E02 6.70000E00 1.00540E02 1.60170E02 1.44480E02 8.11600E01 -1.92000E01 -8.86500E01 -1.59170E02 -1.56730E02 1.19200E01 1.10760E02 2.32540E02 2.28860E02 1.91850E02 -Frame 160 1.44520E02 8.16000E01 6.26700E01 3.71100E01 8.74000E00 -3.50000E00 -2.21000E01 1.76000E00 1.23700E01 3.83100E01 5.20300E01 7.71400E01 8.19700E01 3.18900E01 -4.37500E01 -1.11670E02 -1.91570E02 -1.90750E02 -1.26720E02 -2.85900E01 6.46000E01 7.46100E01 7.28600E01 -9.01000E00 -3.24000E01 -5.54800E01 -6.92200E01 -5.83200E01 -3.30300E01 1.90700E01 1.03760E02 2.10970E02 2.76300E02 3.08400E02 1.99220E02 7.75000E01 -2.40300E01 -1.56650E02 -1.30200E02 -7.17900E01 5.35100E01 1.48650E02 1.57610E02 1.52720E02 5.85600E01 -6.35400E01 -1.24330E02 -1.41860E02 -1.44780E02 -1.06640E02 -2.92100E01 1.46500E01 -3.14000E00 2.25300E01 2.79800E01 2.25800E01 -1.00000E00 -5.43000E01 -8.51900E01 -1.18950E02 -1.54640E02 -1.07290E02 -9.43800E01 -9.90000E-01 2.12800E01 3.72100E01 7.59000E00 -5.19600E01 -9.93100E01 -1.08040E02 -5.69500E01 -1.42400E01 1.87900E01 3.81000E00 -3.66500E01 -8.13400E01 -1.04350E02 -7.79900E01 -3.97600E01 -3.53300E01 -4.77500E01 -1.01530E02 -1.66900E02 -2.06160E02 -2.12470E02 -1.60810E02 -7.94400E01 8.94800E01 2.71500E02 4.71860E02 5.48950E02 4.55900E02 1.93550E02 -8.10800E01 -2.66110E02 -2.24600E02 -7.95900E01 1.91980E02 3.70770E02 3.91750E02 3.45030E02 2.04570E02 6.61000E00 -9.54400E01 -2.12520E02 -2.32990E02 -1.72850E02 -6.96700E01 -2.52200E01 2.86400E01 -8.85000E00 -7.48000E00 1.29500E01 3.60100E01 2.97600E01 -5.47000E01 -1.55710E02 -2.66690E02 -3.14850E02 -2.32210E02 -9.68100E01 2.88500E01 1.51350E02 2.15480E02 1.88380E02 8.72600E01 4.93000E00 -1.17950E02 -1.57520E02 -1.13170E02 -1.33500E01 1.15560E02 1.61340E02 1.94380E02 1.82260E02 1.53600E02 1.38920E02 1.24670E02 6.48800E01 1.20000E00 -5.14300E01 -8.06200E01 -7.36200E01 -4.73200E01 9.85000E00 4.17900E01 1.12690E02 1.32690E02 7.82000E01 7.97000E00 -1.03420E02 -1.90140E02 -1.96350E02 -1.37560E02 -7.58200E01 -7.10000E00 3.67500E01 3.49200E01 4.30000E01 4.52900E01 -Frame 160 6.61000E00 4.73000E00 -6.21000E00 -1.74800E01 6.29200E01 6.67500E01 1.23640E02 1.39180E02 1.25080E02 1.11440E02 1.18290E02 7.42600E01 3.48200E01 1.15000E00 -2.85400E01 -3.81000E01 4.10000E00 6.62000E00 3.12300E01 1.65900E01 2.45000E01 1.86500E01 -3.38000E00 -3.40700E01 -7.86600E01 -1.04540E02 -1.15110E02 -5.28900E01 -3.16900E01 3.20000E00 -1.18300E01 -1.43100E01 -2.18500E01 -5.26000E01 -5.32500E01 -6.78700E01 -6.18800E01 -7.66500E01 -6.08100E01 -3.54300E01 -3.12400E01 -5.59000E01 -4.92800E01 -3.94200E01 -6.23000E00 1.69800E01 4.68800E01 1.06500E01 -3.07200E01 -8.03500E01 -9.24500E01 -9.08500E01 -8.01300E01 -7.00200E01 -6.05500E01 -9.27500E01 -7.98800E01 -1.05560E02 -1.14960E02 -1.26570E02 -1.18450E02 -9.90000E01 2.51100E01 1.44000E02 3.44400E02 4.06650E02 4.05430E02 2.60790E02 4.44400E01 -8.26300E01 -1.45540E02 -8.22500E01 7.00800E01 1.63060E02 2.46770E02 2.62850E02 1.75200E02 8.97000E01 8.50000E00 -8.31900E01 -1.09610E02 -1.07720E02 -7.96500E01 -3.46200E01 -5.21500E01 -9.41600E01 -7.83700E01 -4.80100E01 6.34000E00 4.73700E01 2.16300E01 -2.39200E01 -1.23850E02 -1.98750E02 -2.08780E02 -1.78930E02 -1.13000E02 -1.89400E01 6.20300E01 1.15430E02 1.33360E02 9.07100E01 3.46500E01 -3.61800E01 -7.41700E01 -2.22700E01 -1.75000E00 8.54000E01 1.06160E02 9.24600E01 8.32500E01 9.16800E01 9.32900E01 1.25870E02 1.05350E02 6.21100E01 5.64900E01 -2.83400E01 -6.67500E01 -6.32700E01 -6.46100E01 -2.89200E01 2.89100E01 4.65100E01 7.26200E01 4.44800E01 -2.25600E01 -6.96400E01 -9.11000E01 -9.61300E01 -9.72200E01 -6.52500E01 -4.02300E01 -3.84000E01 -1.48000E00 3.45800E01 4.57200E01 5.51600E01 6.18400E01 6.96700E01 5.66800E01 1.23240E02 1.59750E02 1.66250E02 8.48100E01 -1.12100E01 -6.81700E01 -8.78100E01 -3.49600E01 5.65700E01 1.24890E02 1.22220E02 8.33700E01 3.02600E01 -3.75000E01 -6.93000E01 -6.60000E01 -8.15200E01 -7.54300E01 -4.20700E01 -Frame 160 -3.16300E01 2.71700E01 4.77000E00 1.68000E00 -8.50000E00 -9.98000E00 -2.49000E00 -2.77600E01 -8.47800E01 -1.02480E02 -1.28630E02 -1.05470E02 -5.55000E01 -1.09400E01 8.00000E00 5.10000E-01 -1.52200E01 -2.54300E01 -4.59400E01 -2.90500E01 -1.06200E01 -2.86200E01 -2.01600E01 -1.54300E01 -2.25500E01 -3.78800E01 -5.56600E01 -7.19500E01 -7.46900E01 -7.74600E01 -6.02600E01 -7.74900E01 -1.04200E02 -1.17660E02 -1.42450E02 -1.25900E02 -4.97500E01 4.07700E01 2.15020E02 3.50430E02 4.05680E02 3.83250E02 2.10770E02 2.67700E01 -1.01930E02 -1.57500E02 -8.66300E01 4.15200E01 1.08600E02 1.99660E02 2.08360E02 1.64150E02 1.35440E02 4.87400E01 -1.66600E01 -5.50400E01 -9.15300E01 -8.90400E01 -6.53700E01 -8.38900E01 -9.88900E01 -9.82500E01 -6.54900E01 -1.76500E01 5.56900E01 6.72500E01 3.21100E01 -5.41400E01 -1.39000E02 -1.97350E02 -1.94320E02 -1.53020E02 -9.83100E01 -1.08300E01 6.63500E01 1.20840E02 1.21890E02 9.78500E01 2.59700E01 5.84000E00 -2.19200E01 -1.05200E01 4.62400E01 4.27100E01 7.20300E01 4.61900E01 6.05100E01 7.72200E01 9.33800E01 8.79600E01 9.23000E01 5.87000E01 2.80200E01 9.38000E00 -1.58300E01 -4.77900E01 -4.26800E01 -5.63600E01 -2.94000E01 9.43000E00 2.44600E01 2.49400E01 3.42000E00 -2.27600E01 -4.77200E01 -5.84000E01 -5.43500E01 -6.31200E01 -6.21000E01 -4.99900E01 -3.94600E01 -1.15700E01 1.81900E01 8.28500E01 1.08430E02 1.58700E02 1.61380E02 1.52000E02 6.92000E01 4.79000E00 -3.06000E01 -6.10400E01 -5.13500E01 7.70000E00 4.65800E01 7.16300E01 7.94000E01 6.63500E01 2.68500E01 1.31200E01 -2.20300E01 -2.82300E01 -4.85800E01 -4.45000E01 -6.22400E01 -5.54600E01 -4.44100E01 -4.99700E01 -2.16500E01 5.70000E-01 2.14800E01 1.50200E01 -1.65000E00 -3.58300E01 -7.90300E01 -1.04490E02 -1.15640E02 -8.20300E01 -5.43100E01 -2.46900E01 6.86000E00 4.37000E00 -2.21000E00 -2.50000E01 -4.14800E01 -4.04400E01 -2.03400E01 -1.06100E01 -5.80000E-01 2.75000E00 -Frame 160 -2.18300E01 -5.31600E01 -7.74200E01 -8.23700E01 -6.54100E01 -7.88800E01 -6.47100E01 -6.90600E01 -6.55000E01 -9.17900E01 -1.07830E02 -1.24290E02 -1.11170E02 -7.85700E01 3.70800E01 1.74240E02 3.18450E02 3.66800E02 3.22290E02 1.82100E02 4.04100E01 -8.36900E01 -1.13540E02 -4.92000E01 1.51800E01 8.55400E01 1.20000E02 1.42420E02 1.30410E02 1.03920E02 4.25300E01 1.22000E00 -3.13500E01 -4.68800E01 -4.83000E00 -2.94600E01 -6.38100E01 -1.14150E02 -1.53930E02 -1.23790E02 -8.26000E01 -6.00000E-02 3.20300E01 4.20800E01 4.40000E00 -4.44500E01 -1.02770E02 -1.45800E02 -1.46030E02 -1.26140E02 -8.05300E01 3.55000E00 5.82100E01 9.34900E01 5.37600E01 4.07400E01 -5.73000E00 1.23600E01 3.89900E01 6.84000E01 8.26500E01 7.42600E01 3.45400E01 3.05600E01 2.64300E01 1.81500E01 4.46000E01 5.18300E01 6.42400E01 8.29800E01 7.62300E01 6.22100E01 -2.90000E-01 -3.47100E01 -6.51500E01 -6.74600E01 -3.77700E01 2.88000E00 -1.32100E01 -1.87800E01 -2.15000E01 -2.82800E01 -3.42400E01 -3.03500E01 -1.73100E01 -4.28500E01 -3.41400E01 -2.51300E01 -3.82000E00 -1.38500E01 7.82000E00 3.11500E01 4.41700E01 9.55500E01 1.48430E02 1.45810E02 1.26980E02 7.74600E01 1.33500E01 -3.67400E01 -2.63300E01 -5.65600E01 -1.36600E01 -6.41000E00 2.70800E01 3.75900E01 3.64000E01 3.61500E01 1.78700E01 -2.09800E01 -3.70000E01 -2.34700E01 -1.74900E01 -3.13000E01 -4.75000E01 -6.81500E01 -4.73700E01 -6.89000E01 -4.40300E01 -2.13500E01 -1.29500E01 -3.28000E00 9.69000E00 -1.69500E01 -3.14000E01 -2.52700E01 -5.39300E01 -6.14300E01 -6.01100E01 -3.37000E01 -3.54500E01 -2.32300E01 -2.76200E01 -2.31300E01 -2.34900E01 1.01500E01 3.98100E01 3.73400E01 6.75000E00 -1.28000E01 -6.09500E01 -9.15400E01 -1.15000E02 -1.35090E02 -1.12690E02 -1.15510E02 -7.73300E01 -6.69200E01 -5.31500E01 -6.89300E01 -9.51600E01 -7.01400E01 -4.83100E01 7.92100E01 1.84570E02 2.76990E02 3.18990E02 2.55980E02 1.33780E02 6.68000E00 -Frame 160 -5.93500E01 -7.03600E01 -7.64000E00 4.10300E01 1.05170E02 1.37200E02 1.40100E02 1.18970E02 8.10900E01 1.69800E01 -1.01100E01 -4.40100E01 -2.99000E01 -1.73100E01 -1.63000E01 -5.82300E01 -9.13900E01 -1.35480E02 -1.34800E02 -9.39700E01 -2.87900E01 -1.57000E00 1.34900E01 1.60000E01 -3.14300E01 -6.53000E01 -8.31600E01 -1.35500E02 -1.23340E02 -7.97000E01 -2.86500E01 2.79900E01 5.93400E01 8.35900E01 3.55000E01 2.38800E01 3.28700E01 3.41000E01 5.33300E01 7.01000E01 6.23200E01 5.02400E01 4.47400E01 2.50300E01 6.69000E00 3.27800E01 2.66500E01 4.43100E01 5.84800E01 6.80400E01 4.88400E01 2.00100E01 -1.17200E01 -5.24100E01 -5.63000E01 -3.12500E01 -2.43900E01 -1.12900E01 -2.57700E01 -4.06700E01 -4.49900E01 -5.14000E01 -3.19600E01 -3.18900E01 -2.47900E01 -1.94500E01 6.07000E00 1.23700E01 1.58500E01 4.42000E00 4.63000E00 3.88400E01 9.70700E01 1.47010E02 1.65360E02 1.48130E02 7.02400E01 -1.61100E01 -7.71000E01 -8.88900E01 -6.59500E01 -4.32300E01 -2.27600E01 4.63700E01 4.86000E01 4.28600E01 3.69100E01 -7.25000E00 -4.17600E01 -5.82900E01 -4.52700E01 -1.38000E01 1.66000E00 -1.14000E01 -4.38500E01 -7.72600E01 -9.16300E01 -5.13600E01 -2.68000E01 5.40000E-01 1.72000E00 -8.07000E00 -1.81600E01 -3.35500E01 -6.33900E01 -4.51000E01 -4.42100E01 -5.22600E01 -1.25200E01 -4.55000E00 -1.83400E01 -4.25500E01 -5.04800E01 -4.36200E01 -4.65200E01 7.52000E00 2.82100E01 1.15000E01 -1.37500E01 -5.27800E01 -7.39800E01 -1.14780E02 -1.34750E02 -1.27230E02 -1.23380E02 -1.09320E02 -9.07500E01 -7.25500E01 -8.97500E01 -9.74300E01 -8.02900E01 -1.85800E01 1.43020E02 2.52450E02 3.37000E02 3.24830E02 2.18970E02 9.26300E01 -1.77000E01 -8.24200E01 -6.20600E01 -3.10100E01 1.50300E01 8.04800E01 1.21880E02 1.38450E02 1.32410E02 6.60700E01 1.56300E01 -1.83700E01 -1.73900E01 -7.35000E00 4.02000E00 -4.82500E01 -1.22080E02 -1.79070E02 -1.79650E02 -1.32080E02 -9.49200E01 -2.05300E01 -Frame 160 2.17000E00 2.55600E01 3.26400E01 -8.10000E00 -5.51000E01 -9.35100E01 -1.09030E02 -1.07940E02 -7.17300E01 -1.13500E01 1.58900E01 1.09400E01 1.08100E01 7.65000E00 2.73700E01 6.56600E01 1.17060E02 1.15930E02 9.56500E01 7.96500E01 4.10800E01 1.72800E01 -9.27000E00 -2.06300E01 -1.53200E01 -4.83000E00 3.49900E01 7.30100E01 6.91400E01 5.80900E01 4.46500E01 -1.32400E01 -2.59000E01 -2.19200E01 -4.07900E01 -3.62000E01 -5.14300E01 -6.20800E01 -7.50000E01 -6.52500E01 -6.31400E01 -5.09100E01 -2.52600E01 2.42000E01 4.21600E01 4.16300E01 5.90400E01 3.99300E01 3.21900E01 2.01800E01 2.57800E01 5.55300E01 6.61500E01 5.80400E01 6.46300E01 4.73700E01 5.05400E01 1.37700E01 -5.14000E00 -2.46200E01 -1.16700E01 -1.13000E01 1.51000E01 3.03100E01 1.97000E00 -5.24000E00 -3.86600E01 -2.00700E01 -2.68800E01 -3.08700E01 5.00000E-02 -5.07000E00 -2.34000E00 -6.52000E00 -3.48200E01 -6.09600E01 -6.88500E01 -6.79200E01 -5.39000E01 -3.24000E01 -3.02100E01 -2.69300E01 -1.65300E01 -2.78000E01 -2.34000E01 -1.88500E01 -1.91500E01 -3.44500E01 -3.92000E01 -2.60700E01 -3.35200E01 -3.51800E01 -2.38700E01 -2.82000E01 -2.36500E01 -6.95000E00 -7.74000E00 -2.45600E01 -3.98900E01 -5.16700E01 -7.07800E01 -1.16430E02 -1.06400E02 -1.09980E02 -1.00590E02 -1.03840E02 -1.10120E02 -1.13520E02 -1.01950E02 -3.89600E01 8.79800E01 2.19730E02 3.12320E02 3.42460E02 2.80200E02 1.81750E02 7.60900E01 -2.29000E01 -4.59200E01 -4.60000E00 -2.09900E01 1.41400E01 5.03500E01 5.86400E01 6.71400E01 5.38500E01 4.91100E01 5.11900E01 6.93000E01 7.09200E01 5.35400E01 -7.41000E00 -9.42200E01 -1.87610E02 -2.31700E02 -2.18930E02 -1.50560E02 -7.69400E01 -9.80000E-01 1.93200E01 3.72200E01 2.36300E01 -8.41000E00 -4.64400E01 -5.06100E01 -6.18700E01 -4.54300E01 -8.45000E00 -5.33000E00 -1.81200E01 -3.13000E01 -2.98700E01 -1.73800E01 3.35000E01 1.01910E02 1.44330E02 1.70920E02 1.42170E02 1.09400E02 5.45200E01 -Frame 160 9.00000E-01 -2.13700E01 -4.73000E01 -3.19800E01 5.85000E00 2.08500E01 4.33000E01 3.04100E01 1.91000E01 -7.57000E00 -5.00000E-02 8.71000E00 2.47400E01 6.25000E00 -1.18100E01 -4.54100E01 -9.10000E01 -1.03910E02 -1.05120E02 -9.92700E01 -4.71500E01 -2.03800E01 1.62300E01 4.39500E01 6.74800E01 5.86700E01 5.95300E01 5.23600E01 6.79200E01 6.39000E01 6.47000E01 6.14700E01 6.80900E01 6.18600E01 4.33900E01 4.93200E01 2.64000E01 -4.24000E00 -1.48100E01 -1.68000E00 -2.13000E00 -3.58000E00 -1.30600E01 -1.48100E01 -2.45900E01 -3.46400E01 -1.59600E01 -2.16800E01 -3.85500E01 -2.59000E01 -2.58300E01 -1.27300E01 -2.02100E01 -2.69000E01 -3.67700E01 -3.59100E01 -4.99900E01 -4.14600E01 -3.36300E01 -4.25300E01 -3.96700E01 -3.56900E01 -4.15600E01 -2.45800E01 -2.50600E01 -2.85400E01 -3.81100E01 -3.09500E01 -3.35500E01 -2.72100E01 -1.06600E01 -6.60000E00 -1.24200E01 -3.04200E01 -2.59600E01 -4.23500E01 -5.92200E01 -6.55700E01 -7.30700E01 -8.27500E01 -8.46700E01 -8.35900E01 -9.44200E01 -1.01520E02 -1.09770E02 -1.35200E02 -1.27320E02 -1.04110E02 -4.01200E01 9.98500E01 2.42020E02 3.47330E02 3.75550E02 3.09280E02 1.83670E02 7.60100E01 8.96000E00 -1.81600E01 1.19100E01 2.49100E01 4.23000E01 2.82000E01 1.96500E01 3.08300E01 1.63400E01 2.64000E01 3.27600E01 4.63000E01 7.32300E01 5.99400E01 1.02000E01 -9.50700E01 -1.60490E02 -2.35770E02 -2.10150E02 -1.27540E02 -6.62600E01 -3.80300E01 -1.89000E01 -6.17000E00 -2.30500E01 -3.64400E01 -3.52200E01 -2.79400E01 5.80000E-01 1.19700E01 3.16900E01 1.79800E01 3.82000E00 -4.27900E01 -5.18100E01 -2.60700E01 3.94800E01 1.03010E02 1.54400E02 1.68230E02 1.40330E02 9.74400E01 6.91400E01 3.79100E01 1.76900E01 5.84000E00 8.63000E00 4.51000E00 -1.37300E01 -1.95100E01 -3.24400E01 -4.17300E01 -3.52600E01 -8.55000E00 2.60000E01 3.76000E01 2.35300E01 3.01000E00 -5.51400E01 -8.90300E01 -1.01880E02 -7.90300E01 -6.84000E01 -4.93800E01 -Frame 160 -2.67300E01 -9.36000E00 1.35500E01 4.41500E01 5.86500E01 7.05400E01 1.06730E02 1.33940E02 1.50870E02 1.30190E02 8.97600E01 4.60100E01 3.28800E01 2.53300E01 3.75400E01 4.01100E01 1.77400E01 -1.93200E01 -2.94900E01 -2.29300E01 -2.01300E01 -9.21000E00 6.07000E00 -2.17000E00 3.35000E00 -1.89500E01 -2.09100E01 -4.79000E01 -5.76700E01 -6.76800E01 -3.89300E01 -1.72500E01 -1.08800E01 2.70000E00 -1.63000E01 -2.08700E01 -2.45600E01 -2.53400E01 -1.51200E01 -1.05700E01 -1.58700E01 -2.83200E01 -3.31300E01 -3.80600E01 -4.71100E01 -5.54000E01 -5.99000E01 -5.04900E01 -9.75000E00 1.25000E00 1.95800E01 2.34500E01 -1.85900E01 -4.09200E01 -5.19100E01 -6.62000E01 -7.38800E01 -7.67400E01 -9.26300E01 -1.18940E02 -1.18970E02 -1.12910E02 -1.22580E02 -1.10460E02 -1.23890E02 -8.86500E01 -2.62700E01 9.00300E01 2.46810E02 3.51180E02 3.85430E02 3.29370E02 2.20270E02 1.11600E02 3.74800E01 2.30500E01 2.51700E01 4.43500E01 2.71000E01 1.33100E01 5.10000E00 -2.35000E00 2.59900E01 2.62000E01 5.14100E01 6.23700E01 6.86300E01 5.70400E01 -2.39400E01 -9.53800E01 -1.72920E02 -2.02680E02 -1.72160E02 -1.28530E02 -6.34300E01 -6.62600E01 -4.91200E01 -4.34100E01 -4.44900E01 -2.05700E01 2.10000E00 1.24600E01 4.51200E01 3.57400E01 5.00300E01 2.17100E01 -1.65100E01 -4.39000E01 -4.11000E01 -6.18000E00 6.48200E01 1.21950E02 1.39730E02 1.47930E02 1.02250E02 8.20700E01 8.12000E01 7.92400E01 7.51600E01 4.49000E01 2.76800E01 -2.00800E01 -5.32800E01 -6.24400E01 -7.28100E01 -6.14200E01 -2.66100E01 -2.69000E00 3.59800E01 2.78200E01 7.39000E00 -3.26700E01 -5.09300E01 -6.77000E01 -5.69200E01 -5.67500E01 -4.05200E01 -5.17500E01 -6.72800E01 -4.02300E01 -1.23100E01 2.44800E01 6.33800E01 1.07420E02 1.56720E02 1.83400E02 1.64740E02 1.38360E02 8.40500E01 4.90000E01 4.28400E01 5.34700E01 9.14000E01 6.74400E01 1.17000E01 -5.27500E01 -1.00120E02 -9.28400E01 -5.62300E01 -4.20000E-01 -Frame 160 1.31300E01 1.10000E00 -8.29000E00 -3.09500E01 -3.92700E01 -5.58000E01 -4.37800E01 -4.03400E01 -2.97500E01 -4.80000E00 -8.07000E00 -3.14300E01 -5.14800E01 -6.21000E01 -4.29900E01 5.75000E00 2.89900E01 2.79200E01 4.79000E00 -2.50600E01 -5.58100E01 -7.54600E01 -6.36500E01 -5.04200E01 -4.57400E01 -2.58800E01 -3.39000E00 -1.21000E00 -2.97000E00 -7.79000E00 -2.27600E01 -2.91800E01 -3.57800E01 -3.85600E01 -6.44000E01 -8.59900E01 -1.45180E02 -1.80080E02 -1.61910E02 -1.66050E02 -1.38190E02 -1.50370E02 -1.15820E02 -3.31300E01 8.51100E01 2.80890E02 3.99430E02 4.49240E02 3.68160E02 2.16230E02 1.26410E02 4.07100E01 6.23400E01 5.76000E01 3.16800E01 -3.05000E00 -7.18300E01 -5.96500E01 -6.40200E01 -2.45000E00 4.00400E01 6.08200E01 1.08200E02 9.49600E01 7.72400E01 -1.70800E01 -1.24280E02 -1.94660E02 -2.18020E02 -1.55890E02 -1.17690E02 -8.62000E01 -8.26600E01 -1.35940E02 -9.47500E01 -4.92100E01 1.97700E01 7.28500E01 8.64900E01 9.14600E01 5.34900E01 3.02900E01 1.73400E01 -2.90300E01 -2.18100E01 -2.73500E01 1.09600E01 7.04400E01 8.66900E01 1.03360E02 9.44500E01 9.11800E01 1.15730E02 1.33940E02 1.57600E02 1.10860E02 4.15900E01 -2.88400E01 -7.74000E01 -9.23700E01 -9.47000E01 -8.10000E01 -5.67900E01 -3.67700E01 -1.70900E01 -3.78000E00 3.95000E00 -4.08000E00 -1.73500E01 -7.01000E00 -3.34000E00 -6.55000E00 -2.68500E01 -6.67500E01 -1.05820E02 -8.20000E01 -3.63700E01 -4.30000E00 6.17600E01 9.48000E01 1.01770E02 1.36860E02 1.77910E02 1.93070E02 1.85530E02 1.27600E02 9.77800E01 5.09700E01 2.66900E01 4.26600E01 9.11000E00 -4.94600E01 -8.97700E01 -1.01220E02 -7.09100E01 -4.45800E01 1.36200E01 1.26200E01 -4.41000E00 -2.69500E01 -2.61500E01 -2.22900E01 -2.32800E01 -2.52700E01 -3.62900E01 -4.66100E01 -4.12000E01 -4.45800E01 -4.80200E01 -4.25200E01 -2.98100E01 1.53200E01 5.48300E01 4.45100E01 1.08300E01 -6.90000E00 -3.91700E01 -4.84000E01 -3.68700E01 -3.59500E01 -Frame 160 -5.59700E01 -6.75600E01 -8.04500E01 -4.66700E01 -1.08100E01 -2.84000E00 3.70000E-01 -1.83300E01 -2.86000E01 -6.41700E01 -5.57900E01 -7.21100E01 -1.19880E02 -1.39030E02 -1.66660E02 -1.60010E02 -1.69030E02 -1.53200E02 -1.55770E02 -1.21310E02 -1.57100E01 1.37130E02 3.30530E02 4.69570E02 4.64450E02 3.83730E02 2.23160E02 1.44430E02 1.09150E02 1.11700E02 1.13250E02 7.70000E-01 -7.61600E01 -1.45370E02 -1.54560E02 -7.48700E01 -2.16300E01 6.52900E01 7.78500E01 9.27400E01 7.60200E01 -6.27000E00 -5.90800E01 -1.38450E02 -1.48130E02 -1.05960E02 -1.23380E02 -1.27220E02 -2.00060E02 -2.11970E02 -1.66060E02 -8.45900E01 5.44600E01 1.00740E02 9.53400E01 7.56700E01 5.93100E01 5.73800E01 6.43300E01 7.64300E01 6.48300E01 2.18100E01 2.04400E01 -2.99000E00 2.86000E00 1.18900E01 4.61900E01 1.23510E02 1.46110E02 1.74280E02 1.41170E02 5.99200E01 1.91200E01 -1.99400E01 4.83000E00 -2.26200E01 -4.68800E01 -1.03830E02 -1.46430E02 -1.40200E02 -1.01640E02 -5.67900E01 -1.15000E01 9.20000E00 2.45300E01 2.03100E01 1.99400E01 -1.46000E00 -3.55200E01 -3.26000E01 -2.15600E01 -1.91600E01 -2.46700E01 -3.73300E01 -4.03500E01 -1.44300E01 5.73000E01 1.32190E02 1.68270E02 1.98310E02 1.89100E02 1.66440E02 1.67940E02 1.37350E02 1.15710E02 8.53200E01 -1.06000E00 -1.40800E01 -8.24600E01 -1.25850E02 -1.37440E02 -1.55240E02 -8.64300E01 -5.64000E01 -9.38000E00 -8.89000E00 -3.93700E01 -3.27500E01 -2.28900E01 2.33000E01 4.59000E01 -5.84000E00 -1.91700E01 -6.48900E01 -7.39600E01 -4.12400E01 -2.34700E01 2.87000E00 -1.98000E00 1.00200E01 1.03800E01 8.74000E00 -3.96000E00 -1.70500E01 -6.53000E00 -3.26800E01 -3.76100E01 -6.46600E01 -1.10490E02 -1.06640E02 -8.15800E01 -4.96800E01 -2.76000E00 -2.94000E01 -4.18500E01 -6.96600E01 -8.12800E01 -7.02000E01 -5.97300E01 -9.29000E01 -1.34030E02 -1.58330E02 -1.83260E02 -1.93820E02 -1.91560E02 -1.83090E02 -1.17230E02 3.77300E01 2.28400E02 4.34710E02 -Frame 160 4.52960E02 4.21330E02 3.06320E02 2.41470E02 2.60400E02 2.22690E02 1.92630E02 5.74900E01 -1.05850E02 -1.80110E02 -2.14470E02 -1.19670E02 -7.88100E01 -2.86000E01 8.20000E00 -5.86000E00 1.26600E01 1.75000E00 -2.14900E01 -9.42000E00 -4.29600E01 -2.74900E01 -1.14510E02 -1.97110E02 -2.59080E02 -2.78730E02 -1.59740E02 -7.59400E01 -8.50000E00 9.01000E00 -9.97000E00 3.54500E01 9.02200E01 1.70580E02 1.97250E02 1.42550E02 1.07020E02 2.72900E01 -2.93000E00 9.92000E00 -2.28400E01 1.34100E01 2.77700E01 6.75500E01 8.85000E01 5.90200E01 7.25800E01 8.05000E01 1.09600E02 1.19510E02 6.16300E01 9.20000E-01 -1.01650E02 -1.48280E02 -1.16200E02 -1.34010E02 -1.00240E02 -1.12330E02 -1.13690E02 -7.39900E01 -6.00000E01 2.74700E01 3.86100E01 4.20500E01 7.45500E01 2.39800E01 2.28200E01 -2.24000E01 -2.80000E01 -1.27500E01 -1.40200E01 6.68000E00 -1.89900E01 -1.04400E01 7.43800E01 1.34750E02 2.23860E02 2.59520E02 1.90050E02 2.01270E02 1.25670E02 1.11640E02 1.09100E02 -7.59000E00 -6.68500E01 -1.70850E02 -1.82880E02 -1.61090E02 -1.63460E02 -8.67400E01 -8.95600E01 -5.53800E01 -9.00000E-02 -5.09000E00 4.87600E01 4.12300E01 6.14300E01 9.02000E01 7.78000E00 -1.71900E01 -7.89100E01 -8.54600E01 -4.81300E01 -5.26000E01 -1.31600E01 -4.64900E01 -2.08100E01 -4.32000E00 2.86800E01 7.76700E01 4.21000E01 1.23900E01 -1.92500E01 -7.68500E01 -7.51600E01 -9.93500E01 -9.72000E01 -8.69000E01 -1.01210E02 -8.28800E01 -9.09200E01 -1.04140E02 -5.96900E01 -3.88300E01 -8.31000E00 -3.58600E01 -1.04250E02 -1.38680E02 -1.59070E02 -1.61970E02 -1.62840E02 -1.92620E02 -2.13180E02 -1.62220E02 1.14200E01 2.22370E02 4.17590E02 4.49420E02 4.17790E02 3.43780E02 3.13160E02 3.28310E02 2.90640E02 2.15560E02 4.79900E01 -9.57700E01 -1.81850E02 -2.10390E02 -1.70590E02 -1.49380E02 -8.63600E01 -3.83000E01 -3.77100E01 -2.10600E01 -1.88700E01 1.14100E01 7.06200E01 3.46000E01 -7.56000E00 -1.45010E02 -Frame 160 -2.35570E02 -2.38710E02 -2.08730E02 -1.26640E02 -1.28910E02 -1.17150E02 -9.49400E01 -4.89800E01 6.94200E01 1.32390E02 1.92160E02 2.03580E02 1.78150E02 1.47760E02 7.52900E01 4.75100E01 3.08300E01 7.61000E00 2.66700E01 -2.70000E00 -2.89700E01 -4.00200E01 6.63000E00 8.57200E01 1.25180E02 1.21750E02 7.51100E01 2.99700E01 -3.58000E00 -2.41500E01 -4.23200E01 -8.90000E01 -1.23030E02 -1.49990E02 -1.80640E02 -1.55070E02 -1.21570E02 -6.69300E01 -6.55000E00 2.66900E01 4.09200E01 3.65400E01 2.39800E01 4.40000E01 6.75900E01 4.78400E01 1.74300E01 -2.19400E01 -2.75100E01 -1.62300E01 2.44100E01 9.12800E01 1.31130E02 1.58090E02 1.71740E02 1.46660E02 1.75680E02 1.66450E02 1.54800E02 9.46700E01 -2.23800E01 -9.40000E01 -1.85720E02 -1.76080E02 -1.49960E02 -1.45880E02 -1.37530E02 -1.43790E02 -9.21100E01 -2.07500E01 6.83000E00 8.22500E01 7.59200E01 7.13200E01 5.55100E01 1.16000E00 -3.87000E00 -3.90500E01 -4.62800E01 -4.26900E01 -8.69500E01 -9.05000E01 -9.90800E01 -3.98400E01 1.42600E01 3.50100E01 6.23600E01 1.14900E01 -9.70000E-01 -2.82000E00 -3.57300E01 -2.86300E01 -7.62900E01 -9.43600E01 -1.09910E02 -1.25850E02 -1.18180E02 -1.12180E02 -7.89100E01 -3.75600E01 -6.19200E01 -6.20000E01 -9.20500E01 -1.14970E02 -9.75200E01 -1.32470E02 -1.37410E02 -2.14410E02 -2.28630E02 -1.75120E02 -7.08400E01 9.56800E01 2.67210E02 4.00750E02 3.51010E02 3.62380E02 3.20750E02 3.47530E02 3.68820E02 2.78440E02 1.66030E02 -2.19800E01 -1.36750E02 -1.56910E02 -1.52520E02 -1.42830E02 -1.19690E02 -1.34710E02 -8.60600E01 -1.14820E02 -6.36000E00 1.84600E01 7.40300E01 8.82500E01 -1.71700E01 -6.28300E01 -1.63840E02 -1.75820E02 -1.37010E02 -1.55880E02 -1.55200E02 -2.09370E02 -1.92040E02 -9.00200E01 -6.79000E00 1.02990E02 1.33040E02 1.65870E02 1.67540E02 1.20090E02 1.62050E02 1.12150E02 1.09600E02 9.78700E01 1.16900E01 -3.21600E01 -7.23300E01 -3.56700E01 4.31600E01 5.23900E01 -Frame 160 8.08600E01 5.61400E01 2.86100E01 6.62100E01 7.69200E01 6.59000E01 1.44900E01 -4.95100E01 -8.84300E01 -1.35460E02 -1.53810E02 -1.55580E02 -1.16260E02 -1.07620E02 -8.86200E01 -6.49600E01 -4.25200E01 6.64000E00 7.33000E01 9.59400E01 6.91800E01 4.65200E01 2.81100E01 2.61000E01 2.70000E01 1.19000E01 4.93200E01 1.16850E02 8.13600E01 7.57000E01 8.78000E01 1.00200E02 1.73900E02 1.75730E02 2.10470E02 1.16110E02 -8.25000E00 -3.34200E01 -4.93100E01 -7.56200E01 -1.47650E02 -1.57750E02 -1.46000E02 -1.75740E02 -1.32230E02 -7.62500E01 -1.94700E01 5.10800E01 3.17600E01 8.38100E01 5.53900E01 3.20400E01 7.99400E01 4.72500E01 4.51000E00 -6.55500E01 -1.01710E02 -8.28900E01 -8.44100E01 -3.99000E01 -2.79800E01 -2.86700E01 -1.83600E01 -7.20000E-01 4.14600E01 2.29000E01 1.67400E01 2.23700E01 -3.68500E01 -5.68700E01 -8.74600E01 -8.99200E01 -6.23800E01 -1.06940E02 -1.03790E02 -1.20460E02 -1.30550E02 -7.48500E01 -8.43800E01 -6.41500E01 -9.42600E01 -1.36240E02 -1.20420E02 -1.31030E02 -1.53880E02 -1.59330E02 -1.08840E02 3.52700E01 1.54760E02 3.38760E02 3.01100E02 2.72970E02 3.10700E02 3.17300E02 3.87810E02 3.05150E02 1.91670E02 9.05300E01 -2.77900E01 -9.07100E01 -9.74600E01 -1.12300E02 -1.11470E02 -1.28490E02 -1.01900E02 -1.47380E02 -8.01200E01 1.23000E01 5.85700E01 8.92200E01 -1.22600E01 -5.78600E01 -7.58100E01 -1.12240E02 -7.16900E01 -1.08820E02 -1.83000E02 -1.99310E02 -1.90950E02 -1.32170E02 -6.54700E01 7.33000E00 6.93500E01 9.22000E01 1.03650E02 1.26340E02 1.50600E02 1.58460E02 1.61410E02 1.30300E02 4.21100E01 -7.84000E00 -4.32000E00 -3.68000E00 2.89900E01 1.66500E01 8.92000E00 1.69500E01 3.72200E01 5.50900E01 7.94700E01 7.35400E01 4.33700E01 -2.76000E00 -3.23000E01 -7.47100E01 -8.53500E01 -8.92300E01 -1.03140E02 -1.29380E02 -1.42310E02 -1.11510E02 -5.66600E01 -1.60700E01 1.47800E01 3.25600E01 2.08500E01 3.87500E01 6.21600E01 7.52300E01 -Frame 160 4.86300E01 3.31600E01 3.11800E01 5.01100E01 6.65800E01 8.05000E01 8.37800E01 9.20900E01 8.15800E01 1.15680E02 1.10740E02 1.06560E02 1.09170E02 6.07800E01 1.38600E01 -4.65000E01 -6.66600E01 -8.13600E01 -1.16420E02 -1.11440E02 -1.09190E02 -1.31760E02 -8.79000E01 -5.16000E01 1.68700E01 1.14400E01 3.58300E01 5.89400E01 3.17100E01 4.16100E01 1.67800E01 8.17000E00 -2.07100E01 -6.54600E01 -6.55300E01 -7.75400E01 -7.08500E01 -4.78900E01 -2.51800E01 -1.17500E01 -2.49000E01 5.60000E-01 1.38000E01 4.43000E00 4.76000E00 -2.29100E01 -2.44200E01 -4.49600E01 -5.51000E01 -6.25100E01 -8.01000E01 -8.71700E01 -1.03390E02 -1.05030E02 -9.76400E01 -1.05950E02 -9.24400E01 -9.64500E01 -9.75200E01 -1.20560E02 -1.40230E02 -1.38410E02 -1.36440E02 -1.18320E02 -1.65700E01 8.13000E01 2.69080E02 2.84380E02 2.45860E02 2.50900E02 2.53850E02 3.50650E02 3.08120E02 2.19000E02 8.59400E01 2.71000E00 -8.07000E00 -4.01500E01 -5.81600E01 -9.96500E01 -1.18310E02 -7.64200E01 -1.03150E02 -7.56000E01 -4.12000E00 3.35800E01 8.44200E01 7.60000E-01 -4.54800E01 -4.91000E01 -6.97800E01 -3.70300E01 -1.08230E02 -1.67530E02 -1.91510E02 -1.87060E02 -1.09310E02 -7.90700E01 -3.28400E01 1.58300E01 2.99700E01 6.85000E01 8.21400E01 1.34110E02 1.66550E02 1.30830E02 1.18880E02 4.44500E01 2.16800E01 2.91900E01 2.19100E01 4.33900E01 4.50000E00 -5.59000E00 2.80200E01 3.66500E01 7.85200E01 9.36200E01 8.01100E01 4.21200E01 1.69300E01 1.59600E01 -1.04000E00 -2.35500E01 -5.47200E01 -8.77900E01 -1.10790E02 -1.29390E02 -9.44400E01 -7.33200E01 -6.14800E01 -1.62200E01 -2.85500E01 -1.52400E01 2.34900E01 4.13900E01 7.98000E01 5.83200E01 2.91200E01 1.09900E01 7.29000E00 3.74700E01 5.45500E01 9.71100E01 7.79000E01 6.40300E01 9.26800E01 1.13140E02 1.35140E02 1.27710E02 1.29950E02 8.81600E01 1.02000E00 -2.27900E01 -2.12900E01 -4.37000E01 -7.37400E01 -9.36200E01 -1.18010E02 -1.33030E02 -Frame 160 -9.33800E01 -1.84100E01 -2.10000E00 -2.80000E-01 1.66000E01 4.89900E01 3.43400E01 3.22100E01 5.89900E01 2.35500E01 -3.00000E01 -6.41700E01 -6.83300E01 -6.45500E01 -6.85900E01 -5.76900E01 -3.84000E01 -5.74800E01 -4.51000E01 1.47000E01 4.73300E01 2.99200E01 1.09400E01 9.36000E00 -3.28000E00 -1.13100E01 -2.35800E01 -5.22100E01 -6.66800E01 -8.45400E01 -9.78800E01 -9.85500E01 -9.71600E01 -7.86500E01 -7.95100E01 -7.43400E01 -9.59600E01 -1.02180E02 -8.55200E01 -8.72900E01 -1.08060E02 -1.24400E02 -1.18160E02 -2.06500E01 9.58600E01 2.36850E02 2.24950E02 1.66450E02 2.10970E02 2.38660E02 2.90980E02 2.80650E02 1.76750E02 9.54900E01 4.36500E01 1.31900E01 -1.82000E01 -3.95200E01 -5.84400E01 -3.88700E01 -6.46400E01 -8.91300E01 -6.42800E01 2.04100E01 5.37100E01 5.60000E01 -2.68000E00 -5.41600E01 -2.81700E01 -3.73400E01 -3.37500E01 -8.30100E01 -1.65710E02 -1.61810E02 -1.47640E02 -1.34900E02 -8.86500E01 -4.29000E01 2.29000E00 8.60000E-01 1.43700E01 6.82700E01 1.23760E02 1.26840E02 1.13890E02 7.64300E01 4.07400E01 3.79100E01 3.99600E01 3.30400E01 1.48800E01 2.11500E01 1.16000E01 2.17500E01 3.82000E01 7.71300E01 9.52000E01 8.37500E01 5.18800E01 3.49900E01 2.75600E01 2.88900E01 1.82500E01 -3.07200E01 -7.71600E01 -1.00950E02 -8.83700E01 -7.93100E01 -7.28900E01 -7.02000E01 -4.93600E01 -2.48300E01 -3.15200E01 -9.39000E00 2.34300E01 5.52400E01 4.79800E01 1.04500E01 6.75000E00 2.79300E01 4.37400E01 6.00000E01 7.57100E01 3.38400E01 1.46500E01 8.88600E01 8.62900E01 7.85700E01 8.95500E01 1.00800E02 5.53200E01 1.64000E01 2.22800E01 2.83400E01 -1.34200E01 -4.34400E01 -4.93300E01 -8.33400E01 -9.43100E01 -5.25200E01 2.62000E00 -2.95300E01 -3.96400E01 -5.02000E00 2.86800E01 2.84000E01 6.09000E00 2.90900E01 -2.20000E-01 -4.64300E01 -5.30200E01 -4.17600E01 -6.11100E01 -6.00000E01 -4.88000E01 -4.22100E01 -4.53800E01 -2.76100E01 2.27300E01 2.16000E01 -Frame 160 4.10000E-01 1.56000E00 1.47400E01 -7.69000E00 -2.18100E01 -1.33500E01 -3.76200E01 -6.86100E01 -7.05000E01 -7.03900E01 -7.32200E01 -6.80800E01 -5.57300E01 -7.29600E01 -8.16700E01 -6.65900E01 -5.90000E01 -6.91400E01 -8.15500E01 -9.22900E01 -9.33000E01 -1.29280E02 -1.01280E02 -1.03500E01 8.33700E01 1.83880E02 1.65300E02 1.47970E02 1.77950E02 2.16680E02 2.67400E02 2.39440E02 1.47400E02 7.33900E01 4.40400E01 2.07600E01 2.27600E01 -3.31800E01 -2.88000E01 -4.02400E01 -6.89800E01 -6.35300E01 -1.98400E01 5.42300E01 6.35500E01 4.91100E01 -6.81000E00 -1.74400E01 -1.23700E01 -1.20000E-01 -2.74800E01 -9.16500E01 -1.31710E02 -1.40880E02 -1.36200E02 -1.26250E02 -7.18800E01 -4.47700E01 -2.27900E01 6.88000E00 2.45000E00 5.78700E01 1.06940E02 1.11420E02 7.49300E01 4.52400E01 3.05900E01 4.04600E01 4.06000E01 2.57100E01 1.73400E01 -3.30000E00 1.44300E01 2.77000E01 5.63600E01 7.68600E01 8.39300E01 8.61500E01 5.53700E01 3.56000E01 5.02000E01 6.12200E01 1.85400E01 -2.64600E01 -5.58100E01 -7.90000E01 -6.78200E01 -5.42200E01 -5.91400E01 -5.31500E01 -3.99200E01 -3.32400E01 -1.53200E01 1.11700E01 3.44700E01 2.74600E01 2.62100E01 5.90000E00 1.09600E01 5.11700E01 6.75800E01 2.64400E01 5.01000E00 8.92000E00 3.19500E01 8.06700E01 7.58300E01 7.47800E01 8.26400E01 6.06800E01 4.20000E01 4.47200E01 2.95000E01 4.80000E00 -5.65000E00 -3.44000E01 -5.49900E01 -5.01500E01 -3.31000E01 -9.48000E00 -2.71100E01 -2.32500E01 -1.52400E01 8.04000E00 1.40400E01 2.22200E01 1.64000E00 -9.57000E00 -1.81100E01 -3.68900E01 -2.82100E01 -4.42300E01 -4.47000E01 -5.61400E01 -5.88800E01 -4.16500E01 -1.58500E01 -7.24000E00 9.64000E00 -9.70000E-01 -4.91000E00 -5.97000E00 -5.06000E00 -9.12000E00 -2.83000E01 -3.80500E01 -4.90700E01 -5.03900E01 -4.57100E01 -4.38500E01 -4.49000E01 -4.59500E01 -5.60000E01 -4.33200E01 -5.62200E01 -5.24800E01 -5.75900E01 -6.58200E01 -6.82600E01 -9.47300E01 -Frame 160 -8.19500E01 -8.87200E01 -1.13640E02 -9.12500E01 -2.41100E01 6.41000E01 1.75950E02 1.63070E02 1.26620E02 1.51910E02 1.94830E02 2.19890E02 1.99520E02 1.22340E02 7.06700E01 4.43500E01 -1.08100E01 -3.65000E00 -3.02500E01 -2.46300E01 -2.80000E00 -2.02800E01 -3.82700E01 1.23000E00 5.49600E01 6.93100E01 4.80500E01 -1.79000E01 -1.58600E01 -3.27300E01 -3.10800E01 -6.23400E01 -8.45000E01 -1.31260E02 -1.21340E02 -1.20000E02 -1.03510E02 -6.24200E01 -3.10100E01 -6.10000E-01 1.67200E01 6.56000E00 5.50700E01 7.60200E01 6.45400E01 5.36400E01 1.93500E01 -2.00000E-02 5.01000E00 6.19000E00 1.04000E01 8.73000E00 2.00000E00 2.70600E01 5.28700E01 5.64300E01 7.90500E01 9.83000E01 8.80600E01 5.84300E01 2.98400E01 2.53500E01 9.71000E00 -1.24100E01 -2.41900E01 -6.03000E01 -8.74600E01 -5.73700E01 -4.32900E01 -4.27300E01 -3.01100E01 -2.00700E01 -5.70000E00 9.12000E00 4.39000E00 2.35100E01 1.12000E01 -7.50000E00 -1.07700E01 2.78700E01 5.68000E00 -7.20000E00 1.45300E01 1.79200E01 1.84000E01 2.88800E01 5.46600E01 6.11900E01 7.38700E01 7.58800E01 6.48900E01 3.35100E01 2.01400E01 2.73500E01 -2.12300E01 -3.42800E01 -3.86900E01 -4.71900E01 -3.99000E01 -3.13400E01 -1.14800E01 -2.59900E01 -9.92000E00 1.66000E00 1.86000E01 8.05000E00 1.17000E00 -1.09200E01 -3.03700E01 -4.03900E01 -5.06800E01 -4.22400E01 -4.55000E01 -5.28200E01 -4.43200E01 -1.35200E01 -7.76000E00 -8.82000E00 6.09000E00 1.44500E01 -9.50000E-01 -1.48300E01 -6.13000E00 -2.01600E01 -3.86100E01 -4.56000E01 -4.97700E01 -6.30300E01 -5.96500E01 -4.71200E01 -3.81700E01 -3.99200E01 -1.77000E01 -1.87900E01 -1.19100E01 -2.98200E01 -3.52700E01 -3.48700E01 -7.54400E01 -8.12100E01 -7.91000E01 -8.88700E01 -1.10880E02 -8.64900E01 -7.42900E01 -1.03670E02 -5.48900E01 6.42000E00 1.04590E02 2.21670E02 1.52140E02 1.23300E02 1.25440E02 1.44520E02 1.96050E02 1.47990E02 6.03100E01 2.88700E01 1.04400E01 -3.05600E01 -Frame 160 6.21000E00 -8.80000E-01 4.18200E01 4.98100E01 -6.99000E00 6.47000E00 3.93500E01 9.92200E01 4.78600E01 8.80000E-01 -6.35400E01 -4.68800E01 -6.46500E01 -1.00900E02 -8.11700E01 -7.67500E01 -8.61200E01 -1.00700E02 -7.36400E01 -2.86800E01 2.86900E01 2.28000E01 1.67000E01 5.39000E00 4.72000E00 2.70200E01 1.39800E01 5.52000E00 3.79000E00 -2.00000E01 -3.35100E01 -1.94100E01 2.41400E01 8.00100E01 7.25300E01 5.07500E01 6.32500E01 8.30800E01 9.04500E01 8.49700E01 4.52500E01 2.52700E01 1.06600E01 -2.34000E01 -4.64800E01 -3.12200E01 5.50000E-01 -9.69000E00 -4.32300E01 -4.37600E01 1.67400E01 3.01000E01 2.28500E01 -1.64000E00 -9.88000E00 -1.43600E01 -3.79600E01 -4.52500E01 -3.17200E01 -7.74000E00 -1.01000E00 -7.00000E-02 -1.81000E01 2.23300E01 6.29900E01 5.08500E01 6.22900E01 6.50300E01 4.58000E01 5.19400E01 3.72300E01 3.00400E01 2.76100E01 -8.91000E00 -2.55400E01 -3.86500E01 -3.01200E01 2.71000E00 8.56000E00 -1.14100E01 4.02000E00 -1.07000E00 1.26900E01 2.08700E01 9.29000E00 -3.65000E00 -2.59800E01 -5.39700E01 -6.07700E01 -3.77200E01 -3.49200E01 -2.20000E01 -2.96600E01 -1.75300E01 -5.01000E00 5.90000E00 1.71400E01 6.71000E00 -1.40500E01 -2.64400E01 -3.61900E01 -3.92100E01 -2.32900E01 -2.18600E01 -2.93700E01 -4.10900E01 -4.61400E01 -2.13100E01 -2.47000E01 -1.91800E01 -1.94800E01 -1.77800E01 -2.30200E01 -4.54100E01 -1.94600E01 -2.77000E01 -4.31800E01 -6.31100E01 -6.66100E01 -6.21700E01 -6.15500E01 -6.48700E01 -5.42500E01 -6.22700E01 -6.75000E01 -5.08500E01 -4.86600E01 -5.73800E01 -6.03400E01 -8.43600E01 -2.60700E01 -1.39800E01 6.24700E01 1.96200E02 1.21860E02 1.08090E02 1.23780E02 1.32830E02 1.45030E02 1.21470E02 6.60700E01 4.99000E01 2.01900E01 -3.34500E01 2.92900E01 -4.05000E00 4.55900E01 6.47300E01 -4.59000E00 -8.04000E00 1.14200E01 6.14800E01 1.40400E01 -1.38700E01 -6.06200E01 -4.17500E01 -8.22500E01 -9.09200E01 -4.67700E01 -3.02100E01 -Frame 160 -4.41100E01 -6.54000E01 -4.62900E01 -2.95500E01 1.37300E01 1.23300E01 -1.01300E01 -2.72800E01 -3.59400E01 3.16000E00 -9.54000E00 -2.06300E01 3.09500E01 2.70900E01 1.08000E00 2.60000E-01 6.04100E01 9.03600E01 6.91500E01 3.92200E01 5.13300E01 4.27700E01 2.49100E01 3.54800E01 2.03500E01 1.27400E01 2.89000E00 -1.32600E01 -1.08900E01 -7.43000E00 2.61500E01 1.87500E01 -3.08900E01 -3.60300E01 -3.29000E00 3.47000E00 -2.35600E01 -2.64000E01 -1.83000E01 -2.69300E01 -3.68000E01 1.80600E01 6.56000E01 2.45500E01 1.32100E01 1.45100E01 8.40000E-01 2.87500E01 6.95000E01 3.14500E01 2.20000E00 5.00000E-02 -2.16000E00 1.35700E01 -1.42200E01 6.15000E00 3.91500E01 -1.58600E01 -3.95500E01 1.50700E01 3.53700E01 1.62700E01 6.57000E00 -3.04300E01 -2.15400E01 -2.83500E01 -2.93400E01 -2.33000E00 -2.24800E01 -2.02300E01 -4.89000E00 -2.80700E01 -2.69400E01 1.25000E00 1.33100E01 -2.62700E01 -4.30500E01 -3.03100E01 -6.15000E00 -1.82400E01 -2.96900E01 -1.54700E01 -1.38000E01 -2.00700E01 -1.45200E01 8.21000E00 -1.43700E01 -1.86400E01 -2.60300E01 -4.86300E01 -6.48900E01 -4.16000E01 -9.56000E00 -2.25300E01 -5.08900E01 -2.80900E01 -1.75700E01 -2.37200E01 -3.80500E01 -2.68000E01 -2.91900E01 -6.16400E01 -7.10500E01 -4.67000E01 -5.75700E01 -5.97400E01 -3.89400E01 -4.24800E01 -3.71100E01 -5.85600E01 -4.76400E01 -4.73600E01 -7.10500E01 -3.04300E01 4.84500E01 5.67000E01 1.66130E02 1.91770E02 8.50100E01 7.78600E01 9.54100E01 9.64100E01 9.83500E01 6.52600E01 1.90900E01 3.84800E01 -4.56000E00 2.40800E01 9.35900E01 5.51700E01 7.65200E01 8.54700E01 -3.70000E-01 -2.98500E01 1.38000E01 7.80000E00 -3.33800E01 -5.77900E01 -5.38900E01 -3.58100E01 -3.21300E01 -2.53000E01 2.07700E01 5.25000E00 -2.87500E01 -3.47700E01 -4.49400E01 -4.53800E01 -1.67900E01 -1.03000E01 -3.06000E01 -3.35000E01 -2.46000E00 3.05400E01 2.05300E01 1.91900E01 5.27900E01 5.53800E01 1.10000E01 1.12400E01 -Frame 160 3.44800E01 4.74100E01 3.37000E01 2.55400E01 3.61100E01 2.89800E01 4.66100E01 4.97500E01 3.89500E01 1.97900E01 1.80300E01 4.21000E00 -1.10300E01 -2.77200E01 6.11000E00 -1.00000E-02 -1.73100E01 -1.91200E01 -7.96000E00 1.05600E01 5.65000E00 1.25900E01 2.97400E01 2.44000E01 1.28800E01 4.00000E00 3.68500E01 1.56900E01 2.58700E01 4.73500E01 -3.54000E00 1.01000E00 1.87100E01 1.09500E01 -4.05000E00 1.55000E01 1.65000E00 1.03800E01 2.38000E00 -1.78600E01 2.43000E01 1.97500E01 -5.95000E00 -1.24300E01 -1.09000E00 -9.39000E00 7.00000E-02 -3.17000E00 -8.50000E00 -3.98000E00 -2.63100E01 -1.43000E01 -1.19000E01 -2.94100E01 -1.04300E01 -1.08500E01 -3.72700E01 -2.94700E01 2.60000E00 -2.03400E01 -2.19700E01 -1.66300E01 -1.41100E01 -6.50000E00 -2.16500E01 -1.72500E01 -5.70000E00 -2.07900E01 -3.03300E01 -1.31400E01 -3.14100E01 -3.72200E01 -2.91800E01 -4.58700E01 -3.40400E01 -2.38200E01 -2.02700E01 -1.76000E01 -2.58400E01 -5.63200E01 -4.37000E01 -3.66600E01 -5.33800E01 -4.95800E01 -4.26300E01 -3.34400E01 -4.19500E01 -4.37000E01 -3.44800E01 -3.29600E01 -3.53800E01 -5.68600E01 -7.69700E01 -6.16500E01 -5.18200E01 -8.46600E01 -2.24600E01 6.06600E01 5.62700E01 1.04670E02 1.71450E02 1.13120E02 5.58700E01 5.07900E01 3.35000E01 5.76400E01 5.44700E01 3.01500E01 4.30500E01 7.23100E01 8.04100E01 1.23690E02 7.42000E01 2.21200E01 5.24200E01 5.62000E00 -5.36200E01 -2.96300E01 1.31400E01 1.52300E01 -1.76200E01 -3.84600E01 6.10000E00 4.10400E01 -2.89700E01 -4.81100E01 -3.37900E01 -5.99900E01 -5.19400E01 -4.65900E01 -5.30300E01 -1.62000E00 1.33800E01 -1.51700E01 -3.15900E01 1.51000E00 1.56300E01 2.51700E01 -3.70200E01 -3.61000E01 3.88800E01 2.51400E01 -6.05000E00 3.68000E01 7.99400E01 5.13400E01 2.18100E01 2.23500E01 3.78900E01 4.88800E01 1.51700E01 -5.90000E-01 8.17000E00 7.20000E00 2.92000E01 1.98600E01 1.22000E00 3.30100E01 3.47600E01 -1.64600E01 -Frame 160 -2.52400E01 3.97400E01 2.27000E01 2.61200E01 2.26300E01 -3.09800E01 -1.02100E01 4.92200E01 4.44500E01 6.50000E00 -5.62000E00 -2.11000E01 -1.20300E01 -3.76600E01 -2.10400E01 6.71200E01 2.19500E01 -5.86300E01 -1.64000E00 3.81200E01 6.08000E00 -1.19500E01 4.80000E-01 -8.70000E00 -1.81500E01 -5.87000E00 2.38000E01 4.23700E01 -1.05200E01 -7.03000E00 3.58000E00 -3.34800E01 -1.76500E01 2.06900E01 -1.58000E01 -4.24000E01 -1.77800E01 -1.03800E01 2.60000E-01 -7.77000E00 -1.90400E01 -6.40000E-01 -2.16700E01 -3.63300E01 5.90000E-01 6.65000E00 -1.81100E01 -1.56200E01 -1.90400E01 -1.65500E01 5.03000E00 5.27000E00 -2.34900E01 -3.31200E01 -4.80200E01 -4.63400E01 -3.95700E01 -4.45600E01 -3.36700E01 8.58000E00 9.12000E00 -5.03400E01 -2.86000E01 1.58300E01 -2.63900E01 -9.19000E01 -6.43600E01 -1.92000E00 -2.75600E01 -4.79800E01 -4.20000E01 -1.81000E00 -6.39000E00 -5.61200E01 -8.23500E01 -2.23300E01 -2.84500E01 -4.57500E01 -5.65600E01 -9.66700E01 -5.39500E01 7.61200E01 4.51200E01 2.01000E01 1.00270E02 1.71810E02 6.53900E01 -5.53900E01 1.41400E01 9.08000E01 4.87400E01 6.33000E00 5.36000E01 1.11280E02 1.01640E02 4.96100E01 6.99300E01 4.78200E01 2.99000E00 1.37800E01 -1.51000E01 -2.08500E01 5.52500E01 4.86600E01 -2.91700E01 1.36300E01 2.97500E01 2.33500E01 -5.26000E00 -4.17400E01 -2.13000E01 4.80000E00 -7.42900E01 -5.97500E01 3.33000E01 -1.28000E01 -5.93100E01 -2.22000E01 1.00800E01 -1.86500E01 -2.32500E01 -1.89700E01 1.04600E01 -1.62100E01 -4.56900E01 2.09600E01 4.86500E01 -1.85000E00 2.09000E00 4.41500E01 1.44700E01 1.48600E01 2.72500E01 2.10000E01 2.65400E01 3.23000E00 -3.80000E00 2.69600E01 2.66500E01 2.33100E01 3.18500E01 1.56300E01 -3.10000E00 3.16000E01 3.13500E01 2.90700E01 2.67000E01 1.92400E01 2.05400E01 -5.13000E00 -9.58000E00 1.88500E01 1.21500E01 -1.17600E01 1.16100E01 -2.43000E01 -3.22900E01 3.75100E01 2.44400E01 -4.70500E01 -Frame 160 -4.67000E01 1.97100E01 5.16000E00 -1.78400E01 4.47000E00 9.47000E00 -1.73800E01 5.96000E00 3.20200E01 -4.81400E01 -3.87300E01 5.20100E01 -1.24900E01 7.03000E00 -8.38500E01 5.40000E-01 1.61540E02 -1.67630E02 -2.48200E01 1.39430E02 -9.83700E01 -2.34300E01 5.85000E00 5.20300E01 4.85900E01 -1.23000E02 -5.47800E01 1.59600E02 8.54600E01 -2.39050E02 -4.93700E01 1.75220E02 2.11590E02 -3.42110E02 -1.27610E02 3.08640E02 5.00900E01 -1.70500E02 -2.00750E02 1.89250E02 9.51300E01 3.50100E01 -5.22000E02 2.03250E02 5.68730E02 -4.75020E02 -5.02600E02 6.46430E02 2.62380E02 -5.49790E02 -1.65560E02 3.58700E02 1.10830E02 -2.30810E02 -3.58800E02 4.11580E02 1.54390E02 -4.24900E02 -1.23710E02 4.58900E02 -7.59100E01 -2.85190E02 -4.16800E01 1.35390E02 1.18800E02 -2.32420E02 -1.92290E02 2.43250E02 1.36020E02 -3.66660E02 -4.65500E01 2.20490E02 -1.44300E01 -1.69610E02 6.35600E01 1.46870E02 -4.53900E01 -1.20560E02 3.40500E01 1.32400E02 -2.83400E01 -9.30300E01 8.23600E01 7.10900E01 -1.60000E00 -1.95400E01 1.98000E00 1.03160E02 3.03700E01 -9.47000E01 2.44500E01 1.17260E02 -2.41700E01 -5.29500E01 5.24300E01 6.80200E01 -2.99700E01 -5.19600E01 5.84200E01 3.91600E01 -6.07300E01 -5.86500E01 5.45500E01 2.32000E01 -7.51400E01 -4.04500E01 8.43500E01 9.93000E00 -1.12800E02 1.07800E01 8.11700E01 -6.93400E01 -1.00440E02 7.05900E01 2.68400E01 -1.26290E02 1.09600E01 1.31440E02 -8.24800E01 -1.10940E02 1.01820E02 7.80600E01 -1.09510E02 -7.27800E01 1.32150E02 -3.77100E01 -1.87900E01 6.07300E01 -6.23500E01 -2.21800E01 9.92500E01 6.63400E01 -1.72650E02 -1.68700E01 2.31740E02 -3.31800E01 -3.13260E02 2.86290E02 1.35110E02 -3.22870E02 3.92900E01 3.43610E02 -2.11980E02 -1.67550E02 2.22410E02 1.10220E02 -2.56540E02 -1.44000E01 2.90240E02 -1.80970E02 -1.39580E02 2.90220E02 -1.56960E02 -2.10820E02 3.73850E02 -1.59750E02 -2.11700E02 3.30940E02 -1.68950E02 -1.13140E02 -Frame 160 3.22500E02 -2.53690E02 -7.14600E01 2.69470E02 -2.14310E02 2.81500E01 2.01080E02 -3.89830E02 2.26350E02 1.50370E02 -1.69100E02 -1.00290E02 5.27400E01 7.54500E01 1.60790E02 -3.42380E02 8.21000E00 3.85630E02 -2.90640E02 -8.55000E00 1.16270E02 -5.11600E01 -1.07200E01 9.09800E01 -8.12600E01 -1.35750E02 2.49200E02 -1.21800E01 -3.12630E02 2.44920E02 2.10480E02 -4.29220E02 1.33700E02 2.69900E02 -1.93940E02 -2.40940E02 3.27830E02 9.78800E01 -4.08270E02 1.34310E02 1.53540E02 -1.02780E02 1.60700E01 -1.59420E02 7.68100E01 1.66270E02 2.03400E01 -4.57120E02 2.57080E02 2.93120E02 -3.31000E02 -1.04110E02 2.05890E02 1.66280E02 -4.48710E02 1.55700E02 3.06650E02 -4.63020E02 1.46940E02 1.46620E02 -1.93850E02 -1.07670E02 3.39270E02 -1.36290E02 -3.70430E02 5.28530E02 -4.32100E01 -5.44590E02 3.47030E02 3.59890E02 -6.29190E02 1.55730E02 3.58770E02 -4.14250E02 8.21000E00 2.94720E02 -2.24190E02 -7.39400E01 1.72020E02 -4.85800E01 -6.29600E01 1.01270E02 -7.45200E01 2.03200E01 -1.19300E01 4.88300E01 -1.13580E02 7.10900E01 1.33400E02 -2.22490E02 7.28200E01 8.41900E01 1.28300E01 -1.27750E02 1.13440E02 8.19800E01 -1.56530E02 -2.12700E01 1.56190E02 -1.50100E01 -1.46490E02 1.03100E02 1.07310E02 -1.65450E02 -4.94900E01 2.80100E02 -2.14380E02 -1.40950E02 3.77880E02 -1.61600E02 -2.86610E02 3.68780E02 2.90900E01 -2.99130E02 2.08780E02 3.12000E01 -1.90900E02 2.16310E02 -7.50900E01 -4.54300E01 -5.88100E01 1.80450E02 -8.00600E01 -1.22550E02 1.37760E02 5.39900E01 -1.48420E02 -9.49500E01 4.48260E02 -3.60150E02 -1.45220E02 4.21490E02 -7.86700E01 -4.09220E02 4.27390E02 -1.09530E02 -1.78950E02 1.71650E02 -2.07000E00 -5.81600E01 -1.49300E01 3.50650E02 -6.14790E02 3.04490E02 5.41910E02 -9.32830E02 9.77000E01 8.72000E02 -6.88570E02 -3.18750E02 7.15800E02 -1.33330E02 -5.08590E02 5.00020E02 4.63500E01 -4.98390E02 3.08490E02 2.47030E02 -3.98560E02 -8.47400E01 -Frame 160 3.45860E02 2.42450E02 -8.48380E02 3.76850E02 7.44610E02 -1.22595E03 6.43700E02 2.67560E02 -6.64460E02 2.51320E02 3.56180E02 -3.25050E02 -3.42040E02 5.57760E02 1.09860E02 -6.02990E02 1.82680E02 5.79470E02 -7.40010E02 1.58400E02 3.08440E02 -9.01700E01 -3.71020E02 4.58790E02 -3.14170E02 1.08260E02 8.65000E00 1.94950E02 -4.11170E02 1.59350E02 3.17360E02 -3.64040E02 -1.59170E02 4.31180E02 -8.66200E01 -3.21350E02 2.77960E02 1.65540E02 -5.15510E02 2.87860E02 1.41800E02 -4.31910E02 5.34040E02 -4.00640E02 2.32150E02 -4.97100E01 -1.66240E02 3.51780E02 -3.17510E02 5.18000E01 9.24800E01 -8.56700E01 -7.25000E00 2.20600E02 -5.24710E02 4.49420E02 1.64250E02 -6.91890E02 3.88140E02 4.05200E02 -7.00590E02 3.45080E02 6.27600E01 -5.33500E01 -7.90000E01 -2.93700E01 1.25820E02 -1.36310E02 -8.42000E00 2.53430E02 -4.05860E02 2.21840E02 2.10740E02 -4.34900E02 2.44900E02 6.14900E01 -2.27650E02 1.09480E02 1.19930E02 -2.24410E02 1.10810E02 1.97290E02 -3.16740E02 -1.23700E01 2.89420E02 -2.06730E02 -3.80300E01 1.16920E02 8.45500E01 -2.53900E02 2.46420E02 -4.40200E01 1.66000E01 -4.02920E02 6.64960E02 -1.84760E02 -4.66580E02 3.98320E02 2.30590E02 -4.83540E02 3.03700E02 -2.10000E01 -1.88720E02 2.58550E02 -1.70590E02 -4.68400E01 1.35780E02 1.99200E01 -9.45400E01 -1.87450E02 5.69940E02 -3.88780E02 -1.59780E02 3.71450E02 5.87600E01 -5.60650E02 3.78310E02 3.98950E02 -8.41140E02 5.18210E02 2.90110E02 -6.33310E02 3.96310E02 -1.16600E02 2.35740E02 -3.28240E02 -4.35000E00 3.61560E02 -2.28550E02 6.13100E01 -3.00920E02 5.26930E02 -7.21100E01 -5.21600E02 3.34500E02 3.99760E02 -5.02330E02 6.41600E01 1.63110E02 -5.20300E01 -1.53770E02 5.42490E02 -5.50220E02 2.28000E01 4.44520E02 -3.47130E02 8.60700E01 -1.91410E02 4.56710E02 -4.63550E02 2.67170E02 1.54240E02 -5.01320E02 6.88320E02 -5.50890E02 5.11000E01 5.85660E02 -9.13790E02 5.02250E02 2.91610E02 -Frame 160 -4.23810E02 -7.89500E01 4.68650E02 -1.39250E02 -4.26810E02 4.45140E02 2.17640E02 -6.95090E02 6.59610E02 -4.25410E02 3.52420E02 -4.14020E02 6.13230E02 -5.69320E02 2.02100E02 3.11900E01 8.09700E01 -4.30780E02 6.66050E02 -5.40820E02 3.64500E02 -2.71520E02 2.36050E02 1.31000E01 -4.46750E02 6.05600E02 8.19300E01 -9.53000E02 7.86960E02 2.91990E02 -7.50550E02 1.14380E02 5.05950E02 -1.45840E02 -6.47640E02 8.47650E02 -2.99610E02 -2.20060E02 4.24160E02 -5.07090E02 6.85340E02 -7.31990E02 4.42540E02 1.10980E02 -2.63930E02 -3.19180E02 9.25160E02 -8.08880E02 5.42200E01 4.99960E02 -1.48980E02 -7.41840E02 1.22166E03 -5.95260E02 -5.55800E02 7.96400E02 3.01670E02 -1.19963E03 7.24770E02 3.82000E02 -7.40720E02 2.72540E02 2.21880E02 -2.03550E02 -1.51940E02 4.45410E02 -4.15180E02 8.90100E01 3.41710E02 -4.38090E02 2.51410E02 7.00000E00 -2.39700E01 -2.42870E02 5.38690E02 -4.07080E02 -3.76710E02 1.19395E03 -1.02693E03 -1.59520E02 1.35386E03 -1.35922E03 2.07080E02 9.55620E02 -1.05358E03 1.53080E02 7.36910E02 -6.67890E02 -4.25500E02 1.45978E03 -1.13300E03 -2.91890E02 1.40150E03 -1.24605E03 2.15700E02 3.76450E02 4.28200E01 -9.16160E02 1.18506E03 -2.63850E02 -8.54310E02 8.54770E02 1.08900E02 -5.97130E02 -9.84300E01 9.65780E02 -9.15000E02 1.19920E02 6.21730E02 -8.89520E02 7.23330E02 -2.02620E02 -3.57010E02 4.01160E02 1.38400E02 -5.09610E02 2.17820E02 3.88540E02 -5.28820E02 2.68950E02 -1.88860E02 3.69350E02 -2.27520E02 -1.61630E02 1.33450E02 2.55530E02 -2.52850E02 -7.17100E01 3.90100E02 -2.71170E02 -9.63000E00 1.13010E02 -9.46600E01 7.83400E01 -4.23800E01 6.42100E01 7.00400E01 -4.74010E02 7.87560E02 -4.92590E02 -2.64860E02 6.48160E02 -1.08190E02 -5.64820E02 4.19960E02 3.70800E02 -9.25220E02 7.29550E02 -8.31900E01 -4.19980E02 6.64210E02 -8.23690E02 7.33170E02 -1.22510E02 -4.78530E02 5.57890E02 -2.99160E02 1.42570E02 -8.11700E01 3.25000E00 -Frame 160 -2.67200E01 1.97410E02 3.22900E01 -7.10960E02 1.21647E03 -8.54630E02 -1.93970E02 1.26630E03 -1.37845E03 2.05310E02 1.15685E03 -1.27726E03 2.22560E02 5.13550E02 1.06000E00 -7.14270E02 5.63950E02 9.51700E01 -4.18190E02 3.58970E02 -3.55170E02 4.64940E02 -4.90200E01 -7.24820E02 9.52160E02 -8.90000E-01 -1.31940E03 1.34155E03 3.75530E02 -2.03170E03 1.71753E03 -4.19100E01 -9.96710E02 6.93900E02 8.61400E01 -4.46490E02 2.73830E02 1.46170E02 -1.20570E02 -4.19440E02 6.10840E02 -8.05900E01 -3.49320E02 2.08970E02 2.23330E02 -3.45070E02 8.28000E00 4.34550E02 -7.45400E02 3.93860E02 4.96980E02 -6.41170E02 -1.67910E02 7.71140E02 -1.93490E02 -6.70760E02 4.54840E02 4.86820E02 -1.05266E03 1.00124E03 -8.13280E02 7.38850E02 -4.60710E02 1.40070E02 -1.07000E01 1.08880E02 -3.42940E02 4.23590E02 6.64300E01 -5.89830E02 3.44170E02 2.67730E02 -2.29320E02 -2.62520E02 1.03500E02 7.67740E02 -1.16219E03 6.39290E02 2.19880E02 -4.98700E02 3.01970E02 -3.53880E02 6.21320E02 -6.42900E02 1.53390E02 4.05160E02 -2.23660E02 -3.48710E02 4.64700E02 2.54830E02 -7.98760E02 1.12820E02 1.17848E03 -1.56200E03 8.05240E02 4.19300E01 -1.30200E01 -4.15650E02 5.33660E02 -4.41700E01 -7.64820E02 1.02996E03 -6.90720E02 4.66040E02 -6.63860E02 8.55920E02 -3.90100E02 6.47200E01 -3.82450E02 7.51910E02 -6.31350E02 -1.12790E02 1.01591E03 -1.24443E03 6.42500E02 4.88180E02 -1.26436E03 9.17090E02 1.21140E02 -8.39530E02 8.57880E02 -4.18020E02 1.21020E02 -8.73800E01 1.93860E02 -4.26380E02 6.54600E02 -4.57600E02 -2.95760E02 8.37360E02 -6.18260E02 3.18690E02 -5.95680E02 9.28230E02 -7.97600E02 4.05950E02 -1.26660E02 -8.16200E01 4.90890E02 -5.39350E02 -1.17940E02 8.39610E02 -5.01010E02 -8.00610E02 1.62027E03 -1.20550E03 2.54800E01 8.45500E02 -7.02910E02 -4.31540E02 1.81962E03 -2.21830E03 1.31899E03 -1.33570E02 -4.07920E02 -2.63700E01 1.15200E03 -2.23726E03 2.42176E03 -1.31641E03 -Frame 160 -3.41940E02 1.38898E03 -1.28687E03 3.35740E02 6.81210E02 -1.05027E03 8.42690E02 -4.64600E02 2.73120E02 -4.23600E02 9.25530E02 -1.61348E03 1.78250E03 -1.04517E03 5.57000E01 -3.04400E01 1.30678E03 -2.37786E03 1.53878E03 5.24090E02 -1.51346E03 3.32400E02 1.46002E03 -1.50585E03 -1.75020E02 1.54912E03 -1.44187E03 1.71000E02 9.59580E02 -1.14835E03 4.16610E02 7.53570E02 -1.35775E03 8.31910E02 1.99500E02 -6.16650E02 9.54000E00 7.40080E02 -6.93480E02 9.72800E01 3.70400E02 -3.39380E02 -1.94790E02 5.11450E02 -1.85950E02 -3.30740E02 2.08300E02 1.98100E01 2.65470E02 -5.39520E02 5.32100E02 -5.77640E02 9.79840E02 -1.39743E03 1.18309E03 -3.76700E02 -1.74370E02 -6.26200E01 5.46640E02 -4.30770E02 -2.78000E02 5.93750E02 -9.31000E01 -6.77100E02 9.66470E02 -9.50040E02 9.73070E02 -8.21260E02 4.86900E01 9.42490E02 -1.22595E03 6.38700E02 3.54100E01 -1.99570E02 3.43700E01 1.42510E02 -4.83140E02 6.82310E02 -3.58840E02 -3.24850E02 4.46490E02 6.32600E01 -4.45880E02 2.95650E02 -1.26170E02 4.87080E02 -8.59160E02 7.78770E02 -2.45380E02 -2.76970E02 1.85720E02 2.39540E02 -5.14200E02 4.97230E02 -3.68530E02 2.53280E02 -2.21920E02 1.35390E02 -8.33800E01 1.49160E02 -4.89250E02 8.07050E02 -6.13320E02 3.69600E01 7.63100E01 5.23800E02 -8.01360E02 1.61250E02 5.40470E02 -5.84090E02 -1.16880E02 8.13880E02 -7.66340E02 3.02290E02 -3.33200E01 -3.82800E01 -6.93600E01 2.69660E02 -5.18090E02 5.28280E02 -8.14900E01 -4.78040E02 6.59590E02 -4.72220E02 3.05410E02 -3.49200E02 2.59270E02 -6.46900E01 -1.71610E02 4.50320E02 -4.95940E02 9.30000E01 4.28060E02 -4.52920E02 -1.12720E02 6.02100E02 -4.21540E02 -3.69440E02 7.47610E02 -2.55500E02 -6.13390E02 9.73220E02 -7.17020E02 2.78140E02 -3.81900E01 3.57300E01 -3.72100E02 8.52800E02 -8.20220E02 2.21790E02 1.65810E02 2.59400E01 -1.28280E02 -4.80150E02 1.16554E03 -9.06970E02 -1.58720E02 8.83810E02 -5.99250E02 -1.68610E02 -Frame 160 4.73500E02 -3.05980E02 1.27200E01 4.69260E02 -1.29152E03 1.57145E03 -5.33520E02 -1.06008E03 1.66606E03 -9.36060E02 -2.37700E01 4.17500E01 3.60250E02 -3.54740E02 -2.15100E01 3.36040E02 -2.33670E02 -7.67800E01 4.32030E02 -7.11830E02 4.65600E02 2.10000E02 -4.57700E02 -9.06200E01 6.99890E02 -7.25810E02 2.70080E02 1.46510E02 -2.71020E02 -7.02100E01 8.01870E02 -1.29283E03 9.58900E02 1.08360E02 -1.01958E03 1.08555E03 -3.61240E02 -5.58430E02 1.09080E03 -1.04099E03 3.86270E02 2.94300E02 -6.40790E02 5.44800E02 -9.94600E01 -2.73550E02 2.91230E02 -5.38000E01 -1.81450E02 4.51120E02 -9.08170E02 1.14435E03 -7.36730E02 8.87100E01 2.11590E02 -1.33930E02 -6.80100E01 1.54010E02 -2.17250E02 3.00210E02 -2.20610E02 -1.73330E02 4.72570E02 -1.99000E02 -3.20150E02 2.56250E02 4.10230E02 -8.90410E02 4.81560E02 5.18500E02 -1.40290E03 1.77259E03 -1.41438E03 5.33420E02 1.24950E02 -2.73270E02 5.94500E01 2.02400E02 -4.08420E02 4.98250E02 -1.61510E02 -6.25520E02 8.14700E02 -1.91310E02 -4.74250E02 6.37500E02 -3.31970E02 -1.01110E02 4.01980E02 -5.65750E02 4.81120E02 -9.10900E01 -2.81910E02 3.74630E02 -3.19880E02 6.43000E00 2.23820E02 -7.92800E01 -3.46800E01 1.83300E01 -1.59040E02 1.26250E02 1.31240E02 -2.54740E02 1.12580E02 -1.13850E02 4.59820E02 -8.53200E02 7.88970E02 -1.45820E02 -2.81380E02 -1.07870E02 7.79100E02 -1.07023E03 6.41250E02 7.20500E01 -4.75820E02 3.26810E02 1.38950E02 -4.57850E02 2.59320E02 3.03420E02 -9.37400E02 1.12228E03 -8.05400E02 1.51060E02 2.60950E02 -8.50100E01 -8.25900E01 -1.32020E02 4.26140E02 -4.38840E02 5.58400E01 2.41760E02 -6.96800E02 1.13726E03 -1.04203E03 3.71260E02 3.92900E02 -4.36160E02 -4.33450E02 9.45740E02 -2.46310E02 -1.02799E03 1.30811E03 -4.22780E02 -4.05800E02 3.49080E02 1.02970E02 -2.64850E02 1.47200E02 -1.77150E02 9.66300E01 8.97800E01 -2.91370E02 2.70960E02 -7.45800E01 -7.67400E01 3.31000E01 2.41300E02 -Frame 160 -4.53290E02 3.63060E02 -1.14690E02 -2.42110E02 4.37750E02 -5.31780E02 5.01200E02 -3.15350E02 8.71400E01 -6.60100E01 4.15160E02 -6.45180E02 2.55290E02 3.28360E02 -5.28620E02 3.47390E02 -3.15840E02 2.66710E02 -1.26980E02 1.14270E02 -4.56130E02 6.44250E02 -2.16950E02 -6.23580E02 1.10679E03 -9.55370E02 5.06590E02 -4.01720E02 4.26250E02 -3.22580E02 1.54730E02 7.65000E00 -1.67990E02 2.54090E02 -1.65020E02 -1.77940E02 1.83900E02 1.58750E02 -2.75330E02 -1.45800E01 2.90240E02 -3.36790E02 2.31100E02 -3.11670E02 4.58060E02 -3.34840E02 -1.73950E02 4.78070E02 -2.48200E02 -4.07700E02 7.47240E02 -2.57810E02 -7.56700E02 1.31768E03 -1.17303E03 6.54330E02 -2.46420E02 -2.88000E01 1.95570E02 -1.79310E02 3.80000E-01 1.37620E02 -3.07030E02 3.09850E02 -1.88490E02 3.69300E01 -6.57200E01 2.61510E02 -3.88390E02 4.32970E02 -3.65680E02 -1.04690E02 5.27460E02 -4.60340E02 6.17400E01 2.82900E02 -2.74370E02 -2.46620E02 5.98210E02 -2.84400E02 -4.49040E02 5.96640E02 5.09000E00 -3.92760E02 1.64450E02 1.00730E02 2.76940E02 -9.51660E02 1.17163E03 -9.93520E02 7.48300E02 -4.74720E02 1.78800E01 5.03690E02 -9.11950E02 9.15480E02 -7.09440E02 3.75050E02 1.07720E02 -4.22980E02 4.00300E02 -1.71340E02 -1.27500E02 3.63810E02 -6.37030E02 5.99770E02 -3.13750E02 2.24770E02 -3.79270E02 3.43360E02 -8.39900E01 -1.31480E02 1.54680E02 -2.21460E02 2.79970E02 -1.34360E02 -3.18380E02 6.08200E02 -1.57140E02 -7.85000E02 1.01545E03 -2.27380E02 -5.44430E02 3.81220E02 2.72130E02 -4.97590E02 3.34350E02 -6.09300E02 1.32343E03 -1.43031E03 3.96130E02 8.30670E02 -1.13313E03 4.18400E02 3.21510E02 -4.75680E02 2.83920E02 -5.26000E00 -2.86380E02 5.11070E02 -5.62300E02 2.13660E02 3.16410E02 -5.06960E02 9.26800E01 3.40770E02 -2.28790E02 -1.18750E02 5.50800E02 -7.73460E02 4.37050E02 5.55800E01 -1.13740E02 -2.63190E02 4.52980E02 -1.08130E02 -2.38490E02 -9.66000E00 3.80250E02 -1.01140E02 -Frame 160 -8.04320E02 1.29450E03 -6.00990E02 -5.54530E02 9.50880E02 -5.23050E02 1.64930E02 -3.48970E02 5.47560E02 -5.30700E02 3.08190E02 6.77300E01 -3.12300E01 -5.28220E02 9.59910E02 -8.76840E02 2.13430E02 4.57210E02 -4.04900E02 -1.36290E02 4.21750E02 -1.88350E02 -1.67140E02 5.58800E01 2.81740E02 -2.73680E02 -4.00200E01 1.21900E02 6.57100E01 -3.56280E02 4.45010E02 -5.34000E00 -4.01610E02 1.95240E02 3.10360E02 -5.87250E02 1.20930E02 8.59890E02 -1.30010E03 6.68330E02 3.84000E02 -8.35480E02 5.63110E02 -2.53580E02 -4.02900E01 4.99630E02 -5.33220E02 -1.91510E02 1.06694E03 -1.27569E03 6.75430E02 2.42500E01 -3.73090E02 5.15630E02 -4.23650E02 3.74200E01 4.59710E02 -7.50370E02 4.83830E02 3.77400E01 -5.03180E02 6.77640E02 -4.07660E02 3.18600E01 9.39400E01 1.24850E02 -5.07400E02 7.62270E02 -7.71510E02 3.54000E02 3.77980E02 -9.08650E02 9.51780E02 -3.89150E02 -4.91180E02 1.21309E03 -1.32307E03 6.90580E02 -3.81500E01 -1.45380E02 8.32100E01 -8.72100E01 -3.28200E01 3.03280E02 -3.74510E02 -4.29100E01 4.85980E02 -4.05230E02 8.38000E00 3.70770E02 -5.41980E02 4.97550E02 -3.65240E02 6.86300E01 4.54850E02 -8.52410E02 8.14700E02 -4.04400E02 -1.98820E02 6.14300E02 -7.26010E02 4.88910E02 1.94000E00 -3.92090E02 3.54060E02 -1.05050E02 8.97400E01 -2.77530E02 3.65100E02 -2.84740E02 1.81590E02 4.51700E01 -3.81510E02 4.95970E02 -2.65880E02 -1.87040E02 5.05410E02 -4.12200E02 -2.99800E02 1.01035E03 -1.00593E03 2.89380E02 7.26470E02 -1.16560E03 6.93910E02 6.42700E01 -4.62900E02 3.47060E02 -1.67260E02 2.98670E02 -3.43270E02 7.62600E01 1.32690E02 8.67400E01 -4.34710E02 3.71120E02 1.68520E02 -6.43500E02 4.23970E02 2.04050E02 -4.29860E02 1.52030E02 2.69770E02 -3.77100E02 1.99380E02 -6.50000E00 -1.28740E02 3.08360E02 -2.47310E02 -1.13930E02 3.35680E02 -2.67120E02 2.41690E02 -3.42990E02 2.64570E02 1.30670E02 -5.17490E02 5.04790E02 -8.67900E01 -6.58000E00 -Frame 160 -3.65880E02 7.26050E02 -7.77930E02 5.62310E02 -1.59530E02 -4.24540E02 7.76650E02 -5.87740E02 -2.17700E01 5.13720E02 -3.99710E02 -1.00010E02 6.56050E02 -7.99120E02 3.42460E02 4.02020E02 -9.62950E02 9.18770E02 -2.59180E02 -3.22310E02 4.66910E02 -8.79000E01 -5.02780E02 8.33980E02 -6.14700E02 -2.46000E01 5.67770E02 -5.57070E02 1.00830E02 4.25980E02 -5.19210E02 2.33860E02 1.78000E02 -3.62750E02 1.57120E02 2.28920E02 -1.69270E02 -2.17610E02 3.90760E02 -3.61420E02 2.86480E02 -1.82850E02 -1.55200E01 3.06000E02 -2.32820E02 1.29920E02 -3.67240E02 5.86570E02 -4.97670E02 2.04030E02 1.20240E02 -2.43250E02 2.41250E02 -3.54900E01 -1.45750E02 1.37720E02 -5.21700E01 1.32120E02 -3.62010E02 4.10920E02 -1.43630E02 -2.43190E02 4.71400E02 -3.17350E02 6.38100E01 1.18700E02 -3.88200E01 -1.65170E02 1.23730E02 1.67450E02 -2.04630E02 -9.30200E01 3.72130E02 -4.03680E02 4.03900E02 -4.26920E02 1.33970E02 3.48080E02 -5.49510E02 3.98660E02 3.27800E01 -2.68440E02 2.50280E02 -1.17190E02 -2.39910E02 6.18800E02 -4.35510E02 2.69900E01 1.46770E02 -9.18800E01 2.26180E02 -4.37130E02 4.22460E02 -1.13760E02 -1.37450E02 1.01260E02 1.38260E02 1.12800E01 -1.79630E02 7.27300E01 8.83000E00 4.29500E01 -2.32910E02 2.86920E02 -3.54400E01 -1.04730E02 -1.07060E02 4.41640E02 -4.61100E02 3.53680E02 -2.04670E02 5.09100E01 4.33500E01 1.47520E02 -5.14220E02 5.82060E02 -1.50300E02 -3.01600E01 -1.43270E02 3.76260E02 -2.96490E02 -4.87600E01 1.58680E02 2.63900E01 -1.61010E02 1.09950E02 6.19000E00 2.33220E02 -5.67940E02 5.12660E02 -3.88000E01 -4.02270E02 4.85400E02 -6.79300E01 -4.22300E02 5.15770E02 -2.08630E02 -1.72230E02 3.70460E02 -1.14100E01 -3.42070E02 1.83370E02 8.28900E01 -6.17700E01 -6.18400E01 4.51500E01 3.64100E01 2.58370E02 -6.10040E02 4.51270E02 9.59800E01 -2.74380E02 7.30700E01 -9.78000E01 2.95140E02 -1.77040E02 -2.76500E01 2.54390E02 -3.54080E02 2.14970E02 -Frame 160 -1.55800E01 -1.02240E02 5.35200E01 2.20050E02 -8.74700E01 -2.54410E02 2.77730E02 7.07000E00 -2.90960E02 4.12070E02 -2.45540E02 -1.42500E01 -1.37900E01 4.33700E02 -5.55370E02 6.85000E01 5.32600E02 -4.33440E02 -3.56940E02 8.90260E02 -6.08800E02 1.93360E02 6.15000E00 -3.58500E01 8.89000E00 3.70100E01 3.55970E02 -8.92530E02 8.75200E02 2.78000E00 -1.00861E03 9.80670E02 -8.84500E01 -5.83540E02 6.71610E02 -2.67050E02 -3.94800E01 1.11170E02 6.38000E00 -2.57650E02 3.50400E02 -1.51070E02 -2.35900E02 5.33870E02 -5.62050E02 4.67670E02 -2.36200E02 5.03900E01 2.14800E02 -4.87900E02 3.83130E02 1.56740E02 -5.83790E02 4.26330E02 -3.47100E01 2.04030E02 -3.48030E02 -1.07830E02 6.05900E02 -5.19860E02 1.06060E02 9.02400E01 -1.73150E02 2.22480E02 5.41400E01 -3.63450E02 3.19390E02 1.72050E02 -4.96000E02 2.87760E02 4.90000E-01 -7.76600E01 1.01850E02 -1.46180E02 2.08260E02 3.44700E01 -3.28720E02 4.79170E02 -2.87400E02 5.16000E01 -1.49600E01 -1.06560E02 1.57110E02 -1.05210E02 1.34600E01 1.61790E02 -4.64400E01 -1.02060E02 7.97000E01 -2.10990E02 3.77530E02 -3.86100E02 2.49020E02 3.80550E02 -5.66200E02 1.77310E02 3.76650E02 -4.51190E02 2.40800E02 -1.70300E01 -5.38100E01 -2.06670E02 3.69400E01 3.31050E02 -3.41050E02 5.63900E01 8.40700E01 -1.39470E02 4.21000E00 -7.67000E00 1.18090E02 -2.13370E02 1.22120E02 2.58870E02 -4.03390E02 2.14250E02 1.88790E02 -2.56630E02 1.04200E01 2.11720E02 -1.57950E02 -2.79000E01 2.26200E02 -8.20500E01 -1.07750E02 1.21860E02 7.44600E01 -2.56470E02 1.43610E02 1.95930E02 -4.01310E02 2.90360E02 -5.18500E01 -1.45900E01 8.38400E01 -1.57600E01 -1.25420E02 1.50650E02 3.81200E01 -1.60920E02 1.93040E02 -2.30000E-01 -2.49470E02 1.72820E02 1.30010E02 -3.35240E02 2.82440E02 8.49600E01 -2.92700E02 2.29240E02 2.81100E01 -2.55260E02 2.84850E02 -5.56000E01 -2.00520E02 2.82270E02 1.29730E02 -4.35640E02 3.60920E02 -1.00220E02 -Frame 160 1.64800E01 -1.18220E02 2.72030E02 -2.63900E02 1.92850E02 -1.57450E02 1.37570E02 4.59000E00 -1.00500E02 5.02600E01 1.03640E02 -9.44200E01 -5.85100E01 6.85700E01 1.65200E01 6.78500E01 -1.62290E02 1.56100E01 1.93000E02 -1.60300E02 4.26300E01 2.48000E01 -1.76000E01 -1.82900E01 6.00200E01 -4.30000E00 2.40000E00 -2.06900E01 2.55300E01 -1.98400E01 1.11410E02 -7.63800E01 -5.19000E01 1.05390E02 -4.65500E01 2.86000E00 6.80000E00 9.38600E01 1.45300E01 -1.97260E02 1.45590E02 1.52910E02 -3.52680E02 2.46430E02 1.38400E01 -3.99500E01 6.64000E00 -1.27330E02 1.60680E02 -1.01550E02 2.32100E01 -3.91900E01 7.15200E01 1.95900E01 -1.13960E02 1.15470E02 -3.21100E01 7.80000E-01 1.06690E02 -8.32200E01 -1.89200E01 1.43900E01 7.27200E01 -9.21000E00 -4.36600E01 1.32870E02 3.67400E01 -3.08390E02 2.51100E02 -1.93400E01 -2.40120E02 1.52500E02 2.91200E01 -8.31000E01 1.31290E02 -2.78100E01 -2.02800E02 1.89990E02 9.17500E01 -2.76610E02 3.59000E01 2.51040E02 -6.24000E01 -2.60470E02 1.73580E02 8.68900E01 -1.98560E02 -2.26500E01 1.08720E02 5.80500E01 -6.92400E01 -1.68400E02 1.27530E02 -3.51000E00 -7.86000E01 -7.94000E00 1.16910E02 -2.94900E01 -6.53900E01 -1.53400E01 8.02700E01 -7.32400E01 -5.64300E01 9.09500E01 6.78000E01 -9.81300E01 -6.51000E01 1.70100E01 8.76400E01 -1.82630E02 -2.60900E01 4.03100E01 -7.32800E01 1.47680E02 -7.67000E00 -2.47820E02 2.08830E02 5.64000E01 -3.17800E02 9.87200E01 1.93020E02 -1.55950E02 -8.65700E01 1.80030E02 -3.13000E01 -1.82140E02 1.23520E02 5.05100E01 -1.58810E02 -6.46000E00 2.12600E02 -5.37700E01 -8.73300E01 9.71500E01 -7.57600E01 -7.39500E01 1.31980E02 -5.38500E01 9.76200E01 -5.73200E01 -1.10000E02 1.85790E02 2.25500E01 -1.60760E02 1.41410E02 5.87900E01 -5.74400E01 -8.12100E01 3.03600E01 1.32350E02 -4.66300E01 -8.21000E01 5.44100E01 1.08090E02 -8.06700E01 -2.31900E01 6.80900E01 6.61300E01 -1.40950E02 6.07000E01 -Frame 160 4.05300E01 3.67000E01 3.47200E01 -6.23500E01 6.40000E-01 9.45800E01 -1.62660E02 3.73000E01 1.31410E02 6.43100E01 -1.96920E02 4.19600E01 1.49190E02 -8.64000E01 -1.26190E02 2.17910E02 -3.45500E01 -2.37800E01 -2.56500E01 1.57450E02 -2.29300E01 -3.18600E01 -7.30300E01 9.76000E01 2.24200E01 -9.21000E01 -4.80700E01 2.14370E02 7.27300E01 -3.39350E02 3.51500E01 2.21200E02 -1.24200E02 -6.41600E01 1.14800E02 4.41900E01 -1.18640E02 -7.23900E01 1.52360E02 4.89200E01 -1.41760E02 -1.31200E02 1.73810E02 5.09000E00 -1.55850E02 8.23800E01 2.59000E01 -2.08350E02 1.29350E02 -7.36300E01 -2.08200E01 1.24640E02 -1.22520E02 -5.21000E00 -3.27000E00 -7.27000E00 -1.68390E02 1.00660E02 5.59300E01 -2.22240E02 -7.78100E01 2.12150E02 -7.91300E01 -2.54350E02 1.26240E02 4.54700E01 -2.15850E02 -7.40600E01 4.21700E01 -8.30600E01 -4.51000E01 -2.99400E01 -1.63300E02 -1.66500E01 2.65300E01 -1.30000E02 -4.62700E01 2.23070E02 7.85100E01 -1.06610E02 3.23630E02 5.08600E01 -2.09400E02 1.44480E02 7.31600E01 -6.64400E01 6.37000E01 2.21800E02 1.06580E02 -8.23000E01 6.30600E01 1.35860E02 -1.02100E01 -2.36780E02 8.48700E01 2.03900E01 -5.51000E01 7.13000E00 7.32800E01 4.34100E01 -7.44200E01 -1.08820E02 -2.81800E01 -1.05020E02 -1.35140E02 -4.60700E01 4.57900E01 -2.25600E01 -2.10100E01 -1.64000E01 -1.86400E01 -9.94000E00 -1.19970E02 -7.63000E01 3.78000E00 7.32000E00 9.50000E-01 2.53700E01 9.65100E01 3.07500E01 -4.00800E01 -4.07000E00 4.30500E01 -3.64200E01 2.76800E01 6.37300E01 7.08300E01 -4.92000E00 1.35990E02 4.81300E01 -3.14900E01 -9.25400E01 1.48610E02 -8.79200E01 2.03200E01 -1.11100E01 7.15000E01 4.60000E00 -1.83700E01 2.39700E01 -7.24000E01 -2.56800E01 -1.49000E00 -3.15500E01 -1.31510E02 8.45600E01 6.62300E01 -9.67300E01 -1.36400E01 7.80300E01 -1.54000E00 -8.25700E01 -4.50300E01 1.44710E02 4.91800E01 5.65000E00 8.97700E01 1.10410E02 -7.41000E00 3.91400E01 -Frame 160 2.61000E01 -4.83600E01 5.09300E01 9.12500E01 1.47400E01 9.98600E01 4.55300E01 -1.65100E01 5.56000E00 -4.76800E01 3.14900E01 2.80900E01 -2.94300E01 1.13100E01 6.23100E01 1.38400E01 3.48700E01 -9.47000E00 -6.91600E01 4.13800E01 -6.26900E01 -7.89100E01 5.84500E01 3.30100E01 -2.02400E01 4.68900E01 -3.79400E01 -5.83500E01 5.67000E00 -2.33000E00 -8.45700E01 2.07300E01 3.62700E01 2.22600E01 -1.72000E01 -1.58600E01 8.54000E00 -6.53100E01 -7.23800E01 7.40000E00 -2.93600E01 2.57700E01 -1.44200E01 -5.08400E01 -6.34000E00 1.35400E01 -1.22980E02 -1.08610E02 3.00000E-01 2.35700E01 -1.09470E02 -8.85300E01 -3.18700E01 1.95600E01 -1.24450E02 -1.63810E02 -4.52500E01 -8.00000E00 -1.75610E02 -1.34260E02 -4.65300E01 -4.90700E01 -9.76700E01 -8.07100E01 7.78200E01 1.27150E02 7.48600E01 1.21860E02 5.21800E01 1.33280E02 2.23750E02 7.78000E01 -2.67400E01 1.26510E02 1.17380E02 2.02860E02 1.36800E02 2.03580E02 4.72500E01 -1.05940E02 -2.97500E01 2.28400E01 -9.59500E01 1.46900E01 3.75000E00 -8.35200E01 -5.64000E01 2.46200E01 -4.68700E01 -1.15520E02 -1.42180E02 -1.60530E02 -1.29300E02 -1.16990E02 2.08000E01 3.18200E01 -5.28600E01 -5.81200E01 -9.35000E01 -9.89000E01 -2.63900E01 1.53700E01 -1.06100E01 6.00000E-01 3.31400E01 2.86400E01 6.99600E01 9.44800E01 6.86600E01 1.19700E01 -1.74900E01 3.61500E01 9.64100E01 1.33440E02 9.24900E01 4.21900E01 2.23000E01 3.27800E01 -1.04400E01 -9.80000E-01 -3.22000E00 -3.75200E01 -3.28400E01 -1.99800E01 -3.87000E01 7.04000E00 2.19000E00 -6.88100E01 -1.41940E02 -1.09200E02 -5.83500E01 -3.78800E01 6.25000E00 -3.42700E01 -3.40200E01 9.26000E00 -4.51400E01 -1.16190E02 -6.93400E01 8.00100E01 5.38900E01 1.19000E01 4.55900E01 1.13270E02 6.79300E01 1.77120E02 8.65200E01 -2.89600E01 9.02000E00 1.81700E01 7.55900E01 2.18720E02 1.23080E02 7.43800E01 4.01200E01 -1.04220E02 -1.79100E01 8.21000E01 -6.28600E01 -4.02300E01 -Frame 160 -7.08500E01 -5.13400E01 2.68300E01 1.34000E01 -4.45000E00 6.16000E00 -1.17900E02 -1.24680E02 -4.15500E01 -7.81000E00 4.89800E01 6.34800E01 -3.36300E01 -3.47100E01 -2.77900E01 3.03700E01 -7.70000E00 -8.94000E00 -6.21000E00 -2.53900E01 -5.31400E01 3.30000E00 5.74800E01 2.52800E01 -4.19400E01 -1.11200E02 -6.55000E01 -4.43300E01 1.65300E01 1.32500E01 -1.91500E01 -3.55400E01 -3.14100E01 -1.05130E02 -1.08040E02 -3.89500E01 -1.06700E02 -9.54600E01 -8.18000E01 -1.64660E02 -1.00950E02 -5.02000E01 -1.11860E02 -7.93500E01 -1.46790E02 -1.52210E02 -1.61690E02 -1.43350E02 -3.53500E01 -1.18020E02 -5.01800E01 1.29760E02 1.43100E02 1.07680E02 1.93030E02 1.33810E02 1.51610E02 3.12800E02 2.08670E02 7.21200E01 1.82800E01 9.57600E01 2.37550E02 2.75510E02 1.25400E02 6.65500E01 -1.23160E02 -7.36000E01 -4.34200E01 -7.62500E01 -8.40100E01 -2.69200E01 -7.80300E01 -1.37640E02 -1.20960E02 -7.36500E01 -7.88100E01 -1.39060E02 -1.72050E02 -1.92910E02 -1.64250E02 -2.55700E01 3.54000E01 -3.68000E01 -3.92200E01 -3.77000E01 -6.31200E01 -3.32900E01 6.14700E01 7.60800E01 5.20500E01 8.42100E01 3.62700E01 7.28000E01 1.36380E02 1.21790E02 7.96300E01 2.40900E01 3.58100E01 1.00860E02 8.18300E01 9.61400E01 7.58100E01 5.79000E00 -3.53900E01 -5.28000E01 -8.69000E00 -3.22000E01 -2.24000E01 -4.32700E01 -9.07400E01 -8.55900E01 -6.72000E01 -8.41800E01 -1.36100E01 -7.48500E01 -1.24920E02 -8.74300E01 -5.77100E01 -1.60300E01 4.09400E01 -2.43800E01 -2.67100E01 -4.11000E01 1.00900E01 5.08400E01 4.87900E01 5.16200E01 6.24800E01 3.86100E01 4.99600E01 8.46100E01 3.32500E01 1.21270E02 2.44900E02 2.87130E02 3.80410E02 -5.76000E00 -3.17840E02 -1.50250E02 -3.53200E01 1.80210E02 3.41250E02 8.79700E01 -1.22200E02 -1.60730E02 -2.23280E02 -6.15400E01 -6.73000E00 -6.72100E01 -8.34900E01 -1.30190E02 -4.42100E01 1.33470E02 1.43520E02 5.67500E01 -4.17500E01 -2.21250E02 -2.09090E02 4.56400E01 -Frame 160 2.09200E02 2.03620E02 1.11680E02 -2.72000E01 -1.15340E02 -1.27090E02 -3.10800E01 4.69300E01 -7.56900E01 -1.40300E01 1.65500E01 -9.40000E-01 1.61030E02 -4.01400E01 -7.84900E01 -1.85950E02 -2.59560E02 -1.01210E02 6.12000E00 1.57750E02 1.34910E02 -1.04770E02 -2.21770E02 -3.01190E02 -2.68800E02 -8.51800E01 -9.08300E01 -1.11600E02 -5.69400E01 -8.75700E01 -6.21000E01 -8.08200E01 -1.39080E02 -1.15050E02 -2.33210E02 -1.09850E02 1.55380E02 2.30620E02 3.19930E02 2.56670E02 8.71900E01 1.14370E02 3.52270E02 3.40190E02 1.19420E02 2.17200E01 -3.00100E01 1.07700E02 2.55580E02 3.32810E02 1.63140E02 -8.49000E01 -1.73500E02 -1.82650E02 -2.16890E02 -1.30970E02 2.87400E01 -2.96300E01 -1.38770E02 -1.23150E02 -1.65930E02 -1.19880E02 -4.53000E01 -1.32380E02 -2.03040E02 -2.21710E02 -1.43770E02 5.36900E01 7.81800E01 7.93300E01 4.24200E01 -7.26900E01 -8.73100E01 -2.23200E01 7.16800E01 1.56500E02 2.00780E02 1.06230E02 4.96500E01 8.52700E01 1.24910E02 1.35660E02 8.66200E01 1.89900E01 5.26000E00 3.41100E01 1.15830E02 6.69800E01 4.85700E01 -1.34400E01 -8.53400E01 -8.33700E01 -1.54250E02 -1.08170E02 4.44000E00 -1.44700E01 -3.89500E01 -1.18150E02 -1.42690E02 -4.68600E01 -2.80300E01 -5.86000E01 -9.40700E01 -7.05600E01 -3.92700E01 2.00100E01 4.90900E01 5.50100E01 6.20500E01 4.92400E01 1.19800E01 5.50000E-01 2.17600E01 8.96000E01 7.44500E01 1.35760E02 4.88400E01 3.21900E01 3.90000E01 1.13990E02 2.40200E02 2.39100E02 1.31760E02 -7.70000E01 -1.18120E02 -7.43800E01 2.38000E01 7.40100E01 7.17200E01 2.03100E01 -5.96900E01 -9.00900E01 -6.53300E01 -4.87300E01 -8.75600E01 -9.05000E01 -8.74400E01 -1.07200E02 2.45300E01 1.17310E02 1.68850E02 7.28300E01 -3.32200E01 -7.85100E01 -1.03120E02 2.06100E01 1.11150E02 1.35390E02 1.24260E02 6.06800E01 -1.89100E01 -6.09300E01 -3.21800E01 -2.95000E01 -3.67000E01 -8.00800E01 -2.07200E01 -2.35000E01 2.96600E01 7.44000E00 -Frame 160 -4.54700E01 -8.49700E01 -1.60610E02 -1.05440E02 -7.94700E01 -4.86300E01 1.42000E01 -3.10500E01 -1.36680E02 -1.23460E02 -7.97300E01 -1.53590E02 -1.23610E02 -1.20610E02 -1.74430E02 -9.57800E01 -3.36400E01 -4.55800E01 -2.28800E01 -9.84900E01 -1.52380E02 -1.86830E02 -8.21000E00 2.18900E02 2.95790E02 2.58750E02 1.35300E02 9.48900E01 2.43130E02 4.14720E02 3.71230E02 1.19060E02 -1.05000E02 -7.48700E01 1.25280E02 2.79520E02 2.92290E02 1.30210E02 -1.05970E02 -1.99320E02 -2.00340E02 -2.45180E02 -3.21600E01 -2.75100E01 -7.56800E01 -1.10260E02 -2.08800E02 -4.31900E01 -1.04420E02 4.75500E01 -1.47830E02 -1.86120E02 -2.41430E02 -1.20240E02 7.07900E01 1.65640E02 1.53250E02 4.43200E01 -4.50300E01 -4.31100E01 -2.81000E01 1.31390E02 1.41680E02 1.89150E02 9.29100E01 4.36100E01 9.37500E01 1.37360E02 1.62200E02 1.19670E02 2.07300E01 -5.92700E01 -4.16700E01 9.53000E00 8.03200E01 9.32400E01 2.44900E01 -6.33900E01 -1.34910E02 -1.41500E02 -1.04150E02 -3.65400E01 -2.08000E01 -3.25500E01 -9.36300E01 -7.05100E01 -3.86100E01 -1.56900E01 -4.05000E00 -6.10500E01 -5.17600E01 -7.01400E01 2.89700E01 9.71100E01 1.25260E02 9.11600E01 4.09200E01 -1.69100E01 1.14900E01 3.47600E01 7.47200E01 1.19850E02 7.92700E01 6.63700E01 4.80200E01 1.40700E01 8.90700E01 1.31320E02 1.54770E02 1.02820E02 1.51900E01 7.58600E01 5.03600E01 -3.39500E01 -8.28100E01 -9.80800E01 -7.67100E01 4.10000E-01 8.19300E01 1.10910E02 9.70000E00 -1.40630E02 -1.21460E02 -1.46570E02 -9.83100E01 4.05400E01 9.26500E01 1.48290E02 1.24520E02 4.09100E01 -1.23100E01 -4.15000E00 -3.07200E01 4.09300E01 3.47700E01 9.40000E00 8.72500E01 5.84400E01 5.07000E01 1.69000E00 -7.08200E01 -9.04900E01 -8.46700E01 -7.65800E01 1.18400E01 -6.01000E00 -4.64000E01 -2.19900E01 -3.28000E01 -7.59100E01 -8.82800E01 -6.99500E01 -9.29900E01 -8.76600E01 -7.30900E01 -6.60100E01 -4.76600E01 -4.17100E01 -6.55500E01 -1.06080E02 -Frame 160 -1.77780E02 -1.87550E02 -1.55470E02 -6.92800E01 -2.23900E01 2.29400E01 -2.73800E01 -1.29260E02 -1.59200E02 -1.58950E02 5.42000E00 1.76830E02 2.64340E02 2.85280E02 2.07580E02 1.51270E02 2.80070E02 3.29590E02 2.43340E02 7.32100E01 -1.04230E02 -4.90400E01 1.62920E02 2.89300E02 2.77340E02 6.37800E01 -1.43410E02 -1.64840E02 -1.39750E02 -1.91730E02 -1.56120E02 -1.68250E02 -6.45900E01 4.63400E01 -1.83400E01 -3.00000E01 -1.12990E02 -1.70440E02 -1.15510E02 -1.76780E02 -1.84790E02 -4.88900E01 7.62400E01 1.39150E02 1.16860E02 1.57600E01 -5.04900E01 2.32500E01 7.42400E01 9.17300E01 7.16700E01 2.39200E01 8.26700E01 1.67160E02 1.82110E02 1.51360E02 9.45300E01 2.38700E01 -5.98000E00 -1.27300E01 -2.96600E01 2.59300E01 5.72300E01 4.94600E01 5.94200E01 -2.13500E01 -1.17580E02 -7.96600E01 -8.24800E01 -1.02300E02 -6.56300E01 -7.77600E01 -4.31900E01 9.49000E00 1.77900E01 -2.46700E01 -4.24200E01 -9.86800E01 -6.55900E01 1.35800E01 2.01800E01 6.19600E01 6.89700E01 3.21300E01 7.11200E01 6.92500E01 2.92600E01 5.90100E01 3.16300E01 2.43800E01 6.98900E01 4.57500E01 7.48300E01 1.58750E02 1.44130E02 1.62940E02 9.22000E01 -2.79000E00 -6.06900E01 -4.93000E01 -2.94900E01 2.69800E01 6.51900E01 4.85400E01 4.03500E01 4.89000E00 -6.36500E01 -6.02300E01 -9.66300E01 -1.00050E02 -1.44700E01 3.78000E00 5.16000E01 7.78600E01 7.48700E01 4.67300E01 2.96900E01 -2.18900E01 -1.30300E01 1.01300E01 7.01000E00 3.98000E01 9.95800E01 6.51300E01 5.75700E01 5.37400E01 -1.12400E01 -3.52000E01 -5.98500E01 -7.81900E01 -3.00100E01 -1.53000E01 2.98900E01 2.64600E01 -9.00000E-02 -6.04500E01 -8.36100E01 -1.15400E02 -9.30600E01 -5.69400E01 -5.56500E01 -2.32700E01 -4.87000E00 -4.19000E01 -4.90400E01 -8.83600E01 -1.23820E02 -1.13270E02 -9.83000E01 -1.11790E02 -8.56100E01 -4.35600E01 -3.01900E01 -3.34000E01 -6.17000E01 -9.78400E01 -1.36030E02 -1.40300E02 -1.40600E02 -5.98100E01 -Frame 160 7.95000E01 1.69010E02 2.52100E02 2.89500E02 2.01770E02 1.80130E02 1.80650E02 2.35020E02 2.21860E02 1.11100E02 9.83000E00 2.94400E01 3.46500E01 1.61010E02 2.19150E02 1.02910E02 -1.79900E01 -8.65800E01 -1.59180E02 -1.71850E02 -2.06730E02 -1.95480E02 -5.86900E01 3.23900E01 5.92600E01 6.39100E01 -8.23500E01 -1.94050E02 -1.91020E02 -1.46720E02 -1.10920E02 -3.99200E01 2.23000E01 4.94100E01 7.73000E01 8.09700E01 4.86700E01 3.93200E01 2.46400E01 3.24800E01 6.65300E01 3.05700E01 5.74700E01 9.31500E01 1.23850E02 1.50390E02 1.41620E02 8.34600E01 6.04400E01 1.67000E00 -5.39000E01 -8.12000E00 -2.29000E01 -1.41000E01 5.60000E01 4.72300E01 -4.84000E00 -1.15000E01 -9.93400E01 -1.18790E02 -1.26720E02 -1.06770E02 -3.61000E01 -6.21000E00 -2.43900E01 9.89000E00 -1.57800E01 -2.82300E01 -4.40400E01 -3.43000E01 -4.02300E01 4.69000E00 2.49900E01 3.78900E01 6.51500E01 4.61900E01 5.76000E01 5.63100E01 4.29300E01 4.81000E01 3.53900E01 3.32600E01 2.20400E01 6.24600E01 1.16080E02 1.72260E02 1.95030E02 1.22340E02 4.31000E00 -8.53500E01 -1.42680E02 -9.16300E01 1.51000E01 8.11300E01 9.91400E01 8.76300E01 7.00000E-01 -7.29000E01 -1.05690E02 -1.31380E02 -8.37300E01 -2.05200E01 4.16700E01 8.57500E01 7.01200E01 4.39500E01 2.49400E01 7.33000E00 -8.82000E00 1.15500E01 -3.45000E00 5.10000E00 2.19200E01 2.32500E01 3.86100E01 4.44200E01 3.93800E01 1.01600E01 5.04000E00 -3.62300E01 -7.37300E01 -7.13100E01 -8.97400E01 -4.76500E01 8.79000E00 3.39700E01 1.59000E01 -1.87400E01 -7.14300E01 -1.12680E02 -1.25100E02 -1.10790E02 -5.49400E01 -3.43200E01 -1.50400E01 -2.91600E01 -5.27000E01 -9.09300E01 -9.62700E01 -1.17700E02 -1.04700E02 -1.02220E02 -8.85900E01 -7.64800E01 -5.69500E01 -3.97900E01 -7.30900E01 -7.03800E01 -8.05500E01 -1.15990E02 -1.10450E02 -6.36700E01 -1.14200E01 7.94200E01 2.10960E02 2.61340E02 3.07010E02 2.95790E02 2.94940E02 2.40790E02 -Frame 160 1.23750E02 -4.90100E01 -8.50500E01 -6.91100E01 5.64000E01 2.06750E02 2.51570E02 1.98560E02 6.67500E01 -9.91700E01 -2.23100E02 -3.05630E02 -2.88410E02 -2.16380E02 -6.49200E01 4.32800E01 9.27800E01 6.17200E01 -2.23600E01 -1.00020E02 -1.43990E02 -1.65190E02 -1.72900E02 -1.15700E02 -2.96400E01 3.40900E01 8.07400E01 1.05740E02 8.34000E01 8.62800E01 9.21600E01 6.91300E01 3.13200E01 1.43100E01 -2.82400E01 4.92000E00 8.01000E01 1.16530E02 1.55980E02 1.59510E02 1.07010E02 5.88000E01 -1.29400E01 -7.28700E01 -9.45700E01 -7.78400E01 -4.95100E01 -1.02500E01 3.52400E01 2.21100E01 -1.44400E01 -4.31000E01 -9.76000E01 -8.66900E01 -1.03360E02 -9.34500E01 -3.91500E01 -4.91400E01 -2.54000E01 -2.19100E01 -1.53000E01 1.15200E01 3.61500E01 1.75000E01 3.62500E01 1.05400E01 -1.29800E01 -2.22000E00 2.48700E01 2.47700E01 5.96400E01 7.65300E01 8.98700E01 7.95400E01 5.48200E01 4.72900E01 5.94900E01 8.00200E01 1.12120E02 1.04120E02 6.47900E01 -3.80000E00 -6.64900E01 -5.90400E01 -2.62900E01 -8.49000E00 1.38800E01 4.49400E01 2.49300E01 -3.37100E01 -7.51200E01 -8.37300E01 -1.05520E02 -5.18800E01 1.14700E01 4.97700E01 8.12100E01 7.55500E01 4.46500E01 2.87600E01 -1.66400E01 -3.24200E01 -2.65000E00 -2.95000E00 3.17500E01 4.55000E01 3.06400E01 7.30000E00 1.92400E01 -7.46000E00 -1.29700E01 -1.63000E00 -2.59300E01 -5.49500E01 -3.78100E01 -3.81000E01 -5.53600E01 -4.71000E01 -2.35400E01 -3.32300E01 -2.51900E01 -2.78800E01 -5.36300E01 -7.21300E01 -8.31400E01 -9.94200E01 -8.41200E01 -6.02800E01 -4.96600E01 -3.86800E01 -3.63400E01 -6.09100E01 -6.42000E01 -8.85500E01 -8.25900E01 -9.63900E01 -9.45500E01 -8.65900E01 -5.43300E01 -4.70500E01 -3.65300E01 -3.66800E01 -1.06830E02 -1.30080E02 -1.29960E02 -1.07750E02 3.21000E00 1.39560E02 2.39960E02 2.97210E02 3.15930E02 2.93920E02 2.65950E02 1.76870E02 7.88800E01 -4.82000E01 -9.11500E01 -7.83300E01 3.69700E01 1.65810E02 -Frame 160 2.22490E02 1.75730E02 8.03800E01 -7.09700E01 -2.16910E02 -2.71140E02 -2.58780E02 -2.01790E02 -1.06850E02 -3.98800E01 1.19000E00 6.65200E01 4.78000E01 -9.55000E00 -4.06700E01 -1.35720E02 -1.84590E02 -1.15810E02 -5.48100E01 -3.58900E01 1.86300E01 4.98000E01 5.28700E01 1.33970E02 1.45440E02 1.18120E02 9.88400E01 1.28700E01 -3.57700E01 -4.48800E01 -4.22300E01 3.45400E01 9.96500E01 1.21680E02 1.47280E02 1.41540E02 6.15000E01 1.49400E01 -3.00600E01 -1.26410E02 -1.35610E02 -1.20960E02 -8.27400E01 -7.26000E00 2.55600E01 1.53700E01 8.50000E-01 -3.91200E01 -7.02900E01 -7.73600E01 -9.45800E01 -8.82500E01 -8.06500E01 -8.47500E01 -2.79100E01 1.97000E01 3.97500E01 6.63700E01 6.77400E01 2.70800E01 2.61300E01 1.21200E01 -1.03400E01 -1.24900E01 -3.70000E00 1.13600E01 3.68700E01 7.21300E01 9.14100E01 1.16200E02 1.20650E02 1.02130E02 1.20950E02 4.92500E01 -1.27000E01 -5.65400E01 -1.13670E02 -9.64500E01 -1.96000E01 3.76500E01 8.66400E01 1.00070E02 1.88300E01 -4.79300E01 -1.09700E02 -1.38270E02 -1.18590E02 -6.51900E01 -1.60800E01 4.95600E01 8.71800E01 8.28800E01 8.83700E01 3.79500E01 -1.90600E01 -2.48100E01 -5.37100E01 -3.84500E01 1.63200E01 1.97700E01 3.43100E01 4.22700E01 1.54400E01 9.77000E00 1.19200E01 -1.88700E01 -3.35900E01 -4.97300E01 -6.73200E01 -6.53900E01 -6.43400E01 -4.22000E01 -2.03400E01 -2.97900E01 -1.25100E01 -1.16900E01 -4.08400E01 -6.08600E01 -6.94500E01 -1.11250E02 -9.52500E01 -8.06800E01 -5.46000E01 -2.76800E01 -2.29200E01 -3.70100E01 -4.55200E01 -5.82700E01 -7.13800E01 -8.98500E01 -9.08300E01 -9.87800E01 -9.79100E01 -8.39500E01 -4.65100E01 -2.29000E01 -2.95700E01 -6.54500E01 -1.09410E02 -1.25660E02 -1.17330E02 -5.76700E01 4.08500E01 1.50340E02 2.47040E02 3.60470E02 4.01050E02 3.83500E02 2.79050E02 9.41200E01 -9.86000E01 -2.05170E02 -1.88830E02 -6.78000E01 1.14040E02 2.69400E02 2.54320E02 1.85550E02 2.45000E01 -1.58530E02 -Frame 160 -2.59050E02 -2.74420E02 -2.65000E02 -1.65040E02 -1.09840E02 -1.38400E01 6.71300E01 5.35300E01 3.64500E01 -4.20000E00 -8.31100E01 -1.03390E02 -8.12100E01 -7.62800E01 -6.71400E01 -6.26700E01 -6.70200E01 -7.46000E00 7.49300E01 1.42780E02 2.10580E02 1.89270E02 1.33120E02 3.51100E01 -4.19600E01 -7.33700E01 -7.06800E01 -3.28400E01 2.42000E01 9.99800E01 1.55010E02 1.66600E02 1.46400E02 6.54500E01 -4.50500E01 -1.22910E02 -1.74050E02 -1.59600E02 -1.02550E02 -6.46400E01 -1.45000E01 2.22000E01 5.01000E00 4.28000E00 2.52000E00 -2.83000E01 -5.10500E01 -7.04600E01 -9.74100E01 -7.31100E01 -5.20000E01 -1.42000E01 1.87700E01 5.17300E01 7.16500E01 9.41100E01 8.51700E01 7.38700E01 3.91500E01 -2.68000E00 -3.68000E01 -3.19400E01 -2.29000E01 2.64400E01 1.03280E02 1.27400E02 1.39150E02 1.80140E02 1.51240E02 8.63200E01 2.23300E01 -7.06400E01 -1.51400E02 -1.51500E02 -9.34500E01 -2.51000E00 9.42500E01 9.39200E01 5.85000E01 5.94000E00 -7.42400E01 -1.16820E02 -7.36000E01 -6.99700E01 -4.81600E01 1.63700E01 3.78800E01 6.60200E01 9.39700E01 5.67000E01 3.52300E01 1.20700E01 -1.18100E01 1.35900E01 2.77700E01 1.73700E01 1.06400E01 -3.33000E01 -3.95600E01 -2.69700E01 4.00000E-02 3.48900E01 4.97900E01 1.11100E01 -1.77700E01 -4.85200E01 -8.31700E01 -8.98100E01 -7.75700E01 -5.78800E01 -2.65300E01 -1.61900E01 -1.25200E01 -1.07300E01 -3.58800E01 -6.37800E01 -8.84900E01 -1.13890E02 -8.79800E01 -5.42000E01 -3.33400E01 -1.88200E01 -2.48500E01 -3.20600E01 -5.04800E01 -5.54400E01 -6.95200E01 -7.19900E01 -8.04900E01 -9.52000E01 -5.33000E01 -5.80800E01 -3.39800E01 -5.31300E01 -8.48500E01 -1.11500E02 -1.22900E02 -1.01570E02 -2.15200E01 9.39900E01 1.98950E02 3.20940E02 4.22380E02 4.28550E02 3.44510E02 1.82560E02 -2.75500E01 -1.77110E02 -2.27110E02 -1.40430E02 4.00700E01 1.84120E02 2.52460E02 2.33690E02 1.06140E02 -4.84300E01 -1.61710E02 -2.46320E02 -2.67300E02 -2.30670E02 -Frame 160 -1.70690E02 -9.27000E01 -9.22000E00 3.88400E01 4.13400E01 2.38700E01 -3.17000E00 -3.70500E01 -5.09500E01 -3.32400E01 -5.99600E01 -9.44600E01 -9.79500E01 -1.07470E02 -2.92000E01 8.85000E01 1.72740E02 2.29410E02 2.16610E02 1.50210E02 6.76200E01 -2.75800E01 -7.26900E01 -8.41200E01 -6.78200E01 -5.95000E00 7.78400E01 1.39150E02 1.61230E02 1.27850E02 5.23300E01 -3.85600E01 -1.02210E02 -1.19720E02 -1.19650E02 -8.94600E01 -8.22500E01 -6.97400E01 -4.57800E01 -2.20400E01 -4.55000E00 2.34800E01 2.63500E01 1.42800E01 -8.18000E00 -4.13300E01 -5.74700E01 -5.70600E01 -6.05900E01 -4.91800E01 2.62000E00 4.70100E01 9.87200E01 1.35930E02 1.13160E02 1.00580E02 2.85200E01 -3.17900E01 -2.39300E01 -2.68000E01 -1.87300E01 3.66100E01 9.96300E01 1.44510E02 1.55650E02 1.71000E02 9.86800E01 1.10500E01 -7.42800E01 -1.06160E02 -9.99100E01 -6.03600E01 -2.25200E01 1.15200E01 1.16100E01 1.77000E01 7.97000E00 2.39400E01 4.39000E00 -1.76000E00 -1.30900E01 -2.87500E01 -3.18600E01 2.97000E00 7.88000E00 7.94000E00 3.10000E01 3.97500E01 6.47400E01 9.14500E01 8.69100E01 3.61600E01 -2.61800E01 -5.64100E01 -6.25100E01 -5.67300E01 -1.27100E01 2.56900E01 2.82600E01 2.68900E01 1.04600E01 -1.74800E01 -2.72600E01 -4.43100E01 -5.28400E01 -7.45800E01 -7.59200E01 -5.32300E01 -4.67900E01 -4.31100E01 -2.62800E01 -3.39100E01 -3.47500E01 -1.95900E01 -5.95000E00 -2.48900E01 -6.04000E01 -7.49600E01 -6.99100E01 -7.26500E01 -4.84200E01 -2.64100E01 -3.67100E01 -5.13100E01 -7.03300E01 -8.08900E01 -7.07200E01 -5.01900E01 -3.60000E01 -3.33600E01 -3.86300E01 -7.90500E01 -9.36700E01 -1.30680E02 -1.42740E02 -7.80700E01 5.64000E00 1.44900E02 3.40300E02 5.16400E02 5.55450E02 4.65190E02 2.53720E02 -1.85000E01 -2.24090E02 -2.76800E02 -1.85860E02 -2.92000E00 1.53690E02 2.29010E02 2.43460E02 1.42150E02 2.26000E01 -7.46400E01 -1.78790E02 -2.23970E02 -2.12320E02 -1.78100E02 -1.16650E02 -5.01900E01 -Frame 160 -5.56300E01 -5.21900E01 -2.96000E01 -2.29000E00 5.68600E01 1.02780E02 8.60200E01 1.66600E01 -7.08600E01 -1.67020E02 -1.83000E02 -1.29310E02 -2.58500E01 1.25820E02 2.03050E02 2.47470E02 2.47030E02 1.79350E02 8.44200E01 5.49000E00 -7.48700E01 -9.26300E01 -5.08400E01 1.03000E01 6.53300E01 9.00100E01 5.93800E01 4.67600E01 1.47200E01 5.69000E00 1.73900E01 7.45000E00 -4.57900E01 -9.16200E01 -1.32770E02 -1.48060E02 -1.26680E02 -8.15200E01 -2.18900E01 4.36000E01 7.20700E01 8.13500E01 6.58400E01 2.07900E01 -3.66700E01 -8.68700E01 -9.05400E01 -5.92400E01 1.08000E00 5.62600E01 9.30900E01 9.29700E01 8.87600E01 7.63400E01 6.54700E01 6.02100E01 4.57400E01 2.37900E01 3.71500E01 4.79000E01 6.09500E01 8.23600E01 8.53700E01 5.24100E01 -6.00000E-01 -4.23000E00 -1.19500E01 -3.88000E00 1.74600E01 -8.54000E00 -1.83200E01 -5.53700E01 -6.35000E01 -3.78100E01 -1.62800E01 3.94000E00 1.77900E01 1.00600E01 2.20900E01 4.04800E01 2.74100E01 6.92000E00 1.48000E01 -7.08000E00 -1.62000E00 2.90200E01 4.05900E01 4.94900E01 3.76300E01 8.38000E00 -2.77000E00 -1.32500E01 6.97000E00 5.82000E00 -4.36000E00 -9.84000E00 -2.54700E01 -3.95500E01 -2.90200E01 -3.71300E01 -3.84500E01 -4.27700E01 -4.01800E01 -3.84700E01 -3.36700E01 -3.26900E01 -4.36500E01 -4.49100E01 -5.81700E01 -5.97900E01 -4.14100E01 -3.34300E01 -5.61800E01 -6.65900E01 -4.72700E01 -5.23200E01 -3.64900E01 -2.51500E01 -3.84500E01 -5.51400E01 -8.53100E01 -9.63500E01 -9.96600E01 -8.70000E01 -5.88900E01 -6.38800E01 -7.09900E01 -6.52800E01 -8.33600E01 -1.00950E02 -1.14020E02 -8.74200E01 -9.95000E00 1.34890E02 3.23050E02 5.24700E02 5.69080E02 4.67300E02 2.69950E02 -3.73000E00 -1.82840E02 -2.18290E02 -1.38610E02 1.46800E01 1.19710E02 1.42890E02 1.21670E02 3.87000E01 -3.98500E01 -7.77700E01 -1.06770E02 -1.41550E02 -1.26260E02 -1.06370E02 -1.28760E02 -1.04720E02 -1.61840E02 -1.80580E02 -9.97400E01 -7.32000E00 -Frame 160 1.03950E02 1.90550E02 1.64640E02 5.97700E01 -5.54000E01 -1.53080E02 -1.57640E02 -1.05200E02 -1.10500E01 9.20100E01 1.55160E02 1.86110E02 1.91840E02 1.53570E02 1.00980E02 6.16800E01 1.91200E01 1.22400E01 3.41500E01 4.57200E01 1.62000E00 -3.18300E01 -6.22700E01 -7.05800E01 -2.00700E01 3.60300E01 7.28400E01 6.17300E01 1.12300E01 -6.78300E01 -1.27260E02 -1.60400E02 -1.39410E02 -9.46400E01 -7.24000E01 5.90000E-01 3.48300E01 4.10900E01 4.35000E01 2.89400E01 -3.10000E00 -1.61300E01 2.45000E00 4.06000E01 3.68900E01 3.60300E01 2.51100E01 4.83000E00 9.92000E00 3.21600E01 8.10600E01 9.24000E01 8.60100E01 8.63500E01 4.26300E01 1.15300E01 3.47000E00 2.51700E01 7.65300E01 1.10420E02 9.52700E01 7.65800E01 -2.74000E00 -8.84900E01 -1.04790E02 -7.34800E01 -5.12000E00 5.43700E01 6.76600E01 2.43100E01 -9.39000E00 -6.41100E01 -5.34500E01 -2.74000E01 1.04900E01 4.45500E01 5.26300E01 7.19200E01 5.87500E01 2.31300E01 4.00000E-01 -2.02000E00 9.50000E00 3.83800E01 6.91300E01 7.67800E01 3.66100E01 -2.48200E01 -5.11100E01 -6.41500E01 -4.65200E01 7.10000E-01 3.04100E01 2.00100E01 7.28000E00 -3.18400E01 -4.91300E01 -6.69000E01 -6.41500E01 -4.52500E01 -3.67200E01 -2.98900E01 -1.78200E01 -2.73600E01 -5.21700E01 -5.27000E01 -5.82000E01 -3.78200E01 -3.47800E01 -1.56200E01 -2.98600E01 -5.15200E01 -6.68100E01 -7.95200E01 -6.95600E01 -5.42400E01 -6.54100E01 -5.18800E01 -6.59000E01 -8.73100E01 -8.53200E01 -7.42100E01 -7.47100E01 -6.81800E01 -9.44100E01 -9.93900E01 -1.04460E02 -1.19620E02 -3.91700E01 8.87700E01 2.19550E02 4.11140E02 5.36250E02 5.23720E02 4.20320E02 2.16350E02 -2.21000E01 -1.37870E02 -1.60060E02 -9.87600E01 -1.45000E00 4.18900E01 3.95500E01 1.81200E01 -1.69700E01 -3.11100E01 -2.36400E01 -3.19000E01 -5.83700E01 -7.85900E01 -1.18350E02 -1.50220E02 -1.82930E02 -2.21480E02 -1.91020E02 -9.04500E01 2.23000E01 1.28500E02 1.97850E02 1.54150E02 -Frame 160 5.39500E01 -2.64000E01 -7.22100E01 -4.93700E01 -6.78000E00 2.81300E01 6.60900E01 7.91600E01 7.95600E01 1.07900E02 1.10020E02 1.09110E02 1.32080E02 1.14650E02 9.85900E01 8.29600E01 1.67900E01 -5.44200E01 -9.77600E01 -1.20330E02 -1.05470E02 -2.20400E01 1.50000E01 3.81800E01 1.60500E01 -2.67700E01 -6.38800E01 -7.20700E01 -8.14400E01 -6.30200E01 -6.09700E01 -4.48000E01 -4.00900E01 -4.42000E01 -3.94000E01 -1.94200E01 3.19000E00 3.54900E01 6.97500E01 1.07000E02 1.10300E02 6.76000E01 2.65200E01 -2.85000E00 -2.51200E01 -1.05000E00 3.47700E01 4.86700E01 5.69600E01 4.34600E01 3.65100E01 1.33200E01 1.14100E01 1.54400E01 3.25900E01 4.12500E01 4.61500E01 7.21700E01 7.49400E01 3.67400E01 -3.66000E00 -4.92900E01 -7.12700E01 -5.68500E01 -2.99200E01 2.88000E00 3.47000E01 1.54800E01 -7.34000E00 1.21500E01 2.32400E01 2.16600E01 3.70200E01 1.48300E01 -2.05000E00 -1.44000E00 -1.28000E01 1.85100E01 1.37800E01 3.39000E01 5.36200E01 5.69100E01 4.82600E01 3.73100E01 -5.00000E00 -4.06000E01 -5.82500E01 -5.63800E01 -2.83900E01 -1.15000E01 -2.50700E01 -1.00300E01 -3.25100E01 -4.66500E01 -2.51800E01 -3.40200E01 -4.01000E01 -3.13300E01 -5.52600E01 -4.98800E01 -5.62900E01 -6.78500E01 -4.87100E01 -5.59400E01 -4.53500E01 -1.64000E01 4.50000E-01 -9.19000E00 -2.41300E01 -5.95200E01 -7.79600E01 -8.99100E01 -8.51600E01 -6.62000E01 -7.76100E01 -8.93200E01 -1.11330E02 -1.14940E02 -8.45800E01 -5.82300E01 -6.50400E01 -7.60300E01 -8.73200E01 -1.08910E02 -1.07100E02 -5.51700E01 6.83800E01 1.96650E02 3.69670E02 5.07670E02 5.35450E02 4.40590E02 2.52400E02 5.21800E01 -8.62500E01 -1.06850E02 -5.39600E01 -8.36000E00 -1.73200E01 -6.15200E01 -8.10100E01 -9.30100E01 -7.22800E01 -2.78300E01 8.03000E00 7.00000E00 -3.50600E01 -7.43800E01 -1.26840E02 -1.87800E02 -2.37470E02 -2.03460E02 -1.14220E02 -6.13000E00 7.22900E01 1.19050E02 8.11300E01 3.49500E01 1.63000E01 3.50500E01 -Frame 160 7.43400E01 1.01770E02 9.99500E01 6.39800E01 1.28400E01 -8.89000E00 2.27200E01 4.32900E01 8.74600E01 1.40920E02 1.47910E02 1.38990E02 1.00680E02 2.71100E01 -4.17400E01 -8.06600E01 -8.76900E01 -6.08400E01 -4.50900E01 -3.88000E01 -7.32700E01 -1.01730E02 -1.02970E02 -7.91500E01 -2.55200E01 3.79000E00 3.60000E01 2.11700E01 -1.91400E01 -3.96800E01 -6.48200E01 -7.46800E01 -6.07800E01 -3.40000E00 3.67500E01 6.61000E01 7.52900E01 7.46900E01 5.20000E01 5.15600E01 7.70600E01 9.82800E01 7.30700E01 6.20200E01 9.58000E00 -3.54800E01 -5.28900E01 -3.37800E01 -5.04000E00 5.60000E00 3.25700E01 3.53500E01 3.31900E01 2.99400E01 4.85700E01 7.37400E01 7.06300E01 7.63700E01 2.02300E01 -2.36500E01 -6.88500E01 -8.63700E01 -8.83400E01 -3.72800E01 1.84000E01 8.79000E00 3.98800E01 5.19000E01 3.42500E01 5.30300E01 6.53500E01 5.10000E01 2.51700E01 8.53000E00 -2.26200E01 -2.87000E01 -2.09300E01 -4.89000E00 1.76600E01 3.59000E01 4.46800E01 3.87000E01 1.45100E01 5.70000E-01 -3.57900E01 -4.82300E01 -5.00000E01 -5.07700E01 -5.05100E01 -5.81900E01 -5.60500E01 -5.97900E01 -4.35900E01 -3.08500E01 -2.46900E01 -2.23200E01 -1.28600E01 -2.51000E01 -4.57000E01 -4.39000E01 -4.90100E01 -5.62400E01 -4.66500E01 -4.07300E01 -5.06000E01 -5.27400E01 -5.29100E01 -5.30500E01 -5.41600E01 -5.42700E01 -4.53500E01 -7.21300E01 -8.06900E01 -9.74600E01 -1.04680E02 -1.02050E02 -9.02700E01 -7.60700E01 -9.43900E01 -1.10220E02 -1.23470E02 -1.22050E02 -1.04510E02 -2.23700E01 8.82900E01 2.20250E02 4.09050E02 5.11280E02 5.08180E02 3.90510E02 2.04850E02 3.42800E01 -4.45700E01 -5.77900E01 -2.34000E00 -1.11500E01 -7.82000E01 -1.51230E02 -1.76360E02 -1.52090E02 -6.99200E01 1.48600E01 3.22500E01 2.71500E01 -1.71300E01 -8.77600E01 -1.41490E02 -1.96750E02 -2.18540E02 -1.60810E02 -6.91600E01 -8.63000E00 1.57600E01 7.87000E00 -1.62900E01 1.28000E01 6.97600E01 1.35400E02 1.73930E02 1.31480E02 -Frame 160 6.55900E01 2.06000E01 -2.08000E01 -1.24600E01 1.51500E01 4.46000E01 6.69200E01 7.98700E01 8.91500E01 8.26400E01 4.28600E01 1.48200E01 1.49100E01 1.40000E01 8.06000E00 -9.06000E00 -8.06900E01 -1.56450E02 -1.81400E02 -1.53950E02 -1.08510E02 -5.05700E01 -3.80000E00 -3.59000E00 -1.03800E01 -8.38000E00 -2.32000E00 7.92000E00 -1.54000E00 -1.43000E01 -4.45000E00 7.00000E-01 -1.80000E01 -2.62700E01 -2.07800E01 5.89000E00 4.33700E01 1.04960E02 1.30350E02 1.04400E02 6.45500E01 2.74100E01 -2.90000E00 8.86000E00 1.98000E00 -1.31100E01 -3.06500E01 -5.47000E01 -4.24400E01 -1.17600E01 1.78800E01 7.44200E01 8.76400E01 1.11190E02 8.83700E01 1.57700E01 -3.80800E01 -8.15500E01 -7.02800E01 -3.65900E01 -1.88200E01 -2.64800E01 -4.03500E01 -3.76100E01 -3.47500E01 3.72300E01 9.24000E01 1.10190E02 9.44300E01 5.11000E01 -4.61000E00 -2.00300E01 -3.09000E01 -3.50700E01 -1.03300E01 1.21900E01 5.40000E00 4.40000E00 -1.63000E00 -1.28400E01 -3.38000E00 8.38000E00 2.85000E01 2.42200E01 -2.72100E01 -7.32000E01 -1.01540E02 -1.04660E02 -7.47800E01 -4.89100E01 -4.42000E01 -4.33100E01 -3.83600E01 -4.12300E01 -3.11600E01 -2.07600E01 -7.03000E00 -7.88000E00 -1.87600E01 -2.19700E01 -4.82700E01 -7.23500E01 -8.71200E01 -8.72800E01 -6.13800E01 -4.76400E01 -4.14500E01 -6.70500E01 -8.24000E01 -9.71700E01 -7.93300E01 -6.48900E01 -6.59700E01 -6.20500E01 -8.89800E01 -1.03690E02 -1.24790E02 -1.51460E02 -1.52850E02 -1.50180E02 -1.08330E02 -1.13000E00 1.47340E02 3.14220E02 4.71930E02 5.14050E02 4.41980E02 3.24270E02 2.01630E02 1.03030E02 4.73100E01 -9.15000E00 -3.73200E01 -1.26300E02 -2.06890E02 -2.17760E02 -1.77750E02 -1.24330E02 -3.31400E01 3.59000E01 5.10400E01 3.36000E01 -1.14100E01 -5.98000E01 -1.21630E02 -1.38260E02 -1.39280E02 -1.13210E02 -1.19240E02 -1.17360E02 -1.28330E02 -7.95400E01 -1.41900E01 9.61700E01 1.51830E02 1.80050E02 1.52960E02 1.31880E02 9.00200E01 6.27800E01 -Frame 160 5.56400E01 3.12300E01 7.04000E00 1.31000E01 -1.06600E01 -7.14000E00 -5.00000E-01 2.23500E01 5.58900E01 8.04200E01 1.05640E02 7.55500E01 1.24700E01 -2.95600E01 -9.08500E01 -1.14940E02 -1.17660E02 -1.37350E02 -1.27520E02 -1.24270E02 -1.10810E02 -7.48400E01 -2.97000E01 2.38500E01 5.70200E01 6.51500E01 6.04600E01 5.05600E01 2.43000E01 -1.38000E01 -3.10700E01 -3.08500E01 -1.06000E01 2.28000E00 1.55500E01 2.72100E01 2.72000E01 4.91600E01 8.67500E01 9.54200E01 8.92700E01 5.28500E01 2.72600E01 6.86000E00 -1.31700E01 -1.18000E01 -2.23700E01 -2.42400E01 5.86000E00 4.18900E01 6.50000E01 4.67700E01 1.19400E01 -1.29700E01 -1.86300E01 -9.44000E00 5.05000E00 -1.00000E-02 -6.02200E01 -8.42300E01 -6.89000E01 -1.30300E01 4.25800E01 3.18700E01 3.98000E01 3.79400E01 1.59900E01 3.53500E01 5.92800E01 5.79000E01 2.74300E01 2.00000E01 1.03300E01 -1.76400E01 -4.04500E01 -3.99200E01 -3.53300E01 -1.95600E01 -7.28000E00 1.39000E00 -2.66700E01 -3.95700E01 -3.88300E01 -1.40300E01 -7.45000E00 -8.66000E00 -4.39000E01 -6.71900E01 -8.41400E01 -7.05400E01 -4.64600E01 -5.16000E01 -5.78600E01 -4.52700E01 -3.12600E01 -2.08000E01 -1.30100E01 -2.29800E01 -3.22500E01 -4.77900E01 -4.57800E01 -5.06800E01 -7.57000E01 -9.74400E01 -1.10780E02 -1.02450E02 -7.27900E01 -6.51700E01 -7.72800E01 -8.77200E01 -8.14300E01 -7.09000E01 -8.30100E01 -8.74500E01 -1.17980E02 -1.41380E02 -1.65410E02 -1.21070E02 -4.92900E01 5.77100E01 2.19920E02 4.32900E02 5.00030E02 4.61750E02 3.40850E02 2.08900E02 1.42690E02 1.47320E02 1.25980E02 4.88900E01 -1.00600E02 -2.48590E02 -2.96900E02 -2.38410E02 -1.71880E02 -8.21300E01 -2.15300E01 -7.04000E00 6.90000E00 2.60000E-01 -3.15900E01 -5.24000E01 -4.98100E01 -4.91000E01 -4.33300E01 -1.15350E02 -1.90500E02 -2.00810E02 -1.58270E02 -5.82900E01 6.38100E01 1.06600E02 1.14590E02 9.67000E01 1.17150E02 1.64110E02 1.78360E02 1.46880E02 1.12290E02 5.05300E01 -Frame 160 -6.18000E00 -4.36300E01 -5.21900E01 -5.89600E01 -3.18800E01 2.60700E01 7.07900E01 6.78300E01 2.37200E01 1.72300E01 1.95300E01 2.48900E01 1.74000E01 -3.53300E01 -1.12650E02 -1.72250E02 -1.68530E02 -1.49540E02 -1.16830E02 -6.70100E01 -4.96000E01 -1.46200E01 1.84400E01 3.24900E01 5.09300E01 7.38800E01 7.44600E01 7.19800E01 5.53500E01 2.51500E01 -3.40100E01 -5.09700E01 -2.94100E01 8.40000E-01 4.50200E01 4.15200E01 3.58700E01 4.10100E01 5.32700E01 7.78600E01 8.31400E01 8.15100E01 6.07600E01 4.93200E01 5.44900E01 3.87800E01 5.56000E00 -4.36800E01 -4.33900E01 -4.30400E01 -4.16300E01 -3.21300E01 -3.03000E01 -2.13800E01 -2.41600E01 -1.90000E01 9.34000E00 1.95500E01 2.40600E01 3.26900E01 4.15600E01 3.26700E01 4.48000E00 -1.58000E00 1.31800E01 2.33900E01 2.89000E01 2.85600E01 2.11900E01 1.25800E01 1.97000E01 2.70300E01 2.65700E01 1.60800E01 2.60000E-01 -2.20400E01 -3.80000E01 -4.04100E01 -4.38500E01 -4.73500E01 -3.49100E01 -3.40500E01 -3.31300E01 -3.21500E01 -4.21100E01 -2.73400E01 -1.90900E01 -1.55700E01 -2.09300E01 -3.94400E01 -5.34900E01 -5.59300E01 -3.34000E01 -3.21500E01 -4.18400E01 -5.38000E01 -5.90900E01 -4.55000E01 -3.84600E01 -2.91800E01 -2.96000E01 -5.70200E01 -5.72500E01 -7.34500E01 -8.51000E01 -7.10500E01 -8.95200E01 -8.85000E01 -8.43900E01 -8.51000E01 -1.08780E02 -1.29120E02 -1.27000E02 -1.20730E02 -1.32190E02 -8.49200E01 -1.71500E01 1.09690E02 2.83310E02 4.67000E02 4.79910E02 3.89760E02 2.86460E02 2.02710E02 2.07200E02 1.79660E02 1.23130E02 -6.23000E00 -1.76550E02 -2.47940E02 -2.32280E02 -1.85900E02 -1.50900E02 -6.76700E01 -1.98000E01 -3.43000E00 -1.25500E01 -4.29400E01 -3.22300E01 7.84000E00 1.91400E01 1.07700E01 -7.58700E01 -1.89120E02 -2.01700E02 -1.43490E02 -7.23600E01 -1.69800E01 -8.89000E00 2.44000E00 5.31000E01 1.00260E02 1.55770E02 1.83840E02 1.96600E02 1.69570E02 1.52550E02 6.98700E01 -1.74200E01 -4.03800E01 -Frame 160 -2.70000E01 4.83000E00 -2.35000E00 -1.27400E01 -2.34300E01 -1.54200E01 2.08600E01 8.32500E01 8.35000E01 4.56900E01 -5.32000E00 -3.68900E01 -7.33900E01 -1.16940E02 -1.30720E02 -1.18800E02 -1.05400E02 -7.94900E01 -8.37100E01 -8.19900E01 -4.51500E01 1.88600E01 8.78200E01 1.04820E02 9.12400E01 6.61500E01 5.02200E01 3.17500E01 3.76800E01 1.97600E01 6.27000E00 -7.64000E00 -1.09700E01 -1.03900E01 1.32200E01 2.55500E01 4.62400E01 8.35300E01 1.10900E02 9.50200E01 7.65700E01 5.14900E01 8.86000E01 1.13790E02 3.66700E01 -5.85000E00 -6.26600E01 -1.05150E02 -9.48400E01 -6.21100E01 -3.53000E01 -4.26200E01 -7.61200E01 -1.85800E01 3.47600E01 5.77200E01 6.83400E01 7.42300E01 7.12400E01 4.01000E01 1.09700E01 -1.40600E01 -1.08400E01 5.00000E-01 -5.80000E00 8.72000E00 -1.31000E00 -1.56400E01 -2.39000E00 5.02800E01 7.15400E01 3.74000E01 1.81800E01 -3.64000E00 -1.11200E01 -2.48100E01 -3.88900E01 -3.03600E01 -5.35300E01 -7.23600E01 -5.37000E01 -6.54100E01 -5.44200E01 -2.10400E01 -5.61000E00 4.30000E00 -2.14900E01 -3.10600E01 -3.59000E01 -1.98600E01 -8.31000E00 -1.04000E01 -5.05500E01 -1.05900E02 -7.68700E01 -6.08800E01 -5.33500E01 -4.55500E01 -3.54800E01 -3.60800E01 -6.56800E01 -6.01500E01 -5.24100E01 -5.64000E01 -5.44800E01 -4.64700E01 -8.11900E01 -1.20930E02 -1.35810E02 -1.24050E02 -1.13840E02 -1.25240E02 -1.61910E02 -1.51600E02 -2.88700E01 1.30640E02 3.15920E02 5.02600E02 4.53560E02 3.58570E02 2.74310E02 2.41200E02 2.57860E02 2.16820E02 1.14340E02 -2.23800E01 -1.90270E02 -2.43140E02 -2.30390E02 -1.94010E02 -1.51310E02 -4.71400E01 -6.70000E00 -3.60000E01 -5.21700E01 -2.67900E01 3.34000E01 1.11420E02 6.87500E01 -1.43000E01 -1.29900E02 -2.06950E02 -1.63190E02 -1.06930E02 -9.68400E01 -8.83600E01 -4.85500E01 -2.34800E01 2.13700E01 9.55700E01 1.64960E02 2.24330E02 2.37320E02 1.91490E02 1.29070E02 5.06100E01 1.56900E01 4.66900E01 3.26200E01 -2.29000E01 -Frame 160 -6.51000E01 -8.05300E01 -4.43500E01 7.00000E00 6.29400E01 8.95600E01 8.09300E01 6.39700E01 3.04400E01 -1.01400E01 -4.59500E01 -5.38100E01 -5.68500E01 -8.79200E01 -1.31860E02 -1.67030E02 -1.46130E02 -8.24500E01 -2.07300E01 2.59100E01 4.99600E01 5.17000E01 5.84400E01 9.03300E01 9.81200E01 9.30600E01 7.77600E01 4.79200E01 9.12000E00 -2.38800E01 -3.18700E01 -1.50700E01 -4.73000E00 3.29400E01 3.27500E01 3.45300E01 5.43400E01 9.87200E01 1.10390E02 1.31330E02 1.52810E02 1.20830E02 4.17700E01 2.02500E01 -2.09300E01 -4.03400E01 -5.92900E01 -6.97500E01 -6.64500E01 -9.79700E01 -1.07360E02 -1.49300E01 4.83800E01 4.96100E01 5.88400E01 8.53100E01 5.75300E01 3.68500E01 3.65100E01 4.71400E01 3.80700E01 -2.23000E01 -2.35000E01 -1.37000E01 -3.15700E01 -1.19500E01 3.73000E01 5.30500E01 3.92500E01 2.70000E01 1.83600E01 3.44500E01 3.70200E01 2.06500E01 3.77000E00 -2.96200E01 -7.30000E01 -6.66400E01 -7.40100E01 -6.85300E01 -5.08100E01 -4.04900E01 -2.58100E01 -2.76500E01 -2.75200E01 2.64000E00 2.67300E01 1.85400E01 1.20800E01 -1.35900E01 -6.60400E01 -7.50500E01 -5.32700E01 -6.37700E01 -9.15400E01 -6.50900E01 -5.17700E01 -7.20000E01 -5.98000E01 -4.71800E01 -3.31400E01 -3.46500E01 -5.71900E01 -5.03900E01 -5.13500E01 -8.63100E01 -9.62900E01 -9.75100E01 -1.32700E02 -1.52880E02 -1.66570E02 -1.44560E02 -5.97700E01 7.56600E01 2.73170E02 4.72500E02 3.93530E02 3.21740E02 2.94430E02 2.90010E02 3.22200E02 2.81110E02 1.52520E02 -3.91500E01 -1.81670E02 -2.16390E02 -1.81950E02 -1.80250E02 -1.77310E02 -7.71000E01 -5.77100E01 -8.16600E01 -4.82700E01 1.42000E01 8.85900E01 1.54200E02 7.57000E01 -1.72900E01 -1.22130E02 -1.55090E02 -1.01920E02 -8.10100E01 -1.35380E02 -1.66310E02 -1.33050E02 -9.36500E01 -1.19600E01 8.12500E01 1.45250E02 2.19080E02 2.07980E02 1.74340E02 1.49500E02 1.03760E02 9.95200E01 1.18070E02 3.81000E01 -5.13600E01 -9.95200E01 -9.80600E01 -Frame 160 -4.04500E01 1.29900E01 4.20800E01 6.40400E01 5.16300E01 4.28000E01 6.06700E01 5.80500E01 3.83100E01 2.39400E01 -3.38800E01 -9.54400E01 -1.46800E02 -1.56600E02 -1.36550E02 -8.87500E01 -8.63900E01 -6.38800E01 -1.76200E01 -1.79200E01 3.17800E01 9.79800E01 1.17130E02 1.16760E02 8.12700E01 4.46100E01 2.87800E01 1.44400E01 5.65000E00 5.59000E00 -2.24700E01 -3.73700E01 -1.86900E01 -7.41000E00 2.82300E01 8.49500E01 8.83500E01 8.17800E01 1.04940E02 1.68730E02 1.58350E02 8.25200E01 4.32900E01 1.78300E01 -3.41000E00 -4.12800E01 -4.72600E01 -6.23600E01 -1.00850E02 -9.14200E01 -2.86000E01 2.20000E00 -2.20400E01 3.00000E00 7.48200E01 7.58000E01 1.97500E01 2.69600E01 4.93800E01 4.74600E01 1.14500E01 7.33000E00 -4.91000E00 -2.55100E01 -2.27100E01 -7.90000E-01 3.08200E01 1.63900E01 8.51000E00 2.53900E01 3.47800E01 2.04400E01 1.16500E01 1.25900E01 -1.44000E00 -2.08900E01 -4.89100E01 -7.37400E01 -5.62600E01 -4.01800E01 -4.45600E01 -5.10300E01 -3.36500E01 -2.87000E01 -9.57000E00 2.16000E00 1.22500E01 1.46400E01 -1.19100E01 -5.42700E01 -4.38900E01 -5.81500E01 -6.28000E01 -7.85400E01 -6.87000E01 -6.85000E01 -8.72400E01 -8.84900E01 -5.67100E01 -2.49100E01 -4.71200E01 -5.09900E01 -3.59500E01 -6.34300E01 -8.17200E01 -7.55200E01 -9.30800E01 -1.22120E02 -1.50970E02 -1.64600E02 -1.04530E02 7.46000E00 1.51870E02 3.60570E02 3.95360E02 2.98840E02 2.79050E02 2.92390E02 3.13880E02 3.06760E02 2.26160E02 5.78900E01 -7.26000E01 -1.66020E02 -1.51140E02 -1.36630E02 -1.59520E02 -1.09950E02 -7.67300E01 -1.00400E02 -8.17000E01 -4.34000E00 7.74200E01 1.46640E02 9.48700E01 -6.58000E00 -5.51500E01 -1.13160E02 -9.38500E01 -7.08500E01 -1.12070E02 -1.80460E02 -1.64800E02 -1.38510E02 -7.62900E01 4.91000E00 1.02600E02 1.72200E02 1.73780E02 1.35240E02 1.53380E02 1.57940E02 1.42500E02 1.30460E02 7.59400E01 -2.13200E01 -6.65500E01 -7.31000E01 -4.17700E01 8.58000E00 -Frame 160 1.14900E01 3.04900E01 3.60600E01 2.67800E01 5.12000E01 1.04340E02 9.00400E01 4.32300E01 -8.05000E00 -5.68900E01 -8.81700E01 -1.04320E02 -1.12860E02 -1.05550E02 -1.13910E02 -1.26420E02 -8.42000E01 -4.26000E01 5.32000E00 5.97100E01 7.57200E01 7.21500E01 5.94000E01 5.02000E01 6.86700E01 7.06500E01 3.16300E01 1.38000E00 -1.68000E01 -3.95200E01 -3.29000E01 -5.04000E00 6.69000E00 3.37800E01 4.96800E01 6.90300E01 1.06920E02 1.06890E02 1.12770E02 1.42740E02 1.37520E02 8.70300E01 4.09200E01 4.37000E00 -1.12900E01 -2.44000E01 -5.58700E01 -6.02400E01 -8.26700E01 -1.08700E02 -7.34200E01 -8.97000E00 1.49000E00 3.28000E00 2.61300E01 3.36700E01 3.74200E01 3.22600E01 4.19200E01 4.88500E01 3.29600E01 -1.34400E01 -1.42500E01 -2.20600E01 -1.90800E01 6.02000E00 1.49000E01 1.05000E00 -2.62200E01 -1.73000E01 3.92000E00 2.68000E01 2.63700E01 1.09100E01 -6.03000E00 -2.64800E01 -3.45300E01 -3.57900E01 -3.70500E01 -3.93100E01 -4.36000E01 -5.59800E01 -5.86900E01 -5.54300E01 -2.60200E01 -9.68000E00 -2.48300E01 -3.04300E01 -4.31800E01 -4.72900E01 -3.24900E01 -4.42100E01 -4.92600E01 -7.04300E01 -9.52000E01 -1.02660E02 -8.32700E01 -8.12200E01 -6.90500E01 -7.24600E01 -7.39300E01 -7.14000E01 -7.47500E01 -5.71600E01 -7.40000E01 -8.33200E01 -1.11880E02 -1.27250E02 -9.80100E01 5.19000E00 1.41540E02 3.13940E02 3.11350E02 2.18370E02 2.23300E02 2.54170E02 2.92760E02 2.68280E02 1.87810E02 3.37000E01 -3.91800E01 -9.62500E01 -8.99700E01 -8.63900E01 -1.24600E02 -1.00860E02 -1.02280E02 -1.02640E02 -1.00910E02 -3.00000E-02 7.49700E01 9.82200E01 2.91000E01 -4.91800E01 -6.28300E01 -6.38400E01 -6.08200E01 -5.96500E01 -1.12390E02 -1.74660E02 -1.63700E02 -1.43260E02 -8.00700E01 -8.70000E-01 4.77600E01 8.78300E01 1.07040E02 8.07300E01 1.17520E02 1.62330E02 1.49370E02 1.15870E02 6.32300E01 -8.09000E00 -2.46000E01 -2.35900E01 -1.15200E01 7.94000E00 -1.00000E00 2.79000E00 -Frame 160 7.00000E-01 2.75500E01 6.92100E01 1.05100E02 6.70100E01 9.69000E00 -1.04000E01 -3.70900E01 -4.55600E01 -6.02400E01 -7.33100E01 -1.05710E02 -1.20010E02 -1.25640E02 -1.04330E02 -6.22700E01 -1.78600E01 2.09300E01 2.28900E01 1.58800E01 3.16300E01 4.88300E01 5.75100E01 6.24000E01 1.13800E01 -1.02300E01 -1.15000E01 -1.38000E01 -1.11600E01 -3.43000E00 -7.46000E00 1.13900E01 2.18100E01 2.75300E01 1.02400E02 1.36490E02 1.18510E02 1.32870E02 1.03560E02 5.72600E01 5.04900E01 4.34800E01 1.02300E01 -3.20400E01 -7.25700E01 -5.72700E01 -6.34300E01 -7.57100E01 -3.32900E01 -4.52000E00 -1.58500E01 -1.25100E01 4.95000E00 2.79500E01 4.06400E01 4.06900E01 2.97100E01 1.53700E01 -2.14200E01 -2.53200E01 -9.31000E00 -1.27900E01 -2.83600E01 -2.73800E01 -2.93400E01 -1.43300E01 2.16000E00 5.16000E00 2.92500E01 4.00600E01 2.11700E01 2.68000E00 1.26200E01 3.86000E00 -1.31700E01 -3.07100E01 -4.87600E01 -5.23200E01 -6.19400E01 -6.38000E01 -4.96600E01 -4.60400E01 -4.22700E01 -2.83500E01 -2.69800E01 -2.15500E01 -1.09400E01 -2.70000E01 -3.65400E01 -4.03500E01 -5.92500E01 -7.36900E01 -7.15200E01 -8.42300E01 -9.92700E01 -1.02700E02 -9.71600E01 -8.43800E01 -8.21500E01 -7.38000E01 -5.71500E01 -6.59600E01 -7.70100E01 -7.63600E01 -7.66500E01 -1.09910E02 -1.08130E02 -2.12300E01 8.93400E01 2.17210E02 2.51800E02 2.12200E02 1.85160E02 2.06100E02 2.69490E02 2.58590E02 1.84120E02 6.81900E01 1.46300E01 -3.25800E01 -5.32000E01 -6.33900E01 -8.98200E01 -7.69700E01 -8.06400E01 -8.73400E01 -8.61600E01 -1.78600E01 3.35700E01 7.25600E01 2.06900E01 -3.48000E01 -4.89700E01 -4.85300E01 -3.20300E01 -6.19900E01 -1.10820E02 -1.46060E02 -1.36260E02 -1.41040E02 -1.02850E02 -4.24000E01 1.29400E01 4.59600E01 3.89400E01 4.46500E01 8.84800E01 1.28570E02 1.27770E02 9.88200E01 5.78800E01 1.76200E01 1.21000E01 -2.60000E00 -7.75000E00 8.95000E00 1.11600E01 1.43000E00 5.40000E00 1.94900E01 -Frame 160 6.30000E01 9.98000E01 6.36500E01 2.33300E01 3.75000E00 -1.74300E01 -9.24000E00 -3.47800E01 -6.90700E01 -7.23500E01 -9.96600E01 -1.13720E02 -9.31100E01 -7.77800E01 -4.79100E01 -1.40800E01 -1.82000E01 -1.24400E01 6.50000E00 2.50100E01 2.90600E01 4.02000E01 3.64000E00 -1.30600E01 -1.22700E01 -1.64500E01 -2.27500E01 -5.23000E00 -1.70000E-01 -9.60000E-01 -7.80000E-01 2.74000E01 8.64200E01 9.31800E01 1.14060E02 1.29480E02 9.32600E01 5.28400E01 7.11300E01 6.99300E01 3.36400E01 -1.77900E01 -4.57800E01 -4.85800E01 -5.54100E01 -6.43900E01 -2.55800E01 -1.35400E01 -4.21100E01 -3.95200E01 -5.81000E00 1.59500E01 2.13700E01 1.99400E01 1.94500E01 -8.07000E00 -3.74300E01 -1.96600E01 6.80000E-01 -2.53500E01 -5.11600E01 -4.87200E01 -2.81600E01 -3.79400E01 -3.19900E01 -5.83000E00 2.41400E01 1.10100E01 -5.54000E00 1.64000E01 1.70000E01 1.16000E01 -1.98000E00 -1.79800E01 -3.54600E01 -4.84500E01 -5.58000E01 -4.73300E01 -4.25600E01 -6.86100E01 -5.44100E01 -3.87300E01 -4.45400E01 -2.45000E01 -1.58300E01 -3.78900E01 -4.26100E01 -5.04500E01 -5.95000E01 -5.87900E01 -7.30200E01 -6.36400E01 -8.59300E01 -1.16850E02 -1.02640E02 -7.19200E01 -9.02100E01 -7.60100E01 -5.43300E01 -4.39600E01 -8.02600E01 -9.76400E01 -7.25000E01 -7.95500E01 -8.97800E01 -1.25280E02 -6.08000E01 4.86900E01 1.57480E02 2.36450E02 1.87610E02 1.54060E02 1.69310E02 2.38860E02 2.38330E02 2.08560E02 9.36800E01 2.51700E01 3.53000E00 -3.97700E01 -4.03600E01 -7.69200E01 -5.05300E01 -5.92700E01 -7.92200E01 -8.07100E01 -3.51700E01 3.88100E01 4.40400E01 3.13900E01 -3.26800E01 -4.27000E01 -2.99900E01 -2.58600E01 -7.15800E01 -9.26500E01 -1.24290E02 -1.49800E02 -1.42970E02 -1.26810E02 -5.10500E01 -3.92000E00 1.36500E01 2.27300E01 1.50500E01 5.41000E01 1.20290E02 1.15400E02 8.32400E01 4.80000E01 2.06200E01 1.63700E01 1.09700E01 -6.10000E-01 7.45000E00 1.17500E01 7.17000E00 4.44000E00 2.76200E01 5.54900E01 -Frame 160 8.01700E01 8.45400E01 4.79700E01 2.92300E01 1.08900E01 5.98000E00 -9.08000E00 -4.95900E01 -8.33000E01 -8.69700E01 -9.56700E01 -1.02550E02 -6.35500E01 -5.82900E01 -2.48200E01 -2.23000E01 -3.66900E01 -1.35000E01 2.34100E01 3.14300E01 1.36600E01 8.32000E00 -4.20000E00 -1.71100E01 -1.34100E01 -1.55900E01 -1.28300E01 -1.29800E01 -8.13000E00 -4.13000E00 1.79900E01 7.57700E01 1.08260E02 1.18650E02 1.16250E02 8.96700E01 6.91900E01 8.50200E01 9.72700E01 3.08200E01 -1.07000E01 -2.44800E01 -4.56500E01 -6.24200E01 -5.76400E01 -2.56500E01 -2.46400E01 -3.95700E01 -2.39200E01 7.24000E00 9.36000E00 1.85400E01 2.49900E01 1.66200E01 -6.02000E00 -3.33500E01 -3.49000E00 -1.57000E01 -3.62700E01 -6.24400E01 -4.63600E01 -5.57400E01 -4.73600E01 -3.06800E01 -3.46000E00 1.06000E01 2.90800E01 2.01000E01 2.28200E01 2.46000E01 2.14100E01 8.10000E00 -1.86300E01 -3.61700E01 -5.62200E01 -4.68400E01 -5.11300E01 -5.15100E01 -5.18600E01 -5.11800E01 -3.44400E01 -2.11600E01 -3.46000E00 -1.22200E01 -1.92500E01 -3.04900E01 -4.10600E01 -5.19300E01 -6.21000E01 -7.45400E01 -8.53100E01 -9.43500E01 -1.14600E02 -9.93900E01 -7.36400E01 -6.20500E01 -6.40700E01 -4.51200E01 -5.45700E01 -4.62900E01 -4.67400E01 -5.41900E01 -5.28500E01 -7.84500E01 -1.14800E02 -1.04200E02 -2.92100E01 8.50900E01 2.02810E02 1.88950E02 1.35460E02 1.52170E02 1.89240E02 2.48270E02 2.28890E02 1.53700E02 6.30500E01 2.25500E01 -7.21000E00 -3.08700E01 -3.82200E01 -4.37500E01 -3.54000E01 -6.67500E01 -7.90000E01 -6.45500E01 1.44100E01 6.18000E01 4.96000E01 9.80000E-01 -4.91400E01 -3.17600E01 -3.88100E01 -4.00400E01 -7.32700E01 -1.06460E02 -1.44580E02 -1.37750E02 -1.21590E02 -7.78300E01 -1.86600E01 7.34000E00 2.31200E01 2.03500E01 3.24600E01 7.89000E01 1.14690E02 9.74700E01 5.66200E01 1.24500E01 -7.10000E00 -1.42500E01 1.63900E01 2.09600E01 1.26500E01 7.07000E00 1.43100E01 4.07600E01 7.49900E01 7.52100E01 -Frame 160 9.33700E01 6.40100E01 2.66900E01 4.20000E00 -1.39800E01 -8.70000E00 -3.52400E01 -6.25600E01 -8.76600E01 -1.01450E02 -8.15700E01 -4.90000E01 -2.73800E01 -2.50700E01 -2.26700E01 -2.21800E01 -8.66000E00 -2.72000E00 2.24000E01 1.62700E01 4.93000E00 -3.17700E01 -4.25800E01 -3.36900E01 -2.25000E01 -1.19500E01 -5.07000E00 -1.39800E01 3.84000E00 3.42000E01 6.84600E01 1.24710E02 1.40580E02 9.78100E01 6.86300E01 7.24900E01 7.34100E01 6.63000E01 3.19200E01 -8.54000E00 -3.82300E01 -5.67900E01 -6.18600E01 -2.10200E01 3.11000E00 -7.01000E00 -1.54300E01 -1.50900E01 1.28000E00 1.01600E01 3.73100E01 3.22700E01 -8.95000E00 -4.64300E01 -4.20200E01 -4.24300E01 -3.88100E01 -3.70400E01 -3.91800E01 -4.43500E01 -5.16400E01 -2.71100E01 1.42000E01 3.07700E01 3.28200E01 1.09000E01 6.29000E00 1.25300E01 4.95000E00 1.13000E00 -2.38100E01 -4.15000E01 -5.47000E01 -5.72600E01 -4.58500E01 -1.50500E01 -1.32900E01 -1.34700E01 -1.66500E01 -1.19200E01 -4.04000E00 1.08000E00 -1.86500E01 -4.69800E01 -6.61500E01 -6.98600E01 -7.66300E01 -5.85500E01 -6.38700E01 -5.83100E01 -6.75400E01 -7.30100E01 -5.46000E01 -3.85900E01 -2.20700E01 -3.20400E01 -4.63100E01 -6.40000E01 -5.32000E01 -5.80400E01 -8.10000E01 -7.86200E01 -8.01200E01 -9.26200E01 -1.17450E02 -1.12970E02 -2.72800E01 9.90500E01 2.22160E02 2.57840E02 1.70360E02 1.39000E02 1.69530E02 2.27840E02 2.26740E02 1.54400E02 4.26900E01 -2.45000E01 -4.87300E01 -3.86500E01 -7.21000E00 2.22000E00 1.89500E01 -1.58100E01 -2.66200E01 -1.47300E01 5.45500E01 1.02930E02 5.77200E01 -1.49300E01 -8.48000E01 -9.17400E01 -8.88000E01 -8.26800E01 -8.92900E01 -9.20200E01 -1.22750E02 -1.18320E02 -6.06500E01 -7.15000E00 5.30000E01 6.99500E01 5.53500E01 1.82400E01 2.79600E01 4.49500E01 6.04200E01 2.63100E01 1.61200E01 -1.44000E01 -3.28500E01 -1.58400E01 4.57100E01 8.31200E01 9.26100E01 8.23100E01 6.56200E01 8.63600E01 9.96700E01 9.03100E01 -Frame 160 6.05900E01 1.59100E01 -1.61500E01 -5.31700E01 -6.82700E01 -4.57600E01 -2.55000E01 -2.65800E01 -4.46600E01 -4.42500E01 -3.47800E01 9.02000E00 3.51700E01 2.51000E01 -1.33000E01 -3.18700E01 -4.09800E01 -4.53300E01 -3.67700E01 -2.19100E01 -3.15700E01 -4.65000E01 -3.58500E01 -6.84000E00 1.60700E01 4.76700E01 7.22000E01 5.54200E01 4.40700E01 4.53300E01 5.15900E01 5.10000E01 7.83500E01 6.74800E01 5.22200E01 4.04500E01 8.29000E00 4.41400E01 6.20700E01 6.65100E01 3.80400E01 1.06700E01 1.44600E01 5.37000E00 7.01000E00 -5.29000E00 -9.50000E-01 -2.94600E01 -3.38100E01 -2.72500E01 -1.14500E01 -1.11400E01 -5.80000E00 -1.22800E01 -2.49400E01 -1.99600E01 -1.58000E01 1.55100E01 1.57800E01 -4.95000E00 -1.23100E01 -1.18800E01 -3.04200E01 -1.25000E01 1.69900E01 -2.62000E00 -9.83000E00 -1.52500E01 -1.18200E01 2.17300E01 5.30000E00 -6.64000E00 -3.94000E00 -2.81500E01 -2.10800E01 -2.37700E01 -1.55200E01 -1.00000E01 -2.23000E01 -3.89600E01 -4.21000E01 -3.93000E01 -2.33800E01 -1.19500E01 -2.81600E01 -5.88500E01 -4.94400E01 -3.17000E01 -4.83900E01 -4.75600E01 -3.16700E01 -5.42700E01 -5.95300E01 -6.29100E01 -4.63500E01 -3.42500E01 -4.17600E01 -4.84800E01 -3.03800E01 -5.37100E01 -6.07300E01 -4.59300E01 -3.96500E01 -6.21600E01 -7.33300E01 -7.28000E01 -9.52100E01 -9.92500E01 -2.93500E01 1.26710E02 2.27450E02 2.59070E02 1.92410E02 1.40500E02 1.35850E02 1.75930E02 1.74090E02 1.15040E02 2.50700E01 -3.66900E01 -2.33100E01 -2.54800E01 3.32000E00 5.40200E01 9.52500E01 4.86800E01 2.64000E00 -6.81000E00 2.64700E01 5.27700E01 1.78500E01 -5.51500E01 -1.18340E02 -1.43360E02 -1.13010E02 -6.66100E01 -4.77100E01 -1.41800E01 -1.96000E01 -3.01700E01 -3.20400E01 1.50600E01 6.26000E01 5.55500E01 8.23000E00 -3.45600E01 -1.76400E01 -2.81800E01 3.98000E00 3.11300E01 5.50900E01 4.87400E01 4.21500E01 4.63200E01 7.65800E01 1.17710E02 1.17010E02 8.31900E01 3.62600E01 2.48600E01 -Frame 160 2.81000E01 2.24300E01 1.15800E01 1.44000E01 7.31000E00 -2.29900E01 -3.51900E01 -9.72000E00 3.85600E01 4.13100E01 5.12000E00 -3.21800E01 -4.05900E01 -4.22100E01 -2.98300E01 -3.20300E01 -4.72600E01 -3.79100E01 -3.82300E01 -3.55200E01 -1.36900E01 2.68300E01 3.85800E01 2.76600E01 1.23800E01 5.62000E00 3.65000E00 3.26200E01 2.04600E01 1.09100E01 2.50600E01 2.26300E01 4.41100E01 1.01220E02 1.03010E02 9.97700E01 1.11350E02 6.02000E01 4.14300E01 3.20600E01 5.43900E01 2.83800E01 5.56000E00 -1.79500E01 4.85000E00 -1.63000E00 -3.12900E01 1.51800E01 5.30900E01 1.31400E01 -2.10400E01 -1.52400E01 -5.23000E00 -1.18900E01 -3.67300E01 -1.32900E01 -1.31000E01 -4.38800E01 -2.15600E01 2.04800E01 1.38100E01 1.09300E01 5.29600E01 1.12500E01 -6.75000E00 3.71000E00 2.50000E00 3.26000E00 -1.19500E01 -3.36100E01 -6.90000E00 -1.93500E01 -1.91600E01 1.70600E01 1.33900E01 -6.40000E00 2.21000E00 6.09000E00 -1.69100E01 -1.16000E01 -1.41100E01 -2.56800E01 -3.35800E01 -5.16900E01 -4.63100E01 -1.47200E01 -3.01400E01 -3.60100E01 -2.70300E01 -3.37500E01 -2.76500E01 -3.03400E01 -3.20900E01 -2.18700E01 -3.73200E01 -6.42200E01 -4.99000E01 -3.91000E01 -4.39400E01 -3.79000E01 -1.56500E01 -3.87100E01 -3.24600E01 -3.10000E01 -4.14800E01 -6.32600E01 -6.96700E01 -6.52300E01 -6.66100E01 -1.02990E02 -1.22420E02 5.16400E01 2.06010E02 3.18940E02 3.00050E02 1.33290E02 7.22500E01 1.08260E02 1.44290E02 1.36310E02 4.29700E01 -2.62800E01 -1.56300E01 2.43800E01 2.96200E01 9.30100E01 1.56290E02 1.28400E02 5.55500E01 -3.15800E01 -4.73500E01 -2.54000E00 -1.03200E01 -7.23100E01 -1.01130E02 -9.47300E01 -6.70300E01 -7.40000E00 -1.89100E01 1.25000E00 5.40400E01 9.42000E00 -3.35800E01 -4.38700E01 -5.54300E01 -2.62900E01 -2.32200E01 -5.30300E01 -9.71000E00 4.39600E01 3.62500E01 4.82700E01 4.96200E01 6.19700E01 9.86500E01 8.33800E01 2.75700E01 3.40200E01 3.56500E01 2.43100E01 -Frame 160 4.06100E01 4.73900E01 7.33500E01 9.30600E01 2.93100E01 -1.14200E01 3.66200E01 4.61300E01 2.39100E01 9.00000E00 -2.93600E01 -4.88600E01 -2.69000E01 -4.22200E01 -2.29600E01 9.93000E00 -7.16000E00 -1.87600E01 -3.26900E01 -4.80100E01 -1.75000E00 1.49500E01 -2.18400E01 -1.77400E01 -3.14900E01 -2.86300E01 1.33500E01 1.66200E01 1.09800E01 2.81600E01 2.98500E01 2.35700E01 3.20800E01 3.18300E01 8.85500E01 9.99500E01 4.36200E01 6.65200E01 1.01080E02 1.13630E02 4.14800E01 1.00800E01 4.17200E01 2.93200E01 9.53000E00 -2.68600E01 3.06700E01 1.09700E01 -2.83300E01 -5.80000E00 2.34500E01 1.56000E01 -2.44900E01 -3.97800E01 -3.14900E01 -4.29000E01 -3.56100E01 8.95000E00 3.08900E01 -1.15100E01 -1.22000E01 2.41100E01 3.53000E00 -7.68000E00 -1.32200E01 -3.91000E00 -4.30000E00 -4.16900E01 -2.21900E01 2.09400E01 8.39000E00 -1.05500E01 1.09400E01 6.09000E00 3.09000E00 1.00000E00 -1.91500E01 -1.49000E01 -1.15000E01 -1.89800E01 -1.66700E01 -4.27000E00 -4.80000E-01 -1.57000E00 -3.16900E01 -4.77100E01 -3.51800E01 -2.82300E01 -3.40400E01 -3.00000E01 -5.28100E01 -6.02800E01 -3.19300E01 -1.36800E01 -3.38600E01 -2.06400E01 -2.70000E01 -4.65400E01 -6.16500E01 -5.91800E01 -2.05900E01 -3.98000E01 -5.35800E01 -5.57500E01 -2.79500E01 -2.22800E01 -2.04300E01 -3.15200E01 -5.19400E01 -5.39600E01 -6.90100E01 -7.24800E01 -7.30100E01 -1.01510E02 -7.58200E01 3.77100E01 1.86690E02 3.22080E02 2.51340E02 8.31700E01 2.07200E01 3.73200E01 7.64000E01 5.86200E01 2.32400E01 2.27500E01 4.12300E01 8.72500E01 1.19620E02 1.33890E02 1.39490E02 4.51500E01 -4.11300E01 -1.09020E02 -7.58900E01 1.33500E01 2.23500E01 -1.03800E01 -4.91000E01 -1.69600E01 1.52000E01 2.63500E01 1.98300E01 3.10000E00 -5.01400E01 -1.28970E02 -1.31110E02 -6.21900E01 -7.08000E00 5.74000E00 -4.05000E00 4.86000E00 2.60400E01 2.58500E01 4.76300E01 2.80400E01 -9.18000E00 -3.95400E01 -4.98000E01 -2.63300E01 -Frame 160 2.28900E01 9.76100E01 1.07550E02 6.77000E01 4.75600E01 6.87600E01 7.25600E01 4.74200E01 1.14700E01 -4.59000E00 -3.11300E01 -4.04500E01 -8.01000E00 5.14500E01 6.07100E01 3.62100E01 1.89300E01 -5.89000E00 -1.04600E01 -7.15000E00 -1.97200E01 -2.56500E01 -5.17300E01 -8.45600E01 -3.63200E01 1.54500E01 1.38100E01 2.91100E01 2.38600E01 -1.65700E01 -1.92300E01 3.05000E00 -1.09800E01 -6.43000E00 -2.73000E00 3.70900E01 8.61100E01 -1.43000E00 5.93300E01 1.33920E02 2.67000E01 -2.58500E01 1.40100E01 3.01000E01 3.67000E00 -5.70000E-01 1.40700E01 6.01600E01 4.66300E01 -1.83500E01 4.96900E01 7.58000E01 -5.13400E01 -3.33500E01 1.72400E01 -1.96100E01 -2.15700E01 -5.56000E00 -1.10400E01 2.53300E01 -5.19000E00 -4.96400E01 1.35900E01 1.37700E01 -3.70500E01 -4.40000E00 -2.97300E01 -5.38100E01 -5.58000E00 -1.18500E01 7.70000E00 -1.41500E01 -2.06600E01 3.86500E01 2.27600E01 -4.26400E01 -3.60200E01 7.88400E01 7.18000E00 -1.92700E02 5.84200E01 1.29250E02 -5.78500E01 -1.17680E02 1.24750E02 1.26560E02 -2.05690E02 -9.80200E01 2.00070E02 -1.28100E01 -1.69260E02 -3.23900E01 1.41740E02 -7.98800E01 -5.32800E01 -5.08100E01 -1.42200E01 1.27510E02 -1.33500E02 -1.84600E01 9.15000E00 -9.34000E01 3.49600E01 1.08250E02 -1.45300E02 -2.37560E02 3.24540E02 1.42710E02 -5.10880E02 1.33790E02 3.60260E02 -3.02610E02 -1.65700E02 9.95900E01 1.94980E02 -2.16870E02 -2.32260E02 1.47080E02 1.43000E02 -1.94350E02 -2.36960E02 2.04320E02 4.20400E01 -2.45310E02 -2.43300E01 2.88490E02 9.37000E01 -1.77210E02 4.56600E01 9.53700E01 4.75200E01 2.31400E01 -3.40200E01 5.70800E01 4.19400E01 -3.67100E01 2.42400E01 8.70500E01 8.97200E01 2.33900E01 -1.50100E01 2.64200E01 1.81100E01 1.53000E00 -1.15600E01 -3.04000E00 4.67500E01 -3.96000E00 -6.52300E01 1.96700E01 1.15180E02 -2.34600E01 -1.09360E02 1.19000E00 1.11600E01 -7.35700E01 -5.88500E01 -2.26200E01 2.87500E01 -3.03200E01 -Frame 160 -8.21900E01 3.41000E00 7.86500E01 -2.28600E01 -5.94900E01 2.28000E01 1.76100E01 -5.07600E01 -5.32000E01 -4.67000E00 1.41360E02 -6.12300E01 -1.43030E02 1.23770E02 1.45700E02 -1.35830E02 -6.29400E01 1.27260E02 4.92200E01 -1.68280E02 3.16500E01 1.16730E02 -6.66700E01 -6.16800E01 9.05200E01 -2.26600E01 -7.13200E01 4.55800E01 -2.19500E01 3.84500E01 5.66800E01 -1.27580E02 -6.42000E00 1.64490E02 -5.34700E01 -1.55120E02 1.69230E02 5.94500E01 -2.56780E02 7.24500E01 2.22790E02 -2.59430E02 4.68000E00 1.91950E02 -2.13170E02 1.06380E02 4.27100E01 -1.70970E02 1.67900E02 5.50900E01 -1.76260E02 -8.16000E01 3.63060E02 -2.18870E02 -1.75590E02 3.15190E02 -1.44150E02 -5.60000E-01 -1.35300E01 -4.98900E01 2.04670E02 -9.50900E01 -1.94030E02 3.27150E02 -2.29860E02 1.38120E02 2.23500E01 -3.86020E02 5.29340E02 -7.04900E01 -6.05800E02 6.32900E02 5.23100E01 -6.99280E02 6.86540E02 -1.78430E02 -2.83980E02 3.68470E02 -2.21250E02 9.00000E00 2.83600E01 -4.47100E01 3.20000E01 -1.69500E01 1.26000E01 -1.07950E02 4.68700E01 1.12430E02 -5.20900E01 -2.51650E02 1.78850E02 2.57490E02 -4.56680E02 1.23490E02 5.24800E01 2.31220E02 -4.41730E02 1.15920E02 1.02700E02 -1.90300E01 -7.51000E00 -1.92630E02 1.27700E02 2.12810E02 -2.60650E02 -2.05510E02 5.18520E02 -3.71550E02 -9.58000E01 3.87560E02 -2.60500E02 -2.95360E02 7.82970E02 -7.19090E02 4.80700E01 3.17900E02 5.87700E01 -6.10430E02 2.57240E02 5.00490E02 -7.19210E02 1.08040E02 3.91760E02 -1.38120E02 -5.89260E02 7.68190E02 -2.18110E02 -5.35710E02 5.19360E02 1.43560E02 -7.01000E02 3.92970E02 3.05390E02 -5.21190E02 -1.29850E02 6.71700E02 -4.86600E02 -2.65270E02 6.64140E02 -4.70340E02 3.53000E00 1.33040E02 -8.25800E01 -5.58000E01 6.28500E01 -1.47900E02 3.29600E01 1.19370E02 -1.08670E02 -7.86700E01 1.62320E02 -3.40000E00 -1.64250E02 1.70700E01 1.53970E02 -7.20500E01 -1.35000E02 1.62220E02 -9.53000E00 -7.75900E01 -Frame 160 5.53100E01 4.42600E01 -5.01800E01 4.85000E01 -3.68200E01 3.02500E01 -1.06400E01 5.21000E00 5.54000E00 -8.31300E01 1.48530E02 -4.07900E01 -1.89930E02 2.68490E02 -6.11700E01 -2.42970E02 3.03830E02 -9.67500E01 -1.78630E02 2.04120E02 -8.84900E01 1.99300E01 -2.07320E02 2.31590E02 2.78500E01 -3.98220E02 4.38900E02 -9.15100E01 -4.47240E02 6.26440E02 -3.74270E02 -4.15800E01 1.43430E02 7.40200E01 -2.33610E02 7.14600E01 1.98890E02 -3.16930E02 1.17590E02 6.34300E01 -7.44700E01 -1.69570E02 3.70540E02 -2.67000E02 -2.27010E02 5.83420E02 -3.40640E02 -2.37960E02 3.28110E02 1.22370E02 -4.76850E02 2.68840E02 1.51330E02 -3.61960E02 2.17210E02 9.90800E01 -2.65800E02 -4.72000E00 2.98430E02 -2.25330E02 -1.24080E02 2.87410E02 -1.49650E02 -3.50900E01 7.50400E01 8.85000E01 -3.79710E02 4.16950E02 -1.22150E02 -1.89810E02 1.24610E02 1.18630E02 -2.45650E02 1.15030E02 1.40750E02 -3.01870E02 1.54100E02 4.20200E01 -5.45700E01 2.99000E01 -2.79050E02 4.61700E02 -3.26080E02 -3.49200E01 1.69270E02 -9.03900E01 -2.00000E00 1.81200E01 -1.51600E01 7.55400E01 -2.66030E02 3.71080E02 -2.38460E02 -8.96300E01 1.80880E02 -7.42000E00 -2.17540E02 1.53040E02 8.19300E01 -2.05460E02 1.28450E02 -4.44400E01 3.13600E01 -1.54530E02 2.53970E02 -2.92140E02 2.13130E02 -1.24180E02 6.91900E01 -5.95300E01 1.78200E01 -3.46000E00 8.96000E01 -2.53550E02 2.60920E02 -2.48950E02 2.83640E02 -2.84570E02 3.89100E01 2.18350E02 -2.20870E02 -2.19470E02 6.34170E02 -6.71390E02 2.33300E02 1.54740E02 -2.24400E02 3.79400E01 4.03500E01 -9.21000E00 -1.38300E02 2.33740E02 -2.85940E02 2.09570E02 -1.23800E02 8.06300E01 -8.77000E01 2.48400E01 6.78300E01 -9.09200E01 -1.25000E01 -1.26500E01 1.17200E02 -2.36050E02 2.90990E02 -3.24950E02 2.27360E02 3.95300E01 -3.70150E02 2.95840E02 3.81400E01 -1.79570E02 -1.00850E02 4.38390E02 -5.14110E02 2.65410E02 -1.32200E01 -1.57460E02 1.53980E02 -5.91000E01 -Frame 160 -1.26720E02 3.14680E02 -4.27570E02 2.93620E02 -4.71700E01 -1.43460E02 -8.16000E01 3.80240E02 -4.18000E02 -5.40000E-01 4.43820E02 -4.33500E02 2.45000E00 3.26870E02 -2.31990E02 -1.94920E02 4.28470E02 -2.18270E02 -2.55810E02 5.33720E02 -3.91840E02 -1.57660E02 5.00900E02 -2.22650E02 -5.91370E02 1.01105E03 -5.68930E02 -2.33240E02 3.28040E02 3.03360E02 -6.15370E02 3.80600E01 6.66650E02 -4.89950E02 -3.56860E02 8.72670E02 -5.72600E02 -1.60030E02 5.23440E02 -2.95450E02 -2.28390E02 4.55950E02 -2.49980E02 -1.33510E02 3.15680E02 -1.22540E02 -2.95200E02 5.32070E02 -2.00580E02 -3.43700E02 4.86070E02 -1.60960E02 -1.45850E02 6.28600E01 2.69960E02 -4.57790E02 2.45380E02 1.60060E02 -3.22050E02 1.18230E02 1.25010E02 -7.31200E01 -2.18310E02 4.90210E02 -5.19820E02 2.59400E02 5.94700E01 -9.07000E01 -1.84300E01 -6.19100E01 3.33320E02 -3.47540E02 -2.13000E00 3.34960E02 -1.57840E02 -4.30730E02 8.36340E02 -4.60190E02 -5.22380E02 1.14799E03 -7.57060E02 -3.25310E02 1.00209E03 -4.99400E02 -6.35850E02 1.07607E03 -3.76080E02 -6.57780E02 1.03342E03 -5.66050E02 -1.40450E02 4.50440E02 6.01800E01 -9.18200E02 1.10302E03 -4.13290E02 -3.09100E02 5.45600E02 -4.33780E02 1.59960E02 3.18910E02 -5.77520E02 7.18700E01 8.54270E02 -1.09793E03 4.23530E02 3.57640E02 -2.16620E02 -7.28430E02 1.48461E03 -1.19030E03 1.02190E02 7.43550E02 -7.00950E02 5.75400E01 3.08430E02 1.39790E02 -7.91190E02 7.52780E02 -1.42100E01 -4.31900E02 5.09000E01 4.90580E02 -5.08600E02 6.58000E01 4.75900E02 -8.29760E02 6.86980E02 2.19980E02 -1.22766E03 1.17808E03 -1.79890E02 -5.79680E02 5.02710E02 6.51000E01 -4.17100E02 4.82180E02 -2.60180E02 -2.28250E02 7.34880E02 -5.93890E02 -4.27190E02 1.50606E03 -1.49731E03 2.83850E02 8.05820E02 -5.58820E02 -4.19130E02 8.42270E02 -3.91110E02 -3.45260E02 9.02330E02 -1.25134E03 1.16356E03 -4.58950E02 -2.26200E02 1.78960E02 5.25480E02 -9.50770E02 5.68220E02 -Frame 160 2.76650E02 -6.98190E02 3.23480E02 2.91440E02 -4.07860E02 -3.01400E02 1.21763E03 -1.40250E03 5.12660E02 8.87560E02 -1.54277E03 7.95190E02 5.75700E02 -7.91110E02 -6.28440E02 1.80084E03 -1.07544E03 -6.18650E02 1.13684E03 1.64550E02 -1.58095E03 1.45805E03 -1.66340E02 -8.86800E02 7.50290E02 3.79300E02 -1.40151E03 1.12292E03 4.12360E02 -1.49155E03 9.51060E02 5.23310E02 -1.06415E03 1.25300E02 9.76410E02 -9.92070E02 3.05100E01 8.62680E02 -7.07220E02 -2.79000E02 8.82720E02 -2.87460E02 -9.22550E02 1.25958E03 -4.43990E02 -4.73820E02 7.93870E02 -6.24980E02 2.19880E02 3.29660E02 -4.38470E02 -2.98940E02 1.11718E03 -9.95950E02 1.40510E02 3.34980E02 -1.38500E01 -5.02450E02 8.17310E02 -9.34880E02 5.61620E02 3.85870E02 -1.10167E03 7.47820E02 3.06800E02 -7.91140E02 3.06710E02 4.74220E02 -8.44530E02 5.25730E02 3.74870E02 -1.03000E03 4.57650E02 9.72870E02 -1.57088E03 6.26180E02 7.98590E02 -1.03641E03 3.28200E01 9.68080E02 -8.35640E02 -1.99350E02 9.85800E02 -5.39320E02 -7.42090E02 1.52256E03 -1.04418E03 -2.15310E02 1.10439E03 -9.23130E02 4.15200E01 6.75960E02 -6.55610E02 6.82600E01 5.41450E02 -5.48230E02 -1.11090E02 7.92670E02 -6.90360E02 -8.60000E00 5.27250E02 -3.11820E02 -2.66540E02 7.06390E02 -7.14250E02 2.92850E02 3.02820E02 -4.42180E02 -3.80000E00 5.17140E02 -3.99290E02 -2.00680E02 6.02260E02 -4.83530E02 2.35560E02 1.96700E01 -2.95910E02 3.48030E02 1.15560E02 -7.40200E02 7.25270E02 -9.06200E01 -3.56650E02 4.51430E02 -4.66920E02 3.53770E02 2.49510E02 -7.71200E02 2.18250E02 8.57090E02 -9.88110E02 3.04560E02 3.42920E02 -5.17850E02 4.72250E02 -2.69470E02 -8.38700E01 3.47550E02 -1.99010E02 -9.28000E00 -8.66700E01 4.58630E02 -5.28630E02 -2.92000E00 5.11050E02 -3.55560E02 -1.06300E01 7.98000E00 4.47160E02 -8.72490E02 7.99870E02 -2.44800E02 -3.30540E02 6.92380E02 -5.82710E02 -7.76800E01 9.07040E02 -1.17763E03 6.82340E02 2.54190E02 -Frame 160 -8.39430E02 6.21920E02 5.38800E01 -4.72770E02 3.85740E02 -8.35600E01 -1.19290E02 4.26990E02 -7.54230E02 7.45730E02 -1.60620E02 -3.30840E02 1.68990E02 2.57120E02 -1.87260E02 -4.39200E02 1.01448E03 -9.95830E02 5.73630E02 4.80900E01 -6.08740E02 7.45690E02 -3.13690E02 -1.62530E02 5.44600E01 4.85110E02 -6.59370E02 3.95380E02 -1.39620E02 3.25970E02 -6.82340E02 8.71810E02 -7.30790E02 3.67740E02 6.19000E01 -2.16450E02 1.48000E01 4.26190E02 -5.72090E02 6.03000E01 7.09190E02 -9.59510E02 5.66090E02 6.03400E01 -5.07100E02 7.62390E02 -6.89570E02 2.55220E02 1.81990E02 2.33300E01 -5.84250E02 6.61930E02 1.56030E02 -1.09965E03 1.14887E03 -3.46150E02 -4.39070E02 4.66550E02 2.82740E02 -9.02010E02 8.15450E02 1.39260E02 -1.36896E03 1.55446E03 -2.28170E02 -1.26470E03 1.35390E03 -1.96790E02 -5.07240E02 4.81900E01 7.66750E02 -8.58180E02 1.95450E02 5.71480E02 -8.23390E02 5.19380E02 6.11900E01 -3.04220E02 3.08360E02 -3.36400E02 3.43220E02 -7.54600E01 -1.98010E02 -3.41600E01 7.29790E02 -9.80310E02 2.64630E02 6.68820E02 -7.20110E02 1.56900E01 3.62230E02 1.56150E02 -9.87440E02 1.17953E03 -4.58590E02 -3.95930E02 7.42040E02 -4.32490E02 -6.09300E01 3.11180E02 -6.94900E01 -5.38860E02 1.11376E03 -9.13550E02 2.33100E01 4.65120E02 1.28160E02 -1.01433E03 1.29580E03 -7.52840E02 1.18800E01 2.54240E02 7.98600E01 -5.87980E02 7.42080E02 -4.63420E02 4.86240E02 -1.05018E03 1.25287E03 -3.98030E02 -8.18600E02 1.15159E03 -4.31370E02 -2.83870E02 3.13460E02 1.64970E02 -6.03260E02 5.88320E02 -1.18800E02 -3.88670E02 5.44480E02 -5.60200E01 -4.30030E02 3.37800E02 2.21060E02 -5.01490E02 2.13090E02 2.84570E02 -4.50000E02 1.45140E02 4.02550E02 -6.80450E02 5.39700E02 -1.90920E02 -2.09950E02 4.05630E02 -2.35130E02 7.85200E01 -3.27200E02 9.13840E02 -1.07859E03 3.99380E02 2.12680E02 7.80100E01 -6.76890E02 7.37500E02 -2.10060E02 -1.92720E02 1.13400E01 6.66700E02 -Frame 160 -1.05729E03 5.31400E02 6.24720E02 -1.44665E03 1.05828E03 3.79680E02 -1.55825E03 1.43235E03 -4.10910E02 -3.15780E02 2.78590E02 1.08080E02 -4.39800E02 4.42790E02 1.51260E02 -8.68420E02 7.41180E02 6.48600E01 -4.23430E02 1.03580E02 1.20790E02 3.13420E02 -7.69280E02 3.85260E02 5.44140E02 -1.15857E03 1.08215E03 -5.30850E02 -4.62300E01 1.74420E02 2.86730E02 -6.54750E02 1.92270E02 6.17300E02 -5.74100E02 -3.19800E02 6.41660E02 3.23250E02 -1.37230E03 1.15700E03 -9.57000E00 -5.39200E02 3.73000E01 3.16590E02 6.82200E01 -5.09890E02 7.88600E02 -9.25490E02 5.84280E02 1.21190E02 -4.40330E02 -2.59800E02 1.13855E03 -8.94920E02 -1.94430E02 8.62900E02 -7.29880E02 2.43770E02 1.73300E02 -2.11510E02 7.59800E01 2.82900E01 1.02100E02 -4.76900E02 6.93640E02 -6.00270E02 1.77370E02 3.95890E02 -4.32200E02 -3.53490E02 1.12298E03 -9.23940E02 -5.42900E01 7.65300E02 -7.45480E02 2.62720E02 3.73850E02 -6.71930E02 2.91580E02 1.09610E02 1.87910E02 -8.23540E02 6.22500E02 6.95670E02 -1.59454E03 9.70920E02 3.21800E02 -9.31690E02 7.92930E02 -6.20860E02 6.32210E02 -5.57560E02 3.74400E02 -3.80170E02 5.24280E02 -5.00790E02 2.08910E02 3.53600E01 1.19410E02 -4.10050E02 5.69500E02 -6.69190E02 6.91440E02 -2.64500E02 -4.45750E02 7.23810E02 -4.99140E02 4.42560E02 -5.06030E02 1.60520E02 1.31530E02 2.98520E02 -8.46600E02 5.46660E02 3.36490E02 -5.83490E02 1.64630E02 1.73730E02 -3.02050E02 2.70740E02 1.39900E01 -3.66710E02 3.36160E02 6.94500E01 -2.78570E02 -1.64090E02 6.10080E02 -4.11380E02 -8.20400E01 1.37560E02 3.00820E02 -4.79150E02 2.17210E02 1.98900E02 -8.71600E01 -4.30980E02 4.68970E02 2.31310E02 -1.04091E03 1.18750E03 -4.93290E02 -2.37590E02 2.86240E02 2.00000E02 -4.95090E02 2.31790E02 2.62930E02 -2.62210E02 -4.94340E02 1.17081E03 -9.20640E02 1.33100E02 2.57300E02 -8.39000E01 8.43000E00 -3.09390E02 4.47250E02 -3.92130E02 4.75900E02 -5.68670E02 -Frame 160 3.82990E02 -1.28280E02 1.22760E02 -9.65500E01 -8.05500E01 1.39020E02 1.72250E02 -4.01650E02 1.97080E02 2.08140E02 -4.89650E02 7.62440E02 -8.52460E02 3.30500E02 4.77730E02 -8.22930E02 6.42960E02 -4.24420E02 3.92590E02 -5.82500E02 7.50800E02 -6.06370E02 2.80060E02 -2.26360E02 6.91770E02 -1.07735E03 7.85830E02 -2.20110E02 2.60050E02 -7.52180E02 8.20990E02 -5.89600E01 -1.00906E03 1.35740E03 -5.73230E02 -6.90020E02 1.27122E03 -7.29080E02 -1.12550E02 2.07150E02 5.14540E02 -8.13040E02 6.70900E01 6.74370E02 -3.56200E02 -5.70300E02 7.12510E02 3.13320E02 -1.30750E03 8.16780E02 4.93980E02 -1.05726E03 3.18520E02 7.15540E02 -7.70830E02 -6.34400E01 5.01880E02 8.42100E01 -9.33450E02 8.62290E02 2.74750E02 -1.37421E03 1.43712E03 -7.90960E02 2.63800E02 -2.30070E02 5.77000E02 -9.31510E02 9.62200E02 -3.50430E02 -6.51320E02 1.16209E03 -9.20510E02 4.51350E02 -1.21790E02 -1.97540E02 3.79550E02 -2.71870E02 1.08200E01 1.45240E02 -1.76320E02 3.57340E02 -7.43830E02 7.96640E02 -3.63000E02 -4.70160E02 1.03680E03 -6.84610E02 -2.03610E02 4.08450E02 3.75050E02 -1.25273E03 1.22532E03 -5.36150E02 8.41000E00 1.48800E02 -4.45610E02 6.50010E02 -3.88100E02 -6.95000E00 1.70990E02 -1.87300E01 -4.31300E02 7.77770E02 -9.29500E02 9.26300E02 -8.61380E02 7.22460E02 -5.79400E02 2.55020E02 1.85000E02 -2.88360E02 -2.25090E02 5.98340E02 -6.43300E01 -8.03430E02 4.94360E02 8.59810E02 -1.83024E03 1.51623E03 -4.81240E02 -4.10030E02 6.00760E02 -2.91760E02 -1.40610E02 5.03400E01 2.77140E02 -5.93100E01 -6.86110E02 8.78340E02 -2.03660E02 -6.32930E02 9.41110E02 -3.59060E02 -4.76100E02 4.29680E02 2.39060E02 -6.92680E02 3.94410E02 3.97400E01 1.43060E02 -3.88560E02 5.07400E01 3.31570E02 -4.34230E02 1.65690E02 1.64000E02 -3.23900E02 1.87410E02 2.07350E02 -3.99290E02 4.96800E01 3.43480E02 -2.93960E02 -7.28400E01 1.70180E02 3.05500E01 -3.82430E02 5.77170E02 -5.04100E02 -Frame 160 3.54660E02 -3.55360E02 4.82990E02 -3.98190E02 -3.35250E02 1.13294E03 -9.47530E02 -2.87450E02 1.28530E03 -1.03352E03 -8.08000E00 4.09070E02 -2.12700E01 -1.94900E02 -1.93720E02 7.19670E02 -8.25370E02 4.45580E02 -1.45900E01 -1.24980E02 -6.36700E01 2.97590E02 -1.99260E02 -3.09290E02 7.58560E02 -9.33280E02 7.68430E02 -5.78960E02 5.80520E02 -6.06690E02 4.40950E02 1.45700E01 -4.67010E02 5.04950E02 -4.45100E01 -4.70920E02 4.03920E02 7.24300E01 -5.17380E02 6.67050E02 -3.48520E02 -1.18170E02 1.34410E02 1.15670E02 -1.90760E02 1.45100E01 1.01100E01 2.36560E02 -2.80210E02 -2.60700E02 7.58650E02 -6.53190E02 2.44920E02 -1.84300E01 1.22090E02 -2.17160E02 2.33000E01 7.71700E01 1.44630E02 -6.24960E02 7.46230E02 -2.13880E02 -3.61480E02 7.25690E02 -7.31200E02 2.85400E01 9.32740E02 -1.00297E03 -1.26000E01 5.97400E02 1.18700E02 -8.90910E02 5.53090E02 2.91220E02 -4.76020E02 -8.15400E01 3.92210E02 -1.28760E02 -3.69720E02 5.50210E02 -5.39300E01 -5.61700E02 3.59350E02 3.40540E02 -5.67170E02 1.40580E02 3.13080E02 -1.85380E02 -2.35080E02 1.44900E02 2.99490E02 -5.08420E02 2.68160E02 1.82500E02 -3.48980E02 4.68430E02 -5.93320E02 1.86650E02 4.29560E02 -5.84420E02 8.07900E01 1.43490E02 3.82990E02 -7.64460E02 2.27320E02 7.53550E02 -1.05965E03 3.65070E02 2.63500E02 -1.85460E02 -2.06130E02 2.61750E02 2.68500E01 -2.41340E02 2.82400E02 -2.74930E02 1.56760E02 1.34650E02 -4.73270E02 5.82450E02 -5.26730E02 1.68280E02 2.43620E02 -2.48940E02 -1.01500E02 3.09590E02 -1.01900E02 -2.67020E02 3.49000E02 -2.72600E01 -3.44130E02 1.53520E02 4.83410E02 -6.77950E02 1.96410E02 2.47620E02 -3.24820E02 3.17340E02 -3.59940E02 5.61700E01 4.40090E02 -6.15530E02 1.93780E02 4.78930E02 -5.68550E02 -4.08900E01 5.80120E02 -5.46210E02 2.11400E01 4.04010E02 -1.77660E02 -2.87150E02 5.61240E02 -4.87660E02 1.32460E02 -5.23700E01 1.47130E02 -6.63400E01 -1.74350E02 1.13460E02 -Frame 160 2.68060E02 -5.33810E02 1.98020E02 3.40290E02 -3.10360E02 -2.81840E02 4.55820E02 -2.11400E01 -4.36830E02 3.66030E02 1.12370E02 -2.69240E02 -8.84000E01 3.65110E02 -2.78700E02 7.84000E00 8.72300E01 3.09900E01 -1.92020E02 2.79250E02 -1.38170E02 -1.75370E02 3.36440E02 -8.32400E01 -3.52820E02 3.97590E02 -5.17000E00 -4.09380E02 3.42290E02 6.08800E01 -2.30290E02 1.17750E02 2.24400E01 -1.98400E01 -6.41000E00 -7.25600E01 2.73100E01 1.24000E00 9.93600E01 -1.89580E02 1.40720E02 8.10000E00 -6.86300E01 -6.46700E01 1.11470E02 2.59500E01 -1.25240E02 -3.89900E01 8.49600E01 3.56600E01 1.18000E01 -4.78100E01 -1.28220E02 2.92000E02 -1.08060E02 -2.74390E02 2.39390E02 2.39830E02 -3.78940E02 -1.87490E02 5.02050E02 -8.15600E01 -2.73140E02 1.31610E02 1.20750E02 5.84400E01 -3.12850E02 -3.03300E01 3.02950E02 9.12500E01 -3.99080E02 3.28000E01 3.91000E02 -2.45090E02 -1.83620E02 2.08920E02 -1.03600E02 1.40310E02 -1.69370E02 -7.24700E01 1.91490E02 2.14300E01 -1.87910E02 -3.45500E01 2.44580E02 -2.23890E02 -6.86400E01 2.01470E02 -1.30260E02 7.58700E01 -7.57000E01 -7.38900E01 2.84040E02 -2.47230E02 -2.55700E02 5.15800E02 -1.05330E02 -3.72570E02 2.14270E02 1.61050E02 -1.58970E02 -1.26740E02 2.00600E02 4.88700E01 -1.76600E02 -3.58800E01 -7.80000E-01 2.37400E02 -1.79280E02 -2.36800E01 2.75000E00 1.56990E02 -1.43150E02 -2.65440E02 3.13730E02 8.35100E01 -3.73910E02 3.38700E01 2.96220E02 -2.14600E02 -1.30200E01 8.98000E01 -1.18290E02 1.08290E02 -2.62300E01 -3.88890E02 3.73590E02 2.75290E02 -5.88310E02 4.49300E01 3.67700E02 -1.78900E02 -3.36240E02 1.61860E02 1.92200E02 -1.07710E02 -1.48800E02 1.19700E01 1.23690E02 2.57400E01 -2.02270E02 -4.15000E00 2.21090E02 -6.89200E01 -2.65840E02 1.49390E02 2.14310E02 -1.60970E02 2.02900E01 5.21300E01 2.39000E01 4.27700E01 -1.42820E02 5.89800E01 2.29960E02 -1.18990E02 -9.56200E01 8.95600E01 8.03800E01 -7.41600E01 -Frame 160 -6.74100E01 1.04610E02 1.07850E02 -1.42910E02 -1.05290E02 2.01590E02 3.77000E00 -1.42170E02 6.45100E01 4.85200E01 -3.00100E01 -7.79400E01 1.17200E01 8.91400E01 1.58700E01 -1.14680E02 -8.16000E00 8.66600E01 -6.70000E-01 -1.01700E02 -3.76000E00 1.61210E02 -5.98700E01 -1.20730E02 9.86400E01 2.37000E01 9.42000E00 -3.23100E01 -3.63000E01 1.63620E02 -2.74300E01 -1.64360E02 1.40630E02 8.79200E01 -1.28500E02 -1.94900E01 1.88910E02 -2.04200E01 -1.58200E02 1.59910E02 5.17100E01 -1.14880E02 -1.65100E01 2.43920E02 -1.52820E02 -2.06800E01 5.95700E01 1.52500E01 -9.45000E00 2.81000E01 -6.21000E00 -4.55700E01 1.34900E02 -2.71700E01 -9.92200E01 8.46000E01 1.43030E02 -1.61860E02 -3.20200E01 7.78700E01 5.10900E01 -3.95600E01 -4.79700E01 7.14100E01 5.64200E01 -9.80800E01 1.17400E01 9.99500E01 -1.08200E02 9.83200E01 4.01400E01 -1.31870E02 8.19300E01 7.12700E01 -1.78000E00 2.92000E00 -3.72300E01 -4.65800E01 3.68300E01 1.30790E02 -1.51460E02 9.71000E00 1.09860E02 -2.19900E01 -1.29890E02 -7.00000E00 1.43700E02 -1.30700E01 -7.86700E01 -2.72200E01 -1.50000E-01 5.37600E01 1.29000E00 -7.28000E01 2.78900E01 8.56700E01 -1.09840E02 -1.04290E02 1.33530E02 -1.42000E00 -4.95400E01 -1.37100E02 9.37600E01 -1.33300E01 1.62800E01 -4.32100E01 -3.25000E01 2.05700E01 -1.80740E02 -3.51100E01 4.20500E01 5.85500E01 -7.65000E01 -1.11660E02 5.21900E01 -5.19500E01 -6.32700E01 -1.68890E02 4.43700E01 5.51700E01 -1.75760E02 -1.90680E02 -3.99000E01 1.18560E02 -4.52100E01 5.19800E01 1.09110E02 8.78900E01 1.25920E02 -1.25000E02 1.22430E02 6.83900E01 -7.03900E01 9.26000E01 5.85400E01 9.33700E01 1.28190E02 5.69700E01 -7.95000E01 8.88900E01 3.04100E01 -1.19900E02 -3.17400E01 1.01180E02 -6.88000E00 -5.02700E01 1.80500E01 3.94700E01 3.75200E01 -1.03520E02 -8.28200E01 8.60000E00 -9.61600E01 -1.11070E02 2.66600E01 1.36200E01 -1.58400E01 -1.82000E01 -1.36200E01 -1.48900E01 -Frame 160 -3.61900E01 -9.71200E01 2.51500E01 2.11700E01 -2.09600E01 1.62000E00 4.58900E01 5.14800E01 7.11900E01 -4.25600E01 -1.57900E01 6.98200E01 -2.79900E01 -2.58000E01 7.94800E01 6.69400E01 4.59500E01 4.27000E00 6.30000E00 3.23900E01 -6.74000E00 1.79300E01 1.33500E01 -5.93800E01 2.37000E01 5.93300E01 -8.99000E00 1.59000E00 1.05000E01 -3.63200E01 -3.75500E01 -4.07800E01 2.39300E01 -2.23800E01 9.00000E-01 5.19000E01 -6.45700E01 -2.95800E01 5.95200E01 -2.86800E01 -4.25800E01 1.81300E01 2.57000E01 -1.05200E01 -3.98500E01 7.69500E01 2.22900E01 -3.30800E01 3.48700E01 1.38900E01 5.25000E00 -1.66000E00 1.02200E01 2.84600E01 6.12400E01 -5.02000E00 6.68000E00 1.47400E01 -3.96000E00 1.57700E01 6.51000E01 2.39000E01 1.14100E01 3.35300E01 8.31000E00 1.13100E01 4.24000E01 4.74200E01 2.55600E01 -3.99000E00 3.05600E01 -7.84000E00 1.59000E00 1.73200E01 5.05300E01 2.67300E01 -2.28200E01 -4.87000E00 1.26500E01 -1.72900E01 2.28700E01 3.62600E01 2.70400E01 -5.48000E00 -1.69900E01 1.91700E01 5.14400E01 4.26700E01 -8.40000E00 9.70000E-01 -1.13600E01 1.89500E01 2.41900E01 2.85800E01 1.90900E01 7.30000E00 -2.68500E01 -3.02000E00 4.55600E01 -8.39000E00 2.50100E01 -9.57000E00 -3.12000E01 -1.14600E01 -7.09000E00 -1.45700E01 3.77400E01 2.06400E01 -7.30000E01 -1.54600E01 -2.11200E01 -1.39300E01 -5.50000E00 -5.80000E00 -1.71000E01 -3.47300E01 -6.87000E00 -2.61400E01 -1.29800E01 -1.54000E01 -6.48800E01 -4.83000E00 -3.89200E01 -5.80300E01 -9.68000E00 -2.58300E01 -6.84600E01 -4.53500E01 -6.64900E01 -8.62300E01 -5.65100E01 -3.78300E01 -5.05500E01 -1.34630E02 -1.02200E02 -4.69000E00 -1.81800E01 -3.10900E01 8.06100E01 1.12670E02 7.96000E01 1.42420E02 1.39040E02 1.42420E02 1.33770E02 2.57300E01 3.03300E01 5.40500E01 7.64600E01 1.80500E02 1.70600E02 3.82500E01 -1.21000E00 1.41300E01 -4.30500E01 -3.69400E01 -3.85900E01 4.17600E01 -5.64300E01 -1.02590E02 -Frame 160 -1.50700E01 8.18000E00 -1.58500E01 -2.60000E00 -9.59300E01 -1.65050E02 -6.61500E01 -6.61300E01 -3.30500E01 5.00800E01 -1.52700E01 -1.96300E01 -1.81100E01 -8.25300E01 -1.78700E01 1.11800E02 2.73700E01 -1.47000E01 2.69400E01 1.38400E01 7.13200E01 8.15100E01 6.69400E01 8.58600E01 3.92900E01 -7.50000E-01 1.59800E01 4.42200E01 8.83000E01 1.05670E02 1.64900E01 -5.14500E01 2.95700E01 -1.49200E01 8.24000E00 1.21200E01 -1.28800E01 -3.16300E01 -2.99200E01 -6.21200E01 -2.52500E01 1.27900E01 -2.30000E01 -2.28700E01 -4.47100E01 -9.91800E01 -7.24000E00 4.55500E01 -4.30700E01 3.86100E01 3.47800E01 -4.22000E01 8.48000E00 1.87200E01 7.26000E00 7.44400E01 2.56300E01 -2.27100E01 5.04800E01 4.78900E01 3.01800E01 6.89000E01 2.47600E01 3.52400E01 1.90200E01 -8.71000E00 4.87200E01 7.28900E01 2.57500E01 7.41400E01 2.29700E01 -4.07900E01 3.45300E01 1.37160E02 5.88500E01 -7.19200E01 9.35000E00 1.41400E01 2.60800E01 9.63800E01 2.47800E01 -1.30400E01 -1.50000E01 -9.89900E01 -2.34700E01 6.84200E01 3.51000E01 6.57300E01 -1.87400E01 -6.47900E01 -1.01900E01 3.31200E01 6.27500E01 3.92500E01 -2.40000E01 3.48300E01 -2.35400E01 6.32000E00 1.18110E02 3.42600E01 1.48000E01 4.17400E01 -6.35100E01 -6.69400E01 2.06000E01 2.58400E01 1.52300E01 -3.47100E01 -8.01500E01 -1.59100E01 -1.46600E01 -4.43500E01 1.80900E01 -1.35500E01 -7.41500E01 -4.85500E01 -7.21100E01 -1.43300E01 1.22500E01 -7.36000E00 -4.75700E01 -6.59800E01 -6.79000E01 -6.28200E01 -2.15300E01 -2.29500E01 -7.84000E01 -6.95000E01 -8.82700E01 -9.25500E01 -2.48900E01 -4.71300E01 -6.70300E01 -4.45000E01 -1.48250E02 -1.63090E02 -6.22600E01 -4.82800E01 6.71500E01 2.00060E02 8.98700E01 8.71700E01 9.22900E01 1.24470E02 2.99520E02 2.52700E02 9.02000E01 -9.40000E00 -4.90600E01 8.31100E01 2.19300E02 1.69510E02 1.45040E02 5.07000E01 -9.05800E01 -4.71200E01 -1.12250E02 -1.22270E02 4.75300E01 -4.64500E01 -Frame 160 -1.10280E02 -8.09700E01 -9.96700E01 1.81500E01 6.46000E01 -8.45700E01 -1.29270E02 -1.82230E02 -1.58660E02 -2.62200E01 1.93300E01 2.92600E01 8.44600E01 6.32800E01 -7.36200E01 -2.76900E01 -2.32000E00 1.98300E01 1.04640E02 5.99700E01 -3.14000E00 4.88000E01 1.05300E02 1.41450E02 1.22590E02 4.20400E01 4.29700E01 -4.10000E00 -1.06100E01 1.67000E01 8.38500E01 6.90100E01 5.66600E01 -6.11000E00 -8.18000E01 -3.77400E01 -3.32700E01 -3.86200E01 6.91000E00 -7.01500E01 -1.13520E02 -3.51200E01 -4.82600E01 -6.76000E00 -1.59700E01 -3.44500E01 -4.74700E01 -6.28500E01 -3.76500E01 -1.76400E01 6.70000E01 2.91900E01 4.11800E01 2.35000E01 -1.27500E01 1.68900E01 4.44300E01 4.77800E01 7.41900E01 4.43500E01 -8.45000E00 6.31300E01 3.08700E01 4.65900E01 5.47600E01 -3.86000E00 1.37200E01 2.18400E01 -3.08000E01 -5.03000E00 2.35500E01 2.00000E00 -1.22100E01 5.16000E00 -6.29300E01 -9.06000E00 1.87490E02 9.69500E01 -5.04700E01 -6.63900E01 -4.57300E01 1.96200E01 1.02980E02 8.48300E01 1.06050E02 7.48400E01 -4.43900E01 -7.25000E00 -2.29400E01 -5.00800E01 4.20000E01 9.29000E01 7.30000E00 -2.79400E01 1.37700E01 9.57700E01 3.82300E01 -4.31100E01 -2.09100E01 -3.99900E01 -8.06100E01 6.76000E01 4.63400E01 6.23900E01 1.03890E02 -2.14100E01 -9.55500E01 -9.38800E01 -1.27060E02 2.38600E01 2.04300E01 -2.71200E01 3.89000E00 -7.14000E00 -5.45000E01 -3.92700E01 -3.65300E01 -4.86700E01 -5.71400E01 -8.28200E01 -2.52200E01 8.18000E00 -2.34000E01 5.50600E01 -2.11000E00 -7.90500E01 -8.63000E01 -1.04700E02 -8.55800E01 -3.88000E01 -4.25500E01 -4.33900E01 -7.32300E01 -7.89400E01 -9.87700E01 -1.04140E02 -1.03600E02 -6.89700E01 -1.52230E02 -1.53950E02 -9.66100E01 1.15600E01 1.76030E02 2.32390E02 1.82250E02 6.63700E01 7.48300E01 1.48470E02 2.43240E02 2.00710E02 2.16800E01 -2.49000E01 4.11100E01 1.60130E02 1.88690E02 1.58970E02 3.12000E01 -6.65300E01 -4.62000E01 -1.49180E02 -Frame 160 -1.46190E02 -9.79600E01 -3.61400E01 6.30000E-01 -2.94600E01 -5.24500E01 -1.13100E02 -5.25200E01 -2.10200E01 -8.95300E01 -1.46080E02 -1.73250E02 -1.11110E02 1.80400E01 8.71500E01 6.93000E01 4.18200E01 3.44000E00 -4.31400E01 -3.11300E01 2.27000E00 1.66900E01 8.55300E01 8.64100E01 7.32300E01 8.15700E01 5.50900E01 7.17400E01 9.48400E01 4.65700E01 9.77000E00 -1.41700E01 4.17000E00 -9.20000E-01 5.88400E01 5.04000E01 -1.43400E01 -2.50600E01 -7.20800E01 -8.94800E01 -2.23300E01 -7.00800E01 -6.72400E01 -5.12500E01 -4.87200E01 -8.00700E01 -1.23200E01 -1.34700E01 -6.96500E01 -6.51000E00 -3.94200E01 -7.23200E01 -2.18000E00 -3.88000E00 2.63600E01 5.05000E01 3.33300E01 8.59000E00 2.70700E01 1.10900E01 3.76000E01 3.08900E01 3.59400E01 3.91100E01 4.63400E01 1.87500E01 3.22900E01 2.42200E01 -2.01200E01 5.19000E00 1.52800E01 -3.33300E01 -2.04100E01 1.59300E01 -2.06200E01 -1.92800E01 -2.28800E01 -4.35700E01 -4.68600E01 1.07900E01 -7.37900E01 3.20800E01 -4.98100E01 8.10000E-01 -2.10100E01 7.65100E01 9.89700E01 2.69030E02 1.77100E02 9.17000E00 -1.05950E02 -1.77520E02 -2.71300E01 5.39400E01 1.35470E02 1.71400E02 2.92900E01 -6.23000E00 6.01700E01 -4.14200E01 -1.56100E02 -1.54170E02 -6.50300E01 2.93000E00 1.08990E02 1.18230E02 7.36500E01 3.36300E01 -8.46500E01 -8.55000E01 -9.12900E01 -9.21700E01 -8.99000E00 8.67700E01 7.54100E01 2.56300E01 -6.67100E01 -8.78400E01 -4.45400E01 -5.28600E01 -3.23900E01 2.74000E00 -8.70500E01 -4.55400E01 4.92900E01 -1.70000E01 1.86700E01 -6.58000E00 -5.86100E01 -3.32000E01 -1.99800E01 -7.83400E01 -3.34400E01 -1.01300E01 -6.31000E01 1.63400E01 -1.87900E01 -9.40000E01 -7.14600E01 -1.07170E02 -1.26900E02 -1.26140E02 -1.45260E02 -8.18600E01 -4.64500E01 -6.49300E01 -6.49500E01 -1.20940E02 -1.68580E02 -1.00570E02 2.66000E01 1.31640E02 2.17770E02 1.94330E02 1.52960E02 1.64150E02 1.86520E02 1.80400E02 1.19920E02 -6.54000E00 -Frame 160 -1.29000E01 5.45600E01 1.56060E02 1.74560E02 1.14480E02 4.45000E00 -2.59700E01 -3.52900E01 -8.18500E01 -1.46760E02 -1.65530E02 -1.48720E02 -2.02500E01 1.62100E01 1.77800E01 -3.46200E01 -5.76100E01 -8.82600E01 -1.05780E02 -1.14750E02 -1.54900E02 -8.11600E01 -2.00800E01 2.78900E01 1.02300E02 1.19000E01 5.68000E00 3.92500E01 1.38100E01 2.35600E01 2.45800E01 -1.54000E01 3.83900E01 7.38000E01 1.26230E02 1.14160E02 8.96100E01 5.22200E01 5.16300E01 3.89800E01 -2.70900E01 -4.17000E00 -2.75300E01 -2.15800E01 3.05800E01 8.33000E00 -1.61000E00 -1.08500E01 -5.03600E01 -5.40400E01 -6.17800E01 -1.05700E02 -8.58800E01 -5.53700E01 -4.58700E01 -4.00000E-02 -1.98000E01 -4.01600E01 -1.01200E01 -2.11500E01 -2.95100E01 1.18900E01 -1.94500E01 -6.75000E00 2.33400E01 3.23300E01 4.75600E01 6.12100E01 1.22200E01 3.77000E01 4.59300E01 2.03700E01 2.70000E01 1.28100E01 1.11700E01 2.84700E01 4.02800E01 2.54200E01 -1.89200E01 2.63900E01 -6.92000E00 -3.42500E01 4.61000E00 -3.03300E01 -5.23200E01 -1.59400E01 -2.74200E01 -1.72300E01 -2.97100E01 -7.55000E00 -2.47000E01 -2.73600E01 6.92000E00 1.00250E02 2.15370E02 1.97850E02 6.06100E01 -4.29200E01 -1.34600E02 -1.08980E02 -4.24600E01 9.11600E01 1.53830E02 1.07300E02 9.42400E01 5.17000E01 -5.11900E01 -1.57200E02 -1.44330E02 -7.69200E01 -4.35000E00 8.64700E01 9.40200E01 9.77200E01 5.14500E01 -2.02900E01 -4.12200E01 -3.17500E01 -6.79500E01 -4.12000E01 -5.58000E00 -5.85000E00 -4.91200E01 -4.16800E01 -1.49700E01 1.65800E01 2.50900E01 7.84000E00 -1.49500E01 -9.04300E01 -1.03160E02 -9.11900E01 -5.57700E01 -4.21000E00 1.59400E01 6.76900E01 6.99700E01 2.50000E-01 -4.16300E01 -9.07700E01 -1.21350E02 -1.23770E02 -2.21600E01 -1.84000E01 2.24800E01 2.45900E01 -4.12700E01 -7.81400E01 -1.46090E02 -1.70020E02 -1.21550E02 -1.14490E02 -7.51300E01 -5.65100E01 -6.32900E01 -1.27250E02 -1.49100E02 -1.23520E02 -4.70700E01 5.87500E01 -Frame 160 1.57750E02 2.20630E02 2.19220E02 1.60540E02 1.61880E02 1.75100E02 1.69560E02 7.76900E01 3.49100E01 2.47800E01 2.13200E01 7.47400E01 1.11750E02 8.38100E01 8.89400E01 -2.84000E00 -5.24400E01 -9.55100E01 -1.67810E02 -1.83180E02 -1.31850E02 -8.68100E01 -4.63000E01 7.50000E00 3.19500E01 7.12000E00 -3.94900E01 -9.85100E01 -1.40270E02 -1.42200E02 -9.60700E01 -1.84400E01 -7.41000E00 4.59500E01 4.59000E01 5.77900E01 7.59800E01 4.46500E01 4.23000E01 9.83000E00 2.13400E01 2.51800E01 2.51100E01 5.60100E01 4.88100E01 7.23400E01 9.35300E01 1.02290E02 7.42300E01 3.02400E01 8.87000E00 -5.11600E01 -8.89900E01 -6.19000E01 -5.99100E01 -2.78000E01 -9.67000E00 -2.97000E00 2.94000E00 -3.99700E01 -6.51700E01 -8.20900E01 -9.24600E01 -7.00700E01 -6.59300E01 -2.06100E01 8.12000E00 -8.28000E00 1.81000E00 1.22000E01 1.88900E01 8.76000E00 1.13000E01 2.39000E01 1.48600E01 1.35200E01 2.11200E01 3.99300E01 4.32800E01 3.86900E01 3.79200E01 5.90900E01 5.18600E01 1.83600E01 2.08100E01 -1.36800E01 -2.52200E01 -1.90900E01 3.25000E00 4.28000E00 -5.66000E00 1.21000E01 -7.60000E00 -2.59000E01 -2.07400E01 -1.64000E01 -2.29100E01 -1.46000E01 -2.20200E01 3.03500E01 1.30310E02 1.30240E02 1.07050E02 7.90500E01 -3.38800E01 -5.72600E01 -5.83000E01 -2.03100E01 6.58800E01 8.86800E01 4.71100E01 9.12200E01 2.16200E01 -5.71400E01 -1.22700E01 -5.09900E01 -3.18500E01 2.92000E00 -1.23000E00 3.85000E01 7.04300E01 -1.37100E01 -4.30000E-01 4.12700E01 -3.17700E01 -3.03000E00 1.96100E01 -3.90600E01 -5.05000E01 -6.02400E01 -6.02200E01 -1.14000E00 2.77000E00 -9.20000E00 4.24700E01 1.77000E01 -4.68500E01 -3.33500E01 -7.34000E01 -7.16200E01 -3.87200E01 -2.07700E01 2.87500E01 3.37700E01 2.69100E01 -9.19000E00 -4.40000E00 -6.14600E01 -8.42300E01 -4.56300E01 -3.68000E01 -3.66700E01 -2.55100E01 -4.79900E01 -5.41300E01 -9.54200E01 -8.29100E01 -7.89500E01 -9.88100E01 -7.12100E01 -Frame 160 -9.17100E01 -9.07800E01 -9.07600E01 -1.16680E02 -1.22320E02 -1.08050E02 -6.52700E01 1.78600E01 1.42510E02 2.13850E02 2.49170E02 2.78330E02 2.55120E02 2.12950E02 1.71280E02 9.61700E01 -4.34000E00 -2.99400E01 -1.42900E01 1.38700E01 9.49000E01 1.43360E02 1.27200E02 8.64400E01 -4.64000E00 -1.08510E02 -1.75470E02 -1.99320E02 -1.90710E02 -1.58650E02 -6.84500E01 -2.34000E01 3.70600E01 5.03500E01 3.00000E01 -2.00100E01 -8.75500E01 -8.71000E01 -1.05560E02 -8.65000E01 -3.87800E01 -2.15600E01 1.42000E01 6.90400E01 7.65000E01 1.30110E02 1.25250E02 1.10120E02 6.14200E01 4.01600E01 8.21000E00 -4.37300E01 8.77000E00 2.18900E01 6.04000E01 9.30500E01 9.96300E01 1.01330E02 6.50000E01 1.25000E01 -4.36200E01 -7.94200E01 -1.10240E02 -1.00900E02 -7.11700E01 -4.34500E01 -1.88300E01 -1.34300E01 -3.85000E00 2.03000E00 -2.09100E01 -3.05400E01 -3.84400E01 -5.95500E01 -5.62600E01 -5.08200E01 -2.11700E01 -6.59000E00 2.84400E01 4.55200E01 7.60800E01 9.55100E01 6.54500E01 4.84000E01 2.87800E01 -9.47000E00 -2.78900E01 -5.85000E00 2.18800E01 1.84500E01 5.79000E01 7.95200E01 3.17400E01 5.24600E01 1.67800E01 -1.00100E01 -1.16100E01 -5.82400E01 -4.42500E01 -3.57800E01 -2.40100E01 -1.58500E01 5.58000E00 2.16700E01 3.12400E01 7.70800E01 7.82700E01 7.24300E01 5.93500E01 7.82000E00 -4.03000E01 -2.58600E01 -2.94000E00 3.37000E01 6.94500E01 7.42500E01 7.51400E01 5.50000E01 2.22000E01 -4.62000E00 -2.72500E01 -5.15400E01 -4.45200E01 -2.32300E01 1.37500E01 4.18700E01 3.68300E01 3.06100E01 6.18000E00 -2.80000E01 -1.22000E01 3.11000E00 -1.01000E01 1.53000E01 -6.52000E00 -3.20000E01 -4.62300E01 -3.88500E01 -2.02000E01 -1.49500E01 -6.52000E00 -2.82000E00 -2.00000E00 -1.91500E01 -1.98100E01 -5.44700E01 -5.01500E01 -5.06500E01 -2.91200E01 2.10000E00 1.52800E01 2.58500E01 -4.28000E00 -1.33400E01 -2.86700E01 -4.54500E01 -3.87100E01 -3.37300E01 -3.25700E01 -3.73500E01 -Frame 160 -5.82500E01 -6.27500E01 -7.53400E01 -9.52600E01 -8.67200E01 -7.28500E01 -9.15000E01 -6.66600E01 -7.80100E01 -9.36600E01 -9.47300E01 -1.21770E02 -1.51560E02 -9.71600E01 9.80000E-01 9.81200E01 2.00140E02 2.85100E02 3.34400E02 3.39900E02 2.79250E02 1.88470E02 8.87200E01 -3.81800E01 -1.01950E02 -8.45800E01 -2.05800E01 8.14300E01 1.62530E02 1.65000E02 1.26410E02 2.75300E01 -9.94100E01 -1.41160E02 -1.59050E02 -2.02330E02 -1.45750E02 -1.12280E02 -9.06700E01 -3.31000E00 5.75000E00 6.08000E00 6.54100E01 -1.44900E01 1.91500E01 -4.61900E01 -1.35100E01 -1.10810E02 -1.70200E01 -1.09320E02 -1.23800E01 1.56000E00 1.39920E02 1.42420E02 1.90860E02 1.48620E02 1.11940E02 5.10300E01 -2.18000E01 -3.18500E01 -3.41700E01 -5.52000E00 2.60300E01 8.95400E01 6.99400E01 1.13680E02 7.36800E01 1.53900E01 -1.67000E01 -5.27500E01 -9.78500E01 -6.92400E01 -7.76700E01 -8.52800E01 -4.00400E01 -4.53600E01 -2.88000E01 5.30000E00 1.64500E01 1.59300E01 1.83800E01 8.90000E-01 -2.81400E01 -2.70400E01 -6.08800E01 -2.97100E01 -1.35500E01 3.31200E01 4.32000E01 8.15500E01 1.01010E02 7.29800E01 6.20200E01 3.16700E01 1.13600E01 -4.58000E00 1.50000E01 -1.82000E00 2.18500E01 2.72400E01 2.97800E01 2.23800E01 3.07400E01 1.73400E01 1.75200E01 -3.30000E00 -1.87500E01 -1.86500E01 -4.25200E01 -3.40800E01 -2.03400E01 2.85000E00 2.76000E00 1.76700E01 4.50300E01 3.52000E01 8.40400E01 1.39320E02 1.25190E02 9.85200E01 3.69500E01 -6.15400E01 -7.80000E01 -5.48800E01 4.02000E00 1.03750E02 1.18480E02 8.55700E01 6.45800E01 -3.10000E00 -7.58500E01 -4.47600E01 -5.66500E01 -4.28400E01 1.14500E01 2.04200E01 4.06600E01 6.05000E01 -9.00000E-02 -1.25400E01 -1.93500E01 -2.93400E01 6.40000E00 3.02500E01 3.78200E01 -8.40000E00 -6.30300E01 -7.32800E01 -7.37700E01 -7.32000E01 4.46000E00 5.05200E01 2.69600E01 1.46500E01 -5.05000E00 -3.53500E01 -4.95500E01 -5.61400E01 -6.08800E01 -2.07100E01 -Frame 160 -2.80000E-01 2.97800E01 4.67400E01 2.91800E01 -1.29500E01 -4.93700E01 -5.68700E01 -7.05500E01 -7.65900E01 -5.17500E01 -5.31000E01 -7.44500E01 -9.44000E01 -9.48900E01 -8.03200E01 -9.12400E01 -6.84300E01 -5.08700E01 -7.67400E01 -1.03360E02 -1.17730E02 -1.35460E02 -1.06640E02 -3.48600E01 7.41400E01 2.06410E02 3.06550E02 3.95480E02 4.12780E02 3.29230E02 1.86800E02 1.68100E01 -1.19430E02 -1.45750E02 -1.08730E02 -2.54500E01 1.02440E02 1.85200E02 1.64360E02 1.14740E02 2.75000E01 -5.34400E01 -1.37810E02 -1.65640E02 -1.69160E02 -1.61620E02 -1.30690E02 -7.86800E01 -4.09900E01 -4.41000E01 5.73000E00 6.09000E00 4.50000E-01 3.16300E01 2.67400E01 1.56700E01 -3.37600E01 -1.00690E02 -1.20600E02 -8.70200E01 -3.43300E01 4.90100E01 1.44870E02 1.83550E02 1.86250E02 1.41860E02 8.49700E01 2.92500E01 -2.82100E01 -4.44100E01 -3.40600E01 -9.35000E00 2.81400E01 6.27700E01 7.64200E01 5.64300E01 3.47800E01 -4.56000E00 -2.51000E01 -3.52400E01 -3.16500E01 -7.09100E01 -7.43100E01 -9.57400E01 -9.77400E01 -8.97100E01 -4.83500E01 -2.16700E01 4.85000E00 3.81800E01 2.85000E01 2.54900E01 1.13600E01 -2.62200E01 -4.39400E01 -5.11700E01 -3.45800E01 -1.04500E01 4.34300E01 8.19300E01 7.45400E01 7.68500E01 6.61600E01 4.30800E01 3.12500E01 1.70300E01 7.36000E00 4.39000E00 -5.67000E00 -3.00300E01 -1.11000E00 -2.90000E-01 -1.44000E00 2.43800E01 1.99800E01 7.43000E00 4.49000E00 4.60000E-01 -2.66900E01 -4.56500E01 -4.21500E01 -5.75000E01 -2.32700E01 3.04000E00 4.51600E01 9.15400E01 1.17270E02 9.86900E01 7.04500E01 3.32800E01 -9.06000E00 -4.86900E01 -4.24900E01 3.95000E00 4.38300E01 6.29100E01 9.15300E01 9.79600E01 1.95100E01 -1.63700E01 -2.63300E01 -5.75600E01 -5.76900E01 -2.47600E01 -7.80000E-01 1.29500E01 2.11000E01 2.84900E01 7.09000E00 8.03000E00 -2.10000E01 -2.09000E01 -5.77000E00 -1.61600E01 -2.68500E01 -3.78400E01 -3.51300E01 -3.93000E01 -5.45600E01 -2.12400E01 -Frame 160 5.13000E00 2.23100E01 1.50000E01 2.45000E00 -2.14900E01 -4.61500E01 -6.45300E01 -6.04200E01 -2.31300E01 -2.36700E01 2.07900E01 3.66000E01 2.08600E01 1.66100E01 -1.17900E01 -4.10600E01 -5.62000E01 -7.37600E01 -6.58000E01 -5.35400E01 -5.58600E01 -4.72100E01 -5.62600E01 -7.05500E01 -8.42300E01 -1.03270E02 -1.09820E02 -1.03490E02 -8.98900E01 -7.28100E01 -1.09160E02 -1.16560E02 -1.04110E02 -7.72100E01 1.05600E01 1.17000E02 2.00590E02 3.20550E02 3.85900E02 3.63900E02 2.89880E02 1.51310E02 -6.67000E00 -1.04510E02 -1.41260E02 -1.13000E02 -2.75000E00 1.10920E02 1.67010E02 1.56690E02 1.26920E02 3.13000E00 -8.74700E01 -1.17770E02 -1.55880E02 -1.70010E02 -1.32410E02 -1.06520E02 -7.87300E01 -4.90100E01 -5.03300E01 -4.66500E01 -4.48200E01 5.10000E00 1.75500E01 3.83600E01 4.77700E01 -8.58000E00 -6.06700E01 -9.03200E01 -1.04810E02 -5.86600E01 8.96000E00 8.76500E01 1.33680E02 1.62000E02 1.68040E02 1.14110E02 6.94100E01 1.52700E01 -3.15500E01 -3.57800E01 -2.51000E01 1.09400E01 3.80900E01 5.00500E01 5.03400E01 1.86000E01 -8.13000E00 -2.46700E01 -2.36900E01 -2.76500E01 -3.27000E01 -5.78700E01 -7.57600E01 -9.11300E01 -9.88900E01 -8.08000E01 -5.70800E01 -3.45800E01 7.64000E00 2.01500E01 2.80200E01 2.71000E01 1.71200E01 -2.11900E01 -3.96700E01 -3.86900E01 -2.36500E01 8.87000E00 4.13800E01 5.58500E01 7.47100E01 6.00800E01 4.79400E01 3.43800E01 2.63700E01 1.90900E01 3.75700E01 1.05900E01 7.70000E-01 -1.73500E01 -2.00100E01 -3.07300E01 -2.77500E01 -1.96500E01 -1.02800E01 1.33900E01 3.78000E00 3.87000E00 -7.04000E00 -4.12800E01 -4.25400E01 -6.08000E01 -2.85700E01 2.56800E01 7.05800E01 8.38000E01 1.09350E02 1.11590E02 9.38000E01 5.13800E01 1.56100E01 -1.62700E01 -1.91100E01 -4.80100E01 4.25000E00 3.61300E01 2.49700E01 1.94500E01 1.87500E01 -1.98000E00 -3.43400E01 -4.66000E00 9.50000E-01 -2.60000E-01 -7.50000E00 -2.49500E01 -2.99100E01 -1.19900E01 -Frame 160 -2.25000E01 -1.63100E01 9.09000E00 -7.30000E-01 -1.58500E01 5.80000E-01 3.52000E00 -2.54500E01 -4.72900E01 -4.67600E01 -5.71700E01 -6.78500E01 -2.88000E01 -8.52000E00 -5.61000E00 -2.56100E01 -1.52100E01 -2.14800E01 -3.29300E01 -1.47100E01 -1.29200E01 -4.07000E00 -7.95000E00 -4.95000E00 -2.08600E01 -2.02500E01 -2.16100E01 -6.30000E01 -6.86200E01 -7.13600E01 -8.71300E01 -8.63200E01 -6.14200E01 -6.47100E01 -8.50600E01 -8.19800E01 -9.37500E01 -1.02820E02 -1.01100E02 -1.01260E02 -1.15360E02 -1.28820E02 -1.33610E02 -9.54600E01 -1.60800E01 8.87300E01 2.09660E02 3.13100E02 3.92420E02 3.90810E02 3.13780E02 1.72080E02 7.85000E00 -9.94500E01 -1.64960E02 -1.14330E02 -2.40200E01 6.41100E01 1.33910E02 1.29750E02 1.03350E02 1.60500E01 -4.69500E01 -8.28400E01 -1.42750E02 -1.42370E02 -1.29840E02 -1.25800E02 -1.24520E02 -1.09090E02 -8.60900E01 -8.13100E01 -4.63200E01 6.78000E00 4.85000E01 7.34500E01 6.20900E01 2.13100E01 -4.07600E01 -1.06720E02 -1.13630E02 -7.86600E01 -1.15500E01 5.86300E01 1.07910E02 1.43600E02 1.55250E02 1.24110E02 7.98900E01 4.72300E01 3.15200E01 -2.70000E00 9.03000E00 9.12000E00 8.21000E00 -1.73000E00 -2.19700E01 -2.28100E01 -5.26500E01 -1.93600E01 -2.02000E00 1.08600E01 2.13000E00 -1.88700E01 -6.35000E01 -9.54500E01 -1.25300E02 -1.23960E02 -9.44700E01 -5.29900E01 -2.51900E01 9.48000E00 3.12000E01 3.95500E01 2.61100E01 1.42200E01 5.94000E00 3.90000E-01 1.36600E01 1.73200E01 2.00700E01 2.48800E01 2.28100E01 1.26500E01 1.71600E01 4.17900E01 5.21400E01 6.77600E01 5.98000E01 5.75400E01 1.91600E01 -5.42000E00 -3.07500E01 -5.68300E01 -4.86600E01 -5.61900E01 -2.79000E01 -1.37100E01 2.93000E00 2.20800E01 9.80000E00 -9.87000E00 -2.41400E01 -1.88300E01 -1.93400E01 2.01500E01 5.48400E01 5.95500E01 8.53500E01 7.08700E01 3.58800E01 1.77800E01 1.21100E01 1.52600E01 3.45000E01 5.93100E01 5.38400E01 5.01600E01 4.33000E00 -3.29100E01 -Frame 160 -4.02600E01 -3.67900E01 -1.91700E01 8.02000E00 2.80500E01 3.16800E01 4.44000E01 4.48000E00 -4.67000E00 -1.90900E01 -4.29300E01 -3.44600E01 -1.26900E01 8.77000E00 -2.31100E01 -1.09500E01 -2.44000E01 -6.62400E01 -5.03100E01 -2.78400E01 -1.16500E01 1.30500E01 1.05000E01 9.86000E00 -2.18100E01 -4.84400E01 -5.28500E01 -4.63500E01 -4.66100E01 -1.18400E01 1.90100E01 1.57900E01 1.44500E01 1.05000E00 -2.37700E01 -4.63400E01 -5.55700E01 -5.00400E01 -3.63000E01 -3.21100E01 -4.77700E01 -7.58800E01 -7.88000E01 -1.08750E02 -1.09540E02 -1.06270E02 -8.18200E01 -8.25600E01 -8.22700E01 -8.99200E01 -9.17500E01 -1.24580E02 -1.43340E02 -1.23580E02 -9.91300E01 -1.88700E01 9.98500E01 2.24110E02 3.20970E02 4.14500E02 4.12520E02 3.27090E02 1.91720E02 4.00000E01 -8.24300E01 -1.40550E02 -1.09320E02 -3.90100E01 4.25200E01 8.15400E01 7.47000E01 4.35900E01 -3.51000E00 -3.30500E01 -5.94600E01 -7.86200E01 -9.52900E01 -1.14380E02 -1.26950E02 -1.48790E02 -1.47170E02 -1.39370E02 -1.11210E02 -5.90900E01 4.68000E00 8.04000E01 1.07370E02 8.50600E01 3.99700E01 -3.85600E01 -7.74900E01 -8.05600E01 -5.86600E01 9.60000E-01 6.14100E01 9.26600E01 1.03780E02 1.12140E02 1.14650E02 9.51300E01 8.09200E01 7.32000E01 5.91800E01 2.66800E01 1.81600E01 -1.66300E01 -5.54700E01 -7.24500E01 -7.98800E01 -6.14600E01 -2.54100E01 1.78000E00 3.38100E01 1.28000E01 -1.38700E01 -7.03500E01 -9.65100E01 -1.09390E02 -1.07570E02 -7.06000E01 -5.04300E01 -3.96000E01 -1.64100E01 1.05000E01 3.22000E00 1.67000E01 3.95700E01 5.01000E01 6.19000E01 6.70000E01 6.51900E01 2.72600E01 3.13000E00 -1.27500E01 -2.41100E01 -1.18000E01 2.69000E01 5.97700E01 6.86000E01 6.46400E01 4.95000E01 1.48500E01 -5.88000E00 -2.72400E01 -3.62300E01 -4.84600E01 -4.20200E01 -4.83400E01 -4.08100E01 -4.60100E01 -3.03300E01 -2.81400E01 -1.58600E01 -1.41900E01 1.35400E01 1.31100E01 1.46500E01 3.72200E01 3.84500E01 3.96800E01 -Frame 160 1.00910E02 1.27940E02 1.00690E02 7.65100E01 2.65200E01 -1.30300E01 -2.07800E01 -2.74000E00 3.78700E01 5.27100E01 3.89700E01 -8.22000E00 -1.68500E01 -4.77200E01 -3.74900E01 -1.29000E01 1.04700E01 1.55600E01 2.08000E01 2.19000E00 -8.99000E00 -1.95000E01 -5.93100E01 -5.72900E01 -3.21500E01 -2.72000E01 5.93000E00 2.50800E01 1.98000E01 -1.46600E01 -4.81700E01 -5.06700E01 -2.52000E01 -7.92000E00 7.90000E00 7.20000E00 -2.53000E00 -2.75600E01 -3.93400E01 -3.34500E01 -2.23500E01 -2.28900E01 -4.43000E00 1.86000E01 6.32000E00 -3.35000E00 -2.32000E00 -2.82600E01 -6.59800E01 -7.08100E01 -5.27300E01 -6.50500E01 -6.27000E01 -6.52300E01 -9.37900E01 -1.02160E02 -1.16710E02 -1.10620E02 -1.03260E02 -9.46000E01 -8.56100E01 -9.32900E01 -1.07150E02 -1.13370E02 -1.22710E02 -8.42600E01 -9.58000E00 9.83800E01 2.16550E02 3.48140E02 4.48450E02 4.29430E02 3.50420E02 2.10650E02 5.03800E01 -5.48700E01 -9.63000E01 -6.79000E01 -2.35400E01 2.22300E01 2.74100E01 1.37400E01 -1.93500E01 -3.64300E01 -2.49900E01 -2.21600E01 -2.92100E01 -5.34400E01 -8.63600E01 -1.39210E02 -1.77560E02 -1.96930E02 -1.77720E02 -1.24760E02 -4.90600E01 3.90100E01 9.57500E01 1.30140E02 9.74600E01 2.26700E01 -2.46000E00 -3.63700E01 -1.93000E01 1.23100E01 4.58800E01 5.04400E01 4.50900E01 6.15300E01 6.44200E01 7.43400E01 1.15500E02 1.30830E02 1.25520E02 1.06940E02 7.57000E01 1.44000E00 -3.21000E01 -7.46300E01 -9.93900E01 -9.18100E01 -6.29000E01 -2.60300E01 -1.79900E01 -1.16800E01 -2.91600E01 -4.51500E01 -4.45900E01 -4.19700E01 -3.02300E01 -2.31000E01 -2.77300E01 -5.54800E01 -7.00400E01 -6.79900E01 -3.48200E01 1.40000E00 5.07300E01 8.95300E01 9.74400E01 9.85000E01 8.65000E01 5.60500E01 4.06100E01 1.46600E01 -2.10000E00 6.63000E00 2.06300E01 2.40500E01 2.45600E01 2.40700E01 4.55000E00 9.43000E00 2.14600E01 3.18500E01 3.15400E01 2.92000E01 -2.72300E01 -6.53700E01 -7.86200E01 -7.92000E01 -Frame 160 -7.17200E01 -3.99400E01 -1.51400E01 -5.56000E00 1.63200E01 2.58600E01 3.96700E01 8.28700E01 9.93300E01 1.04210E02 1.33150E02 8.58700E01 3.40600E01 9.63000E00 -1.15500E01 -2.03600E01 1.55900E01 3.86500E01 4.24000E01 5.32400E01 4.03800E01 -1.90000E00 -2.47000E00 -4.04000E00 -1.76400E01 -1.26300E01 -1.34400E01 -2.02500E01 -2.02400E01 -3.32000E01 -2.65200E01 -1.46000E01 -3.29000E00 1.73800E01 3.16800E01 1.84000E01 -2.30000E00 -2.36300E01 -5.45900E01 -4.04500E01 -3.38300E01 -2.79700E01 -4.90000E00 1.38900E01 6.25000E00 -5.63000E00 -8.87000E00 -3.20000E00 -1.03500E01 -8.71000E00 1.39900E01 3.38000E00 -1.95600E01 -2.51900E01 -3.39700E01 -3.89900E01 -3.51300E01 -3.21200E01 -2.49900E01 -1.86200E01 -3.80400E01 -6.00300E01 -6.76500E01 -8.34500E01 -9.26700E01 -8.81000E01 -9.23200E01 -1.02600E02 -1.27120E02 -1.27300E02 -1.07390E02 -1.13790E02 -8.63100E01 -8.29300E01 -1.04400E02 -8.54700E01 -5.69100E01 1.35500E01 1.44140E02 2.55600E02 3.68240E02 4.62000E02 4.40220E02 3.44360E02 1.93230E02 4.82700E01 -5.71900E01 -8.78300E01 -5.33100E01 -7.65000E00 5.45000E00 -3.90300E01 -8.08300E01 -1.02830E02 -9.94000E01 -2.87600E01 2.51000E01 2.76100E01 1.80000E-01 -9.10900E01 -1.64090E02 -2.15190E02 -2.02670E02 -1.46580E02 -8.16300E01 -1.06100E01 3.26000E01 6.31000E01 6.04700E01 5.26900E01 3.96100E01 4.60800E01 7.77000E01 9.72200E01 1.01250E02 5.93100E01 -4.98000E00 -1.82500E01 -1.89100E01 3.54300E01 8.94200E01 1.25000E02 1.45570E02 1.09650E02 6.45300E01 2.79700E01 -1.67300E01 -2.37800E01 -1.80100E01 -2.50300E01 -5.72300E01 -8.83600E01 -1.32360E02 -1.10590E02 -1.04040E02 -6.21900E01 -2.79900E01 1.02900E01 5.47400E01 2.95100E01 -1.75300E01 -4.50100E01 -6.53000E01 -3.21600E01 -6.97000E00 4.00000E00 3.93000E01 2.66500E01 2.65800E01 1.74800E01 5.40800E01 7.57600E01 1.09040E02 1.20250E02 8.97000E01 4.91300E01 9.27000E00 -1.98200E01 -3.17800E01 -2.80700E01 -Frame 160 -1.22100E01 2.16000E00 2.09800E01 -1.63000E00 -1.09300E01 -2.50000E00 -1.38000E01 -1.24300E01 0.00000E00 -6.18000E00 -1.65400E01 -4.52000E01 -5.17000E01 -5.03500E01 -2.79100E01 2.12500E01 8.69100E01 1.27520E02 1.25270E02 1.27840E02 7.73800E01 4.33000E01 3.11400E01 3.05900E01 6.30100E01 5.73900E01 3.15600E01 -1.50800E01 -3.41300E01 -2.87200E01 -1.01000E01 3.01200E01 5.45700E01 3.47400E01 1.62800E01 -2.57500E01 -2.60400E01 -1.13000E01 -2.50800E01 -7.25000E00 -1.88500E01 -1.37800E01 -1.95300E01 -1.34300E01 8.80000E-01 -2.36000E00 9.31000E00 2.03400E01 1.97000E01 4.03000E00 -7.12000E00 -2.46000E01 -4.15900E01 -3.20600E01 -1.32000E01 7.26000E00 8.35000E00 -2.53000E00 -2.17400E01 -2.35200E01 1.67000E00 8.64000E00 9.82000E00 2.20300E01 -1.44000E01 -4.49400E01 -5.33800E01 -5.60300E01 -6.67100E01 -5.16600E01 -4.31000E01 -4.92400E01 -7.65300E01 -9.06000E01 -9.70300E01 -1.10580E02 -1.03460E02 -8.70400E01 -7.90500E01 -7.27600E01 -9.02300E01 -1.07180E02 -1.25580E02 -1.53460E02 -1.34090E02 -6.80300E01 1.01000E01 1.18600E02 2.22310E02 3.46990E02 4.42180E02 4.60890E02 4.10750E02 2.82690E02 1.46430E02 5.28500E01 -2.36400E01 -2.64400E01 -6.02700E01 -1.00060E02 -1.59960E02 -1.77540E02 -1.39480E02 -8.51000E01 4.05000E00 4.99600E01 2.32500E01 -2.73000E01 -5.93800E01 -1.10390E02 -1.32870E02 -1.39920E02 -1.20060E02 -1.09480E02 -7.64800E01 -7.34000E01 -4.81700E01 5.87000E00 4.05600E01 9.62700E01 1.53600E02 1.69550E02 1.55830E02 1.01540E02 5.04800E01 1.58000E01 3.04000E00 2.28900E01 3.23400E01 3.40600E01 1.18100E01 1.08700E01 3.69000E01 5.77100E01 7.91200E01 8.31300E01 6.92000E01 2.77900E01 -2.59100E01 -7.32300E01 -9.79300E01 -1.36290E02 -1.57700E02 -1.21620E02 -1.01310E02 -8.82800E01 -3.87700E01 -2.37000E01 -5.15000E00 4.69700E01 6.36500E01 6.47800E01 5.98800E01 9.77000E00 -1.49000E01 -1.33200E01 -1.76800E01 -7.16000E00 8.69000E00 3.40200E01 -Frame 160 4.01000E01 5.73300E01 8.40400E01 9.95000E01 8.93500E01 7.78100E01 5.78500E01 3.52300E01 -9.11000E00 -3.68000E01 -5.23000E01 -7.92200E01 -6.48900E01 -4.10500E01 -3.84300E01 -3.46900E01 -2.38000E01 -7.55000E00 4.21000E00 9.33000E00 2.26000E01 1.02600E01 5.53000E00 -3.13500E01 2.36600E01 1.05350E02 1.10470E02 1.01650E02 6.64700E01 1.01500E01 9.09000E00 4.40000E01 1.01960E02 1.18630E02 8.37200E01 -1.83300E01 -5.25000E01 -4.06600E01 -3.24000E01 3.16000E00 1.88300E01 -8.02000E00 -3.96800E01 -4.52700E01 -1.79800E01 8.18000E00 1.51500E01 3.33300E01 3.40500E01 6.77000E00 -2.83500E01 -4.15200E01 -3.10500E01 -2.12200E01 -1.70600E01 2.25000E00 -9.84000E00 -3.42900E01 -3.94600E01 -1.27500E01 2.58000E01 2.65200E01 2.42400E01 9.87000E00 -2.99500E01 -3.59700E01 -1.91400E01 4.23000E00 -1.68000E00 -1.77700E01 -3.83400E01 -3.35100E01 -3.75000E01 -3.15800E01 -3.14500E01 -3.42900E01 -3.41900E01 -4.90600E01 -4.43500E01 -6.24600E01 -8.40800E01 -8.63000E01 -9.95200E01 -1.02070E02 -1.13620E02 -1.30440E02 -1.18680E02 -1.01470E02 -9.06600E01 -7.44600E01 -8.57200E01 -1.12280E02 -1.51590E02 -1.15010E02 -2.22300E01 6.04000E01 1.78490E02 2.76030E02 3.96300E02 4.44900E02 4.01580E02 3.33550E02 2.15120E02 1.52850E02 1.17540E02 4.90600E01 -1.55500E01 -1.27110E02 -2.27970E02 -2.33710E02 -2.00390E02 -1.21840E02 -4.87400E01 -1.33300E01 -2.48100E01 -6.96200E01 -4.87500E01 -1.61900E01 -3.66100E01 -3.76300E01 -6.66500E01 -8.75100E01 -1.06940E02 -1.41880E02 -1.10780E02 -6.46300E01 8.99000E00 7.18600E01 1.09590E02 1.09370E02 1.07030E02 1.27510E02 1.61500E02 1.42390E02 1.22560E02 7.60100E01 1.89600E01 -1.88600E01 -3.28200E01 -1.01700E01 6.20000E00 1.40800E01 2.12000E01 2.55300E01 3.79800E01 3.77900E01 2.35700E01 1.79000E01 -1.79500E01 -5.18800E01 -7.68000E01 -1.35410E02 -1.54700E02 -1.36440E02 -1.07490E02 -7.75500E01 -4.66200E01 -2.37000E01 4.94000E00 4.04500E01 -Frame 160 6.60100E01 8.62900E01 1.03110E02 7.03500E01 4.15100E01 3.07400E01 1.16100E01 4.88000E00 -4.06000E00 1.17300E01 1.90000E01 1.84800E01 3.89300E01 5.99800E01 5.76300E01 5.71600E01 6.36300E01 4.32500E01 3.21000E00 -2.10600E01 -4.70500E01 -5.07900E01 -6.25900E01 -9.46900E01 -8.06900E01 -6.81800E01 -5.92200E01 -1.89300E01 -1.38000E00 1.87100E01 3.84000E01 6.56600E01 5.97000E01 5.95000E01 8.22400E01 8.76100E01 8.80700E01 6.04700E01 3.39700E01 3.96300E01 3.94400E01 3.72200E01 6.19100E01 5.83200E01 1.15800E01 -1.06000E01 9.56000E00 -1.46500E01 -2.85800E01 -1.09000E01 -2.36500E01 -5.17600E01 -5.46800E01 -2.36300E01 -3.59000E00 -1.29200E01 -4.52000E00 1.91500E01 1.55400E01 -8.19000E00 -1.16400E01 1.18200E01 1.70000E01 -8.67000E00 -2.01200E01 -2.09000E01 -3.56800E01 -4.28800E01 -6.26000E00 -1.50000E00 -1.05900E01 -1.95000E00 1.29600E01 2.32000E00 -6.50000E-01 6.29000E00 8.44000E00 -2.35000E00 -2.64700E01 -4.83100E01 -3.97800E01 -4.69500E01 -6.13000E01 -5.00400E01 -5.03900E01 -7.57100E01 -6.87500E01 -5.25200E01 -4.77500E01 -7.28000E01 -7.15700E01 -8.92500E01 -1.04410E02 -1.07960E02 -1.07540E02 -1.15030E02 -1.32670E02 -1.26760E02 -1.04580E02 -1.23650E02 -1.45230E02 -1.27380E02 -5.59000E01 2.98000E01 1.24080E02 2.29120E02 3.46160E02 4.28470E02 3.80910E02 3.48520E02 2.81810E02 2.14790E02 1.68520E02 1.02690E02 5.76000E00 -1.32140E02 -2.21150E02 -2.19680E02 -1.84940E02 -1.52940E02 -1.15800E02 -7.64000E01 -6.37100E01 -6.65700E01 -3.14600E01 6.76000E00 5.15000E00 -5.52000E00 -4.15200E01 -7.66000E01 -1.16700E02 -1.56940E02 -1.17290E02 -6.93200E01 -4.48200E01 -2.35400E01 1.40000E00 3.40900E01 9.97400E01 1.64310E02 1.87710E02 1.71650E02 1.35930E02 9.39800E01 7.06500E01 2.35400E01 -3.04000E00 -6.43000E00 -1.29100E01 -5.05700E01 -4.63400E01 -2.99300E01 -9.80000E-01 3.28700E01 5.07400E01 3.71200E01 2.05000E00 -2.11000E01 -4.39400E01 -7.64400E01 -Frame 160 -8.28700E01 -9.94200E01 -1.14390E02 -1.34720E02 -1.31560E02 -9.21900E01 -4.45300E01 -1.53700E01 5.69000E00 5.93800E01 8.36600E01 6.86000E01 7.60000E01 8.95500E01 7.04300E01 4.66500E01 1.60900E01 -8.43000E00 -1.37000E01 -9.12000E00 -3.90000E-01 1.86100E01 1.41800E01 2.06000E01 3.72000E01 3.92800E01 4.63900E01 4.06800E01 3.57600E01 1.16600E01 -2.71900E01 -5.62100E01 -6.30700E01 -7.60800E01 -8.44200E01 -7.89400E01 -7.02200E01 -6.31700E01 -3.08500E01 5.49000E00 3.19400E01 6.21700E01 1.00270E02 9.14500E01 8.22700E01 8.97300E01 7.23400E01 5.03500E01 3.26400E01 3.33600E01 4.30800E01 -7.93000E00 -5.00000E-01 3.11700E01 1.68000E01 1.09800E01 1.89800E01 3.22200E01 1.88500E01 -1.49400E01 -1.27500E01 1.53000E00 -2.27400E01 -4.67300E01 -2.34100E01 -2.53400E01 -5.13000E01 -5.00100E01 -9.63000E00 -4.99000E00 -1.52000E01 1.62900E01 1.87400E01 5.25000E00 1.03400E01 1.25800E01 9.88000E00 7.09000E00 6.21000E00 -6.70000E00 -2.00000E01 -3.06900E01 -2.56800E01 -1.64900E01 -1.00000E01 -2.03000E01 -8.90000E00 -8.14000E00 -2.13500E01 -1.39500E01 -6.31000E00 -1.64300E01 -2.48500E01 -3.85100E01 -4.35600E01 -6.17300E01 -7.24100E01 -6.23600E01 -6.59500E01 -8.96000E01 -9.29100E01 -8.32500E01 -9.52300E01 -1.05510E02 -1.00030E02 -9.03100E01 -1.04230E02 -1.13510E02 -1.16000E02 -1.30490E02 -1.41340E02 -1.06430E02 -5.23800E01 1.83500E01 9.12100E01 1.76200E02 3.09620E02 4.07850E02 3.67720E02 3.28000E02 2.87750E02 2.57000E02 2.31080E02 1.50170E02 1.06500E01 -1.05160E02 -1.78420E02 -1.88750E02 -1.69200E02 -1.93870E02 -1.63110E02 -1.21240E02 -9.79600E01 -7.28700E01 -4.09400E01 3.60100E01 3.23000E01 3.54400E01 -1.53600E01 -5.67200E01 -1.05310E02 -1.12310E02 -8.14300E01 -9.25300E01 -1.21900E02 -1.06080E02 -5.36900E01 3.35000E00 7.51300E01 1.22040E02 1.68270E02 1.73760E02 1.69250E02 1.56440E02 1.28090E02 9.27500E01 8.02400E01 3.52800E01 -4.30900E01 -8.18300E01 -Frame 160 -5.86800E01 -3.57500E01 -2.40700E01 -2.10000E01 -4.81000E00 -2.11000E00 4.68000E00 5.68000E00 5.71000E00 2.74000E00 -2.73200E01 -5.92800E01 -9.91700E01 -1.35200E02 -1.14220E02 -1.00490E02 -9.52500E01 -8.67700E01 -5.49600E01 -2.61300E01 2.36000E01 5.88300E01 1.00080E02 9.65000E01 8.57100E01 9.45000E01 7.94700E01 5.49000E01 3.25200E01 2.54200E01 9.08000E00 -1.87700E01 -4.74600E01 -2.59900E01 9.17000E00 1.44100E01 7.80000E00 2.09800E01 2.75500E01 3.03000E01 3.41100E01 2.30100E01 5.50000E-01 -3.36000E01 -4.97700E01 -6.83900E01 -9.95200E01 -8.85200E01 -6.41000E01 -5.98700E01 -4.14600E01 -2.54500E01 7.00000E-02 4.13700E01 5.59000E01 1.06820E02 1.36210E02 1.12380E02 1.05710E02 8.27400E01 6.59900E01 3.06700E01 2.22400E01 3.15400E01 9.11000E00 -5.80100E01 -3.81400E01 5.39000E00 2.70000E-01 -8.00000E00 1.64900E01 2.07300E01 -1.39100E01 -9.60000E00 1.68600E01 1.01300E01 -1.78100E01 -3.35900E01 -1.68200E01 -4.45100E01 -7.10100E01 -2.92600E01 2.81000E00 -3.01300E01 -3.70600E01 7.83000E00 1.41000E01 6.55000E00 1.57600E01 3.72400E01 1.93500E01 -1.01100E01 -5.47000E00 5.32000E00 -2.95600E01 -3.54900E01 -1.45700E01 -3.79900E01 -5.31000E01 -2.76300E01 -1.53500E01 -3.68000E00 -2.76500E01 -1.43400E01 -3.61000E00 -3.65500E01 -4.24800E01 -2.35600E01 -6.50400E01 -9.27500E01 -9.52400E01 -9.97300E01 -1.16280E02 -1.15250E02 -1.20100E02 -1.14010E02 -1.33650E02 -1.30800E02 -1.08770E02 -1.00990E02 -1.08910E02 -9.20100E01 -4.95400E01 -2.75000E00 5.24500E01 1.49270E02 2.45910E02 3.71280E02 3.38160E02 2.94690E02 2.63600E02 2.45310E02 2.42240E02 2.04870E02 9.91800E01 -4.88400E01 -1.10360E02 -1.45650E02 -1.44870E02 -1.51910E02 -1.75010E02 -1.27650E02 -1.26700E02 -1.29600E02 -1.03470E02 1.05600E01 2.81000E01 4.41500E01 5.65000E00 -6.00500E01 -5.67300E01 -5.12600E01 -3.65800E01 -7.34200E01 -1.16340E02 -1.26490E02 -7.08500E01 -5.84400E01 -2.26100E01 6.03300E01 -Frame 160 1.10760E02 1.29630E02 1.33950E02 1.35270E02 1.68500E02 1.78600E02 1.53850E02 1.01200E02 2.18400E01 -1.79800E01 4.00000E00 -1.53300E01 -4.52300E01 -5.80000E01 -4.51000E01 -4.97500E01 -4.14900E01 -1.59300E01 4.40000E-01 1.23200E01 8.56000E00 -2.23200E01 -5.41300E01 -6.38700E01 -4.38500E01 -4.21700E01 -8.24000E01 -1.07800E02 -9.58900E01 -6.65300E01 -4.32100E01 -1.61400E01 -4.23000E00 4.00400E01 5.96300E01 6.67600E01 8.30400E01 9.67400E01 1.12770E02 1.08190E02 6.83700E01 3.92600E01 2.22200E01 2.36400E01 8.09000E00 -1.89400E01 -3.37800E01 -2.30400E01 -6.94000E00 5.67000E00 3.67000E00 1.46100E01 2.48800E01 1.54500E01 4.72000E00 -1.53400E01 -2.10000E01 -1.28100E01 -1.13500E01 -5.38300E01 -8.85700E01 -7.23000E01 -4.64600E01 -2.57800E01 -1.04400E01 3.38000E00 3.66200E01 9.38500E01 8.37600E01 1.02280E02 9.02800E01 1.14830E02 1.32040E02 6.86700E01 5.02900E01 2.13100E01 4.30000E-01 3.92000E00 -7.47000E00 -4.21900E01 -5.39300E01 -1.59700E01 2.19000E00 -3.08000E00 -5.00000E-01 3.41700E01 4.78900E01 3.20000E01 1.36000E01 1.06300E01 1.55700E01 -6.34000E00 -7.91000E00 -3.65100E01 -5.39500E01 -4.28700E01 -2.34000E01 -1.53000E01 -2.49300E01 -2.28300E01 9.36000E00 2.75400E01 2.32600E01 2.88300E01 4.05500E01 4.36000E01 1.97100E01 4.07000E00 -1.50500E01 -9.74000E00 -6.25000E00 -2.46400E01 -4.05700E01 -4.29500E01 -2.53600E01 -1.42000E01 -2.96800E01 -2.76100E01 -2.34500E01 -2.21400E01 -2.37700E01 -2.74300E01 -4.41800E01 -5.14100E01 -4.48200E01 -7.59900E01 -9.70600E01 -1.05700E02 -1.15520E02 -1.01550E02 -1.26070E02 -1.31250E02 -1.10490E02 -1.07010E02 -1.02350E02 -8.24800E01 -7.59500E01 -4.81800E01 -5.40000E-01 4.75400E01 1.17030E02 1.80530E02 2.80800E02 3.08890E02 2.76550E02 2.61950E02 2.36660E02 2.48380E02 2.15250E02 1.22920E02 2.46500E01 -4.66500E01 -9.00800E01 -1.05740E02 -1.23760E02 -1.69200E02 -1.58870E02 -1.34060E02 -1.33350E02 -1.05490E02 -Frame 160 -6.36700E01 1.45000E01 2.10700E01 8.82000E00 -3.08200E01 -1.96600E01 -8.14000E00 -1.62600E01 -4.46200E01 -9.18200E01 -1.13400E02 -9.85500E01 -6.61600E01 -6.17200E01 -2.51000E01 2.26600E01 5.38600E01 7.89600E01 9.87500E01 1.44050E02 1.82610E02 1.87190E02 1.42740E02 1.10790E02 7.97600E01 5.47100E01 4.98500E01 -1.90000E-01 -5.27600E01 -6.28900E01 -7.32600E01 -8.08700E01 -6.86300E01 -6.19400E01 -2.99800E01 -1.20000E01 -3.34500E01 -2.45300E01 -1.31000E00 5.63000E00 -2.22000E00 -2.73100E01 -5.81500E01 -6.78900E01 -6.08700E01 -6.25800E01 -5.22900E01 -5.16400E01 -4.39300E01 -1.39500E01 5.96000E00 2.54700E01 6.95500E01 9.19200E01 9.08900E01 9.67400E01 8.36800E01 7.71400E01 8.03300E01 6.15500E01 3.61400E01 1.09200E01 -2.10800E01 -1.70400E01 -2.58500E01 -3.09000E01 -2.70700E01 -2.40900E01 -2.59900E01 -2.99200E01 -1.29400E01 -4.20000E-01 5.49000E00 -2.42000E00 -2.57000E00 -1.57200E01 -1.22600E01 -1.36800E01 -2.01300E01 -1.67600E01 -2.12700E01 -8.90000E00 -8.14000E00 2.65000E00 6.17700E01 6.96600E01 6.27300E01 7.95300E01 6.87800E01 8.06400E01 8.18000E01 7.19300E01 6.27000E01 4.31400E01 1.09500E01 5.77000E00 -5.60000E-01 -1.30700E01 -2.19400E01 -2.00500E01 -3.10700E01 -3.93900E01 -2.79200E01 -6.06000E00 3.49000E00 5.34000E00 4.25000E00 2.31300E01 2.75800E01 7.15000E00 1.90900E01 2.33900E01 -7.19000E00 -2.07000E01 -2.26000E01 -2.45300E01 -2.34900E01 -3.23900E01 -1.95300E01 -1.12500E01 -1.97000E01 6.10000E-01 2.35500E01 2.21800E01 1.87500E01 1.82000E01 2.56200E01 1.12500E01 1.54300E01 7.73000E00 -8.21000E00 -2.36300E01 -3.45000E01 -3.36700E01 -4.77800E01 -5.12800E01 -5.28400E01 -5.74000E01 -6.60500E01 -6.09100E01 -4.65600E01 -4.97300E01 -5.29600E01 -5.32500E01 -6.25100E01 -6.40100E01 -7.75100E01 -9.13700E01 -9.95900E01 -9.69900E01 -1.21240E02 -1.18150E02 -1.18880E02 -1.03550E02 -5.86800E01 -4.14000E01 2.54200E01 1.06250E02 1.59450E02 2.83120E02 -Frame 160 2.97330E02 2.73690E02 2.88060E02 2.81610E02 2.79710E02 2.30510E02 1.53600E02 4.22000E01 -2.26500E01 -5.84500E01 -9.42700E01 -1.49080E02 -1.87420E02 -1.68750E02 -1.73330E02 -1.56880E02 -1.37770E02 -4.39400E01 -1.01700E01 1.66500E01 2.02800E01 9.00000E00 4.43600E01 4.97700E01 3.43000E01 -2.16800E01 -6.73700E01 -1.03410E02 -8.54700E01 -9.09000E01 -1.11420E02 -8.34800E01 -3.46100E01 -1.82100E01 1.57000E01 7.06300E01 1.17180E02 1.72050E02 1.83450E02 1.52030E02 1.57500E02 1.40000E02 1.23840E02 1.04080E02 3.86300E01 -1.48600E01 -3.09700E01 -5.95300E01 -8.19000E01 -9.48700E01 -9.31400E01 -7.62600E01 -8.17800E01 -7.93900E01 -3.98500E01 -5.05000E00 1.08300E01 1.01900E01 1.75200E01 5.06000E00 5.21000E00 1.43600E01 -1.42200E01 -3.46700E01 -5.57200E01 -5.73700E01 -4.20200E01 -6.01600E01 -4.98100E01 -1.61000E01 -3.40000E-01 1.39000E01 3.65600E01 6.58800E01 9.20400E01 1.09920E02 1.07250E02 8.74000E01 8.18600E01 7.70800E01 4.90900E01 3.02000E01 -1.52900E01 -3.61600E01 -4.16300E01 -6.32200E01 -7.04100E01 -6.87500E01 -5.49700E01 -4.77100E01 -3.11800E01 -2.11100E01 -1.07100E01 2.00200E01 2.86800E01 4.75800E01 4.50200E01 1.93400E01 3.58500E01 3.78400E01 4.58600E01 2.80900E01 1.75000E00 1.36000E01 3.81000E00 1.72000E00 2.57000E00 1.04500E01 2.25700E01 1.40500E01 2.62600E01 4.28300E01 3.98800E01 3.58100E01 6.05900E01 2.00900E01 1.63300E01 1.34500E01 1.44800E01 8.54000E00 -1.05800E01 -3.22700E01 -3.55900E01 -8.97000E00 -2.15100E01 -2.54100E01 -2.04000E01 -2.12100E01 -2.60200E01 -8.95000E00 -5.34000E00 -2.61000E00 5.21000E00 -8.73000E00 -1.09000E00 3.79000E00 -5.18000E00 -3.42000E00 1.14000E01 -9.33000E00 -2.26900E01 1.56000E00 -5.44000E00 4.35000E00 -6.56000E00 -1.38000E01 -4.25000E00 -3.40000E00 -7.52000E00 -1.17600E01 -1.11200E01 -1.84500E01 -2.49900E01 -2.87100E01 -3.25200E01 -2.94200E01 -3.82000E01 -6.12200E01 -6.49000E01 -6.26400E01 -Frame 160 -7.52600E01 -7.52100E01 -6.21000E01 -8.75400E01 -1.03700E02 -9.62800E01 -7.75600E01 -1.01210E02 -1.03520E02 -8.48300E01 -9.15100E01 -7.83400E01 -7.77200E01 -4.50400E01 -1.73400E01 4.12000E01 9.24800E01 1.73230E02 2.60290E02 2.17780E02 2.36740E02 2.52060E02 2.67620E02 2.71420E02 1.92100E02 1.15170E02 6.17800E01 2.07100E01 -3.16200E01 -5.95100E01 -1.39180E02 -1.84160E02 -1.67340E02 -1.56830E02 -1.55840E02 -1.45670E02 -7.60500E01 -4.82100E01 -2.54700E01 -2.90100E01 1.43600E01 6.10500E01 6.61200E01 3.42800E01 -1.58000E00 -1.75500E01 -3.40000E01 -2.89300E01 -5.86800E01 -9.13000E01 -8.78500E01 -7.12200E01 -5.70200E01 -4.03400E01 2.88000E00 4.64200E01 9.72500E01 9.45500E01 1.15670E02 1.50330E02 1.74920E02 1.72110E02 1.34060E02 9.57200E01 8.21200E01 5.30400E01 5.03000E00 -3.94500E01 -7.32500E01 -1.05010E02 -1.09640E02 -1.12300E02 -1.13930E02 -1.03500E02 -6.96500E01 -4.96900E01 -4.00700E01 -1.91200E01 1.34900E01 3.90900E01 4.54400E01 3.69400E01 2.71400E01 1.30100E01 3.43000E00 1.55000E00 -2.23900E01 -4.20500E01 -4.52800E01 -3.95700E01 -4.06500E01 -2.47300E01 -7.30000E00 1.06700E01 4.01800E01 5.15600E01 6.12400E01 9.01600E01 9.38900E01 9.56500E01 7.63800E01 5.14500E01 3.57100E01 3.94600E01 1.13000E01 -3.17300E01 -4.50500E01 -4.77300E01 -6.34400E01 -6.55700E01 -6.67000E01 -6.28000E01 -4.47200E01 -1.70400E01 9.51000E00 1.28700E01 3.73200E01 4.54900E01 7.98700E01 8.02400E01 6.75500E01 6.94100E01 5.02700E01 5.05000E01 2.37000E01 3.06000E00 4.79000E00 -1.64200E01 -1.92600E01 -3.21600E01 -1.04200E01 -7.99000E00 -5.47000E00 1.21400E01 1.52900E01 2.55300E01 5.60700E01 5.45100E01 5.68600E01 4.52400E01 2.32300E01 2.95300E01 1.50100E01 -3.96000E00 -1.65000E01 -3.74000E01 -5.69000E01 -5.09400E01 -6.27400E01 -5.48400E01 -4.16400E01 -3.89900E01 -3.42200E01 -1.92700E01 1.16000E00 1.12200E01 2.15800E01 2.92400E01 2.91100E01 1.89500E01 -Frame 160 1.64600E01 2.58800E01 1.05700E01 -1.42200E01 -1.97600E01 -2.04500E01 -3.31400E01 -4.71900E01 -3.96300E01 -3.48000E01 -3.67900E01 -3.68100E01 -3.78000E01 -1.97900E01 -2.42100E01 -3.17500E01 -3.35000E01 -3.32800E01 -3.20300E01 -5.27200E01 -5.60100E01 -7.03600E01 -8.81000E01 -1.08320E02 -9.10800E01 -1.05240E02 -1.33760E02 -1.25060E02 -1.07000E02 -1.02310E02 -9.04100E01 -7.30900E01 -3.42000E01 8.89000E00 8.22700E01 1.65810E02 2.37750E02 1.92670E02 2.13000E02 2.34750E02 2.71950E02 2.77050E02 2.10060E02 1.37820E02 8.52400E01 3.99800E01 -1.69000E00 -4.36200E01 -9.77800E01 -1.51500E02 -1.52720E02 -1.77820E02 -1.78520E02 -1.50070E02 -8.56000E01 -7.40600E01 -5.11000E01 -5.43900E01 3.26000E00 5.96800E01 6.57800E01 4.60000E01 9.56000E00 -1.02000E00 -5.93000E00 -2.29900E01 -4.75600E01 -8.28500E01 -8.61600E01 -8.95000E01 -7.58700E01 -7.07600E01 -3.74400E01 -2.07000E00 3.33800E01 4.18800E01 5.75900E01 1.11720E02 1.50410E02 1.55150E02 1.38890E02 1.21000E02 1.01450E02 1.07210E02 6.60600E01 2.25900E01 -1.72300E01 -5.22500E01 -8.12900E01 -9.01400E01 -1.10170E02 -1.19710E02 -1.02430E02 -9.25200E01 -8.62200E01 -7.06500E01 -3.05400E01 9.83000E00 2.74300E01 1.65400E01 1.42900E01 3.09500E01 3.10900E01 2.52000E01 1.91000E01 -1.22100E01 -1.94800E01 -1.69600E01 -2.93500E01 -3.81000E01 -3.00900E01 -3.48100E01 -2.46500E01 -1.21600E01 1.47200E01 2.34100E01 4.63400E01 6.69300E01 4.80900E01 5.96200E01 8.04500E01 7.38500E01 6.39800E01 3.57500E01 1.36200E01 2.80000E00 -1.23500E01 -3.09500E01 -4.00900E01 -5.04700E01 -6.81200E01 -6.22500E01 -5.51400E01 -4.07600E01 -2.09000E01 -8.41000E00 7.47000E00 3.08300E01 5.18800E01 6.55300E01 8.25400E01 7.40000E01 6.81300E01 4.80200E01 4.92500E01 4.44800E01 2.05300E01 -1.91700E01 -2.30700E01 -1.70600E01 -3.78400E01 -2.22200E01 -2.00900E01 -2.08700E01 -1.46500E01 -2.22000E00 1.36000E01 2.79000E01 3.96200E01 2.96700E01 -Frame 160 3.83900E01 3.03500E01 2.10400E01 2.44300E01 1.19100E01 -1.00000E00 -1.93000E01 -3.31400E01 -3.63700E01 -4.16600E01 -4.50700E01 -4.45400E01 -4.79500E01 -4.04200E01 -2.66200E01 -1.83700E01 -1.85000E00 1.01800E01 -4.30000E-01 5.63000E00 2.58700E01 1.77100E01 1.92800E01 1.58800E01 6.36000E00 -8.46000E00 -1.17300E01 -1.70900E01 -2.16000E01 -3.72300E01 -4.23100E01 -4.55100E01 -5.37700E01 -4.62400E01 -4.84400E01 -5.16700E01 -4.99600E01 -4.71600E01 -5.12400E01 -4.74100E01 -4.04300E01 -4.22100E01 -5.70200E01 -6.62500E01 -6.67200E01 -7.51600E01 -8.58100E01 -8.87300E01 -8.86800E01 -8.55700E01 -9.13100E01 -6.21700E01 -4.51000E01 -7.49000E00 4.42600E01 1.39540E02 1.57610E02 1.49070E02 1.82110E02 2.09990E02 2.58530E02 2.50330E02 1.98650E02 1.39200E02 1.14800E02 9.45600E01 6.06300E01 -1.38000E00 -7.12800E01 -1.07250E02 -1.14210E02 -1.29260E02 -1.58640E02 -1.53770E02 -1.32600E02 -1.03650E02 -9.97100E01 -8.55600E01 -2.39000E01 2.96800E01 4.08800E01 2.83800E01 3.14600E01 3.56000E01 4.88300E01 3.94200E01 5.68000E00 -3.91100E01 -4.32500E01 -4.14800E01 -5.06200E01 -6.40000E01 -8.07400E01 -4.89300E01 -3.11000E01 -2.77000E01 -1.80000E-01 4.51800E01 7.58900E01 9.74700E01 1.04620E02 1.11890E02 1.20280E02 1.40820E02 1.29870E02 8.84700E01 5.57200E01 2.59200E01 9.19000E00 -1.00500E01 -4.88600E01 -8.18100E01 -1.00690E02 -1.00050E02 -1.09290E02 -1.13710E02 -9.41600E01 -7.69200E01 -6.00800E01 -4.86700E01 -1.98700E01 1.83000E00 1.81900E01 4.30300E01 5.05900E01 3.73300E01 3.16200E01 5.37000E01 3.64100E01 9.55000E00 -1.51500E01 -1.16000E01 -1.99300E01 -2.15000E01 -3.31000E01 -2.90300E01 -1.68100E01 -1.32000E01 -7.47000E00 1.14400E01 2.19200E01 4.17000E01 4.80500E01 4.75500E01 3.89900E01 5.01300E01 5.65700E01 4.71600E01 3.44200E01 1.92600E01 -3.80000E-01 -6.20000E-01 -1.48600E01 -4.65200E01 -4.31100E01 -3.85500E01 -4.48100E01 -3.52200E01 -2.23000E01 -2.09600E01 -Frame 160 5.44000E00 8.65000E00 1.49500E01 3.34300E01 4.24500E01 5.87100E01 6.14200E01 4.51600E01 3.03600E01 3.20800E01 2.58300E01 1.93700E01 5.70000E00 -2.13900E01 -2.12900E01 -6.16000E00 -2.15500E01 -2.63900E01 -1.63500E01 -9.98000E00 -3.40000E00 -5.61000E00 1.01200E01 1.63300E01 1.97200E01 2.02000E01 9.68000E00 7.83000E00 1.92000E00 5.83000E00 -4.14000E00 -1.64100E01 -3.70400E01 -2.42700E01 -2.20800E01 -3.68000E01 -4.09400E01 -4.21700E01 -3.04000E01 -2.92400E01 -1.90200E01 -8.47000E00 1.41000E00 7.59000E00 9.50000E-01 9.10000E00 9.49000E00 6.88000E00 2.18000E00 1.23300E01 -8.22000E00 -2.14000E01 -1.99700E01 -2.44800E01 -2.71100E01 -4.18000E01 -5.39100E01 -5.13500E01 -4.46700E01 -5.07500E01 -5.59800E01 -5.03300E01 -5.34700E01 -5.16700E01 -5.07800E01 -5.58300E01 -6.00000E01 -6.62600E01 -5.66700E01 -6.87500E01 -6.51600E01 -6.14200E01 -6.45300E01 -5.47000E01 -4.35400E01 -2.40200E01 8.10000E00 5.11800E01 9.75200E01 9.11800E01 1.02540E02 1.38140E02 1.71700E02 1.95130E02 1.72100E02 1.60200E02 1.23790E02 1.15150E02 1.16150E02 6.90900E01 2.15300E01 -2.85000E01 -4.70300E01 -6.40700E01 -9.65600E01 -1.01950E02 -1.05400E02 -1.09850E02 -9.63300E01 -1.12300E02 -8.66600E01 -4.91500E01 -2.44400E01 -1.59500E01 -2.01900E01 -4.55000E00 2.85700E01 3.66800E01 2.90000E01 1.90500E01 -2.30000E-01 -2.11000E00 -2.05000E00 -1.19900E01 -2.42300E01 -4.98300E01 -4.51800E01 -3.83500E01 -2.42800E01 -2.17600E01 -2.15000E00 1.70600E01 2.98400E01 4.49800E01 5.65400E01 8.44000E01 9.30400E01 9.58600E01 9.06800E01 8.52600E01 7.36000E01 7.35200E01 5.83800E01 1.17300E01 -4.36000E00 -2.49300E01 -2.81000E01 -5.33300E01 -7.42800E01 -7.38000E01 -8.82300E01 -8.80200E01 -6.87200E01 -6.57600E01 -5.66500E01 -2.92100E01 -1.99000E01 -4.29000E00 1.08000E01 2.03400E01 4.41500E01 4.06500E01 3.20000E01 2.20500E01 3.37700E01 3.58200E01 2.09000E01 7.50000E00 -5.32000E00 -4.53000E00 -Frame 160 -9.71000E00 -8.04000E00 -1.03100E01 -1.36400E01 -8.06000E00 3.70000E00 1.08200E01 2.01500E01 3.07500E01 2.66500E01 3.64000E01 3.84200E01 2.54700E01 2.51000E01 3.87000E01 3.66900E01 2.35900E01 1.40700E01 1.92500E01 1.45800E01 2.76000E00 2.58000E00 4.40000E00 3.28000E00 2.13000E00 -7.05000E00 -6.50000E00 6.08000E00 1.00500E01 9.14000E00 3.20000E00 1.08000E00 1.59000E01 2.31700E01 2.76500E01 1.12500E01 7.34000E00 3.31000E00 1.41600E01 1.33400E01 -5.10000E-01 -1.78000E00 4.92000E00 1.83000E00 -4.35000E00 -1.71000E00 1.20200E01 1.70000E-01 -4.00000E-02 1.47500E01 -3.01000E00 -2.31000E00 6.42000E00 1.42000E00 -2.73000E00 -7.00000E00 -5.39000E00 -5.72000E00 -5.00000E-02 -8.20000E00 -1.95900E01 -1.23100E01 -7.79000E00 -1.31200E01 -1.46000E01 -3.11000E00 -6.26000E00 -1.50000E00 -1.45900E01 -6.07000E00 7.20000E-01 -1.28000E00 -1.23400E01 -1.27300E01 -2.71200E01 -2.59300E01 -1.76800E01 -2.81600E01 -3.79400E01 -3.89900E01 -3.70400E01 -3.20000E01 -4.07800E01 -4.18000E01 -4.48200E01 -5.09000E01 -3.91300E01 -4.79700E01 -5.50500E01 -4.83100E01 -5.83300E01 -5.76200E01 -5.58500E01 -6.29900E01 -6.63100E01 -6.46900E01 -6.09800E01 -6.61200E01 -5.73800E01 -4.53400E01 -2.19100E01 1.62400E01 5.45300E01 6.09300E01 6.34500E01 8.69700E01 1.16120E02 1.54050E02 1.44000E02 1.26500E02 1.19340E02 1.23850E02 1.17390E02 9.76300E01 6.41800E01 3.46500E01 7.19000E00 8.90000E-01 -2.05900E01 -5.27000E01 -5.97400E01 -7.99300E01 -7.56600E01 -9.01800E01 -9.00600E01 -6.18500E01 -4.97100E01 -4.21500E01 -4.03200E01 -2.84000E01 -1.00900E01 5.79000E00 4.15000E00 1.14500E01 -2.04000E00 -1.95000E00 7.14000E00 -4.50000E00 -1.45000E01 -2.58000E01 -2.24300E01 -2.19400E01 -2.34200E01 -2.39300E01 -2.84400E01 -1.80700E01 -9.37000E00 2.60000E00 1.59300E01 3.16500E01 5.48200E01 5.96500E01 6.25700E01 6.55200E01 6.35000E01 7.13600E01 7.34000E01 5.44400E01 3.68500E01 4.26900E01 -Frame 160 2.46800E01 1.61000E01 -4.75000E00 -2.72300E01 -1.93700E01 -4.12400E01 -4.77400E01 -4.73900E01 -5.29800E01 -5.16900E01 -5.13100E01 -4.08700E01 -3.70700E01 -2.51200E01 -6.78000E00 -5.87000E00 6.07000E00 3.70000E-01 1.34900E01 1.30000E01 1.14800E01 1.69000E01 -5.30000E-01 1.50000E00 1.15900E01 3.98000E00 2.13000E00 1.22000E00 -2.72000E00 -1.78000E00 5.19000E00 -6.30000E-01 -1.63000E00 2.13400E01 1.60000E01 7.48000E00 1.86900E01 1.62300E01 2.86800E01 2.84900E01 2.82700E01 2.20200E01 2.15600E01 3.10700E01 4.98500E01 1.91700E01 2.55300E01 3.40700E01 2.58500E01 3.73600E01 2.32000E01 6.59000E00 7.47000E00 5.38000E00 1.23000E00 -2.04000E00 -1.04000E01 -1.70000E01 -2.27800E01 -1.27100E01 -1.63100E01 -2.10000E01 -1.58100E01 -1.34400E01 1.02000E00 -9.07000E00 -8.46000E00 8.18000E00 5.33000E00 1.23900E01 9.66000E00 1.48400E01 2.11700E01 1.46800E01 2.19800E01 1.74900E01 8.85000E00 1.49400E01 1.52100E01 9.48000E00 2.57000E00 -1.35500E01 -3.15000E00 -4.20000E-01 -1.66000E01 -1.42600E01 -8.83000E00 -2.22000E00 -3.40000E00 -1.16100E01 -5.06000E00 1.70000E00 -1.33000E00 3.55000E00 -5.42000E00 -6.66000E00 -6.93000E00 -1.02000E01 -6.56000E00 -1.78000E01 -2.63700E01 -2.91800E01 -2.60500E01 -2.68000E01 -3.45500E01 -3.65100E01 -3.35000E01 -2.23700E01 -3.08800E01 -3.36300E01 -3.24400E01 -2.01900E01 -3.35500E01 -1.93000E01 -2.46000E01 -4.20500E01 -4.00100E01 -3.98800E01 -3.87200E01 -4.55000E01 -5.74600E01 -5.27500E01 -5.08600E01 -5.28800E01 -6.09300E01 -5.41900E01 -3.82100E01 -3.07200E01 -7.99000E00 2.44300E01 4.18100E01 4.46700E01 6.05600E01 8.78700E01 1.10930E02 1.18590E02 1.06370E02 1.04670E02 1.14820E02 1.14180E02 1.05420E02 8.43000E01 5.34600E01 3.96300E01 4.03500E01 1.80700E01 -5.90000E00 -2.25900E01 -2.57600E01 -3.39900E01 -4.44300E01 -4.31400E01 -5.07600E01 -2.95600E01 -2.96700E01 -3.27500E01 -2.28900E01 -1.67000E01 -4.30000E00 -2.51000E00 -Frame 160 -3.66000E00 -6.84000E00 8.89000E00 4.10000E00 -4.84000E00 -1.70500E01 -3.16200E01 -3.46100E01 -1.96600E01 -1.52300E01 -2.66500E01 -2.74000E01 -1.51500E01 -1.25100E01 -1.17800E01 1.69800E01 1.36100E01 2.61200E01 4.79900E01 3.44900E01 3.95400E01 4.97100E01 4.81500E01 5.95000E01 5.61500E01 4.76500E01 3.78500E01 4.07200E01 3.16500E01 2.82800E01 1.37900E01 -4.15000E00 -4.63000E00 -4.11000E00 -1.35600E01 -2.62800E01 -3.53600E01 -2.86800E01 -2.67600E01 -3.17500E01 -2.78600E01 -3.18200E01 -2.38700E01 -1.46500E01 -2.01300E01 -1.17600E01 -7.12000E00 6.70000E-01 2.70000E00 -3.21000E00 7.00000E-01 6.73000E00 7.94000E00 2.18000E00 8.24000E00 4.80000E-01 1.04800E01 7.80000E-01 -1.22000E00 7.72000E00 2.93000E00 -1.01000E00 9.93000E00 7.20000E00 6.38000E00 1.25300E01 1.58600E01 1.12800E01 1.35500E01 1.58800E01 2.02700E01 2.17800E01 2.33200E01 4.08900E01 2.19700E01 2.54500E01 2.80200E01 2.86500E01 3.02800E01 2.29400E01 1.33600E01 1.94800E01 2.78000E00 5.70000E-01 3.00000E-01 -4.97000E00 -2.03900E01 -2.62600E01 -7.28000E00 -1.67000E01 -2.63900E01 -1.63500E01 -1.59800E01 -4.58000E00 -3.82000E00 -6.03000E00 1.37000E01 8.03000E00 1.11800E01 1.04200E01 7.63000E00 1.47500E01 2.10800E01 6.59000E00 -4.35000E00 -2.62000E00 -8.30000E-01 -2.98000E00 -1.90000E-01 -1.73100E01 -1.59400E01 -2.05100E01 -1.42000E01 4.32000E00 -9.59000E00 -1.89200E01 2.48000E00 -6.46000E00 -2.67000E00 1.32400E01 8.63000E00 1.87000E00 4.90000E00 -9.80000E-01 -1.04000E00 -2.10000E00 8.10000E-01 -1.61900E01 -1.17000E01 -1.00600E01 -2.13600E01 -2.29900E01 -2.56500E01 -1.63700E01 -2.47900E01 -2.84500E01 -1.42000E01 -1.45000E01 -1.78000E01 -2.11900E01 -1.66700E01 -1.60000E01 -2.33000E01 -1.88100E01 -2.81700E01 -3.38000E01 -2.85800E01 -3.91800E01 -4.40800E01 -3.81000E01 -4.39100E01 -4.38700E01 -5.08000E01 -4.09100E01 -4.06900E01 -5.04400E01 -4.34600E01 -3.32400E01 -1.66900E01 3.37000E00 -Frame 160 3.10300E01 4.35000E01 3.93000E01 4.79200E01 7.47500E01 9.03300E01 9.23000E01 8.82400E01 9.29700E01 8.77600E01 8.93100E01 8.68300E01 6.62000E01 4.88800E01 4.69900E01 3.60100E01 2.66700E01 1.03000E00 -7.39000E00 -2.05000E00 -1.05300E01 -2.52500E01 -3.13900E01 -2.36800E01 -1.27000E01 -1.73600E01 -1.71400E01 -1.78900E01 -1.06400E01 -7.15000E00 -5.54000E00 -4.87000E00 -1.71700E01 -3.83000E00 -1.00700E01 -1.84900E01 -1.71500E01 -2.27500E01 -2.05000E01 -1.21600E01 -1.25500E01 -2.09400E01 -1.65700E01 -1.50500E01 -6.47000E00 9.38000E00 -4.29000E00 5.62000E00 2.98300E01 2.97600E01 2.16600E01 3.72900E01 3.63700E01 4.53900E01 4.66500E01 3.79100E01 3.88700E01 3.68300E01 4.17000E01 2.16900E01 2.00500E01 1.53500E01 5.50000E00 3.35000E00 -4.86000E00 -8.31000E00 -1.98500E01 -2.77200E01 -2.88000E01 -2.18800E01 -2.17200E01 -2.55300E01 -2.24300E01 -1.92100E01 -1.08700E01 -7.26000E00 -9.53000E00 1.40000E-01 9.11000E00 1.13500E01 3.65000E00 5.71000E00 1.08300E01 7.10000E00 5.25000E00 7.34000E00 4.90000E-01 -2.57000E00 7.28000E00 -4.57000E00 -5.78000E00 2.98000E00 -1.99000E00 -6.11000E00 1.65000E00 7.65000E00 1.08300E01 1.11000E01 8.37000E00 1.25500E01 1.08500E01 2.10900E01 3.36300E01 3.35300E01 1.54000E01 2.07000E01 1.91500E01 3.65400E01 3.94400E01 1.34000E01 4.55000E00 1.54300E01 1.06400E01 1.87000E01 1.20000E01 -8.91000E00 -1.44500E01 -1.51400E01 -5.83000E00 -1.22000E00 -1.84600E01 -1.72100E01 -9.00000E-01 9.92000E00 -1.29300E01 -5.47000E00 6.23000E00 8.29000E00 1.04100E01 -7.41000E00 2.30000E-01 3.11000E00 7.08000E00 1.01700E01 2.35000E00 -1.07100E01 -1.51600E01 2.70000E-01 8.18000E00 -1.16700E01 -2.71200E01 -9.02000E00 6.50000E-01 -1.03800E01 -1.97400E01 -6.37000E00 -2.58000E00 -4.67000E00 -2.82000E00 -6.91000E00 -6.12000E00 7.00000E-01 -3.27000E00 -3.36000E00 -1.45000E00 -4.80000E-01 -9.48000E00 -1.37500E01 -6.14000E00 -1.42900E01 -Frame 160 -1.66800E01 -1.01300E01 -5.37000E00 -1.94600E01 -2.59700E01 -9.66000E00 -1.18400E01 -2.20800E01 -1.96200E01 -2.10700E01 -2.45500E01 -2.61200E01 -2.57200E01 -1.72900E01 -3.25900E01 -3.73400E01 -3.62100E01 -2.80200E01 -3.75600E01 -3.93700E01 -4.42100E01 -3.61700E01 -4.68600E01 -5.08500E01 -4.39300E01 -5.17700E01 -5.18200E01 -4.88400E01 -4.07400E01 -1.83700E01 -5.31000E00 6.14000E00 2.29200E01 3.51800E01 3.87700E01 5.04200E01 7.33700E01 9.59500E01 8.01300E01 8.77400E01 8.65000E01 8.81400E01 7.17500E01 5.97900E01 5.04100E01 3.77000E01 2.55700E01 1.80500E01 8.29000E00 1.23000E00 -1.50400E01 -1.77900E01 -1.86000E01 -2.64100E01 -3.04300E01 -1.65400E01 -1.12000E01 -1.26800E01 -2.01900E01 -1.79100E01 -2.54000E00 -5.69000E00 -1.59300E01 -1.94700E01 -2.01000E01 -1.57300E01 -1.32100E01 -2.36000E01 -3.32900E01 -3.42500E01 -1.72100E01 -2.06300E01 -2.21400E01 -1.46800E01 -1.09800E01 -2.16000E00 1.19300E01 1.14400E01 1.19200E01 2.54000E01 3.52700E01 3.44100E01 4.54900E01 3.78700E01 3.19800E01 3.48800E01 4.08400E01 3.19500E01 1.97600E01 9.18000E00 1.22700E01 5.45000E00 -4.58000E00 -6.91000E00 -1.23000E01 -1.18400E01 -1.83500E01 -1.50400E01 -1.46100E01 -3.51500E01 -2.02900E01 -1.89500E01 -1.65500E01 -1.00600E01 -2.23600E01 -9.02000E00 -2.26000E00 -5.29000E00 -2.41000E00 1.56000E00 5.65000E00 4.86000E00 1.20400E01 1.34300E01 1.28500E01 2.24000E00 -2.70000E00 2.10000E-01 -4.79000E00 -9.40000E-01 5.03000E00 -4.82000E00 1.03000E00 -3.94000E00 -3.06000E00 7.85000E00 9.00000E-02 -3.91000E00 1.09700E01 1.53000E01 1.57500E01 9.20000E00 8.44000E00 1.96500E01 2.81900E01 2.19700E01 2.45400E01 2.51700E01 2.18000E01 2.33100E01 2.48500E01 1.04200E01 2.15400E01 1.09900E01 2.11000E00 7.96000E00 3.99000E00 -4.10000E00 -2.43000E00 -6.70000E00 -1.00900E01 -1.05700E01 -5.05000E00 -1.23500E01 4.14000E00 1.14000E00 -1.95000E00 1.08700E01 -2.92000E00 1.28700E01 -Frame 160 1.51400E01 5.47000E00 1.50000E00 8.41000E00 -2.47000E00 -4.68000E00 -9.95000E00 -1.13700E01 -1.58200E01 -1.43900E01 -1.19000E01 -8.32000E00 -1.36200E01 -1.20700E01 -1.04600E01 -2.79000E00 -8.88000E00 -1.15000E00 1.82000E00 -5.12000E00 -7.27000E00 1.52000E00 3.58000E00 4.70000E00 -4.15000E00 -3.27000E00 -7.36000E00 -1.05700E01 -1.87000E00 -1.09000E01 -1.32000E01 -4.56000E00 -7.65000E00 -1.28300E01 -1.71600E01 -1.86100E01 -1.60900E01 -1.04800E01 -1.66900E01 -1.50800E01 -1.74100E01 -2.18000E01 -1.63100E01 -2.56400E01 -3.02400E01 -3.69600E01 -2.88600E01 -3.34900E01 -4.42400E01 -3.22900E01 -3.99500E01 -5.28200E01 -4.80500E01 -5.11000E01 -5.02100E01 -5.52600E01 -5.44300E01 -4.65400E01 -4.03800E01 -2.90100E01 -1.42800E01 7.90000E00 3.87400E01 4.14800E01 4.72500E01 6.21400E01 8.74200E01 1.01390E02 8.96900E01 8.95400E01 1.01300E02 8.83300E01 7.68800E01 7.60100E01 5.90500E01 3.85200E01 3.63300E01 2.00500E01 8.26000E00 -4.89000E00 -2.14300E01 -2.44500E01 -2.55300E01 -3.76100E01 -3.60200E01 -4.03400E01 -3.27500E01 -1.88900E01 -2.75800E01 -3.25100E01 -3.15600E01 -1.35500E01 -7.97000E00 -9.21000E00 -9.48000E00 -1.87500E01 -2.32900E01 -1.09500E01 -1.82200E01 -3.07000E01 -2.45400E01 -1.51700E01 -1.45000E01 -1.18000E01 -1.30100E01 3.75000E00 1.10200E01 8.50000E00 1.58900E01 2.24900E01 2.92700E01 4.72300E01 4.37000E01 6.00200E01 5.37900E01 4.33200E01 4.14900E01 3.75700E01 2.75000E01 1.71000E01 5.37000E00 2.28000E00 -1.09000E01 -1.64700E01 -3.01900E01 -3.93000E01 -4.26500E01 -4.40600E01 -4.64700E01 -3.89100E01 -4.20800E01 -4.13100E01 -3.34800E01 -2.33800E01 -1.79500E01 -3.34000E00 6.72000E00 -1.92000E00 -8.30000E-01 1.72900E01 9.95000E00 1.43700E01 8.91000E00 7.27000E00 1.15700E01 9.90000E-01 1.08000E00 1.17000E00 -2.74000E00 -2.77000E00 -8.00000E-01 -7.70000E-01 3.26000E00 2.41000E00 -4.70000E-01 1.05600E01 9.92000E00 4.25000E00 1.34000E01 1.58200E01 -Frame 160 1.53000E01 9.75000E00 9.02000E00 2.26000E00 1.29000E00 2.90000E-01 -9.74000E00 -1.07000E00 1.58700E01 2.32000E00 6.35000E00 1.25000E01 5.83000E00 2.09500E01 1.25200E01 1.82000E00 1.97900E01 2.30000E00 1.32700E01 1.45700E01 1.19000E01 -8.60000E-01 9.90000E-01 -1.00000E-01 2.78000E00 -4.25000E00 -7.49000E00 -5.82000E00 6.91000E00 -1.29700E01 -1.14500E01 1.21300E01 -9.57000E00 -5.93000E00 -2.17000E00 -7.29000E00 -6.56000E00 -4.80000E00 -3.98000E00 8.87000E00 -1.08900E01 -1.42500E01 -4.70000E00 -7.85000E00 -1.30900E01 -2.14800E01 -2.41100E01 -1.08000E01 -2.07000E00 -1.40700E01 -1.14300E01 -6.70000E00 -1.82000E00 1.21000E00 -3.67000E00 6.30000E00 4.57000E00 -8.22000E00 -1.40000E00 4.63000E00 -1.81600E01 -8.64000E00 1.80000E-01 -1.37300E01 -2.70600E01 -1.67800E01 -1.61700E01 -3.15300E01 -2.93400E01 -3.40600E01 -3.19000E01 -3.46500E01 -3.24600E01 -3.51800E01 -3.09600E01 -3.95900E01 -5.04600E01 -4.36300E01 -4.15600E01 -4.84000E01 -5.24200E01 -4.75300E01 -5.04600E01 -5.64500E01 -5.45900E01 -5.76400E01 -6.07500E01 -5.89200E01 -5.90000E01 -4.90500E01 -2.37700E01 -6.71000E00 2.78600E01 7.84500E01 7.85100E01 1.00480E02 1.20020E02 1.46040E02 1.56720E02 1.58580E02 1.34350E02 1.29250E02 1.08880E02 8.37900E01 7.38600E01 4.45700E01 -6.65000E00 -1.84300E01 -4.45400E01 -5.64000E01 -6.75600E01 -8.19900E01 -8.97800E01 -7.47200E01 -8.41200E01 -7.57300E01 -4.60100E01 -3.73300E01 -2.53500E01 -1.29800E01 -4.22000E00 -6.19000E00 9.78000E00 1.72300E01 1.48900E01 6.46000E00 -3.24000E00 -2.40000E-01 8.50000E-01 -4.03000E00 -1.20600E01 -1.73300E01 -7.50000E-01 1.34000E00 -4.51000E00 1.44600E01 3.00000E01 2.29900E01 4.97400E01 5.92700E01 6.80400E01 8.10200E01 7.03300E01 7.22500E01 7.11700E01 4.00000E01 3.68400E01 2.25600E01 1.83000E00 -2.05300E01 -3.65500E01 -5.50200E01 -6.40000E01 -6.81900E01 -8.04400E01 -7.69900E01 -7.03600E01 -6.94600E01 -6.04700E01 -3.91500E01 -Frame 160 -2.81400E01 -3.77000E00 4.35000E00 9.71000E00 2.32200E01 2.51200E01 3.70500E01 3.93100E01 3.16000E01 2.86200E01 3.35200E01 2.15400E01 1.71700E01 1.76500E01 5.13000E00 1.22000E00 4.19000E00 2.50000E-01 -2.81000E00 1.00400E01 8.28000E00 7.46000E00 1.46100E01 1.69700E01 2.33900E01 1.39900E01 1.62900E01 1.26500E01 6.89000E00 -1.05000E00 -2.30000E-01 -9.38000E00 -1.78000E01 -2.54600E01 -2.93300E01 -3.62900E01 -3.34300E01 -2.64500E01 -2.72300E01 -3.30100E01 -2.19400E01 9.49000E00 2.38800E01 1.56900E01 1.72300E01 3.58000E01 6.39100E01 8.88300E01 8.14400E01 6.27500E01 6.44300E01 4.81100E01 5.52500E01 5.35700E01 2.08000E01 -4.99000E00 -1.95600E01 -1.45500E01 -2.73600E01 -4.95300E01 -4.93300E01 -4.00700E01 -4.14800E01 -5.28900E01 -4.76000E01 -3.51000E01 -1.61800E01 -1.56600E01 -1.51100E01 -1.25300E01 -1.86000E00 1.01400E01 2.35000E01 1.12500E01 -8.39000E00 4.37000E00 8.52000E00 1.67900E01 1.63000E01 -7.22000E00 -5.46000E00 2.73600E01 1.01700E01 -1.25600E01 2.00000E-02 1.29900E01 1.03500E01 5.62000E00 7.74000E00 4.92000E00 1.01000E00 1.98000E00 -2.02000E00 -2.31400E01 -2.58900E01 -2.27000E01 -2.83900E01 -3.12300E01 -4.41300E01 -6.83900E01 -5.33400E01 -5.07800E01 -5.21000E01 -5.54200E01 -4.68000E01 -5.08800E01 -3.70500E01 -3.67700E01 -4.34600E01 -3.93300E01 -3.90500E01 -3.97400E01 -4.24300E01 -3.71800E01 -3.97500E01 -5.73800E01 -5.95200E01 -5.36900E01 -7.56500E01 -6.62400E01 -6.05000E01 -6.05500E01 -3.45700E01 -7.80000E-01 3.90300E01 7.90100E01 1.38130E02 1.82930E02 1.72930E02 1.87450E02 2.02240E02 2.01300E02 1.95150E02 1.45640E02 1.03480E02 6.69400E01 1.42300E01 -1.91000E01 -7.74200E01 -1.24450E02 -1.58800E02 -1.77050E02 -1.79690E02 -1.83240E02 -1.75730E02 -1.43830E02 -1.02820E02 -8.54600E01 -4.45000E01 -6.25000E00 3.61700E01 8.48500E01 8.29400E01 9.08800E01 9.59700E01 9.71200E01 9.12100E01 7.20300E01 4.11900E01 1.03600E01 -Frame 160 5.57000E00 8.63000E00 -1.52200E01 -3.27900E01 -1.48700E01 -1.43800E01 -1.86000E00 1.80500E01 2.35600E01 4.72200E01 6.35700E01 7.43700E01 7.54400E01 5.54800E01 5.58600E01 4.22100E01 1.71100E01 -8.77000E00 -4.84300E01 -7.42600E01 -8.88100E01 -9.47200E01 -1.15720E02 -1.37260E02 -1.00340E02 -9.61900E01 -8.18300E01 -4.69600E01 -1.79800E01 2.09000E01 5.09500E01 7.68700E01 9.65100E01 1.04660E02 1.07960E02 1.21260E02 1.06860E02 8.29200E01 5.61700E01 4.95500E01 1.96900E01 -4.10000E00 -2.46100E01 -4.97200E01 -6.55500E01 -4.48000E01 -5.73600E01 -5.82500E01 -5.21100E01 -2.87300E01 -1.66000E01 -8.08000E00 1.71000E00 1.18000E01 2.51900E01 2.19700E01 1.46300E01 1.90500E01 3.59000E00 1.65000E00 -2.35000E00 -1.94700E01 -2.81000E01 -1.39700E01 -1.23900E01 -1.27500E01 -1.11000E00 5.89000E00 2.61000E01 3.39100E01 4.49300E01 6.52500E01 5.91400E01 5.47900E01 7.22600E01 5.32100E01 4.05300E01 2.74300E01 1.89100E01 1.31200E01 -7.85000E00 -3.64500E01 -2.68900E01 5.60000E01 5.14100E01 -3.53600E01 -1.97700E01 1.93300E01 2.46300E01 2.40800E01 1.50000E00 -1.17700E01 -2.14300E01 -4.53600E01 9.02000E00 -3.92000E00 -9.22500E01 -3.42200E01 2.06400E01 -3.18200E01 -4.08700E01 -2.51600E01 4.30600E01 7.73500E01 2.16300E01 2.31700E01 6.67400E01 4.36000E01 7.67100E01 7.07800E01 1.36100E01 -6.33000E00 -9.87000E00 -4.50000E00 3.05000E00 -5.81600E01 -9.92000E01 -3.24100E01 -2.75200E01 -7.44500E01 -6.77600E01 -2.58000E01 -2.52000E00 -7.52000E00 -2.06700E01 3.79000E00 2.70000E01 1.69000E01 3.24700E01 2.14900E01 -1.48500E01 -2.30000E00 1.36400E01 -7.94000E00 -2.71800E01 -3.99900E01 -3.51600E01 -1.81500E01 -3.96000E01 -6.36800E01 -3.44500E01 -1.92900E01 -3.26500E01 -4.44000E01 -5.64800E01 -4.48900E01 -3.49100E01 -6.46000E01 -6.81600E01 -7.97800E01 -1.08700E02 -8.24300E01 -7.52900E01 -1.09880E02 -1.24460E02 -1.04400E02 -5.46500E01 5.66000E00 2.08000E01 9.23600E01 -Frame 160 1.80020E02 2.59200E02 2.98570E02 2.73870E02 2.66150E02 2.83950E02 2.73050E02 2.11580E02 1.19040E02 1.45600E01 -5.71300E01 -1.05950E02 -1.84150E02 -2.72570E02 -3.21450E02 -3.07530E02 -2.73890E02 -2.58960E02 -2.32340E02 -1.67700E02 -6.29300E01 4.21100E01 7.83300E01 1.12570E02 1.62740E02 2.20290E02 2.44400E02 2.06020E02 1.39260E02 1.00310E02 9.10700E01 4.54700E01 -2.05700E01 -7.66200E01 -9.23200E01 -7.04100E01 -9.07500E01 -9.36300E01 -6.35100E01 -1.84000E01 3.71200E01 5.93200E01 5.31500E01 6.57400E01 9.86600E01 9.95100E01 6.33000E01 1.19200E01 -2.60500E01 -3.31600E01 -6.74500E01 -1.19730E02 -1.62510E02 -1.64460E02 -1.45320E02 -1.08460E02 -1.09370E02 -8.12200E01 -6.14000E00 5.62500E01 1.07500E02 1.21220E02 1.37240E02 1.71620E02 1.87900E02 1.75510E02 1.22580E02 7.29100E01 4.36500E01 6.46000E00 -4.38700E01 -1.04700E02 -1.13300E02 -1.25050E02 -1.42040E02 -1.34420E02 -1.27440E02 -9.71300E01 -4.28000E01 -2.76000E00 2.15100E01 3.45000E01 5.88500E01 8.18900E01 8.35600E01 6.72000E01 4.52700E01 2.66200E01 1.63700E01 -2.10000E-01 -3.63000E01 -5.04700E01 -4.60300E01 -3.34100E01 -2.03700E01 -1.89100E01 4.61000E00 3.88500E01 6.41100E01 6.50900E01 7.40400E01 8.62000E01 7.56600E01 6.97300E01 3.85600E01 1.84000E01 -7.39000E00 -3.59600E01 -5.73700E01 -8.13800E01 -9.10500E01 -9.29300E01 -8.47800E01 -6.13000E01 -2.20400E01 -2.55000E00 1.95400E01 4.92900E01 7.09100E01 1.08130E02 1.38400E02 1.27480E02 1.28110E02 1.02650E02 5.93200E01 5.56100E01 1.77500E01 -3.62800E01 -5.09300E01 -7.79700E01 -9.27600E01 -7.39100E01 -1.07400E02 -8.48200E01 -2.94600E01 -3.53600E01 -1.14100E01 1.12900E01 2.76800E01 7.75500E01 7.48900E01 4.60800E01 6.23400E01 2.80500E01 1.06800E01 2.57700E01 -1.76900E01 -3.34700E01 -1.97000E01 -5.14800E01 -4.71900E01 -3.47200E01 -4.28300E01 7.85000E00 1.10900E01 4.20000E-01 3.34200E01 2.74100E01 3.21900E01 5.00900E01 -Frame 160 2.25000E01 8.04000E00 1.11300E01 -1.66900E01 -2.33500E01 -3.01900E01 -5.22100E01 -4.68600E01 -5.53000E01 -5.19500E01 -4.34500E01 -5.26500E01 -3.80900E01 -1.20500E01 -1.62000E01 -1.04700E01 -1.56000E00 4.62000E00 6.98000E00 -4.60000E00 -2.15400E01 -2.89900E01 -1.96500E01 -4.80100E01 -7.12100E01 -8.60700E01 -8.43200E01 -8.84500E01 -1.01640E02 -1.10160E02 -1.00860E02 -9.72000E01 -7.43600E01 -4.57700E01 -1.92800E01 3.60200E01 9.79700E01 1.64720E02 2.45360E02 2.96250E02 3.08430E02 2.65700E02 2.30410E02 1.96830E02 1.57050E02 7.09200E01 -2.69100E01 -1.22710E02 -1.86330E02 -2.29720E02 -2.72220E02 -3.06770E02 -3.20100E02 -2.46550E02 -1.71510E02 -1.27010E02 -6.80400E01 1.57900E01 1.16170E02 1.94520E02 2.09090E02 2.03900E02 2.21350E02 2.11130E02 1.85400E02 1.14710E02 3.27400E01 -1.17800E01 -5.06500E01 -1.00660E02 -1.22110E02 -1.29100E02 -1.07180E02 -7.74800E01 -6.97900E01 -5.28000E01 1.27600E01 6.53300E01 8.94600E01 9.22500E01 5.90400E01 7.77500E01 6.69700E01 1.08000E01 -2.21100E01 -7.30100E01 -9.34100E01 -9.43500E01 -1.13230E02 -1.35590E02 -1.10520E02 -7.05800E01 -1.83500E01 1.95000E01 4.24900E01 9.11400E01 1.42200E02 1.52700E02 1.50380E02 1.29850E02 9.65700E01 8.31800E01 3.83100E01 -2.59700E01 -7.12000E01 -8.67500E01 -1.26690E02 -1.42740E02 -1.60150E02 -1.40950E02 -9.70300E01 -6.56700E01 -2.52900E01 -4.65000E00 2.56200E01 6.77900E01 9.31900E01 9.02800E01 7.71900E01 7.06200E01 5.47800E01 3.34000E01 -1.46700E01 -4.12100E01 -5.75300E01 -6.03000E01 -6.11000E01 -6.18700E01 -4.96100E01 -1.29300E01 1.38900E01 2.95200E01 4.26000E01 7.20400E01 7.23200E01 8.25400E01 6.50000E01 3.98600E01 2.19100E01 2.39000E00 -3.27300E01 -6.39000E01 -8.49700E01 -8.56100E01 -7.91900E01 -8.15000E01 -7.58100E01 -3.28800E01 -1.56000E01 2.12200E01 6.91500E01 9.04900E01 9.34000E01 1.01310E02 1.14370E02 1.18730E02 1.04120E02 7.49700E01 2.88600E01 -1.69000E00 -Frame 160 -3.21700E01 -6.15500E01 -8.67700E01 -1.13680E02 -1.04310E02 -8.25500E01 -7.20400E01 -5.61400E01 -3.47000E01 -2.57000E00 2.75500E01 5.55700E01 6.44000E01 6.64400E01 7.44800E01 6.27000E01 5.95000E01 2.51500E01 -3.28000E00 -1.55800E01 -4.62400E01 -6.18000E01 -5.67800E01 -6.05500E01 -4.93800E01 -3.38200E01 -2.37500E01 -6.35000E00 1.15900E01 4.30700E01 4.04800E01 2.97700E01 4.47000E01 3.70500E01 3.31300E01 1.80600E01 -2.34900E01 -2.23000E01 -3.30500E01 -5.81000E01 -5.98700E01 -6.66400E01 -6.65600E01 -3.94200E01 -3.64100E01 -2.22800E01 -5.70000E00 -1.06100E01 1.33300E01 2.59900E01 1.50100E01 2.86700E01 1.27200E01 8.26000E00 -4.35000E00 -3.13500E01 -2.01600E01 -2.36100E01 -5.51500E01 -4.96200E01 -4.78800E01 -5.90500E01 -5.35200E01 -6.27800E01 -7.32800E01 -5.80500E01 -7.23100E01 -5.69600E01 -6.61000E01 -8.84800E01 -6.74900E01 -4.58100E01 -7.54400E01 -2.39400E01 3.15000E00 4.60500E01 1.22210E02 1.66590E02 2.42170E02 2.80850E02 2.50460E02 2.35900E02 2.11680E02 1.29530E02 9.37400E01 3.78000E00 -1.08940E02 -1.47020E02 -2.16120E02 -2.71140E02 -2.73600E02 -2.94880E02 -2.58550E02 -1.67870E02 -1.19250E02 -2.70400E01 5.60200E01 1.13570E02 2.03770E02 2.34550E02 2.18050E02 2.38830E02 1.93030E02 1.45640E02 1.16660E02 1.56900E01 -4.74000E01 -7.23800E01 -1.52050E02 -1.49030E02 -1.39770E02 -1.26090E02 -7.28700E01 -4.29400E01 -2.40500E01 4.44400E01 7.30000E01 8.93700E01 1.25160E02 9.39400E01 6.46700E01 4.94400E01 -8.30000E00 -4.88100E01 -7.85200E01 -1.15070E02 -1.07640E02 -1.06880E02 -1.16000E02 -6.13000E01 -2.88600E01 6.60000E00 7.11400E01 9.36000E01 1.29660E02 1.57710E02 1.38480E02 1.31530E02 1.14250E02 4.93400E01 3.39000E00 -4.49700E01 -8.67700E01 -1.23770E02 -1.42790E02 -1.37260E02 -1.39430E02 -1.23540E02 -7.80500E01 -3.10900E01 2.34000E00 4.27900E01 7.14400E01 8.19000E01 9.36000E01 9.35700E01 6.94500E01 5.15200E01 1.89900E01 -1.65600E01 -Frame 160 -3.41900E01 -6.23300E01 -7.32800E01 -6.35000E01 -5.83600E01 -4.10100E01 -6.09000E00 2.19100E01 5.07500E01 6.54300E01 7.45000E01 7.97800E01 7.41500E01 6.02800E01 2.99300E01 2.62000E00 -2.85300E01 -5.36100E01 -8.14100E01 -8.79900E01 -7.96900E01 -7.30600E01 -6.31600E01 -3.09000E01 7.38000E00 2.78300E01 4.98800E01 7.15600E01 1.01840E02 1.12960E02 1.01320E02 7.92300E01 7.13900E01 3.92500E01 1.50900E01 1.21800E01 -2.18200E01 -3.98400E01 -4.73700E01 -5.00800E01 -4.58200E01 -5.83800E01 -5.72700E01 -2.70700E01 -8.91000E00 -3.18000E00 1.47300E01 8.18000E00 2.34200E01 3.21100E01 1.70400E01 1.94900E01 1.90000E01 -1.52000E00 1.33300E01 9.63000E00 -3.19000E00 6.00000E-01 -2.49000E00 -1.86700E01 -3.33000E00 -1.51000E00 3.70000E-01 6.31000E00 -7.57000E00 -1.18700E01 -1.12900E01 -7.68000E00 4.05000E00 -6.86000E00 -1.81000E01 -3.67000E00 -4.79000E00 -1.29400E01 -1.33000E00 -1.53600E01 -8.81000E00 -1.05000E00 -6.05000E00 -1.42000E01 -2.35900E01 -2.42500E01 -2.19100E01 -2.74800E01 -3.52000E01 -3.91300E01 -2.11500E01 -2.26000E01 -1.30800E01 -1.62600E01 -1.53000E00 1.16500E01 8.22000E00 3.67000E00 4.97000E00 1.30000E00 -2.49000E00 -2.04000E01 -4.58500E01 -5.70500E01 -6.05500E01 -7.21100E01 -9.79700E01 -1.06550E02 -9.53100E01 -1.00650E02 -7.80800E01 -8.07600E01 -8.94700E01 -5.83900E01 -4.53200E01 3.17000E00 5.51300E01 7.46200E01 1.49620E02 1.83780E02 2.26810E02 2.90950E02 2.46800E02 1.92060E02 1.70460E02 9.00500E01 3.60900E01 -2.75500E01 -1.55110E02 -1.88450E02 -2.12630E02 -2.57350E02 -2.37210E02 -2.47230E02 -2.09340E02 -9.91000E01 -4.63800E01 2.49900E01 1.00520E02 1.29270E02 1.97770E02 2.37190E02 1.88600E02 1.72330E02 1.42400E02 6.74200E01 3.70700E01 -2.12400E01 -8.83200E01 -7.83800E01 -1.14050E02 -1.22710E02 -8.95200E01 -6.92200E01 -1.02300E01 4.75900E01 3.71500E01 6.03500E01 8.22100E01 6.76700E01 8.36200E01 3.39900E01 -3.42000E01 -2.64600E01 -Frame 160 -4.84500E01 -9.20700E01 -7.99500E01 -1.08380E02 -8.55900E01 -3.50200E01 -1.98600E01 2.78000E00 5.71100E01 9.50600E01 1.34090E02 1.21200E02 1.05800E02 1.07830E02 8.88300E01 3.21700E01 7.40000E-01 -5.16500E01 -7.46000E01 -7.91800E01 -1.14820E02 -1.18450E02 -8.10800E01 -6.64800E01 -1.83700E01 -1.76000E00 4.36000E00 4.86600E01 6.92800E01 6.94700E01 5.46000E01 2.82200E01 1.90000E01 1.44800E01 -2.31900E01 -5.00000E01 -4.55900E01 -4.70000E01 -2.44100E01 -2.11000E01 -7.67000E00 2.01800E01 4.68700E01 7.13400E01 6.15000E01 6.13000E01 7.90400E01 6.22600E01 1.99100E01 -6.76000E00 -2.32400E01 -4.22000E01 -5.87000E01 -6.86500E01 -7.28400E01 -5.30900E01 -2.56800E01 -3.40000E00 4.57000E00 2.17800E01 5.15000E01 7.80900E01 7.74300E01 6.56800E01 6.05100E01 4.61300E01 1.72700E01 3.35100E01 -5.17700E01 1.43700E01 9.55000E00 -4.44200E01 -3.10100E01 1.68500E01 1.51800E01 5.24500E01 5.28300E01 3.21800E01 7.08700E01 5.47000E01 4.19900E01 3.86000E00 -4.74400E01 -2.42700E01 -3.43500E01 -6.17000E01 -5.98300E01 -6.08400E01 -6.38200E01 8.17000E00 6.38000E00 1.45300E01 5.49200E01 6.45100E01 7.53400E01 8.44400E01 4.87500E01 5.29200E01 3.01800E01 -1.42800E01 -3.70900E01 -3.95600E01 -4.00600E01 -4.25300E01 -6.20300E01 -6.20700E01 -1.30500E01 -1.15000E01 1.81100E01 3.16200E01 2.05200E01 4.50600E01 5.53200E01 2.58500E01 5.45000E00 -2.05800E01 -2.63900E01 -2.23500E01 -5.51600E01 -7.09300E01 -4.81200E01 -3.25600E01 -3.14900E01 -1.23600E01 4.37000E00 2.46100E01 2.14500E01 2.21700E01 2.88900E01 3.07900E01 1.47200E01 1.40000E-01 -2.68900E01 -4.67300E01 -3.71400E01 -4.72200E01 -5.75700E01 -6.31900E01 -5.89300E01 -5.64900E01 -4.19300E01 -4.18900E01 -5.18200E01 -3.20200E01 -4.35900E01 -3.74900E01 -4.21800E01 -7.89900E01 -7.28800E01 -7.75300E01 -9.92700E01 -5.76100E01 -1.56300E01 1.86400E01 7.79300E01 1.23960E02 1.79280E02 2.94130E02 3.28250E02 2.63120E02 -Frame 160 2.28740E02 1.65100E02 8.83600E01 3.11900E01 -1.06750E02 -2.11830E02 -2.37940E02 -2.73620E02 -2.73140E02 -2.68390E02 -2.67250E02 -1.55840E02 -2.98600E01 2.10200E01 1.29430E02 1.78050E02 2.06990E02 2.70620E02 2.41960E02 1.86190E02 1.43530E02 6.74300E01 -7.07000E00 -4.98500E01 -1.12890E02 -1.19760E02 -1.13720E02 -1.32380E02 -9.14900E01 -3.32500E01 1.28200E01 8.93000E01 8.90600E01 6.47300E01 9.35900E01 8.02600E01 4.14500E01 -4.59000E00 -6.80400E01 -9.13800E01 -8.73500E01 -1.21110E02 -1.30800E02 -8.86700E01 -4.41600E01 2.37600E01 4.77500E01 7.94300E01 1.32010E02 1.39090E02 1.34260E02 1.21160E02 7.75500E01 4.45300E01 1.64600E01 -4.74800E01 -8.63400E01 -9.83100E01 -9.75500E01 -7.86700E01 -8.51300E01 -7.97100E01 -1.30500E01 3.16800E01 4.07600E01 6.00800E01 5.59400E01 4.56200E01 5.79400E01 2.59000E00 -1.64700E01 -3.21000E01 -6.11800E01 -7.11000E01 -6.92600E01 -6.43000E01 -2.31300E01 3.30000E-01 2.75100E01 7.25000E01 7.38100E01 9.50900E01 1.10940E02 7.81800E01 5.03400E01 3.36000E01 -1.68000E00 -3.10400E01 -5.42700E01 -8.81600E01 -8.20100E01 -6.75900E01 -6.16600E01 -2.34900E01 8.80000E-01 3.10000E01 6.40200E01 7.00000E01 7.31000E01 7.42300E01 5.63300E01 4.68300E01 1.40000E01 -1.08500E01 -2.64500E01 -3.95000E01 -4.99100E01 -5.65900E01 -2.54200E01 -5.26000E00 9.53000E00 5.07700E01 8.52400E01 8.27000E01 9.10100E01 1.03500E02 7.22900E01 4.70600E01 1.70200E01 -7.95000E00 -2.56700E01 -6.39000E01 -7.52400E01 -6.28500E01 -6.90100E01 -5.02900E01 -1.94000E00 3.91000E00 2.49400E01 5.46000E01 6.41300E01 8.19000E01 7.21500E01 4.20400E01 4.09700E01 1.38400E01 -1.01300E01 -3.82000E00 -3.03000E01 -4.05600E01 -2.60900E01 -2.61400E01 -1.21600E01 1.22700E01 1.64500E01 3.47500E01 4.35900E01 3.16700E01 3.43600E01 2.41100E01 -4.70000E-01 -2.80000E00 -1.71900E01 -3.80000E01 -1.84100E01 -3.51900E01 -3.74500E01 -1.27400E01 -4.25000E00 7.51000E00 -Frame 160 2.56300E01 1.42900E01 1.85900E01 3.20100E01 7.82000E00 9.88000E00 -3.00000E00 -2.12700E01 -2.00800E01 -3.08300E01 -3.68800E01 -1.70800E01 -1.16500E01 -2.90400E01 -1.39400E01 -9.36000E00 1.03700E01 9.70000E00 -5.00000E00 -6.15000E00 -1.53300E01 -3.27800E01 -3.57400E01 -5.07600E01 -6.42000E01 -6.40000E01 -6.77400E01 -7.15400E01 -8.14000E01 -5.65000E01 -7.77900E01 -6.26800E01 -6.80600E01 -5.85600E01 -5.17300E01 -5.06600E01 4.47000E00 4.12800E01 7.91700E01 1.26140E02 1.74430E02 2.05040E02 2.96400E02 2.87310E02 1.87680E02 1.59810E02 7.09500E01 2.73000E01 -5.47000E01 -1.93160E02 -2.37700E02 -2.37380E02 -2.49820E02 -2.21410E02 -1.76920E02 -1.60900E02 -1.82500E01 6.58100E01 8.33900E01 1.65420E02 1.86820E02 1.85700E02 2.10370E02 1.38610E02 8.05100E01 6.95500E01 -4.80000E00 -4.84300E01 -5.23500E01 -8.53300E01 -5.02400E01 -3.50100E01 -5.32700E01 -8.04000E00 4.66000E01 5.88900E01 6.95100E01 2.74000E01 -1.50300E01 4.25000E00 -2.58700E01 -6.08900E01 -8.89300E01 -8.67500E01 -7.54200E01 -3.16700E01 -2.45400E01 -6.17000E00 5.57700E01 8.15700E01 9.10900E01 1.00820E02 8.47600E01 7.81300E01 5.32300E01 2.52000E00 -1.77500E01 -2.56200E01 -5.77000E01 -5.87100E01 -6.36900E01 -4.67600E01 -7.26000E00 1.04700E01 1.07400E01 1.30100E01 3.43400E01 4.03000E01 3.14100E01 -2.78000E00 -3.80200E01 -3.83100E01 -4.55700E01 -5.40100E01 -6.56600E01 -7.06100E01 -2.26500E01 4.81000E00 1.31100E01 3.86500E01 5.99400E01 7.78300E01 8.22000E01 7.66300E01 4.18200E01 3.89000E01 1.28600E01 -8.99000E00 -3.15000E01 -5.06700E01 -4.63800E01 -3.09100E01 -3.69300E01 -4.01000E01 -1.33000E00 1.36400E01 2.50600E01 3.28100E01 1.37700E01 2.11300E01 3.77000E01 1.27500E01 -6.98000E00 -9.31000E00 -1.07000E01 1.18800E01 8.15000E00 -1.57000E01 1.07300E01 3.09700E01 2.98100E01 4.05900E01 2.26700E01 1.51800E01 3.24500E01 5.23000E00 -3.83000E00 3.88400E01 -2.00000E-01 -2.04400E01 -Frame 160 4.17200E01 3.17700E01 1.44900E01 4.66700E01 1.78100E01 9.05000E00 -2.98000E00 -1.63700E01 -1.50000E-01 -3.14200E01 -8.46200E01 -3.33800E01 -1.05200E01 -3.89400E01 -5.20000E00 2.45900E01 2.12800E01 6.38500E01 6.46800E01 4.84800E01 5.87400E01 4.82700E01 2.94400E01 2.10100E01 -1.76900E01 -2.85600E01 -1.47300E01 -5.14500E01 -3.62500E01 -1.54000E00 -3.07500E01 -1.78300E01 1.05100E01 1.47200E01 2.40500E01 4.26500E01 1.87900E01 1.81800E01 9.54000E00 -1.43700E01 9.00000E00 -1.79100E01 -3.66300E01 -3.18900E01 -1.99700E01 -2.06600E01 1.65000E00 8.65000E00 1.86000E00 1.48600E01 1.22500E01 2.55000E00 2.55000E00 -6.45000E00 -5.72000E00 -1.79600E01 -3.65600E01 -1.87000E01 -7.27000E00 -1.04800E01 -2.97800E01 -1.86500E01 -1.01600E01 -1.04000E01 -1.66400E01 -1.00600E01 -3.22700E01 -2.61400E01 -1.08000E01 -4.19800E01 -6.60900E01 -4.68900E01 -7.30600E01 -6.69800E01 -6.46600E01 -8.82200E01 -6.34400E01 -5.98500E01 -9.41100E01 -8.03600E01 -6.51300E01 -7.63900E01 -3.29500E01 2.78400E01 5.84600E01 1.23950E02 1.80330E02 2.12270E02 2.50990E02 3.08670E02 2.50850E02 1.60020E02 8.12500E01 -1.00000E-02 -6.27600E01 -1.49370E02 -2.30500E02 -2.49910E02 -2.20680E02 -2.05340E02 -1.40340E02 -8.32100E01 -3.42500E01 5.02400E01 1.25280E02 1.14510E02 1.32290E02 1.48490E02 1.16050E02 8.65000E01 6.79600E01 2.17900E01 7.18000E00 1.11200E01 -2.08200E01 7.28000E00 3.32500E01 2.40000E01 2.64500E01 2.39600E01 3.80000E-01 1.60800E01 2.60000E-01 -4.40400E01 -7.66600E01 -8.72100E01 -8.10000E01 -7.75200E01 -6.18600E01 -3.96600E01 -8.74000E00 3.11400E01 5.72200E01 7.30500E01 7.73000E01 6.26100E01 5.14100E01 2.68200E01 1.45000E00 -4.70000E00 -1.50300E01 -4.26600E01 -3.31000E01 -2.21000E00 6.64000E00 2.47600E01 3.24200E01 3.12900E01 4.01000E01 1.91500E01 1.05400E01 8.66000E00 -4.22800E01 -6.77500E01 -5.39400E01 -6.76500E01 -6.37200E01 -6.06100E01 -5.23500E01 -1.27900E01 -Frame 160 2.90000E01 2.40500E01 2.09200E01 4.26700E01 3.40500E01 2.01300E01 2.87600E01 2.63000E00 -2.31000E00 9.60000E00 -9.13000E00 -8.43000E00 2.53000E01 1.40500E01 8.44000E00 2.76500E01 2.14300E01 9.00000E00 5.18000E00 -2.77600E01 -1.76900E01 -1.82900E01 -3.78900E01 -3.80600E01 -1.20000E00 -1.72000E01 -4.68000E00 2.22300E01 2.69500E01 2.77900E01 4.06300E01 2.68300E01 1.75800E01 2.70300E01 4.75000E00 -2.22000E00 -9.40000E00 -1.97900E01 -1.24800E01 -7.93000E00 -7.23000E00 6.50000E00 7.65000E00 1.83000E00 -1.70000E-01 5.27700E01 7.33000E01 8.40000E00 2.54900E01 5.70900E01 -4.38000E00 -2.17400E01 3.13900E01 -3.08600E01 -4.80000E01 1.38000E00 -1.97100E01 -1.94300E01 -7.12000E00 -2.74200E01 -1.23200E01 1.52600E01 -9.32000E00 1.03500E01 2.26200E01 3.25000E00 3.62800E01 3.83000E01 -1.65000E00 1.31700E01 2.94400E01 -1.38100E01 2.62000E00 3.75600E01 -6.45000E00 -4.81000E00 8.90000E-01 -1.62300E01 1.40000E-01 -1.39800E01 -4.55200E01 -3.99000E00 -2.71700E01 -4.60400E01 6.55000E00 2.76000E00 -3.11500E01 6.92000E00 2.31600E01 -6.12000E00 2.17000E01 1.93600E01 -1.20700E01 -1.46000E00 1.48000E00 -1.49000E00 -1.55000E00 -2.61000E00 -1.47000E01 -9.15000E00 -1.94200E01 -2.69900E01 -7.77000E00 -2.69500E01 -1.87000E01 3.82000E00 -1.89700E01 -2.54500E01 -1.10000E-01 -1.09900E01 -2.92000E01 -9.95000E00 -1.81000E01 -2.44900E01 -1.50600E01 -4.53300E01 -3.15000E01 -1.32200E01 -3.53700E01 -5.81800E01 -3.66500E01 -4.04300E01 -5.73000E01 -5.36500E01 -6.28500E01 -8.22900E01 -4.62700E01 -7.71100E01 -9.68500E01 -6.21300E01 -5.53000E01 -6.42300E01 -3.24000E01 -5.25800E01 -2.73600E01 6.06400E01 7.12800E01 1.04160E02 1.73940E02 1.96700E02 1.96970E02 2.63060E02 1.46950E02 4.81200E01 2.62000E01 -3.24100E01 -1.34790E02 -1.39200E02 -1.74610E02 -1.70950E02 -1.16020E02 -8.62900E01 -7.25700E01 -1.13700E01 1.17200E01 2.25000E01 6.15800E01 4.98000E01 4.76000E01 6.52800E01 -Frame 160 3.24400E01 2.45500E01 6.73900E01 4.54900E01 4.28700E01 6.61300E01 6.80500E01 4.69700E01 5.32000E01 1.75800E01 -1.81500E01 -3.99600E01 -4.74000E01 -8.10200E01 -7.46000E01 -6.69100E01 -7.69200E01 -3.41700E01 -1.60700E01 -1.24000E01 1.23900E01 2.39300E01 2.78000E01 2.57600E01 2.26300E01 -6.20000E-01 1.14100E01 -5.20000E00 -2.83200E01 -1.31300E01 1.45400E01 5.00000E-02 6.11000E00 3.23500E01 1.53700E01 3.98500E01 3.90500E01 8.19000E00 6.37000E00 1.54900E01 -1.61200E01 -3.56900E01 -3.98300E01 -5.00600E01 -4.95600E01 -3.80000E01 -4.00500E01 -1.71300E01 -7.49000E00 -5.55000E00 -1.55500E01 -1.28500E01 -7.06000E00 -8.09000E00 -1.51500E01 -1.64200E01 -6.72000E00 1.52800E01 2.19400E01 1.77800E01 2.44700E01 4.23400E01 2.87200E01 3.16500E01 1.26400E01 -4.97000E00 -1.91200E01 -1.26900E01 -3.20500E01 -3.99800E01 -1.41200E01 -5.45000E00 -2.05100E01 -8.02000E00 1.58600E01 -5.40000E-01 3.55000E00 1.76000E00 -6.09000E00 -1.80000E-01 1.29100E01 2.39000E00 2.54000E00 2.16900E01 6.41000E00 1.06500E01 1.50100E01 -5.51000E00 -2.66000E00 6.28000E00 1.14900E01 -5.15000E00 1.47000E01 5.61500E01 3.48300E01 2.68200E01 5.45400E01 6.30700E01 -1.01900E01 -3.37000E01 -1.09000E01 -3.33800E01 -8.15200E01 -4.30700E01 -3.13900E01 -4.13200E01 -2.65200E01 1.47600E01 1.43000E01 -1.41900E01 1.24500E01 2.69000E01 8.77000E00 1.00700E01 3.14000E01 3.36000E00 4.50000E-01 2.84500E01 2.02900E01 1.38600E01 1.42200E01 8.58000E00 -9.24000E00 -1.76000E01 -2.22000E01 -1.59200E01 -3.44300E01 -3.44800E01 -3.15000E01 -2.74000E01 -2.01500E01 -9.66000E00 -1.18400E01 -1.00800E01 3.74000E00 -1.02000E00 3.07000E00 -1.72000E00 -1.66000E00 -2.60000E00 -1.57000E00 -8.51000E00 -6.66000E00 -1.67500E01 -7.14000E00 -1.72300E01 -1.36200E01 -1.78900E01 -1.92800E01 -1.37000E01 -7.94000E00 -1.10000E01 -1.91500E01 -1.45400E01 -1.17800E01 -1.29300E01 -2.81100E01 -2.27400E01 -2.11900E01 -2.25800E01 -Frame 160 -2.80000E01 -3.55700E01 -3.43500E01 -3.20700E01 -1.87000E01 -3.59100E01 -3.26300E01 -2.92300E01 -2.57100E01 -4.80700E01 -3.90900E01 -4.98100E01 -5.08300E01 -5.38500E01 -4.19300E01 -5.26200E01 -4.46100E01 -5.63300E01 -4.33800E01 -6.20100E01 -6.31800E01 -5.23500E01 -5.11600E01 -5.79100E01 -5.88400E01 -2.17700E01 2.04400E01 3.79100E01 6.78600E01 1.35650E02 1.60390E02 1.37730E02 1.83230E02 1.08960E02 4.22900E01 -9.48000E00 -2.48400E01 -8.36500E01 -1.18200E02 -9.47100E01 -7.44100E01 -6.04200E01 -5.59500E01 -2.63000E01 -1.07200E01 -4.66000E00 5.80000E-01 3.97000E00 -7.55000E00 4.57000E00 1.70500E01 -1.10000E-01 8.19000E00 4.87300E01 3.94700E01 4.58800E01 4.54400E01 5.79400E01 4.97700E01 1.53000E01 1.75000E00 -8.22000E00 -1.14900E01 -3.98500E01 -4.10500E01 -3.62500E01 -3.62700E01 -1.52600E01 -1.45900E01 -1.28900E01 -1.13000E00 -1.50100E01 -1.23100E01 -5.52000E00 -4.52000E00 -2.24900E01 -2.60000E01 -5.60000E00 2.43000E00 -3.00000E-01 -8.12000E00 -3.61800E01 4.49200E01 2.34800E01 -1.26500E01 -7.89000E00 -5.98000E00 1.69900E01 -4.35000E00 -3.35000E00 -2.93200E01 -2.50700E01 2.63300E01 -8.71000E00 -3.78300E01 -5.82000E00 1.31800E01 2.75000E00 -3.00100E01 -1.87600E01 -9.15000E00 -3.22400E01 -3.10200E01 -9.74000E00 -2.48000E01 -2.33100E01 -1.17600E01 -1.78500E01 3.88000E00 -1.17300E01 -6.82000E00 2.32400E01 -4.80000E00 -5.37100E01 8.59100E01 1.27760E02 -7.52200E01 -1.37410E02 8.60000E00 1.85110E02 -2.81000E01 -1.49880E02 2.37100E01 9.86400E01 -1.92100E01 -9.16900E01 9.06700E01 4.35800E01 -8.40100E01 3.53000E00 3.17700E01 -3.81500E01 -1.52000E01 4.54700E01 2.97000E00 -3.28500E01 1.62500E01 2.98500E01 -2.81600E01 -2.69400E01 1.34000E00 1.64900E01 -1.19100E01 -2.11800E01 3.12800E01 5.73300E01 -2.98700E01 -1.57400E01 5.78400E01 3.56400E01 -3.82800E01 -5.45000E00 5.04000E01 3.89300E01 -4.69300E01 -2.84000E01 2.87300E01 1.56000E01 -5.49500E01 -4.46300E01 -Frame 160 4.20500E01 2.03700E01 -6.50000E01 -1.99500E01 5.45100E01 1.02200E01 -4.54500E01 -6.80000E00 3.30500E01 9.10000E00 -4.06000E01 1.12000E01 3.85900E01 -1.21000E00 -1.92400E01 2.19000E00 2.72800E01 1.91200E01 -1.93100E01 5.09000E00 7.24000E00 -1.25500E01 -2.69400E01 5.25000E00 1.14300E01 -9.21000E00 -1.24800E01 -5.84000E00 -9.90000E-01 3.01000E00 2.13000E00 2.02200E01 -5.15000E00 -3.00000E-01 -4.30000E00 -6.42000E00 1.40000E00 -5.54000E00 -4.69000E00 -2.81000E00 -6.87000E00 -3.05000E00 -4.11000E00 -1.12000E01 1.50000E00 5.59000E00 -1.82000E01 -2.47100E01 2.60000E00 6.75000E00 -1.09800E01 -1.72500E01 -1.07000E01 7.06000E00 1.36000E00 -2.15200E01 -6.09000E00 1.82000E00 1.09700E01 -1.46100E01 -3.09700E01 6.19000E00 6.49000E00 -1.12100E01 -2.24500E01 -1.30200E01 -7.29000E00 -1.63800E01 -1.47400E01 -1.10400E01 -1.62200E01 -1.55500E01 -7.85000E00 -1.39100E01 -1.71500E01 -1.14800E01 -2.06300E01 -1.50500E01 -2.32900E01 -7.77000E00 -1.87700E01 -1.41000E01 -2.52800E01 -2.47900E01 -1.62700E01 -4.48000E00 -3.30000E-01 -2.06000E00 1.11500E01 1.37500E01 2.74100E01 1.44600E01 1.50900E01 1.07200E01 3.20000E00 -9.56000E00 -8.71000E00 5.17000E00 5.47000E00 7.77000E00 1.91300E01 1.48200E01 5.36000E00 4.60000E00 1.18100E01 -8.77000E00 1.00200E01 -9.62000E00 -8.86000E00 -6.07000E00 -6.19000E00 -5.31000E00 6.60000E00 3.87000E00 3.05000E00 9.20000E00 -1.47000E00 4.53000E00 1.37100E01 3.16000E00 -1.72000E00 -1.57500E01 -4.20000E00 4.71000E00 -4.11000E00 -2.20000E00 -3.23000E00 -1.29000E00 6.07100E01 -5.84300E01 -3.02000E01 3.19300E01 3.89500E01 6.15000E00 -5.16700E01 -4.23000E00 6.80000E-01 6.74000E00 -4.02000E00 -1.21100E01 2.56000E00 2.96800E01 -3.33900E01 -1.53800E01 1.82000E01 1.80000E00 -3.41100E01 -1.11000E01 1.36300E01 -1.48900E01 -2.02800E01 -2.82000E00 -2.82000E00 -1.28200E01 -9.12000E00 -1.30000E00 -2.40000E-01 -1.01500E01 -3.36000E00 -2.36000E00 -Frame 160 -4.33000E00 -7.36000E00 -7.48000E00 -4.60000E00 -6.63000E00 -1.17200E01 -1.19600E01 -9.20000E00 -4.35000E00 -8.35000E00 -1.47000E00 -1.33800E01 -9.65000E00 1.20000E00 1.13800E01 2.86000E00 1.07000E00 6.22000E00 -1.14800E01 2.80000E-01 1.40000E00 -4.45000E00 3.52000E00 -1.27000E00 -2.10000E-01 8.80000E-01 4.00000E00 -3.79000E00 -2.82000E00 1.80000E-01 8.27000E00 6.60000E00 1.18700E01 2.12900E01 4.98000E00 1.60000E-01 6.19000E00 5.40000E00 1.35800E01 2.10000E01 1.66300E01 7.11000E00 3.29000E00 5.35000E00 1.47000E00 1.34700E01 2.83000E00 2.86000E00 -2.11000E00 8.77000E00 2.98000E00 1.00000E-02 5.95000E00 5.07000E00 -7.84000E00 -3.14000E00 -1.29000E00 6.62000E00 1.07700E01 -1.96000E00 -2.08000E00 9.80000E00 2.04000E00 4.04000E00 1.11000E01 1.73700E01 1.82000E00 -7.21000E00 4.49000E00 -1.45000E00 -5.70000E-01 5.34000E00 7.43000E00 -2.42000E00 -8.57000E00 1.00000E-01 6.04000E00 6.16000E00 1.12800E01 1.55000E00 4.52000E00 7.58000E00 5.73000E00 1.38200E01 -8.50000E-01 4.03000E00 4.06000E00 6.09000E00 5.18000E00 5.24000E00 2.30000E00 -4.73000E00 -3.97000E00 6.82000E00 -5.06000E00 -3.00000E-01 4.61000E00 4.67000E00 5.73000E00 -4.18000E00 6.61000E00 2.73000E00 7.30000E-01 1.67000E00 -1.36000E00 1.52000E00 4.49000E00 5.55000E00 4.64000E00 8.70000E00 6.88000E00 0.00000E00 1.91000E00 1.68800E01 4.30000E00 -1.06700E01 -8.09000E00 8.58000E00 3.76000E00 3.79000E00 -1.18000E00 3.70000E00 7.73000E00 -1.20000E-01 6.79000E00 -9.00000E-02 -8.18000E00 3.49000E00 -1.04800E01 -4.87000E00 -4.08000E00 -7.26000E00 -9.53000E00 -6.86000E00 3.90000E00 -1.00000E-02 3.96000E00 1.05000E00 -8.95000E00 -7.25000E00 -1.49000E00 -2.55000E00 -2.64000E00 -5.73000E00 -1.49100E01 -1.33600E01 -9.75000E00 -1.50200E01 -7.44000E00 -3.62000E00 3.20000E-01 -6.62000E00 3.23000E00 1.03800E01 3.74000E00 9.89000E00 9.22000E00 1.55200E01 2.60000E01 8.78000E00 -Frame 160 -2.98000E00 6.90000E00 -5.92000E00 -3.13000E00 2.27500E01 1.04100E01 1.46800E01 8.07000E00 8.25000E00 -3.57000E00 8.25000E00 1.44300E01 1.77900E01 -1.76000E00 1.09000E00 8.03000E00 3.18000E00 1.31800E01 4.48000E00 8.51000E00 -1.34000E00 6.51000E00 1.56000E01 1.49600E01 5.29000E00 2.32000E00 -1.17400E01 -9.22000E00 2.39000E00 7.36000E00 7.48000E00 6.60000E00 5.69000E00 5.75000E00 7.81000E00 4.93000E00 1.39600E01 1.12600E01 -1.53000E00 6.29000E00 3.35000E00 3.32000E00 1.12900E01 5.00000E-01 1.38000E00 -4.71000E00 4.02000E00 7.02000E00 6.11000E00 -2.83000E00 -8.04000E00 -9.40000E00 9.21000E00 1.39000E00 3.30000E-01 4.24000E00 -7.30000E-01 -1.85000E00 -2.00000E00 7.85000E00 3.00000E00 8.00000E00 -8.50000E-01 1.90300E01 -2.44900E01 4.67000E00 2.47300E01 -9.61000E00 1.00000E00 1.94000E00 -3.09000E00 1.73000E00 7.00000E-01 3.64000E00 1.06700E01 -8.09000E00 1.58000E00 1.35500E01 3.88000E00 1.69100E01 1.33000E00 9.27000E00 3.45000E00 5.45000E00 9.51000E00 6.69000E00 -8.22000E00 8.42000E00 9.57000E00 9.75000E00 1.79300E01 9.35000E00 1.35000E01 7.70000E-01 1.56500E01 1.49800E01 1.42800E01 2.15500E01 2.80300E01 8.69000E00 4.75000E00 2.69000E00 9.57000E00 5.66000E00 1.86300E01 2.89900E01 1.66500E01 6.92000E00 1.98900E01 2.02500E01 1.36100E01 1.47600E01 2.59400E01 2.45000E00 2.40000E-01 7.97000E00 1.09400E01 9.00000E00 0.00000E00 1.47300E01 9.91000E00 1.19400E01 2.20300E01 1.04200E01 1.14500E01 6.51000E00 4.42000E00 7.27000E00 8.21000E00 1.21800E01 1.52700E01 1.64500E01 2.66000E00 7.45000E00 3.39000E00 2.12100E01 2.25700E01 6.96000E00 1.18700E01 2.39300E01 1.63500E01 9.53000E00 5.50000E00 2.03500E01 1.56500E01 8.00000E-01 8.50000E00 1.44400E01 6.56000E00 1.14400E01 9.47000E00 6.44000E00 8.32000E00 2.42600E01 1.46800E01 1.08000E01 8.80000E00 1.07400E01 1.17400E01 1.87700E01 -Frame 160 7.01000E00 1.68900E01 1.70700E01 1.02500E01 1.22200E01 1.32500E01 7.31000E00 1.11900E01 1.11900E01 1.11900E01 6.19000E00 4.04000E00 1.08300E01 5.83000E00 1.46800E01 1.38000E01 1.18900E01 1.29200E01 1.09800E01 6.98000E00 1.38600E01 6.95000E00 6.83000E00 1.67100E01 1.68900E01 2.07000E00 1.18000E01 1.28300E01 1.18900E01 2.92000E00 4.68000E00 1.05000E01 7.50000E00 7.41000E00 1.13200E01 1.63500E01 1.05300E01 6.53000E00 1.04100E01 1.14100E01 -2.56000E00 1.30500E01 8.14000E00 2.08000E00 -1.16000E00 -4.90000E-01 5.21000E00 6.09000E00 1.40000E01 1.11500E01 1.21000E00 6.97000E00 1.09100E01 8.97000E00 5.97000E00 2.28800E01 1.03000E01 5.33000E00 9.21000E00 1.42100E01 9.36000E00 8.36000E00 2.23300E01 2.07200E01 2.60500E01 2.55300E01 9.98000E00 -4.05000E00 1.65000E01 2.26800E01 2.30400E01 2.54000E01 3.18200E01 1.94200E01 1.26300E01 1.66300E01 1.47500E01 2.81000E00 2.35100E01 2.38400E01 1.31700E01 3.17000E00 1.58700E01 2.09600E01 1.52000E01 1.52600E01 1.83200E01 1.84700E01 1.46200E01 2.16500E01 1.68900E01 1.98000E00 9.62000E00 1.65000E01 9.59000E00 1.24700E01 2.24400E01 1.97100E01 7.89000E00 1.07100E01 1.76200E01 1.27400E01 1.67100E01 1.48000E01 7.83000E00 6.65000E00 5.44000E00 1.12000E01 1.01400E01 1.50500E01 2.01100E01 8.32000E00 5.17000E00 1.49300E01 7.99000E00 2.84000E00 2.54000E00 1.24000E00 1.09100E01 1.28800E01 1.59100E01 9.03000E00 1.09400E01 9.91000E00 -2.15000E00 6.43000E00 9.28000E00 -7.80000E-01 -2.14000E00 -5.30000E-01 -1.86000E00 4.78000E00 8.63000E00 7.60000E00 1.25400E01 8.63000E00 5.60000E00 1.84800E01 1.07500E01 1.78000E00 1.75400E01 4.78000E00 4.63000E00 1.24800E01 1.25700E01 1.66000E00 4.42000E00 1.27000E00 8.03000E00 8.00000E00 3.97000E00 7.82000E00 8.79000E00 9.79000E00 1.48200E01 2.20000E01 6.39000E00 4.30000E00 1.81500E01 1.94200E01 -Frame 160 6.72000E00 2.56300E01 2.21100E01 -5.30000E-01 5.14000E00 2.39900E01 2.14100E01 7.74000E00 1.16500E01 1.06800E01 6.80000E-01 1.23800E01 1.64400E01 1.36200E01 3.71000E00 1.15000E01 1.25300E01 1.45900E01 8.71000E00 1.56500E01 1.08000E01 5.80000E00 3.65000E00 1.04400E01 1.94400E01 1.37100E01 1.48000E01 6.92000E00 -2.00000E-01 1.47000E00 1.02000E01 1.52000E01 8.35000E00 1.22900E01 6.35000E00 1.23000E00 1.29600E01 2.40500E01 1.14700E01 6.50000E00 6.38000E00 1.22600E01 1.33200E01 1.64100E01 1.75900E01 6.80000E00 1.68000E00 1.04100E01 1.04100E01 7.41000E00 4.32000E00 3.14000E00 -4.07000E00 -2.49000E00 1.71500E01 1.13900E01 7.45000E00 6.39000E00 4.30000E00 -4.85000E00 -4.27000E00 5.34000E00 1.02500E01 4.31000E00 9.19000E00 1.42200E01 4.40000E00 1.28000E00 2.07000E00 -2.11000E00 4.59000E00 8.50000E00 5.53000E00 3.47000E00 6.35000E00 1.03200E01 5.41000E00 2.35000E00 1.20000E00 9.02000E00 8.08000E00 9.11000E00 4.17000E00 6.08000E00 4.05000E00 3.96000E00 5.87000E00 8.84000E00 9.00000E-01 2.72000E00 6.00000E-01 -4.58000E00 4.09000E00 1.10300E01 -8.20000E-01 -8.03000E00 5.55000E00 9.55000E00 1.67000E00 -2.45000E00 -3.69000E00 -5.96000E00 -2.90000E-01 8.56000E00 8.68000E00 1.80000E00 -1.29000E00 -9.47000E00 1.10000E-01 -1.00000E-02 -5.13000E00 -1.40000E00 -1.55000E00 -7.00000E-01 -1.48200E01 -1.13600E01 -7.80000E-01 2.13000E00 1.13000E00 3.10000E00 1.21300E01 6.43000E00 7.55000E00 5.70000E00 7.79000E00 6.94000E00 1.06000E00 -2.00000E00 2.85000E00 -1.50000E-01 7.76000E00 1.59100E01 7.30000E00 1.94200E01 9.00000E-01 5.81000E00 5.87000E00 1.79300E01 1.03500E01 1.53000E00 9.44000E00 1.59000E00 7.50000E00 1.05900E01 1.07700E01 1.95000E00 -1.40000E-01 1.71000E00 6.62000E00 1.16800E01 4.89000E00 1.89000E00 -2.20000E00 5.90000E-01 8.47000E00 1.59000E00 8.50000E00 9.62000E00 1.17700E01 3.98000E00 -Frame 160 8.95000E00 7.07000E00 5.13000E00 1.91300E01 4.55000E00 -7.48000E00 4.13000E00 5.10000E00 8.10000E00 1.90000E-01 5.04000E00 4.00000E-02 4.89000E00 -1.10000E-01 -1.26000E00 4.56000E00 1.35600E01 -2.17000E00 -1.03800E01 4.17000E00 6.17000E00 6.23000E00 4.29000E00 -1.71000E00 -5.89000E00 -1.19000E00 9.66000E00 1.84000E00 -7.22000E00 8.45000E00 -2.40000E00 -1.58000E00 1.27000E00 6.21000E00 4.30000E00 5.33000E00 9.39000E00 5.57000E00 1.63000E00 -4.30000E-01 3.45000E00 4.50000E-01 7.36000E00 -5.20000E-01 -1.16400E01 -9.00000E-02 7.82000E00 -4.03000E00 7.76000E00 5.91000E00 6.00000E00 -2.91000E00 4.91000E00 9.70000E-01 2.91000E00 5.91000E00 7.00000E00 1.01200E01 -1.67000E00 -8.20000E-01 7.06000E00 -4.82000E00 2.94000E00 5.94000E00 4.03000E00 3.06000E00 4.06000E00 3.09000E00 5.09000E00 -4.85000E00 5.91000E00 4.00000E00 1.03000E00 -3.00000E-02 2.88000E00 6.88000E00 8.00000E00 2.15000E00 8.12000E00 2.70000E-01 9.18000E00 -6.40000E-01 -1.17600E01 6.79000E00 1.09100E01 5.15000E00 -3.79000E00 1.00000E00 -6.00000E-02 -8.15000E00 6.52000E00 -4.36000E00 4.30000E-01 -2.63000E00 -5.78000E00 9.80000E-01 -1.05000E00 -4.14000E00 -9.32000E00 -1.16500E01 -5.04000E00 7.80000E-01 -7.22000E00 -7.46000E00 -3.70000E00 -5.82000E00 -8.00000E00 -9.24000E00 -5.10000E-01 6.49000E00 1.70000E00 -5.24000E00 -4.39000E00 3.49000E00 -5.39000E00 -1.75400E01 -7.05000E00 2.77000E00 -1.91100E01 -1.66500E01 -4.10000E00 -3.16000E00 -3.19000E00 -8.22000E00 -8.40000E00 -7.58000E00 -4.73000E00 -1.47900E01 -6.15000E00 -5.24000E00 -1.83000E01 -1.47500E01 -5.08000E00 -4.11000E00 -1.11100E01 -5.32000E00 -6.35000E00 -1.34100E01 -8.68000E00 -5.80000E00 -6.83000E00 -9.89000E00 -1.20400E01 -8.25000E00 -1.33400E01 -7.58000E00 -1.16400E01 -8.82000E00 -1.59100E01 -8.21000E00 -1.22700E01 -1.34500E01 -3.66000E00 -9.57000E00 -1.56600E01 -4.93000E00 -1.48700E01 -6.11000E00 -1.00800E01 -1.01700E01 -Frame 160 -6.26000E00 -1.42300E01 -1.34400E01 -1.86200E01 -1.09500E01 -1.50400E01 -2.12500E01 -9.64000E00 -9.67000E00 -1.67000E01 -1.19400E01 -2.00300E01 -1.93600E01 -1.06600E01 -1.06900E01 -1.87200E01 -9.99000E00 -8.99000E00 -1.09600E01 -2.49900E01 -2.14400E01 -1.37700E01 -2.38600E01 -1.92500E01 -2.14900E01 -1.97900E01 -2.00300E01 -1.92700E01 -1.44800E01 -2.45400E01 -2.09000E01 -2.11400E01 -1.33800E01 -1.23800E01 -1.83500E01 -2.25000E01 -3.77000E00 5.30000E-01 6.95000E00 -2.45000E00 -1.71500E01 -2.43000E01 -2.26600E01 -2.09600E01 1.80000E00 2.25000E00 5.70000E00 -1.37600E01 -1.68200E01 3.00000E-02 -1.16100E01 -9.61000E00 -1.15500E01 -1.95500E01 -1.67900E01 -1.09400E01 -1.89100E01 -1.01200E01 -9.06000E00 -1.69700E01 -2.31200E01 -7.45000E00 -2.30000E00 3.00000E00 -1.05500E01 -1.75200E01 -2.37000E01 -1.90600E01 -1.62700E01 -8.39000E00 -4.27000E00 -1.30300E01 -2.00600E01 -1.73000E01 -7.45000E00 -2.30000E00 -8.00000E00 -1.58800E01 -1.30000E01 -1.40300E01 -2.70900E01 -3.54000E00 -6.27000E00 -2.10900E01 -1.43600E01 -1.34200E01 -1.04500E01 -8.39000E00 -8.27000E00 -1.61500E01 -1.62700E01 -2.33900E01 -1.57200E01 -9.81000E00 -6.72000E00 -5.54000E00 -1.23300E01 -1.43300E01 -2.53900E01 -1.17800E01 -1.17500E01 -2.37200E01 -1.70500E01 -7.17000E00 -1.59900E01 -1.60800E01 -9.17000E00 -7.05000E00 -1.38700E01 -1.99000E01 -6.11000E00 -1.09000E01 -1.78400E01 -2.99000E00 -1.26900E01 -1.66900E01 -1.18100E01 -1.07800E01 -1.47200E01 -1.17800E01 -1.57500E01 -1.28400E01 -1.48400E01 -2.09000E01 -1.01400E01 -1.10500E01 -8.99000E00 -1.38700E01 -7.90000E00 -5.75000E00 -1.45400E01 -6.60000E00 -3.42000E00 -5.15000E00 -1.09400E01 -1.19100E01 -7.91000E00 -1.57900E01 -5.91000E00 -9.73000E00 -1.16700E01 -8.67000E00 -3.58000E00 -1.63400E01 -8.49000E00 -1.04000E01 -1.73700E01 -1.25500E01 -8.58000E00 -7.49000E00 -1.03700E01 -5.34000E00 -1.51600E01 -1.72800E01 -9.46000E00 -5.40000E00 -1.22000E00 -2.92000E00 7.32000E00 -4.14000E00 -Frame 160 -1.29600E01 -2.20500E01 -2.34100E01 -1.88000E01 -1.10400E01 9.60000E-01 -3.68000E00 -1.34700E01 -1.45600E01 3.20000E-01 -5.35000E00 -2.52000E01 -1.86500E01 -1.08900E01 -2.58900E01 -1.43400E01 -4.30000E-01 -4.10000E00 -1.88900E01 -1.21300E01 -1.01600E01 -1.21300E01 -8.16000E00 -3.07000E00 -4.83000E00 -2.56500E01 -2.61000E01 -1.65500E01 -7.70000E00 -8.58000E00 3.51000E00 -1.30400E01 -1.21000E01 -1.61300E01 -1.82800E01 -1.24900E01 -1.15200E01 -9.52000E00 -1.44600E01 -2.05500E01 -1.48200E01 -9.91000E00 -2.48500E01 -8.24000E00 -1.41200E01 -1.51800E01 -9.27000E00 -5.18000E00 -9.97000E00 -1.79100E01 -1.50900E01 -2.51800E01 -1.65700E01 -6.69000E00 -1.55100E01 -1.36000E01 -1.86300E01 -2.78100E01 -1.92600E01 -1.14400E01 -1.93800E01 -1.35600E01 -1.25600E01 -1.55300E01 -1.25900E01 -1.15600E01 -1.35000E01 -7.50000E00 -1.93200E01 -1.15000E01 -6.44000E00 -1.82300E01 -1.73800E01 -2.05000E01 -1.17100E01 -1.46500E01 -1.86800E01 -7.83000E00 -7.65000E00 -1.14700E01 -1.04100E01 -2.23200E01 -1.95900E01 -2.17700E01 -1.20100E01 -1.19500E01 -1.68900E01 -1.49800E01 -1.70100E01 -1.31000E01 -1.20700E01 -7.01000E00 -1.18000E01 -1.67400E01 -1.98300E01 -1.00100E01 -2.08900E01 -8.10000E00 -1.92000E00 -2.25600E01 -2.78300E01 -1.72500E01 -1.03400E01 -9.22000E00 -2.00700E01 -1.92500E01 -9.40000E00 -1.02500E01 -1.81300E01 -4.25000E00 -1.59500E01 -1.40100E01 -1.00100E01 -5.89000E00 -1.76500E01 -1.87700E01 -1.49200E01 -2.19500E01 -1.91900E01 -2.13400E01 -9.55000E00 -9.40000E00 -1.02500E01 -1.31300E01 -2.01000E01 -2.32800E01 -1.25500E01 -1.14900E01 -9.40000E00 -8.25000E00 -1.30700E01 -1.90400E01 -8.19000E00 -1.30100E01 -7.98000E00 -1.08000E01 -1.57100E01 -1.97700E01 -1.39500E01 -1.19500E01 -7.89000E00 -1.37100E01 -1.07100E01 -1.96200E01 -1.18000E01 -5.74000E00 -2.05000E01 -7.71000E00 -7.53000E00 -8.35000E00 -1.62000E01 -1.52900E01 -5.35000E00 -9.11000E00 -1.29900E01 -6.99000E00 -1.58100E01 -7.90000E00 -1.27500E01 -6.75000E00 -Frame 160 -8.57000E00 -1.04500E01 -7.39000E00 -9.24000E00 -1.15000E00 -1.28200E01 -1.58500E01 -4.97000E00 1.24000E00 -1.63700E01 -1.05200E01 -8.49000E00 -5.40000E00 -1.02200E01 -7.19000E00 -3.07000E00 -6.83000E00 -5.71000E00 -1.35600E01 -1.06500E01 -5.65000E00 -5.50000E00 -2.35000E00 1.89000E00 -1.47500E01 -1.69000E01 -6.11000E00 -4.99000E00 -6.84000E00 -7.50000E-01 -1.14800E01 -8.54000E00 1.49000E00 2.82000E00 -1.28200E01 -1.49400E01 -4.12000E00 -1.29700E01 -1.60900E01 1.70000E00 -3.97000E00 -9.82000E00 -1.18500E01 -7.94000E00 -1.39100E01 -1.10600E01 -4.12000E00 -9.70000E-01 -7.30000E-01 -3.49000E00 -1.03400E01 -6.40000E00 -1.53400E01 -6.55000E00 -7.49000E00 -6.46000E00 -1.04000E01 -6.46000E00 -2.40000E00 -4.22000E00 -1.41000E01 -2.28000E00 -7.10000E00 -1.20700E01 -4.19000E00 -1.00700E01 -1.51300E01 -2.34000E00 -5.16000E00 -3.07000E00 -3.92000E00 -8.00000E-01 -2.59000E00 -4.44000E00 -4.35000E00 -1.26000E00 -5.08000E00 -2.00000E-02 -5.81000E00 -1.47800E01 -1.10200E01 -3.14000E00 -5.02000E00 -2.96000E00 -1.18400E01 -1.19900E01 1.86000E00 2.13000E00 -5.60000E00 1.43000E00 -8.33000E00 -9.39000E00 -9.48000E00 -2.57000E00 -1.04500E01 -4.57000E00 -5.10000E-01 3.67000E00 -1.40300E01 -7.27000E00 -9.30000E00 -5.39000E00 -7.36000E00 -8.39000E00 -7.45000E00 -2.48000E00 -5.36000E00 -3.33000E00 -9.24000E00 -5.33000E00 -1.43000E01 -3.54000E00 -3.45000E00 2.64000E00 -1.00900E01 -1.22100E01 -3.90000E-01 -8.21000E00 -1.02700E01 -6.39000E00 -1.03900E01 -9.51000E00 -7.60000E00 -1.26300E01 -9.81000E00 -8.90000E00 -8.96000E00 -7.02000E00 -1.10200E01 -1.31400E01 -5.32000E00 -7.26000E00 -1.12600E01 -1.03800E01 -1.24700E01 -9.62000E00 -2.06800E01 -5.07000E00 -2.98000E00 -1.83000E00 3.50000E-01 -4.41000E00 -1.43200E01 -9.53000E00 -5.90000E-01 6.62000E00 -9.60000E-01 -1.78000E00 -1.63000E00 5.20000E-01 -1.27000E00 -3.12000E00 -3.00000E-02 2.15000E00 -3.61000E00 4.50000E-01 2.63000E00 -3.13000E00 -2.07000E00 7.02000E00 -Frame 160 3.38000E00 2.62000E00 8.30000E-01 8.98000E00 -6.30000E-01 -9.54000E00 -4.72000E00 -4.75000E00 -6.78000E00 4.13000E00 -3.63000E00 7.37000E00 -3.00000E-01 -1.22100E01 -4.48000E00 -5.51000E00 8.43000E00 7.79000E00 -6.88000E00 -4.00000E00 -8.03000E00 2.82000E00 0.00000E00 6.09000E00 -6.40000E-01 -9.58000E00 -2.79000E00 1.21000E00 5.33000E00 2.57000E00 1.72000E00 -1.60000E-01 -1.11000E01 1.63000E00 3.75000E00 6.93000E00 4.20000E00 -5.62000E00 -7.74000E00 -3.92000E00 -6.98000E00 9.87000E00 -7.70000E-01 -6.74000E00 -8.89000E00 -1.21000E01 1.60000E00 9.72000E00 1.08000E00 3.17000E00 -4.68000E00 -3.77000E00 9.17000E00 -5.00000E-01 -2.47000E00 3.50000E00 -3.50000E-01 -3.20000E-01 4.71000E00 -3.11000E00 2.83000E00 -5.05000E00 2.83000E00 -5.05000E00 2.83000E00 1.19500E01 1.34000E00 8.40000E00 6.70000E-01 7.00000E-01 -6.27000E00 5.50000E-01 1.45800E01 8.03000E00 -4.73000E00 1.01200E01 3.42000E00 -2.49000E00 8.42000E00 1.06600E01 1.09600E01 1.02600E01 1.35300E01 1.18900E01 -2.81000E00 -9.60000E-01 1.19500E01 7.25000E00 7.40000E00 6.55000E00 1.26700E01 1.69700E01 4.39000E00 9.42000E00 1.36000E01 8.90000E00 8.05000E00 8.17000E00 5.29000E00 9.32000E00 7.47000E00 3.56000E00 8.53000E00 7.65000E00 8.74000E00 7.86000E00 1.59500E01 4.28000E00 1.22500E01 1.44600E01 1.73000E00 3.61000E00 1.75500E01 1.49100E01 2.11800E01 -4.37000E00 7.30000E00 1.53300E01 4.60000E00 1.54000E00 1.13900E01 1.45400E01 1.47800E01 3.02000E00 1.29000E01 1.20800E01 6.23000E00 1.92000E01 1.95600E01 6.92000E00 1.08900E01 1.69800E01 1.72500E01 2.15200E01 7.91000E00 2.88000E00 8.70000E00 4.70000E00 1.45800E01 2.87600E01 1.63600E01 2.15700E01 3.93000E00 4.75000E00 1.96000E01 1.79000E01 9.14000E00 1.51100E01 3.26000E00 1.00500E01 1.10500E01 1.00800E01 1.90800E01 1.63500E01 1.45300E01 1.26500E01 8.71000E00 1.16500E01 1.46800E01 9.80000E00 -Frame 160 1.07700E01 1.57700E01 1.49200E01 1.50400E01 2.51600E01 1.35800E01 1.36400E01 1.17000E01 5.70000E00 1.35200E01 1.65800E01 1.27300E01 1.47600E01 1.08500E01 8.82000E00 1.67300E01 2.18800E01 2.11800E01 1.44500E01 7.51000E00 4.36000E00 1.91200E01 2.63300E01 8.75000E00 1.16300E01 1.46000E01 2.16600E01 1.99300E01 1.11400E01 2.20800E01 2.53500E01 7.71000E00 1.75300E01 2.36500E01 9.95000E00 1.88300E01 1.79800E01 1.01000E01 1.29800E01 1.59500E01 1.80100E01 1.41300E01 1.51300E01 1.81600E01 7.28000E00 7.07000E00 1.68600E01 1.09500E01 9.86000E00 8.74000E00 1.15900E01 1.65300E01 1.16200E01 1.85600E01 2.17100E01 2.09500E01 1.81600E01 1.22800E01 2.42200E01 1.05200E01 4.40000E00 2.01000E01 4.28000E00 7.98000E00 1.98000E01 1.79800E01 1.31000E01 1.80700E01 1.41900E01 1.21900E01 1.01300E01 1.70100E01 1.41000E01 2.51000E01 2.64300E01 1.47900E01 1.17900E01 1.47000E01 1.17000E01 8.61000E00 1.94300E01 1.45800E01 9.58000E00 1.44300E01 2.04300E01 1.96100E01 9.76000E00 1.26100E01 1.65500E01 1.46100E01 1.96100E01 8.76000E00 1.65800E01 5.64000E00 1.73700E01 1.74600E01 1.65500E01 1.76100E01 6.70000E00 1.44600E01 1.74600E01 1.75500E01 7.64000E00 1.34300E01 1.34000E01 8.37000E00 1.41900E01 2.11900E01 1.94000E01 9.55000E00 1.64000E01 1.44600E01 2.34600E01 1.97300E01 7.88000E00 1.46700E01 1.36700E01 1.86400E01 7.76000E00 1.15500E01 1.84600E01 1.45800E01 1.15800E01 1.74900E01 1.95800E01 1.77300E01 1.18200E01 1.73000E00 1.53400E01 2.23700E01 1.56100E01 8.64000E00 1.34600E01 1.44300E01 1.64300E01 1.64900E01 1.45500E01 1.65500E01 1.76100E01 9.70000E00 1.45500E01 1.35500E01 8.52000E00 1.83400E01 2.74600E01 8.50000E-01 1.04300E01 1.13100E01 1.92200E01 1.33700E01 1.03400E01 9.22000E00 1.30700E01 1.40400E01 1.40400E01 1.60400E01 1.31000E01 9.07000E00 1.09200E01 8.83000E00 -Frame 160 1.26800E01 1.96500E01 1.38300E01 7.83000E00 1.26500E01 2.16200E01 1.38600E01 1.18600E01 2.80000E00 1.84700E01 4.62000E00 2.43500E01 1.56800E01 1.07400E01 1.46500E01 1.96800E01 6.86000E00 1.46500E01 1.06800E01 4.59000E00 1.43200E01 2.03500E01 1.25600E01 1.65300E01 1.56200E01 1.06800E01 1.25900E01 5.56000E00 1.03200E01 7.23000E00 1.10500E01 1.59900E01 2.00800E01 1.62900E01 1.43800E01 1.34100E01 8.41000E00 6.26000E00 1.10500E01 1.49900E01 1.40500E01 1.90800E01 1.52600E01 6.32000E00 1.11100E01 1.30500E01 9.05000E00 3.93000E00 1.96600E01 2.08700E01 8.11000E00 9.96000E00 1.88700E01 1.10500E01 4.99000E00 1.77500E01 1.59000E01 2.99000E00 6.69000E00 2.35100E01 1.28400E01 3.84000E00 1.55700E01 1.46600E01 9.72000E00 8.63000E00 1.85100E01 5.69000E00 1.14800E01 1.54500E01 1.75400E01 1.46900E01 2.75000E00 1.44500E01 1.05100E01 1.24500E01 1.74500E01 6.60000E00 7.42000E00 1.22700E01 1.92700E01 1.44800E01 1.54000E00 4.21000E00 1.69700E01 1.12000E00 8.79000E00 1.47000E01 7.79000E00 1.06700E01 1.36400E01 8.70000E00 4.61000E00 1.24000E01 1.04300E01 9.40000E00 1.63400E01 1.64900E01 3.64000E00 2.40000E00 1.31300E01 7.19000E00 2.07000E00 1.08000E01 1.08000E01 -2.00000E-01 9.47000E00 1.44000E00 1.31700E01 1.62600E01 3.44000E00 1.23000E00 1.19600E01 1.40200E01 9.14000E00 5.11000E00 2.96000E00 1.27500E01 7.84000E00 -4.22000E00 5.36000E00 8.24000E00 1.32100E01 1.03300E01 6.36000E00 2.12700E01 8.63000E00 2.60000E00 1.43900E01 1.05400E01 -2.43000E00 4.21000E00 1.10600E01 1.71200E01 6.36000E00 8.27000E00 1.24000E00 4.00000E00 -1.15000E00 9.55000E00 1.05800E01 2.64000E00 9.46000E00 1.34900E01 1.64000E00 8.43000E00 9.43000E00 6.46000E00 4.40000E00 -1.72000E00 -5.02000E00 9.59000E00 8.65000E00 -3.20000E-01 1.24400E01 3.59000E00 4.47000E00 4.38000E00 7.29000E00 2.29000E00 -Frame 160 1.14000E00 9.60000E-01 3.78000E00 1.06900E01 6.81000E00 5.81000E00 7.80000E-01 3.60000E00 6.51000E00 5.51000E00 -5.20000E-01 -1.73000E00 4.03000E00 4.97000E00 3.94000E00 6.88000E00 5.91000E00 2.91000E00 -3.18000E00 3.55000E00 7.49000E00 -2.45000E00 6.31000E00 5.34000E00 7.34000E00 4.00000E-01 1.25000E00 4.13000E00 4.10000E00 6.07000E00 6.10000E00 4.13000E00 1.10000E00 9.80000E-01 -1.11400E01 2.38000E00 -1.68000E00 2.14000E00 4.08000E00 -9.20000E-01 9.93000E00 8.11000E00 2.23000E00 6.17000E00 -1.77000E00 5.00000E-02 4.93000E00 -7.04000E00 5.63000E00 2.69000E00 -3.34000E00 -3.55000E00 3.24000E00 2.40000E-01 5.15000E00 3.21000E00 5.21000E00 -7.30000E-01 -9.85000E00 -8.24000E00 6.43000E00 -2.45000E00 -5.60000E00 4.16000E00 -7.80000E-01 7.13000E00 -7.20000E-01 -8.10000E-01 -6.90000E00 6.83000E00 -1.02000E00 -1.11000E00 -1.20000E00 -4.29000E00 -3.47000E00 -1.62000E00 -3.71000E00 -8.86000E00 1.84000E00 -5.13000E00 4.69000E00 1.81000E00 -3.16000E00 -1.28000E00 -3.34000E00 -2.46000E00 5.45000E00 -8.40000E00 1.33000E00 3.36000E00 -1.05500E01 -8.80000E-01 -2.91000E00 3.00000E00 -9.91000E00 1.79000E00 2.85000E00 -2.06000E00 8.80000E-01 1.91000E00 -3.03000E00 -3.12000E00 -6.21000E00 5.61000E00 -2.10000E-01 -4.21000E00 6.70000E-01 -1.03000E01 -9.60000E00 -3.87000E00 -9.60000E-01 -3.96000E00 4.95000E00 -1.87000E00 1.10000E00 -7.84000E00 -1.05000E00 -6.05000E00 -6.20000E00 -3.35000E00 -2.41000E00 -4.40000E-01 -3.41000E00 5.30000E-01 -2.41000E00 6.56000E00 -9.20000E00 -5.44000E00 4.44000E00 -7.38000E00 1.44000E00 -4.70000E-01 -7.44000E00 -5.62000E00 2.60000E-01 3.20000E-01 1.38000E00 -4.53000E00 -1.46200E01 -3.01000E00 4.96000E00 2.17000E00 -5.71000E00 -3.83000E00 -8.90000E-01 -6.86000E00 -6.01000E00 5.87000E00 -7.89000E00 -1.10700E01 -1.34000E00 1.69000E00 -2.19000E00 -4.19000E00 1.75000E00 -4.13000E00 -6.19000E00 -3.31000E00 2.66000E00 -3.19000E00 -Frame 160 -3.22000E00 4.75000E00 -2.04000E00 -1.00400E01 -1.28000E00 2.75000E00 -2.10000E00 -5.10000E00 -2.19000E00 -3.19000E00 -5.22000E00 1.69000E00 -1.71900E01 -9.64000E00 -1.85000E00 4.18000E00 -5.61000E00 -6.70000E00 -8.20000E-01 -5.76000E00 -4.85000E00 -8.91000E00 -4.09000E00 1.88000E00 -8.97000E00 -8.15000E00 1.70000E00 -5.15000E00 -7.21000E00 -3.30000E-01 -1.52400E01 -5.60000E00 2.34000E00 4.52000E00 -2.24000E00 -4.21000E00 -7.24000E00 -6.36000E00 -1.54500E01 -1.81000E00 2.50000E-01 -4.63000E00 -4.66000E00 -6.90000E-01 -2.60000E00 -5.57000E00 -2.63000E00 -3.60000E00 -1.16000E01 -6.84000E00 -5.93000E00 -6.99000E00 -6.08000E00 -2.14000E00 9.20000E-01 -1.09300E01 -4.14000E00 -2.14000E00 -9.08000E00 -5.23000E00 -1.26000E00 -1.11700E01 -7.38000E00 4.53000E00 -8.20000E00 -9.32000E00 -3.47000E00 -6.44000E00 -8.50000E00 -1.26200E01 3.14000E00 1.38000E00 -6.44000E00 -3.50000E00 -7.47000E00 -4.56000E00 -1.45600E01 1.40000E-01 -4.71000E00 -1.27100E01 -8.95000E00 1.93000E00 -8.86000E00 -1.49800E01 1.72000E00 -1.07000E00 -8.95000E00 -3.07000E00 -5.01000E00 -4.01000E00 -1.09800E01 -8.16000E00 -8.25000E00 -1.13400E01 -8.52000E00 3.39000E00 -6.34000E00 -1.03700E01 -1.52000E00 -6.40000E00 -1.14300E01 -4.61000E00 -4.58000E00 -7.55000E00 -1.06100E01 -1.27600E01 -6.97000E00 -9.00000E00 -5.09000E00 -2.06000E00 -1.09400E01 -1.20900E01 -5.27000E00 3.76000E00 -1.49400E01 -1.52100E01 -1.14800E01 -8.63000E00 -1.16900E01 -6.84000E00 -6.84000E00 -8.84000E00 -1.19000E01 -8.05000E00 -7.08000E00 -1.20800E01 -9.23000E00 -1.52900E01 -3.53000E00 -3.41000E00 -1.62900E01 -1.25600E01 -1.47100E01 -1.92000E00 -1.27400E01 -1.08900E01 -6.98000E00 -1.29500E01 -1.11000E01 -1.11900E01 -6.28000E00 -1.22200E01 -1.43400E01 -6.52000E00 -8.46000E00 -1.34600E01 -1.06100E01 -1.16700E01 -1.47600E01 -5.94000E00 -7.85000E00 -1.88200E01 -1.51200E01 -8.30000E00 -8.27000E00 -8.24000E00 -5.21000E00 -1.10900E01 -1.11500E01 -9.21000E00 -Frame 160 -1.52100E01 -8.39000E00 -1.73600E01 -1.06000E01 -8.63000E00 -1.26000E01 -1.36900E01 -5.81000E00 -1.56900E01 -1.18700E01 -5.93000E00 -1.08100E01 -7.84000E00 -1.57800E01 -1.89600E01 -1.02300E01 -1.02300E01 -1.02300E01 -7.23000E00 -1.61400E01 -1.43200E01 -1.54400E01 -1.45900E01 -8.71000E00 -1.36500E01 -6.74000E00 -1.16200E01 -9.65000E00 -7.62000E00 -1.35300E01 -1.36200E01 -9.71000E00 -1.06800E01 -1.16800E01 -1.07100E01 -1.67100E01 -7.89000E00 -1.08000E01 -1.48000E01 -1.49200E01 -1.10400E01 -6.04000E00 -1.18900E01 -1.19200E01 -1.29500E01 -5.01000E00 -9.83000E00 -1.38000E01 -1.38900E01 -9.98000E00 -1.89500E01 -1.51900E01 -1.03100E01 -6.28000E00 -1.21300E01 -8.16000E00 -1.00700E01 -1.10400E01 -1.20400E01 -1.10700E01 -9.07000E00 -4.01000E00 -1.58000E01 -1.29500E01 -1.00100E01 -3.98000E00 -1.47700E01 -1.48900E01 -1.00100E01 -1.39800E01 -7.07000E00 -6.95000E00 -8.30000E-01 -5.53000E00 -1.13800E01 -8.41000E00 -7.35000E00 -1.82600E01 -1.25000E01 -3.56000E00 -1.23500E01 -7.41000E00 -1.03200E01 -3.32000E00 -1.21100E01 -1.51700E01 -5.32000E00 -7.17000E00 -9.08000E00 -8.05000E00 -9.99000E00 -1.19900E01 -7.05000E00 -7.96000E00 -1.19000E01 -1.09600E01 1.00000E-02 -3.69000E00 -1.75100E01 -9.75000E00 3.25000E00 -1.53600E01 -8.54000E00 -1.51000E00 -1.12700E01 -1.33300E01 -6.45000E00 -4.36000E00 -9.21000E00 -1.12100E01 -2.27000E00 -6.00000E-02 -1.07900E01 -5.85000E00 -1.67600E01 -9.00000E00 -8.00000E00 -1.97000E00 -1.76000E00 -1.15500E01 -1.06400E01 -7.00000E-01 -8.46000E00 -1.34600E01 -3.61000E00 -1.46000E00 -1.22500E01 -1.23700E01 -6.49000E00 -1.43000E00 -6.22000E00 -6.16000E00 -9.10000E00 -4.13000E00 -3.01000E00 -4.86000E00 -1.17700E01 -1.48900E01 -1.10000E00 -7.89000E00 -1.28900E01 -4.04000E00 1.08000E00 -4.65000E00 -5.56000E00 -2.50000E00 -6.35000E00 -1.03200E01 -1.24100E01 -4.56000E00 -4.47000E00 -4.38000E00 -3.29000E00 -5.17000E00 -1.01100E01 -3.20000E00 -3.08000E00 -1.96000E00 -1.08100E01 -9.93000E00 -Frame 160 -1.02000E00 -8.40000E-01 3.40000E-01 4.55000E00 -1.21200E01 -2.23000E01 -1.57800E01 -6.05000E00 -5.02000E00 -6.96000E00 -1.96000E00 -1.48100E01 -5.00000E-02 -2.84000E00 -4.72000E00 -1.06600E01 -4.78000E00 2.28000E00 -1.14500E01 -1.06000E01 6.28000E00 -1.33300E01 -1.35400E01 -2.75000E00 -3.63000E00 -5.40000E-01 -6.36000E00 -7.36000E00 -1.23900E01 -4.57000E00 -8.51000E00 -9.57000E00 3.34000E00 -2.36000E00 -1.52400E01 -4.51000E00 -5.45000E00 -1.42000E00 -3.27000E00 -2.18000E00 -8.06000E00 -1.12000E00 -9.97000E00 -6.09000E00 -1.09000E00 -8.94000E00 -8.03000E00 -8.09000E00 -4.15000E00 -9.00000E-02 -1.19100E01 -1.09000E00 2.06000E00 -1.07000E01 -3.85000E00 4.21000E00 -7.49000E00 -7.55000E00 -7.61000E00 -8.67000E00 1.24000E00 -4.55000E00 -1.25200E01 -4.73000E00 1.30000E00 3.51000E00 -7.22000E00 -6.28000E00 -6.31000E00 -8.34000E00 -4.43000E00 -4.00000E-01 -8.25000E00 -1.03400E01 5.10000E-01 -5.31000E00 -7.31000E00 -6.37000E00 -3.40000E00 -1.34000E00 -7.22000E00 -6.28000E00 -5.31000E00 -2.31000E00 -1.02200E01 -9.37000E00 -9.49000E00 -9.61000E00 -1.73000E00 -6.10000E-01 -1.24600E01 -6.67000E00 -7.00000E-01 -7.55000E00 -3.61000E00 -4.55000E00 -1.52000E00 -4.40000E00 -9.37000E00 -6.49000E00 -7.52000E00 -4.58000E00 -5.50000E-01 -1.04000E01 -8.55000E00 -1.64000E00 -7.52000E00 4.20000E-01 6.00000E-01 -2.22000E00 -1.11300E01 -3.10000E-01 1.84000E00 8.05000E00 -8.56000E00 -1.56800E01 -6.01000E00 -8.04000E00 -6.13000E00 -3.16000E00 -5.10000E00 -1.10000E00 -2.98000E00 -1.09200E01 -2.10000E00 -3.01000E00 -5.95000E00 -2.98000E00 8.00000E-02 -9.77000E00 -9.20000E-01 -8.80000E00 -1.92000E00 -4.83000E00 -5.83000E00 -8.60000E-01 -1.74000E00 5.35000E00 -5.35000E00 -5.38000E00 -8.41000E00 2.47000E00 -4.32000E00 -2.32000E00 7.40000E-01 -9.11000E00 -7.26000E00 1.65000E00 2.83000E00 -4.96000E00 -3.99000E00 -8.99000E00 -2.14000E00 2.92000E00 -7.87000E00 -9.90000E-01 -1.90000E00 3.16000E00 3.37000E00 -1.42000E00 -Frame 160 1.64000E00 -1.21000E00 -8.15000E00 -8.30000E00 -4.50000E-01 -3.36000E00 -3.36000E00 2.64000E00 2.82000E00 -8.00000E00 3.85000E00 -2.94000E00 6.00000E-02 4.15000E00 -4.64000E00 3.30000E00 -6.52000E00 4.36000E00 6.57000E00 -1.60000E-01 -2.10000E00 -3.10000E00 8.70000E-01 -1.04000E00 2.99000E00 -3.86000E00 1.08000E00 -5.83000E00 6.05000E00 1.02900E01 -5.35000E00 -5.47000E00 5.41000E00 1.36200E01 7.00000E-02 4.10000E00 4.25000E00 -6.00000E-01 4.00000E-01 3.43000E00 -1.45000E00 5.52000E00 7.00000E-01 -3.27000E00 2.64000E00 -3.27000E00 5.64000E00 5.82000E00 -3.00000E00 4.91000E00 5.06000E00 -1.79000E00 1.15000E00 2.18000E00 2.24000E00 7.30000E00 3.51000E00 6.00000E-01 1.60000E00 1.63000E00 1.66000E00 3.69000E00 7.78000E00 -2.01000E00 5.90000E00 7.05000E00 1.23000E00 1.02300E01 -1.50000E00 4.10000E-01 8.38000E00 5.90000E-01 -2.44000E00 7.44000E00 5.62000E00 4.74000E00 3.83000E00 8.90000E-01 1.86000E00 2.86000E00 8.90000E-01 4.86000E00 -1.05000E00 -1.14000E00 1.47700E01 1.16000E00 -8.70000E-01 1.20400E01 2.34000E00 -3.66000E00 1.01600E01 7.40000E00 -3.45000E00 -6.30000E-01 1.12800E01 1.55000E00 3.52000E00 1.55000E00 5.52000E00 4.61000E00 -8.33000E00 4.34000E00 6.40000E00 3.52000E00 3.55000E00 1.55800E01 9.97000E00 -2.82000E00 1.00000E00 2.94000E00 -2.06000E00 -5.21000E00 1.15500E01 6.82000E00 -1.06000E00 6.82000E00 3.94000E00 -3.03000E00 7.90000E-01 1.47300E01 -2.91000E00 3.91000E00 5.94000E00 3.03000E00 5.03000E00 2.09000E00 3.06000E00 5.06000E00 2.12000E00 8.09000E00 1.24000E00 4.18000E00 1.21000E00 -2.85000E00 9.70000E-01 9.10000E-01 3.85000E00 4.88000E00 9.40000E-01 4.88000E00 2.94000E00 9.40000E-01 7.88000E00 2.03000E00 6.00000E00 9.00000E-02 -1.00000E00 4.88000E00 8.94000E00 3.12000E00 2.12000E00 5.09000E00 1.50000E-01 8.06000E00 -2.79000E00 -1.97000E00 9.88000E00 6.09000E00 6.18000E00 -4.73000E00 -Frame 160 5.03000E00 2.09000E00 -7.94000E00 6.73000E00 8.85000E00 6.03000E00 1.20000E-01 8.03000E00 3.18000E00 4.18000E00 6.21000E00 7.30000E00 -2.58000E00 2.40000E-01 5.15000E00 3.21000E00 9.21000E00 8.39000E00 5.54000E00 7.60000E00 1.72000E00 -1.34000E00 5.10000E-01 1.04200E01 -3.70000E-01 2.51000E00 4.48000E00 6.51000E00 4.60000E00 2.63000E00 4.60000E00 8.63000E00 5.78000E00 7.84000E00 -3.04000E00 3.75000E00 7.50000E-01 9.66000E00 1.28400E01 -1.89000E00 2.93000E00 6.90000E00 4.99000E00 -1.98000E00 3.84000E00 4.84000E00 9.87000E00 -9.50000E-01 8.90000E00 1.05000E00 -2.04000E00 4.78000E00 1.08100E01 -3.98000E00 6.78000E00 9.87000E00 -1.95000E00 1.08700E01 1.10800E01 5.29000E00 -9.68000E00 -1.10000E00 2.75000E00 1.37200E01 7.02000E00 5.11000E00 7.14000E00 5.23000E00 -7.40000E-01 -2.89000E00 7.90000E00 1.02000E00 3.93000E00 4.93000E00 3.96000E00 3.96000E00 8.96000E00 1.11100E01 5.32000E00 1.03500E01 -2.47000E00 4.32000E00 -4.68000E00 2.05000E00 7.99000E00 5.11000E00 3.14000E00 8.11000E00 7.23000E00 1.32000E00 7.23000E00 3.20000E-01 1.02000E01 1.13800E01 6.59000E00 -5.35000E00 6.35000E00 2.04100E01 -2.11000E00 -4.32000E00 1.41000E00 4.32000E00 -6.80000E-01 1.70000E-01 5.05000E00 6.08000E00 6.14000E00 7.20000E00 3.29000E00 4.26000E00 6.26000E00 1.03200E01 5.50000E00 1.45300E01 -2.17000E00 6.62000E00 2.68000E00 1.62000E00 5.53000E00 7.56000E00 6.50000E-01 9.53000E00 3.68000E00 9.65000E00 5.80000E00 1.83000E00 1.17400E01 1.95000E00 4.86000E00 7.86000E00 4.95000E00 3.95000E00 1.92000E00 -1.70000E-01 9.68000E00 4.83000E00 9.83000E00 5.98000E00 1.01000E00 9.89000E00 1.00400E01 2.19000E00 8.10000E00 9.19000E00 6.31000E00 3.40000E-01 7.19000E00 5.25000E00 4.25000E00 2.02200E01 6.70000E-01 1.65200E01 -5.15000E00 1.15200E01 -3.00000E-01 4.52000E00 1.14900E01 -2.33000E00 4.43000E00 1.84000E01 -Frame 160 9.79000E00 -2.09000E00 1.16700E01 5.85000E00 -3.15000E00 1.35800E01 3.82000E00 1.17600E01 -2.06000E00 7.00000E-01 2.25500E01 -8.94000E00 5.61000E00 1.36100E01 4.85000E00 3.82000E00 9.76000E00 1.08800E01 3.00000E-02 -2.15000E00 6.61000E00 4.64000E00 3.61000E00 1.05500E01 1.07000E01 5.85000E00 1.18500E01 9.03000E00 9.12000E00 -5.79000E00 6.85000E00 9.88000E00 0.00000E00 1.18200E01 1.20000E01 3.18000E00 1.40900E01 3.33000E00 4.24000E00 1.80000E-01 1.30000E01 1.32100E01 4.42000E00 3.60000E-01 1.21800E01 9.36000E00 2.45000E00 1.43300E01 9.57000E00 8.66000E00 8.72000E00 1.17800E01 6.93000E00 6.93000E00 5.93000E00 9.90000E00 4.99000E00 6.93000E00 1.59300E01 3.20000E00 2.08000E00 1.19300E01 3.08000E00 5.96000E00 1.29300E01 8.11000E00 6.14000E00 6.11000E00 1.10800E01 3.20000E00 3.08000E00 1.59600E01 8.23000E00 7.26000E00 1.22600E01 9.41000E00 1.64700E01 6.74000E00 4.71000E00 2.62000E00 8.47000E00 6.50000E00 5.47000E00 8.41000E00 7.44000E00 9.44000E00 4.50000E00 5.41000E00 6.35000E00 3.20000E-01 7.11000E00 2.11000E00 1.29600E01 6.14000E00 7.11000E00 9.11000E00 7.17000E00 7.17000E00 3.17000E00 6.05000E00 3.02000E00 5.90000E00 1.87000E00 7.20000E-01 5.54000E00 7.51000E00 9.54000E00 5.63000E00 4.60000E00 9.54000E00 2.63000E00 4.51000E00 1.14500E01 -4.00000E-01 -6.10000E-01 1.01800E01 3.30000E00 1.02100E01 -1.67000E00 4.09000E00 1.20300E01 1.12100E01 1.36000E00 5.21000E00 1.41800E01 4.20000E-01 -8.76000E00 1.27900E01 6.00000E00 4.00000E00 4.94000E00 4.91000E00 5.88000E00 1.88000E00 1.07600E01 6.91000E00 -1.06000E00 8.73000E00 3.82000E00 -4.24000E00 7.46000E00 1.35200E01 -1.24000E00 5.55000E00 1.55500E01 2.85000E00 -5.24000E00 2.43000E00 1.13400E01 -2.48000E00 -7.20000E-01 5.10000E00 1.00000E-01 -3.05000E00 6.71000E00 6.77000E00 3.83000E00 4.80000E00 1.80000E00 -1.29000E00 -Frame 160 2.53000E00 9.47000E00 -2.38000E00 4.10000E-01 -7.10000E-01 2.14000E00 -9.20000E-01 2.93000E00 2.90000E00 -4.13000E00 2.63000E00 3.60000E00 -3.40000E00 -2.61000E00 7.21000E00 -7.67000E00 0.00000E00 9.91000E00 -2.88000E00 7.94000E00 -6.91000E00 -5.21000E00 -3.45000E00 -5.63000E00 2.13000E00 5.13000E00 -2.78000E00 -2.93000E00 -8.00000E-02 -1.40000E-01 1.80000E00 -2.00000E-01 -2.26000E00 4.62000E00 -8.29000E00 4.10000E-01 -6.62000E00 -5.86000E00 2.93000E00 9.90000E-01 -1.01000E00 3.93000E00 -3.98000E00 -2.13000E00 -4.22000E00 4.63000E00 1.75000E00 -1.22000E00 2.72000E00 1.78000E00 -1.51900E01 9.33000E00 4.60000E00 -3.28000E00 1.60000E00 -3.37000E00 -6.49000E00 2.30000E00 1.36000E00 4.39000E00 -2.49000E00 -9.58000E00 -2.88000E00 1.03000E00 3.06000E00 -8.50000E-01 4.12000E00 3.24000E00 3.33000E00 -1.58000E00 -6.40000E-01 -8.67000E00 6.00000E-02 6.00000E-02 7.06000E00 1.27000E00 7.30000E00 2.51000E00 -1.43000E00 3.51000E00 -3.40000E00 -5.20000E-01 -5.55000E00 4.27000E00 3.90000E-01 3.90000E-01 2.39000E00 -1.55000E00 4.39000E00 5.10000E-01 4.51000E00 -3.70000E-01 -3.40000E00 4.48000E00 6.60000E00 1.78000E00 9.81000E00 8.00000E-02 -5.95000E00 -1.16000E00 7.80000E-01 1.78000E00 1.81000E00 1.84000E00 8.87000E00 1.10000E-01 -6.92000E00 7.84000E00 4.05000E00 -1.86000E00 2.05000E00 3.08000E00 -8.60000E-01 1.30800E01 -4.56000E00 -7.74000E00 -2.01000E00 9.00000E-01 9.00000E-01 4.90000E00 -2.98000E00 -3.10000E00 -2.20000E-01 3.75000E00 3.84000E00 -7.00000E-02 -2.10000E00 -1.19000E00 3.75000E00 -3.16000E00 -1.28000E00 6.60000E-01 -4.34000E00 -4.49000E00 4.36000E00 5.48000E00 -1.37000E00 -5.43000E00 2.39000E00 4.50000E-01 2.45000E00 -6.49000E00 6.30000E00 -3.52000E00 -4.64000E00 6.21000E00 1.39000E00 -8.58000E00 -2.85000E00 -2.94000E00 -6.03000E00 -2.21000E00 1.73000E00 -3.21000E00 1.70000E00 -4.24000E00 -5.36000E00 4.90000E-01 -4.48000E00 -2.60000E00 -Frame 160 1.34000E00 -6.00000E-01 -1.60000E00 3.37000E00 -5.51000E00 -6.66000E00 -6.84000E00 3.98000E00 -4.87000E00 -4.99000E00 8.90000E-01 -9.05000E00 -8.29000E00 5.00000E-01 -4.44000E00 -9.53000E00 9.23000E00 -4.40000E-01 -7.41000E00 1.41000E00 -7.50000E00 -8.68000E00 -3.89000E00 -2.95000E00 2.00000E-02 1.08000E00 -4.83000E00 -4.92000E00 -3.01000E00 -7.04000E00 -8.19000E00 -3.70000E-01 3.69000E00 -5.13000E00 -1.72200E01 -2.67000E00 -4.67000E00 -2.73000E00 -8.73000E00 2.09000E00 -7.60000E-01 -7.70000E00 -6.85000E00 -9.97000E00 -7.18000E00 -5.30000E00 -2.36000E00 -1.13300E01 -5.70000E-01 3.52000E00 -1.32700E01 -9.57000E00 -7.75000E00 -1.28700E01 -8.14000E00 -2.26000E00 -7.20000E00 -1.12900E01 5.00000E-01 3.65000E00 -1.51100E01 -5.44000E00 2.53000E00 -1.62600E01 -3.62000E00 -3.59000E00 -7.56000E00 -1.06500E01 -5.83000E00 -8.86000E00 -2.98000E00 -1.92000E00 -6.83000E00 -8.90000E-01 -8.77000E00 -8.90000E-01 3.23000E00 -8.53000E00 -8.65000E00 -1.07700E01 -9.50000E-01 -3.83000E00 -1.48000E01 -4.10000E00 -1.07000E00 -6.95000E00 -7.01000E00 -1.07000E00 -4.95000E00 -7.95000E00 -4.00000E-02 -1.28900E01 -1.11300E01 -2.31000E00 -3.22000E00 -1.81600E01 4.45000E00 -5.25000E00 -6.25000E00 -5.28000E00 -7.28000E00 -7.34000E00 -8.40000E00 -3.49000E00 -9.43000E00 -1.05500E01 -4.70000E00 -6.70000E-01 -1.15200E01 -7.70000E00 -2.76000E00 -5.67000E00 -4.67000E00 3.60000E-01 -4.46000E00 -1.04300E01 -1.45800E01 -6.85000E00 -4.88000E00 -8.85000E00 -1.94000E00 -2.82000E00 -8.73000E00 -5.82000E00 -8.20000E-01 -8.67000E00 -7.76000E00 -9.82000E00 -5.94000E00 -8.94000E00 -9.03000E00 -7.12000E00 -1.11500E01 -1.30000E00 -2.15000E00 -2.03000E00 -8.91000E00 0.00000E00 -8.82000E00 -1.19100E01 -3.09000E00 2.00000E00 -3.76000E00 -9.70000E00 -1.48200E01 -9.00000E-02 -8.91000E00 -2.00000E00 -8.80000E-01 -5.73000E00 -5.73000E00 -7.73000E00 -2.79000E00 -9.70000E00 -2.82000E00 1.27000E00 -6.52000E00 -5.55000E00 -3.55000E00 -3.49000E00 -Frame 160 -5.43000E00 -4.30000E-01 -1.52800E01 -8.58000E00 -2.67000E00 -5.58000E00 -4.58000E00 -5.50000E-01 -3.40000E00 -9.34000E00 -7.46000E00 -5.20000E-01 1.63000E00 -7.16000E00 -9.22000E00 6.60000E-01 -2.16000E00 -8.07000E00 -8.16000E00 7.50000E-01 -3.07000E00 -3.01000E00 5.00000E-02 -7.80000E00 -5.89000E00 -9.20000E-01 -3.80000E00 -9.77000E00 -6.92000E00 -3.98000E00 1.05000E00 -3.77000E00 -2.74000E00 1.32000E00 -9.50000E00 -2.65000E00 -4.59000E00 -6.59000E00 -8.65000E00 3.23000E00 -2.53000E00 -6.47000E00 -5.53000E00 -1.56000E00 -1.24700E01 -1.71000E00 -1.62000E00 -3.53000E00 5.00000E-01 -6.35000E00 -6.41000E00 5.30000E-01 -5.32000E00 -8.35000E00 -4.70000E-01 6.50000E-01 -6.20000E00 -2.26000E00 -1.20000E00 1.89000E00 7.00000E-02 -3.81000E00 6.19000E00 -8.51000E00 -5.66000E00 1.28000E00 -1.15700E01 -1.81000E00 -4.75000E00 1.22000E00 -3.63000E00 -4.63000E00 -6.60000E-01 -7.57000E00 2.31000E00 -4.51000E00 -4.54000E00 -5.70000E-01 3.52000E00 -7.27000E00 -5.39000E00 4.55000E00 -1.22100E01 -6.48000E00 3.43000E00 -1.36000E00 -2.30000E00 -4.27000E00 -2.30000E00 3.73000E00 -8.06000E00 -5.21000E00 -2.27000E00 -8.24000E00 -5.39000E00 2.55000E00 6.73000E00 -9.97000E00 -2.18000E00 -1.15000E00 -7.09000E00 -6.21000E00 -3.00000E-01 -2.21000E00 -8.18000E00 6.70000E-01 -6.21000E00 -2.30000E00 -4.27000E00 7.00000E-01 -3.18000E00 -7.18000E00 6.70000E00 5.00000E00 -1.37600E01 -1.30900E01 2.61000E00 1.79000E00 -8.06000E00 -1.21000E00 -8.15000E00 7.00000E-01 -6.18000E00 -8.27000E00 5.80000E-01 -4.30000E00 3.67000E00 -6.12000E00 -3.21000E00 3.79000E00 -7.00000E00 -8.12000E00 -2.27000E00 -2.24000E00 -6.21000E00 -1.30000E00 1.76000E00 -1.09000E00 -9.03000E00 -2.21000E00 3.82000E00 -2.97000E00 -3.97000E00 -7.00000E00 -1.12000E00 9.40000E-01 -4.94000E00 -5.00000E00 -6.06000E00 -8.15000E00 -2.30000E00 3.73000E00 2.94000E00 -9.88000E00 -6.09000E00 2.82000E00 -3.00000E00 -1.00000E01 1.79000E00 -3.06000E00 -Frame 160 -1.06000E00 8.00000E00 -6.67000E00 -3.79000E00 -4.82000E00 -1.88000E00 -9.85000E00 -5.06000E00 8.80000E-01 -5.00000E00 -6.06000E00 1.85000E00 -1.00000E00 -3.94000E00 1.03000E00 -2.85000E00 2.15000E00 -5.70000E00 -3.79000E00 -4.82000E00 -4.88000E00 -3.94000E00 1.03000E00 -6.85000E00 -6.97000E00 4.91000E00 -6.85000E00 3.00000E-02 8.12000E00 -2.55000E00 -1.15500E01 -3.82000E00 6.15000E00 2.42000E00 -1.24300E01 -4.73000E00 -4.79000E00 -7.85000E00 -1.00000E00 2.06000E00 -7.90000E-01 -1.73000E00 2.30000E00 -3.55000E00 -5.58000E00 -6.70000E-01 -9.61000E00 -1.08200E01 -1.06000E00 3.00000E00 -2.82000E00 -6.82000E00 1.06000E00 -1.82000E00 -5.79000E00 -3.88000E00 1.09000E00 -5.79000E00 -4.88000E00 6.00000E-02 -5.85000E00 -4.94000E00 -1.00000E00 -9.40000E-01 -1.88000E00 -2.85000E00 -2.85000E00 -3.85000E00 -1.88000E00 -2.85000E00 4.15000E00 -5.64000E00 -9.73000E00 -9.40000E-01 1.12000E00 2.24000E00 4.39000E00 -4.40000E00 -5.46000E00 2.45000E00 -1.40000E00 6.30000E-01 -5.28000E00 -8.37000E00 -3.55000E00 1.42000E00 2.54000E00 -1.31000E00 -4.28000E00 -6.34000E00 -4.60000E-01 -6.40000E00 -5.52000E00 2.39000E00 -1.46000E00 -6.43000E00 2.45000E00 -3.40000E00 -5.43000E00 -2.52000E00 3.48000E00 3.66000E00 -9.16000E00 -2.37000E00 5.63000E00 -5.13000E00 -3.22000E00 3.75000E00 1.93000E00 -2.95000E00 -3.98000E00 -4.04000E00 9.00000E-01 -1.00000E-02 -6.95000E00 4.90000E00 -1.89000E00 -1.89000E00 1.11100E01 5.00000E-01 -5.44000E00 -1.56000E00 4.40000E-01 3.50000E00 -4.35000E00 5.60000E-01 -4.38000E00 -1.47000E00 6.53000E00 -2.30000E-01 -4.20000E00 7.10000E-01 4.77000E00 1.95000E00 -3.96000E00 2.95000E00 2.07000E00 8.16000E00 1.44300E01 -8.12000E00 -5.36000E00 -4.51000E00 -5.63000E00 5.22000E00 -1.60000E00 7.37000E00 5.61000E00 -2.21000E00 4.73000E00 2.88000E00 -3.03000E00 -3.12000E00 3.79000E00 9.10000E-01 6.94000E00 1.15000E00 7.18000E00 -7.61000E00 1.15000E00 4.18000E00 -Frame 160 5.30000E00 3.45000E00 7.54000E00 -7.25000E00 3.51000E00 9.60000E00 3.87000E00 1.96000E00 -1.00000E-02 -2.04000E00 5.87000E00 5.02000E00 6.14000E00 3.29000E00 -6.50000E-01 5.29000E00 4.41000E00 5.50000E00 -3.38000E00 -4.53000E00 2.29000E00 8.32000E00 9.53000E00 3.77000E00 1.83000E00 -2.17000E00 1.71000E00 5.71000E00 -2.17000E00 7.71000E00 5.89000E00 -9.90000E-01 7.92000E00 1.01000E01 -2.66000E00 1.19000E00 1.16000E00 1.51300E01 8.52000E00 -1.30000E00 7.58000E00 -1.27000E00 6.10000E-01 1.25500E01 1.08500E01 2.09000E00 -3.94000E00 4.85000E00 8.91000E00 1.10900E01 -6.67000E00 9.03000E00 8.21000E00 -1.64000E00 1.02100E01 9.42000E00 -4.40000E00 -2.64000E00 1.11800E01 4.42000E00 5.45000E00 7.51000E00 2.63000E00 -4.00000E-01 1.04800E01 9.69000E00 8.70000E-01 7.80000E-01 3.69000E00 4.69000E00 5.72000E00 6.78000E00 4.87000E00 6.90000E00 5.99000E00 9.05000E00 4.20000E00 7.20000E00 1.29000E00 9.20000E00 -6.50000E-01 4.20000E00 7.20000E00 2.29000E00 7.23000E00 4.32000E00 -6.80000E-01 5.17000E00 8.20000E00 1.13200E01 8.53000E00 -7.35000E00 7.29000E00 9.38000E00 1.53000E00 2.44000E00 8.38000E00 5.00000E-01 7.38000E00 7.47000E00 4.56000E00 1.25600E01 -2.20000E00 -2.41000E00 1.23800E01 2.62000E00 2.56000E00 1.25000E01 7.40000E-01 1.62000E00 9.53000E00 6.68000E00 7.74000E00 8.83000E00 -5.00000E-02 2.80000E00 6.74000E00 6.80000E00 2.86000E00 8.80000E00 4.92000E00 2.92000E00 -2.14000E00 1.16500E01 -1.14000E00 1.68000E00 7.59000E00 1.16800E01 7.89000E00 5.98000E00 4.01000E00 -2.00000E-02 1.83000E00 1.17400E01 6.95000E00 1.01000E00 1.89000E00 -2.00000E-01 1.06500E01 6.83000E00 5.89000E00 2.92000E00 5.86000E00 1.38900E01 1.61600E01 4.49000E00 4.60000E-01 7.31000E00 4.37000E00 7.34000E00 -2.60000E00 -8.40000E-01 4.98000E00 6.98000E00 2.04000E00 7.95000E00 4.04000E00 4.01000E00 8.98000E00 6.10000E00 -Frame 160 2.13000E00 2.04000E00 -3.05000E00 4.71000E00 6.71000E00 8.77000E00 9.89000E00 4.04000E00 1.01000E00 8.89000E00 6.01000E00 8.04000E00 1.21300E01 3.34000E00 5.28000E00 4.28000E00 2.25000E00 5.16000E00 5.16000E00 1.60000E-01 4.01000E00 7.98000E00 6.07000E00 1.21000E01 3.10000E-01 7.16000E00 2.22000E00 5.13000E00 7.13000E00 1.01900E01 -6.60000E-01 2.16000E00 9.07000E00 1.51900E01 2.49000E00 4.00000E-01 8.25000E00 -1.66000E00 5.13000E00 4.13000E00 1.01000E01 1.02500E01 9.40000E00 5.52000E00 -1.48000E00 7.31000E00 3.70000E-01 2.22000E00 4.13000E00 5.10000E00 6.10000E00 9.13000E00 -1.75000E00 9.04000E00 9.16000E00 4.28000E00 3.25000E00 3.19000E00 5.13000E00 5.13000E00 1.13000E00 3.01000E00 7.95000E00 8.04000E00 3.13000E00 1.00700E01 -2.78000E00 9.80000E-01 4.86000E00 6.86000E00 4.92000E00 1.59200E01 4.25000E00 2.22000E00 6.13000E00 1.16000E00 4.00000E-02 4.89000E00 7.89000E00 5.98000E00 3.01000E00 5.95000E00 -1.02000E00 5.80000E00 6.83000E00 5.89000E00 2.92000E00 7.86000E00 6.95000E00 3.01000E00 8.95000E00 5.07000E00 6.07000E00 -9.00000E-01 3.92000E00 9.89000E00 3.04000E00 4.98000E00 2.98000E00 1.09200E01 9.10000E00 2.22000E00 6.13000E00 4.16000E00 5.13000E00 1.01300E01 5.28000E00 2.80000E-01 -1.87000E00 4.92000E00 5.92000E00 6.95000E00 1.00100E01 5.16000E00 1.16000E00 3.04000E00 4.98000E00 6.98000E00 3.04000E00 1.09800E01 6.16000E00 7.19000E00 6.25000E00 4.28000E00 2.25000E00 2.16000E00 7.07000E00 1.01300E01 1.28000E00 8.16000E00 5.25000E00 6.25000E00 3.28000E00 -1.78000E00 9.01000E00 5.13000E00 -8.70000E-01 5.95000E00 -2.00000E-02 8.30000E-01 5.71000E00 5.74000E00 -2.30000E-01 8.62000E00 4.74000E00 1.74000E00 6.65000E00 -2.90000E-01 -1.44000E00 3.38000E00 7.35000E00 5.44000E00 -5.30000E-01 4.32000E00 2.32000E00 3.26000E00 -7.70000E-01 1.08000E00 4.99000E00 2.02000E00 -Frame 160 3.96000E00 7.96000E00 -6.92000E00 3.75000E00 1.75000E00 -1.31000E00 5.40000E-01 3.45000E00 6.45000E00 -6.46000E00 6.24000E00 3.30000E-01 -3.76000E00 1.03000E00 5.97000E00 3.06000E00 2.06000E00 7.03000E00 -8.50000E-01 -1.97000E00 -4.12000E00 1.67000E00 5.64000E00 -1.27000E00 3.61000E00 1.06400E01 -1.20000E-01 -2.21000E00 1.64000E00 1.61000E00 -4.42000E00 -3.63000E00 6.19000E00 5.31000E00 -2.60000E00 5.25000E00 1.34000E00 -5.69000E00 7.00000E-02 -1.99000E00 4.89000E00 6.98000E00 -2.87000E00 9.80000E-01 -4.05000E00 -2.30000E-01 2.71000E00 1.74000E00 -2.60000E-01 -4.32000E00 -4.50000E00 2.32000E00 -2.65000E00 -8.77000E00 1.93000E00 3.96000E00 -3.95000E00 -8.10000E00 -3.70000E-01 -4.00000E-01 -1.43000E00 3.51000E00 -1.40000E00 -9.46000E00 7.24000E00 -4.55000E00 -7.70000E00 3.06000E00 -5.85000E00 -3.03000E00 -1.12000E00 -5.15000E00 -3.00000E-01 7.00000E-01 -2.70000E-01 -5.27000E00 -6.42000E00 1.40000E00 -4.54000E00 3.40000E-01 4.37000E00 -1.84800E01 -2.02000E00 3.95000E00 -9.00000E-01 -3.90000E00 -4.99000E00 8.90000E-01 -2.05000E00 -3.08000E00 -6.14000E00 -2.90000E-01 3.74000E00 -5.11000E00 -8.23000E00 -3.44000E00 -1.50000E00 -5.00000E-01 2.53000E00 -4.35000E00 -4.40000E-01 5.90000E-01 -5.35000E00 -5.47000E00 -3.59000E00 -2.65000E00 -3.68000E00 -4.74000E00 -1.83000E00 2.17000E00 -6.71000E00 5.14000E00 -5.65000E00 2.30000E-01 -1.17100E01 -7.01000E00 -1.16000E00 -3.13000E00 -8.16000E00 -3.40000E-01 -8.28000E00 -4.46000E00 4.80000E-01 -8.43000E00 -2.61000E00 -6.10000E-01 -3.55000E00 -2.58000E00 -1.58000E00 -7.55000E00 -1.70000E00 -6.70000E-01 -2.61000E00 -7.61000E00 -4.76000E00 2.18000E00 -1.67000E00 -1.06400E01 -1.88000E00 9.15000E00 -2.24900E01 4.49100E01 1.42350E02 -1.19330E02 -8.49900E01 1.07490E02 -2.18000E00 -1.12240E02 7.04000E01 7.06200E01 -9.72200E01 -2.51600E01 6.41500E01 -2.68400E01 -4.16200E01 1.61800E01 1.75000E00 -1.21300E01 -9.43000E00 -1.64000E00 -Frame 160 1.43900E01 2.69000E01 -1.52300E01 -2.26500E01 2.87200E01 4.65000E00 -4.01700E01 -1.13400E01 1.63900E01 -1.04000E00 -3.00100E01 1.21500E01 1.86000E01 -5.77000E00 -1.08900E01 1.84000E00 2.09600E01 7.65000E00 -2.70800E01 2.14000E00 2.12600E01 -1.00500E01 -2.43200E01 7.99000E00 2.32900E01 -6.96000E00 -1.31400E01 8.50000E00 1.18000E01 3.19000E00 -2.26900E01 6.50000E-01 2.97100E01 -2.36000E00 -1.14200E01 -7.50000E-01 2.02500E01 -1.11200E01 -3.24500E01 2.55900E01 2.54000E01 -3.38200E01 -1.28400E01 3.18000E01 5.79000E00 -2.10300E01 7.34000E00 9.58000E00 -2.12000E00 -1.18000E00 -9.21000E00 5.52000E00 1.07000E01 3.00000E-02 3.00000E-02 -2.97000E00 6.94000E00 -5.85000E00 2.97000E00 6.00000E-02 -5.94000E00 -4.12000E00 2.76000E00 1.85000E00 -3.09000E00 1.82000E00 -2.12000E00 8.20000E-01 -2.15000E00 -7.21000E00 1.05800E01 3.91000E00 -4.97000E00 8.88000E00 1.15000E00 -8.20000E-01 -8.50000E-01 -5.88000E00 4.94000E00 1.09000E00 1.12000E00 1.91500E01 -1.89280E02 2.76020E02 1.65450E02 -6.72690E02 4.82880E02 7.87300E01 -2.34990E02 -6.11900E01 2.94040E02 -1.54020E02 -2.04790E02 4.10060E02 -3.02460E02 -6.73000E00 1.89150E02 -6.10900E01 -1.47010E02 1.23550E02 6.13600E01 -1.01810E02 -4.99300E01 1.31600E02 -1.83800E01 -8.89800E01 7.93200E01 -1.72500E01 8.21000E00 -2.55000E00 -1.86400E01 1.37900E01 3.22100E01 -1.48300E01 -5.53100E01 4.00100E01 3.72400E01 -6.76500E01 -3.72000E00 5.81900E01 -3.00400E01 -1.59700E01 -7.45000E00 4.63400E01 -1.52500E01 -3.87300E01 3.41000E01 -1.58500E01 1.16700E01 -9.70000E-01 -2.40000E01 2.92800E01 4.18000E00 -3.67000E01 8.19000E00 1.44600E01 2.91000E00 -3.70000E01 1.89000E00 2.69800E01 -1.21800E01 -8.54000E00 2.20000E-01 1.42500E01 -3.00000E-01 -2.43000E01 8.98000E00 1.42800E01 -1.82700E01 -2.81000E00 -5.87000E00 5.98000E00 -2.81000E00 -1.28700E01 -1.23000E00 1.07700E01 -1.08700E01 -4.17000E00 3.74000E00 1.08900E01 -Frame 160 -5.75000E00 -1.59000E01 2.65000E00 2.77000E00 -1.21100E01 -8.44000E00 1.33500E01 -3.20000E00 -2.60000E-01 -5.23000E00 -3.35000E00 -8.41000E00 -6.20000E-01 -6.59000E00 -4.74000E00 1.01700E01 -9.47000E00 -4.71000E00 6.20000E00 -1.25600E01 -3.89000E00 -2.95000E00 -1.39800E01 6.60000E-01 -6.25000E00 -3.70000E-01 4.69000E00 -1.21000E01 1.60000E00 -4.28000E00 -8.34000E00 -6.52000E00 -1.64000E00 -7.61000E00 -6.76000E00 -6.88000E00 -4.00000E00 -4.03000E00 -8.06000E00 6.79000E00 -1.99100E01 -7.42000E00 2.14600E01 -2.47900E01 -6.45000E00 1.04600E01 -1.61200E01 -3.51000E00 -4.51000E00 -8.54000E00 -1.26900E01 -2.96000E00 -2.93000E00 -1.39000E01 -5.20000E00 1.77000E00 -1.70500E01 -5.44000E00 -1.47000E00 -1.73800E01 -3.77000E00 2.26000E00 -1.25300E01 -6.77000E00 7.17000E00 -1.44700E01 -6.77000E00 -1.78300E01 -6.22000E00 -6.25000E00 -1.92800E01 1.43000E01 -1.91000E01 -8.52000E00 8.39000E00 -1.91900E01 -8.61000E00 -6.70000E00 -6.73000E00 -2.76000E00 -8.67000E00 1.24000E00 -8.55000E00 -1.36400E01 -9.88000E00 -7.00000E00 -4.03000E00 -1.97000E00 -1.08500E01 -4.00000E00 -3.94000E00 -4.88000E00 -2.85000E00 -1.27600E01 -4.97000E00 2.06000E00 -6.70000E00 -8.73000E00 -2.82000E00 -1.17300E01 -1.39100E01 8.50000E-01 -5.94000E00 -1.49400E01 -8.21000E00 -4.27000E00 -1.21000E00 -1.20600E01 -6.24000E00 4.76000E00 -1.39100E01 -6.15000E00 1.85000E00 -1.91000E00 -1.37900E01 -1.60300E01 -8.33000E00 -1.63900E01 -1.69000E00 -1.54000E00 6.10000E-01 -2.01800E01 -4.60000E00 4.46000E00 -9.21000E00 -1.53000E01 -2.57000E00 -2.45000E00 -1.13300E01 -5.48000E00 -6.45000E00 -9.45000E00 -3.54000E00 -9.45000E00 -4.54000E00 -1.14800E01 -1.06300E01 -5.75000E00 -1.27200E01 -6.90000E00 4.10000E00 -9.57000E00 -1.36600E01 3.13000E00 -7.57000E00 -1.16000E01 -3.75000E00 -6.66000E00 -5.66000E00 -7.63000E00 -1.06600E01 -9.78000E00 -1.28700E01 -5.05000E00 3.01000E00 -5.69000E00 -4.66000E00 -6.60000E00 -5.60000E00 -2.57000E00 -Frame 160 -1.14500E01 2.40000E00 -1.13300E01 -5.48000E00 -2.45000E00 -1.03300E01 1.55000E00 -1.12100E01 -3.60000E-01 1.82000E00 -7.94000E00 1.00000E00 -1.27900E01 -5.00000E00 -9.70000E-01 -1.08200E01 1.03000E00 -2.76000E00 -7.67000E00 -6.73000E00 -8.76000E00 -7.85000E00 -3.91000E00 -2.85000E00 -7.76000E00 -2.82000E00 5.27000E00 -1.14000E01 -3.58000E00 4.80000E-01 -5.34000E00 -9.34000E00 1.54000E00 1.75000E00 -1.50400E01 -1.34000E00 -2.20000E-01 -1.07000E00 3.05000E00 -1.37100E01 -9.98000E00 -2.13000E00 -6.04000E00 -1.07000E00 -3.95000E00 2.08000E00 -6.71000E00 -8.77000E00 7.11000E00 -1.45300E01 -7.83000E00 -3.92000E00 -7.89000E00 -2.98000E00 -5.92000E00 -1.95000E00 -2.86000E00 -1.38000E01 -4.07000E00 -4.04000E00 -1.80100E01 4.60000E00 -1.00000E-01 -1.29500E01 -7.19000E00 8.75000E00 -8.30000E-01 -9.71000E00 2.14000E00 -3.65000E00 -1.16200E01 -5.83000E00 -8.60000E-01 2.60000E-01 -7.59000E00 -3.68000E00 4.35000E00 -5.38000E00 -7.41000E00 -2.50000E00 -3.44000E00 -7.41000E00 -1.35000E01 6.23000E00 -6.44000E00 -6.50000E00 -2.56000E00 5.00000E-01 -6.35000E00 -9.41000E00 2.44000E00 -8.35000E00 -8.47000E00 -5.59000E00 -5.62000E00 4.35000E00 1.62000E00 8.00000E-01 -1.40500E01 -1.03500E01 6.47000E00 -2.20000E00 -8.14000E00 -2.26000E00 -5.20000E00 4.77000E00 -1.96000E00 -8.90000E00 -4.05000E00 -4.05000E00 -1.00500E01 1.77000E00 1.95000E00 -9.87000E00 -4.05000E00 -1.10500E01 -4.26000E00 -7.26000E00 -1.03500E01 -5.30000E-01 -6.41000E00 -4.70000E-01 6.50000E-01 -1.02000E01 -9.38000E00 -4.53000E00 -5.53000E00 -5.56000E00 -1.59000E00 -1.25000E01 -5.74000E00 -5.77000E00 -4.80000E00 -8.80000E00 -9.20000E-01 -4.80000E00 -8.80000E00 -4.92000E00 -3.92000E00 -1.89000E00 -9.80000E00 -4.95000E00 5.00000E-02 -4.80000E00 -8.80000E00 -1.69200E01 -2.28000E00 -4.19000E00 -5.16000E00 -2.16000E00 -7.07000E00 -3.13000E00 1.93000E00 -6.86000E00 -5.92000E00 -4.95000E00 -3.95000E00 -4.92000E00 -2.92000E00 -1.38600E01 -Frame 160 1.08700E01 -7.65000E00 -1.97400E01 1.38100E01 -1.06200E01 -3.80000E00 1.22300E01 -1.22600E01 -2.50000E00 7.56000E00 4.92000E00 3.19000E00 -2.60000E00 -6.57000E00 -1.66000E00 -1.16000E01 -6.84000E00 -1.93000E00 1.30000E-01 -2.75000E00 -3.72000E00 -3.72000E00 -9.72000E00 -1.39000E01 -9.20000E00 -8.35000E00 2.53000E00 7.74000E00 -2.90000E00 -6.87000E00 3.04000E00 -4.75000E00 -8.78000E00 4.07000E00 1.31000E00 -1.25400E01 -1.18100E01 9.50000E-01 -5.90000E00 -9.60000E-01 4.13000E00 -4.63000E00 -8.66000E00 2.19000E00 -5.63000E00 -2.69000E00 5.34000E00 -4.39000E00 5.80000E-01 -3.30000E00 -8.30000E00 -3.45000E00 -2.45000E00 -1.42000E00 -5.36000E00 2.58000E00 -5.24000E00 -7.30000E00 4.58000E00 -1.80000E-01 -4.09000E00 -7.12000E00 -3.24000E00 -7.24000E00 -3.60000E-01 9.73000E00 -3.88000E00 -2.91000E00 3.09000E00 -1.17300E01 -2.00000E00 -9.70000E-01 -9.10000E-01 1.50000E-01 -5.76000E00 3.15000E00 1.33000E00 -5.50000E-01 3.51000E00 6.90000E-01 -1.22000E00 -1.19000E00 2.84000E00 -8.01000E00 -1.90000E-01 3.87000E00 -2.95000E00 6.02000E00 -4.74000E00 -8.30000E-01 2.20000E00 -4.68000E00 1.23000E00 5.32000E00 -6.47000E00 -3.62000E00 9.32000E00 2.65000E00 -7.23000E00 -4.41000E00 5.50000E00 -4.29000E00 1.62000E00 1.71000E00 6.80000E00 -2.96000E00 -1.02000E00 9.80000E-01 3.04000E00 6.16000E00 -1.63000E00 2.34000E00 1.04300E01 8.76000E00 -5.97000E00 -1.15000E00 3.82000E00 -2.06000E00 -4.12000E00 7.60000E-01 1.79000E00 4.85000E00 -1.00000E00 3.97000E00 7.09000E00 -7.00000E-01 2.27000E00 4.33000E00 4.45000E00 -4.30000E-01 2.54000E00 6.00000E-01 -4.00000E-01 7.57000E00 1.78000E00 -2.19000E00 7.72000E00 9.93000E00 -3.80000E00 2.05000E00 4.08000E00 3.17000E00 8.23000E00 6.44000E00 2.59000E00 -3.80000E-01 5.60000E-01 1.05300E01 1.80000E00 1.80000E00 -2.00000E-01 1.07400E01 1.20100E01 3.10000E-01 3.25000E00 3.28000E00 5.31000E00 5.40000E00 7.49000E00 6.40000E-01 -Frame 160 3.58000E00 2.61000E00 1.61000E00 4.58000E00 9.64000E00 -3.15000E00 -1.33000E00 9.55000E00 5.76000E00 7.85000E00 1.50000E01 7.36000E00 -2.52000E00 1.30000E00 -2.76000E00 9.06000E00 1.22400E01 5.51000E00 -4.30000E-01 2.45000E00 9.42000E00 6.60000E00 -1.31000E00 -1.46000E00 5.39000E00 9.45000E00 4.63000E00 3.66000E00 5.66000E00 9.72000E00 1.90000E00 -1.16000E00 1.16900E01 6.93000E00 -5.98000E00 5.72000E00 8.78000E00 1.93000E00 2.87000E00 1.08400E01 5.05000E00 3.08000E00 4.05000E00 -9.50000E-01 8.90000E00 1.20500E01 1.29000E00 -8.00000E-01 9.05000E00 3.20000E00 1.17000E00 8.00000E-02 7.96000E00 3.08000E00 2.05000E00 6.99000E00 9.08000E00 -7.70000E-01 3.08000E00 9.05000E00 6.20000E00 4.26000E00 1.26000E00 1.31700E01 6.44000E00 -5.00000E-01 3.35000E00 1.13200E01 5.30000E-01 4.10000E-01 3.29000E00 6.26000E00 5.32000E00 4.35000E00 1.43500E01 5.65000E00 6.80000E-01 7.56000E00 2.65000E00 9.59000E00 2.74000E00 3.68000E00 2.65000E00 -2.41000E00 6.38000E00 4.44000E00 6.44000E00 4.50000E00 2.50000E00 -5.60000E-01 3.29000E00 3.26000E00 8.23000E00 7.35000E00 3.44000E00 1.24100E01 9.65000E00 3.80000E00 1.77000E00 1.68000E00 5.90000E-01 -5.30000E-01 5.32000E00 2.35000E00 5.29000E00 4.32000E00 7.32000E00 4.41000E00 -5.90000E-01 3.26000E00 1.23000E00 5.14000E00 1.31700E01 2.44000E00 -6.20000E-01 3.23000E00 8.20000E00 3.20000E-01 5.20000E00 1.82300E01 6.50000E-01 1.53000E00 6.44000E00 7.50000E00 3.59000E00 7.56000E00 7.65000E00 -2.60000E-01 1.05900E01 9.77000E00 -3.08000E00 -3.20000E-01 1.05300E01 -1.29000E00 1.55300E01 4.86000E00 3.86000E00 6.83000E00 1.89000E00 4.80000E00 3.80000E00 1.77000E00 1.16800E01 9.89000E00 7.04000E00 7.10000E00 1.16000E00 4.04000E00 5.01000E00 3.01000E00 2.95000E00 5.89000E00 8.92000E00 9.04000E00 7.16000E00 4.22000E00 5.19000E00 7.19000E00 2.50000E-01 5.10000E00 -Frame 160 1.11000E01 9.28000E00 6.40000E00 7.43000E00 4.49000E00 4.46000E00 9.43000E00 3.55000E00 -5.10000E-01 7.31000E00 1.23700E01 9.58000E00 6.70000E00 4.73000E00 7.00000E-01 5.55000E00 1.55500E01 5.85000E00 -1.50000E-01 6.67000E00 6.70000E00 8.73000E00 1.82000E00 7.70000E00 7.76000E00 1.82000E00 4.70000E00 8.67000E00 4.76000E00 6.73000E00 9.76000E00 9.88000E00 9.00000E00 3.09000E00 4.00000E00 1.29400E01 4.15000E00 9.00000E-02 3.91000E00 1.08500E01 9.00000E00 7.09000E00 3.12000E00 2.00300E01 5.45000E00 -5.80000E-01 1.12100E01 1.03600E01 1.04800E01 1.26000E01 5.78000E00 7.50000E-01 7.57000E00 8.60000E00 7.66000E00 1.16900E01 6.84000E00 8.40000E-01 5.66000E00 9.63000E00 5.72000E00 8.69000E00 7.75000E00 6.78000E00 1.07800E01 6.90000E00 1.90000E00 9.75000E00 6.84000E00 1.28400E01 8.02000E00 2.05000E00 7.90000E00 7.93000E00 -4.00000E-02 1.27500E01 1.19300E01 1.60800E01 3.35000E00 1.12300E01 2.13500E01 4.77000E00 6.80000E-01 4.47000E00 7.38000E00 1.73800E01 -3.20000E-01 1.44000E00 9.26000E00 4.32000E00 1.32300E01 6.41000E00 6.38000E00 1.13500E01 1.04700E01 9.56000E00 1.16200E01 1.07400E01 3.83000E00 1.71000E00 1.25300E01 1.46800E01 6.89000E00 1.08600E01 1.39500E01 6.13000E00 8.07000E00 5.07000E00 7.98000E00 8.98000E00 5.01000E00 4.92000E00 1.58300E01 1.40700E01 2.50000E-01 5.01000E00 5.92000E00 1.08600E01 9.50000E-01 5.74000E00 5.68000E00 6.62000E00 6.59000E00 6.56000E00 1.35300E01 1.67100E01 -2.00000E-02 7.74000E00 1.47400E01 -1.05000E00 6.68000E00 9.65000E00 1.07100E01 2.80000E00 1.16500E01 1.37700E01 -5.00000E-02 8.71000E00 2.74000E00 9.59000E00 6.50000E-01 1.04400E01 1.15300E01 8.65000E00 1.16800E01 5.80000E00 2.74000E00 5.59000E00 7.53000E00 4.53000E00 4.44000E00 7.35000E00 6.35000E00 4.32000E00 3.23000E00 1.11100E01 8.23000E00 5.26000E00 4.20000E00 8.11000E00 -Signal: SpeechEndSignal -Signal: SpeechStartSignal -Frame 160 -9.00000E00 4.73000E00 3.88000E00 -2.00000E00 -3.06000E00 -2.15000E00 -6.21000E00 6.10000E-01 7.64000E00 8.80000E-01 2.91000E00 -4.00000E00 1.88000E00 -2.06000E00 -1.12000E00 -4.15000E00 -2.70000E-01 5.73000E00 -4.09000E00 -2.10000E-01 6.79000E00 -2.00000E00 -5.06000E00 -2.10000E-01 -6.21000E00 3.61000E00 -2.27000E00 -2.33000E00 1.61000E00 2.67000E00 -1.24000E00 -1.27000E00 -1.03000E01 5.40000E00 -2.42000E00 -4.48000E00 1.40000E00 4.60000E-01 1.49000E00 -7.45000E00 -6.60000E-01 -3.66000E00 -1.75000E00 5.22000E00 -4.60000E00 3.28000E00 -1.60000E00 -1.63000E00 -6.60000E-01 -1.66000E00 -2.69000E00 -2.75000E00 1.90000E-01 1.22000E00 3.28000E00 -4.60000E00 2.80000E-01 1.31000E00 -1.63000E00 5.34000E00 -1.48000E00 -5.10000E-01 1.49000E00 -6.45000E00 -6.30000E-01 -1.06300E01 3.07000E00 4.19000E00 -4.66000E00 1.22000E00 -7.20000E-01 -7.20000E-01 -1.72000E00 -6.75000E00 7.00000E-02 2.10000E00 3.19000E00 3.31000E00 -5.57000E00 -2.72000E00 1.22000E00 -4.72000E00 1.60000E-01 4.19000E00 -7.66000E00 -3.87000E00 7.04000E00 -5.72000E00 -2.87000E00 2.07000E00 2.16000E00 -8.75000E00 -2.99000E00 1.69500E01 -1.51000E00 -1.35400E01 2.07000E00 1.60000E-01 -5.81000E00 1.04000E00 5.10000E00 -7.20000E-01 -5.72000E00 1.13000E00 1.90000E-01 -2.78000E00 -3.84000E00 -3.93000E00 -3.02000E00 8.92000E00 2.20000E-01 -2.75000E00 2.19000E00 3.28000E00 1.40000E00 -2.54000E00 -1.60000E00 6.37000E00 -2.42000E00 -1.48000E00 4.90000E-01 1.52000E00 -4.20000E-01 8.58000E00 5.85000E00 -9.70000E-01 5.00000E00 3.15000E00 -6.76000E00 3.00000E-02 -3.97000E00 1.91000E00 4.97000E00 -6.88000E00 2.91000E00 4.00000E00 1.20000E-01 3.12000E00 3.21000E00 -7.00000E-01 -7.30000E-01 9.24000E00 3.51000E00 3.60000E00 6.90000E-01 2.69000E00 -3.25000E00 -2.37000E00 3.54000E00 8.63000E00 3.87000E00 -2.04000E00 6.87000E00 3.05000E00 1.10000E-01 1.08000E00 1.00800E01 5.35000E00 4.47000E00 2.56000E00 -Frame 160 -1.41000E00 5.00000E-01 -2.53000E00 4.35000E00 5.44000E00 -4.40000E-01 4.50000E00 -4.41000E00 5.41000E00 3.53000E00 7.59000E00 7.77000E00 -5.00000E-02 6.89000E00 3.04000E00 -2.93000E00 9.20000E-01 3.89000E00 9.95000E00 -8.10000E-01 3.10000E00 2.13000E00 2.13000E00 7.13000E00 -1.72000E00 1.16000E00 2.13000E00 5.13000E00 2.22000E00 6.22000E00 2.34000E00 2.34000E00 4.34000E00 2.40000E00 4.40000E00 1.46000E00 2.43000E00 8.43000E00 5.61000E00 7.00000E-01 8.64000E00 -1.80000E-01 4.73000E00 9.79000E00 -2.00000E00 2.85000E00 -1.50000E-01 -2.40000E-01 1.67000E00 5.64000E00 1.73000E00 3.70000E00 7.30000E-01 3.67000E00 2.70000E00 7.70000E00 -1.15000E00 -1.27000E00 3.61000E00 5.64000E00 5.73000E00 8.82000E00 5.00000E00 -9.40000E-01 2.94000E00 -6.00000E-02 -1.15000E00 2.73000E00 9.73000E00 -1.06000E00 3.82000E00 1.08500E01 1.09000E00 3.00000E-02 4.94000E00 4.00000E00 1.03000E00 8.97000E00 4.15000E00 1.80000E-01 6.09000E00 -2.82000E00 5.00000E00 1.06000E00 6.00000E00 3.09000E00 -6.91000E00 2.79000E00 1.17900E01 3.06000E00 -1.94000E00 3.91000E00 6.94000E00 -1.94000E00 2.91000E00 -4.09000E00 -1.30000E00 1.15800E01 3.85000E00 -7.12000E00 1.58000E00 9.55000E00 7.60000E-01 2.70000E00 -1.30000E00 3.58000E00 2.61000E00 8.61000E00 2.79000E00 1.79000E00 -4.24000E00 6.55000E00 -3.30000E-01 -1.42000E00 8.46000E00 -3.60000E-01 5.50000E-01 1.49000E00 -5.54000E00 -2.78000E00 6.07000E00 6.19000E00 3.31000E00 2.34000E00 8.34000E00 5.52000E00 -6.39000E00 4.34000E00 2.40000E00 -1.60000E00 2.28000E00 1.28000E00 4.25000E00 6.31000E00 3.43000E00 4.46000E00 2.52000E00 2.52000E00 -4.48000E00 2.31000E00 7.31000E00 3.46000E00 -5.51000E00 2.25000E00 3.25000E00 -1.72000E00 -8.40000E-01 -4.93000E00 4.86000E00 -5.00000E-02 4.89000E00 -2.00000E-02 -8.00000E-02 8.60000E-01 -1.17000E00 3.74000E00 1.80000E00 2.80000E00 -1.70000E-01 -9.23000E00 -Frame 160 -3.56000E00 1.12900E01 -2.41000E00 -2.53000E00 7.35000E00 3.53000E00 -1.41000E00 -5.50000E00 4.29000E00 5.38000E00 -7.50000E00 1.02300E01 -2.50000E00 2.38000E00 1.04100E01 6.80000E-01 6.50000E-01 -4.38000E00 -3.56000E00 1.29000E00 -7.10000E-01 2.23000E00 -1.74000E00 2.17000E00 4.20000E00 2.29000E00 -3.68000E00 -1.83000E00 2.08000E00 2.11000E00 -1.86000E00 6.05000E00 7.20000E00 -5.62000E00 3.17000E00 4.23000E00 -8.68000E00 5.02000E00 -8.60000E-01 1.08000E00 2.08000E00 -1.89000E00 5.02000E00 -3.86000E00 -2.01000E00 4.90000E00 -1.98000E00 -7.00000E-02 6.90000E00 5.08000E00 -1.08000E01 1.84000E00 8.70000E-01 8.70000E-01 -1.13000E00 -3.19000E00 5.69000E00 -7.16000E00 6.00000E-01 2.60000E00 -4.34000E00 -3.49000E00 5.39000E00 -5.46000E00 -2.64000E00 2.27000E00 6.33000E00 -3.49000E00 -6.10000E-01 8.36000E00 6.60000E00 -2.22000E00 -1.31000E00 4.63000E00 -4.25000E00 6.00000E-01 -2.40000E00 2.51000E00 1.57000E00 1.60000E00 3.63000E00 2.72000E00 7.80000E-01 3.78000E00 1.87000E00 3.90000E00 9.90000E-01 -2.01000E00 1.90000E00 1.93000E00 -4.00000E-02 9.30000E-01 1.09300E01 1.23000E00 -7.70000E-01 7.17000E00 -1.65000E00 -1.74000E00 1.01700E01 4.40000E-01 -3.59000E00 -2.74000E00 -4.86000E00 7.96000E00 4.17000E00 1.26000E00 6.26000E00 -5.90000E-01 9.35000E00 1.55900E01 -8.99000E00 6.80000E-01 4.65000E00 -6.26000E00 2.50000E00 4.53000E00 2.62000E00 6.65000E00 -1.20000E00 7.71000E00 1.89000E00 -1.10000E-01 2.83000E00 4.86000E00 3.95000E00 5.01000E00 1.10000E00 1.07000E00 7.04000E00 4.19000E00 3.25000E00 5.28000E00 5.37000E00 -5.40000E-01 3.37000E00 2.40000E00 7.40000E00 3.55000E00 -3.42000E00 -6.00000E-01 6.31000E00 9.43000E00 5.64000E00 6.73000E00 6.85000E00 -3.03000E00 2.79000E00 5.79000E00 1.88000E00 4.85000E00 6.91000E00 5.03000E00 8.09000E00 5.24000E00 3.00000E-01 6.21000E00 9.30000E00 7.48000E00 -2.40000E00 1.34200E01 -Frame 160 -2.80000E-01 6.00000E-01 1.15100E01 8.75000E00 6.90000E00 -2.01000E00 2.81000E00 7.78000E00 3.90000E00 -1.00000E-01 -3.22000E00 2.57000E00 4.54000E00 9.57000E00 3.75000E00 7.50000E-01 7.66000E00 9.78000E00 1.96000E00 -6.10000E00 1.06000E01 7.81000E00 1.93000E00 7.87000E00 6.99000E00 1.08000E00 2.99000E00 4.96000E00 8.99000E00 5.14000E00 -2.83000E00 1.96000E00 -1.00000E-01 4.78000E00 2.81000E00 2.78000E00 1.75000E00 -1.31000E00 8.54000E00 -3.31000E00 1.48000E00 3.42000E00 4.20000E-01 -1.67000E00 7.18000E00 1.03000E01 -3.49000E00 6.30000E00 7.39000E00 -3.49000E00 6.30000E00 5.39000E00 2.45000E00 -5.80000E-01 -1.70000E00 2.15000E00 3.12000E00 3.12000E00 1.20000E-01 3.03000E00 8.03000E00 8.18000E00 2.33000E00 6.30000E00 3.90000E-01 -3.70000E00 9.00000E-02 1.00000E00 4.94000E00 2.00000E00 -3.00000E-02 4.88000E00 4.94000E00 2.00000E00 -3.03000E00 2.79000E00 1.07900E01 -4.97000E00 -1.21000E00 4.67000E00 -2.27000E00 7.58000E00 1.73000E00 -7.30000E00 6.40000E00 1.52000E00 -5.10000E-01 4.40000E00 -1.54000E00 3.40000E-01 3.28000E00 3.31000E00 3.40000E-01 6.28000E00 -1.26000E01 -3.05000E00 4.80000E00 -2.11000E00 -3.23000E00 7.62000E00 1.80000E00 1.80000E00 -2.00000E-01 7.40000E-01 6.71000E00 1.08600E01 -8.70000E-01 -1.29600E01 -3.41000E00 4.40000E-01 -5.90000E-01 -6.50000E-01 1.29000E00 2.29000E00 -6.80000E-01 -7.40000E-01 -2.80000E00 5.08000E00 3.20000E00 -4.74000E00 8.00000E-02 -4.95000E00 1.87000E00 5.90000E00 -7.95000E00 7.80000E-01 1.78000E00 -8.19000E00 6.54000E00 7.20000E-01 -6.28000E00 -3.49000E00 -2.61000E00 3.30000E00 1.39000E00 3.42000E00 5.10000E-01 3.51000E00 4.60000E00 -6.28000E00 -4.90000E-01 -3.52000E00 -3.64000E00 -4.76000E00 3.09000E00 3.18000E00 -1.73000E00 -3.79000E00 1.09000E00 -2.88000E00 3.00000E-02 -9.70000E-01 0.00000E00 2.00000E00 -3.94000E00 9.40000E-01 9.70000E-01 1.00000E00 -9.70000E-01 -7.00000E00 -Frame 160 4.79000E00 -1.06000E00 -1.09000E00 -8.12000E00 1.64000E00 5.70000E00 -1.12000E00 -5.15000E00 -5.30000E00 -1.45000E00 5.20000E-01 2.55000E00 -4.36000E00 1.52000E00 6.58000E00 -7.21000E00 -6.42000E00 3.40000E00 5.20000E-01 1.55000E00 1.61000E00 -1.33000E00 2.64000E00 -3.27000E00 1.64000E00 4.70000E00 4.85000E00 -7.00000E00 -8.21000E00 9.55000E00 -6.15000E00 -2.33000E00 -2.39000E00 -4.45000E00 1.43000E00 2.49000E00 2.58000E00 4.67000E00 -3.18000E00 -2.27000E00 -2.33000E00 6.10000E-01 -7.36000E00 3.43000E00 5.55000E00 -2.27000E00 2.67000E00 -6.24000E00 -4.20000E-01 5.58000E00 -1.24000E00 3.73000E00 5.85000E00 -3.97000E00 -1.09000E00 -4.12000E00 1.76000E00 8.20000E-01 -5.15000E00 -5.30000E00 7.55000E00 8.79000E00 -8.94000E00 3.79000E00 3.91000E00 3.03000E00 -9.88000E00 3.82000E00 -6.00000E-02 -1.06000E00 2.91000E00 -3.00000E00 9.10000E-01 -5.06000E00 1.79000E00 8.50000E-01 -4.12000E00 -2.40000E-01 -2.24000E00 4.70000E00 8.50000E-01 -6.12000E00 7.00000E-01 3.73000E00 -1.15000E00 -4.18000E00 -3.00000E-01 -4.30000E00 -2.42000E00 4.52000E00 -2.33000E00 -3.39000E00 5.20000E-01 2.55000E00 -1.23600E01 9.28000E00 -3.42000E00 -3.51000E00 4.00000E-01 -5.70000E-01 -3.57000E00 3.40000E-01 3.70000E-01 -3.60000E00 -2.69000E00 2.50000E-01 -2.72000E00 -1.78000E00 -2.81000E00 8.13000E00 -1.60000E00 -1.06300E01 4.07000E00 -2.78000E00 -5.84000E00 -1.99000E00 -6.02000E00 2.83000E00 -7.05000E00 1.77000E00 8.60000E-01 -9.08000E00 2.68000E00 2.80000E00 -1.40800E01 -1.47000E00 8.53000E00 -1.11700E01 -7.47000E00 3.50000E-01 -5.59000E00 5.29000E00 -1.05000E01 1.23000E00 -6.80000E-01 -1.65000E00 3.50000E-01 -9.59000E00 -5.83000E00 -1.95000E00 -1.95000E00 -3.95000E00 -1.40100E01 -3.37000E00 2.60000E00 -4.25000E00 -1.31000E00 -6.28000E00 -6.40000E00 -6.52000E00 -4.64000E00 -6.70000E00 -4.82000E00 -5.88000E00 -5.97000E00 -7.06000E00 -6.18000E00 -3.27000E00 -4.27000E00 -1.13000E01 -Frame 160 -6.54000E00 -7.63000E00 -6.75000E00 -1.84000E00 -7.78000E00 -8.90000E00 -4.05000E00 -4.05000E00 -9.05000E00 -1.20000E00 -1.31100E01 -6.38000E00 -2.44000E00 -1.03800E01 -1.56000E00 -6.47000E00 -6.53000E00 -5.59000E00 -8.62000E00 -9.74000E00 -5.89000E00 -6.92000E00 -6.98000E00 9.60000E-01 -6.86000E00 -9.92000E00 -7.07000E00 -5.13000E00 -6.13000E00 1.84000E00 -4.95000E00 -8.95000E00 -8.07000E00 -6.16000E00 -7.19000E00 -5.25000E00 -7.25000E00 -6.31000E00 -2.34000E00 -1.12500E01 -4.43000E00 -2.40000E00 -1.03100E01 -5.46000E00 -3.46000E00 -3.40000E00 -7.34000E00 -7.40000E00 -9.46000E00 -1.35800E01 -1.68200E01 -2.15000E00 -5.03000E00 -8.00000E00 -5.06000E00 -6.03000E00 -1.10300E01 -7.18000E00 -2.21000E00 -6.09000E00 -6.09000E00 -5.09000E00 -9.06000E00 -9.15000E00 -9.24000E00 -9.33000E00 -1.14200E01 -2.57000E00 -9.45000E00 -1.05400E01 -9.66000E00 -8.75000E00 -1.18100E01 -4.96000E00 -8.90000E00 -9.96000E00 -7.05000E00 9.50000E-01 -8.81000E00 -6.87000E00 -1.08700E01 -2.99000E00 -1.87000E00 -1.37200E01 -6.93000E00 -7.93000E00 -1.29600E01 -4.14000E00 -3.05000E00 -2.93000E00 -5.81000E00 -2.78000E00 -1.16600E01 -1.81000E00 -5.66000E00 -1.66300E01 -8.93000E00 1.00000E-02 -7.80000E-01 -1.06000E01 -2.72000E00 -1.06000E01 -8.72000E00 -5.78000E00 -2.75000E00 -6.63000E00 -5.63000E00 -9.60000E00 -5.69000E00 1.34000E00 -1.04200E01 -8.54000E00 -5.60000E00 -5.57000E00 -3.54000E00 -2.45000E00 -1.13300E01 -4.48000E00 2.58000E00 -7.15000E00 -2.18000E00 -6.06000E00 -6.06000E00 -7.06000E00 -3.09000E00 -8.00000E00 -7.06000E00 -1.20900E01 7.30000E-01 -4.06000E00 -1.00000E01 -5.12000E00 -6.09000E00 -1.00900E01 7.90000E-01 -6.00000E00 1.00000E00 -4.79000E00 -2.76000E00 -8.67000E00 -5.76000E00 -2.76000E00 -6.67000E00 -5.70000E00 -2.70000E00 -3.61000E00 2.45000E00 -5.31000E00 -1.23100E01 3.48000E00 -5.25000E00 -3.25000E00 1.81000E00 -5.98000E00 -1.20100E01 -6.22000E00 7.50000E-01 -5.07000E00 -5.07000E00 -4.07000E00 -Frame 160 -6.04000E00 2.93000E00 1.70000E-01 -6.68000E00 -3.74000E00 9.29000E00 -2.29000E00 -7.23000E00 -4.32000E00 -3.20000E-01 1.80000E00 -8.02000E00 -3.14000E00 3.89000E00 -8.70000E-01 -6.78000E00 7.13000E00 -2.54000E00 -5.10000E-01 -3.42000E00 -6.42000E00 -4.51000E00 3.46000E00 -4.33000E00 -3.36000E00 2.64000E00 8.20000E-01 2.94000E00 -3.88000E00 1.09000E00 2.10000E-01 -9.70000E00 -2.91000E00 2.09000E00 -7.60000E-01 2.30000E00 3.45000E00 -6.37000E00 2.51000E00 -3.34000E00 -3.37000E00 2.60000E00 2.75000E00 -2.10000E00 5.90000E00 1.40000E-01 -3.80000E00 -5.86000E00 2.00000E-02 -9.20000E-01 -4.89000E00 4.02000E00 3.20000E00 -7.65000E00 -2.83000E00 5.14000E00 3.50000E-01 -4.59000E00 -2.68000E00 5.29000E00 -3.50000E00 -5.60000E-01 -4.53000E00 1.38000E00 -3.53000E00 -1.59000E00 6.41000E00 -5.35000E00 -4.47000E00 -1.56000E00 -3.56000E00 4.38000E00 5.56000E00 3.77000E00 -6.08000E00 7.70000E-01 8.30000E-01 -3.11000E00 -3.17000E00 7.70000E-01 1.83000E00 -4.08000E00 1.83000E00 -3.08000E00 -1.40000E-01 -4.11000E00 2.80000E00 -8.00000E-02 -4.05000E00 8.60000E-01 -1.08000E00 -7.08000E00 5.74000E00 5.95000E00 -8.84000E00 -2.08000E00 -1.10000E-01 -8.00000E-02 -9.05000E00 4.71000E00 -2.11000E00 -2.14000E00 -1.70000E-01 2.86000E00 -9.02000E00 -4.26000E00 8.65000E00 -5.05000E00 -7.17000E00 1.65000E00 -7.26000E00 -1.44000E00 2.56000E00 -6.32000E00 -3.47000E00 -1.53000E00 -4.53000E00 3.80000E-01 -5.60000E-01 -5.30000E-01 4.50000E00 6.80000E-01 -4.26000E00 -4.35000E00 2.56000E00 -2.32000E00 -8.35000E00 -6.56000E00 7.29000E00 5.60000E-01 -1.38000E00 -7.38000E00 -2.56000E00 5.41000E00 -2.38000E00 -3.41000E00 3.53000E00 -2.32000E00 1.65000E00 3.74000E00 1.89000E00 2.98000E00 -1.09000E01 5.80000E00 -1.99000E00 -2.00000E-02 -2.99000E00 2.95000E00 7.00000E-02 -5.90000E00 1.95000E00 2.04000E00 -6.87000E00 2.95000E00 7.00000E-02 -2.90000E00 6.04000E00 7.25000E00 2.49000E00 -1.42000E00 -Frame 160 -8.45000E00 3.10000E-01 8.34000E00 -9.39000E00 -3.66000E00 -7.50000E-01 5.25000E00 8.43000E00 -5.30000E00 1.55000E00 3.61000E00 7.30000E-01 1.27600E01 1.50000E-01 -1.85000E00 5.09000E00 -2.76000E00 -3.85000E00 3.03000E00 2.12000E00 -8.20000E-01 -1.85000E00 5.09000E00 1.02400E01 1.54000E00 5.57000E00 4.72000E00 -7.16000E00 6.00000E-01 7.60000E00 1.81000E00 -4.16000E00 1.69000E00 1.07200E01 2.02000E00 -9.50000E-01 6.99000E00 1.70000E-01 2.14000E00 -8.30000E-01 -1.89000E00 5.02000E00 -1.86000E00 3.05000E00 9.11000E00 -3.65000E00 1.20000E00 1.20000E00 -8.80000E00 1.90000E00 4.93000E00 4.05000E00 3.14000E00 2.20000E00 1.23000E00 2.23000E00 2.60000E-01 2.30000E-01 1.20000E00 4.20000E00 1.02900E01 4.56000E00 6.50000E-01 -4.38000E00 -2.56000E00 5.32000E00 -5.60000E-01 8.38000E00 -3.41000E00 5.44000E00 3.56000E00 -1.38000E00 6.53000E00 5.68000E00 1.80000E00 -2.20000E00 2.68000E00 6.71000E00 -5.14000E00 9.65000E00 -1.11000E00 -7.20000E00 1.53000E00 5.30000E-01 1.50000E00 4.50000E00 6.59000E00 -4.26000E00 4.56000E00 9.65000E00 1.89000E00 -1.11000E00 6.80000E00 9.50000E-01 2.92000E00 -5.00000E-02 8.90000E-01 -4.14000E00 1.68000E00 6.80000E-01 -2.35000E00 6.53000E00 5.68000E00 3.80000E00 1.86000E00 -1.40000E-01 4.80000E00 8.90000E-01 6.86000E00 1.10100E01 -1.72000E00 8.16000E00 6.34000E00 6.46000E00 3.58000E00 1.16100E01 1.28800E01 7.18000E00 8.30000E00 1.04500E01 9.66000E00 8.84000E00 9.99000E00 1.31700E01 1.14400E01 1.46500E01 7.95000E00 1.30400E01 1.12800E01 1.24600E01 1.96700E01 1.50900E01 4.36000E00 1.83000E01 1.36600E01 5.87000E00 1.38400E01 9.05000E00 1.11100E01 1.62300E01 5.00000E-01 1.02900E01 6.38000E00 1.33500E01 1.75300E01 8.83000E00 9.86000E00 2.09200E01 1.03100E01 7.37000E00 8.34000E00 3.34000E00 1.21900E01 1.13100E01 4.40000E00 1.62800E01 4.52000E00 9.40000E00 7.43000E00 9.40000E00 -Frame 160 1.14300E01 6.52000E00 1.24600E01 6.58000E00 6.52000E00 5.46000E00 7.37000E00 1.33400E01 3.49000E00 3.40000E-01 7.10000E00 2.07000E00 7.89000E00 1.38900E01 4.07000E00 -5.05000E00 -2.44000E00 -7.40000E-01 5.02000E00 -2.04000E00 -3.10000E-01 5.48000E00 -2.55000E00 4.18000E00 -1.88000E00 1.08800E01 -9.70000E-01 -5.18000E00 3.49000E00 -3.57000E00 3.16000E00 -1.90000E00 -6.11000E00 -4.40000E-01 2.41000E00 -3.65000E00 -3.89000E00 -1.13000E00 -9.28000E00 -5.67000E00 -9.40000E-01 -5.06000E00 -5.30000E00 -7.54000E00 -3.84000E00 2.98000E00 -1.59900E01 -9.53000E00 -7.86000E00 -1.01300E01 -7.46000E00 -8.70000E00 -4.97000E00 -9.12000E00 -1.03900E01 3.10000E-01 2.34000E00 1.84300E01 2.80000E01 2.88400E01 2.26800E01 5.31000E00 -8.60000E00 4.07000E00 7.13000E00 2.52800E01 4.09700E01 1.11100E01 -4.68000E00 5.05000E00 2.40800E01 3.36800E01 2.95500E01 1.52700E01 8.54000E00 6.00000E-01 4.42000E00 2.03600E01 1.17800E01 2.93000E00 -5.19000E00 -6.55000E00 6.06000E00 9.06000E00 2.11500E01 8.60000E00 -3.34000E00 4.36000E00 4.30000E00 9.24000E00 1.83300E01 -1.31000E00 -6.55000E00 -9.94000E00 -5.42000E00 1.12500E01 2.44300E01 1.30000E01 8.21000E00 1.27000E00 6.12000E00 8.12000E00 1.81800E01 1.65400E01 7.84000E00 -2.13000E00 -4.00000E-01 1.23900E01 1.65700E01 1.48700E01 -3.89000E00 -5.22000E00 4.20000E-01 -3.76000E00 5.94000E00 6.94000E00 -4.03000E00 -6.33000E00 -3.69000E00 -3.96000E00 7.70000E-01 1.06500E01 1.83000E00 -1.02600E01 -1.37100E01 -1.25000E00 4.60000E00 -2.37000E00 -1.55000E00 -1.70000E00 -3.85000E00 -4.06000E00 2.73000E00 6.73000E00 -6.15000E00 -4.42000E00 -5.63000E00 -4.87000E00 -7.08000E00 1.06500E01 -2.08000E00 -3.20000E00 1.65000E00 -1.35000E00 1.56000E00 8.56000E00 2.77000E00 -2.20000E00 4.68000E00 8.77000E00 9.98000E00 1.22000E00 1.21900E01 -2.51000E00 5.34000E00 3.43000E00 4.60000E-01 1.64000E01 3.82000E00 1.08500E01 -Frame 160 1.09000E00 1.03000E00 1.09700E01 6.21000E00 -2.70000E00 5.12000E00 6.18000E00 8.27000E00 5.42000E00 3.48000E00 8.48000E00 5.63000E00 -3.10000E-01 7.57000E00 6.90000E-01 -1.40000E00 1.24500E01 -1.28000E00 -4.43000E00 -1.67000E00 2.18000E00 4.15000E00 -8.20000E-01 -3.94000E00 3.85000E00 -2.12000E00 4.73000E00 5.79000E00 1.88000E00 8.50000E-01 -1.21000E00 -2.33000E00 -8.48000E00 1.90000E-01 1.01300E01 -3.63000E00 -8.10000E-01 -9.00000E-01 -9.90000E-01 -4.08000E00 2.74000E00 8.77000E00 7.98000E00 -2.84000E00 7.01000E00 6.16000E00 5.28000E00 9.37000E00 4.58000E00 6.40000E-01 5.80000E-01 -1.48000E00 1.40000E00 3.37000E00 1.40000E00 1.43700E01 6.73000E00 4.85000E00 1.29100E01 1.21000E00 -8.50000E-01 1.30300E01 -3.67000E00 -8.80000E-01 2.00000E00 9.97000E00 2.18000E00 -8.50000E-01 1.00300E01 1.02400E01 4.45000E00 -1.52000E00 1.33000E00 1.12700E01 2.51000E00 5.48000E00 5.54000E00 -4.40000E00 -1.64000E00 2.21000E00 7.18000E00 7.30000E00 1.04200E01 1.63000E00 4.57000E00 3.60000E00 1.26000E01 2.87000E00 1.84000E00 8.78000E00 -8.07000E00 5.70000E-01 1.34800E01 2.78000E00 7.50000E-01 9.66000E00 -3.16000E00 -2.37000E00 3.45000E00 1.45000E00 5.39000E00 4.45000E00 4.80000E-01 7.39000E00 8.51000E00 -4.34000E00 1.14200E01 6.60000E-01 2.57000E00 1.54000E00 2.48000E00 -1.55000E00 7.30000E00 -4.58000E00 1.18000E00 -8.80000E-01 0.00000E00 7.91000E00 1.06000E00 -3.00000E00 6.82000E00 2.94000E00 1.94000E00 -4.09000E00 5.70000E00 4.79000E00 -7.15000E00 2.55000E00 6.55000E00 -7.33000E00 1.37000E00 3.34000E00 -6.30000E-01 7.28000E00 -4.57000E00 -7.80000E-01 1.11300E01 1.64000E01 -6.18000E00 -9.45000E00 1.01900E01 4.43000E00 1.49000E00 2.46000E00 4.60000E-01 4.00000E-01 2.34000E00 5.34000E00 -5.70000E-01 2.34000E00 2.34000E00 4.34000E00 8.40000E00 3.58000E00 2.61000E00 1.61000E00 -2.42000E00 1.24300E01 1.47300E01 9.00000E-02 -Frame 160 -7.00000E00 -5.30000E00 -7.54000E00 -5.84000E00 6.92000E00 9.07000E00 -1.72000E00 -2.84000E00 8.01000E00 4.19000E00 -8.75000E00 1.29200E01 6.25000E00 -7.63000E00 -3.93000E00 5.89000E00 -4.99000E00 4.80000E00 6.89000E00 1.04000E00 -8.99000E00 1.68000E00 1.26800E01 2.01000E00 3.01000E00 6.04000E00 -6.84000E00 -1.11000E00 1.18000E01 8.10000E00 -2.72000E00 5.13000E00 1.22000E00 5.19000E00 -4.72000E00 -2.93000E00 1.29200E01 1.25000E00 2.20000E-01 7.16000E00 9.31000E00 9.52000E00 6.73000E00 -1.50000E-01 4.76000E00 4.82000E00 6.88000E00 3.00000E00 -1.00000E00 4.88000E00 8.94000E00 4.12000E00 1.11500E01 9.39000E00 6.57000E00 8.66000E00 5.81000E00 8.87000E00 5.02000E00 5.05000E00 4.08000E00 6.08000E00 1.14000E00 7.05000E00 6.14000E00 2.20000E00 4.14000E00 2.14000E00 -1.92000E00 -1.10000E00 1.75000E00 -4.31000E00 1.45000E00 1.39000E00 -6.70000E-01 2.21000E00 6.18000E00 1.27000E00 -7.90000E-01 -1.91000E00 -5.06000E00 -2.30000E00 2.55000E00 5.50000E-01 -1.51000E00 3.70000E-01 -2.69000E00 -5.84000E00 2.92000E00 9.50000E-01 -4.08000E00 7.40000E-01 7.10000E-01 4.68000E00 -7.23000E00 -2.50000E00 3.80000E-01 -5.65000E00 -4.86000E00 -3.04000E00 -6.16000E00 -6.37000E00 4.20000E-01 -2.58000E00 -4.67000E00 -1.82000E00 -5.88000E00 -1.10600E01 -6.39000E00 4.43000E00 -1.24200E01 -1.17800E01 -3.11000E00 -8.17000E00 -4.38000E00 5.30000E-01 -9.41000E00 -1.06500E01 1.08000E00 -1.38300E01 -6.19000E00 -4.31000E00 -1.23700E01 -1.36700E01 -8.00000E00 -1.50000E-01 -1.70600E01 -2.34800E01 -6.08000E00 -1.11400E01 -1.53500E01 -1.66800E01 -5.04000E00 -9.04000E00 -2.01600E01 -4.36100E01 6.32500E01 -4.65000E00 -8.86500E01 6.78300E01 2.30800E01 -2.10800E01 6.24100E01 3.24200E01 -7.65300E01 -3.67800E01 2.32300E01 8.07000E00 5.24300E01 4.41100E01 1.24900E01 1.18800E01 1.24000E00 -7.07300E01 7.14000E00 3.04100E01 -6.30000E-01 2.13700E01 2.20300E01 7.69000E00 -Frame 160 -6.10000E00 -3.31000E00 -2.54300E01 -1.52100E01 -1.06600E01 -1.09600E01 1.07400E01 1.91000E01 1.17000E01 -3.94000E00 -2.10600E01 -2.76900E01 -1.75000E01 8.02000E00 5.32000E00 3.53000E00 5.68000E00 -3.11000E00 -8.17000E00 -1.53800E01 -6.80000E00 -2.95000E00 -1.98000E00 -1.98000E00 7.02000E00 3.29000E00 6.44000E00 1.66800E01 -7.80000E-01 -1.27800E01 -1.01400E01 -3.41000E00 4.53000E00 1.17100E01 8.10000E00 3.37000E00 -5.51000E00 -1.26600E01 -5.02000E00 1.86000E00 2.95000E00 1.07000E00 5.13000E00 -2.69000E00 -4.75000E00 4.13000E00 -5.72000E00 -3.87000E00 -5.96000E00 -1.21100E01 2.56000E00 6.68000E00 9.92000E00 1.02500E01 -6.42000E00 -1.16000E01 -2.93000E00 1.00000E-02 5.04000E00 -1.17800E01 1.48900E01 3.37000E00 -1.85100E01 -5.05000E00 5.78300E01 1.67600E02 -6.23900E01 -1.96430E02 5.70000E-01 1.82660E02 2.10000E-01 -1.56880E02 3.33200E01 7.43700E01 4.86200E01 1.22030E02 -2.94000E01 -1.48480E02 -3.81000E01 1.26730E02 1.46540E02 9.28300E01 5.38000E00 5.23000E00 -4.19200E01 -1.01480E02 -1.57800E01 4.05900E01 -3.33000E00 -7.26000E01 -2.59400E01 3.01900E01 -2.97000E00 -7.71500E01 -7.05500E01 -3.36800E01 -1.96400E01 -3.21500E01 2.98000E00 2.21900E01 -1.60300E01 -3.14200E01 -1.62600E01 -2.06200E01 -4.21000E01 -8.62100E01 -5.86100E01 -1.31100E01 -2.92000E01 -4.17700E01 -2.17000E01 -4.90000E01 -1.35110E02 -1.48770E02 -1.18730E02 -1.13670E02 -1.35370E02 -1.39640E02 -9.09400E01 -4.06800E01 -4.88600E01 -1.04280E02 -9.73500E01 1.18500E01 2.32380E02 4.33480E02 4.10370E02 7.31500E01 -1.97570E02 -1.56480E02 4.30200E01 2.22640E02 2.42600E02 1.45950E02 8.18000E00 -2.78500E01 1.70400E01 2.83100E01 -1.19090E02 -2.60930E02 -2.67910E02 -1.58860E02 1.07000E01 1.65480E02 1.65880E02 8.13000E00 -2.46510E02 -3.20800E02 -1.77100E02 -2.78100E01 3.41000E01 4.98700E01 7.00600E01 8.37900E01 1.01850E02 1.13360E02 9.31100E01 -3.38600E01 -1.32730E02 -9.55400E01 -Frame 160 5.28800E01 2.13830E02 2.32550E02 1.30630E02 -1.15600E01 -1.25130E02 -1.21090E02 -5.58100E01 -6.04600E01 -7.72000E01 -5.13900E01 -1.27400E01 3.31100E01 2.33400E01 -4.67600E01 -1.25990E02 -2.30560E02 -2.11160E02 -9.99800E01 3.27100E01 1.22450E02 1.06830E02 3.66100E01 -3.28300E01 -5.24000E01 -2.25400E01 4.12500E01 7.69600E01 6.66900E01 6.20300E01 5.91600E01 9.01400E01 1.08990E02 4.03200E01 -5.05100E01 -1.19100E02 -8.57000E01 -1.21900E01 2.86000E01 3.06200E01 -6.33000E00 -7.54200E01 -9.45800E01 -7.22500E01 -4.31700E01 -3.41600E01 -5.08500E01 -5.20200E01 1.81000E00 2.32900E01 6.34000E01 8.16800E01 3.54400E01 -5.92700E01 -4.08600E01 3.91500E01 8.85900E01 1.09470E02 1.31890E02 6.68800E01 -5.02000E01 -6.85000E00 5.88500E01 3.85300E01 1.75500E01 1.09100E01 5.06000E00 2.80300E01 -7.31000E00 -6.73000E00 -2.71200E01 -8.91100E01 -8.99300E01 -3.26900E01 6.35000E00 8.59000E00 8.90000E-01 -2.00500E01 -5.26200E01 -4.41500E01 -6.38000E00 2.65600E01 4.90000E-01 -3.39000E00 1.16100E01 2.80600E01 5.79900E01 2.97900E01 -1.23100E01 -1.67000E01 -5.32100E01 -2.58000E01 3.74800E01 2.76800E01 -2.34500E01 -5.31400E01 -5.57000E01 -2.32900E01 -3.38600E01 -2.37300E01 -3.32700E01 -9.60800E01 -1.08750E02 -4.87200E01 -6.78000E01 -7.64200E01 -6.82500E01 -7.77800E01 -1.18550E02 -1.05490E02 -4.69500E01 -5.55800E01 -3.74500E01 -8.87500E01 -1.91580E02 -1.62440E02 -1.23280E02 -9.98300E01 -8.96000E01 -6.20100E01 -3.65500E01 2.56900E01 -2.52100E01 -1.67000E01 8.60500E01 1.03860E02 3.25090E02 4.69830E02 4.89590E02 6.33500E02 2.91280E02 -2.48770E02 -3.51260E02 -1.79570E02 2.56100E01 1.87120E02 1.41460E02 -4.37300E01 -2.30590E02 -1.91000E02 -1.72000E02 -3.18250E02 -3.73730E02 -2.79590E02 -1.51300E02 7.10700E01 3.16220E02 3.52630E02 2.03820E02 -4.17900E01 -1.79960E02 -1.03240E02 6.89400E01 2.63370E02 3.30560E02 2.31520E02 2.23210E02 1.74450E02 5.20400E01 -4.21800E01 -Frame 160 -1.46250E02 -1.95380E02 -1.36830E02 -7.83300E01 6.40600E01 8.28000E01 1.00500E01 -1.19950E02 -2.38850E02 -2.70200E02 -1.67270E02 -6.50100E01 1.54600E01 5.23900E01 6.74000E01 9.78000E01 1.10040E02 7.55500E01 2.69200E01 -2.42400E01 -1.99600E01 7.64700E01 1.53810E02 1.90400E02 2.02950E02 6.17100E01 8.06000E00 1.07600E01 -3.24500E01 -7.09500E01 -6.65600E01 -4.49600E01 -1.86400E01 -1.74800E01 -1.52600E01 -5.95000E00 -2.23400E01 -6.12100E01 -8.42200E01 -1.44860E02 -6.62400E01 4.88700E01 6.14900E01 1.10440E02 1.30800E02 7.86700E01 4.58600E01 3.40000E01 2.97500E01 4.73500E01 5.94600E01 8.29000E01 8.90000E01 1.08220E02 6.89500E01 3.84200E01 -9.07000E00 -6.20000E01 -6.54900E01 -4.60100E01 3.13000E00 5.98000E01 1.51800E01 -1.18200E01 7.37000E00 -8.40000E-01 -5.62900E01 -2.39000E00 2.31900E01 -1.04500E01 -1.81100E01 3.10200E01 3.26500E01 2.73100E01 2.37900E01 8.15000E00 -6.29700E01 -5.82200E01 9.74000E00 1.80000E00 4.62000E00 1.65300E01 2.80000E00 -4.93500E01 -4.20600E01 -1.05000E01 -6.69500E01 -1.13080E02 -8.55300E01 -3.50500E01 -1.00980E02 -9.88600E01 1.54100E01 -9.18100E01 -1.55270E02 -9.55600E01 -1.57930E02 -2.32100E02 -1.86370E02 -1.19080E02 -8.26300E01 -1.09010E02 -3.91400E01 -8.61100E01 -1.69490E02 -1.29330E02 -2.38500E01 -2.68130E02 -3.54760E02 2.72100E01 2.37910E02 3.53850E02 5.70000E02 6.01270E02 4.97930E02 7.85930E02 6.87120E02 -1.26350E02 -5.55810E02 -4.99990E02 -2.71950E02 1.47410E02 3.02610E02 6.13400E01 -1.61430E02 -2.99920E02 -4.16400E02 -5.07090E02 -5.15120E02 -3.09940E02 -1.23160E02 -1.65300E01 2.75370E02 5.66000E02 5.61060E02 3.29430E02 1.63300E01 -2.17460E02 -1.23270E02 1.25950E02 3.47760E02 3.50110E02 3.19220E02 2.08100E02 2.13800E01 -1.30100E02 -1.61110E02 -2.44900E02 -3.14030E02 -3.38990E02 -2.40400E02 -3.35400E01 1.06740E02 9.82500E01 -5.36000E01 -1.85100E02 -1.88500E02 -1.30840E02 -5.52900E01 3.46300E01 -Frame 160 1.34280E02 1.95870E02 2.06170E02 2.10590E02 1.92950E02 1.07590E02 -1.50000E00 -7.69500E01 -1.15650E02 -3.24300E01 9.64000E01 1.26130E02 1.24670E02 4.80600E01 -9.49500E01 -1.70280E02 -2.15770E02 -1.84460E02 -9.20100E01 -5.36200E01 -5.10000E01 -1.62600E01 4.55600E01 6.42400E01 5.04300E01 -1.48600E01 -8.21600E01 -6.74700E01 2.67300E01 1.70810E02 2.47180E02 2.70680E02 1.73660E02 3.24900E01 -1.00600E01 -4.19000E01 -1.16700E01 4.85200E01 -1.44600E01 -2.73600E01 -2.62000E00 2.69000E01 3.53200E01 -2.00000E-02 -9.04400E01 -1.27560E02 -1.30700E02 -6.08100E01 4.33000E01 8.55900E01 1.29110E02 1.03860E02 5.77400E01 1.21500E01 3.71500E01 3.49000E01 -2.14400E01 6.51000E00 4.73300E01 7.43800E01 1.03210E02 7.58500E01 -1.04100E01 -6.13100E01 -6.67100E01 -8.82000E01 -5.82600E01 -6.03300E01 -7.74000E01 -5.29200E01 -6.76300E01 -6.57300E01 -4.71000E00 -2.68000E01 -3.75500E01 -5.76000E01 -2.62200E01 2.91500E01 4.20000E00 -1.02530E02 -7.44700E01 -8.14800E01 -1.86640E02 -8.08900E01 2.31900E01 -3.75500E01 -1.61150E02 -1.53440E02 -9.73700E01 -1.60500E02 -1.60460E02 -8.53000E01 -2.47770E02 -4.08070E02 -1.62990E02 -1.24230E02 -3.06210E02 -8.05900E01 8.50200E01 -6.03900E01 1.29700E02 3.56490E02 4.11910E02 7.01620E02 9.83610E02 1.14340E03 6.82090E02 -2.21070E02 -5.73890E02 -7.16030E02 -6.31860E02 -2.14800E01 1.56800E02 -1.52550E02 -2.93200E01 -6.22500E01 -4.19140E02 -4.92680E02 -5.10050E02 -5.18510E02 -1.68790E02 1.26850E02 3.80460E02 5.94510E02 6.35590E02 5.90330E02 3.51120E02 3.72000E01 -4.14400E01 -5.14500E01 -1.54700E02 1.70200E01 2.21050E02 2.20200E02 1.84140E02 6.08200E01 -2.83340E02 -3.78850E02 -3.57940E02 -4.23040E02 -3.07760E02 -1.29640E02 -4.39100E01 4.94900E01 9.57100E01 1.41250E02 1.59050E02 1.07240E02 3.37200E01 -6.81100E01 -1.10030E02 2.18500E01 1.73780E02 2.57240E02 3.35040E02 2.51940E02 4.50500E01 -1.02260E02 -1.83010E02 -1.45070E02 -Frame 160 -7.28100E01 -3.72400E01 -4.25300E01 -5.79400E01 -6.77000E00 9.90000E-01 -5.10100E01 -6.05700E01 -1.02370E02 -1.45370E02 -1.09570E02 -5.85700E01 1.10500E01 8.18000E01 1.41650E02 1.35210E02 1.10440E02 1.14800E02 -7.81000E00 6.48000E01 9.06000E01 3.21200E01 2.44810E02 1.84860E02 9.69000E01 6.31500E01 5.23200E01 6.71300E01 -1.76400E01 -1.46990E02 -1.10180E02 -1.22110E02 -1.55280E02 1.05680E02 1.79620E02 7.56900E01 7.14900E01 -8.90000E-01 -1.36490E02 -9.51400E01 9.59000E00 7.85600E01 1.83600E02 1.81730E02 1.85650E02 1.44540E02 3.30500E01 -4.78900E01 -4.42600E01 -8.24500E01 -7.27200E01 -3.26000E01 -3.81900E01 3.41000E01 7.46100E01 6.32000E00 -1.20700E01 -6.10000E01 -1.59370E02 -1.26620E02 -7.37300E01 -6.21300E01 -2.51100E01 2.00800E01 -1.23500E01 2.23000E00 6.26000E00 -1.31590E02 -1.47580E02 -4.99300E01 -1.39220E02 -1.17150E02 -4.13000E01 -1.65080E02 -1.30550E02 -1.18850E02 -2.24700E02 -1.75640E02 -2.34930E02 -2.60870E02 -1.97410E02 -2.43850E02 -1.49550E02 4.17500E01 1.18700E01 1.16000E02 4.22190E02 5.66410E02 8.41530E02 1.20736E03 1.28039E03 5.58530E02 -3.65100E02 -7.15870E02 -8.53750E02 -6.41050E02 -1.63150E02 -8.83100E01 -1.91070E02 1.43170E02 1.29610E02 -2.60490E02 -4.21410E02 -5.02920E02 -4.41500E02 -1.52800E02 6.49300E01 3.26290E02 6.19390E02 7.70950E02 7.97470E02 5.61080E02 1.89890E02 3.20900E01 -1.84570E02 -4.06710E02 -1.57300E02 1.32000E02 1.02150E02 9.33100E01 -5.48600E01 -2.17530E02 -8.10000E01 -4.71500E01 -2.77190E02 -3.54070E02 -3.84990E02 -2.82510E02 -1.36100E01 1.81600E02 3.81660E02 4.37540E02 2.54740E02 1.16060E02 4.00000E00 -8.75100E01 2.25000E00 3.58000E01 4.37000E00 1.13980E02 1.82890E02 1.44780E02 1.05380E02 4.69000E00 -6.60900E01 -9.09700E01 -1.78510E02 -2.08570E02 -1.71350E02 -1.17810E02 3.50000E00 1.05560E02 1.06680E02 8.67400E01 -1.89000E00 -1.05250E02 -9.07000E01 -4.56100E01 -3.90800E01 -5.31000E00 -Frame 160 -6.49000E00 4.83000E01 1.75740E02 2.16960E02 1.69260E02 1.04940E02 5.50000E-01 -4.60500E01 -1.80300E01 6.38900E01 1.48300E02 1.22200E02 1.69200E02 2.79520E02 2.58020E02 1.96650E02 8.82400E01 -1.64560E02 -3.09980E02 -1.87570E02 -1.63170E02 -1.04840E02 1.36410E02 1.32010E02 1.72370E02 2.54840E02 5.96500E01 -7.46000E01 -5.19000E01 -8.94200E01 -4.29900E01 9.39400E01 1.71040E02 2.27390E02 2.37300E02 1.89330E02 1.27740E02 5.17000E00 -1.36150E02 -2.00670E02 -2.37960E02 -1.98150E02 -4.09000E01 5.22700E01 4.52900E01 4.60700E01 4.58500E01 -4.64000E01 -6.54400E01 -6.79900E01 -1.52540E02 -1.17550E02 -7.73600E01 -2.78500E01 1.25220E02 5.89100E01 -1.05000E01 4.39600E01 -1.92930E02 -2.89960E02 -1.20720E02 -3.21140E02 -3.75470E02 -1.50150E02 -1.71750E02 -2.32890E02 -3.67400E01 -7.85300E01 -2.60580E02 -1.78060E02 -8.88700E01 -3.48900E01 2.34740E02 4.30440E02 6.18750E02 9.44280E02 1.19799E03 1.34745E03 7.48330E02 -3.74930E02 -8.15480E02 -9.75810E02 -8.95130E02 -3.59090E02 -1.96130E02 -3.34950E02 3.52400E01 2.19830E02 4.91000E00 4.33000E00 -1.91280E02 -4.94770E02 -3.81200E02 -1.41790E02 2.61120E02 7.08210E02 8.08440E02 7.66010E02 6.35570E02 3.66540E02 2.43900E02 -5.17000E01 -4.42330E02 -4.52570E02 -3.01660E02 -2.10770E02 -1.48500E01 2.71600E01 -5.75400E01 4.22100E01 4.20200E01 -8.12000E01 -1.82140E02 -3.19020E02 -3.57830E02 -2.38510E02 -8.29000E00 3.22040E02 5.10270E02 4.25840E02 2.96410E02 1.37720E02 -2.09800E01 -3.95400E01 -6.76100E01 -1.45460E02 -1.03560E02 -5.42500E01 1.76500E01 1.29770E02 1.74250E02 1.40960E02 3.45300E01 -1.51200E02 -2.37510E02 -2.19250E02 -1.87210E02 -7.50000E01 -2.25000E00 8.75000E00 1.17080E02 1.52650E02 7.01800E01 6.81000E01 -2.01000E01 -1.50000E02 -1.28770E02 -1.12760E02 -5.51500E01 7.92900E01 1.40810E02 1.97100E02 2.18950E02 1.37280E02 7.89700E01 3.80000E00 -8.16800E01 -7.47100E01 -4.14400E01 -2.40900E01 -Frame 160 2.78300E01 3.43400E01 2.40300E01 4.03390E02 6.50120E02 1.32900E02 1.49600E02 2.24720E02 -5.70000E02 -4.04720E02 8.30800E01 -3.89090E02 -9.24800E01 4.61400E02 1.16990E02 1.47840E02 3.18530E02 -4.47700E01 -1.88230E02 -1.58920E02 -1.99530E02 -6.51900E01 8.83800E01 2.47630E02 3.55590E02 2.87580E02 2.47230E02 1.24440E02 -1.67220E02 -2.63700E02 -2.28880E02 -3.11740E02 -2.09850E02 4.54000E01 1.15100E01 1.45700E01 1.66720E02 1.54300E01 -9.65400E01 -3.18700E01 -1.76160E02 -2.40740E02 -1.39090E02 -6.01700E01 -5.76000E00 7.93300E01 1.46970E02 -4.64400E01 -1.26790E02 -1.66510E02 -4.13310E02 -4.19370E02 -2.94250E02 -2.80020E02 -2.29130E02 -9.85000E01 -8.17900E01 -1.71540E02 -9.89600E01 2.90000E00 1.12850E02 3.89040E02 5.78360E02 7.80960E02 1.04008E03 1.29425E03 9.92110E02 8.77000E00 -6.64900E02 -9.25700E02 -9.56640E02 -5.51610E02 -2.29530E02 -3.64280E02 -2.22870E02 1.48100E02 1.82380E02 9.75300E01 -9.40500E01 -4.19480E02 -4.51600E02 -1.86320E02 1.87300E02 5.43260E02 6.98690E02 7.43260E02 6.77520E02 4.62140E02 3.18710E02 8.36000E01 -3.07800E02 -4.83960E02 -4.08070E02 -3.25420E02 -1.37890E02 3.65800E01 8.42000E00 4.53900E01 6.24700E01 -7.29700E01 -1.67520E02 -2.24830E02 -2.73700E02 -2.23830E02 -1.15220E02 1.07840E02 3.74680E02 4.69410E02 3.87630E02 2.16970E02 8.85000E00 -8.36900E01 -7.79900E01 -1.02020E02 -1.16680E02 -7.16700E01 -2.41900E01 7.57900E01 1.46800E02 1.43880E02 8.17500E01 -5.13600E01 -1.61520E02 -2.15920E02 -2.10790E02 -1.48300E02 -5.47400E01 2.17600E01 7.36000E01 8.79700E01 6.17000E01 2.85600E01 -4.63000E00 -6.38400E01 -1.26820E02 -1.32630E02 -8.15000E01 8.28000E00 1.37820E02 2.01230E02 1.99410E02 1.77350E02 1.06450E02 1.62700E01 -1.77000E01 -5.96900E01 -1.00910E02 -5.33000E01 -1.16000E00 3.26000E01 3.73800E01 1.27280E02 6.24850E02 6.89240E02 7.80100E01 -4.91500E01 -2.71150E02 -6.78720E02 -3.26230E02 5.48000E00 -Frame 160 -7.45500E01 1.12020E02 3.34260E02 3.72070E02 2.80720E02 7.63100E01 -1.12460E02 -3.27930E02 -3.96730E02 -1.14270E02 1.37040E02 2.42000E02 3.64990E02 3.86460E02 2.48260E02 1.05590E02 -5.55500E01 -3.10580E02 -4.41170E02 -3.63360E02 -2.05790E02 3.85000E00 1.46970E02 1.25380E02 1.21010E02 5.34000E01 -1.00340E02 -1.05730E02 -1.73180E02 -2.60550E02 -1.78380E02 -1.60510E02 -4.69500E01 1.61150E02 1.98520E02 4.88500E01 -9.85000E01 -2.93320E02 -5.10900E02 -4.19750E02 -3.11420E02 -3.17490E02 -1.62500E02 -6.06200E01 -1.33590E02 -1.21750E02 -9.74900E01 -4.14500E01 1.03300E02 2.54370E02 4.73820E02 6.86570E02 8.94230E02 1.31947E03 1.14765E03 9.65000E01 -5.45170E02 -8.69100E02 -1.10118E03 -5.54380E02 -9.21500E01 -3.52550E02 -1.15690E02 1.76580E02 -4.43000E01 6.01000E00 -7.51500E01 -4.78770E02 -4.61450E02 -2.42200E02 5.00100E01 5.65160E02 7.87670E02 7.66300E02 6.72550E02 3.46290E02 2.06650E02 6.15400E01 -3.43070E02 -4.35830E02 -2.85020E02 -2.44260E02 2.30000E01 1.71510E02 -4.35400E01 -4.01900E01 -2.36900E01 -2.18650E02 -2.37430E02 -2.58570E02 -3.52130E02 -2.03270E02 -3.96400E01 1.61060E02 4.35790E02 4.53590E02 2.98510E02 8.53600E01 -1.68450E02 -1.58940E02 -6.69800E01 -6.61100E01 3.58500E01 4.99300E01 1.64000E01 1.42820E02 1.56020E02 6.44900E01 8.00000E-02 -1.75310E02 -3.34950E02 -2.54210E02 -1.37740E02 -1.85500E01 8.83300E01 5.34200E01 1.83700E01 3.21000E00 -4.04300E01 -6.53900E01 -1.13070E02 -1.79130E02 -1.43080E02 -8.58000E01 1.33100E01 1.65450E02 1.88120E02 1.76300E02 1.46940E02 4.15300E01 -2.31800E01 -3.18700E01 -6.68000E01 -4.57500E01 2.79900E01 6.79800E01 9.61400E01 7.90800E01 -2.58000E00 2.52400E01 5.85900E02 4.90360E02 -1.68570E02 1.13310E02 -9.11700E01 -7.54860E02 -1.78350E02 2.08160E02 -3.02570E02 3.11900E01 4.27240E02 3.21400E01 -4.42000E01 1.99150E02 -1.51500E01 -3.01050E02 -1.70500E02 -1.47500E01 4.48300E01 2.59210E02 -Frame 160 4.28980E02 2.96610E02 1.09890E02 9.32000E00 -1.39340E02 -3.40440E02 -3.41420E02 -1.31100E02 -1.19150E02 -7.07200E01 6.52700E01 -5.96000E01 -6.62800E01 2.08900E01 -1.09270E02 -1.87360E02 -1.58700E02 -1.64020E02 -1.22370E02 -1.73400E01 8.89300E01 1.42380E02 2.33000E00 -1.40070E02 -2.36760E02 -3.72240E02 -3.62590E02 -2.77340E02 -2.58240E02 -2.39360E02 -1.63730E02 -1.17670E02 -1.30140E02 -2.09940E02 -2.43080E02 -1.94090E02 6.75200E01 3.83080E02 6.83970E02 1.01147E03 1.12312E03 1.24417E03 6.28830E02 -4.41070E02 -7.99580E02 -9.75380E02 -8.07680E02 -1.41040E02 3.83300E01 -8.98100E01 1.55150E02 6.85200E01 -2.50870E02 -3.14920E02 -5.36680E02 -6.49830E02 -3.30920E02 -1.29000E01 4.16900E02 8.41540E02 9.30480E02 7.78280E02 4.11650E02 -2.66800E01 -1.82510E02 -2.89960E02 -3.29440E02 -1.20820E02 5.23700E01 1.44870E02 1.93100E02 6.06500E01 -1.34940E02 -1.75440E02 -2.78020E02 -4.51510E02 -4.59950E02 -3.56240E02 -1.30020E02 1.82280E02 3.49030E02 3.96580E02 2.81210E02 4.70000E01 -1.45500E02 -2.15820E02 -1.65120E02 1.29000E00 8.88300E01 1.15980E02 2.02850E02 2.27210E02 1.72110E02 6.71500E01 -1.50110E02 -2.97940E02 -2.99060E02 -2.37940E02 -6.17200E01 9.69900E01 1.17500E02 9.15200E01 1.36400E01 -1.18670E02 -1.54970E02 -1.77260E02 -2.29090E02 -1.82330E02 -9.89800E01 -2.79900E01 1.14190E02 1.63630E02 9.44200E01 6.49600E01 7.51000E00 -5.07400E01 -4.97600E01 -1.37200E01 3.04300E01 1.21900E02 1.82070E02 1.60920E02 1.21960E02 5.36800E01 1.47240E02 1.17560E02 -4.21400E01 1.45270E02 2.79350E02 -6.66700E01 -2.05310E02 -1.29030E02 -3.38260E02 -3.38640E02 2.72800E01 7.54800E01 -6.79100E01 1.02320E02 1.75710E02 4.20000E00 -2.46200E01 3.16900E01 -2.32900E01 -3.89500E01 1.11940E02 1.74390E02 1.72610E02 2.19620E02 1.56890E02 -3.09100E01 -1.56470E02 -2.14750E02 -2.67620E02 -2.66870E02 -1.43850E02 -6.19000E01 -7.13700E01 -2.50800E01 -8.83500E01 -1.45510E02 -Frame 160 -8.53200E01 -1.35210E02 -1.76540E02 -3.10100E01 -2.29800E01 -3.17100E01 5.52900E01 -5.21000E01 -2.05790E02 -1.92070E02 -2.75780E02 -3.48860E02 -2.88920E02 -2.83910E02 -1.48540E02 -1.53910E02 -1.69370E02 -1.57220E02 -2.15620E02 -2.39700E02 -2.62380E02 -9.06000E01 3.39490E02 8.19480E02 1.15148E03 1.28063E03 1.07857E03 2.02280E02 -6.70250E02 -8.81090E02 -9.12600E02 -3.96230E02 2.10460E02 2.51690E02 8.89400E01 5.20600E01 -2.21020E02 -5.06350E02 -5.99050E02 -7.42090E02 -6.01910E02 -2.17900E02 2.74110E02 7.10000E02 9.98640E02 8.34230E02 4.36940E02 -6.50400E01 -4.00470E02 -3.41890E02 -1.14180E02 1.68670E02 3.37100E02 3.27420E02 2.02140E02 3.18100E01 -1.94800E02 -3.37220E02 -4.27720E02 -4.70620E02 -4.65420E02 -2.59650E02 3.76900E01 2.42150E02 3.08670E02 1.88930E02 -6.37100E01 -2.31120E02 -2.53510E02 -1.89380E02 -3.41200E01 1.23940E02 2.67740E02 2.90710E02 2.64100E02 2.00410E02 4.15600E01 -1.77240E02 -2.73640E02 -2.68770E02 -1.72510E02 4.28700E01 1.80850E02 1.82910E02 1.22850E02 -3.91900E01 -2.18210E02 -3.14570E02 -3.28630E02 -2.15840E02 -8.33900E01 7.20000E00 8.75500E01 1.05270E02 3.84100E01 4.20000E-01 -1.05770E02 -1.72170E02 -1.02490E02 -5.65900E01 5.67500E01 2.16510E02 2.21980E02 1.92390E02 1.07690E02 -2.07400E01 -2.01300E01 -5.49000E00 -3.74000E01 -3.82700E01 3.24860E02 6.28910E02 8.07800E01 1.46400E01 2.91460E02 -6.27410E02 -6.46090E02 1.42600E01 -2.41990E02 -3.10950E02 4.12230E02 3.35370E02 -8.61900E01 4.72900E01 1.14850E02 -2.42610E02 -3.60900E02 2.14800E01 7.66500E01 1.44440E02 4.66180E02 4.35430E02 8.43300E01 1.93100E01 -1.53720E02 -3.30940E02 -3.05320E02 -1.55620E02 -2.21500E01 -3.85400E01 -2.41000E00 2.38300E01 -1.70150E02 -2.13980E02 -2.40980E02 -3.85610E02 -1.84380E02 1.04210E02 5.55900E01 1.44380E02 1.38750E02 -2.11210E02 -3.19820E02 -2.56520E02 -3.45060E02 -3.57060E02 -1.13150E02 -1.05650E02 -1.02880E02 7.90100E01 -Frame 160 -8.96100E01 -2.93420E02 -4.13320E02 -4.18610E02 -4.19750E02 -3.36200E01 7.11390E02 1.06969E03 1.09901E03 1.26318E03 7.91250E02 -3.93980E02 -8.23450E02 -7.25400E02 -6.48630E02 1.09110E02 5.79160E02 2.53190E02 4.89000E01 -4.77500E01 -4.84340E02 -7.80980E02 -8.56080E02 -7.06740E02 -4.07180E02 1.81950E02 7.43050E02 8.43740E02 6.92710E02 4.02340E02 -1.17390E02 -4.80080E02 -2.68540E02 3.78000E00 2.98500E02 5.42040E02 5.30600E02 3.19320E02 1.03230E02 -2.07610E02 -4.79840E02 -6.07020E02 -4.83560E02 -2.56840E02 -1.98900E01 1.98380E02 3.00190E02 1.44850E02 -8.04400E01 -3.02630E02 -3.77420E02 -3.24190E02 -1.48040E02 6.16600E01 2.55750E02 3.77570E02 4.05780E02 2.46470E02 -2.10000E01 -1.70720E02 -2.22910E02 -2.32510E02 -6.82000E01 1.44240E02 1.92100E02 2.67250E02 2.00470E02 6.44000E00 -2.06590E02 -3.22010E02 -3.65700E02 -2.52410E02 -8.14000E01 1.25950E02 1.77570E02 1.02600E02 -2.80000E00 -1.51470E02 -2.98610E02 -2.47040E02 -1.61670E02 -5.85400E01 1.17800E02 1.70450E02 1.92540E02 2.19110E02 1.08280E02 2.29100E01 -3.71300E01 -9.80000E01 2.03300E01 9.52900E01 1.77470E02 6.73020E02 4.39270E02 3.59000E01 1.42050E02 -2.16620E02 -5.73150E02 -2.77150E02 -1.83730E02 -1.25250E02 4.21500E01 2.45680E02 1.72270E02 -1.25570E02 -1.07500E02 -1.72770E02 -3.05900E02 -1.12870E02 1.39220E02 2.09960E02 4.11680E02 3.54250E02 2.20720E02 3.88700E01 -1.64620E02 -1.99230E02 -1.74710E02 -1.40260E02 1.04390E02 9.25100E01 5.01800E01 1.65000E01 -2.20230E02 -3.25070E02 -3.72850E02 -3.66770E02 -1.79180E02 -4.86500E01 1.61930E02 2.41840E02 2.39700E01 -3.16800E01 -1.88040E02 -4.75080E02 -3.54580E02 -2.20060E02 -1.78220E02 -4.69700E01 6.73300E01 -3.99500E01 -1.19560E02 -2.17570E02 -3.30460E02 -4.72590E02 -3.71740E02 -1.93500E02 3.00350E02 8.10110E02 1.08881E03 9.83070E02 9.90130E02 1.83500E02 -7.75210E02 -7.03810E02 -3.42530E02 -3.87600E01 4.81430E02 4.72250E02 -Frame 160 1.52350E02 -4.95700E01 -3.02670E02 -5.82300E02 -9.12030E02 -7.76120E02 -4.14320E02 -1.30000E01 4.59680E02 8.33490E02 5.50040E02 1.75290E02 -1.46220E02 -3.63540E02 -2.44250E02 5.29400E01 2.76250E02 4.59190E02 5.04350E02 5.18440E02 3.44500E02 -1.22110E02 -4.17000E02 -5.08590E02 -4.46520E02 -1.28110E02 1.38260E02 2.40730E02 2.21140E02 -6.26000E00 -1.95680E02 -2.78770E02 -3.37170E02 -2.87070E02 -1.87170E02 -6.00300E01 2.22070E02 3.72660E02 3.16540E02 1.83380E02 -5.40700E01 -2.12810E02 -2.22260E02 -1.54800E02 5.28800E01 1.93920E02 2.52130E02 2.80900E02 1.92300E02 5.57900E01 -9.29800E01 -2.79250E02 -2.90010E02 -1.45830E02 2.94000E00 1.65300E02 1.77520E02 2.19500E01 -8.24500E01 -1.59000E02 -2.24770E02 -2.13370E02 -1.82430E02 -1.14380E02 -1.91400E01 1.21040E02 2.25420E02 1.49800E02 5.56900E01 -6.39000E00 -7.73900E01 1.94800E01 1.23320E02 1.36250E02 1.49450E02 4.54920E02 8.31420E02 2.35810E02 -2.76400E02 -1.05150E02 -2.17470E02 -4.34030E02 -4.78600E01 2.92310E02 1.47400E01 -1.92410E02 2.17230E02 1.73350E02 -3.97030E02 -3.66660E02 -9.20000E01 -1.65760E02 -3.76500E01 3.99450E02 5.24690E02 1.89320E02 -4.35800E01 7.43800E01 1.29400E01 -2.24390E02 -1.11830E02 1.01330E02 6.00000E01 1.07350E02 2.16080E02 1.16990E02 -2.47250E02 -4.08500E02 -2.49340E02 -2.27020E02 -2.32800E02 6.74500E01 2.47910E02 2.37100E01 -4.84500E01 -3.28000E01 -1.80640E02 -3.81890E02 -3.24020E02 -1.38080E02 -1.04290E02 -7.23900E01 1.06530E02 5.28500E01 -1.70570E02 -2.58770E02 -2.69490E02 -3.03330E02 -2.59980E02 -1.97100E02 1.09850E02 5.75130E02 7.56210E02 7.70150E02 8.53790E02 2.01230E02 -3.40670E02 -3.78980E02 -1.79100E02 3.31400E01 2.38920E02 2.49850E02 2.91900E02 1.97000E02 2.50100E01 -2.52290E02 -5.48900E02 -6.10150E02 -5.29720E02 -2.29320E02 2.84560E02 4.27040E02 2.75510E02 2.57030E02 -2.60000E-01 -1.65500E02 -1.07690E02 -1.53990E02 -6.55800E01 1.37620E02 -Frame 160 2.73970E02 5.07280E02 4.00340E02 1.63740E02 2.17000E01 -1.86720E02 -1.98380E02 -6.81900E01 -6.68900E01 2.65300E01 7.78300E01 6.86600E01 1.41160E02 6.67900E01 -7.59200E01 -1.14950E02 -2.52060E02 -2.08160E02 -5.57000E01 1.95300E01 1.06070E02 1.04190E02 4.91600E01 8.63900E01 -8.30000E00 -7.79000E01 -7.55700E01 -1.02090E02 -2.93300E01 7.57100E01 1.13930E02 1.74230E02 1.02240E02 6.94000E00 2.17000E01 -3.50900E01 -7.35900E01 -3.82000E01 -4.46700E01 2.47100E01 7.92200E01 9.63500E01 8.19300E01 -3.50000E01 -9.15000E01 -4.46500E01 3.70000E00 5.45500E01 8.09300E01 5.40600E01 1.93200E01 -4.50000E00 -1.70400E01 4.90600E01 9.01700E01 1.04800E01 -6.67000E00 2.16700E01 4.78800E01 2.98700E01 1.62900E01 7.62900E01 7.00900E01 5.96500E01 5.78500E01 4.29600E01 2.55900E01 3.66800E01 1.81000E01 1.49500E01 -7.29000E00 2.68100E01 7.29600E01 4.24900E01 4.80600E01 2.77800E01 8.70000E-01 -1.68500E01 -9.08000E00 -4.00000E-02 8.30000E00 9.91000E00 3.95800E01 3.41500E01 2.85400E01 4.47500E01 1.24400E01 -1.08600E01 -2.18500E01 -1.51400E01 -1.81900E01 -1.03000E01 1.58600E01 1.38300E01 3.74000E00 2.03500E01 -2.53000E00 -1.01000E01 -1.88800E01 -1.89000E01 -1.48900E01 -1.37300E01 -1.51000E00 4.10000E00 1.28900E01 -1.40500E01 6.20000E00 -2.69200E01 -5.90300E01 -5.20700E01 -3.88400E01 -5.01600E01 -3.37800E01 -4.18600E01 -5.71500E01 -5.38600E01 5.35800E01 1.01290E02 1.44380E02 1.13670E02 1.39100E01 -9.59400E01 -4.00900E01 2.65300E01 1.12190E02 1.71400E02 1.14290E02 2.83200E01 -1.32000E00 6.01400E01 5.14600E01 2.54800E01 -1.73100E01 -4.39000E00 -1.90500E01 8.38700E01 1.14910E02 1.58200E01 -3.33000E00 -4.30500E01 -5.09400E01 6.99900E01 6.06100E01 3.89000E01 3.50000E00 -2.49800E01 1.07000E01 7.94900E01 7.43500E01 7.90000E01 2.47400E01 1.08000E01 2.44000E00 -1.81600E01 -1.23600E01 4.65000E00 -6.80000E00 6.14200E01 8.37100E01 6.46300E01 -Frame 160 5.59200E01 1.39100E01 -8.39000E00 2.56500E01 2.47400E01 3.48000E01 2.51600E01 -8.78000E00 2.12600E01 3.62300E01 5.46500E01 3.56100E01 6.97000E00 -2.54000E00 1.96800E01 6.59000E00 2.91100E01 -4.68000E00 -2.54900E01 2.31000E01 5.91900E01 7.23600E01 5.38900E01 8.82000E00 -2.66300E01 -1.91300E01 7.64000E00 4.22500E01 3.89100E01 7.45000E00 1.40300E01 1.68200E01 7.00000E-01 1.91000E01 -2.93000E00 -2.62000E00 1.37200E01 3.65700E01 3.11100E01 5.47000E00 6.05000E00 1.46600E01 2.45400E01 5.87200E01 7.29200E01 2.85100E01 1.67200E01 3.45700E01 1.79600E01 3.48400E01 3.62300E01 3.46500E01 2.10100E01 2.09500E01 5.18900E01 5.67600E01 2.47500E01 1.47500E01 9.45000E00 2.20000E01 4.29400E01 4.25100E01 2.80500E01 2.61400E01 7.17000E00 2.36300E01 3.86000E01 2.90200E01 2.01400E01 1.59900E01 7.20000E-01 1.60000E01 1.37600E01 -8.54000E00 -8.50000E00 -1.34300E01 -3.48000E00 9.80000E00 6.50000E00 -6.89000E00 -8.67000E00 -2.34800E01 -1.07100E01 1.04800E01 -7.67000E00 -2.53600E01 -3.95600E01 -3.11500E01 -2.04400E01 -2.43700E01 -1.13900E01 -4.39900E01 -4.55500E01 -3.21100E01 -7.22000E00 5.34500E01 8.79500E01 9.34400E01 6.60200E01 -3.30000E00 -8.97500E01 -2.07800E01 3.03500E01 1.09040E02 1.31070E02 8.76700E01 4.28600E01 3.64000E00 6.02200E01 6.75100E01 2.89800E01 -6.75000E00 4.64400E01 2.02500E01 1.09250E02 1.06920E02 1.14400E01 -5.98000E00 -2.59100E01 -3.64100E01 4.68200E01 9.60000E00 2.92400E01 -1.35200E01 -3.25700E01 3.38400E01 6.12900E01 1.95500E01 7.85200E01 1.82600E01 3.14000E00 -4.43000E00 3.79000E00 -3.07200E01 3.77500E01 5.32000E00 7.19000E01 8.24900E01 5.03500E01 2.81900E01 1.43400E01 -7.93000E00 2.41400E01 2.62000E01 2.73200E01 2.74700E01 -1.38000E00 2.79000E01 5.30800E01 2.20100E01 2.99800E01 -1.18100E01 -2.68600E01 1.16700E01 -2.60000E00 -2.29000E00 8.05000E00 -4.28000E00 3.30300E01 6.44800E01 -Frame 160 4.48600E01 4.06100E01 -2.37900E01 -3.21400E01 -7.70000E00 9.52000E00 3.02800E01 4.96700E01 2.56300E01 2.18400E01 1.49300E01 3.38100E01 1.82600E01 -2.07700E01 -2.69700E01 6.68000E00 -1.62000E00 4.38400E01 4.16800E01 2.64300E01 2.37000E01 1.98800E01 4.94000E00 1.15500E01 -1.26300E01 3.47000E00 1.50800E01 1.10500E01 3.89000E01 4.35900E01 3.34000E01 3.18800E01 2.13000E01 1.43900E01 3.22700E01 1.66900E01 6.63000E00 1.82700E01 4.32700E01 6.00200E01 4.92500E01 3.11200E01 2.44200E01 -4.90000E-01 1.58500E01 2.07000E01 6.70000E00 -3.72000E00 1.56000E00 2.02000E00 1.05100E01 6.27000E00 1.09100E01 -1.93000E01 -2.84100E01 -6.76000E00 2.58000E00 -7.78000E00 3.56000E00 -1.27400E01 -1.45200E01 -1.73300E01 1.80000E00 4.53000E00 -1.76500E01 -3.84900E01 -1.99300E01 -2.47700E01 -2.27300E01 -1.76000E01 -2.12900E01 -3.80700E01 -6.43300E01 -5.63400E01 -2.20500E01 -9.68000E00 6.80800E01 1.06180E02 8.63600E01 3.68500E01 -3.12200E01 -7.53600E01 -1.67900E01 2.16100E01 1.07180E02 1.22300E02 5.87800E01 2.72500E01 -1.27000E00 2.33400E01 4.07000E01 -1.04300E01 1.28800E01 3.19100E01 2.55100E01 1.17900E02 7.00500E01 1.86700E01 -4.30000E00 -4.79600E01 -2.09100E01 6.50100E01 -4.60000E-01 1.20600E01 -1.40300E01 -2.39000E01 -4.00000E-02 2.75700E01 2.90200E01 3.25000E01 -3.29300E01 -2.43400E01 -7.45000E00 -1.00200E01 4.35000E00 1.71700E01 -1.56200E01 6.06000E01 3.91300E01 1.59700E01 4.20900E01 3.99000E00 -6.28000E00 4.31500E01 2.70800E01 4.45000E01 -1.57000E00 -1.30500E01 2.61400E01 7.53000E00 1.73500E01 2.54700E01 -1.31700E01 6.02000E00 4.81000E00 5.70000E-01 2.22100E01 -1.44900E01 -3.53000E01 2.90000E-01 4.99000E00 3.88400E01 4.17100E01 3.64000E00 -4.60000E00 -1.80800E01 -1.29500E01 2.73600E01 6.90000E00 -1.19000E00 -3.52000E00 -1.39100E01 1.14000E01 4.44900E01 1.65700E01 1.47800E01 1.59300E01 1.11100E01 4.14000E00 2.96000E00 -Frame 160 5.75000E00 1.46300E01 1.77800E01 3.00200E01 3.06200E01 3.22200E01 7.85000E00 -9.27000E00 -7.90000E00 -6.47000E00 2.00000E-02 2.57200E01 1.92000E01 1.64700E01 3.06500E01 3.92500E01 2.50900E01 1.84800E01 3.66000E00 1.23900E01 5.39000E00 2.71800E01 3.46300E01 2.52900E01 1.86500E01 3.38000E01 2.14000E01 2.46100E01 2.29100E01 -9.85000E00 -2.36000E01 -1.07400E01 3.54000E00 3.27000E00 -2.50000E01 1.14890E02 2.64010E02 1.55100E01 -2.32670E02 -3.31290E02 -4.66400E01 1.95860E02 4.56800E01 -1.84180E02 -2.06970E02 1.07300E01 9.71500E01 -1.85000E00 -1.22910E02 -1.53600E02 -8.41000E01 3.56200E01 8.00000E00 -1.32490E02 -1.90210E02 -1.85500E01 9.24200E01 1.69720E02 1.99240E02 1.66480E02 9.75500E01 -3.86000E01 -5.49200E01 -4.86900E01 3.78000E00 -7.13000E00 6.96300E01 1.22700E02 2.16300E02 1.25600E02 2.79900E01 -8.86500E01 -1.39800E02 -1.51390E02 -5.41900E01 3.00700E01 1.89100E01 3.83900E01 6.24400E01 8.51800E01 9.45500E01 -4.28700E01 -1.29490E02 -1.34660E02 -1.22860E02 -1.65800E01 3.30000E01 4.80800E01 9.45800E01 3.84300E01 9.45100E01 1.39240E02 3.72300E01 -7.49600E01 -1.60540E02 -1.74610E02 -1.79500E01 1.29570E02 1.83530E02 1.63990E02 4.87000E01 -1.19000E00 2.03900E01 2.26300E01 -8.50700E01 -1.89010E02 -1.82980E02 2.94100E01 1.70340E02 1.70470E02 5.94500E01 -7.00500E01 -1.00480E02 -8.47500E01 -8.74500E01 -6.51500E01 -7.91000E01 -7.34100E01 4.85200E01 1.37170E02 1.58430E02 1.24200E02 1.08000E01 -7.51100E01 -1.48600E02 -1.38220E02 5.61000E00 9.38800E01 8.67900E01 7.04000E01 7.94400E01 7.56900E01 1.47600E01 -1.10060E02 -1.68630E02 -1.72850E02 -1.03040E02 7.20200E01 1.72420E02 1.24760E02 4.65100E01 -3.42000E01 -4.83700E01 -5.39300E01 -8.76100E01 -8.42500E01 -4.37100E01 3.31200E01 1.38290E02 1.97580E02 1.15520E02 -2.71800E01 -1.38260E02 -1.12640E02 -2.51200E01 3.01300E01 3.90600E01 5.62300E01 7.48800E01 1.11040E02 -Frame 160 9.42200E01 1.38000E01 -9.71100E01 -1.77350E02 -1.24900E02 -1.37100E01 4.09300E01 8.52200E01 6.58000E01 1.37200E01 -3.19800E01 -6.50600E01 -1.53100E02 -2.26720E02 -2.63410E02 -1.36000E02 -3.75400E01 9.09800E01 1.38370E02 6.00800E01 -1.25700E02 -2.26120E02 -2.39450E02 -2.18990E02 -1.54720E02 -1.01350E02 -4.72700E01 -3.75100E01 4.55500E01 8.10000E00 -8.55500E01 -3.12050E02 -4.23300E02 -3.84640E02 -2.07480E02 -3.97100E01 1.52220E02 4.99880E02 6.60770E02 8.72980E02 4.37920E02 -1.04000E02 -6.90570E02 -5.50630E02 -3.38600E01 4.16900E02 3.65190E02 2.25530E02 1.61340E02 1.99020E02 2.46900E01 -4.06040E02 -7.69700E02 -8.18890E02 -3.73860E02 2.61240E02 5.67690E02 4.45050E02 1.75180E02 -1.02100E01 -2.62330E02 -3.69010E02 -2.94660E02 -1.95760E02 2.43500E01 1.99210E02 4.66260E02 5.31110E02 3.93460E02 3.11900E01 -3.12300E02 -4.55110E02 -2.88910E02 -1.63100E01 1.68720E02 2.05300E02 1.42810E02 1.49250E02 1.48750E02 -7.59000E01 -3.28420E02 -4.84440E02 -4.35840E02 -1.36350E02 1.57500E02 3.19260E02 2.62700E02 6.81300E01 -7.55300E01 -1.72570E02 -2.74460E02 -2.55260E02 -1.51250E02 -8.91000E00 1.62810E02 3.11660E02 3.33800E02 2.06300E02 -5.63400E01 -2.04050E02 -2.53140E02 -1.34520E02 -1.01200E01 9.01200E01 1.28360E02 1.44650E02 1.67300E02 5.94900E01 -1.07710E02 -3.14980E02 -3.09370E02 -1.76310E02 -2.29900E01 1.00070E02 1.09820E02 9.67500E01 3.41700E01 1.36100E01 -6.16100E01 -1.27110E02 -1.36530E02 -3.41300E01 7.64500E01 1.60360E02 2.10700E02 1.66390E02 8.15500E01 -3.09900E01 -7.59800E01 -6.82900E01 -5.23000E01 -1.67700E01 7.38700E01 9.32400E01 8.01200E01 9.85200E01 -1.16000E01 -1.25110E02 -1.75010E02 -1.19290E02 -4.77400E01 3.30600E01 6.13200E01 6.53900E01 2.45200E01 -2.46400E01 -5.73000E01 -1.00920E02 -1.50800E02 -1.29090E02 -6.26000E01 -1.30100E01 1.11100E01 2.09500E01 -4.39400E01 -1.30810E02 -1.59260E02 -7.84600E01 -6.11100E01 -2.31900E01 -Frame 160 -3.71000E01 -8.54300E01 -1.24200E02 -1.24080E02 -9.28700E01 -2.04640E02 -2.23710E02 -1.97200E02 -1.66730E02 -8.52100E01 -1.43140E02 -1.40780E02 -2.27270E02 -2.31280E02 -1.73260E02 6.16500E01 5.60700E02 8.21600E02 1.01876E03 3.96050E02 -2.27280E02 -5.93660E02 -1.70810E02 8.52700E01 1.93180E02 1.27240E02 1.37140E02 2.77220E02 2.21380E02 -8.03800E01 -5.79380E02 -7.27260E02 -5.62040E02 -1.61210E02 3.01300E01 2.46320E02 3.33930E02 3.29910E02 9.64400E01 -8.23500E01 -1.77600E02 -2.12640E02 -2.20580E02 -2.45800E01 2.20480E02 4.85890E02 5.24040E02 3.01880E02 -6.14200E01 -1.53880E02 -1.56040E02 -4.91100E01 -1.66820E02 -1.53010E02 -8.63000E00 1.55220E02 2.39990E02 1.66160E02 -5.41000E01 -2.36110E02 -3.24520E02 -3.35360E02 -1.60230E02 -4.65500E01 1.52670E02 1.73890E02 1.45590E02 8.02700E01 5.58500E01 -9.03800E01 -1.60050E02 -2.05730E02 -5.86400E01 1.29040E02 2.17390E02 2.42260E02 2.05670E02 1.06760E02 4.27000E01 -3.53700E01 -1.52810E02 -2.04730E02 -1.08060E02 1.97000E01 1.02390E02 1.04540E02 7.86600E01 -3.10900E01 -1.19200E02 -1.23920E02 -1.18670E02 -1.08150E02 -4.52100E01 -6.29000E00 5.98300E01 1.48930E02 1.75640E02 1.28010E02 2.47900E01 -1.66400E01 -3.13300E01 -1.14400E01 4.10800E01 9.31900E01 1.06830E02 1.13800E02 1.11890E02 4.18300E01 1.55800E01 -3.34800E01 -7.90100E01 -8.28600E01 -1.67400E01 3.44500E01 8.22000E01 7.73600E01 4.83100E01 1.43300E01 -3.97000E01 -7.73500E01 -8.30800E01 -6.29000E01 -1.70300E01 2.32800E01 4.98200E01 3.31400E01 -7.08000E00 -1.25300E01 -9.21300E01 -1.64100E02 -1.86140E02 -1.36690E02 -1.02590E02 1.06500E01 6.33700E01 1.09650E02 1.11250E02 -1.12100E01 -1.28450E02 -2.71200E02 -1.91120E02 -2.34400E02 -1.68820E02 -1.08080E02 -4.03900E01 -3.36000E01 -4.86000E01 -8.10500E01 -1.97460E02 -2.63320E02 -2.09010E02 -2.76870E02 -1.94620E02 2.39300E02 7.78360E02 9.82320E02 9.90650E02 3.15320E02 -2.90160E02 -4.77060E02 -Frame 160 -1.57270E02 -8.14300E01 -1.21600E01 7.82700E01 8.54300E01 2.35740E02 2.87490E02 1.08590E02 -3.39920E02 -5.25960E02 -6.62250E02 -4.82140E02 -1.60030E02 2.92160E02 3.84030E02 3.22360E02 2.07470E02 1.60830E02 5.36000E01 -4.99900E01 -1.83730E02 -1.78430E02 -6.68000E01 1.58340E02 3.14290E02 3.40770E02 3.50760E02 2.87750E02 4.65500E01 -2.02120E02 -2.60260E02 -2.49930E02 -1.92030E02 -9.21500E01 1.89100E01 1.05390E02 1.95450E02 1.75120E02 3.01000E00 -1.69410E02 -2.30990E02 -2.87250E02 -2.03980E02 -6.59500E01 9.74000E01 1.63700E02 1.78890E02 1.49380E02 1.41820E02 4.49000E01 -5.05000E00 -1.01530E02 -1.02890E02 -2.61900E01 6.79100E01 1.08860E02 2.00980E02 2.55770E02 1.45030E02 -3.12500E01 -1.41930E02 -1.75880E02 -1.67700E02 -1.12100E02 -1.17670E02 -8.43000E01 5.91800E01 1.94040E02 1.32890E02 3.57300E01 -8.14600E01 -8.81900E01 -1.09040E02 -4.04300E01 4.63400E01 4.77500E01 1.16160E02 1.57580E02 1.77140E02 1.34150E02 1.10720E02 2.94800E01 -7.02800E01 -8.30400E01 -8.10000E00 1.81800E01 4.52700E01 7.21700E01 8.08500E01 4.67400E01 4.65500E01 5.33000E00 -1.11500E01 -6.81100E01 -8.17500E01 -8.67200E01 -3.57500E01 2.58400E01 6.83200E01 6.10600E01 2.25300E01 2.80000E00 -3.55300E01 -3.80000E01 -5.65000E01 -5.95100E01 -8.95500E01 -1.04430E02 -8.46700E01 -6.82200E01 -5.92000E01 -2.18500E01 -4.53300E01 -5.65000E01 3.10300E01 -1.97700E01 -8.81300E01 -1.42530E02 -1.44490E02 -1.85390E02 -1.34400E02 -8.47300E01 -1.38470E02 -1.13770E02 -8.92300E01 -1.44880E02 -1.64150E02 -1.30900E02 -2.09540E02 -2.33460E02 -1.61950E02 2.10870E02 5.47970E02 7.36940E02 8.48040E02 4.53780E02 1.99200E01 -2.08350E02 -8.94600E01 -2.22790E02 -1.13020E02 -1.14740E02 -8.94000E01 4.81000E00 3.01930E02 2.33960E02 -4.43200E01 -2.57150E02 -4.67310E02 -4.81530E02 -3.21750E02 -6.47500E01 7.23000E00 6.94000E01 1.55400E02 2.82890E02 2.75040E02 2.55680E02 1.05480E02 -8.44600E01 -Frame 160 -2.09190E02 -1.01580E02 -2.15500E01 8.09700E01 1.85580E02 2.88250E02 1.92830E02 1.76290E02 1.35090E02 2.51000E00 -1.91150E02 -2.78600E02 -3.49480E02 -2.47220E02 -6.75700E01 7.96900E01 5.14200E01 6.52200E01 4.93800E01 1.80000E01 -3.63700E01 -9.13900E01 -1.58030E02 -2.03590E02 -1.57380E02 -2.76100E01 1.08180E02 1.68050E02 2.10600E02 1.53260E02 8.80000E01 5.36400E01 1.61700E01 -5.44700E01 -1.16240E02 -7.68100E01 -1.60900E01 4.35200E01 9.49300E01 8.98400E01 3.05100E01 -5.66800E01 -9.05100E01 -1.20300E02 -1.16900E02 -1.27290E02 -1.19890E02 -9.51600E01 -3.35900E01 4.49000E01 9.17600E01 7.49700E01 1.17580E02 2.04390E02 5.96900E01 -1.95400E01 -2.00000E-01 -5.26000E00 -9.44700E01 3.06500E01 9.86100E01 4.15800E01 3.87500E01 1.69800E02 9.07500E01 -1.58200E01 4.34000E00 -5.38700E01 -1.36820E02 -8.52000E01 3.10000E00 -2.87000E00 6.98000E00 5.41300E01 5.76900E01 3.63100E01 2.22400E01 3.72000E00 -8.13700E01 -1.22010E02 -1.09790E02 -9.50900E01 -5.48500E01 1.06800E01 3.12200E01 1.73600E01 9.05000E00 -8.53000E00 -7.46500E01 -1.49750E02 -1.52040E02 -1.55270E02 -1.35470E02 -4.69500E01 4.53300E01 2.40000E00 -2.88000E00 -2.93400E01 -6.66100E01 -1.63990E02 -1.66250E02 -2.21450E02 -2.59180E02 -2.18870E02 -1.20150E02 -1.57310E02 -6.75200E01 -7.89400E01 -1.08690E02 -1.22310E02 3.87100E01 3.11620E02 4.79630E02 6.31350E02 5.37150E02 2.00530E02 3.43200E01 5.29500E01 1.81200E01 -1.33790E02 -1.23260E02 -1.78280E02 -1.51830E02 3.35800E01 1.73690E02 1.69700E01 -1.22610E02 -2.01390E02 -2.31420E02 -2.07170E02 -1.27990E02 -1.31260E02 -1.40530E02 -9.99800E01 8.88900E01 1.88490E02 2.03970E02 2.11720E02 1.59500E02 5.45100E01 5.22000E00 2.34000E01 -9.88000E00 9.82000E00 5.81200E01 8.58600E01 9.13800E01 1.53990E02 1.74400E02 5.22900E01 -5.76300E01 -9.68800E01 -1.20240E02 -1.21200E02 -1.02070E02 -1.19250E02 -1.50850E02 -1.06290E02 -2.92600E01 3.61700E01 -Frame 160 5.35800E01 4.04700E01 -6.09000E00 -6.00900E01 -7.57100E01 -3.67500E01 -2.15600E01 -2.78900E01 4.60000E00 3.60800E01 8.64900E01 1.54370E02 1.62200E02 1.05120E02 6.21800E01 5.86000E00 1.80000E00 -1.93800E01 -2.01900E01 -4.70000E01 -8.75900E01 -9.63500E01 -3.72900E01 6.63000E00 2.39000E01 1.26800E01 5.10000E00 -5.67200E01 -4.14000E01 -4.15700E01 -2.47100E01 -6.33100E01 -3.05000E00 2.40700E01 1.14000E02 1.41600E02 1.48920E02 1.22330E02 9.98100E01 3.15100E01 2.10800E01 3.23200E01 -2.71100E01 -2.43400E01 2.95500E01 2.60900E01 2.95100E01 6.90200E01 7.47000E01 1.65000E01 2.25000E01 1.36800E01 -1.34100E01 -3.13100E01 -1.37200E01 -3.45600E01 -5.40000E01 -2.89800E01 -8.15000E00 9.34000E00 1.53700E01 1.25800E01 2.70000E00 -3.14800E01 -3.76800E01 -2.00300E01 -4.78100E01 -9.14000E01 -8.62500E01 -8.58600E01 -7.33800E01 -3.44500E01 -4.22900E01 -1.13400E01 -1.64300E01 -3.36700E01 -2.24200E01 -4.68100E01 -7.69200E01 -1.56900E02 -1.16220E02 -1.59190E02 -1.36360E02 -1.38720E02 -8.60500E01 -1.02700E02 -1.13800E02 -1.19170E02 -1.06630E02 -1.53640E02 -7.30000E01 4.91600E01 2.10010E02 3.93600E02 6.45470E02 5.15510E02 2.56050E02 1.07340E02 1.02950E02 4.53500E01 -2.50500E01 -1.13580E02 -2.49720E02 -1.77820E02 -6.52000E00 5.70900E01 -2.13800E01 -1.72500E01 -6.99700E01 -6.52500E01 -1.01320E02 -5.44100E01 -1.09000E02 -1.49180E02 -2.12470E02 -8.25300E01 -8.51000E00 1.25790E02 1.69110E02 1.78600E02 1.34210E02 1.68320E02 1.47330E02 1.09560E02 6.65300E01 4.81200E01 -2.38900E01 -2.20900E01 3.08000E01 8.33100E01 4.23800E01 2.11600E01 1.82800E01 4.03100E01 5.20000E01 3.02000E00 -7.64600E01 -1.27310E02 -1.52600E02 -1.39520E02 -1.22900E02 -6.66500E01 -2.56000E01 1.07400E01 -8.81000E00 2.30400E01 7.38500E01 9.21600E01 3.99500E01 -2.49100E01 -4.67500E01 -1.92200E01 9.18000E00 2.04500E01 3.20500E01 7.49800E01 1.01170E02 1.30080E02 1.21770E02 8.01000E01 -Frame 160 2.30800E01 -9.71000E00 -5.04900E01 -7.64700E01 -8.01700E01 -5.69000E01 -4.48500E01 -4.93800E01 -4.70000E01 -1.45000E01 2.20200E01 4.46500E01 3.59400E01 1.69300E01 2.23200E01 3.48600E01 4.17600E01 3.88400E01 3.08000E01 2.24900E01 3.99100E01 7.58400E01 6.98200E01 7.85600E01 9.35100E01 7.58500E01 5.15900E01 3.65500E01 1.20300E01 -9.24000E00 -2.11400E01 -1.93700E01 -1.45100E01 1.35300E01 3.34400E01 4.79500E01 2.28800E01 6.03000E00 -4.33000E00 -1.59900E01 -2.19800E01 -3.81200E01 -5.27100E01 -3.76900E01 -4.31600E01 -1.67500E01 -1.75000E01 -2.72500E01 -3.92700E01 -4.06200E01 -4.29700E01 -5.53500E01 -6.90600E01 -7.31300E01 -5.72600E01 -5.28500E01 -6.92600E01 -5.71200E01 -3.35600E01 -5.82500E01 -6.76600E01 -8.33100E01 -6.43800E01 -7.88200E01 -1.04650E02 -9.42000E01 -1.14360E02 -1.37060E02 -1.24360E02 -1.55180E02 -1.84840E02 -7.22800E01 5.97900E01 9.78500E01 2.98960E02 4.79980E02 5.55130E02 3.03080E02 2.33960E02 9.55000E01 1.21690E02 1.66000E01 -2.57300E01 -2.03320E02 -1.88190E02 -1.02400E02 -1.58500E01 -2.06000E01 -5.34700E01 -2.13000E01 1.48900E01 1.31900E01 -1.25700E01 -4.31100E01 -9.35500E01 -1.57460E02 -1.60200E02 -1.26880E02 -6.84200E01 1.29000E01 7.77100E01 1.21440E02 1.37400E02 2.10720E02 2.06110E02 1.74170E02 1.01090E02 6.26700E01 3.20200E01 1.04100E01 -1.68600E01 -1.29400E01 -4.58700E01 -1.07600E01 2.64600E01 7.08200E01 5.75000E01 5.37300E01 8.10000E-01 -2.27300E01 -7.19600E01 -7.26300E01 -8.72400E01 -9.62100E01 -1.07360E02 -1.11750E02 -6.91700E01 -1.52100E01 2.94300E01 4.64200E01 4.68900E01 4.73300E01 6.17400E01 5.55400E01 2.81000E01 8.79000E00 1.88000E00 -2.24000E00 4.52000E00 2.74900E01 3.91500E01 7.91400E01 1.04300E02 5.11500E01 5.83200E01 5.36700E01 4.88400E01 3.83000E00 -4.45600E01 -7.63900E01 -8.31200E01 -6.39700E01 -4.81600E01 -2.78100E01 -7.80000E00 2.68400E01 4.75300E01 7.58200E01 6.49200E01 6.36300E01 -Frame 160 4.62500E01 5.43000E01 3.25600E01 2.01300E01 3.23100E01 3.78500E01 1.35400E01 2.24800E01 5.16900E01 5.57700E01 5.39400E01 6.80200E01 5.34900E01 4.94800E01 3.93200E01 2.68300E01 1.29500E01 -1.23500E01 -7.40000E00 -1.12700E01 -2.42300E01 -3.05500E01 -2.90200E01 -2.84000E01 -2.37200E01 -1.28600E01 8.36000E00 -2.76000E00 -1.42100E01 -3.59900E01 -6.34000E01 -7.85900E01 -7.91700E01 -8.76900E01 -9.23900E01 -9.81500E01 -7.80000E01 -2.61600E01 -2.97000E01 -3.73300E01 -2.71700E01 -2.06800E01 -4.69800E01 -3.80600E01 -6.68400E01 -8.44600E01 -9.55600E01 -1.15930E02 -1.30840E02 -1.23110E02 -1.33050E02 -1.39200E02 -8.54400E01 -3.69700E01 2.00000E00 1.57140E02 3.33900E02 4.48790E02 4.00800E02 2.40950E02 1.61940E02 1.25350E02 1.48530E02 2.43100E01 -6.97500E01 -1.74630E02 -1.08570E02 -6.63500E01 -2.67500E01 -6.78900E01 -3.72300E01 -2.55800E01 3.44600E01 6.33000E00 1.33300E01 -1.74600E01 -3.81800E01 -1.32500E02 -1.51610E02 -1.50170E02 -6.25500E01 -4.51700E01 -2.02200E01 2.45100E01 8.75900E01 1.58530E02 1.69510E02 1.61670E02 1.17440E02 1.19740E02 7.70100E01 4.39000E01 1.27400E01 -3.80000E-01 -1.78900E01 -2.89100E01 -2.02300E01 1.97500E01 2.89600E01 3.34400E01 6.04000E00 6.80000E00 -1.41000E00 3.81400E01 1.18900E01 -2.91700E01 -8.84600E01 -1.05490E02 -1.10940E02 -1.08450E02 -9.57800E01 -6.66300E01 -3.95200E01 8.46000E00 3.99100E01 6.52900E01 7.03900E01 6.25800E01 2.34700E01 5.13000E00 8.22000E00 1.14000E01 2.36700E01 3.03000E01 4.61100E01 1.23700E01 2.85800E01 5.22700E01 6.66500E01 3.44200E01 3.11700E01 1.78000E01 6.01000E00 -1.40000E-01 -7.47000E00 -2.70100E01 -5.91200E01 -4.71600E01 -2.37800E01 7.35000E00 1.44000E00 1.43500E01 4.16500E01 5.17600E01 6.81400E01 7.59700E01 1.79800E01 9.19000E00 7.13000E00 -9.90000E-01 -3.35000E00 8.23000E00 4.17000E00 1.69900E01 3.22000E01 4.98600E01 6.70300E01 6.46800E01 4.82100E01 4.52000E01 -Frame 160 3.90700E01 1.47300E01 -8.36000E00 -9.14000E00 -4.69200E01 -6.98100E01 -6.43300E01 -4.76100E01 -4.53200E01 -4.69100E01 -3.95000E01 -2.38200E01 -3.46300E01 -6.17400E01 -6.06300E01 -7.54300E01 -7.86200E01 -9.08400E01 -8.73600E01 -8.17000E01 -9.18000E01 -7.11400E01 -7.17900E01 -5.64100E01 -5.15200E01 -4.74500E01 -4.72300E01 -3.89800E01 -7.34600E01 -7.19600E01 -9.13700E01 -9.53200E01 -1.36330E02 -1.51510E02 -8.40500E01 -2.74600E01 2.98700E01 1.80910E02 3.37420E02 4.11430E02 2.78330E02 2.30850E02 1.91690E02 2.03150E02 1.19790E02 2.97600E01 -8.60600E01 -1.12360E02 -1.21350E02 -1.05490E02 -1.22030E02 -1.12960E02 -5.45000E01 8.20000E-01 2.68500E01 1.86600E01 6.42000E01 5.20900E01 -2.44400E01 -1.15310E02 -1.24880E02 -1.14630E02 -9.99600E01 -1.00750E02 -7.64800E01 -3.44000E01 3.50000E01 5.35000E01 1.29510E02 1.22740E02 1.44640E02 1.48080E02 1.24490E02 8.00600E01 6.21900E01 4.47200E01 9.68000E00 -4.04400E01 -3.50600E01 -2.24700E01 -1.44600E01 -2.91800E01 2.68000E00 3.05300E01 6.72200E01 7.39900E01 6.89100E01 1.36200E01 -3.73800E01 -5.69100E01 -9.99800E01 -1.16280E02 -1.26970E02 -1.14870E02 -1.06290E02 -8.93500E01 -4.38100E01 5.17000E00 3.06500E01 4.78800E01 4.35900E01 7.41200E01 6.65200E01 6.16200E01 7.55100E01 4.67600E01 -1.09200E01 -9.37000E00 1.24000E00 -1.38200E01 -1.03300E01 1.82800E01 3.77600E01 4.18100E01 4.99500E01 7.03000E01 8.02200E01 4.63800E01 7.46000E00 8.34000E00 -2.27500E01 -2.57700E01 -2.18500E01 -2.27800E01 -5.17100E01 -4.24800E01 -4.92000E00 2.28100E01 3.38000E00 2.83500E01 4.80700E01 3.13600E01 1.11100E01 2.72300E01 5.18300E01 1.15000E00 -2.00900E01 -6.96000E00 1.65900E01 9.86000E00 2.69200E01 4.24900E01 1.95100E01 5.81000E00 3.66900E01 3.75000E01 1.23100E01 -1.86600E01 -2.95600E01 -2.07600E01 -4.36600E01 -6.92200E01 -5.45000E01 -6.92700E01 -1.08430E02 -9.47000E01 -7.44600E01 -7.85300E01 -8.76600E01 -6.40000E01 -Frame 160 -4.05600E01 -6.33700E01 -6.78400E01 -4.34000E01 -6.11800E01 -9.54700E01 -8.57500E01 -9.16700E01 -9.67100E01 -1.06840E02 -1.07210E02 -1.01520E02 -7.55900E01 -9.88200E01 -8.97100E01 -7.02700E01 -5.02000E01 4.50000E00 1.34850E02 2.81070E02 3.37520E02 2.55380E02 1.96450E02 1.73510E02 2.04700E02 1.75670E02 7.75900E01 -5.58000E00 -3.23000E01 -6.08000E01 -6.71100E01 -7.55400E01 -7.11500E01 -4.85500E01 -2.12000E01 -1.49800E01 -2.85500E01 2.94900E01 2.73000E01 -1.59800E01 -1.06580E02 -1.13880E02 -1.06300E02 -9.13900E01 -1.21940E02 -1.16330E02 -7.54500E01 -4.92500E01 -2.62100E01 3.05500E01 8.10200E01 8.99600E01 1.04080E02 9.35300E01 7.35600E01 7.09000E01 5.70900E01 3.68000E01 1.28500E01 1.11500E01 1.83900E01 9.84000E00 3.02000E00 1.99900E01 4.64700E01 4.27300E01 5.88400E01 7.14000E01 6.62900E01 8.97000E00 -1.41200E01 -4.49000E01 -6.45800E01 -1.02800E02 -1.09100E02 -1.03490E02 -1.13610E02 -9.99400E01 -6.27600E01 -4.63800E01 -1.34600E01 -7.52000E00 7.60000E00 2.71700E01 4.33100E01 4.59000E01 1.75200E01 1.32400E01 4.81000E00 -5.89000E00 -8.92000E00 4.96000E00 8.26000E00 2.26500E01 1.64600E01 3.60600E01 6.52300E01 7.22400E01 7.74000E01 7.46500E01 5.97500E01 4.03400E01 4.13000E01 -9.74000E00 -2.23400E01 -2.13000E01 -3.72000E01 -4.85500E01 -1.82000E01 -4.18900E01 -1.22700E01 -6.72000E00 -1.09900E01 -6.38000E00 1.23800E01 -2.90000E-01 1.36500E01 1.30100E01 2.34000E00 5.34000E00 -1.25700E01 -7.02000E00 -9.29000E00 -1.62000E00 -6.71000E00 6.05000E00 2.20000E00 1.12300E01 3.05300E01 1.04000E01 5.64000E00 4.73000E00 -1.12100E01 -3.16300E01 -5.66500E01 -6.43900E01 -7.23100E01 -7.84100E01 -8.76300E01 -8.90600E01 -7.74600E01 -6.44400E01 -6.19700E01 -4.63800E01 -5.12800E01 -6.63000E01 -7.37400E01 -8.43600E01 -8.32500E01 -1.06050E02 -1.12480E02 -1.28030E02 -1.20970E02 -1.07610E02 -1.06770E02 -9.98400E01 -1.05640E02 -9.65600E01 -5.41500E01 4.35800E01 -Frame 160 1.67250E02 3.18550E02 3.06200E02 1.98160E02 1.70580E02 1.72980E02 2.11290E02 1.70590E02 5.94800E01 6.89000E00 -1.32000E00 -3.37700E01 -2.81800E01 9.62000E00 -2.41000E00 1.02000E01 2.62000E01 -1.03200E01 2.30500E01 5.64400E01 3.38200E01 -5.15200E01 -1.27440E02 -1.54580E02 -1.38410E02 -1.12610E02 -1.47910E02 -1.15170E02 -7.23200E01 -7.50900E01 -4.68900E01 2.22100E01 6.94100E01 6.39900E01 4.13300E01 2.59200E01 3.10000E01 2.52000E01 2.71900E01 1.82100E01 4.93000E00 1.32300E01 1.37700E01 4.63100E01 5.98100E01 9.56700E01 1.09550E02 1.02760E02 9.56700E01 9.42800E01 9.67700E01 4.62600E01 -1.88400E01 -3.89200E01 -5.85700E01 -8.07600E01 -6.45500E01 -6.77700E01 -5.60200E01 -2.78500E01 -5.17800E01 -3.34000E01 -1.42000E00 5.55000E00 1.17300E01 -3.19100E01 -4.08700E01 -2.60700E01 -2.37900E01 -3.44200E01 -3.83500E01 -4.13700E01 -1.04500E01 7.43000E00 1.88500E01 4.66000E01 7.61600E01 7.95600E01 9.59900E01 9.88400E01 5.66900E01 6.71900E01 4.69600E01 5.07000E00 -3.11000E00 4.70000E-01 9.17000E00 2.01400E01 1.34400E01 9.53000E00 3.05000E01 2.61000E01 9.55000E00 3.24900E01 1.11200E01 -1.69100E01 -2.57800E01 -1.48900E01 -2.56400E01 -2.66900E01 -2.97400E01 -2.18500E01 -1.96900E01 -2.64400E01 -8.37000E00 1.02700E01 6.48000E00 7.57000E00 6.69000E00 2.78000E00 -1.42500E01 -2.67900E01 -2.46900E01 -2.65000E01 -3.83400E01 -4.55100E01 -3.38600E01 -2.38200E01 -1.84500E01 -4.39000E01 -4.41000E01 -4.62700E01 -3.04700E01 -6.01600E01 -5.37200E01 -5.10400E01 -8.12400E01 -7.43100E01 -8.51100E01 -9.71800E01 -7.55500E01 -1.15200E02 -1.15990E02 -1.09720E02 -1.01180E02 -8.63100E01 -8.49300E01 -8.34600E01 -1.04900E02 -1.21940E02 -1.13430E02 2.04100E01 1.85330E02 3.03140E02 2.38280E02 1.28170E02 1.14520E02 1.89330E02 2.08270E02 1.74600E02 6.67300E01 3.14700E01 1.00000E-01 -2.23000E00 1.33800E01 9.84700E01 9.81100E01 7.36600E01 3.44000E01 -4.40900E01 -Frame 160 5.30500E01 6.51600E01 3.76000E01 -1.07830E02 -1.24640E02 -1.46840E02 -1.09580E02 -8.30600E01 -7.66400E01 -2.39500E01 -6.36100E01 -1.05440E02 -8.14700E01 1.43100E01 3.80300E01 -1.45600E01 -2.47700E01 -7.12800E01 -4.51700E01 -2.82200E01 -1.97300E01 1.50300E01 9.84000E00 2.54700E01 3.55000E00 6.69400E01 8.92200E01 1.43100E02 1.20510E02 5.01100E01 5.24900E01 6.59000E01 6.86700E01 3.64700E01 3.02500E01 2.68200E01 1.22700E01 -7.30000E-01 2.88000E00 6.76100E01 7.82900E01 3.62400E01 -1.81300E01 -4.21500E01 -1.28600E01 -2.26400E01 -4.36900E01 -6.63400E01 -5.96200E01 -6.96300E01 -1.48800E01 -3.42000E00 1.64000E01 3.68200E01 1.18400E01 -1.89200E01 -6.61000E00 1.80900E01 1.75400E01 1.29600E01 -1.37700E01 -1.43100E01 1.11500E01 2.13900E01 4.39300E01 6.21300E01 4.98400E01 3.01300E01 2.77900E01 5.03600E01 5.45900E01 4.99100E01 -6.95000E00 -1.05500E01 -1.12400E01 -1.93000E00 2.46800E01 2.71000E01 1.25800E01 7.61000E00 9.49000E00 2.43000E00 2.21600E01 1.64900E01 -8.36000E00 -2.79600E01 -5.81300E01 -3.41700E01 -1.74300E01 -1.41500E01 -3.17500E01 -1.88600E01 -1.75500E01 -3.01800E01 -2.51700E01 -3.39800E01 -2.10300E01 -3.16600E01 -6.75900E01 -9.15700E01 -5.52100E01 -3.76800E01 -4.25800E01 -4.46000E01 -5.86500E01 -5.10900E01 -4.42600E01 -6.11900E01 -5.16000E01 -4.46800E01 -7.55200E01 -1.02260E02 -9.27500E01 -1.13880E02 -9.15800E01 -6.75300E01 -7.87000E01 -7.21700E01 -5.64000E01 -1.04120E02 -1.03250E02 -1.20290E02 -2.37800E01 2.28700E02 3.93740E02 2.08490E02 6.43000E01 6.45800E01 1.31800E02 1.66970E02 1.18070E02 4.65500E01 5.47800E01 4.42200E01 -7.00000E-01 1.06000E02 1.98910E02 1.79520E02 1.41380E02 3.29500E01 -1.20840E02 -1.92500E01 2.45200E01 -3.36000E00 -7.60800E01 -8.09600E01 -7.29000E01 -1.65100E01 -1.03500E01 1.50200E01 9.41700E01 -1.31000E00 -1.54730E02 -1.75740E02 -8.42300E01 -1.08100E01 -6.51100E01 -8.20300E01 -5.04000E01 -1.27500E01 -Frame 160 -1.29300E01 2.08900E01 4.67300E01 6.83200E01 5.15100E01 -6.18700E01 -6.07000E01 -1.44000E00 7.46500E01 6.10200E01 5.79100E01 4.36500E01 1.06910E02 1.36030E02 8.39300E01 9.71500E01 1.28700E02 8.61200E01 6.16000E00 -8.26000E00 3.90000E00 4.84500E01 7.63500E01 -1.69400E01 -2.08000E00 5.12600E01 2.92200E01 2.34900E01 1.85800E01 -2.24800E01 -3.17700E01 -2.63000E01 -8.26200E01 -3.05900E01 2.00900E01 -9.67000E00 -1.33000E00 -1.77200E01 -3.59000E00 5.99000E00 -1.01300E01 -3.47300E01 -1.30500E01 -2.66800E01 -1.57000E01 -1.36000E00 2.84300E01 5.61200E01 3.16200E01 2.33400E01 4.07900E01 9.75000E00 9.75000E00 2.37500E01 1.01700E01 1.11700E01 1.52000E01 6.35000E00 1.52300E01 4.63800E01 2.64600E01 2.19100E01 -2.79000E00 -7.24000E00 -4.81000E00 1.07100E01 -1.12900E01 -2.09500E01 -1.58800E01 -1.96300E01 -3.24700E01 -2.66700E01 -2.66600E01 -3.46200E01 -4.07900E01 -6.41100E01 -5.90900E01 -4.48600E01 -3.71500E01 -5.11700E01 -8.05800E01 -6.28300E01 -4.44800E01 -5.35300E01 -2.28200E01 -3.51500E01 -6.08400E01 -6.32800E01 -9.87500E01 -8.62400E01 -4.62800E01 -7.10600E01 -6.25600E01 -6.17600E01 -6.09000E01 -4.29800E01 -4.74900E01 -5.71200E01 -7.90200E01 -6.45500E01 -1.13600E02 -9.50900E01 -1.17950E02 -1.17440E02 5.16000E00 1.17510E02 3.13190E02 2.93600E02 5.91100E01 1.83000E01 -2.98000E01 6.36300E01 6.98800E01 8.62500E01 9.80400E01 1.61100E02 1.38960E02 6.80100E01 2.02810E02 1.38600E02 7.72900E01 -5.89700E01 -1.00370E02 -5.19400E01 3.90500E01 6.68300E01 3.24200E01 6.19300E01 1.06310E02 4.29800E01 -1.53300E01 -1.21410E02 -5.06400E01 -7.76200E01 -7.13500E01 -1.55810E02 -3.37300E01 7.11600E01 -1.67700E01 -2.54000E01 -2.32700E01 6.29500E01 -3.82200E01 -1.25480E02 -1.58320E02 -5.20300E01 1.45900E01 -1.27500E01 4.00700E01 5.64800E01 1.23340E02 5.51500E01 -5.20000E00 5.75900E01 6.12700E01 7.80100E01 -7.80000E00 2.07500E01 6.31700E01 1.58850E02 -Frame 160 1.01350E02 3.79900E01 7.26500E01 4.63300E01 4.51700E01 -3.60500E01 -2.57300E01 1.29500E01 2.68300E01 2.31300E01 3.10000E-01 6.48000E01 4.32400E01 1.39900E01 -4.41600E01 -2.10500E01 -6.19000E00 -4.58500E01 -7.68000E00 -5.23100E01 4.74000E00 9.56000E00 -5.47000E00 -2.09500E01 -1.28800E01 -3.05400E01 -7.07100E01 -1.60500E01 -1.96800E01 3.60000E00 -4.40000E00 -1.46400E01 1.38200E01 -1.18500E01 6.70000E00 -1.71800E01 9.22000E00 7.43000E00 -3.42000E00 -4.60000E00 -5.81000E00 3.69500E01 -1.00000E00 7.88000E00 -4.97000E00 1.27900E01 1.90900E01 -1.24300E01 -2.91000E00 -1.10900E01 -1.35100E01 -3.19900E01 -2.90100E01 -7.91000E00 -1.31500E01 -3.15400E01 -5.04700E01 -2.19400E01 -5.95100E01 -3.71900E01 1.38500E01 -5.35500E01 -8.39900E01 7.00000E-01 -1.20000E01 -1.60900E01 -3.73000E01 -6.11400E01 9.33000E00 -2.10400E01 -4.03400E01 -9.52100E01 4.73000E01 -8.08400E01 1.81200E01 4.41100E01 -1.34150E02 -1.18100E01 1.28310E02 2.06300E01 -1.45410E02 -5.64600E01 7.82800E01 4.91000E01 -1.43040E02 -1.15000E02 1.21000E02 3.61700E01 -6.53300E01 -2.69200E01 5.76900E01 -1.71500E01 6.87000E01 -2.78700E01 -1.44100E01 6.44700E01 4.87200E01 2.74300E01 5.64500E01 -3.69000E00 3.03100E01 6.13300E01 -3.57500E01 -7.80000E00 1.12020E02 7.14400E01 3.54000E00 3.35400E01 4.04400E01 4.55200E01 -1.12800E01 -2.98200E01 4.01000E01 7.61500E01 -1.07500E01 -1.83200E01 5.89000E01 3.84600E01 -1.06400E01 -2.32400E01 -1.62000E01 2.80800E01 6.27100E01 -2.36400E01 -5.56300E01 5.34500E01 3.08600E01 -4.04500E01 -1.99200E01 8.27000E00 3.30000E-01 1.21500E01 -1.76700E01 -4.39000E00 4.13100E01 1.93900E01 7.80000E-01 3.06000E01 8.32000E00 -4.65000E00 2.09900E01 -1.65900E01 6.69000E00 2.56900E01 -8.74000E00 -5.22000E00 3.14200E01 -5.83000E00 -5.22000E00 2.14200E01 3.87000E00 1.27800E01 1.89600E01 -7.68000E00 1.28700E01 3.70500E01 4.95000E00 -1.01400E01 2.73200E01 1.89200E01 -Frame 160 -4.75000E00 -8.14000E00 8.38000E00 1.74100E01 1.77100E01 -4.99000E00 -4.38000E00 8.26000E00 -5.71000E00 -2.31000E01 -8.00000E00 1.05800E01 3.73000E00 -7.33000E00 -7.20000E-01 1.00000E-01 -4.05000E00 -8.32000E00 -2.71000E00 -2.92000E00 -5.13000E00 6.60000E00 -3.13100E01 -1.73600E01 1.00400E01 -3.72000E00 -2.09000E01 2.54100E01 2.13000E00 -2.58700E01 7.29000E00 -2.53000E00 -8.65000E00 -1.79500E01 1.54800E01 -1.50700E01 -7.55000E00 1.72100E01 9.07200E01 7.54200E01 -1.65420E02 -7.05500E01 1.25320E02 -1.17870E02 -1.51470E02 2.33030E02 1.64200E02 -7.69100E01 2.56000E01 1.62600E01 -3.53800E01 -3.65800E01 5.32200E01 -1.12500E01 3.03000E01 -3.28900E01 -1.40000E01 -7.95100E01 -4.97000E00 -7.01200E01 -2.22000E00 1.67800E01 -3.06500E01 -4.45200E01 3.22200E01 4.30000E00 -4.54900E01 1.22200E01 3.07000E01 -2.32800E01 9.09000E00 2.74500E01 -1.65000E00 -6.50000E-01 1.33800E01 -1.01700E01 -1.84400E01 -1.29500E01 -2.62800E01 -2.90000E01 -1.17800E01 -2.70200E01 -2.67100E01 -1.93700E01 -1.97900E01 7.90000E-01 -1.00000E01 -8.12000E00 -5.18000E00 2.85000E00 -6.88000E00 1.60900E01 9.75000E00 1.12000E01 -7.32000E00 -8.41000E00 -2.53000E00 -9.47000E00 -1.36200E01 -2.89000E00 -1.88300E01 -1.72500E01 -1.66100E01 -1.99400E01 -1.63600E01 -1.36600E01 -1.08700E01 -1.99900E01 -6.38000E00 -4.35000E00 -1.42600E01 -7.47000E00 -4.70000E-01 -8.26000E00 -1.22900E01 -8.44000E00 -3.47000E00 6.50000E-01 5.89000E00 9.28000E00 2.76000E00 -3.97000E00 -1.19100E01 -3.09000E00 -7.00000E00 -2.80300E01 -2.06900E01 -1.91100E01 -1.54700E01 -1.77100E01 -1.00000E-02 -1.77000E00 -4.59000E00 -1.50000E00 -1.32000E00 1.86000E00 1.31300E01 1.07300E01 1.24000E00 -1.55000E00 -9.43000E00 -7.55000E00 -1.61000E00 -1.24900E01 -2.70000E00 -4.61000E00 -1.15800E01 -1.57600E01 -7.06000E00 -9.09000E00 -1.01800E01 -1.13000E01 -8.45000E00 -8.51000E00 -1.25700E01 -2.97500E01 -8.44000E00 -1.47000E00 -1.72900E01 -2.35900E01 -Frame 160 -2.07000E00 -9.89000E00 -1.79500E01 -7.25000E00 -1.82200E01 -1.45200E01 -7.70000E00 -1.86700E01 -1.59700E01 -1.81800E01 -2.44500E01 -1.09000E01 -1.49300E01 -1.40800E01 -2.42000E01 -1.26200E01 -7.68000E00 -1.75900E01 -1.18000E01 -9.83000E00 -1.28000E01 -1.88600E01 -1.51000E01 -4.22000E00 -1.20100E01 -6.04000E00 -3.89000E00 -2.06800E01 -1.19800E01 -9.01000E00 -1.79500E01 -1.81600E01 -9.37000E00 -9.31000E00 -6.25000E00 -5.10000E00 -2.92000E00 -9.68000E00 -2.66500E01 -1.71300E01 -1.33100E01 -7.37000E00 -1.02500E01 -1.32200E01 -4.28000E00 -1.00700E01 -1.70400E01 -2.12200E01 -2.55200E01 -8.94000E00 -1.58500E01 -1.89700E01 -1.71800E01 -7.33000E00 -1.91800E01 -1.23900E01 6.10000E-01 -1.70000E01 -2.31500E01 -1.54800E01 -8.57000E00 -1.34500E01 -2.14800E01 -1.57500E01 -1.48400E01 -1.69000E01 -9.02000E00 -9.90000E00 -8.81000E00 -1.16900E01 -1.06600E01 -1.26000E01 -7.60000E00 -2.45000E00 -3.15000E00 -9.88000E00 -8.82000E00 -1.67300E01 -1.18800E01 -6.88000E00 -1.57300E01 -3.85000E00 -2.06100E01 -1.68800E01 -3.00000E-02 -1.06700E01 -1.16400E01 -1.56400E01 -1.17600E01 -1.17600E01 -9.76000E00 -1.47000E01 -1.07900E01 -1.17600E01 -1.57600E01 -1.08800E01 -4.85000E00 -4.64000E00 -1.24300E01 -5.46000E00 -4.28000E00 -1.07000E00 -3.77000E00 -1.45600E01 -9.68000E00 -4.65000E00 -2.14700E01 -2.18000E01 -5.13000E00 -2.19500E01 -2.32800E01 -6.40000E-01 -1.33100E01 -7.37000E00 -4.25000E00 -1.10400E01 9.60000E-01 -2.68000E00 1.25600E01 8.25000E00 -3.21000E00 -6.03000E00 -9.40000E-01 -1.87000E01 -1.60000E01 -1.02100E01 -1.72400E01 -1.34800E01 -9.60000E00 -2.60000E00 -1.39000E00 -5.15000E00 1.97000E00 -7.00000E-01 -7.46000E00 -1.14300E01 -6.52000E00 5.54000E00 -4.00000E-02 -4.80000E00 2.90000E-01 -2.47000E00 -1.03200E01 1.59000E00 1.86000E00 -8.70000E-01 -9.69000E00 3.22000E00 -6.48000E00 -8.48000E00 -5.40000E-01 6.40000E-01 -9.15000E00 -5.24000E00 -7.21000E00 -3.24000E00 8.50000E-01 -1.29400E01 -8.15000E00 -5.21000E00 -Frame 160 -1.80000E-01 -5.00000E00 8.03000E00 9.45000E00 2.90000E00 1.14000E00 1.32000E00 -3.50000E00 -4.47000E00 3.53000E00 -6.23000E00 -5.29000E00 2.68000E00 -1.11000E00 6.98000E00 -2.69000E00 2.34000E00 5.20000E-01 1.06400E01 6.06000E00 -6.70000E-01 -1.61000E00 6.42000E00 -5.31000E00 -2.40000E00 1.60000E00 -1.28000E00 4.75000E00 9.96000E00 -7.68000E00 -1.86000E00 6.14000E00 2.38000E00 1.15000E01 -4.11000E00 2.80000E00 2.92000E00 -9.60000E-01 4.00000E-02 5.07000E00 2.50000E-01 6.28000E00 3.49000E00 1.61000E00 3.67000E00 -4.21000E00 -1.33300E01 2.80000E-01 3.31000E00 -1.57000E00 5.40000E00 6.58000E00 3.79000E00 1.69100E01 1.42000E00 9.45000E00 6.72000E00 2.90000E00 8.96000E00 -8.00000E-01 6.14000E00 9.29000E00 -5.47000E00 7.32000E00 1.25000E01 -1.70000E-01 9.77000E00 1.20100E01 -3.69000E00 -6.87000E00 -3.14000E00 4.71000E00 -3.20000E00 1.16500E01 3.95000E00 1.00000E-02 8.95000E00 1.16000E00 2.13000E00 1.13000E00 7.10000E00 7.25000E00 7.40000E00 9.55000E00 1.17600E01 7.03000E00 8.15000E00 3.00000E-01 1.21000E00 9.15000E00 -6.67000E00 -7.97000E00 -2.30000E00 -5.45000E00 5.31000E00 8.40000E00 1.45800E01 1.39400E01 1.32700E01 6.57000E00 1.46600E01 8.99000E00 7.14000E00 4.23000E00 4.23000E00 6.23000E00 5.29000E00 3.20000E-01 1.20000E00 4.11000E00 -4.89000E00 8.40000E-01 2.75000E00 8.72000E00 1.18700E01 9.11000E00 1.02600E01 -1.56000E00 4.26000E00 8.26000E00 9.38000E00 2.53000E00 4.70000E-01 9.35000E00 1.05000E01 6.68000E00 -2.60000E-01 6.59000E00 -1.35000E00 7.47000E00 9.56000E00 7.71000E00 3.80000E00 1.27700E01 1.00100E01 -2.84000E00 1.92000E00 5.83000E00 1.86000E00 6.77000E00 6.83000E00 5.89000E00 9.92000E00 9.07000E00 7.19000E00 1.02500E01 1.04000E01 1.05500E01 1.57000E01 9.00000E00 8.09000E00 2.15000E00 1.40300E01 3.27000E00 -3.82000E00 2.08800E01 1.63300E01 1.56300E01 2.09000E01 9.32000E00 -Frame 160 -3.62000E00 7.05000E00 2.05000E00 2.90000E00 2.78000E00 4.66000E00 6.60000E00 3.60000E00 1.05100E01 7.63000E00 8.66000E00 1.47200E01 1.29600E01 8.14000E00 9.17000E00 1.62300E01 1.15000E01 4.62000E00 8.53000E00 1.05600E01 6.65000E00 9.62000E00 1.06800E01 5.77000E00 3.71000E00 3.59000E00 6.47000E00 2.44000E00 7.29000E00 6.29000E00 5.26000E00 5.20000E00 7.14000E00 1.51400E01 2.13800E01 1.08000E01 1.58900E01 1.11300E01 4.22000E00 3.10000E00 1.49500E01 1.16000E00 5.95000E00 2.08900E01 1.92800E01 1.16100E01 1.17000E01 1.57900E01 7.00000E00 1.94000E00 9.73000E00 6.76000E00 7.70000E00 5.67000E00 8.58000E00 1.65800E01 8.20000E-01 7.58000E00 2.55000E00 1.43700E01 9.55000E00 8.58000E00 1.65800E01 4.82000E00 1.37000E01 1.38500E01 9.00000E00 1.20000E01 8.09000E00 2.06000E00 2.85000E00 1.06700E01 3.73000E00 5.58000E00 1.24900E01 1.26100E01 1.17300E01 1.48200E01 1.80000E01 1.12700E01 5.33000E00 1.32100E01 1.73300E01 1.25700E01 5.66000E00 5.54000E00 4.42000E00 3.27000E00 1.40900E01 1.12400E01 1.03000E01 3.30000E-01 1.60600E01 8.27000E00 8.24000E00 1.62100E01 9.42000E00 7.42000E00 8.36000E00 1.13300E01 1.03900E01 -5.80000E-01 1.91200E01 1.14200E01 -5.20000E-01 9.18000E00 1.31800E01 1.53000E01 1.74800E01 3.72000E00 5.40000E-01 5.27000E00 1.31500E01 1.02700E01 9.30000E00 1.23000E01 1.23900E01 6.48000E00 1.23900E01 1.24800E01 7.57000E00 1.45100E01 1.06600E01 9.69000E00 4.69000E00 1.35400E01 7.66000E00 9.60000E00 6.60000E00 1.55100E01 1.66900E01 1.19000E01 2.96000E00 1.17500E01 1.08100E01 2.84000E00 1.46300E01 1.27800E01 1.88700E01 1.21400E01 1.52000E01 5.35000E00 7.20000E00 8.11000E00 6.05000E00 2.93000E00 5.72000E00 1.66000E01 1.58100E01 7.99000E00 1.39300E01 1.50500E01 1.12000E01 3.23000E00 8.02000E00 1.19600E01 2.10200E01 7.35000E00 1.12600E01 9.29000E00 -Frame 160 1.52600E01 1.84100E01 7.65000E00 7.56000E00 9.47000E00 1.44400E01 1.56000E00 7.29000E00 9.20000E00 1.11700E01 1.02000E01 1.32000E01 7.29000E00 3.20000E00 8.99000E00 8.96000E00 1.79300E01 1.61700E01 1.23500E01 1.44100E01 9.53000E00 1.15000E01 1.45300E01 6.65000E00 7.53000E00 5.44000E00 8.29000E00 1.62300E01 1.34100E01 1.55000E01 1.86500E01 1.38900E01 7.98000E00 7.89000E00 9.80000E00 8.77000E00 1.71000E00 1.34400E01 1.65300E01 5.71000E00 5.56000E00 6.41000E00 1.82900E01 9.53000E00 6.50000E00 1.13800E01 1.04100E01 8.41000E00 1.43500E01 6.47000E00 9.35000E00 9.32000E00 -4.71000E00 1.84000E00 1.26000E01 1.16900E01 7.75000E00 6.69000E00 1.46000E01 1.47500E01 6.90000E00 1.28100E01 1.39000E01 1.40200E01 1.91400E01 1.14100E01 1.34400E01 2.53000E00 4.29000E00 1.01100E01 7.11000E00 7.02000E00 5.93000E00 1.81000E00 1.25700E01 2.26600E01 1.60500E01 4.23000E00 1.20500E01 1.11100E01 2.14000E00 1.69000E01 8.11000E00 5.05000E00 1.49000E01 1.00500E01 3.05000E00 1.28400E01 9.93000E00 4.93000E00 5.78000E00 9.66000E00 7.66000E00 6.60000E00 1.05100E01 9.54000E00 1.25400E01 1.06300E01 8.66000E00 2.63000E00 1.14200E01 1.54800E01 1.06600E01 7.69000E00 1.56300E01 8.81000E00 -2.22000E00 1.64200E01 3.06300E01 3.26000E00 -5.95000E00 8.57000E00 3.54000E00 3.36000E00 1.01800E01 1.22100E01 7.30000E00 4.24000E00 3.09000E00 6.91000E00 2.85000E00 1.06700E01 1.37300E01 1.88000E00 5.67000E00 3.58000E00 2.43000E00 -7.50000E-01 1.19800E01 1.21000E01 7.22000E00 7.19000E00 7.16000E00 1.13000E00 -1.08000E00 1.46500E01 5.86000E00 3.80000E00 1.06800E01 8.77000E00 1.18000E01 9.20000E-01 4.71000E00 7.62000E00 3.62000E00 5.00000E-01 3.29000E00 1.11700E01 8.29000E00 5.32000E00 2.60000E-01 5.05000E00 5.99000E00 6.96000E00 -4.04000E00 6.30000E-01 9.45000E00 1.54000E00 1.43900E01 1.06300E01 -Frame 160 4.75000E00 7.69000E00 2.72000E00 -3.40000E00 -3.70000E00 1.00000E00 3.85000E00 7.79000E00 1.85000E00 8.73000E00 1.08200E01 -1.03000E00 1.07600E01 -7.09000E00 6.52000E00 -6.45000E00 -6.81000E00 9.83000E00 2.98000E00 -3.08000E00 9.68000E00 6.83000E00 3.89000E00 -1.14000E00 -2.32000E00 4.70000E-01 -1.65000E00 1.21700E01 9.41000E00 2.56000E00 2.50000E00 -3.56000E00 -5.80000E00 -5.10000E00 -3.37000E00 -2.58000E00 -9.76000E00 -7.15000E00 -1.45000E00 4.43000E00 -5.51000E00 4.25000E00 2.31000E00 8.31000E00 9.49000E00 -8.30000E00 1.37000E00 4.34000E00 2.40000E00 -6.00000E-01 -5.69000E00 1.07000E00 6.04000E00 -4.84000E00 -2.05000E00 -1.17000E00 -6.26000E00 -2.50000E00 -6.20000E-01 5.32000E00 3.44000E00 2.50000E00 5.30000E-01 -3.50000E00 -1.65000E00 1.26000E00 4.26000E00 -5.65000E00 -8.60000E-01 -3.92000E00 4.93000E00 -1.95000E00 -1.04000E00 3.90000E00 1.99000E00 2.02000E00 5.00000E-02 -9.80000E-01 -4.04000E00 -4.19000E00 -3.40000E-01 -5.37000E00 3.45000E00 -8.46000E00 -5.73000E00 -1.91000E00 -2.97000E00 4.94000E00 -2.91000E00 2.00000E00 4.06000E00 1.80000E-01 5.18000E00 -4.67000E00 -7.82000E00 -6.06000E00 -5.24000E00 9.61000E00 -1.20900E01 -1.45000E00 -2.48000E00 -6.54000E00 -3.72000E00 3.19000E00 2.31000E00 1.40000E00 -5.54000E00 -9.69000E00 6.04000E00 -1.75000E00 -4.78000E00 -4.90000E00 -3.02000E00 -8.00000E-02 -4.05000E00 -7.14000E00 2.68000E00 -7.20000E00 6.20000E-01 -5.32000E00 -2.44000E00 8.53000E00 -4.17000E00 7.40000E-01 -2.20000E00 -4.23000E00 -3.32000E00 -1.38000E00 4.62000E00 -1.20000E00 -4.20000E00 -2.29000E00 1.68000E00 -6.23000E00 -3.80000E-01 6.50000E-01 -9.29000E00 5.47000E00 1.68000E00 -3.23000E00 1.71000E00 1.80000E00 -6.11000E00 -5.26000E00 -1.03800E01 -9.65000E00 1.11000E00 -8.00000E-01 -4.77000E00 -2.86000E00 -7.89000E00 -1.07000E00 1.96000E00 -2.92000E00 5.00000E-02 -8.90000E-01 1.40000E-01 -1.08000E01 -5.07000E00 8.40000E-01 -Frame 160 -7.07000E00 -5.22000E00 -1.31000E00 -1.28000E00 -6.25000E00 -3.37000E00 6.00000E-01 -9.31000E00 2.48000E00 6.63000E00 2.90000E00 5.00000E-02 1.11000E00 -1.08000E01 -1.60700E01 -7.49000E00 -1.16400E01 -8.91000E00 1.91000E00 4.06000E00 9.27000E00 -2.13700E01 3.69060E02 -3.47800E01 -5.23070E02 1.65030E02 2.37250E02 -2.41520E02 -9.58700E01 2.17370E02 -1.11910E02 -7.92700E01 5.44500E01 1.32500E01 -8.42400E01 2.63300E01 4.32900E01 -2.02700E01 -3.07800E01 3.41000E00 7.65000E00 2.01000E00 -3.38100E01 3.42900E01 7.46000E00 -2.42100E01 1.21600E01 6.40000E-01 -5.72400E01 2.91400E01 5.16000E00 -2.35700E01 4.83000E00 1.41000E01 3.64000E00 -1.41500E01 -9.04800E01 1.52910E02 -2.13200E01 -1.47920E02 1.00700E02 5.49100E01 -9.83500E01 3.74000E00 6.29800E01 -1.63010E02 1.01160E02 7.40000E00 -5.42700E01 1.72000E01 8.38600E01 -1.94500E02 1.28710E02 5.47900E01 -2.55470E02 2.20910E02 -3.51900E01 -1.21180E02 2.32800E01 1.32180E02 -1.16680E02 -1.53130E02 2.78430E02 -9.59300E01 -2.40780E02 3.48110E02 -1.86120E02 -5.67000E01 1.43770E02 -9.77000E01 -1.35550E02 2.55550E02 -1.80500E02 -3.78700E01 1.41200E02 -1.21330E02 -8.58700E01 3.77760E02 -5.00630E02 1.61280E02 6.75000E01 2.57750E02 -8.39360E02 8.65380E02 -4.45980E02 2.27520E02 -3.99370E02 6.11720E02 -7.08500E02 5.15110E02 -1.04930E02 -8.10500E01 -3.48360E02 7.54380E02 -4.50490E02 -3.64200E02 6.46090E02 -1.46990E02 -4.09460E02 2.50330E02 3.63280E02 -7.96620E02 5.99350E02 -1.93080E02 2.34160E02 -8.84610E02 1.26084E03 -8.80550E02 1.34660E02 4.81300E01 3.33870E02 -8.00870E02 9.15040E02 -7.64850E02 3.69020E02 7.96000E01 -3.62850E02 1.86350E02 1.31350E02 -2.60480E02 1.98100E01 1.34740E02 -3.69100E01 -1.73840E02 2.69150E02 -2.75420E02 6.04200E01 1.29580E02 -2.12250E02 1.28540E02 2.74000E00 -2.69960E02 4.35150E02 -3.49350E02 1.19210E02 -1.47860E02 2.36940E02 -9.25900E01 -3.77230E02 5.72670E02 -Frame 160 -3.02600E02 -2.93660E02 4.73820E02 -1.01420E02 -1.99360E02 -1.88150E02 7.12570E02 -7.13530E02 1.46930E02 2.56850E02 -9.10800E01 -4.70690E02 7.41390E02 -5.17750E02 -5.23500E01 4.03480E02 -3.54980E02 -8.57000E00 -2.04500E01 5.32310E02 -9.80340E02 7.41140E02 -2.23850E02 -1.33480E02 1.21800E02 -6.91500E01 1.61050E02 -5.51790E02 8.03830E02 -5.41390E02 6.52900E01 -2.38340E02 8.60850E02 -1.10578E03 5.43800E02 -4.01300E01 1.02910E02 -4.54730E02 4.94800E02 -3.48780E02 4.96870E02 -1.01980E03 1.32557E03 -1.12778E03 5.63050E02 -1.75370E02 -2.54700E01 -3.29200E01 1.91420E02 -2.62490E02 2.78000E01 -2.79700E01 4.20550E02 -7.53460E02 3.77920E02 5.47920E02 -1.35534E03 1.22580E03 -3.28400E02 -6.89360E02 8.84150E02 -2.25520E02 -2.06300E02 -3.30300E02 1.06016E03 -1.08538E03 2.70740E02 4.31530E02 -3.00120E02 -3.13120E02 3.32760E02 3.47290E02 -9.23060E02 5.24160E02 2.71630E02 -6.65970E02 9.40500E01 6.89470E02 -4.17350E02 -8.14010E02 1.37581E03 -7.75950E02 -3.53000E00 -2.59230E02 8.85390E02 -8.38430E02 3.60220E02 -3.30410E02 4.95900E02 -2.86710E02 -3.38260E02 9.34900E02 -1.43045E03 1.31938E03 -1.39000E02 -1.46935E03 1.84352E03 -9.51900E02 2.50120E02 -5.28930E02 9.65410E02 -8.84950E02 4.83290E02 -2.76620E02 2.25220E02 -1.91640E02 9.77800E01 -3.13950E02 8.94870E02 -1.48777E03 1.47029E03 -8.70560E02 2.62010E02 -2.17650E02 3.57050E02 -2.90820E02 -1.35460E02 4.88820E02 -4.82060E02 2.94480E02 -2.88250E02 7.82600E01 3.83020E02 -6.45160E02 2.81460E02 3.27460E02 -5.99430E02 2.92570E02 -2.44130E02 6.37790E02 -8.67620E02 6.95220E02 -1.95270E02 -3.02120E02 1.97000E02 7.19360E02 -1.44480E03 5.26460E02 1.25817E03 -1.78367E03 7.83090E02 -4.05200E01 2.43000E00 3.78700E02 -1.27375E03 1.06688E03 5.20880E02 -1.33649E03 3.52950E02 5.56290E02 -3.96610E02 2.42390E02 -7.29080E02 7.71080E02 6.90000E00 -4.57920E02 -1.57690E02 4.52960E02 4.14060E02 -9.95430E02 -Frame 160 1.64420E02 5.50970E02 1.75950E02 -1.32883E03 9.69090E02 6.41150E02 -1.64953E03 1.12549E03 -8.57400E01 -3.93350E02 1.34890E02 3.74330E02 -6.10180E02 2.99430E02 -1.05120E02 5.26910E02 -9.61010E02 5.41950E02 1.90870E02 -4.19250E02 1.09150E02 -2.17220E02 9.54510E02 -1.26342E03 5.22240E02 2.95620E02 -5.67290E02 3.90640E02 -1.58180E02 2.01700E01 -1.49900E01 2.91770E02 -6.93260E02 3.82890E02 5.07950E02 -7.38600E02 -2.62010E02 1.14055E03 -9.63590E02 3.31100E02 -2.51490E02 5.51130E02 -5.93950E02 1.93110E02 2.23320E02 -6.56750E02 9.83570E02 -8.42310E02 1.64130E02 5.19530E02 -9.09570E02 7.94980E02 -3.94510E02 -5.84200E01 2.24110E02 -3.84000E00 -4.84840E02 5.45730E02 -2.08350E02 -5.85600E01 -4.60900E01 2.12800E02 -1.99510E02 -8.39000E00 8.06400E01 8.83400E01 -9.98100E01 -4.00690E02 8.46490E02 -6.55560E02 -5.74500E01 3.22200E02 1.63280E02 -5.01710E02 -1.01800E02 7.45560E02 -4.82580E02 -5.82250E02 1.43853E03 -1.25655E03 1.84200E02 6.00320E02 -6.92260E02 5.58830E02 -3.63920E02 -2.45870E02 7.26050E02 -3.61660E02 -4.32670E02 2.98520E02 7.22030E02 -1.29404E03 7.96750E02 -1.25560E02 2.17200E01 -6.23470E02 1.22696E03 -9.95540E02 -2.09840E02 1.02034E03 -4.23400E02 -3.83390E02 5.21000E00 7.38810E02 -5.71600E02 -2.80000E02 5.24870E02 -1.02870E02 -1.79300E01 -4.63350E02 6.19880E02 -1.67980E02 -2.63050E02 1.06180E02 3.09720E02 -3.16740E02 -3.94280E02 7.82140E02 -9.48000E01 -6.59770E02 3.13400E02 6.19360E02 -1.01080E03 2.19570E02 8.77770E02 -1.21150E03 5.66750E02 7.64500E01 8.79100E01 -5.92360E02 5.36880E02 -8.47000E00 -1.42680E02 -3.12910E02 3.67880E02 1.62370E02 -7.22650E02 1.10663E03 -1.18156E03 5.02590E02 4.74340E02 -8.60230E02 3.75730E02 2.01550E02 1.34790E02 -7.69160E02 4.76650E02 -1.34470E02 4.03630E02 -6.25010E02 1.93120E02 1.07360E02 4.41840E02 -7.66750E02 1.31000E02 4.07380E02 -1.01080E02 -2.31700E01 -8.73830E02 1.15801E03 -Frame 160 1.18590E02 -1.10308E03 1.44500E02 9.41510E02 -3.72720E02 -5.37240E02 1.08650E02 5.83400E02 6.92800E01 -1.14580E03 7.28610E02 3.28290E02 -3.86720E02 3.75200E01 -1.66160E02 3.40010E02 -4.44900E01 -1.37840E02 -1.57950E02 8.24600E01 3.96220E02 -9.86900E01 -7.85810E02 8.44550E02 -1.67470E02 -1.08630E02 -9.98700E01 9.62500E01 4.15340E02 -8.90090E02 4.88940E02 3.02150E02 -3.69700E02 -1.19980E02 2.25700E01 3.59500E02 -2.91490E02 -5.03400E01 4.31000E00 -6.73600E01 6.38810E02 -6.60780E02 -4.55940E02 9.11650E02 3.68670E02 -1.17044E03 7.39500E01 8.78740E02 -4.63410E02 -4.45630E02 5.85110E02 -9.38300E01 -1.90680E02 3.18650E02 -6.50570E02 6.65840E02 -1.40670E02 -3.86990E02 8.34300E01 5.01310E02 -2.52360E02 -4.27100E02 3.43150E02 2.07890E02 -1.50750E02 -4.60340E02 6.71920E02 -1.76440E02 -2.46870E02 1.03750E02 -1.15890E02 4.86780E02 -7.76370E02 5.34140E02 1.16670E02 -5.58200E01 -5.99590E02 5.34380E02 -1.70900E01 -4.76000E01 -2.37010E02 1.77940E02 1.16550E02 -4.19850E02 6.46550E02 -4.91680E02 -1.90650E02 3.49860E02 1.45750E02 -1.06810E02 -1.45080E02 -1.42400E02 -7.55100E01 1.23051E03 -1.33723E03 -3.24120E02 1.22361E03 2.04050E02 -1.42722E03 2.16400E02 1.18763E03 -6.10220E02 -3.07090E02 -3.32300E02 1.36701E03 -1.41341E03 8.89510E02 -4.35190E02 3.95500E01 -3.60700E01 5.60000E02 -8.43020E02 5.42360E02 -2.59930E02 6.62100E01 4.61370E02 -8.51680E02 1.58460E02 1.00168E03 -1.23596E03 2.35360E02 9.07950E02 -1.11551E03 5.90500E02 -1.75290E02 -1.58600E02 5.35750E02 -6.63930E02 4.65910E02 -5.17750E02 9.90650E02 -7.48230E02 -4.07180E02 1.17579E03 -3.52390E02 -1.00849E03 8.18060E02 3.71320E02 -4.87580E02 -2.42580E02 5.18220E02 -6.94000E00 -6.98330E02 6.99550E02 1.60000E01 -4.51700E02 -2.34400E01 5.60080E02 -1.88000E00 -8.75210E02 8.76270E02 -4.33910E02 2.76800E02 2.35230E02 -1.28084E03 1.03740E03 2.62350E02 -4.17910E02 -1.71810E02 -1.62940E02 -Frame 160 6.60350E02 -2.30520E02 -2.45720E02 -1.01600E01 -7.93100E01 6.59470E02 -7.00520E02 1.88090E02 -2.96000E02 3.58210E02 4.02310E02 -9.66600E02 5.88060E02 7.32400E01 -6.49570E02 6.87870E02 -6.16980E02 5.82390E02 2.53000E01 -8.33040E02 9.72850E02 -7.80330E02 4.30000E02 -1.63650E02 2.96490E02 -2.08420E02 -2.78750E02 2.59000E02 -8.87000E00 4.39800E01 -5.11580E02 6.36150E02 -5.20230E02 6.50110E02 -1.07297E03 9.06660E02 9.86500E01 -1.00744E03 6.54200E02 1.99600E02 -1.59250E02 -1.96050E02 3.43190E02 -3.38220E02 -3.31390E02 7.15950E02 -3.59000E02 5.91400E01 -6.28500E01 3.29440E02 -7.10450E02 3.72160E02 -6.63110E02 1.35621E03 -5.67300E02 -3.74760E02 -1.77920E02 1.01916E03 -1.40470E03 1.06279E03 -3.68420E02 1.52450E02 -2.69720E02 9.93000E01 1.06300E01 5.02000E01 1.37940E02 -5.78740E02 2.68950E02 -1.46410E02 4.30510E02 -2.61140E02 2.17060E02 -3.48160E02 -1.25540E02 -3.09300E01 2.24620E02 3.16850E02 -6.58370E02 5.74860E02 -4.37320E02 -4.34000E01 -2.52700E01 4.12430E02 -3.43730E02 2.15040E02 -5.69120E02 3.60990E02 1.50510E02 -2.60630E02 -2.94250E02 9.78350E02 -1.16762E03 5.52130E02 -2.47470E02 4.89420E02 -1.10370E02 -1.72610E02 -3.71620E02 -1.98450E02 8.26240E02 -9.31700E01 -2.95930E02 -2.10690E02 1.89370E02 4.78610E02 -6.70660E02 -9.58500E01 7.08100E01 1.35954E03 -1.15815E03 -9.51610E02 1.43519E03 -1.27560E02 -5.18520E02 -2.13090E02 -9.50300E01 8.96750E02 -3.51650E02 -3.83330E02 3.73600E01 3.87010E02 4.31000E01 -9.98490E02 1.22063E03 -2.40780E02 -3.87160E02 3.46290E02 -8.09100E01 -8.34250E02 8.23880E02 2.98500E02 -5.74410E02 -2.53780E02 7.16990E02 -4.74900E02 1.19790E02 -1.87250E02 1.16380E02 -1.84720E02 8.50030E02 -9.63020E02 2.72760E02 -1.60510E02 7.55960E02 -6.73940E02 -7.58430E02 9.84160E02 8.01700E02 -1.22215E03 -2.53440E02 5.06450E02 4.27350E02 -6.76000E01 -5.53790E02 2.18500E02 1.12460E02 1.21030E02 -3.65250E02 -1.19230E02 -Frame 160 5.90500E02 -1.83800E01 -7.30700E01 -9.50380E02 4.57060E02 1.22558E03 -3.94280E02 -1.05385E03 2.14170E02 3.70190E02 2.25680E02 -2.17510E02 2.80000E00 -1.03080E02 2.62860E02 -3.67130E02 -7.72600E01 3.95640E02 4.10790E02 -4.53970E02 -3.41040E02 2.33700E02 1.50990E02 1.56580E02 2.27200E02 -1.01620E03 4.89900E02 9.22110E02 -8.77170E02 -7.22600E01 4.94610E02 1.16550E02 -4.06300E02 -2.61930E02 3.94150E02 6.26150E02 -5.70250E02 -3.16100E02 2.82210E02 4.25760E02 -7.00640E02 2.26790E02 3.87690E02 -3.53790E02 3.17140E02 -7.28470E02 4.48270E02 1.82980E02 -1.42680E02 1.65730E02 -1.71470E02 -1.79300E01 5.93800E01 8.70300E01 6.94600E01 -2.66710E02 5.87980E02 -3.32440E02 -2.51000E02 4.26200E02 5.49950E02 -9.06970E02 -1.86080E02 5.29280E02 2.52270E02 -4.85300E01 -2.21570E02 -1.05740E02 1.20780E02 6.12000E01 -2.92700E01 1.92500E02 -2.42040E02 4.38220E02 -3.89880E02 -5.21000E00 4.33370E02 1.07120E02 -5.28300E02 3.51140E02 9.04600E01 2.86500E01 -2.12080E02 4.15960E02 -1.03950E02 -3.83820E02 2.88030E02 1.59400E02 -1.38340E02 2.41860E02 -1.53390E02 8.33000E01 1.00250E02 -4.22350E02 4.16300E02 -4.94900E01 2.86380E02 -3.38610E02 2.64410E02 -2.87150E02 1.25200E01 5.11460E02 -5.61630E02 5.27640E02 2.41120E02 -1.21946E03 7.41950E02 6.47330E02 -4.54800E02 -3.90560E02 2.65050E02 5.05700E02 -6.29660E02 4.20480E02 2.67200E01 1.39780E02 -3.07770E02 -1.06850E02 3.40400E02 2.37180E02 5.65700E01 -4.28650E02 -4.44500E01 2.21690E02 1.28700E01 2.76600E02 -4.97750E02 2.20440E02 3.75650E02 -2.80670E02 -2.54000E02 2.12750E02 1.72750E02 -4.76300E01 9.02400E01 -1.64690E02 2.58670E02 1.69000E01 -3.87340E02 2.12300E02 1.93000E01 8.33300E01 2.06280E02 -4.42140E02 3.53820E02 -3.97920E02 2.13480E02 5.40600E02 -5.43650E02 -7.90000E00 2.97440E02 -1.60040E02 3.32500E02 -2.57020E02 1.85490E02 -1.47470E02 3.58430E02 -2.28340E02 -3.01020E02 6.06350E02 -Frame 160 -3.87700E01 2.12200E01 -3.81930E02 3.29830E02 1.50310E02 -2.42880E02 -1.28980E02 1.57580E02 4.37870E02 -4.15600E01 -6.26750E02 1.79570E02 8.08670E02 -3.65510E02 -4.86300E01 -6.28880E02 5.82530E02 4.55870E02 -4.00110E02 -2.97160E02 3.75270E02 8.61600E01 -2.15950E02 -2.80180E02 2.17880E02 1.80150E02 5.04100E02 -4.07380E02 -5.22640E02 5.17040E02 4.94400E02 -5.64380E02 -2.43350E02 6.37850E02 5.17720E02 -5.21580E02 -6.11500E02 4.43390E02 3.75500E02 -4.58200E01 7.19000E01 -1.38780E02 6.21800E01 -2.86800E01 1.26700E02 -4.20210E02 6.68380E02 -4.97000E00 -7.21100E01 -2.50230E02 8.24000E01 1.19260E02 2.21170E02 -6.56950E02 4.22410E02 4.26770E02 -1.31110E02 -6.40090E02 6.31810E02 -1.85530E02 8.20500E01 -1.23150E02 2.42440E02 -1.15870E02 2.78700E01 -2.69500E01 2.41580E02 3.52100E01 -2.28550E02 1.53770E02 -1.18210E02 4.75300E01 2.84370E02 1.45290E02 -7.05200E02 4.15690E02 -8.61300E01 5.96300E01 1.50860E02 4.49790E02 -2.34430E02 -7.29560E02 1.13700E02 4.59940E02 2.83470E02 -3.22700E02 1.68710E02 1.95180E02 -6.08690E02 4.11700E01 1.53100E02 4.67360E02 1.88920E02 -7.85280E02 5.70150E02 -4.80020E02 1.63800E02 4.88390E02 3.58000E00 -4.75200E02 -2.66320E02 1.84280E02 5.34650E02 1.07370E02 -5.20000E00 -4.60220E02 -1.06860E02 -9.54600E01 4.38390E02 -1.56500E01 2.83300E02 3.01250E02 -8.94500E02 -3.27370E02 8.51610E02 1.52600E01 -2.98950E02 1.27420E02 2.41870E02 -1.67350E02 3.29500E01 -1.73570E02 2.87000E01 3.43210E02 -1.91860E02 -1.15280E02 1.62790E02 2.81320E02 -4.23730E02 1.29830E02 1.59400E02 -5.73250E02 5.64990E02 2.00910E02 -2.47600E02 -1.54730E02 2.88170E02 -3.84900E01 -2.50200E02 -8.72100E01 6.13910E02 -7.68500E01 -4.47880E02 2.35050E02 1.57890E02 -2.34790E02 2.82620E02 -9.12200E01 -3.93520E02 3.13210E02 5.80510E02 -4.79450E02 -1.92720E02 1.20070E02 -2.15570E02 -7.53800E01 1.78220E02 2.49500E02 1.24760E02 -3.79940E02 -Frame 160 -5.81880E02 5.61480E02 3.86700E01 -3.18340E02 7.57910E02 -1.99260E02 -3.75830E02 -2.37500E02 5.58330E02 -3.26750E02 3.68110E02 1.96120E02 -5.12360E02 -3.64260E02 4.12760E02 5.34200E01 2.65920E02 -1.99250E02 -2.38610E02 -9.09600E01 1.79340E02 2.60830E02 1.56000E01 8.57800E01 -2.32940E02 -4.27290E02 -8.62500E01 5.51410E02 2.69270E02 -5.18400E01 -3.43820E02 -4.54500E02 -2.49180E02 4.36710E02 4.03390E02 6.60000E-01 -5.12520E02 1.26910E02 -5.10100E01 -1.04390E02 -1.02330E02 4.68800E01 2.36650E02 1.49060E02 -2.87380E02 -3.34050E02 1.22140E02 2.75310E02 -8.00500E01 -1.72330E02 1.57690E02 -2.80240E02 2.48540E02 1.34300E01 -4.27970E02 4.73370E02 1.96130E02 -6.60870E02 -2.04760E02 4.57630E02 2.13060E02 -8.22800E01 -2.13680E02 -2.30950E02 3.41450E02 8.22200E01 -1.82110E02 7.45500E01 2.14070E02 -2.47300E02 -6.27100E01 -2.41360E02 1.20680E02 4.18790E02 -2.78280E02 -1.24650E02 2.15840E02 -4.78350E02 -2.39570E02 3.67800E02 1.97590E02 4.65920E02 -6.78890E02 -3.01470E02 3.50890E02 -1.60920E02 -1.96420E02 2.68150E02 2.01820E02 -1.12760E02 -3.36970E02 -1.36810E02 -1.32350E02 6.33500E01 6.17020E02 -3.81780E02 -3.85120E02 2.95780E02 -6.55600E01 -3.09030E02 2.99240E02 -9.98000E00 9.42300E01 -3.16440E02 -1.95300E01 2.71560E02 -5.06200E01 -5.57300E01 -7.49600E01 -1.47730E02 -2.38630E02 1.41860E02 2.86960E02 5.02600E01 -1.61820E02 -2.89320E02 -3.93510E02 1.51420E02 3.00030E02 2.03930E02 2.71650E02 -4.38800E02 -4.60820E02 -2.51110E02 4.35290E02 3.10480E02 1.52500E02 -1.45520E02 -3.14630E02 -1.09690E02 -9.03300E01 1.31690E02 3.20430E02 -2.09310E02 -9.02500E01 -3.14400E01 -1.94800E02 2.49950E02 1.45200E02 -2.14940E02 -3.79030E02 -1.20860E02 4.70380E02 8.44000E00 4.31900E01 1.32960E02 -3.63630E02 -3.11250E02 -8.29800E01 2.46400E02 1.87710E02 1.82010E02 9.19500E01 -2.25990E02 -4.74560E02 -3.27390E02 4.96610E02 4.85600E02 -3.12200E01 -2.49000E02 -Frame 160 -1.57290E02 -2.52610E02 1.35340E02 3.81400E01 2.54880E02 2.88070E02 -4.45990E02 -2.98340E02 1.31400E01 1.38220E02 2.77020E02 1.89840E02 -2.95220E02 -4.37010E02 -1.02790E02 3.94840E02 2.23470E02 -8.34200E01 -1.43730E02 -2.26780E02 -3.52200E02 1.31810E02 5.95640E02 2.22400E01 -1.57920E02 -3.33510E02 -3.85230E02 1.11790E02 3.17050E02 2.03340E02 1.25910E02 -1.98040E02 -5.13830E02 -1.27920E02 1.73020E02 1.07080E02 3.07980E02 3.77900E01 -3.00800E02 -1.93590E02 -3.06900E02 1.79550E02 2.81850E02 9.30300E01 4.12700E01 -2.08140E02 -4.05080E02 -8.17500E01 2.24630E02 7.72500E01 2.21220E02 3.74200E01 -3.86110E02 -2.88390E02 2.56000E01 9.72500E01 3.61000E02 5.85500E01 -2.86320E02 -3.36600E02 -1.15140E02 2.39250E02 2.33500E01 3.07300E01 -8.67100E01 -1.02720E02 -3.00150E02 3.65700E01 1.64640E02 2.04900E01 -7.21600E01 -2.20630E02 -2.27510E02 6.75800E01 1.17700E02 1.93230E02 5.18900E01 -4.23890E02 -2.16010E02 -5.53000E00 1.37430E02 8.86500E01 1.53250E02 -8.53200E01 -2.56210E02 -2.56170E02 -4.79200E01 1.34780E02 1.62970E02 6.98500E01 -1.02240E02 -2.63580E02 -1.94690E02 9.44800E01 1.45470E02 7.88700E01 6.71100E01 -2.23100E02 -1.36100E02 6.36900E01 1.12570E02 -7.61700E01 -2.67000E01 1.43000E01 -1.33470E02 4.42900E01 9.74800E01 1.17200E02 -1.03600E02 -1.11150E02 -1.15850E02 -6.76100E01 3.11600E01 8.29300E01 9.62000E01 1.00770E02 -6.56300E01 -1.86130E02 -3.08200E02 3.22000E00 1.84240E02 2.27660E02 -5.38100E01 -6.89500E01 -1.64510E02 -1.61890E02 3.99400E01 1.63950E02 1.16200E01 -5.14500E01 -1.62440E02 -1.73000E00 7.29300E01 -2.41900E01 3.36900E01 -1.76900E01 3.23400E01 -1.93130E02 -2.64100E01 2.05470E02 1.73310E02 -1.43020E02 -2.30010E02 -2.94900E01 2.52400E01 1.66200E01 6.77000E01 -3.37200E01 -4.62600E01 -6.16000E00 -6.88300E01 -1.51390E02 8.46200E01 1.85830E02 -4.30200E01 -1.24920E02 -3.12500E01 2.43300E01 -4.14100E01 3.38400E01 -Frame 160 7.13700E01 4.89800E01 5.08400E01 -1.29300E02 -6.59000E01 8.55100E01 5.75100E01 7.95800E01 -2.67500E01 -1.35000E00 9.18300E01 2.48000E01 -3.33000E00 3.06700E01 9.16900E01 -4.90000E-01 4.48000E00 1.66000E01 -7.69200E01 1.21740E02 1.42430E02 5.36300E01 -2.79600E01 7.29600E01 1.09400E01 -6.90000E01 -5.93400E01 2.03680E02 1.42650E02 4.06100E01 2.16390E02 8.44200E01 -3.19690E02 -5.89800E01 6.88600E01 9.60000E00 2.36510E02 2.67230E02 1.37670E02 -1.50000E01 -1.93350E02 6.99000E00 1.85540E02 4.94600E01 -5.98500E01 3.45400E01 1.15840E02 8.15700E01 1.19190E02 1.27890E02 1.03770E02 6.78400E01 -9.22300E01 -1.23130E02 2.16000E00 1.20350E02 1.89110E02 1.09850E02 6.07000E00 8.11100E01 -2.85700E01 -4.35800E01 5.70200E01 1.07710E02 -4.11000E01 5.56000E00 -4.31000E00 3.95500E01 1.25760E02 7.55500E01 7.07500E01 -6.22300E01 -1.02230E02 6.66600E01 6.27400E01 5.86700E01 2.00450E02 1.07460E02 -5.24700E01 -6.12600E01 2.07700E01 -6.50000E-01 1.74300E02 7.45300E01 4.56400E01 5.85000E00 3.68600E01 2.00830E02 1.24720E02 -7.82000E00 9.55900E01 3.15000E00 9.89000E00 9.98700E01 1.67580E02 2.22270E02 1.11490E02 8.12300E01 2.01000E00 3.90000E-01 9.97700E01 2.15180E02 1.67010E02 5.72500E01 4.81000E01 1.47680E02 7.22600E01 4.75000E01 1.49990E02 1.01570E02 1.25620E02 -4.26400E01 -3.70000E01 1.17910E02 5.65600E01 1.73320E02 1.11590E02 5.49100E01 -5.51000E00 2.32700E01 2.19800E01 3.46900E01 4.38200E01 1.30250E02 8.42900E01 -6.11000E00 2.37600E01 8.95900E01 8.04300E01 2.79700E01 7.19200E01 -1.07800E01 -3.99700E01 9.40300E01 1.15140E02 7.58500E01 8.13300E01 6.49600E01 7.20800E01 1.74100E01 -3.91000E00 6.11700E01 1.06260E02 6.97000E01 2.20000E01 5.78600E01 1.00830E02 1.20900E01 8.06500E01 4.63100E01 -2.00800E01 2.15500E01 5.65000E01 5.53000E00 3.50300E01 9.04600E01 1.13570E02 -9.86600E01 -3.53100E01 -3.29200E01 -Frame 160 4.06200E01 1.24400E01 1.42000E00 1.00000E-01 -6.32200E01 1.46000E01 -1.50000E-01 6.80000E-01 -6.84300E01 -3.15800E01 -7.45300E01 -1.14710E02 -9.90000E01 7.23100E01 9.08700E01 4.69400E01 -6.73700E01 -5.11300E01 -1.68320E02 -1.83960E02 -2.17900E02 -6.96800E01 -3.48100E01 3.31170E02 3.40160E02 3.96120E02 2.48460E02 -2.80970E02 -1.13480E02 -2.44680E02 1.71310E02 4.15020E02 4.78900E02 2.94340E02 1.54840E02 -6.60700E01 -3.87000E01 1.88600E02 2.19800E02 2.84810E02 1.51620E02 -1.43770E02 -6.01000E01 -4.97300E01 2.10060E02 3.40740E02 2.67200E02 2.22000E01 -1.08330E02 -3.15730E02 -2.37190E02 5.10500E01 9.92000E01 1.87790E02 5.19900E01 -6.30100E01 -1.70460E02 -1.34030E02 -8.43100E01 7.06000E00 6.28000E00 -7.45000E01 -3.06800E01 -7.84500E01 -2.56000E01 8.79300E01 2.19100E01 8.18500E01 -4.24100E01 5.50000E-01 -3.41400E01 4.41500E01 7.08400E01 2.11310E02 1.36950E02 8.21900E01 4.16900E01 6.99300E01 8.80100E01 9.16000E01 7.82500E01 8.84500E01 1.63920E02 8.86100E01 1.14930E02 8.70000E01 6.21700E01 8.45600E01 2.86100E01 7.95000E00 4.16900E01 6.84800E01 1.04080E02 1.97300E01 2.80000E00 -1.76100E01 7.14100E01 -4.48400E01 3.84000E01 -1.37800E01 5.74800E01 2.59300E01 -5.65800E01 -7.25500E01 4.70900E01 6.14200E01 9.11700E01 2.37900E01 -5.96600E01 -3.26000E01 -1.96400E01 9.77000E00 4.41100E01 1.03500E02 1.02660E02 4.77300E01 -1.99100E01 4.10000E-01 6.33900E01 5.02900E01 7.97700E01 6.11200E01 2.87000E00 5.98500E01 1.85700E01 5.00300E01 -1.45500E01 7.19200E01 6.50300E01 -1.81000E01 -4.67500E01 -1.82100E01 -7.40000E-01 1.30000E00 -2.75700E01 -2.82800E01 -2.09600E01 1.36300E01 -5.77000E01 -3.31600E01 -2.38100E01 -9.21300E01 -4.64600E01 -7.83200E01 -7.80800E01 6.25000E00 -1.25810E02 -1.88300E01 -1.31520E02 -1.01570E02 -4.76000E01 -1.27920E02 -6.66100E01 -1.14350E02 -7.54700E01 -1.63330E02 -6.47700E01 -1.03120E02 -1.55580E02 -1.57540E02 -Frame 160 -1.93440E02 1.38700E02 3.99950E02 5.49880E02 2.82920E02 -1.81560E02 -3.13230E02 -2.01680E02 2.28500E02 4.01760E02 4.25000E02 2.43570E02 1.05320E02 7.72000E00 8.91200E01 1.35980E02 1.64190E02 2.32150E02 -5.29700E01 -1.97820E02 -1.96930E02 7.02000E01 3.21550E02 2.80400E02 8.77500E01 -1.53900E02 -2.50840E02 -2.68510E02 -1.87450E02 -1.04690E02 1.07400E01 1.87400E01 -9.80200E01 -1.86290E02 -1.52110E02 -7.30000E-01 -4.67000E00 -1.27730E02 -2.80480E02 -2.16700E02 -1.01760E02 -5.71900E01 6.47900E01 6.54600E01 9.60700E01 1.35200E01 -1.10610E02 -4.44900E01 -5.30000E00 1.12090E02 1.01990E02 4.70000E-01 1.98000E01 9.87000E01 1.40940E02 1.70350E02 1.09510E02 9.36900E01 4.63000E01 -1.65900E01 -2.54000E01 1.95500E01 9.78800E01 1.26550E02 7.10000E01 -2.13200E01 -5.14600E01 4.85300E01 4.05800E01 -8.16400E01 -3.45500E01 -1.01960E02 -4.03500E01 -7.17900E01 5.87000E00 -2.30700E01 1.91200E01 -1.64000E01 -8.90000E01 -1.39760E02 -5.89600E01 2.73900E01 -4.56200E01 -1.38500E01 2.89100E01 1.29600E01 3.85000E01 -3.12100E01 3.99500E01 -5.73000E00 3.18000E00 -3.26400E01 3.94600E01 3.27500E01 8.58000E01 9.14100E01 -1.88900E01 9.42000E00 2.36000E01 4.92000E01 3.55500E01 -4.55000E00 -8.80000E-01 4.91000E00 2.88000E00 -1.32100E01 1.62200E01 3.55000E00 -4.51000E00 -5.98100E01 -1.22760E02 -8.35400E01 -5.40300E01 -1.65600E01 -6.59200E01 -8.07500E01 -6.89700E01 -5.97700E01 -1.03240E02 -8.69700E01 -7.61300E01 -5.79000E01 -1.07070E02 -6.66800E01 -8.20000E01 -9.87400E01 -6.19300E01 -8.99500E01 -9.57800E01 -1.27730E02 -1.10580E02 -7.28300E01 -1.58880E02 -1.01480E02 -1.66250E02 -9.29100E01 -1.21260E02 -1.52420E02 -1.13450E02 -1.37220E02 -9.36500E01 9.73000E01 3.48010E02 4.24100E02 3.30110E02 -5.51200E01 -1.27230E02 -1.92470E02 9.84300E01 2.49210E02 2.74400E02 2.13100E02 1.38700E02 1.73870E02 1.13970E02 7.81200E01 4.11000E01 5.89100E01 -7.37700E01 -1.24470E02 -Frame 160 -1.87610E02 -4.65200E01 1.02980E02 6.30100E01 5.87500E01 -7.96900E01 -8.53300E01 -1.95060E02 -2.38000E02 -3.06050E02 -2.28930E02 -1.46230E02 -8.08600E01 -8.64200E01 -6.11000E01 -5.59700E01 -9.26600E01 -1.81430E02 -1.74810E02 -1.36860E02 -7.66500E01 -7.85500E01 -9.54800E01 -9.68900E01 -5.30000E00 8.00800E01 1.04980E02 1.39510E02 9.39400E01 3.28400E01 -4.02100E01 -6.45100E01 -3.05300E01 9.45000E01 1.41280E02 1.54350E02 5.26600E01 3.97600E01 4.04100E01 7.80300E01 1.87300E01 1.95700E01 -5.35900E01 -6.09700E01 -5.95300E01 -9.70000E01 -4.85500E01 5.43000E00 4.06000E00 -4.63700E01 -8.93300E01 -1.20550E02 -9.76400E01 -1.28950E02 -1.80130E02 -1.02750E02 -8.19100E01 -1.23800E01 -6.97200E01 -6.38000E01 -3.56700E01 -4.66700E01 -3.60000E01 -5.00000E01 -3.54200E01 -7.83900E01 9.35000E00 -4.24000E00 1.87200E01 -1.26600E01 7.59700E01 1.14240E02 6.05600E01 1.51400E01 1.12800E01 -2.07300E01 -3.47300E01 -3.31500E01 4.34900E01 2.14400E01 5.76700E01 -2.20500E01 2.17700E01 -2.50900E01 -3.03900E01 -2.28400E01 -5.00500E01 -1.26070E02 -9.43400E01 -9.85600E01 -7.38400E01 -6.03100E01 -6.23300E01 -1.53800E01 -8.89900E01 -1.18820E02 -1.24490E02 -1.07250E02 -1.22410E02 -1.30960E02 -1.17690E02 -9.19400E01 -9.43500E01 -3.97900E01 -8.45500E01 -9.66600E01 -6.21000E01 -7.34600E01 -8.21500E01 -1.48080E02 -7.89600E01 -1.36680E02 -1.09110E02 -1.34640E02 -8.08900E01 -8.64600E01 -1.27180E02 -1.30100E02 -1.46050E02 -1.83420E02 -1.94840E02 -1.17500E02 -1.36730E02 -1.25500E02 -8.88800E01 2.88800E01 2.17180E02 3.51030E02 3.82630E02 8.58000E01 -6.33000E00 -1.42340E02 1.65400E01 7.92800E01 1.00850E02 1.53960E02 1.32540E02 1.81310E02 1.21400E02 1.50510E02 3.03700E01 9.34800E01 -2.75500E01 -7.83000E01 -1.49550E02 -1.80870E02 -1.17000E02 -5.90600E01 -1.32900E01 -1.51100E01 1.00000E-02 -4.24200E01 -1.26140E02 -2.13350E02 -2.30080E02 -2.11140E02 -1.79450E02 -1.80650E02 -1.61760E02 -1.65180E02 -Frame 160 -7.46000E01 -5.22000E01 -2.21100E01 4.98800E01 -2.50000E01 -3.82200E01 -1.17860E02 -1.57900E02 -1.06080E02 2.93900E01 4.69700E01 9.30000E01 1.18320E02 1.12270E02 1.22890E02 1.22690E02 9.83400E01 8.41200E01 4.73600E01 -1.16000E01 -1.43900E01 -7.27000E00 1.30600E01 9.99900E01 8.15000E01 9.33500E01 4.84700E01 2.41500E01 -1.39500E01 -8.22200E01 -8.25300E01 -1.00780E02 -8.15100E01 -8.65800E01 -1.07740E02 -8.24700E01 -5.03600E01 -4.42300E01 -4.88900E01 -6.86700E01 -6.50200E01 -2.42200E01 -1.15160E02 -8.88300E01 -8.96300E01 -6.04000E01 -3.02400E01 -3.15000E00 3.27500E01 -2.30000E00 4.95400E01 3.99100E01 5.69200E01 8.03800E01 4.44700E01 4.73900E01 -2.16600E01 5.41600E01 1.02600E01 2.29800E01 6.10600E01 8.02500E01 1.11950E02 9.35200E01 8.44300E01 5.89800E01 5.69000E00 -2.62500E01 -2.81500E01 -3.60800E01 -4.82200E01 -6.96900E01 -3.67600E01 -2.47800E01 -2.34100E01 -2.09800E01 -8.46000E00 -3.05500E01 -8.13000E01 -8.45500E01 -1.12830E02 -8.78900E01 -8.61100E01 -9.92100E01 -6.46400E01 -4.89600E01 -3.87700E01 -2.62500E01 -2.53400E01 -2.24000E01 -4.23700E01 -4.79400E01 -5.76600E01 -1.06650E02 -5.80800E01 -9.99800E01 -4.61100E01 -4.55600E01 -1.49800E01 -3.84700E01 -5.36800E01 -3.13400E01 -9.83100E01 -9.72900E01 -1.13180E02 -1.46490E02 -1.64730E02 -1.61420E02 -1.61900E02 -1.38290E02 -1.27870E02 -7.50600E01 -3.06000E01 1.02100E01 7.22200E01 1.60030E02 2.58360E02 3.41450E02 1.41760E02 6.67400E01 -1.56800E01 1.11350E02 8.61900E01 7.31600E01 1.06650E02 8.80700E01 1.57830E02 8.96000E01 1.78180E02 4.63400E01 1.17390E02 9.65400E01 2.99700E01 -6.76700E01 -1.45250E02 -1.13080E02 -1.15800E02 -1.10490E02 -1.05910E02 -1.40900E01 -7.94200E01 -7.17000E01 -1.07680E02 -1.05680E02 -9.25300E01 -1.00900E02 -1.30450E02 -1.73810E02 -2.11370E02 -1.63920E02 -1.17880E02 -8.13400E01 -3.76300E01 2.43000E00 4.16900E01 3.30900E01 1.91600E01 3.17500E01 5.86700E01 1.83400E01 -Frame 160 2.97200E01 3.64000E01 4.82300E01 5.43600E01 4.76100E01 9.95900E01 1.20070E02 1.34060E02 1.15350E02 1.17950E02 6.05200E01 4.42600E01 4.44600E01 1.36300E01 1.28400E01 -1.69800E01 -2.07000E01 -2.05100E01 -4.12900E01 -2.76700E01 -6.60000E00 -1.48700E01 -2.13800E01 -7.20700E01 -7.72600E01 -7.95400E01 -1.21820E02 -9.43000E01 -1.06850E02 -1.17700E02 -8.87900E01 -6.59200E01 -8.73000E01 -2.12800E01 6.97800E01 -3.43000E00 -3.92000E00 1.85600E01 8.70000E00 1.75100E01 1.56000E00 2.11000E01 5.42100E01 3.92800E01 6.88400E01 8.92400E01 2.31800E01 8.40500E01 9.57200E01 1.12660E02 4.40200E01 4.62200E01 4.64500E01 2.96500E01 1.23100E01 3.74300E01 6.33000E01 3.49200E01 -1.83600E01 -8.26000E00 1.51700E01 -5.68000E00 8.40000E-01 -1.54300E01 -5.31800E01 -9.10400E01 -6.69800E01 -5.91100E01 -9.79400E01 -7.38800E01 -6.20100E01 -4.27200E01 -8.08000E01 -7.89900E01 -2.00600E01 -3.00000E-01 -5.79400E01 -4.93200E01 -4.40000E00 -3.11000E01 -6.06100E01 -3.19900E01 -2.94700E01 -2.58600E01 -4.01300E01 -3.48200E01 -2.63300E01 -5.65700E01 2.29000E00 -1.90500E01 -1.90500E01 -4.20500E01 -5.77400E01 -6.58800E01 -1.17230E02 -9.30800E01 -1.15120E02 -1.30760E02 -1.17790E02 -1.40340E02 -1.27490E02 -1.79160E02 -8.93000E01 -8.16200E01 -6.66700E01 -4.02400E01 -3.10000E01 1.17510E02 2.14460E02 2.71170E02 2.04350E02 2.20250E02 1.21420E02 1.34410E02 1.19670E02 1.06360E02 9.95400E01 5.34200E01 6.78300E01 3.06300E01 6.72600E01 1.99700E01 1.29210E02 1.44720E02 1.23590E02 7.07100E01 -2.85000E00 -5.56600E01 -5.50300E01 -3.53100E01 -7.69300E01 -1.30750E02 -1.69100E02 -1.45470E02 -1.62970E02 -1.32860E02 -8.37000E01 -6.39500E01 -6.95400E01 -5.72500E01 -1.03540E02 -8.41800E01 -6.91600E01 -5.06300E01 -6.25000E01 -7.77000E01 -4.93200E01 -7.10400E01 -4.93900E01 -3.20500E01 3.68300E01 6.97800E01 1.07660E02 1.15590E02 1.21640E02 1.13750E02 1.40500E02 1.18940E02 9.46000E01 1.16420E02 -Frame 160 5.98100E01 5.04000E01 2.06600E01 3.89900E01 3.48600E01 5.35800E01 5.98400E01 6.52500E01 4.77800E01 4.97400E01 2.87300E01 8.06000E00 -4.24000E00 -3.79000E01 -5.45500E01 -7.26500E01 -1.14230E02 -1.21980E02 -9.28500E01 -8.97300E01 -7.24300E01 -7.75300E01 -5.87200E01 -6.72800E01 -2.60500E01 -3.25300E01 -1.81900E01 2.36000E01 9.65000E00 3.62500E01 -3.23700E01 8.91000E00 3.14500E01 2.36500E01 6.25800E01 4.06500E01 6.90000E01 7.31600E01 1.04380E02 7.54700E01 1.10600E02 1.01720E02 1.16480E02 8.16000E01 6.05800E01 5.58700E01 4.29800E01 4.66700E01 2.64500E01 5.16000E01 -6.50000E00 3.36300E01 -9.01000E00 1.40600E01 1.48500E01 1.06700E01 -1.63000E00 -3.02900E01 -5.97900E01 -6.21300E01 -4.44700E01 -6.32100E01 -7.94600E01 -5.61300E01 -6.30200E01 -6.40600E01 -5.70700E01 -3.28100E01 -2.77000E00 -1.68000E01 7.50000E-01 -8.16000E00 5.66000E00 -1.51000E01 -1.84900E01 7.03000E00 -1.96700E01 -2.51800E01 -2.28400E01 -3.84100E01 -6.04300E01 -1.60800E01 -2.43500E01 -8.86000E00 -9.89000E00 -7.95000E00 -2.09500E01 -2.63400E01 -3.78800E01 -4.47500E01 -7.68000E01 -9.87800E01 -1.00360E02 -1.31910E02 -1.35330E02 -1.29750E02 -1.33900E02 -1.08080E02 -1.10390E02 -9.97000E01 -7.56200E01 -2.76000E00 6.73200E01 1.17470E02 2.65030E02 2.23880E02 1.90230E02 2.02350E02 1.89650E02 2.01380E02 1.41290E02 1.19220E02 7.83700E01 2.72000E01 1.04400E01 -6.83000E00 -1.61000E00 3.47900E01 8.13000E01 5.71900E01 7.13000E01 5.78000E01 2.18500E01 8.17900E01 5.85300E01 4.52000E00 -4.11400E01 -1.05150E02 -1.15020E02 -1.52070E02 -1.78110E02 -1.63780E02 -1.53850E02 -1.47470E02 -1.30760E02 -1.25420E02 -9.68100E01 -4.22400E01 -2.96000E00 9.52000E00 2.03600E01 5.00000E-01 2.20100E01 8.15000E00 -1.21600E01 1.39000E01 3.07400E01 -3.94000E00 3.00000E-01 1.66600E01 4.65000E01 5.92100E01 1.02250E02 1.02520E02 1.34700E02 1.45750E02 1.31010E02 1.28700E02 1.11210E02 9.20900E01 -Frame 160 6.43100E01 4.56300E01 4.35000E00 -4.19000E00 -9.97000E00 -2.99000E01 -5.74000E01 -5.66800E01 -3.18700E01 -5.22500E01 -3.32000E01 -3.55200E01 -3.18700E01 -2.90700E01 -2.71500E01 -3.61400E01 -4.03700E01 -5.16900E01 -5.83100E01 -8.00800E01 -7.64500E01 -6.06400E01 -9.02900E01 -2.37800E01 -9.20000E00 -2.51700E01 1.63800E01 5.61900E01 7.11700E01 6.15400E01 6.95500E01 1.03740E02 9.48900E01 9.06800E01 1.02260E02 8.61100E01 6.63900E01 6.00100E01 5.63900E01 3.76200E01 3.42500E01 4.07600E01 4.14500E01 5.91400E01 4.83400E01 5.21800E01 4.51100E01 4.78000E01 4.05500E01 5.06000E00 1.24900E01 -3.84000E00 -3.66500E01 -7.34200E01 -5.02400E01 -8.02800E01 -7.91600E01 -7.69200E01 -6.75300E01 -8.57800E01 -6.55100E01 -3.65500E01 -2.46600E01 -2.13800E01 -1.59800E01 3.60000E00 -1.22200E01 1.24800E01 1.19300E01 -6.50000E-01 3.38000E00 -2.34700E01 -2.41300E01 -1.67900E01 -1.02100E01 -1.84200E01 -7.87000E00 -1.69900E01 -3.13800E01 -1.19000E00 1.93000E00 3.31400E01 2.28000E00 2.46000E00 6.64000E00 -3.20600E01 -2.39300E01 -5.45300E01 -6.00300E01 -7.46500E01 -1.10660E02 -1.17690E02 -1.20840E02 -1.24990E02 -1.34170E02 -1.15530E02 -1.01230E02 -1.13420E02 -9.39100E01 -5.17400E01 9.75000E00 1.07100E02 1.64330E02 1.87150E02 1.86480E02 1.77600E02 2.00270E02 2.21450E02 1.98080E02 1.58810E02 1.31190E02 9.56100E01 3.28600E01 1.11600E01 4.80000E00 -7.74000E00 1.83600E01 2.70000E-01 -8.36000E00 -2.02300E01 1.05700E01 5.93300E01 6.15600E01 6.18200E01 3.20500E01 2.33500E01 2.38000E00 -2.52200E01 -3.46300E01 -5.92800E01 -9.86200E01 -1.31070E02 -1.64390E02 -1.68580E02 -1.47740E02 -1.27120E02 -1.09750E02 -8.17500E01 -4.48200E01 -3.57200E01 1.36800E01 4.55800E01 5.54100E01 7.54800E01 1.00090E02 9.13600E01 6.32700E01 5.92500E01 6.40500E01 5.79400E01 3.15900E01 1.54000E01 2.87000E01 2.13900E01 1.08400E01 4.49600E01 6.11000E01 5.26900E01 7.19800E01 6.08100E01 -Frame 160 8.42500E01 8.63500E01 9.14500E01 7.76400E01 5.13500E01 2.62200E01 1.31000E00 -3.35000E00 -3.11300E01 -5.27200E01 -5.39100E01 -6.30700E01 -8.14400E01 -9.42900E01 -7.54400E01 -6.39300E01 -5.90000E01 -2.68600E01 -1.97000E01 -1.93000E01 9.13000E00 -5.70000E-01 2.44300E01 4.21800E01 4.94400E01 2.28800E01 2.64800E01 2.31700E01 2.47400E01 1.83400E01 1.17300E01 2.89100E01 3.66000E01 4.15000E01 4.65200E01 5.46600E01 5.90100E01 7.74500E01 8.64000E01 6.55600E01 9.60300E01 6.43700E01 8.26900E01 6.65200E01 4.58100E01 3.54400E01 1.74000E00 -5.98000E00 -2.79100E01 -3.34700E01 -4.41500E01 -5.41000E01 -5.72900E01 -6.65100E01 -5.99400E01 -4.31000E01 -2.66900E01 -2.97400E01 -1.18500E01 -1.13900E01 -1.79000E01 -7.59000E00 -2.95000E00 -6.16000E00 -2.04600E01 -2.31800E01 -2.89600E01 -3.68900E01 -4.40300E01 -3.73500E01 -7.43000E00 -3.15800E01 -3.14500E01 -1.52900E01 1.63800E01 1.00000E-02 5.13000E00 1.40000E00 -2.45000E00 1.58000E00 -1.32700E01 -1.45700E01 -1.39000E01 -2.92000E01 -3.49500E01 -5.58500E01 -6.53500E01 -7.40900E01 -7.10400E01 -8.18400E01 -8.99100E01 -8.21600E01 -9.31100E01 -1.13330E02 -1.04090E02 -1.02490E02 -8.47700E01 -9.44500E01 -6.73700E01 -7.84200E01 -4.97700E01 4.37800E01 1.14150E02 1.11560E02 1.01760E02 1.26540E02 1.73950E02 2.07650E02 1.98190E02 1.81250E02 1.78620E02 1.27750E02 1.00200E02 7.37200E01 4.33700E01 5.70600E01 2.81400E01 -6.68000E00 -1.65500E01 -5.36900E01 -5.19100E01 -6.01000E00 1.43300E01 -7.00000E-01 -3.18000E00 2.12800E01 1.44900E01 1.64900E01 8.55000E00 7.37000E00 9.16000E00 -5.69900E01 -8.51200E01 -9.30300E01 -9.70900E01 -9.41800E01 -9.20900E01 -1.12850E02 -1.19150E02 -9.85400E01 -9.32100E01 -5.66400E01 -1.99000E01 6.98000E00 4.06700E01 3.03500E01 6.36700E01 8.09500E01 1.21680E02 1.18550E02 8.92100E01 8.28800E01 6.32800E01 6.20200E01 4.96700E01 3.99000E01 2.68000E01 2.02800E01 1.55000E00 -3.75000E00 -Frame 160 1.58000E01 1.39500E01 2.70400E01 4.15200E01 3.44200E01 4.50800E01 4.80400E01 3.60600E01 5.46900E01 3.18600E01 1.53100E01 -7.50000E-01 -1.72900E01 -4.83100E01 -4.62300E01 -6.40300E01 -6.93100E01 -7.96800E01 -8.32900E01 -8.19300E01 -6.64500E01 -5.84300E01 -4.51100E01 -7.34000E00 -1.14000E01 1.42000E00 3.26300E01 4.67700E01 6.23000E01 8.22500E01 4.87400E01 5.61500E01 7.97400E01 4.89900E01 6.82500E01 6.40500E01 4.76700E01 4.57500E01 3.37400E01 4.13400E01 2.91500E01 4.55700E01 4.24700E01 4.62500E01 3.41200E01 1.66000E01 3.55400E01 6.50500E01 4.34300E01 2.91200E01 1.53600E01 1.01800E01 -2.71500E01 -2.25900E01 -1.58500E01 -3.38700E01 -5.04000E01 -8.23800E01 -5.72600E01 -4.53000E01 -5.39200E01 -4.57500E01 -2.02800E01 -3.20000E01 -1.30500E01 -2.50000E00 7.38000E00 6.56000E00 -6.29000E00 -2.53000E00 7.35000E00 1.53000E00 -9.47000E00 -2.80000E00 -5.92000E00 -1.91300E01 -3.57300E01 -2.18100E01 -1.64400E01 -2.88900E01 -1.67000E01 -2.01200E01 -4.06300E01 -1.97400E01 -1.71900E01 -3.55500E01 -6.45000E00 -3.24500E01 -5.12300E01 -3.15500E01 -6.22400E01 -5.48300E01 -4.71500E01 -8.12000E01 -7.42400E01 -8.80100E01 -1.05140E02 -9.67200E01 -9.09700E01 -1.05980E02 -1.10380E02 -8.68400E01 -1.07520E02 -1.14770E02 -8.71700E01 -5.67000E00 4.93200E01 1.24930E02 1.29730E02 1.12530E02 1.57670E02 1.98040E02 2.51460E02 2.44290E02 2.17670E02 1.73030E02 1.28860E02 1.30220E02 9.35200E01 5.36200E01 2.74600E01 1.04900E01 -5.29900E01 -7.03600E01 -6.41800E01 -5.97300E01 -2.10700E01 -8.18000E00 -1.08700E01 -1.06200E01 1.46600E01 4.27200E01 4.46200E01 3.45500E01 1.21500E01 -1.49400E01 -4.48400E01 -6.96100E01 -9.40700E01 -9.51900E01 -1.23250E02 -1.36060E02 -1.61140E02 -1.47850E02 -1.20020E02 -6.82300E01 -4.57900E01 -1.56300E01 6.46000E00 3.42100E01 6.87700E01 1.15320E02 1.20190E02 1.22090E02 1.37930E02 1.34130E02 1.18090E02 1.03450E02 8.62700E01 5.34900E01 -Frame 160 3.26600E01 4.17000E00 -2.01900E01 -1.52700E01 -3.17000E00 -6.80000E-01 -2.10000E00 -1.55500E01 2.36100E01 2.39700E01 2.33300E01 4.16600E01 4.45300E01 3.24600E01 3.00000E01 4.45000E00 -2.68800E01 -1.71400E01 -2.70700E01 -6.92700E01 -8.37000E01 -1.10490E02 -1.03000E02 -9.91800E01 -9.11500E01 -7.57900E01 -7.48900E01 -3.49000E01 -2.26500E01 -1.00100E01 2.40200E01 4.40700E01 5.46900E01 8.05800E01 9.31900E01 8.51000E01 9.06800E01 1.34350E02 9.82500E01 4.49500E01 7.49700E01 6.68600E01 7.94500E01 2.13700E01 2.84900E01 4.98200E01 7.78000E00 3.04500E01 3.78100E01 8.38000E00 1.80500E01 1.80200E01 1.99000E00 -1.52000E00 -2.12000E00 -1.87200E01 -1.08000E01 -3.16100E01 -6.50200E01 -5.93900E01 -6.45200E01 -5.67400E01 -6.36600E01 -8.27300E01 -4.23100E01 -3.26000E01 -5.25600E01 -3.60900E01 -2.08000E00 1.98000E00 6.16000E00 1.14600E01 1.59100E01 6.48000E00 1.47500E01 2.42600E01 1.60400E01 -5.45000E00 -2.56000E01 -4.35000E00 -1.44400E01 -3.88300E01 -1.99400E01 -3.24500E01 -3.63200E01 -3.62800E01 -3.32100E01 -3.80200E01 -3.79500E01 -4.18500E01 -3.68400E01 -4.06500E01 -5.65500E01 -5.19000E01 -8.90700E01 -7.73200E01 -1.07150E02 -1.03820E02 -8.63100E01 -9.12000E01 -1.14180E02 -1.09790E02 -1.23190E02 -1.16920E02 -1.09380E02 -1.02540E02 -1.12430E02 -8.75600E01 -1.23880E02 -1.05250E02 -2.29900E01 7.57900E01 1.75510E02 2.00110E02 1.63250E02 2.26070E02 2.44600E02 3.18460E02 3.15300E02 2.39750E02 1.98650E02 1.51110E02 9.49800E01 6.90500E01 1.82800E01 -5.70500E01 -6.76300E01 -1.00450E02 -1.62170E02 -1.53630E02 -1.03670E02 -7.70600E01 -5.45500E01 -8.42900E01 -6.68700E01 7.15000E00 1.74500E01 5.90500E01 4.18800E01 -1.08600E01 -2.20000E-01 -2.02500E01 -5.38800E01 -7.75000E01 -8.97800E01 -9.73600E01 -1.10090E02 -1.40120E02 -1.23960E02 -6.22000E01 -1.74900E01 1.46000E01 2.66500E01 5.10300E01 1.20100E02 1.70180E02 1.74640E02 1.86070E02 1.80680E02 1.67960E02 -Frame 160 1.67700E02 1.13290E02 7.51100E01 5.57000E01 1.06600E01 -3.07600E01 -8.94100E01 -1.02770E02 -7.84300E01 -7.22500E01 -9.58000E01 -8.19800E01 -6.56500E01 -3.87500E01 2.00000E-02 6.99000E00 4.17000E00 2.82600E01 2.90700E01 -2.12000E00 7.30000E-01 -2.43300E01 -2.41400E01 -3.19200E01 -8.59100E01 -7.64900E01 -5.97100E01 -5.73600E01 -3.98900E01 -3.38500E01 -2.06000E01 2.70700E01 4.71800E01 7.68600E01 9.23800E01 1.14290E02 1.23770E02 1.08430E02 1.09520E02 1.41550E02 1.60450E02 9.78000E01 6.31400E01 3.73700E01 3.97900E01 4.22700E01 -1.91900E01 -2.55100E01 -3.89800E01 -4.68100E01 -3.98200E01 -3.95600E01 -2.12400E01 -4.13200E01 -2.97000E00 -1.94200E01 -8.35000E00 -1.92000E00 -2.80000E-01 4.14200E01 1.83800E01 -3.43800E01 -1.67300E01 1.24900E01 2.16100E01 5.00000E00 -1.71200E01 -5.90000E00 1.06800E01 2.77000E00 5.62000E00 1.85600E01 1.48900E01 2.01000E01 1.84600E01 -2.24000E00 2.34300E01 2.38800E01 1.53300E01 -1.44900E01 -1.72100E01 -3.49900E01 -2.22800E01 -2.31500E01 -3.90200E01 -5.43400E01 -5.80800E01 -5.58800E01 -5.55600E01 -6.01800E01 -5.98900E01 -4.45400E01 -5.86800E01 -7.62100E01 -4.82200E01 -7.03300E01 -6.40700E01 -6.35700E01 -8.40100E01 -1.01020E02 -7.94800E01 -7.42200E01 -8.97500E01 -1.06700E02 -1.11100E02 -1.09560E02 -1.15900E02 -1.04360E02 -1.01400E02 -1.37290E02 -1.45200E02 -1.26260E02 -9.76600E01 -8.91300E01 6.67000E01 2.30240E02 2.98580E02 2.70720E02 2.45720E02 2.93700E02 3.86880E02 4.49580E02 2.86810E02 1.98760E02 1.13830E02 3.62000E01 4.21700E01 -5.66800E01 -1.90500E02 -2.31250E02 -2.46020E02 -2.75000E02 -2.46610E02 -2.20110E02 -1.52590E02 -6.08500E01 -7.32300E01 -8.69400E01 2.19900E01 9.32500E01 1.48610E02 1.06530E02 -1.59600E01 -6.23000E00 1.58000E01 -1.15100E01 -5.76600E01 -1.19190E02 -1.48520E02 -1.10630E02 -5.44800E01 -5.05600E01 -4.49000E00 5.19900E01 1.22150E02 1.76350E02 1.82050E02 2.20750E02 2.83440E02 2.59810E02 -Frame 160 1.87220E02 1.35230E02 7.65300E01 4.69700E01 2.34800E01 -9.47300E01 -1.75480E02 -2.05540E02 -2.18320E02 -1.87280E02 -1.89100E02 -1.80800E02 -1.33080E02 -8.07700E01 -2.87800E01 5.83000E00 2.14900E01 7.66000E01 8.93300E01 5.93600E01 2.74000E01 2.04200E01 2.72000E01 1.71600E01 -3.82100E01 -7.62600E01 -6.94200E01 -3.43100E01 6.91000E00 2.43900E01 1.63800E01 5.91000E01 1.01080E02 1.32260E02 1.42280E02 1.35480E02 1.32350E02 1.04010E02 6.77100E01 1.22400E01 -2.49400E01 -5.62300E01 -8.24200E01 -1.21330E02 -1.53320E02 -7.81500E01 1.64200E01 1.59000E01 -1.76500E01 -1.52200E01 6.43000E01 1.38220E02 1.10300E02 8.44200E01 8.16700E01 8.57700E01 5.59300E01 5.11300E01 1.91500E01 -4.98200E01 -4.48600E01 -5.76900E01 -5.28500E01 -3.78000E01 -3.52400E01 2.44400E01 6.79500E01 3.67500E01 2.65600E01 1.20040E02 1.52310E02 7.54500E01 2.91600E01 4.30000E-01 1.38300E01 -4.35000E00 -8.70700E01 -1.18250E02 -1.00270E02 -1.32630E02 -9.98600E01 -7.29800E01 -6.12000E01 -5.10000E01 -2.14400E01 2.60500E01 2.89800E01 4.29700E01 4.93500E01 7.38800E01 1.71000E01 -2.64500E01 -3.63200E01 -2.34600E01 -1.80000E-01 -1.00180E02 -1.35180E02 -6.51400E01 -8.08800E01 -7.30400E01 -8.09000E01 -8.39400E01 -4.90100E01 -5.09700E01 -3.89600E01 -3.35600E01 -9.79800E01 -1.17320E02 -9.31700E01 -1.12210E02 -1.71760E02 -2.01020E02 -1.76030E02 -1.34140E02 -2.02870E02 -1.84580E02 -5.36000E01 1.39430E02 3.82250E02 4.52180E02 4.03820E02 4.08570E02 4.44080E02 5.10280E02 5.09070E02 2.96380E02 2.88800E01 -2.08700E01 -1.11090E02 -1.58950E02 -2.74100E02 -4.41520E02 -4.19680E02 -3.65760E02 -3.14830E02 -2.21040E02 -1.11160E02 1.02000E01 6.82800E01 1.34070E02 1.17750E02 1.91800E02 2.55950E02 1.72840E02 9.90000E01 -7.32100E01 -9.56700E01 -5.07300E01 -7.13500E01 -1.34540E02 -1.82560E02 -9.59000E01 5.55200E01 1.45560E02 1.68240E02 2.05460E02 2.75640E02 2.78740E02 2.83690E02 2.40550E02 -Frame 160 1.26880E02 6.86100E01 -4.24900E01 -1.60950E02 -2.46890E02 -2.67230E02 -2.52930E02 -2.50940E02 -2.63650E02 -2.34510E02 -1.37260E02 1.11100E01 9.00400E01 9.73100E01 9.77000E01 1.49000E02 1.51740E02 1.49420E02 1.01890E02 8.00000E-01 -4.54100E01 -6.20000E01 -1.04040E02 -8.82800E01 -7.19500E01 -6.70500E01 1.00600E01 4.65400E01 9.11000E01 1.60950E02 2.07810E02 1.96930E02 1.71540E02 9.62200E01 3.85000E01 2.89800E01 -6.88400E01 -1.59600E02 -2.05000E02 -2.62600E02 -2.15730E02 -1.63210E02 -1.71920E02 -1.17750E02 -1.88100E01 4.81900E01 1.15200E02 1.63160E02 1.69440E02 3.05750E02 3.93990E02 1.72600E02 1.11220E02 1.19860E02 3.16800E01 7.47700E01 -5.48500E01 -1.70400E02 -5.34000E00 -8.41500E01 -6.13000E01 9.33300E01 -2.13300E01 -6.25000E01 1.15130E02 9.01600E01 7.63500E01 1.70600E01 -6.30600E01 3.24200E01 8.84000E00 -1.84460E02 -1.04550E02 1.94000E00 -7.12700E01 -6.56700E01 -2.48300E01 2.43000E01 1.24930E02 6.85600E01 4.43900E01 1.39440E02 4.83100E01 3.33000E00 7.59700E01 -6.20000E00 -1.05890E02 -1.23550E02 -8.96300E01 -3.05700E01 -7.76500E01 -1.24110E02 -2.89000E00 6.90800E01 -2.27900E01 5.20000E-01 8.05500E01 5.69800E01 -1.37000E00 -7.65200E01 -6.19200E01 -8.78100E01 -1.55420E02 -1.84980E02 -1.78290E02 -1.84240E02 -1.98220E02 -1.22470E02 -7.29000E00 -9.65700E01 -9.05500E01 -2.32900E01 6.10400E01 -5.11000E00 -6.83300E01 -6.54700E01 -7.44900E01 -1.00750E02 -1.97760E02 -1.70620E02 1.74800E01 1.43340E02 3.78920E02 5.80400E02 4.44550E02 4.06080E02 3.99050E02 4.56450E02 3.82230E02 1.21400E02 -1.75560E02 -2.35490E02 -2.86010E02 -3.61790E02 -4.61550E02 -4.55950E02 -4.81750E02 -3.13910E02 -1.21610E02 2.67200E01 1.33580E02 2.02590E02 2.37520E02 2.89290E02 2.34380E02 1.64550E02 1.46410E02 6.95800E01 -5.86800E01 -1.67840E02 -1.33210E02 -2.93800E01 6.90000E-01 -2.23100E01 5.20000E01 1.78560E02 2.65870E02 2.77640E02 2.36530E02 1.27950E02 -Frame 160 7.79200E01 -2.07000E01 -8.33200E01 -1.45770E02 -2.67990E02 -3.35720E02 -3.07220E02 -2.60550E02 -1.54200E02 -3.54300E01 5.40300E01 1.14190E02 1.51090E02 1.63980E02 2.02110E02 1.86230E02 7.66900E01 -2.73000E01 -7.54700E01 -1.02050E02 -1.17350E02 -9.50100E01 -7.58900E01 -5.11100E01 1.44800E01 1.09080E02 1.74500E02 2.42780E02 2.05950E02 1.42800E02 9.45800E01 3.88000E01 -5.77200E01 -1.09150E02 -1.75050E02 -2.58810E02 -2.50910E02 -1.93530E02 -1.50200E02 -6.14000E01 1.71900E01 5.91800E01 1.20400E02 1.70390E02 1.41760E02 1.63110E02 1.23970E02 1.05100E01 -2.74600E01 -5.55700E01 -7.24900E01 -2.68600E01 -5.07900E01 -3.24100E01 6.35700E01 1.71460E02 3.13530E02 4.17710E02 3.37740E02 1.83010E02 1.21360E02 9.27300E01 1.71700E01 -8.87000E01 -2.47720E02 -3.49390E02 -3.05850E02 -2.26660E02 -1.02800E02 -1.90100E01 -5.61000E00 1.52100E01 1.50660E02 2.44160E02 2.41330E02 1.99200E02 9.86000E01 -1.41800E01 -3.64100E01 -3.72700E01 -1.31000E01 -3.81500E01 -8.49200E01 -7.80400E01 2.51400E01 1.10500E02 1.11410E02 1.06260E02 5.48700E01 -5.14000E00 -8.98000E00 -2.09100E01 -7.31700E01 -1.55960E02 -2.00150E02 -1.86510E02 -1.29270E02 -4.11400E01 1.87500E01 -5.30000E-01 3.15900E01 5.66700E01 5.54700E01 6.71800E01 4.71900E01 -4.64600E01 -1.25960E02 -1.90800E02 -1.98470E02 -1.29200E02 -1.60680E02 -1.41000E02 -1.21600E02 -6.45100E01 1.23800E01 4.56100E01 1.18000E01 -2.00900E01 -1.20970E02 -1.06880E02 -1.61280E02 -1.97240E02 -1.70160E02 -1.36120E02 8.40600E01 3.89930E02 6.71860E02 7.50860E02 5.22600E02 3.86810E02 3.00490E02 2.31260E02 1.07720E02 -2.36690E02 -5.37480E02 -5.16030E02 -4.20410E02 -2.91430E02 -2.22190E02 -1.88610E02 -1.35830E02 1.30690E02 2.39310E02 2.22050E02 2.20040E02 1.63760E02 4.59000E00 -3.15000E01 -1.61670E02 -1.42710E02 -3.03000E00 4.89700E01 -1.04700E01 8.82600E01 1.92960E02 3.32720E02 4.01500E02 2.26050E02 4.79900E01 4.84100E01 -Frame 160 9.83000E00 -8.69200E01 -2.12550E02 -3.50840E02 -3.06060E02 -1.71600E02 -8.88200E01 -6.40000E00 6.45700E01 1.15670E02 1.39240E02 1.10410E02 6.35900E01 1.82700E01 -1.64600E01 -8.82400E01 -1.78150E02 -2.00670E02 -1.20700E02 9.85000E00 7.74200E01 1.17000E02 1.33690E02 2.05770E02 2.52890E02 1.85240E02 7.63400E01 1.80200E01 -1.01100E02 -1.39790E02 -1.34530E02 -1.68970E02 -1.11310E02 -4.07600E01 -3.29900E01 1.40500E01 6.05300E01 7.43900E01 1.06610E02 2.27300E01 -1.00760E02 -1.28970E02 -1.27930E02 -1.01740E02 -6.36500E01 -6.83300E01 -2.01000E01 8.46300E01 1.73510E02 2.00970E02 2.04090E02 1.52120E02 8.94100E01 2.86900E01 -2.59200E01 -5.51800E01 -6.62800E01 -8.66500E01 -7.25600E01 4.00000E-02 9.28900E01 2.07530E02 2.85530E02 2.38690E02 1.01200E02 8.73900E01 3.01000E01 -1.00960E02 -1.31950E02 -1.60750E02 -1.89270E02 -1.05480E02 -1.79900E01 3.52300E01 8.70700E01 6.84400E01 1.04180E02 1.36940E02 6.36000E01 -4.10500E01 -3.88000E00 -1.65400E01 -9.05600E01 -5.37700E01 3.72200E01 6.20000E01 1.27500E02 1.09920E02 1.27710E02 9.69500E01 2.81700E01 -2.37400E01 -6.12100E01 -1.45760E02 -2.09770E02 -1.69550E02 -9.29200E01 -8.88300E01 -4.45300E01 2.91800E01 5.61400E01 4.48800E01 5.82300E01 2.79400E01 -3.23100E01 -7.43900E01 -1.08700E02 -8.49700E01 -5.44300E01 -1.26900E02 -4.95000E01 3.23300E01 -4.43500E01 7.16300E01 2.51200E01 -8.08600E01 -5.50500E01 -7.74000E01 -1.92380E02 -1.44750E02 -2.49530E02 -2.19340E02 -1.43040E02 -1.22280E02 -1.28800E02 4.56000E00 -9.10000E01 -8.64700E01 -5.47600E01 -5.10600E01 3.97600E01 3.69310E02 5.99670E02 7.63570E02 6.87820E02 2.43100E02 7.14300E01 4.04200E01 -3.35500E01 -1.01740E02 -2.94910E02 -4.97750E02 -3.37380E02 -1.37730E02 6.42200E01 1.07350E02 -2.29000E00 -2.10320E02 -7.75900E01 -7.46900E01 -7.66400E01 -6.15900E01 -4.20300E01 -1.16840E02 -3.87000E00 1.29580E02 2.88020E02 3.82080E02 3.36690E02 1.65590E02 -Frame 160 1.01060E02 4.14600E01 1.00000E01 -3.64200E01 -8.92200E01 -1.73550E02 -8.93100E01 5.63000E00 1.95100E01 7.88100E01 8.48800E01 1.07000E00 -8.13200E01 -1.02170E02 -1.55560E02 -1.20450E02 -1.33140E02 -1.74100E02 -1.07170E02 2.09200E01 6.49400E01 1.82250E02 1.81010E02 9.65600E01 4.64100E01 1.26700E01 -4.61200E01 1.03200E01 -1.65000E01 -4.01300E01 -2.45000E00 5.04000E01 8.58400E01 1.57300E02 1.20830E02 4.31300E01 7.00000E00 -5.82400E01 -1.17430E02 -1.08330E02 -1.41840E02 -1.43250E02 -9.15700E01 -7.02100E01 -2.71300E01 6.23000E01 7.44300E01 3.78600E01 1.41200E01 -3.53700E01 -3.63600E01 1.65000E00 -4.17000E00 1.98300E01 6.65500E01 5.76500E01 9.04200E01 1.30120E02 1.28930E02 1.16590E02 5.97700E01 -1.58500E01 -4.87800E01 -5.56700E01 -2.27100E01 -1.37000E01 -3.43900E01 -1.26800E01 4.07200E01 1.26740E02 1.37310E02 1.67090E02 1.13650E02 -6.55300E01 -6.11700E01 -2.56000E01 -2.38900E01 -2.60900E01 4.56800E01 4.06400E01 8.24200E01 3.34300E01 9.59100E01 6.72500E01 -1.03340E02 -1.42090E02 -5.28900E01 -2.58700E01 -4.98000E00 6.95700E01 9.23700E01 1.04800E02 6.95300E01 6.21200E01 1.11440E02 3.82000E01 -9.13200E01 -6.57400E01 -4.32900E01 -8.50900E01 -4.70900E01 1.71400E01 -1.66500E01 -2.04600E01 -3.13600E01 -4.45600E01 -1.41200E01 -4.77200E01 -9.53100E01 -5.42800E01 -5.29300E01 -6.74900E01 1.15600E01 2.40400E01 -1.20000E-01 4.89700E01 1.15300E01 -5.70800E01 -1.27600E01 -8.90600E01 -4.26400E01 -4.17500E01 -7.28000E01 -1.19750E02 -9.30500E01 -1.45450E02 -1.27350E02 -5.85900E01 -1.23670E02 -1.34670E02 -1.64910E02 -1.32960E02 -1.54930E02 -7.64700E01 -1.35550E02 -8.53700E01 -1.03600E02 -1.55340E02 -4.95800E01 1.67450E02 3.21990E02 6.22970E02 7.38650E02 7.50210E02 2.44440E02 -4.21700E01 -2.49570E02 -1.92120E02 -2.23690E02 -1.11010E02 -1.47730E02 -8.44400E01 -1.11000E00 1.21800E02 1.60400E02 -8.29500E01 -3.47740E02 -4.20390E02 -3.55900E02 -2.63100E02 -Frame 160 -9.32100E01 8.99900E01 1.86740E02 3.35280E02 3.87080E02 2.68110E02 1.78210E02 5.53700E01 -2.73100E01 -8.05100E01 -1.03270E02 -1.05630E02 4.30400E01 1.10270E02 2.11480E02 2.45630E02 1.48620E02 -3.55100E01 -1.12280E02 -2.72300E02 -2.96000E02 -2.30150E02 -1.04050E02 -5.19600E01 3.17800E01 4.50700E01 8.27200E01 1.20450E02 5.92300E01 -5.49400E01 -1.45590E02 -1.90910E02 -1.28460E02 -4.97000E00 4.83300E01 1.19220E02 2.06180E02 2.02630E02 1.53780E02 1.00280E02 -1.69600E01 -7.98000E01 -9.75000E01 -9.86500E01 -1.01740E02 -1.78300E01 3.26900E01 9.17400E01 8.05300E01 9.90000E00 -4.19200E01 -1.06300E02 -1.67570E02 -1.89580E02 -1.82100E02 -8.82300E01 8.61000E00 5.94200E01 7.67300E01 8.54900E01 9.24300E01 9.04900E01 2.94000E01 -4.06100E01 -6.07500E01 -2.94600E01 4.08200E01 6.72300E01 7.03900E01 1.17580E02 9.71200E01 7.49400E01 5.90100E01 -3.74600E01 -7.88700E01 -5.54800E01 -5.93100E01 -5.20000E00 7.75900E01 1.19870E02 1.66350E02 2.13120E02 4.61500E01 -1.21010E02 -1.06210E02 -6.38400E01 -1.70900E01 1.71300E01 5.04000E01 4.66000E00 4.65100E01 6.56200E01 2.92700E01 -5.32200E01 -1.12200E02 -9.68900E01 1.99900E01 5.34700E01 4.79400E01 3.62000E01 8.80700E01 8.64700E01 6.87500E01 1.84300E01 1.25500E01 -3.75100E01 -6.90700E01 -5.15300E01 -7.39000E00 -1.78700E01 -1.26500E01 -3.12500E01 -4.83900E01 -5.80100E01 -5.78700E01 -4.16700E01 -4.79300E01 -8.93400E01 -7.39500E01 1.09800E01 6.52000E00 1.39100E01 -5.14900E01 -3.78700E01 -3.58000E01 -1.26400E01 -2.97600E01 -6.83900E01 -5.01600E01 -1.13300E01 -2.53000E01 -2.06900E01 -9.79300E01 -9.04800E01 -1.41730E02 -1.05450E02 -1.30970E02 -1.05180E02 -1.24520E02 -1.12370E02 -9.97700E01 -1.13720E02 -9.30300E01 -9.06500E01 -9.21500E01 -1.01650E02 -1.68390E02 -7.20800E01 6.52300E01 3.54680E02 5.14710E02 6.48180E02 5.48160E02 1.97540E02 -1.56090E02 -3.13490E02 -1.52450E02 -3.52800E01 4.35500E01 -3.82200E01 -Frame 160 9.05200E01 2.02160E02 2.42070E02 -2.70000E01 -3.21350E02 -5.16490E02 -3.78180E02 -1.64250E02 7.24300E01 7.13400E01 8.01300E01 8.81000E01 1.99220E02 1.67580E02 5.18000E01 -7.96100E01 -1.49010E02 -1.21420E02 -5.68700E01 4.27200E01 1.45340E02 2.18990E02 1.89710E02 1.33350E02 8.81300E01 3.64400E01 -7.68700E01 -1.62600E02 -2.17820E02 -1.49540E02 -3.20100E01 9.21800E01 1.33120E02 8.22000E01 -3.03700E01 -6.13900E01 -8.33100E01 -8.68300E01 -1.17380E02 -1.15770E02 -1.04010E02 2.00000E-01 6.36200E01 9.29300E01 4.50500E01 2.76400E01 1.16600E01 -7.83000E00 7.08000E00 -2.05600E01 -6.50400E01 -3.08400E01 6.54400E01 9.26300E01 2.35700E01 -4.26500E01 -5.88000E00 -2.19700E01 6.24600E01 -2.35600E01 -9.02200E01 -7.98600E01 3.58900E01 -3.82000E00 3.24000E00 2.45100E01 8.41000E00 -3.82000E01 1.57800E01 4.24100E01 2.82000E00 -2.00000E01 -1.75100E01 -3.09300E01 -3.37400E01 1.23900E01 4.59300E01 4.60000E-01 2.58000E00 1.97600E01 4.24500E01 -5.20000E00 -4.63200E01 -3.26700E01 -3.65700E01 6.44000E00 5.77000E00 -5.93000E00 1.40100E01 2.35500E01 4.33600E01 3.37400E01 6.79000E00 1.40000E01 1.42000E00 -3.55000E00 8.33000E00 -2.43000E00 -9.52000E00 1.61800E01 4.26600E01 2.39200E01 2.15800E01 -5.85000E00 -3.11200E01 -3.91400E01 -9.37000E00 -5.67000E00 -2.78500E01 -6.69000E00 1.71300E01 9.67000E00 2.39700E01 2.86900E01 1.35300E01 -2.61100E01 -2.49500E01 -3.27300E01 -3.37200E01 -1.57100E01 -9.13000E00 -9.34000E00 -4.55000E00 1.93900E01 1.40500E01 -5.47000E00 -2.65900E01 -2.83400E01 -3.71200E01 -4.91400E01 -2.94900E01 -6.21000E00 -6.21000E00 1.07900E01 -7.00000E-01 -8.55000E00 -7.64000E00 -1.07000E01 -1.28500E01 -1.70600E01 -2.43900E01 -2.59300E01 -2.15000E01 -1.79200E01 -1.42200E01 -2.14000E01 -1.87900E01 -1.10900E01 -3.71500E01 -4.09900E01 -5.19200E01 -3.71500E01 -3.69000E01 -4.96200E01 -5.27000E01 -5.58400E01 -4.20400E01 -4.97900E01 -3.67500E01 -4.62900E01 -Frame 160 -5.01000E01 -5.40000E01 -5.49900E01 -5.79800E01 -2.03000E00 2.66300E01 6.21300E01 4.76500E01 3.76600E01 -3.26900E01 -4.72000E01 -3.21300E01 -1.58000E00 1.69000E01 5.59200E01 2.80800E01 3.13400E01 -6.34000E00 2.88100E01 3.80100E01 4.14500E01 -2.50500E01 3.44100E01 -6.43300E01 5.39300E01 -1.72100E01 1.84600E01 1.12100E01 -3.92800E01 3.07000E01 -1.51900E01 4.45100E01 1.01000E00 -1.38400E01 -3.61400E01 -3.01000E01 -2.18500E01 9.67000E00 3.11500E01 2.22600E01 -1.93000E00 -3.87000E00 -1.78700E01 -3.29000E00 -1.82600E01 -7.68000E00 -2.37700E01 -2.33400E01 -4.88000E00 1.81500E01 1.28700E01 2.44100E01 1.02800E01 1.17000E01 -1.38500E01 -2.21800E01 -2.57500E01 -3.34100E01 -2.12800E01 -3.76000E00 6.30000E00 2.16600E01 9.47000E00 -1.11000E00 -1.50200E01 -2.23500E01 -3.18900E01 -5.17000E01 -4.10800E01 -3.71000E01 -2.19700E01 -3.60000E-01 1.09100E01 1.15100E01 4.11000E00 -7.53000E00 -7.53000E00 -1.75300E01 -1.68300E01 -2.61000E01 -3.96400E01 -2.55700E01 -8.05000E00 -2.99000E00 9.22000E00 7.79000E00 -1.67000E01 -2.89400E01 -2.45400E01 -2.39900E01 -1.94100E01 -2.96800E01 -2.02500E01 -9.52000E00 -1.44600E01 2.45000E00 2.87000E00 -3.71000E00 3.50000E00 -1.08000E00 1.19000E00 -4.80000E-01 2.79000E00 2.71500E01 3.62300E01 4.65500E01 4.81400E01 2.47300E01 -1.24300E01 -2.77300E01 -4.80000E-01 2.06100E01 2.63300E01 3.02000E01 -1.58400E01 -8.29000E00 6.50000E00 3.27400E01 1.67600E01 1.62700E01 -1.32500E01 -1.86700E01 -1.42400E01 2.53400E01 2.41200E01 -1.61600E01 -2.56700E01 -1.14500E01 -1.78000E00 1.01900E01 1.55200E01 -1.00000E01 -2.13000E01 -2.09300E01 -6.53000E00 2.13200E01 1.10100E01 -1.46300E01 -2.90500E01 -3.78900E01 -1.29700E01 -1.22700E01 4.60000E-01 -2.14200E01 -7.96000E00 -9.08000E00 -7.23000E00 -1.63200E01 -1.68000E00 -2.15900E01 -1.51000E01 -1.74000E01 -1.07600E01 -9.10000E-01 -1.67600E01 -1.60900E01 -1.43900E01 -2.06300E01 -2.05000E00 -3.90000E00 -Frame 160 -1.08100E01 -2.79300E01 -3.75600E01 -2.44600E01 -2.79400E01 -3.15100E01 -3.61700E01 -3.09500E01 -3.15500E01 -2.91500E01 -2.26600E01 -2.89600E01 -4.14400E01 -4.82800E01 -2.93000E01 -3.77200E01 -3.53800E01 -1.69500E01 1.20500E01 3.99200E01 4.86000E01 5.24900E01 4.40000E-01 -3.22300E01 -5.98900E01 -1.23600E01 1.46400E01 6.54500E01 3.27600E01 2.20200E01 1.92000E00 1.71900E01 5.49100E01 2.97400E01 2.07600E01 -4.52000E00 -2.15800E01 8.85000E00 3.72100E01 2.54100E01 1.52200E01 -1.83000E01 7.16000E00 1.44000E01 3.58500E01 1.09300E01 -2.77000E00 -5.58900E01 -2.46000E01 -1.83200E01 2.61700E01 2.40100E01 2.87600E01 -1.03700E01 -1.37000E01 -4.12000E00 1.77600E01 1.30000E00 -5.67000E00 -1.28500E01 -2.24000E00 2.70000E00 2.17900E01 2.04500E01 1.60500E01 1.35000E01 8.86000E00 4.07000E00 7.13000E00 -5.72000E00 -2.39600E01 -3.37400E01 -2.17900E01 4.55000E00 1.70000E00 1.57600E01 -4.76000E00 5.09000E00 -7.76000E00 3.00000E00 -4.91000E00 -1.80600E01 -2.16000E01 -6.23000E00 -1.03800E01 3.50000E-01 4.41000E00 -1.41000E00 -1.54100E01 -8.30000E-01 6.20000E00 9.44000E00 8.77000E00 -1.39300E01 -1.63200E01 -1.47700E01 3.84000E00 1.00200E01 -1.62000E00 -5.62000E00 1.26000E00 -6.65000E00 3.20000E00 8.35000E00 4.65000E00 -1.21700E01 -1.15000E01 1.42000E01 1.76800E01 2.25000E00 9.34000E00 7.64000E00 8.80000E-01 3.91000E00 5.03000E00 1.11800E01 -4.90000E-01 8.48000E00 1.67200E01 2.72000E01 2.89800E01 3.27900E01 3.96900E01 2.57700E01 6.40000E00 1.14300E01 7.61000E00 1.16700E01 -3.15000E00 2.15800E01 3.30600E01 4.08700E01 3.18900E01 3.66100E01 3.14500E01 1.61100E01 7.29000E00 1.02000E01 3.20000E00 1.39900E01 1.01100E01 2.51100E01 2.25600E01 -2.08000E00 1.45300E01 8.65000E00 2.59000E00 -2.65000E00 9.60000E-01 -7.31000E00 -8.20000E-01 -2.12000E00 2.35500E01 9.00000E00 -5.00000E00 8.58000E00 2.05800E01 -3.06000E00 6.58000E00 -3.48000E00 -Frame 160 -4.84000E00 -7.23000E00 4.32000E00 1.62300E01 1.75000E01 1.28000E01 6.95000E00 -2.08000E00 -4.38000E00 1.12600E01 4.38000E00 2.29000E00 -4.86000E00 1.67800E01 1.10800E01 1.22000E01 7.35000E00 4.35000E00 1.02600E01 7.35000E00 4.35000E00 -4.74000E00 -1.31000E01 -1.57000E01 -1.53600E01 -1.19900E01 -4.50000E00 -4.77000E00 -1.10400E01 -2.34900E01 -2.53000E01 -5.14000E00 -1.63500E01 -3.48900E01 -3.19700E01 -2.49300E01 -3.26500E01 -2.65800E01 -3.30000E00 9.70000E00 3.40900E01 7.42000E01 7.64800E01 5.57600E01 -9.65000E00 -3.20700E01 -2.91500E01 6.89000E00 3.80400E01 8.31200E01 3.05200E01 2.22700E01 1.87500E01 3.61100E01 3.89800E01 3.19100E01 1.26000E01 -1.63100E01 -8.09000E00 4.14000E01 5.63900E01 3.48000E01 8.52000E00 1.14300E01 8.43000E00 3.13400E01 3.39400E01 1.06000E01 -2.14600E01 -2.84800E01 -4.68000E00 2.38700E01 4.92900E01 3.24600E01 2.00900E01 2.33000E00 -1.97000E00 -7.39000E00 2.04000E00 3.77000E00 3.56000E00 -3.65000E00 2.93000E00 1.17200E01 9.78000E00 8.78000E00 1.97500E01 2.30500E01 9.44000E00 1.14100E01 1.54400E01 5.90000E-01 1.29000E00 1.00200E01 1.50200E01 2.41700E01 1.65900E01 6.77000E00 -4.35000E00 2.00000E-01 7.90000E00 4.84000E00 -2.31000E00 -6.70000E-01 4.03000E00 1.28800E01 1.50000E01 1.61800E01 1.39000E00 -8.85000E00 2.61000E00 8.43000E00 3.43000E00 5.28000E00 3.19000E00 -6.96000E00 -1.41000E00 1.43200E01 1.45300E01 1.27400E01 5.89000E00 -1.17000E00 3.56000E00 1.74400E01 1.07400E01 -3.17000E00 2.50000E00 2.35000E00 5.20000E00 9.14000E00 1.22000E01 1.43500E01 1.55600E01 1.28000E01 1.29500E01 1.01000E01 1.61600E01 1.44000E01 1.85800E01 2.98800E01 3.05100E01 3.71400E01 3.39500E01 2.76400E01 2.71200E01 3.45700E01 3.02300E01 2.17400E01 1.69800E01 1.60700E01 1.01300E01 1.80100E01 3.01300E01 3.76100E01 3.63000E01 1.79300E01 3.09900E01 1.34400E01 6.35000E00 2.60500E01 -Frame 160 1.93500E01 4.44000E00 2.10800E01 3.02300E01 2.16500E01 1.58000E01 3.77000E00 1.83800E01 -1.35600E01 -1.24600E01 1.47000E01 -3.00000E-01 -3.75000E00 1.87100E01 1.68600E01 1.79500E01 2.20700E01 5.31000E00 2.04000E00 -2.32000E00 -1.28000E01 -6.58000E00 1.08500E01 2.47820E02 1.69900E02 -4.05700E01 -2.00490E02 -3.91500E01 1.47230E02 1.18250E02 -8.67200E01 -1.74930E02 -9.46900E01 7.71300E01 7.22000E01 -5.49400E01 -7.99500E01 -4.65000E00 6.19900E01 5.06400E01 -2.81000E01 -4.92400E01 -1.49800E01 4.93600E01 3.46500E01 -2.15400E01 -6.84400E01 -1.17200E01 7.70000E-01 -1.33500E01 -6.18900E01 -6.08700E01 -2.57600E01 -3.25400E01 -5.95000E01 -6.12400E01 -6.19800E01 -7.06900E01 -9.56100E01 -7.52200E01 -5.31400E01 3.36600E01 1.12100E02 2.48850E02 2.25590E02 9.54000E01 -5.29000E01 -5.57300E01 4.64100E01 4.36700E01 -3.31900E01 -7.03900E01 1.42330E02 2.35500E02 2.49340E02 8.63900E01 -3.96600E01 -1.40550E02 -1.13410E02 -4.83100E01 -4.11400E01 -1.77000E01 2.49000E00 5.63100E01 1.21750E02 1.16110E02 5.62000E01 -4.26000E01 -8.54000E01 -1.49430E02 -1.10290E02 -1.28300E01 4.66600E01 7.49500E01 5.30500E01 9.04300E01 1.23890E02 1.20280E02 -4.54000E00 -9.42000E01 -1.26530E02 -3.97300E01 1.18000E01 9.99200E01 1.53680E02 1.19970E02 2.81200E01 -2.15800E01 -8.78000E00 1.44400E01 -5.16200E01 -1.12660E02 -8.54700E01 -1.03500E01 4.71100E01 6.33100E01 2.89600E01 -6.47000E00 -5.19800E01 -6.68400E01 -4.20900E01 -1.85300E01 -2.82200E01 -1.11800E01 -5.60000E00 4.11600E01 7.33300E01 4.24300E01 2.75400E01 -3.68300E01 -4.41500E01 -1.46500E01 1.87800E01 5.22300E01 1.86700E01 4.06000E00 1.30000E01 3.52100E01 1.20800E01 1.23000E00 -4.29500E01 -4.24500E01 -4.58900E01 1.96100E01 3.71200E01 3.01400E01 -1.50800E01 -3.16800E01 -1.97600E01 -1.34500E01 7.07000E00 -3.07800E01 9.23000E00 4.70000E-01 7.44000E00 2.66200E01 5.23700E01 4.28700E01 1.04000E00 -1.08000E00 -Frame 160 3.37400E01 4.96100E01 4.39300E01 4.80400E01 2.05240E02 2.30120E02 1.73570E02 -2.58700E01 -3.04300E01 -2.70800E01 -5.45800E01 -3.18600E01 -6.39000E00 6.89000E00 1.25900E01 1.05470E02 1.43140E02 6.88600E01 -1.56760E02 -1.59190E02 -1.17530E02 -5.34600E01 -7.23500E01 5.52500E01 1.01750E02 7.46000E01 2.15500E01 1.28850E02 1.17360E02 -4.45800E01 -1.57470E02 -5.86900E01 6.21000E00 5.51200E01 6.75000E01 9.02100E01 3.65500E01 -7.79000E00 9.52000E00 -6.30000E-01 -7.00800E01 -1.56600E02 -1.18640E02 -2.83900E01 3.86800E01 2.97900E01 5.06000E01 1.50100E01 -4.96900E01 -8.13400E01 -3.48900E01 -2.49700E01 -5.17200E01 -1.03250E02 -2.92800E01 4.10000E01 5.34100E01 1.81500E01 -3.42200E01 -8.21800E01 -7.85500E01 -6.77400E01 -1.15400E01 -7.86000E01 -9.26700E01 -6.91000E01 -1.07500E01 -4.46000E01 -8.94700E01 -9.26600E01 -1.16880E02 -9.17600E01 -9.38000E01 -7.88400E01 -9.83700E01 -8.54400E01 -1.57060E02 -1.25780E02 -1.71450E02 -1.37410E02 -7.62300E01 1.26870E02 3.85090E02 5.81900E02 6.73230E02 4.07750E02 -6.83100E01 -2.78010E02 -1.50920E02 7.02500E01 7.12000E01 3.71200E01 -5.00400E01 8.61600E01 2.25500E02 8.29500E01 -1.56070E02 -4.30320E02 -5.23640E02 -3.65360E02 -8.08600E01 1.01490E02 1.79360E02 2.07450E02 1.46200E02 8.79100E01 9.07300E01 6.85500E01 -1.23800E01 -1.93800E02 -1.79650E02 4.61000E01 2.72780E02 3.16210E02 1.98690E02 5.73600E01 -3.13800E01 -2.88200E01 -7.21400E01 -1.53720E02 -2.00670E02 -1.71880E02 -2.30400E01 1.05420E02 1.34750E02 9.98600E01 -2.00000E-01 -1.38350E02 -2.04640E02 -1.54790E02 -6.42600E01 -8.88000E00 -7.79000E00 1.13300E01 7.60200E01 1.43630E02 1.30190E02 3.42100E01 -1.03770E02 -1.22920E02 -5.95500E01 4.88300E01 6.75100E01 7.47000E01 7.60400E01 8.63500E01 6.29000E01 2.66700E01 -5.70000E00 -5.90600E01 -1.27010E02 -1.66940E02 -8.19500E01 1.07400E01 8.42800E01 4.70100E01 -5.74600E01 -8.21100E01 -7.34500E01 -5.04600E01 -Frame 160 -4.47200E01 -5.87700E01 -5.12100E01 3.62000E00 1.06130E02 1.38700E02 1.18140E02 5.68300E01 -4.34300E01 -5.67500E01 -2.94300E01 3.77600E01 5.09900E01 5.55800E01 -7.40000E-01 2.72000E01 1.16980E02 7.14300E01 1.24100E01 -1.17440E02 -1.29190E02 -3.51800E01 3.37700E01 9.82000E00 2.01200E01 -1.62800E01 1.56210E02 4.62890E02 1.70630E02 -1.14810E02 -2.64950E02 -1.79470E02 -8.81700E01 2.50400E01 1.36730E02 2.00750E02 1.12570E02 6.35700E01 1.35010E02 1.55000E00 -2.23020E02 -3.03310E02 -1.81790E02 -1.05340E02 3.65700E01 3.21830E02 3.40610E02 1.56660E02 -2.81100E01 -6.25500E01 -4.98000E00 -1.30610E02 -2.44990E02 -1.17670E02 2.37000E01 9.74200E01 2.44330E02 1.95560E02 1.51100E01 -1.15920E02 -1.73880E02 -1.72460E02 -1.54830E02 -1.12510E02 2.20000E-01 5.14300E01 8.11700E01 1.54750E02 1.83460E02 4.58900E01 -1.21970E02 -1.83900E02 -1.51570E02 -6.11000E01 3.02200E01 7.13300E01 9.64000E00 1.03000E00 3.81500E01 3.73800E01 -1.20450E02 -9.40500E01 -2.31750E02 -1.38500E02 -1.37250E02 -1.78500E01 2.24000E00 -9.07000E00 -8.27400E01 -8.76300E01 -6.06100E01 -1.37720E02 -8.11100E01 -1.20700E02 -1.55430E02 -1.41120E02 -1.32700E01 -4.14900E01 -8.75800E01 -1.56050E02 6.44700E01 3.10710E02 5.86240E02 5.31720E02 5.54010E02 9.14800E01 -1.08420E02 -1.01380E02 9.99000E00 -1.31900E01 -9.90600E01 -1.05480E02 -4.79900E01 1.35330E02 1.20200E02 -1.25000E01 -2.89280E02 -4.19340E02 -4.06030E02 -1.65940E02 -3.22900E01 8.15000E01 1.85710E02 1.99950E02 1.84430E02 2.35250E02 1.73420E02 8.35200E01 -6.22300E01 -1.60420E02 -7.74900E01 1.21080E02 2.19680E02 2.15130E02 1.22250E02 4.40000E00 1.29200E01 5.37100E01 -1.24270E02 -2.38620E02 -2.62270E02 -1.99400E02 -6.44000E01 9.78300E01 1.08980E02 8.03700E01 -4.20000E00 -8.63800E01 -9.60200E01 -5.78700E01 -5.64900E01 -5.00200E01 -1.63100E01 -1.55000E00 1.44660E02 2.36250E02 1.29450E02 3.22300E01 -2.90200E01 -8.61300E01 -Frame 160 3.08000E00 3.60500E01 -3.49900E01 -2.61900E01 2.59100E01 5.76000E01 6.02200E01 2.68700E01 -5.85300E01 -9.05100E01 -1.44390E02 -1.61800E02 -7.66000E01 1.30000E00 -1.54000E01 -1.26100E01 2.72700E01 -8.65000E00 1.33200E01 2.69500E01 -5.10300E01 -3.43800E01 -6.19000E00 -2.11300E01 6.84800E01 1.34790E02 9.50200E01 9.09300E01 6.06300E01 -5.26600E01 -4.54000E01 -8.87000E00 -1.92000E01 -3.08300E01 -5.17900E01 -4.35000E00 7.95600E01 6.39900E01 -2.11200E01 -5.98400E01 -6.47000E01 -4.86500E01 -1.80600E01 -1.55100E01 -5.38700E01 1.63000E00 5.88400E01 3.57600E01 2.99300E01 1.75890E02 2.59200E02 6.78500E01 6.65300E01 -3.78800E01 -8.94700E01 -9.55600E01 -3.87400E01 -3.21200E01 7.40000E-01 -1.13800E01 7.71400E01 1.27330E02 -5.80400E01 -1.03080E02 -3.54100E01 -4.36100E01 -1.34020E02 -6.10000E00 5.57800E01 3.05200E01 3.04500E01 5.33500E01 2.79100E01 6.16600E01 -3.76000E01 -4.08900E01 -4.24000E00 -6.74500E01 -5.05500E01 4.99200E01 -3.45500E01 -6.56000E01 2.04500E01 2.51400E01 6.95000E00 -3.28100E01 -5.87700E01 -4.34800E01 -3.06800E01 -6.14600E01 -1.51400E01 4.26200E01 1.20000E-01 -1.97000E01 3.88000E00 -5.28200E01 -6.72300E01 -4.30300E01 -6.50500E01 -8.97000E01 -3.20400E01 -2.25800E01 -3.18200E01 -2.53300E01 -7.96300E01 -2.35500E01 -6.97300E01 -7.02900E01 -9.08200E01 -1.00920E02 -1.33260E02 -6.85000E01 -4.97000E01 -9.13000E01 -5.91300E01 -4.39400E01 -7.42700E01 -8.25000E01 -1.16940E02 -1.64370E02 -1.62150E02 -1.70750E02 -1.45500E02 -3.23800E01 1.31220E02 2.62710E02 4.51980E02 4.82650E02 5.01800E02 3.04070E02 -1.60500E01 -2.29040E02 -1.66390E02 -1.28640E02 -6.96000E01 -4.06700E01 -4.48100E01 3.39600E01 1.09130E02 4.52000E00 -1.45330E02 -2.98680E02 -3.47500E02 -2.46520E02 -1.55210E02 -8.59600E01 1.01480E02 2.49590E02 2.61020E02 2.54540E02 1.78610E02 8.11600E01 3.46200E01 -2.93900E01 -1.44350E02 -8.17300E01 2.49000E01 7.08000E01 1.12050E02 1.08470E02 -Frame 160 8.36800E01 9.30500E01 -2.03700E01 -1.80270E02 -2.56940E02 -2.27740E02 -1.68430E02 -4.81400E01 -2.81000E01 2.15700E01 8.17400E01 1.01680E02 4.51300E01 3.37800E01 -6.96000E00 -9.09600E01 -1.12480E02 -1.08570E02 -4.54500E01 7.36500E01 1.44350E02 1.10090E02 7.56600E01 6.30900E01 8.00700E01 4.65000E01 -6.01500E01 -1.41040E02 -1.24300E02 -8.49300E01 -9.27000E00 4.67300E01 4.74100E01 1.10600E01 2.85700E01 -1.24100E01 -8.46500E01 -1.03050E02 -1.32930E02 -1.28620E02 -7.90700E01 -2.69300E01 1.28300E01 8.57900E01 7.39100E01 5.65800E01 5.76500E01 1.36900E01 -9.65000E00 -5.71000E00 -4.96500E01 -4.89100E01 3.98900E01 8.93900E01 5.13300E01 6.10400E01 2.49900E01 3.38000E01 3.58500E01 -5.90700E01 -9.18700E01 -9.16000E01 -8.22400E01 -1.05200E01 2.84200E01 2.53000E00 2.28300E01 3.37300E01 -1.20700E01 2.72000E00 9.60000E-01 -4.88600E01 -2.61800E01 -2.47800E01 -2.23200E01 3.82300E01 1.60610E02 1.65620E02 2.07630E02 2.42750E02 -2.60000E-01 -7.47700E01 -1.06500E02 -1.69100E02 -1.49470E02 -2.60900E01 -6.28700E01 -1.73000E00 6.53000E01 6.83400E01 6.94100E01 1.94500E01 -1.14070E02 -9.96100E01 -3.86100E01 -8.46900E01 -4.31200E01 1.10770E02 7.63100E01 8.17100E01 1.41200E02 3.14000E01 -2.82000E00 7.91000E00 -8.60300E01 -8.97900E01 -4.85800E01 -1.00050E02 -1.40200E01 2.36800E01 3.45200E01 5.66600E01 7.54300E01 -2.72900E01 -6.11600E01 -5.70200E01 -7.57000E01 -6.98900E01 -1.98400E01 -8.12300E01 -1.84500E01 4.92800E01 2.50500E01 7.04000E00 -1.75400E01 -8.18700E01 -7.91200E01 -5.52200E01 -6.85400E01 -6.82200E01 -4.18400E01 -2.86200E01 -1.89800E01 -2.00400E01 -2.31300E01 -2.63100E01 -2.05800E01 -1.03670E02 -1.00250E02 -1.18650E02 -1.60530E02 -1.30580E02 -8.66100E01 -8.52300E01 -5.97600E01 -5.24800E01 -8.29600E01 -9.63400E01 -1.34080E02 -1.19900E02 -1.56210E02 -2.95400E01 4.90300E01 2.10940E02 3.98620E02 4.63700E02 5.36340E02 4.19720E02 5.01100E01 -1.37960E02 -Frame 160 -1.61700E02 -1.87010E02 -1.27920E02 -1.29880E02 -2.02780E02 -3.67500E01 7.44400E01 4.99900E01 -9.27000E00 -8.13600E01 -2.38610E02 -1.88510E02 -1.65700E02 -2.26050E02 -5.20800E01 1.81290E02 1.57680E02 2.37170E02 2.44880E02 1.49590E02 2.02210E02 1.37270E02 -1.08800E02 -1.30370E02 -1.04480E02 -1.34690E02 7.29000E00 6.16500E01 5.96300E01 1.32490E02 1.23480E02 -5.29200E01 -8.17200E01 -9.83300E01 -1.69360E02 -1.48430E02 -1.42720E02 -1.68710E02 8.64000E00 1.12450E02 8.03500E01 1.22170E02 1.06160E02 8.55000E00 1.29100E01 -5.26100E01 -1.25110E02 -5.47400E01 -2.41500E01 -2.96000E01 6.28000E01 1.14990E02 1.39680E02 1.56000E02 7.66800E01 -4.21600E01 -5.56300E01 -6.94600E01 -1.02650E02 -8.27700E01 -7.22000E01 -6.22400E01 2.80800E01 5.11600E01 2.79000E01 1.68900E01 8.52000E00 -4.81200E01 -8.04700E01 -1.21750E02 -1.12200E02 -3.62600E01 2.60500E01 2.62500E01 8.44200E01 1.00300E02 9.25700E01 9.85100E01 5.05400E01 -1.09600E01 -1.13500E01 -2.57400E01 -2.25500E01 -7.24000E00 1.55500E01 4.00300E01 5.22300E01 5.27600E01 9.26000E00 -5.90000E-01 -1.74000E00 -2.29200E01 -6.07300E01 -7.76500E01 -6.70200E01 1.30000E01 1.24800E01 1.69300E01 5.35000E01 3.11500E01 3.20800E01 4.40100E01 1.32700E01 -8.43000E00 1.21000E00 -3.38500E01 1.30400E01 1.61370E02 1.82140E02 1.23390E02 1.25720E02 6.70200E01 -3.45400E01 -5.61900E01 -8.84400E01 -1.09590E02 -5.42800E01 -6.82000E01 -2.74800E01 5.85300E01 4.15000E00 2.70900E01 7.07200E01 -8.36000E00 -9.08700E01 -1.98400E01 -4.59000E00 6.14000E00 3.92000E01 4.02500E01 5.13000E01 1.37650E02 9.35500E01 4.60100E01 7.69700E01 -6.17000E00 -8.18600E01 -3.78000E01 -8.23300E01 -7.71500E01 1.82700E01 1.46300E01 1.38700E01 7.00800E01 3.39700E01 1.47200E01 3.28700E01 -5.74400E01 -1.05480E02 -4.29000E01 -5.13400E01 -4.39900E01 1.16300E01 2.96000E00 2.10200E01 5.76200E01 5.30000E00 -2.76400E01 2.43000E00 -5.45700E01 -Frame 160 -6.52800E01 -3.82600E01 -6.03700E01 -5.01100E01 2.75100E01 -6.50000E00 -2.65600E01 -3.22000E00 -5.51600E01 -4.96600E01 -7.89500E01 -1.23080E02 -1.43470E02 -1.06370E02 -1.10040E02 -6.37400E01 -7.39700E01 -7.04700E01 -5.38200E01 -3.36300E01 -6.08100E01 -7.58000E01 -2.22100E01 4.80300E01 1.60370E02 2.79010E02 2.87040E02 3.98040E02 4.66100E02 2.43840E02 6.55000E01 -9.13900E01 -1.10020E02 -7.81000E01 -9.21000E01 -2.11430E02 -1.58240E02 -8.12500E01 1.22000E01 1.65300E01 -3.80200E01 -1.07220E02 -4.34600E01 -4.96900E01 -1.19070E02 -1.11490E02 2.74200E01 6.85900E01 1.29960E02 1.26100E02 1.07000E02 2.18210E02 2.34660E02 1.24410E02 2.96500E01 -6.30500E01 -7.05400E01 -4.18000E00 -3.77500E01 -4.73100E01 8.90000E-01 7.95900E01 5.26600E01 1.86000E00 -2.35000E01 -1.16100E01 -1.33300E01 -6.40800E01 -1.68330E02 -1.25640E02 -2.55100E01 -6.26000E00 1.45900E01 3.20700E01 4.90600E01 1.00530E02 9.35000E01 2.91700E01 1.38300E01 -6.99000E00 -1.24400E01 -1.00400E01 -2.15500E01 -1.39000E00 7.44000E01 1.08470E02 5.75000E01 2.69100E01 4.23600E01 1.82600E01 2.14100E01 -3.93500E01 -1.04940E02 -7.94500E01 -4.50900E01 -6.06200E01 -2.95700E01 -2.95300E01 -3.46000E00 2.74200E01 2.52300E01 -3.40500E01 -5.13000E00 2.69000E00 -5.25000E00 -3.43000E00 -5.55000E00 3.27000E00 7.73600E01 8.86700E01 5.62500E01 6.07800E01 6.64000E01 5.81400E01 5.25800E01 2.81000E00 -3.54900E01 1.40700E01 -1.18400E01 -3.15300E01 -1.17900E01 -8.42000E00 1.40700E01 5.02500E01 6.51000E00 -2.95800E01 2.12500E01 2.26400E01 -2.19400E01 -2.88700E01 -4.59800E01 -1.95700E01 4.96800E01 2.00300E01 -5.50000E-01 5.12400E01 4.75900E01 4.17900E01 5.57800E01 1.31600E01 -4.78000E00 6.77400E01 8.64500E01 3.96700E01 6.84200E01 1.47010E02 1.36910E02 2.53900E01 -5.75800E01 -7.00400E01 -6.18000E01 -6.82300E01 -4.97800E01 -4.47000E01 -5.44100E01 -1.83600E01 4.38300E01 6.79100E01 -1.32000E00 1.03200E01 -Frame 160 4.43200E01 8.34000E00 -3.67500E01 1.28100E01 4.99000E01 4.61000E01 4.11500E01 3.40200E01 4.56500E01 7.86100E01 6.55300E01 5.60000E01 2.21400E01 -3.07700E01 -2.92700E01 -8.68000E00 -3.14300E01 -3.18400E01 -2.22000E00 2.33000E00 -2.09700E01 -1.96000E00 9.65000E00 2.16200E01 1.19500E01 -1.80200E01 -3.18900E01 -1.51500E01 -2.28700E01 2.00000E-01 -3.01000E00 -1.23100E01 -2.88000E00 1.58500E01 4.15000E00 9.09000E00 -5.82000E00 -7.18000E00 -1.95700E01 -3.93200E01 -2.56400E01 -8.51000E00 -1.48400E01 -3.83500E01 -5.95500E01 -4.23500E01 -5.15800E01 -6.70500E01 -7.79400E01 -1.13100E02 -1.28250E02 -8.17600E01 -8.37700E01 -6.07800E01 -5.10400E01 -5.89700E01 -3.71100E01 -2.45600E01 -4.46200E01 -1.02800E01 6.31100E01 9.26900E01 1.85080E02 2.91140E02 3.65200E02 4.13210E02 2.45330E02 9.80500E01 6.15000E00 -4.85700E01 -8.69100E01 -1.23330E02 -1.85740E02 -1.70890E02 -7.04100E01 -2.17500E01 1.44000E00 3.50000E-01 -1.67700E01 -4.64000E01 -2.69000E01 -9.87700E01 -1.04770E02 7.14000E00 2.50000E00 7.71000E00 8.40700E01 9.07100E01 1.76470E02 2.39720E02 1.46710E02 8.37000E01 6.76800E01 -2.88000E00 -2.86000E01 -3.50700E01 -6.46900E01 -3.71500E01 3.12900E01 9.83000E00 -1.12900E01 4.59600E01 3.59500E01 2.06100E01 -7.21000E00 -9.18700E01 -9.80500E01 -3.33200E01 -8.45500E01 -9.42800E01 -2.52200E01 3.00000E00 4.20900E01 9.73500E01 4.92300E01 5.55800E01 8.20800E01 3.03300E01 -2.50400E01 -9.00000E-02 -3.36000E00 4.28000E00 3.51600E01 2.59700E01 2.44800E01 8.59300E01 7.62100E01 3.11300E01 1.76400E01 -3.22700E01 -4.36800E01 -5.03900E01 -9.22500E01 -9.03100E01 -4.42200E01 -3.56600E01 -4.08000E01 1.09400E01 3.32700E01 2.42600E01 2.69500E01 7.70000E00 -1.81500E01 5.22000E00 1.93100E01 -3.18000E00 1.96400E01 3.21500E01 4.50200E01 6.62500E01 5.90800E01 4.16400E01 5.56300E01 4.90100E01 1.71500E01 3.30000E00 3.03000E00 -2.12400E01 -3.42300E01 -2.25800E01 -Frame 160 -1.35400E01 -2.20000E00 1.85000E01 9.83000E00 8.89000E00 2.59200E01 5.46000E00 -1.63000E00 -1.59300E01 -4.16500E01 -2.51200E01 5.95000E00 1.09800E01 -1.68400E01 1.65000E01 3.88600E01 6.28800E01 6.45900E01 3.03000E01 1.13930E02 1.76050E02 2.29400E01 3.30900E01 8.25400E01 2.24600E01 -3.24800E01 -2.40700E01 -7.23600E01 -6.80600E01 -7.65500E01 -3.92200E01 3.33100E01 -1.79400E01 -7.57500E01 4.57300E01 4.79300E01 -5.98400E01 -1.08800E01 7.36100E01 -2.33500E01 -1.42800E01 1.10900E01 2.92400E01 7.69300E01 2.50300E01 -2.49000E00 8.91500E01 4.25500E01 -4.45200E01 3.27700E01 1.54300E01 -7.14500E01 -4.94000E00 -4.36000E00 -3.87500E01 -6.16000E00 1.64500E01 1.87500E01 3.71100E01 -2.39900E01 -4.39500E01 3.85200E01 -1.24900E01 -7.30600E01 5.70000E-01 -9.52000E00 -6.39100E01 1.00800E01 3.50000E-01 -2.56800E01 1.15100E01 -2.21600E01 -3.48500E01 1.41000E01 -2.74500E01 -3.12600E01 2.28400E01 -2.74100E01 -4.11900E01 1.96400E01 -1.67000E00 -2.36400E01 -1.92700E01 -5.87500E01 -7.84000E01 -6.05900E01 -1.06180E02 -7.80900E01 -6.50700E01 -1.22600E02 -1.13810E02 -6.96600E01 -9.21000E01 -7.21700E01 -1.85800E01 -5.93400E01 -4.53300E01 -5.78700E01 -4.27700E01 2.78100E01 3.55200E01 6.94100E01 1.89260E02 2.14620E02 2.48550E02 3.39290E02 3.10520E02 1.16580E02 3.95500E01 -6.18800E01 -6.53700E01 -9.98900E01 -1.62370E02 -2.28620E02 -9.37000E01 -9.65200E01 -4.53400E01 9.46000E00 2.94000E00 -5.97900E01 2.25900E01 -4.75100E01 -6.67400E01 -1.65100E01 3.28000E00 -2.73300E01 4.61300E01 4.08100E01 9.52800E01 1.81340E02 1.51890E02 8.53900E01 1.15760E02 4.69700E01 -1.29800E01 6.24000E00 -4.49400E01 -5.06500E01 -2.24800E01 -6.44100E01 -5.95700E01 1.04800E01 4.69000E00 -7.28000E00 5.39000E00 -3.35500E01 -4.76600E01 -8.16000E00 -5.94300E01 -7.52300E01 -3.64500E01 -3.34400E01 -1.33100E01 2.94500E01 1.05000E01 6.39500E01 8.19900E01 6.15100E01 2.23400E01 3.59400E01 -Frame 160 1.59300E01 1.62900E01 -5.35000E00 -3.36500E01 -2.79000E00 2.60300E01 -3.28000E00 1.95100E01 3.39900E01 9.89000E00 4.04000E00 -2.99000E00 -6.52300E01 -6.03300E01 -5.72200E01 -8.19600E01 -5.33900E01 -4.98900E01 -3.62400E01 1.98600E01 2.56700E01 3.63000E00 4.19000E01 4.33100E01 1.87200E01 2.83500E01 1.02500E01 6.58000E00 6.79000E00 8.00000E00 4.24000E00 2.13600E01 4.99900E01 4.74600E01 2.98100E01 2.35900E01 2.91600E01 2.78800E01 7.54000E00 -2.44300E01 -2.83600E01 -3.63800E01 -3.66100E01 -2.98100E01 -1.47700E01 -9.25000E00 -5.55000E00 1.62700E01 1.27500E01 -8.90000E-01 1.20500E01 4.38000E00 3.47000E00 -7.47000E00 -1.07400E01 -1.41000E01 1.64500E01 1.29300E01 1.72900E01 5.77700E01 1.79450E02 1.30730E02 3.93900E01 5.02000E01 4.73100E01 -7.70000E00 -3.63900E01 -8.09200E01 -1.04740E02 -7.61900E01 -9.66800E01 -3.57100E01 4.71800E01 -1.41000E00 -2.75000E01 7.46300E01 1.98500E01 -2.86400E01 1.24000E01 3.27000E01 -4.14000E01 -8.75000E00 -4.40800E01 1.45400E01 6.79600E01 2.39700E01 1.86000E01 1.06050E02 1.71100E01 -2.65900E01 2.63900E01 1.39900E01 -6.78000E01 -4.30500E01 -4.54900E01 -2.89600E01 -1.08900E01 1.17500E01 9.08000E00 3.43200E01 2.31000E00 2.31000E00 3.43100E01 -2.87300E01 -6.36900E01 -2.26700E01 -3.23600E01 -4.23200E01 -2.05500E01 -3.90900E01 -1.01700E01 9.65000E00 -1.29300E01 -2.12000E01 2.12900E01 -1.29300E01 -1.72000E01 2.41000E00 -2.33800E01 -4.99500E01 -2.43000E01 -3.78400E01 -2.17700E01 -2.61900E01 -4.07300E01 -2.86900E01 -2.92600E01 -7.58300E01 -6.97800E01 -6.94900E01 -9.91400E01 -1.01630E02 -9.01200E01 -1.13190E02 -9.68900E01 -6.70200E01 -6.41900E01 -3.72400E01 -3.04500E01 -5.24500E01 -3.71100E01 -1.32900E01 2.52500E01 7.29300E01 1.12990E02 1.53160E02 1.73410E02 2.57110E02 3.20150E02 1.98840E02 7.46000E01 -7.54000E00 -6.52000E01 -5.95700E01 -1.04700E02 -1.43120E02 -1.44590E02 -9.89700E01 -1.07850E02 -6.49100E01 -Frame 160 -1.59000E00 -3.63200E01 -4.31000E01 4.94000E00 -6.95500E01 -4.82900E01 1.66600E01 -4.41000E00 -1.01400E01 3.79500E01 2.34800E01 8.65300E01 1.29440E02 9.45500E01 1.05490E02 1.04670E02 1.87300E01 -1.58800E01 1.44600E01 -1.92700E01 -4.20200E01 -4.04300E01 -8.47500E01 -6.63600E01 1.76600E01 4.26000E00 -1.35600E01 1.50800E01 -2.74100E01 -3.41900E01 -1.51500E01 -6.55100E01 -6.93700E01 -3.82900E01 -3.32200E01 -3.99700E01 1.00000E-01 1.74000E01 3.42100E01 5.55000E01 3.23900E01 2.95300E01 4.15500E01 2.69000E01 3.77000E00 7.92000E00 -1.48100E01 -2.52300E01 -2.95000E00 -1.49800E01 7.63000E00 1.59300E01 4.47000E00 -9.35000E00 -1.75900E01 -1.70700E01 -3.05200E01 -4.53600E01 -6.76200E01 -6.05100E01 -5.21300E01 -4.44500E01 -2.95000E01 -2.70700E01 -5.50000E-01 2.07800E01 2.97400E01 1.89400E01 1.07800E01 2.23500E01 4.72500E01 3.08700E01 -8.05000E00 -3.17000E00 2.28600E01 2.76700E01 1.26000E01 2.30500E01 1.68000E01 3.13400E01 2.53000E01 -4.95000E00 -1.13000E00 1.48100E01 -2.47700E01 -2.75500E01 -2.53900E01 -3.81400E01 -1.32500E01 2.42000E00 -1.54300E01 -1.68200E01 5.76000E00 8.03000E00 2.13600E01 6.08000E00 -1.06800E01 1.00500E01 1.94100E01 -2.69600E01 -1.67400E01 1.88100E01 1.34400E01 1.15890E02 1.34400E02 4.73600E01 1.06590E02 6.45600E01 -3.38200E01 8.00000E-01 -1.75000E01 -1.13340E02 -6.80300E01 -9.12500E01 -7.91000E01 6.50000E00 -2.26000E00 -1.92900E01 8.51700E01 1.47800E01 -1.48000E01 4.47200E01 1.60400E01 -5.95400E01 2.06000E01 -2.38000E01 -3.35500E01 2.34300E01 -1.85000E00 2.30900E01 9.27800E01 4.54000E00 -4.30000E-01 6.34500E01 -7.75000E00 -2.61400E01 2.09300E01 -5.65600E01 -5.13900E01 1.99000E00 -3.89800E01 -1.11800E01 3.54900E01 -1.44300E01 2.61200E01 7.09000E01 -1.70000E01 -1.16000E01 2.39800E01 -4.73600E01 -4.78600E01 -2.53300E01 -6.60800E01 -4.20300E01 -2.20000E00 -2.11400E01 -4.65000E00 2.33500E01 -1.28100E01 1.79200E01 -Frame 160 3.05800E01 -2.14000E01 -2.79700E01 -1.17200E01 -4.69600E01 -3.02500E01 -1.60000E01 -2.33000E01 -1.88100E01 1.83000E00 -2.59000E01 -1.94700E01 -2.98300E01 -8.54900E01 -8.48000E01 -7.30200E01 -1.17820E02 -1.07910E02 -9.86100E01 -9.79500E01 -6.52000E01 -4.64000E01 -2.20000E01 -1.18500E01 -2.34000E01 -3.63100E01 -3.56100E01 -7.88000E00 3.66900E01 7.15800E01 1.06460E02 1.15300E02 1.59290E02 2.75480E02 2.72000E02 1.57160E02 9.06300E01 7.97000E00 -1.82400E01 -6.22300E01 -1.02510E02 -1.56930E02 -1.20880E02 -1.36600E02 -1.19680E02 -6.61300E01 -1.78700E01 -2.11100E01 3.15600E01 6.82000E00 -5.27000E01 -1.60200E01 1.58000E01 -1.74200E01 1.43400E01 -1.79400E01 9.79000E00 6.73600E01 7.06400E01 7.89500E01 1.23440E02 9.81900E01 4.80700E01 4.53600E01 2.05300E01 -4.08000E00 -1.84400E01 -4.82200E01 -6.58700E01 -5.10000E01 -3.96200E01 -2.88500E01 -4.72000E00 2.16000E00 2.50000E-01 7.28000E00 -3.34800E01 -4.14700E01 -2.56700E01 -1.73600E01 -4.27800E01 -6.69500E01 -3.28100E01 -5.90000E-01 1.16200E01 3.01900E01 2.43000E01 3.12000E01 4.12800E01 6.06300E01 2.75200E01 2.83600E01 1.92000E01 1.74000E00 -9.26000E00 -1.95900E01 -2.62200E01 -1.40300E01 1.05500E01 -1.11200E01 -1.74500E01 -8.96000E00 -1.12000E01 -2.35000E01 -1.81600E01 -3.76400E01 -4.96900E01 -4.40700E01 -6.12400E01 -5.08900E01 -1.81800E01 -2.04500E01 7.22000E00 3.07300E01 1.99300E01 2.67700E01 5.37900E01 3.05900E01 2.06400E01 3.53600E01 9.50000E00 -2.17000E00 2.18000E01 -1.51000E00 3.46000E00 2.85800E01 2.44500E01 1.11700E01 1.74700E01 -5.00000E-02 9.89000E00 6.13000E00 -2.87500E01 -2.96800E01 -2.26100E01 -3.73000E01 -4.14100E01 -1.66100E01 -2.10300E01 -3.57000E00 1.94300E01 5.12000E00 3.36000E00 2.75400E01 1.04400E01 2.80000E00 -8.00000E-02 -1.40500E01 -2.44000E00 1.55300E01 -1.89600E01 5.35000E01 1.08150E02 7.43900E01 7.75200E01 7.76800E01 5.37800E01 5.10000E00 1.29200E01 -5.90200E01 -Frame 160 -5.01200E01 -9.28900E01 -7.58900E01 -6.22900E01 -2.42100E01 -7.19300E01 1.69400E01 4.45400E01 2.95000E00 -1.19300E01 4.37400E01 2.20900E01 7.75000E00 -1.60400E01 -1.65500E01 3.94000E00 -1.94000E00 -4.00000E00 5.08800E01 7.24100E01 1.15400E01 3.07800E01 5.55900E01 8.12000E00 -1.08200E01 1.66700E01 -3.30000E01 -5.11700E01 -3.88500E01 -4.51100E01 -2.45200E01 -2.70000E-01 -2.42700E01 2.20100E01 3.57000E01 -5.22000E00 6.00000E-01 2.26000E01 -1.27400E01 -2.31600E01 -2.58800E01 -4.36600E01 -2.19500E01 -7.55000E00 -1.77000E01 -8.15000E00 2.70000E00 -1.20000E-01 5.97000E00 3.02400E01 -2.77000E00 2.20000E00 7.32000E00 -5.41000E00 -2.55300E01 -2.22500E01 -2.68500E01 -1.65700E01 -2.89600E01 -3.27100E01 -2.85500E01 -1.52400E01 -3.45100E01 -3.73500E01 -5.42500E01 -6.86300E01 -8.94000E01 -1.02740E02 -9.04100E01 -9.26300E01 -8.48500E01 -6.07700E01 -3.89100E01 -2.73600E01 -1.44500E01 -1.21500E01 1.21000E00 2.09600E01 4.82800E01 6.83800E01 1.06020E02 1.01710E02 1.15160E02 1.94910E02 2.31940E02 1.60900E02 1.02520E02 4.72500E01 2.24000E00 -6.15000E00 -4.57800E01 -1.10580E02 -1.17270E02 -1.12050E02 -1.10560E02 -6.39200E01 -3.97800E01 -3.88600E01 5.12000E00 1.14500E01 -3.00400E01 -1.17900E01 3.00300E01 1.31100E01 1.46500E01 -7.80000E-01 -8.69000E00 3.51600E01 7.43300E01 5.36400E01 8.02600E01 9.76300E01 5.44500E01 5.18900E01 4.82100E01 2.43800E01 1.08000E01 8.80000E00 -4.92600E01 -5.50600E01 -4.29800E01 -3.14800E01 -1.65900E01 -2.22000E00 -2.94000E01 5.61000E00 1.17000E01 -2.90300E01 -1.19900E01 6.59000E00 -1.42600E01 -2.47400E01 -5.15200E01 -4.90800E01 -4.52000E00 8.42000E00 9.75000E00 1.91100E01 3.97400E01 3.79700E01 5.81100E01 4.68200E01 3.11400E01 3.59500E01 1.98800E01 -4.70000E00 -1.60300E01 -1.56900E01 -8.32000E00 2.90000E-01 -1.48300E01 -2.24000E01 1.82000E00 -9.21000E00 -1.57000E00 -8.69000E00 -3.00200E01 -3.09800E01 -2.99400E01 -4.08400E01 -Frame 160 -3.90400E01 -3.31500E01 -1.80500E01 -2.47000E00 1.95900E01 8.31000E00 2.66700E01 5.45700E01 3.62800E01 1.93900E01 3.99600E01 3.11300E01 1.80000E01 7.45000E00 -4.30000E-01 1.34500E01 2.67500E01 4.40000E-01 1.63200E01 1.16800E01 1.58900E01 1.42200E01 1.04900E01 -1.03600E01 -6.84000E00 -1.32000E01 -1.97400E01 -2.54600E01 -2.73300E01 -3.02300E01 -6.19000E00 -1.40000E00 -1.84600E01 8.97000E00 2.42400E01 1.19600E01 1.82900E01 2.88000E01 -3.39000E00 6.43000E00 7.55000E00 2.77000E01 7.54500E01 7.76100E01 4.97700E01 6.80300E01 4.28000E01 -1.24000E00 1.73700E01 -1.44500E01 -4.82300E01 -4.90000E01 -5.27400E01 -6.55400E01 -2.16700E01 -3.54200E01 -1.15600E01 2.00500E01 9.62000E00 -3.14000E00 3.37100E01 1.86700E01 8.15000E00 1.03000E01 1.55100E01 -3.13000E00 5.66000E00 -8.28000E00 3.53600E01 3.13200E01 -5.87000E00 2.88000E01 3.55200E01 1.44200E01 1.46600E01 9.90000E00 4.99000E00 -2.20700E01 -4.49400E01 -2.64700E01 -2.34000E01 -2.92100E01 -1.61700E01 1.42900E01 5.68000E00 4.80000E00 1.88900E01 1.94000E01 1.69100E01 -2.67000E00 -2.88500E01 -2.58100E01 -3.06500E01 -4.86100E01 -2.08000E00 -1.21100E01 -2.54400E01 8.40000E-01 1.93000E00 -1.95000E00 1.30500E01 4.50000E00 4.68000E00 1.78600E01 -1.15700E01 -2.99000E01 1.23000E00 -1.68000E00 -4.16800E01 -2.68800E01 -1.56000E01 -2.69600E01 -5.65000E00 -1.96800E01 -2.11300E01 -2.36100E01 -4.21500E01 -4.92300E01 -4.94900E01 -8.77200E01 -8.50600E01 -6.52500E01 -6.87800E01 -7.63700E01 -3.91400E01 -3.67400E01 -1.92500E01 -1.52200E01 -1.10700E01 -1.28000E01 -1.55900E01 -3.44700E01 3.08000E00 2.17700E01 2.20000E01 6.62000E01 1.01690E02 1.12170E02 1.60860E02 2.11900E02 1.75320E02 1.13450E02 6.75700E01 1.12200E01 -1.38700E01 -4.97100E01 -1.15600E02 -1.02410E02 -9.37100E01 -1.07650E02 -7.09200E01 -1.69900E01 -8.38000E00 1.05000E01 2.19500E01 1.97300E01 9.42000E00 1.37800E01 6.26000E00 1.05000E01 -Frame 160 -3.14000E00 -2.52000E01 9.08000E00 3.34100E01 3.24600E01 5.54500E01 8.51000E01 6.65900E01 5.04500E01 5.27700E01 4.51200E01 2.92000E01 1.27700E01 -2.91700E01 -4.53700E01 -5.00200E01 -4.87600E01 -2.94100E01 -5.43000E00 -8.70000E00 -6.00000E-02 2.78500E01 1.06000E01 -4.19000E00 1.05700E01 9.78000E00 -1.70400E01 -3.86700E01 -5.09300E01 -2.85200E01 -1.03900E01 -7.69000E00 -5.90000E00 2.79500E01 2.48200E01 3.95700E01 5.77400E01 6.14200E01 3.91600E01 3.51800E01 1.20500E01 -1.18000E01 -2.33700E01 -1.62700E01 -6.93000E00 -1.52900E01 -2.78900E01 -1.78500E01 5.52000E00 1.56100E01 1.30000E01 3.30000E00 -6.70000E00 -1.90000E01 -2.16600E01 -3.03800E01 -3.13400E01 -2.53000E01 -1.50500E01 -1.44700E01 -1.86000E00 6.14000E00 2.73800E01 4.12500E01 3.85100E01 2.26500E01 3.62800E01 2.53000E01 1.29600E01 6.23000E00 7.29000E00 1.03800E01 2.56000E00 8.50000E00 5.62000E00 2.56500E01 1.12800E01 2.14600E01 1.39400E01 9.18000E00 1.27000E00 -1.88000E00 -1.51200E01 -3.07500E01 -2.28300E01 -1.66400E01 -3.12400E01 -2.22600E01 -1.29800E01 9.60000E00 1.68700E01 1.23500E01 1.46800E01 1.80700E01 1.65500E01 1.39700E01 1.93000E01 1.09780E02 7.29600E01 1.19400E01 5.30300E01 4.43500E01 -1.06300E01 1.17100E01 4.74000E00 -3.34400E01 -2.67600E01 -4.68400E01 -3.04900E01 -1.96000E01 -3.23500E01 -3.74600E01 5.33100E01 -1.31600E01 -4.66700E01 4.08300E01 5.20000E01 -2.65300E01 2.25400E01 6.11000E00 1.31700E01 2.44400E01 -1.96000E00 1.78300E01 4.82200E01 -7.49000E00 9.00000E-02 1.79100E01 3.27000E00 -1.58200E01 1.25200E01 1.73000E00 -2.73900E01 -3.93800E01 -4.70000E00 1.06000E00 -6.00000E00 -2.52700E01 1.28900E01 2.02200E01 7.60000E-01 -7.30000E00 9.40000E00 1.26100E01 -1.60900E01 -3.36600E01 -5.74000E00 -1.69500E01 -3.54900E01 -3.05700E01 -1.24700E01 -2.98000E01 -3.06400E01 -6.48000E00 2.43000E00 -5.39000E00 -3.45000E00 -5.45000E00 1.14900E01 -2.20600E01 -Frame 160 -2.46300E01 -2.26000E00 1.08000E01 -3.37500E01 -2.76500E01 -7.34000E00 -4.40000E00 -2.33700E01 -1.19100E01 -2.20900E01 -1.45700E01 -3.78100E01 -2.97400E01 -4.84000E01 -5.06000E01 -6.98300E01 -5.56000E01 -4.68900E01 -5.78800E01 -6.01700E01 -3.44900E01 -3.10000E01 -3.03900E01 -5.27500E01 -3.17700E01 -2.11300E01 -4.51600E01 -2.19100E01 -5.94000E00 6.51000E00 8.32000E00 6.11600E01 8.05600E01 9.24700E01 1.24650E02 1.56700E02 1.48590E02 1.19090E02 5.05700E01 2.88900E01 2.05200E01 -2.71200E01 -5.82000E01 -7.31800E01 -8.85500E01 -8.63100E01 -6.79200E01 -4.79000E01 -2.32200E01 8.24000E00 -3.34000E00 -2.28000E00 1.81000E00 1.02000E00 -3.80000E00 1.02300E01 -1.32000E00 -2.52300E01 -7.86000E00 1.40500E01 1.46200E01 3.01900E01 5.02100E01 5.38000E01 5.24500E01 4.40100E01 4.12700E01 4.24100E01 2.05500E01 -1.40000E01 -1.56000E01 -3.32300E01 -3.73700E01 -3.06000E01 -1.35900E01 -1.40400E01 -1.14900E01 1.50000E-01 8.15000E00 7.39000E00 -4.40000E00 -4.55000E00 -6.70000E00 -2.99100E01 -3.88100E01 -3.29500E01 -2.98800E01 -1.56900E01 -2.10500E01 -4.56000E00 1.54400E01 2.60400E01 2.69400E01 4.68400E01 4.23100E01 2.16000E01 1.22300E01 1.95600E01 7.10000E00 -9.75000E00 -2.01100E01 -6.77000E00 -1.60100E01 -2.35200E01 -1.72400E01 4.25000E00 4.40000E00 4.55000E00 -5.30000E00 -9.45000E00 -2.07200E01 -1.83200E01 -1.58300E01 -2.02500E01 -2.37900E01 -2.14200E01 -1.69600E01 -5.35000E00 3.62000E00 2.86000E00 1.20700E01 3.45500E01 3.16900E01 1.17100E01 2.41000E01 3.88500E01 1.80200E01 -1.47000E00 3.44000E00 2.50000E00 1.53000E00 -3.47000E00 1.03800E01 1.56500E01 2.20700E01 1.26700E01 5.97000E00 5.06000E00 2.21200E01 1.69000E00 -9.37000E00 -2.67600E01 -1.66600E01 -2.22300E01 -2.49500E01 -1.77300E01 -9.27000E00 -7.54000E00 5.25000E00 1.44300E01 9.88000E00 1.51800E01 6.96300E01 1.02700E02 5.47000E01 2.41700E01 4.26800E01 2.27300E01 1.15000E00 3.91000E00 -Frame 160 -2.12400E01 -2.01400E01 -3.79800E01 -3.33300E01 -1.45000E01 -5.07000E00 -1.23400E01 1.51800E01 2.65400E01 -1.87700E01 -5.46000E00 4.62700E01 1.75600E01 -5.00000E-02 -6.20000E00 -2.15300E01 -5.31000E00 -1.58000E00 -8.73000E00 2.29100E01 3.45100E01 8.44000E00 6.56000E00 2.06200E01 6.10000E00 3.13000E00 8.07000E00 -1.38400E01 -1.84100E01 -2.31000E01 -2.09100E01 -6.63000E00 -9.00000E-01 -4.99000E00 1.48000E01 2.51900E01 -2.12000E00 -8.27000E00 1.54000E01 5.79000E00 -1.51200E01 -3.66600E01 -2.98300E01 -2.37600E01 -3.74800E01 -3.15900E01 -9.49000E00 -1.47000E01 -1.50600E01 1.58000E00 1.27300E01 3.21000E00 -6.10000E-01 3.45000E00 -1.13700E01 -1.56400E01 -2.90300E01 -1.38100E01 -6.11000E00 -2.31700E01 -2.07400E01 -1.32200E01 -1.34600E01 -8.70000E00 -3.79000E00 -7.30000E-01 -8.58000E00 -1.36700E01 -1.69100E01 -3.62400E01 -3.01400E01 -5.68300E01 -5.33000E01 -4.96200E01 -6.27900E01 -5.93200E01 -3.87000E01 -4.44200E01 -4.02900E01 -3.00100E01 -2.74000E01 -2.47000E01 -3.59100E01 -4.44500E01 -4.42300E01 -3.19800E01 -3.23400E01 -7.00000E-01 1.39000E01 3.59200E01 6.25700E01 1.02970E02 1.13510E02 1.31260E02 1.29430E02 1.14420E02 6.18400E01 3.25800E01 9.39000E00 -2.25200E01 -5.63900E01 -7.32500E01 -6.95600E01 -5.66900E01 -6.93700E01 -4.63800E01 -6.64000E00 1.33000E00 -3.46000E00 9.60000E00 5.05000E00 -8.65000E00 -1.77000E00 -1.36800E01 -2.29500E01 -2.74900E01 -1.21500E01 -1.23300E01 1.94900E01 1.52700E01 4.29000E01 5.83400E01 4.62000E01 4.86400E01 4.51100E01 3.54300E01 2.84200E01 1.61700E01 -5.47000E00 -3.37700E01 -3.29100E01 -3.69900E01 -4.01600E01 -1.73900E01 -1.59000E01 -1.03500E01 1.03800E01 -2.60000E-01 1.77000E00 1.58600E01 2.37000E00 -1.05400E01 -2.18400E01 -3.24700E01 -3.14000E01 -2.02700E01 -2.47800E01 -1.34100E01 6.32000E00 1.06500E01 4.10000E00 2.73400E01 2.72700E01 2.51700E01 4.79800E01 1.64500E01 -1.10700E01 -8.43000E00 -7.00000E-01 -2.37300E01 -Frame 160 -2.24500E01 -2.81100E01 -1.19200E01 -2.20000E-01 2.84000E00 9.90000E-01 1.30800E01 4.53000E00 -3.29000E00 -1.03500E01 -1.46200E01 -2.20100E01 -2.66100E01 -3.33300E01 -2.52300E01 -1.48600E01 -1.41600E01 -1.04300E01 6.42000E00 2.17800E01 1.55900E01 3.11900E01 3.12400E01 2.12600E01 1.19500E01 1.73400E01 1.58800E01 3.36000E00 -1.15500E01 1.09000E00 1.20000E-01 2.12000E00 3.18000E00 2.02700E01 2.68700E01 1.26500E01 8.98000E00 1.21900E01 8.49000E00 3.67000E00 1.70000E00 -2.33300E01 -1.31100E01 -2.35600E01 -2.83100E01 -2.31800E01 -8.87000E00 1.89000E00 4.98000E00 6.16000E00 4.37000E00 1.95200E01 2.31200E01 4.98100E01 6.82800E01 6.32600E01 3.70300E01 5.29600E01 3.53400E01 2.15000E00 1.94000E00 -3.27000E00 -6.63000E00 -2.80800E01 -3.81600E01 -2.35100E01 -1.23800E01 -2.28900E01 5.30000E00 7.36000E00 4.48000E00 -6.49000E00 2.02100E01 1.47200E01 1.00500E01 -5.77000E00 1.19300E01 1.70000E-01 -5.95000E00 -4.25000E00 3.55100E01 1.84700E01 8.89000E00 1.90100E01 2.54300E01 9.03000E00 -2.88000E00 9.85000E00 6.97000E00 -2.00000E01 -1.27800E01 -2.32000E00 -1.35300E01 -1.70700E01 -7.00000E-01 2.18000E00 -2.85000E00 -6.03000E00 4.70000E00 1.57600E01 5.15000E00 -4.79000E00 -1.03000E00 -7.15000E00 -1.74500E01 -1.90500E01 -1.56800E01 -6.19000E00 -1.44000E01 -1.28500E01 -1.32400E01 -1.63000E00 3.40000E-01 -1.63000E00 4.34000E00 1.04900E01 -1.41800E01 -1.06000E01 -9.00000E-01 -9.90000E00 -1.41700E01 -1.05600E01 -6.83000E00 -1.29800E01 -1.53100E01 -8.70000E00 1.21200E01 3.57000E00 -1.02500E01 -7.49000E00 -1.56400E01 -3.50300E01 -3.09900E01 -3.78000E01 -4.07900E01 -5.08400E01 -5.01600E01 -6.14200E01 -5.09800E01 -3.91800E01 -3.29900E01 -3.25900E01 -2.11600E01 -2.73700E01 -2.17600E01 -1.59700E01 -2.00000E01 -1.71500E01 -3.21000E00 -1.18500E01 5.24000E00 1.88400E01 7.48300E01 7.94700E01 9.21700E01 1.25170E02 1.35070E02 1.01150E02 6.00900E01 4.37100E01 -Frame 160 2.57900E01 -1.27000E01 -5.23600E01 -4.91900E01 -6.68700E01 -6.20300E01 -6.29800E01 -3.69000E01 -2.59800E01 -1.27000E01 -1.30000E01 3.67000E01 7.90000E00 1.42000E01 1.46800E01 1.61600E01 -6.33000E00 -8.51000E00 -1.97500E01 -3.20000E-01 -3.29000E00 1.65000E00 1.37400E01 3.01900E01 3.21200E01 2.70800E01 5.28600E01 4.63900E01 3.06800E01 2.24600E01 1.29700E01 -9.82000E00 -2.03000E01 -1.90800E01 -1.48000E01 -2.73700E01 -2.33000E01 -1.10800E01 1.15300E01 -2.17000E00 5.71000E00 1.78300E01 2.53100E01 -1.10000E01 -5.42000E00 -6.60000E-01 -2.27500E01 -3.35000E01 -3.55500E01 -2.86300E01 -2.04700E01 -1.80400E01 -6.52000E00 1.73600E01 1.89600E01 2.35900E01 3.03400E01 3.62700E01 2.13500E01 2.49500E01 7.64000E00 2.79000E00 -7.21000E00 -1.55100E01 -2.10500E01 -9.74000E00 -1.40700E01 -1.25200E01 4.09000E00 1.42100E01 -3.70000E-01 3.60000E00 1.69000E00 -1.02800E01 -1.66100E01 -1.51200E01 -7.57000E00 -2.97800E01 -3.06500E01 -1.45200E01 -9.88000E00 -1.00900E01 6.70000E00 2.20000E01 2.87500E01 2.76800E01 3.35500E01 2.45700E01 3.22900E01 3.12200E01 1.10900E01 1.03300E01 3.54000E00 -7.46000E00 -2.79000E00 -2.97000E00 7.85000E00 9.00000E00 8.18000E00 2.33000E00 1.83000E01 7.75000E00 -1.30000E-01 1.77500E01 4.17000E00 -2.68300E01 -1.27600E01 -1.32400E01 -1.47200E01 -1.52300E01 -4.74000E00 3.08000E00 -8.86000E00 5.84000E00 1.49900E01 2.14100E01 1.30100E01 1.63400E01 7.97600E01 8.30700E01 2.04100E01 4.98000E01 6.20600E01 1.46500E01 -1.12300E01 1.21100E01 -1.48300E01 -2.05800E01 -3.54800E01 -1.98000E01 -1.06100E01 -2.21200E01 -2.69600E01 3.50800E01 2.30100E01 -2.14500E01 1.37400E01 4.00100E01 -9.40000E-01 8.85000E00 1.94000E00 7.82000E00 1.28800E01 -1.19100E01 2.55000E00 2.94600E01 7.18000E00 6.21000E00 3.12100E01 1.39600E01 -1.83000E00 2.89000E01 2.25600E01 6.01000E00 -7.05000E00 -1.05000E01 -4.00000E-02 -7.25000E00 -2.46700E01 -6.60000E00 -Frame 160 1.60400E01 -4.63000E00 -5.93000E00 2.74000E00 1.76800E01 9.07000E00 7.19000E00 3.25000E00 2.19000E00 -2.09000E01 -1.46800E01 3.75000E00 -5.25000E00 -2.25200E01 -7.30000E00 4.00000E-01 -4.66000E00 -5.87000E00 -1.11000E00 1.88000E01 2.13100E01 -1.31200E01 -3.60000E00 1.22200E01 -1.48000E00 -5.60000E00 4.16000E00 2.22000E00 -1.57800E01 -1.13200E01 -1.71000E00 1.20000E00 -7.80000E00 -8.07000E00 -2.34000E00 -8.43000E00 -1.97000E01 -1.03000E01 -6.60000E00 -1.47800E01 -2.82000E01 -3.60100E01 -2.50300E01 -2.66900E01 -4.53800E01 -3.56100E01 -1.95100E01 -3.09000E01 -3.36200E01 -1.14000E01 -1.54900E01 -1.07000E01 -2.87600E01 -1.93600E01 -9.66000E00 -6.66000E00 1.54300E01 2.91800E01 4.43200E01 4.28800E01 6.53500E01 8.34500E01 8.40300E01 9.65500E01 9.33700E01 6.50100E01 3.97200E01 8.62000E00 2.56000E00 -1.06800E01 -3.63100E01 -2.96900E01 -2.58300E01 -4.28200E01 -3.72900E01 -2.55000E00 -1.73000E00 -4.88000E00 8.88000E00 1.70600E01 1.04800E01 1.16900E01 -7.00000E-02 5.81000E00 3.87000E00 -8.13000E00 -6.49000E00 5.21000E00 3.27000E00 1.12700E01 2.85100E01 3.72600E01 3.12500E01 3.00300E01 3.67500E01 2.76500E01 3.02500E01 1.09100E01 1.39700E01 -8.80000E-01 -1.81800E01 -2.29900E01 -1.92000E00 -3.19000E00 5.10000E-01 6.33000E00 7.33000E00 7.36000E00 -6.10000E-01 1.01800E01 1.03000E01 -2.58000E00 -1.28500E01 -1.34200E01 -3.19900E01 -1.81000E01 -1.77600E01 -9.39000E00 -1.27500E01 -3.20000E00 -3.50000E-01 1.25900E01 2.69200E01 2.56700E01 2.03600E01 2.38700E01 1.04700E01 1.36500E01 4.92000E00 5.92000E00 3.95000E00 -1.08000E00 -1.52600E01 -1.38600E01 -1.40000E00 -1.45500E01 5.91000E00 8.00000E00 -1.85000E00 -8.00000E00 5.67000E00 4.76000E00 -9.18000E00 -5.54000E00 -1.07800E01 -9.17000E00 -1.55000E01 -2.00100E01 -3.64000E00 3.24000E00 3.33000E00 1.14200E01 1.87500E01 1.52900E01 2.07100E01 2.62800E01 2.30000E01 2.36000E01 1.62000E01 7.56000E00 -Frame 160 -2.35000E00 9.44000E00 -4.10000E-01 -4.56000E00 1.41700E01 -5.30000E-01 -6.80000E-01 1.51700E01 1.65000E01 6.86000E00 1.92000E00 1.28300E01 -8.93000E00 -5.35000E00 -5.65000E00 -7.95000E00 -7.31000E00 -1.86400E01 -8.30000E00 -5.63000E00 -1.87000E00 -2.99000E00 1.78600E01 1.03400E01 -2.42000E00 3.24300E01 4.23300E01 2.95000E01 4.62500E01 5.24800E01 3.08600E01 2.75500E01 1.01200E01 -6.85000E00 9.67000E00 -9.30000E00 -1.88400E01 -1.86500E01 -1.54300E01 -2.40900E01 3.01000E00 -5.05000E00 -5.35000E00 1.93500E01 3.80000E00 5.77000E00 1.98000E01 5.25000E00 6.25000E00 7.28000E00 -4.66000E00 -4.96000E00 -1.02600E01 1.29000E00 -8.00000E-01 3.05000E00 -2.98000E00 1.78100E01 1.92300E01 3.68000E00 8.65000E00 1.27700E01 -2.99000E00 6.77000E00 -4.17000E00 5.60000E-01 -3.56000E00 -8.00000E-01 -5.95000E00 -2.50000E-01 -3.37000E00 -1.15800E01 -6.03000E00 -2.30000E00 2.55000E00 1.55000E00 -2.48000E00 6.37000E00 -1.51000E00 -2.16300E01 -1.03500E01 -3.71000E00 -1.48600E01 -2.03400E01 -9.97000E00 -1.32700E01 -5.66000E00 1.19000E00 4.25000E00 1.04000E01 1.27300E01 7.12000E00 1.43300E01 5.75000E00 -6.10000E00 -1.03100E01 -5.64000E00 -1.78200E01 -1.23600E01 -1.27200E01 -7.08000E00 4.74000E00 -1.30800E01 -8.44000E00 1.03500E01 -1.29000E00 4.71000E00 9.89000E00 -1.47800E01 -2.00000E-01 -1.17000E00 -2.31700E01 -1.98300E01 -2.63700E01 -2.70900E01 -1.98100E01 -2.12900E01 -1.08000E01 -1.59800E01 -1.83100E01 -5.70000E00 -1.17000E01 -1.28800E01 -9.00000E-02 -1.91000E00 -7.79000E00 -9.85000E00 -7.97000E00 -1.50300E01 -2.53000E01 -1.48700E01 -2.01100E01 -1.55000E01 -1.97400E01 -2.21000E01 -7.52000E00 1.45100E01 3.32000E01 4.14300E01 6.68700E01 7.60300E01 6.44000E01 5.23500E01 4.78800E01 3.32300E01 2.71000E01 1.67600E01 -1.91000E00 -1.31500E01 -1.67200E01 -2.83800E01 -2.13700E01 -9.12000E00 -1.04800E01 -4.87000E00 1.39200E01 2.52800E01 5.97000E00 -9.40000E-01 1.29400E01 -Frame 160 3.24000E00 -1.17600E01 -1.12100E01 -1.36300E01 -6.11000E00 -8.35000E00 -4.65000E00 3.17000E00 -7.70000E-01 7.17000E00 2.13500E01 1.49500E01 2.83400E01 3.21200E01 2.29900E01 1.65600E01 8.92000E00 -1.96000E00 3.83000E00 -5.20000E00 -3.50000E00 -3.74000E00 -7.98000E00 -1.03400E01 6.24000E00 1.53300E01 3.69000E00 1.26900E01 1.09600E01 4.17000E00 -2.83000E00 -1.30400E01 -1.15500E01 -1.70000E01 -1.46000E01 -1.91100E01 -8.74000E00 -1.60400E01 -6.55000E00 -6.76000E00 6.03000E00 1.82100E01 1.97500E01 1.03200E01 8.59000E00 1.38000E01 8.16000E00 3.34000E00 -8.63000E00 -1.19600E01 -1.03800E01 -3.74000E00 -8.90000E-01 -7.95000E00 -4.22000E00 7.63000E00 8.40000E-01 2.84000E00 2.90000E00 1.69600E01 -1.56000E00 -8.65000E00 -1.09500E01 -1.93100E01 -8.91000E00 -1.71800E01 -1.76900E01 -7.20000E00 -7.38000E00 -6.56000E00 4.29000E00 -1.53000E00 1.44700E01 8.95000E00 1.72500E01 1.67900E01 9.30000E00 -2.43000E00 1.48000E00 1.75100E01 3.02000E00 -3.92000E00 9.93000E00 3.20000E00 -5.74000E00 -9.50000E-01 6.99000E00 1.11700E01 9.47000E00 -2.90000E-01 3.65000E00 3.71000E00 -1.52300E01 -3.74000E00 -1.38900E01 -9.34000E00 -1.64000E00 6.30000E00 2.48000E00 -2.46000E00 8.45000E00 9.69000E00 2.39600E01 2.66500E01 1.74000E01 1.38500E01 2.71800E01 2.39000E01 -2.50000E00 -7.71000E00 2.93000E00 -1.31000E01 -1.46100E01 -1.81500E01 -2.07800E01 -7.47000E00 -1.77400E01 6.90000E-01 1.76900E01 6.20000E00 1.35000E00 1.53500E01 9.77000E00 -4.99000E00 1.80000E00 -9.20000E00 -6.53000E00 -4.77000E00 -1.39500E01 -5.40000E00 6.42000E00 -1.40000E00 5.40000E-01 2.54000E00 6.00000E-01 -4.00000E-01 -4.30000E-01 5.40000E-01 -1.46000E00 -1.05200E01 -3.85000E00 -5.97000E00 -1.51500E01 -1.86000E01 1.86000E00 -1.20500E01 -8.38000E00 -6.59000E00 -7.74000E00 2.08000E00 2.20000E00 -2.68000E00 -1.71000E00 -7.71000E00 -1.28900E01 -2.20000E-01 -1.71600E01 -1.06100E01 -7.85000E00 -1.10000E01 -Frame 160 -2.12400E01 -1.37800E01 -2.08000E00 -3.02000E00 -6.99000E00 9.20000E-01 -1.93000E00 1.30000E-01 -3.75000E00 5.25000E00 -4.48000E00 -5.10000E-01 -1.04200E01 -1.36300E01 -1.79300E01 -2.43500E01 -7.95000E00 -2.04000E00 -4.95000E00 -1.09500E01 -8.13000E00 -1.22000E00 -1.01000E01 -2.25000E00 -6.16000E00 -1.31900E01 -6.43000E00 -7.46000E00 -2.15200E01 -2.10000E01 -7.45000E00 -8.48000E00 -2.25400E01 -1.30200E01 -6.20000E00 -2.17000E00 -1.02000E00 1.60000E-01 3.70000E-01 6.58000E00 -3.03000E00 -1.19400E01 -1.41200E01 -5.36000E00 -1.33300E01 -1.65400E01 -5.84000E00 -1.18100E01 -6.96000E00 -1.29600E01 -8.14000E00 -2.17000E00 -2.00000E-02 -8.10000E-01 -7.63000E00 -1.46600E01 -1.29000E01 -5.08000E00 -1.60200E01 -1.42900E01 -2.15000E01 -6.92000E00 2.11000E00 2.44100E01 2.53700E01 5.03300E01 4.10100E01 3.73600E01 3.55600E01 2.26700E01 1.93600E01 1.69300E01 4.41000E00 -1.05000E01 -9.86000E00 -2.11900E01 -3.18500E01 -1.68100E01 -2.90000E-01 -2.26000E00 6.71000E00 1.19500E01 1.73400E01 8.88000E00 2.01500E01 1.97500E01 7.32000E00 -1.55000E01 -2.01000E00 -6.10000E00 -2.33100E01 -1.00300E01 -2.33000E00 -1.53900E01 -1.18400E01 3.83000E00 3.98000E00 1.81300E01 1.47000E01 1.71500E01 1.96600E01 1.32300E01 4.59000E00 6.80000E-01 -1.13500E01 -3.74000E00 -6.89000E00 -1.11300E01 -2.34900E01 -6.21000E00 5.61000E00 3.79000E00 1.99100E01 1.25100E01 7.87000E00 1.70800E01 7.56000E00 -5.26000E00 -2.47000E00 -8.59000E00 -1.28900E01 -2.73100E01 -1.91500E01 -6.72000E00 -1.89000E01 -1.64400E01 7.11000E00 1.13800E01 -1.23000E00 5.77000E00 7.98000E00 4.25000E00 5.40000E00 8.58000E00 -5.15000E00 -2.30000E00 -1.03600E01 -9.66000E00 -5.93000E00 -1.08000E00 -4.08000E00 8.30000E-01 -1.11000E00 -4.11000E00 3.80000E00 -5.00000E-02 1.09800E01 1.23400E01 -2.70000E-01 -7.27000E00 -5.48000E00 -3.63000E00 -1.37200E01 -5.11000E00 -1.12300E01 -7.53000E00 -5.71000E00 -8.83000E00 9.60000E-01 1.00500E01 -Frame 160 2.44100E01 3.41900E01 1.92400E01 3.81000E00 2.59000E01 1.36500E01 -5.99000E00 1.07700E01 1.60400E01 1.46000E00 4.43000E00 4.90000E-01 2.43000E00 -1.57000E00 -6.90000E-01 6.22000E00 3.34000E00 -1.36300E01 -1.21100E01 1.47000E00 -4.53000E00 -2.71000E00 -1.68300E01 -4.37000E00 2.48000E00 -2.46000E00 -4.55000E00 4.30000E00 1.42000E00 -3.55000E00 -5.67000E00 -7.85000E00 -3.09000E00 -1.18000E00 1.79000E00 3.85000E00 2.97000E00 -1.29400E01 -5.33000E00 -5.48000E00 -5.63000E00 -1.97800E01 1.65000E00 -2.60000E-01 -2.02300E01 -1.68000E01 -6.25000E00 -1.37000E00 5.66000E00 -1.21000E01 -9.40000E00 -5.61000E00 -1.37000E01 -1.20300E01 -8.30000E00 -4.50000E-01 -3.36000E00 -1.53600E01 -1.17200E01 -8.96000E00 -1.31100E01 -1.83800E01 -6.80000E00 -7.86000E00 -1.89500E01 -1.03700E01 -5.20000E-01 -6.37000E00 -8.40000E00 -6.49000E00 -5.52000E00 -1.25200E01 -2.37300E01 -7.27000E00 7.00000E-01 -8.09000E00 -1.91500E01 -8.54000E00 -6.60000E00 -9.60000E00 -6.90000E-01 -5.51000E00 -1.14800E01 -9.63000E00 -1.57200E01 -1.99900E01 -2.13800E01 -2.48000E01 -1.83100E01 -2.16100E01 -2.10000E01 -1.53600E01 -2.75400E01 -3.50800E01 -1.98300E01 -1.41000E01 -2.51900E01 -1.56100E01 -9.73000E00 -1.26700E01 -2.07000E01 -1.99700E01 -1.12100E01 -2.41800E01 -2.65400E01 -1.79600E01 -5.11000E00 -1.87000E00 1.34600E01 2.22400E01 2.52600E01 3.93400E01 5.68100E01 5.67600E01 4.66500E01 4.01800E01 4.34700E01 1.78200E01 1.36000E00 -1.06100E01 -6.94000E00 -1.71500E01 -2.96600E01 -3.45300E01 -2.75200E01 -9.27000E00 -8.45000E00 -1.26000E01 6.13000E00 1.34300E01 9.94000E00 1.03300E01 1.77200E01 9.32000E00 -7.35000E00 2.47000E00 -5.41000E00 -1.15300E01 -1.68300E01 -7.28000E00 1.57000E00 -4.31000E00 2.63000E00 1.57800E01 1.83200E01 2.19200E01 7.61000E00 1.48500E01 2.33000E01 1.89900E01 2.53000E00 -1.04400E01 7.20000E00 -4.62000E00 2.20000E00 -1.27700E01 -1.41900E01 5.36000E00 -4.90000E-01 -2.52000E00 -Frame 160 9.39000E00 7.66000E00 -3.13000E00 -1.25000E00 4.69000E00 -4.19000E00 -1.03400E01 1.33000E00 -7.64000E00 -1.88800E01 -8.45000E00 -1.16900E01 -1.60200E01 -1.24700E01 -4.80000E00 5.11000E00 5.32000E00 1.45300E01 1.10100E01 1.53700E01 1.08500E01 1.31800E01 5.70000E-01 5.70000E-01 -4.43000E00 -8.58000E00 -6.85000E00 -7.06000E00 -1.42700E01 -2.69000E00 -7.75000E00 4.00000E-02 4.07000E00 6.22000E00 1.64300E01 1.09400E01 3.27000E00 3.36000E00 5.45000E00 -8.40000E00 -1.67000E00 -3.73000E00 -4.85000E00 -1.00000E01 -1.03000E01 -4.60000E00 -2.72000E00 4.22000E00 1.23700E01 2.76000E00 8.50000E-01 1.88800E01 6.45000E00 7.63000E00 5.84000E00 8.99000E00 8.23000E00 -4.56000E00 1.26000E00 -5.74000E00 -7.95000E00 -2.20000E-01 -2.50000E-01 7.20000E-01 -6.28000E00 1.05100E01 3.81000E00 7.90000E00 9.11000E00 4.35000E00 1.04400E01 3.71000E00 -7.23000E00 3.50000E00 4.56000E00 -5.35000E00 -4.56000E00 -9.74000E00 1.93000E00 2.96000E00 2.00000E-02 -2.01000E00 -3.10000E00 1.97800E01 1.13500E01 1.65000E00 4.65000E00 -2.60000E-01 -3.32000E00 3.53000E00 2.59000E00 -3.38000E00 -7.53000E00 -1.80000E00 1.10000E-01 -4.92000E00 -1.00000E-01 5.87000E00 -9.80000E-01 4.96000E00 1.08000E00 6.08000E00 6.23000E00 4.38000E00 -6.53000E00 -1.07700E01 -2.13000E00 -5.22000E00 -1.14000E01 -9.76000E00 9.40000E-01 9.70000E-01 -7.00000E00 -9.21000E00 -8.48000E00 -3.72000E00 1.19000E00 3.25000E00 -8.63000E00 -1.87000E00 -8.90000E00 -2.14000E00 -4.17000E00 -1.02600E01 -4.53000E00 1.38000E00 -1.65300E01 -9.98000E00 -8.22000E00 -7.40000E00 -1.55000E00 -3.52000E00 -1.25500E01 -2.85000E00 -1.85000E00 -4.82000E00 -1.28800E01 -2.18000E00 2.85000E00 -4.97000E00 -1.20300E01 -7.30000E00 5.80000E-01 -8.30000E00 -1.14500E01 -1.16900E01 -1.09300E01 -1.81400E01 -1.05600E01 -4.74000E00 -5.74000E00 -7.77000E00 -4.86000E00 -3.86000E00 -3.83000E00 -2.80000E00 -9.74000E00 -4.89000E00 -8.90000E-01 -2.77000E00 -Frame 160 -9.71000E00 -8.86000E00 -8.98000E00 -2.10000E00 -6.01000E00 -7.04000E00 -1.41000E01 1.63000E00 -8.16000E00 -1.42500E01 1.48000E00 -1.31000E00 -1.31900E01 -9.43000E00 -1.05500E01 -9.70000E00 -1.82000E00 -2.70000E00 -5.61000E00 -6.10000E-01 3.54000E00 -1.51900E01 -2.49000E00 -3.40000E00 -4.34000E00 -1.43100E01 -8.58000E00 7.33000E00 -1.28000E00 -4.16000E00 -1.13000E00 -1.00000E-02 -8.60000E-01 4.26000E00 -5.47000E00 -3.50000E00 4.53000E00 -4.20000E00 -4.20000E00 2.80000E00 5.01000E00 -1.37200E01 -1.00200E01 8.00000E-01 -5.05000E00 -9.08000E00 -4.23000E00 7.70000E-01 1.92000E00 -9.00000E-01 -4.81000E00 8.16000E00 -3.48000E00 -4.48000E00 -5.10000E-01 5.80000E-01 1.70000E00 5.85000E00 3.12000E00 2.30000E00 4.50000E-01 -1.46000E00 -4.30000E-01 6.30000E-01 4.72000E00 2.93000E00 2.08000E00 7.20000E00 4.70000E-01 5.30000E-01 5.59000E00 1.28000E01 1.22000E00 1.28000E00 7.34000E00 1.25800E01 -5.03000E00 8.20000E-01 1.85000E00 -9.00000E-02 6.91000E00 2.12000E00 1.41800E01 7.60000E00 1.08100E01 4.11000E00 6.20000E00 4.35000E00 7.44000E00 -3.38000E00 7.47000E00 5.65000E00 2.77000E00 4.80000E00 3.89000E00 7.95000E00 1.11300E01 5.40000E00 1.14900E01 1.47600E01 9.12000E00 4.30000E00 9.33000E00 9.51000E00 2.69000E00 2.66000E00 2.63000E00 -2.40000E00 -9.58000E00 3.00000E-02 -3.06000E00 -6.24000E00 3.49000E00 4.52000E00 1.05800E01 5.82000E00 1.09100E01 6.15000E00 5.24000E00 3.30000E00 8.30000E00 1.45000E00 4.39000E00 2.42000E00 -1.61000E00 2.24000E00 -2.79000E00 5.03000E00 -5.91000E00 1.82000E00 -1.21000E00 -3.33000E00 3.49000E00 8.52000E00 -2.30000E00 -4.45000E00 8.34000E00 7.52000E00 3.67000E00 -1.30000E00 -4.42000E00 6.37000E00 -3.51000E00 1.31000E00 3.28000E00 -6.69000E00 -2.96000E00 6.89000E00 5.04000E00 2.13000E00 1.13000E00 5.10000E00 2.19000E00 2.19000E00 7.19000E00 -5.66000E00 -7.90000E00 5.80000E00 2.92000E00 -7.05000E00 -Frame 160 6.80000E-01 1.65000E00 6.50000E-01 -3.80000E-01 -2.44000E00 3.44000E00 -3.50000E00 -6.50000E-01 8.29000E00 -3.50000E00 -1.65000E00 8.26000E00 -5.30000E-01 2.41000E00 -3.56000E00 -7.71000E00 -9.98000E00 -7.31000E00 -5.55000E00 -1.17300E01 -1.09000E00 -1.20000E-01 -1.12000E00 -4.15000E00 4.73000E00 3.88000E00 5.00000E00 8.15000E00 -6.10000E-01 -6.64000E00 -7.85000E00 -6.09000E00 -6.27000E00 -9.45000E00 -6.72000E00 -8.90000E00 -3.14000E00 -4.20000E00 -9.29000E00 4.70000E-01 -1.47000E00 -5.47000E00 -5.59000E00 -9.71000E00 -3.95000E00 -4.01000E00 -6.07000E00 -4.19000E00 -1.02500E01 -6.49000E00 -3.61000E00 3.60000E-01 -8.55000E00 -8.73000E00 -8.91000E00 -8.09000E00 -7.24000E00 -3.36000E00 -5.36000E00 -1.14200E01 -4.66000E00 -9.69000E00 1.30000E-01 6.25000E00 2.55000E00 5.73000E00 1.40000E01 1.75100E01 1.01100E01 2.34700E01 2.62200E01 2.40300E01 2.17500E01 1.03800E01 1.96500E01 1.91900E01 7.00000E-01 2.64000E00 6.64000E00 4.76000E00 -6.18000E00 4.55000E00 -6.39000E00 -4.66000E00 2.13000E00 -2.87000E00 4.98000E00 1.07000E00 2.04000E00 2.04000E00 7.04000E00 1.51900E01 -2.42000E00 -3.57000E00 1.25000E00 -7.80000E-01 3.13000E00 -1.84000E00 1.04000E00 2.01000E00 2.01000E00 3.01000E00 8.04000E00 6.22000E00 4.34000E00 1.54000E01 1.67900E01 9.21000E00 -6.10000E-01 4.27000E00 9.30000E00 1.74800E01 -1.10000E00 7.50000E-01 4.66000E00 -7.31000E00 -3.64000E00 -8.85000E00 7.90000E-01 6.73000E00 -7.15000E00 -4.50000E-01 8.46000E00 8.64000E00 1.82000E00 6.79000E00 -3.09000E00 -9.27000E00 2.37000E00 -6.30000E-01 -1.07200E01 -1.11000E00 2.80000E00 1.83000E00 8.30000E-01 5.80000E00 5.92000E00 7.04000E00 1.71900E01 9.64000E00 8.50000E-01 4.79000E00 5.85000E00 8.94000E00 6.12000E00 -7.90000E-01 -7.91000E00 7.60000E-01 -3.30000E00 -5.48000E00 -3.72000E00 -4.90000E00 -1.11000E00 7.80000E00 -1.02000E00 3.89000E00 4.95000E00 1.10400E01 -6.90000E-01 6.22000E00 -Frame 160 7.34000E00 -5.10000E-01 7.40000E00 1.15500E01 -6.18000E00 -2.45000E00 3.40000E00 4.43000E00 -2.51000E00 -1.66000E00 1.62200E01 1.06400E01 6.88000E00 6.00000E00 1.00900E01 1.63000E01 9.69000E00 2.78700E01 1.35900E01 1.08600E01 1.90400E01 6.46000E00 5.49000E00 1.14900E01 8.67000E00 7.60000E-01 -1.33900E01 -2.96000E00 2.80000E00 7.40000E-01 6.20000E-01 -5.00000E-01 -5.65000E00 9.05000E00 1.52000E01 1.53000E00 9.44000E00 1.75900E01 1.39800E01 -6.75000E00 -9.11000E00 1.04700E01 7.65000E00 -2.26000E00 5.30000E-01 -9.59000E00 -8.01000E00 -9.37000E00 6.24000E00 8.33000E00 -3.52000E00 9.27000E00 1.24500E01 2.72000E00 3.69000E00 1.16900E01 5.93000E00 1.19900E01 8.23000E00 4.35000E00 -5.65000E00 -9.50000E-01 1.90000E00 -8.16000E00 -3.52000E00 -1.73000E00 -6.88000E00 -7.18000E00 1.52000E00 -1.51000E00 1.37000E00 1.34000E00 -5.69000E00 -5.93000E00 -1.70000E-01 2.77000E00 1.80000E00 -1.20000E00 -3.29000E00 -5.44000E00 -6.50000E-01 -7.71000E00 -9.80000E-01 8.96000E00 -8.00000E-01 -8.60000E-01 5.08000E00 9.20000E00 9.44000E00 -4.32000E00 1.25000E01 4.83000E00 -3.08000E00 -2.30000E-01 3.71000E00 -3.23000E00 1.62000E00 6.62000E00 -1.23000E00 -8.32000E00 2.38000E00 -1.59000E00 1.32000E00 7.32000E00 -1.50000E00 -5.59000E00 6.20000E00 3.35000E00 -3.59000E00 -4.74000E00 3.08000E00 2.14000E00 -3.83000E00 -5.98000E00 3.81000E00 1.90000E00 2.93000E00 6.99000E00 -4.83000E00 -5.01000E00 4.81000E00 1.93000E00 -4.00000E-02 9.93000E00 -3.80000E00 -4.95000E00 6.87000E00 -2.95000E00 -9.07000E00 3.63000E00 -1.28000E00 -3.40000E-01 -8.37000E00 -1.64000E00 7.30000E00 -1.49000E00 8.45000E00 6.90000E-01 4.69000E00 -1.19000E00 7.50000E-01 1.37500E01 -5.86000E00 6.93000E00 5.11000E00 1.23000E00 -9.77000E00 -4.10000E00 1.37500E01 -1.86000E00 -3.95000E00 9.90000E00 6.17000E00 -1.68000E00 1.23000E00 1.02300E01 5.50000E00 -3.80000E-01 5.56000E00 8.68000E00 -Frame 160 6.89000E00 2.04000E00 7.04000E00 3.19000E00 3.22000E00 4.25000E00 3.10000E-01 6.25000E00 1.53700E01 6.76000E00 3.88000E00 5.91000E00 1.30000E01 4.30000E00 -6.70000E-01 1.92100E01 6.90000E-01 -2.40000E00 4.20000E-01 3.33000E00 -6.70000E-01 8.21000E00 3.60000E-01 -7.30000E-01 3.15000E00 1.15000E00 1.50900E01 1.74500E01 -6.13000E00 1.45700E01 1.19000E01 1.14000E00 5.05000E00 1.30800E01 8.35000E00 -4.53000E00 2.00000E-01 4.08000E00 1.08000E00 -4.01000E00 -2.50000E-01 7.63000E00 6.75000E00 4.84000E00 -3.13000E00 5.66000E00 9.72000E00 2.90000E00 6.87000E00 7.96000E00 -9.20000E-01 1.93000E00 3.87000E00 5.87000E00 4.93000E00 2.96000E00 -3.07000E00 7.20000E-01 9.63000E00 6.81000E00 2.90000E00 1.87000E00 -4.19000E00 5.70000E-01 3.48000E00 -2.52000E00 -7.70000E00 2.97000E00 4.97000E00 -3.97000E00 -1.18000E00 3.70000E00 -1.27000E00 -4.39000E00 1.04000E01 6.40000E-01 -8.42000E00 2.25000E00 3.25000E00 5.28000E00 2.37000E00 -1.46300E01 -1.14000E00 -2.23000E00 1.65000E00 -3.50000E-01 1.59000E00 -1.41000E00 4.50000E00 3.59000E00 -1.35000E00 -3.44000E00 2.41000E00 4.40000E-01 -1.59000E00 -6.80000E-01 -9.74000E00 5.93000E00 -2.92000E00 -4.04000E00 -4.19000E00 -5.34000E00 9.48000E00 -8.25000E00 4.48000E00 1.60000E00 -1.37000E00 -6.43000E00 3.36000E00 -2.55000E00 -1.64000E00 -2.70000E00 1.21000E00 -8.76000E00 -2.03000E00 -9.00000E-02 1.91000E00 2.97000E00 -9.40000E-01 9.03000E00 -8.70000E00 -3.97000E00 1.91000E00 -9.03000E00 -7.30000E00 -2.51000E00 -1.57000E00 -1.60000E00 -2.63000E00 1.31000E00 -3.63000E00 -7.20000E-01 -4.72000E00 3.16000E00 2.80000E-01 -4.69000E00 -3.81000E00 4.10000E00 -3.75000E00 -1.84000E00 -4.87000E00 -7.99000E00 -5.20000E00 -1.53200E01 1.26000E00 -2.65000E00 -5.68000E00 2.00000E-01 -7.40000E-01 2.90000E-01 3.35000E00 2.50000E00 -1.38000E00 -3.80000E-01 4.65000E00 -1.17000E00 -6.17000E00 -6.32000E00 -4.70000E-01 -3.44000E00 -Frame 160 3.50000E00 1.65000E00 -5.26000E00 -5.38000E00 5.00000E-01 6.56000E00 -9.20000E00 6.56000E00 6.80000E00 2.04000E00 1.31300E01 6.55000E00 1.57600E01 9.24000E00 -4.90000E-01 4.48000E00 7.60000E00 1.81000E00 5.84000E00 1.29900E01 4.35000E00 7.44000E00 6.62000E00 2.77000E00 1.08000E01 6.07000E00 1.21900E01 -1.51000E00 8.37000E00 3.55000E00 5.58000E00 1.36700E01 4.00000E00 4.03000E00 2.06000E00 -2.97000E00 8.50000E-01 -3.21000E00 6.10000E-01 1.35500E01 1.88000E00 4.85000E00 1.19100E01 2.18000E00 2.15000E00 1.51200E01 1.48000E00 -5.80000E-01 7.30000E00 7.42000E00 4.54000E00 3.57000E00 4.57000E00 1.26000E01 2.87000E00 5.84000E00 2.90000E00 -2.13000E00 1.06900E01 6.90000E00 4.99000E00 -5.98000E00 1.72000E00 2.66000E00 -5.37000E00 3.60000E-01 4.27000E00 3.00000E-01 -7.90000E-01 1.00900E01 7.30000E00 5.42000E00 5.48000E00 4.54000E00 1.57000E00 -8.49000E00 -3.85000E00 1.94000E00 5.91000E00 4.00000E00 7.03000E00 2.15000E00 -8.80000E-01 -3.00000E00 8.20000E-01 -1.24000E00 6.40000E-01 4.58000E00 -2.36000E00 -5.10000E-01 5.40000E00 6.49000E00 -1.39000E00 -2.51000E00 -1.66000E00 2.20000E-01 3.16000E00 2.19000E00 4.19000E00 1.25000E00 -7.80000E-01 1.13000E00 -9.00000E-01 -3.99000E00 8.30000E-01 -3.20000E00 6.65000E00 5.80000E00 -4.08000E00 -1.26000E00 -4.35000E00 3.47000E00 -5.47000E00 2.32000E00 6.35000E00 5.00000E-01 4.47000E00 1.85600E01 9.07000E00 3.28000E00 3.10000E-01 7.25000E00 -6.00000E-01 -1.06900E01 1.92000E00 -4.08000E00 -1.02600E01 -6.62000E00 -8.60000E-01 1.08000E00 -6.92000E00 8.40000E-01 2.84000E00 -8.10000E00 3.63000E00 1.72000E00 -1.25000E00 6.90000E-01 5.69000E00 1.84000E00 -4.13000E00 -7.28000E00 -7.52000E00 -3.76000E00 1.12000E00 -1.08500E01 -8.18000E00 -3.42000E00 -8.51000E00 -3.75000E00 -8.84000E00 -1.08000E00 -1.08000E00 -6.08000E00 -2.30000E-01 3.80000E00 -9.05000E00 -7.29000E00 -5.47000E00 -1.15900E01 -Frame 160 -3.89000E00 -3.95000E00 -4.01000E00 1.93000E00 -5.95000E00 -1.07000E00 -7.04000E00 -1.41900E01 -1.05500E01 -2.79000E00 -4.79000E00 -1.28500E01 -1.50000E-01 -3.06000E00 -5.06000E00 -8.12000E00 -1.27000E00 2.79000E00 -3.03000E00 -6.03000E00 -4.12000E00 -7.15000E00 -1.27000E00 -1.12100E01 -4.50000E-01 -1.36000E00 -6.30000E00 -2.39000E00 -4.36000E00 -5.39000E00 -1.45000E00 -4.39000E00 -3.42000E00 -3.42000E00 -2.42000E00 -3.39000E00 -6.39000E00 2.52000E00 -3.30000E00 -1.03000E01 3.49000E00 -9.30000E00 -6.48000E00 4.43000E00 6.67000E00 9.70000E-01 -6.91000E00 -2.03000E00 0.00000E00 -1.91000E00 -8.88000E00 -3.06000E00 -2.06000E00 -1.03000E00 -2.97000E00 -3.97000E00 -4.00000E00 -7.03000E00 -1.15000E00 -9.09000E00 -9.27000E00 2.55000E00 1.73000E00 -5.12000E00 -5.18000E00 4.76000E00 -1.00000E01 -3.21000E00 -6.21000E00 2.70000E00 -1.12000E00 9.40000E-01 4.06000E00 2.27000E00 5.42000E00 -6.34000E00 -5.46000E00 -8.55000E00 -3.73000E00 2.24000E00 2.39000E00 -9.46000E00 2.33000E00 7.48000E00 -8.22000E00 2.60000E00 -4.25000E00 -9.31000E00 1.48000E00 7.60000E00 6.90000E00 -8.30000E-01 -8.00000E-01 2.30000E-01 -7.71000E00 -2.89000E00 2.08000E00 -1.80000E00 -2.80000E00 -2.83000E00 1.14000E00 -2.77000E00 7.20000E00 4.47000E00 6.50000E-01 -7.29000E00 1.25300E01 8.95000E00 -7.75000E00 9.04000E00 2.34000E00 1.43000E00 -1.51000E00 -1.54000E00 -1.57000E00 -4.60000E00 2.28000E00 4.37000E00 5.20000E-01 -1.45000E00 3.52000E00 6.40000E-01 6.70000E-01 8.70000E00 2.97000E00 -1.94000E00 5.00000E00 4.15000E00 -3.73000E00 6.15000E00 1.33000E00 -1.64000E00 1.30000E00 -2.67000E00 -8.76000E00 3.97000E00 1.09000E00 -4.88000E00 7.97000E00 9.21000E00 4.80000E-01 -5.20000E-01 2.45000E00 1.51000E00 6.54000E00 -2.80000E-01 2.69000E00 -1.25000E00 6.90000E-01 2.69000E00 -1.22500E01 -2.64000E00 -3.73000E00 -4.85000E00 1.00000E01 -1.70000E00 -2.76000E00 -8.50000E-01 -3.88000E00 1.00000E01 -Frame 160 3.30000E00 4.39000E00 2.51000E00 4.57000E00 1.69000E00 1.72000E00 -2.50000E-01 -3.28000E00 -4.40000E00 -5.55000E00 2.27000E00 3.33000E00 -5.58000E00 -2.76000E00 -3.85000E00 4.03000E00 -8.50000E-01 -6.88000E00 -2.09000E00 2.85000E00 9.40000E-01 -4.03000E00 -2.15000E00 1.79000E00 5.85000E00 -2.97000E00 4.94000E00 1.09000E00 -8.88000E00 -4.15000E00 3.73000E00 -6.15000E00 1.67000E00 -3.27000E00 -3.60000E-01 -3.60000E-01 -6.36000E00 -2.54000E00 -5.60000E00 -1.75000E00 2.20000E-01 -1.75000E00 1.22000E00 -7.20000E-01 -2.72000E00 5.22000E00 -7.60000E00 -4.81000E00 -2.93000E00 -5.99000E00 -3.14000E00 -2.00000E-01 -7.17000E00 1.65000E00 -4.26000E00 -9.35000E00 -7.59000E00 -3.77000E00 1.70000E-01 -1.77000E00 -7.77000E00 -9.50000E-01 1.08000E00 -5.83000E00 -3.95000E00 -7.01000E00 -2.16000E00 1.84000E00 -4.04000E00 -8.10000E00 3.72000E00 -1.10000E00 9.30000E-01 -6.98000E00 1.87000E00 -3.01000E00 -1.70400E01 -4.49000E00 -5.55000E00 -7.64000E00 -3.79000E00 -3.82000E00 -9.85000E00 -7.06000E00 -1.80000E-01 -1.10900E01 -7.33000E00 1.55000E00 -2.30000E00 -7.27000E00 6.10000E-01 -6.27000E00 -7.36000E00 -4.48000E00 -5.10000E-01 -4.20000E-01 -1.33000E00 7.30000E-01 -1.11500E01 -6.39000E00 -1.24800E01 2.25000E00 -3.57000E00 -1.05700E01 -7.78000E00 -9.00000E-01 -8.10000E-01 2.80000E-01 -7.60000E00 -3.72000E00 -6.72000E00 -3.81000E00 -4.81000E00 -5.84000E00 -2.90000E00 -2.87000E00 -6.84000E00 -7.93000E00 -2.05000E00 -2.99000E00 -6.96000E00 -7.05000E00 7.86000E00 -3.78000E00 -1.07800E01 2.01000E00 4.19000E00 -5.57000E00 -6.30000E-01 7.46000E00 -4.21000E00 -1.02400E01 -3.45000E00 -5.45000E00 -7.51000E00 -9.63000E00 4.19000E00 -1.57000E00 -6.51000E00 2.40000E00 1.58000E00 -5.27000E00 2.67000E00 2.85000E00 5.03000E00 -2.73000E00 -7.30000E-01 2.33000E00 -3.52000E00 4.45000E00 -9.34000E00 -4.55000E00 -6.10000E-01 -6.55000E00 6.33000E00 5.60000E00 3.84000E00 4.02000E00 3.20000E00 -9.65000E00 -Frame 160 -6.89000E00 9.60000E-01 1.05000E00 1.14000E00 6.23000E00 -2.53000E00 -1.25600E01 -8.90000E-01 3.14000E00 5.29000E00 -5.00000E-01 -1.44700E01 -3.86000E00 -2.92000E00 -3.95000E00 6.99000E00 -2.74000E00 -2.77000E00 4.20000E00 3.38000E00 -3.47000E00 4.47000E00 1.65000E00 -7.26000E00 -3.44000E00 3.50000E00 1.65000E00 -8.26000E00 -4.70000E-01 -5.44000E00 -6.56000E00 7.29000E00 -2.44000E00 5.30000E-01 2.59000E00 1.71000E00 8.00000E-01 -1.14000E00 -2.14000E00 2.83000E00 1.95000E00 -1.96000E00 1.00000E-02 -1.96000E00 -1.99000E00 3.98000E00 1.30000E-01 -7.84000E00 9.50000E-01 -5.99000E00 -1.31400E01 4.50000E00 -4.32000E00 -3.41000E00 -3.47000E00 4.47000E00 -2.35000E00 -1.38000E00 3.62000E00 5.77000E00 -1.02000E00 1.98000E00 3.07000E00 -8.10000E-01 -7.81000E00 9.98000E00 2.31000E00 -7.60000E00 -5.81000E00 -2.96000E00 7.98000E00 -2.75000E00 -1.81000E00 5.16000E00 -2.66000E00 -5.72000E00 1.13000E00 -2.81000E00 -7.87000E00 9.20000E-01 -2.02000E00 1.95000E00 3.04000E00 -4.84000E00 -7.96000E00 -1.70000E-01 -2.14000E00 -2.17000E00 1.80000E00 5.89000E00 4.10000E00 -6.75000E00 -2.93000E00 1.01000E00 5.07000E00 -2.75000E00 -6.81000E00 -3.99000E00 -8.08000E00 -3.29000E00 3.65000E00 8.00000E-01 -1.40000E-01 1.89000E00 -2.02000E00 -2.05000E00 4.92000E00 -9.00000E-01 -6.90000E00 -2.08000E00 -3.11000E00 -4.17000E00 -4.26000E00 -2.35000E00 4.62000E00 2.80000E00 -8.08000E00 -4.29000E00 -3.80000E-01 1.65000E00 -3.26000E00 -4.32000E00 2.59000E00 -2.29000E00 6.80000E-01 1.74000E00 2.83000E00 3.95000E00 2.10000E00 1.90000E-01 -5.78000E00 2.07000E00 -8.40000E-01 -1.18400E01 6.83000E00 -6.93000E00 -1.10000E-01 -2.08000E00 3.89000E00 4.04000E00 -2.81000E00 1.30000E-01 -4.84000E00 -4.96000E00 -7.08000E00 4.74000E00 -1.08000E00 -2.08000E00 2.89000E00 -2.99000E00 -3.05000E00 8.90000E-01 -1.05000E00 -1.30500E01 5.90000E-01 5.65000E00 -7.14000E00 -2.32000E00 -3.35000E00 5.90000E-01 -Frame 160 -7.35000E00 6.47000E00 5.71000E00 -8.08000E00 5.71000E00 2.92000E00 -3.96000E00 -2.05000E00 9.20000E-01 -2.02000E00 -3.05000E00 -2.11000E00 2.86000E00 -9.02000E00 -7.26000E00 4.56000E00 7.40000E-01 -5.20000E00 6.68000E00 2.92000E00 -5.96000E00 -6.11000E00 6.74000E00 -2.02000E00 -4.05000E00 -6.14000E00 2.71000E00 6.83000E00 -5.93000E00 -7.08000E00 3.74000E00 -6.11000E00 -1.02600E01 4.70000E-01 -2.47000E00 -2.50000E00 4.70000E-01 -4.70000E-01 -2.44000E00 -6.47000E00 -4.62000E00 -7.10000E-01 4.32000E00 -6.50000E00 -3.65000E00 -6.71000E00 -4.86000E00 9.05000E00 2.38000E00 -7.50000E00 2.32000E00 -1.56000E00 -3.56000E00 2.38000E00 3.50000E00 -3.35000E00 -2.41000E00 4.56000E00 -2.60000E-01 -1.23000E00 -1.22300E01 -7.56000E00 -5.74000E00 -1.86000E00 -1.86000E00 -3.86000E00 -2.92000E00 -1.95000E00 5.00000E-02 -8.90000E-01 -6.86000E00 1.99000E00 7.11000E00 3.80000E-01 4.40000E-01 -1.50000E00 -6.50000E00 -1.06500E01 1.08000E00 3.17000E00 -9.68000E00 -8.92000E00 -5.13000E00 5.78000E00 -1.98000E00 -2.98000E00 -5.01000E00 9.00000E-01 -2.01000E00 -4.01000E00 5.93000E00 9.17000E00 -7.50000E00 -8.68000E00 -8.90000E-01 -6.86000E00 4.99000E00 2.00000E-01 -4.74000E00 -3.83000E00 -1.89000E00 -1.89000E00 2.11000E00 2.30000E-01 2.90000E-01 -7.65000E00 6.17000E00 5.41000E00 -7.38000E00 -3.56000E00 3.38000E00 -6.47000E00 8.38000E00 4.68000E00 -3.14000E00 -2.00000E-01 5.83000E00 -1.96000E00 -2.99000E00 -3.05000E00 -1.10000E-01 -1.08000E00 -6.08000E00 -1.23000E00 -2.30000E-01 -7.20000E00 2.62000E00 8.74000E00 -2.96000E00 -2.02000E00 4.95000E00 1.30000E-01 -8.40000E-01 5.16000E00 -1.66000E00 -2.69000E00 -4.75000E00 1.30000E-01 -8.40000E-01 -8.40000E-01 -5.84000E00 5.01000E00 1.19000E00 -3.75000E00 3.16000E00 -3.72000E00 -2.81000E00 7.13000E00 -1.63000E00 1.34000E00 -6.00000E-01 1.40000E00 4.46000E00 -1.03900E01 3.10000E-01 9.34000E00 -3.36000E00 -4.45000E00 3.43000E00 -4.45000E00 -Frame 160 -1.57000E00 9.40000E00 -1.30000E00 -3.33000E00 -1.42000E00 3.55000E00 1.67000E00 -5.27000E00 4.58000E00 -2.70000E-01 -1.27000E00 -3.00000E-01 3.70000E00 -4.18000E00 1.70000E00 1.76000E00 3.82000E00 9.40000E-01 9.70000E-01 8.00000E00 2.40000E-01 1.24000E00 1.27000E00 -8.70000E00 1.03000E00 -1.94000E00 5.00000E00 1.50000E-01 -8.50000E-01 4.12000E00 2.24000E00 -2.70000E00 5.21000E00 7.36000E00 -1.43000E00 9.51000E00 1.78000E00 -1.19000E00 -2.50000E-01 -1.28000E00 3.66000E00 -5.25000E00 -2.43000E00 1.48000E00 -2.49000E00 9.42000E00 -3.31000E00 2.57000E00 4.63000E00 -2.25000E00 2.66000E00 -1.28000E00 4.66000E00 1.78000E00 -3.19000E00 3.69000E00 -6.22000E00 4.57000E00 3.69000E00 -4.22000E00 -7.37000E00 3.39000E00 -3.52000E00 4.36000E00 1.48000E00 5.10000E-01 5.51000E00 -2.34000E00 6.57000E00 -2.50000E-01 7.20000E-01 8.72000E00 9.60000E-01 -4.00000E-02 1.19300E01 6.26000E00 -9.59000E00 -1.92000E00 -1.01000E00 3.93000E00 -1.98000E00 -7.00000E-02 8.90000E00 3.14000E00 -2.80000E00 5.08000E00 2.20000E00 -2.77000E00 -8.90000E-01 -1.95000E00 6.96000E00 1.14000E00 1.40000E-01 2.11000E00 1.01400E01 -2.59000E00 -6.71000E00 8.05000E00 1.26000E00 -1.74000E00 -5.83000E00 9.96000E00 -7.70000E-01 -1.83000E00 -5.92000E00 1.28700E01 4.23000E00 -7.68000E00 -2.95000E00 2.93000E00 9.90000E-01 -1.01000E00 4.93000E00 -4.95000E00 2.87000E00 9.30000E-01 -7.00000E-02 -2.10000E00 -4.19000E00 -2.34000E00 -2.43000E00 -5.20000E-01 -1.55000E00 -1.61000E00 -6.70000E-01 -7.70000E00 -3.94000E00 9.40000E-01 -4.03000E00 -1.50000E-01 1.08500E01 -2.82000E00 -2.91000E00 4.00000E00 -5.88000E00 -1.06000E00 4.91000E00 1.06000E00 3.09000E00 1.80000E-01 -3.82000E00 2.06000E00 -4.88000E00 -3.00000E-02 -2.03000E00 9.10000E-01 -5.06000E00 -1.21000E00 7.60000E-01 -4.21000E00 -1.33000E00 -1.36000E00 -1.39000E00 1.58000E00 -3.60000E-01 -2.36000E00 -8.42000E00 -6.60000E-01 1.34000E00 -6.60000E00 -Frame 160 -6.78000E00 6.04000E00 -1.75000E00 -7.78000E00 -1.99000E00 1.98000E00 -3.93000E00 -2.00000E-02 6.01000E00 -7.80000E-01 -4.78000E00 1.00000E-01 -6.87000E00 -1.05000E00 -5.00000E-02 -6.02000E00 -1.01700E01 3.56000E00 -3.29000E00 -3.35000E00 3.59000E00 -1.26000E00 -4.26000E00 -1.35000E00 -5.35000E00 -1.47000E00 1.53000E00 -1.38000E00 -5.38000E00 -1.50000E00 -5.00000E-01 1.53000E00 -1.03800E01 3.50000E-01 4.10000E-01 4.70000E-01 2.53000E00 6.50000E-01 -1.29000E00 -2.29000E00 -2.32000E00 -1.35000E00 -3.50000E-01 1.68000E00 -4.23000E00 -2.32000E00 4.65000E00 -9.17000E00 -1.41000E00 4.59000E00 -1.23000E00 -3.23000E00 1.71000E00 -6.20000E00 -5.35000E00 3.53000E00 1.68000E00 -2.30000E-01 3.80000E00 -5.00000E-02 -3.02000E00 9.20000E-01 2.98000E00 2.10000E00 -8.10000E-01 1.19000E00 4.25000E00 4.40000E00 2.55000E00 -3.36000E00 -1.45000E00 -4.48000E00 -1.60000E00 1.37000E00 2.43000E00 5.20000E-01 -2.45000E00 -1.51000E00 3.46000E00 5.80000E-01 6.10000E-01 -3.36000E00 -1.45000E00 4.52000E00 6.70000E-01 7.00000E-01 6.73000E00 2.94000E00 -8.97000E00 5.76000E00 7.94000E00 1.18000E00 -1.79000E00 5.15000E00 4.30000E00 -5.58000E00 2.24000E00 9.30000E00 -1.43000E00 -1.04900E01 7.18000E00 -1.61000E00 2.33000E00 7.39000E00 6.00000E-01 -3.40000E00 1.24800E01 7.84000E00 -2.95000E00 -1.07000E00 -5.13000E00 4.69000E00 1.81000E00 5.84000E00 3.99000E00 5.08000E00 2.00000E-01 -1.83000E00 8.00000E-02 1.05000E00 9.05000E00 2.29000E00 -6.80000E-01 2.60000E-01 7.23000E00 -1.59000E00 3.20000E-01 1.29000E00 1.29000E00 1.12900E01 -6.41000E00 9.35000E00 2.59000E00 -9.38000E00 6.29000E00 8.44000E00 1.65000E00 1.65000E00 9.65000E00 8.90000E-01 -1.40000E-01 2.80000E00 -1.70000E-01 -2.30000E-01 -2.90000E-01 4.65000E00 -1.26000E00 -6.35000E00 4.41000E00 9.50000E00 -3.26000E00 5.59000E00 7.71000E00 4.89000E00 3.98000E00 4.04000E00 -2.90000E00 -6.05000E00 7.10000E-01 1.68000E00 -Frame 160 -1.32000E00 -3.41000E00 4.44000E00 6.53000E00 6.80000E-01 -4.35000E00 -5.30000E-01 -5.90000E-01 5.35000E00 8.47000E00 6.68000E00 1.83000E00 -3.17000E00 -3.20000E-01 6.20000E-01 2.59000E00 -2.38000E00 1.50000E00 4.50000E00 -5.41000E00 2.38000E00 -2.59000E00 5.29000E00 3.41000E00 -1.53000E00 3.80000E-01 5.35000E00 4.70000E-01 -1.56000E00 2.35000E00 -2.62000E00 1.26000E00 -1.74000E00 8.17000E00 2.38000E00 -3.59000E00 3.26000E00 7.32000E00 -5.00000E-01 2.44000E00 -2.53000E00 1.35000E00 -6.50000E-01 1.29000E00 3.29000E00 -6.65000E00 -8.90000E-01 7.05000E00 4.23000E00 -3.68000E00 1.70000E-01 5.14000E00 -1.74000E00 -2.83000E00 3.05000E00 -2.89000E00 -4.01000E00 1.84000E00 1.18700E01 4.20000E00 -6.71000E00 1.05000E00 -9.50000E-01 -6.01000E00 -3.22000E00 -5.34000E00 4.48000E00 4.60000E00 -1.28000E00 -3.40000E-01 1.63000E00 6.60000E-01 6.60000E-01 4.66000E00 2.78000E00 -2.16000E00 -3.25000E00 -3.37000E00 -4.90000E-01 3.48000E00 -3.43000E00 2.45000E00 -1.49000E00 -4.55000E00 -1.70000E00 7.24000E00 1.45000E00 -5.20000E-01 8.45000E00 -3.10000E-01 -3.34000E00 5.40000E-01 -6.46000E00 -2.67000E00 -1.76000E00 -3.82000E00 4.06000E00 3.18000E00 -4.73000E00 4.12000E00 -4.76000E00 -5.91000E00 3.91000E00 3.03000E00 -1.88000E00 5.06000E00 -7.90000E-01 -2.82000E00 -9.10000E-01 -2.94000E00 -4.03000E00 1.85000E00 1.91000E00 1.97000E00 -1.97000E00 -5.03000E00 1.08200E01 4.15000E00 -7.73000E00 3.00000E-02 3.00000E-02 -2.97000E00 1.19400E01 -9.70000E00 -5.00000E00 1.85000E00 -6.09000E00 1.73000E00 -3.21000E00 -5.30000E00 2.55000E00 -4.36000E00 -2.48000E00 1.04600E01 7.90000E-01 -4.18000E00 -1.30000E00 -2.33000E00 2.61000E00 1.70000E00 -3.24000E00 6.70000E-01 -2.30000E00 1.64000E00 -3.00000E-01 -4.30000E00 -1.42000E00 5.50000E-01 -3.42000E00 4.49000E00 9.64000E00 -6.06000E00 -7.24000E00 3.55000E00 9.67000E00 -1.03000E00 -1.06000E00 -2.09000E00 -1.15000E00 1.82000E00 -Frame 160 -1.12000E00 -3.15000E00 -2.40000E-01 -2.40000E-01 5.76000E00 4.94000E00 -9.10000E-01 3.06000E00 5.15000E00 -2.70000E00 5.21000E00 5.36000E00 -1.49000E00 1.45000E00 3.48000E00 -4.30000E-01 4.54000E00 -4.34000E00 2.51000E00 5.57000E00 7.20000E-01 3.72000E00 2.81000E00 5.87000E00 -1.98000E00 -5.07000E00 5.75000E00 1.39000E01 -4.71000E00 -8.90000E-01 -4.95000E00 1.87000E00 7.90000E00 1.10000E-01 -9.20000E-01 8.02000E00 -1.77000E00 1.14000E00 7.14000E00 1.32000E00 5.32000E00 4.40000E-01 4.41000E00 1.50000E00 -2.50000E00 -3.62000E00 4.23000E00 3.32000E00 -1.62000E00 5.29000E00 5.41000E00 5.30000E-01 -1.50000E00 3.41000E00 4.70000E-01 3.44000E00 3.50000E00 4.56000E00 4.65000E00 -1.26000E00 5.65000E00 7.70000E-01 -2.26000E00 1.62000E00 3.62000E00 -3.32000E00 9.53000E00 1.27700E01 -4.90000E00 3.89000E00 2.95000E00 8.98000E00 6.19000E00 -5.69000E00 1.50700E01 8.46000E00 -6.36000E00 2.37000E00 3.37000E00 2.40000E00 1.40000E00 3.37000E00 8.40000E00 2.58000E00 2.58000E00 -2.42000E00 4.43000E00 7.49000E00 2.64000E00 2.64000E00 1.64000E00 1.61000E00 6.58000E00 -3.30000E00 8.52000E00 5.70000E00 9.79000E00 2.00000E00 4.97000E00 4.03000E00 5.06000E00 -3.88000E00 -1.09000E00 2.79000E00 -2.10000E-01 2.70000E00 8.70000E00 7.88000E00 -9.70000E-01 -1.00900E01 1.52000E00 1.49000E00 -6.54000E00 3.19000E00 6.22000E00 -1.66000E00 3.22000E00 8.25000E00 -1.57000E00 2.31000E00 -1.69000E00 4.19000E00 9.25000E00 4.60000E-01 1.40000E00 -3.63000E00 8.19000E00 5.37000E00 -3.54000E00 3.28000E00 -6.90000E-01 -3.78000E00 1.04000E00 2.01000E00 5.01000E00 3.10000E00 7.13000E00 4.28000E00 -6.60000E-01 -2.75000E00 3.10000E00 3.13000E00 1.60000E-01 -2.90000E00 -2.05000E00 -2.17000E00 4.71000E00 -3.20000E00 -1.35000E00 -1.44000E00 8.47000E00 2.68000E00 2.71000E00 5.74000E00 6.86000E00 3.01000E00 -4.96000E00 -1.17000E00 2.74000E00 -8.23000E00 -Frame 160 -1.53000E00 7.38000E00 5.60000E-01 8.53000E00 -3.26000E00 -6.41000E00 1.35000E00 1.35000E00 3.50000E-01 4.32000E00 4.41000E00 3.50000E00 -1.44000E00 -4.53000E00 1.29000E00 -7.10000E-01 -5.77000E00 4.02000E00 -2.89000E00 -2.01000E00 9.00000E-01 -1.00000E-01 9.87000E00 3.14000E00 2.00000E-01 -1.83000E00 1.08000E00 -2.92000E00 -6.04000E00 -1.25000E00 6.90000E-01 -3.10000E-01 -2.34000E00 -3.43000E00 -5.50000E-01 1.42000E00 4.50000E-01 -1.55000E00 5.39000E00 5.40000E-01 2.54000E00 1.26000E01 1.96000E00 2.99000E00 5.00000E-02 -2.98000E00 9.00000E-01 -1.10000E00 -1.16000E00 1.78000E00 -1.90000E-01 -1.22000E00 -2.28000E00 3.63000E00 7.20000E-01 -4.28000E00 -6.43000E00 -2.64000E00 -5.73000E00 -2.91000E00 -5.00000E00 -3.15000E00 2.76000E00 5.85000E00 1.03000E00 4.06000E00 -2.82000E00 -2.91000E00 0.00000E00 5.00000E00 1.15000E00 -4.82000E00 3.03000E00 -6.88000E00 5.91000E00 1.20900E01 -5.55000E00 -7.30000E-01 -1.76000E00 6.18000E00 -6.40000E-01 -8.67000E00 -2.94000E00 -2.03000E00 4.91000E00 6.00000E-02 -1.94000E00 1.00000E00 2.03000E00 -1.91000E00 6.03000E00 2.21000E00 -8.73000E00 5.00000E00 3.15000E00 -2.76000E00 -8.50000E-01 -3.88000E00 -1.00000E00 3.97000E00 9.00000E-02 -7.91000E00 -1.15000E00 -2.18000E00 -1.24000E00 1.73000E00 1.37900E01 2.10000E-01 -3.79000E00 1.09000E00 4.12000E00 5.24000E00 -4.61000E00 1.24000E00 1.27000E00 3.00000E-01 5.30000E00 1.45000E00 -5.20000E-01 3.45000E00 -3.46000E00 5.42000E00 5.57000E00 -5.28000E00 3.54000E00 6.63000E00 -1.19000E00 -5.25000E00 4.57000E00 2.69000E00 1.17500E01 1.08000E00 9.08000E00 -2.68000E00 1.20000E00 5.20000E00 -1.68000E00 3.23000E00 6.29000E00 1.44000E00 -2.56000E00 5.32000E00 -2.56000E00 -6.80000E-01 2.26000E00 7.29000E00 4.70000E-01 -5.60000E-01 1.03800E01 -3.50000E-01 -1.41000E00 8.50000E00 1.71000E00 -2.29000E00 1.05900E01 3.86000E00 -3.08000E00 3.77000E00 1.83000E00 3.83000E00 -Frame 160 5.89000E00 2.01000E00 -1.99000E00 -3.11000E00 1.07400E01 1.00000E-02 -7.05000E00 6.80000E-01 1.65000E00 4.65000E00 3.74000E00 7.80000E00 9.80000E-01 -5.00000E-02 7.89000E00 1.07000E00 5.04000E00 1.13000E00 -9.00000E-01 4.01000E00 1.07000E00 4.04000E00 1.10000E00 8.07000E00 1.25000E00 -2.78000E00 4.07000E00 2.13000E00 -8.70000E-01 5.04000E00 2.13000E00 -8.70000E-01 4.00000E-02 3.98000E00 8.04000E00 5.22000E00 3.31000E00 3.34000E00 4.37000E00 4.30000E-01 9.37000E00 2.58000E00 2.58000E00 2.58000E00 -4.20000E-01 -3.51000E00 1.31000E00 4.28000E00 7.34000E00 -5.51000E00 9.25000E00 3.46000E00 -1.51000E00 7.37000E00 4.52000E00 -2.42000E00 -1.57000E00 -6.90000E-01 5.22000E00 2.31000E00 -2.69000E00 5.16000E00 1.25000E00 -4.78000E00 3.01000E00 3.04000E00 -1.93000E00 4.95000E00 1.04000E00 -1.99000E00 4.89000E00 4.98000E00 -1.93000E00 -7.05000E00 1.36800E01 1.04000E00 -9.99000E00 2.65000E00 1.16800E01 7.98000E00 -4.84000E00 9.50000E-01 -3.08000E00 1.77000E00 4.77000E00 -1.14000E00 -2.23000E00 -3.50000E-01 8.59000E00 -4.20000E00 6.20000E-01 2.59000E00 6.20000E-01 5.90000E-01 -4.40000E-01 6.50000E00 1.65000E00 -5.35000E00 6.44000E00 -1.41000E00 -6.50000E00 -7.40000E-01 4.20000E00 -1.71000E00 -8.00000E-01 8.14000E00 1.03500E01 4.62000E00 -1.22900E01 -3.71000E00 1.14000E00 -4.86000E00 1.96000E00 -1.00000E-02 -2.04000E00 5.87000E00 2.00000E-02 9.90000E-01 -3.01000E00 -6.13000E00 1.66000E00 -8.31000E00 -1.58000E00 3.36000E00 -3.55000E00 -1.67000E00 4.27000E00 3.90000E-01 1.39000E00 -3.58000E00 3.30000E00 -3.61000E00 -7.30000E-01 -1.76000E00 -8.20000E-01 6.15000E00 -6.70000E-01 -8.70000E00 5.03000E00 -7.82000E00 2.94000E00 -9.70000E-01 -6.00000E00 4.82000E00 -3.03000E00 -4.12000E00 -2.24000E00 -1.30000E00 -2.33000E00 -7.39000E00 2.40000E00 4.90000E-01 1.52000E00 4.58000E00 2.73000E00 -5.18000E00 -8.33000E00 5.43000E00 -1.03900E01 -7.69000E00 -Signal: SpeechEndSignal -Signal: DataEndSignal: creation time: 1422745324687, duration: 5235ms diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-window.dump.REMOVED.git-id b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-window.dump.REMOVED.git-id deleted file mode 100644 index 5d81f95e..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/after-window.dump.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -4b091263b283fa8fc19c849e6da1276c1c267f6a \ No newline at end of file diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/frontend.xml b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/frontend.xml deleted file mode 100755 index eceb3aee..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/frontend.xml +++ /dev/null @@ -1,136 +0,0 @@ - - - - - audioFileDataSource - dataBlocker - speechClassifier - speechMarker - preemphasizer - - - - - - audioFileDataSource - dataBlocker - speechClassifier - speechMarker - preemphasizer - windower - - - - - - audioFileDataSource - dataBlocker - speechClassifier - speechMarker - preemphasizer - windower - fft - - - - - - audioFileDataSource - dataBlocker - speechClassifier - speechMarker - preemphasizer - windower - fft - melFilterBank - - - - - - audioFileDataSource - dataBlocker - speechClassifier - speechMarker - preemphasizer - windower - fft - melFilterBank - dct - - - - - - audioFileDataSource - dataBlocker - speechClassifier - speechMarker - preemphasizer - windower - fft - melFilterBank - dct - liveCMN - - - - - - audioFileDataSource - dataBlocker - speechClassifier - speechMarker - preemphasizer - windower - fft - melFilterBank - dct - liveCMN - featureExtraction - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/test-feat.wav b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/test-feat.wav deleted file mode 100755 index 450b42cba9b4a7cccbccee2c427aea7f27dae058..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167564 zcmYJ63EU3V`~T0G`+4j{$S!-95F$%ti;7B8ipm-hQc2k=LL14FC0k{S(qc(bWG&gV zQ}#7vDW2uN=bZohGk4$L-@In-nKNh3ob|ds*XO$C(f0lpEk=G2nD$K`zqd!<0j2U9 zV=UX7jW`)*Oknbw?p+3S=}evmY)wrQQ`g*W>X=&Q95Yl|8$RyS+5YkWvRz~U$6w`F$G_Mw`U}zix4-QF_E(~N*ZED0a-8vJ{V{*apYw

    *3fN-QH5=oXLVIqazWL0}oaHq6*>iGU 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­o^w>p`7)1A*Nqyw!F8~+TOa#U11 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%0A&U-`W>1JP7!kw?mjwiG4 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≀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�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 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/test.aiff b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/frontend/test.aiff deleted file mode 100755 index da5a0d1bc4ed3fb942c999ad78ac12e4701f107d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86448 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 r`8WRQ|C{+|P2)~;%pM%Rj{Ud%5o1*vBY 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%0D` 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 z zMk2*qDmdPIMn>(3sTu2xiI2SL`fZ)dPN(Xihck&b*<1WH`(yBeb9(N$SGn%vhW7Dw zEU!Sy+CpEZII1&w7Lo2?GY#FvZH67)*!jdCHSSuXzS&c+q1KeoiN8@Dm?EY~N9BX? z%NT{X`7&xVFOX+G0V%&I;+x+KPkS!mifCE<{cnkGHv~~!+v*y$S@;)?6jm-Jz=?%nw$_52{1?bt!;`5yFDfBF!CD)RKvBXT=qg%(E@9?2y2vvcipq5m+r7sw z+$G%t+g6i)gSWO5q|!g$Q=M?T{o&yb7N?0D!FJps9uvQc1*BGBF3uOX3TMK(!yHcJ zXW{-rqF7RTEo*8O!;8xNLS%QJ$WBxy)q$Q2f3HnosAgvfW*}DN0Ep@dTu18_$4PgZ zw|eBc$hwh7y)O4zdour%UC-=bF0jij_pP}dZCnly?Ug+tcOjQ#KVv;&k@5SBk;Qna zUOPxa#ETqUKeHw7lgKAK8XW)wym;D`Jm)c zr>nF!S$m;bIR3iyq4;+DBK$I?TfNbB9S|!i)wo8-?|( z%dTe&!{6wQ#Km0s95?~zH;NaL^z?%#l9ZIu3=xX4lWmbkj}BS z*)_~H`UA-FRd6?FCk~>wcny{E;?O3Q#m(8v=z()XM_0>5O z*b>BCtN0D<>o3B0FrP;Y(Zb1aKd|KKuoGZUZ; z8W40RPh4C+4jrqpRXE`o6cb_c>o@HBREF&`e*|A(Z zOAEf4wV3Uu%>=7`jx9U7b5&8#`E5zE^yZ$iOW0N5@zsV;n8C$aeB2UFXX~)Z%zXMF z^%dRwebA&Ffkx^zPMOtUyxoG%Xg5~%0s2}CkkK@UBTRYa0^%zdh`M{Esh}BFz)mWK z$g3|Ru=;RgxQ6ws1b4TC!a!s@!SD$%+zW-n$S4YhlTqim5 z&K#lVz=Ll%!ywlfg|~FRC1CyJ*y(=mtrKaB$`;ip@`$&jyPf0DZTZ!b!hf)CuupKd zbfaYlDHk!2OrjHZn#C* z8-5U45gH!q0N;*Aq2{5Ep~0bfp`Gw)I1m~d(u1ReM&LwX3*4SA1#ZFPC3kRjFd;N5 zGzV^Ql|yZjKh%S#%V43Acw9Q7e9_JsFVQh+50yiAvL}2sOEJHg6YOFxwbdc;=A!MWbJr+d#tl!^Qham!oC zQ_oco^y96335$!X%6Q*KcoJJi_&(cHZtBlxJ8@scIzH%gsp>ZBqH7>wrKFs*MexB9~{lQAlBaC zeS9e}t~Z0MIRvZQ64cS{+zU20o5CpQNv9zL&4QMvGbR#)P?&YX^y~;s$avr})Ky!B z6ThSKOl~E=g8xnvshU(pDujCHDfmp$;%1?Oa2NgwRQLqes9@+_aC2}>uopa63J22z zI|4%j-2#IGqu|h2Ip7Qg{onmB{OkNx{8_%=zWV-m{&sgbgRfnFyd}L!SCoS`EZ!F;QSbp(~?a3~y*A4d+s2jJ!h@U*R}ld*enj$ z!n15^_BK-zcO?aqaSJFUQpkS@i%IDhlnqjb@DrYKhr-2i7i<$dNY5ofI*IppIqnQr zj1hC;1X?K+7g(Wz@IqKDR)ZJBN%N7Q zB(iZ_P0L`uv-KAolr-ym#Ik8t&Q==EI74my;HAgdo>_TKccBfLBm8Cn}G7knL<7pMley`BEi{$Bp>_@|q{rN5@Xls^$G zw%^yqSHM@)*VDJvciy+iSIBocYhl*5EPvJzUrv9eKq%Njh?lpk!}T)I-u{Eh!Ls^Z z@cp-%#mT~SFSaxMPgn7eEg!IU9V}(6|JnPx(mnYjtF9wm&tlrf{ET`XF%^zkH6531`>ntD4*VO--|zyN!1>w6Ahv&_2f`aG zJMF{%h#||G-?VwkVClASD4Y+zk!!+zgqEn%rl4xvT>1@ab}4X_`@vZ(S9n3F4$hDC z(7o_W;j{Q&IxA0xH|7QOIk#wbXcWpop|H-3$F7(F^>!j^vY#jmc*X6}FYe6eg(IS5 zWo#kqPpgQP`pY&M&YuHqwQMGm#>B|GwXiV)2v5X|7KOndXae|Gc&V) zR%(`-^%MVg`qucGU_bT^ID#!gU4>s#U3G_cPm9u8fWu!yi#FO5`zf9sXjy5s*-O|T zTgO-`vbmX8Oa;p_TM5?&@3E)`v3&f@_%U(zn2!-}-20vT99JFtogViwPwxm{WK#6m z=pE7TqNYV&^L}?Hxt2TX+2d>q|Io4xkj zTH!LG_rb)_o=`Wqwrvs&_+91~ZSX<7gjyFX)CxBUbqqcXWCs2V#)S6^^`!GMr8=P9 zleJgcbks|_YVWn3`eI`Yyo$PzU8wGKC-jqRaBbj>(%gF2dfVF1`kUXwUx1fHmi4vm zsr{UzzjH4r_Fo-k9GmSe>}60}2-~*8tLh*;t)3y@s?Ia~P0LW6KKZ!9Y$Ri+b5Om> zC%FA=#3AVMj)9L*4rk_kblCGKDX12AMu(u0_zbnVAYzQ%;m@I~aG@L;l7cOQs{;lc zN}Ks@{!6|T-vr+r-%MXA->j@dnX#EhMvKg2nYS~?WOA7=GrXD8Gw)}f%$$@tE3;76 z-@ZqFXE1xHX*eJV(na`p^;AbF*ANw?tILf^WEJKNm%;C_^|W8Iz2m2H*O`BqY@EVR zbVPe5MNWx%5+}wlk3SXrJBo|AtjHG;E4`IH zsjd;uXvYy-W$QspQSKJAlYWgU%xb7uUZslB9k7D8$jfHD4yP>f4EB;c6cK72ItJ&) zq2Y7zRk8~aLN=ic&c>?nU~2&{CNX$1=!8GlS=@%JQS)gDT|qSNyLnn}Op2~H#+e-m zFEsW~Nh{Pg->IGSN@gp2fqRac&Qa8LAKUWS`@&b(>geOx={V__?a1a>Z!d~K*KXTW?1k)yZ8>cdtXJW;SQgCasq6;kB>f%V`voZ8BFS@z3|>Rowaa)5qV*&7 zkg`L*fzIe;(Lf%QO}K$mzg0Ls{3r7_3%%vHgj2G$t^w^9-8A%xl8Qn5IXY|Y5oH;JDbY_E0Yu0FAlR%k}19i9=@&%=$ z`T~^xg>q@7j8@6qOub}R^OtRIM@dJ>c8G7rePqh8tt@+O$*#f?Gom}hHA@f^ya~@@ zgHg>QrhBftKf1?xx_O63tcu)#y?GRDy^Y`}0`p^05_>N}f$vT-iBC}Sem@y;cXZo=8%IV$GkE93F z?HPQAEu&1v-gnXZM!0!uo5#~rml?XLLt*2OJ3o87rN|)q#X=}jGWbacWi8IDY@WwGyW3D3BL0R^kIArWl z%Sxe8_rMKbQ{OY6B`_#BD@2E%h6;qr1{((!!R553|FQpO;7#yssCoEgxF%egrb@5m zSMWEl33hu7l$f*BhiWHnf$V< zgQx2Yx8HNd8}v^14)yq4Eu63I$8BlW&Q=-vsLfDForfpJL_TDxXc@?@W{)sy>6+9j zqO_T*lll;iLr=O59HG`L6;bicCbz|&Iw@F$iD4x)Ec6_%oHr5m)eB?~eD=@t=kniz zbMGAALf;Iyd6x5WaP<8*t3uYo%!?UZ#**|A>8sOkrT&fISCI|Xms`v8m4Mcq$j@ZsuiE#xs(3t}B$sKsWjV<9W_3=n9(V5Y zPL0lp8<{vW+x^5T@vUNNMaFq!Ju#k5o(^6*Vt&M{h!+t? zjbDcx{26zFd&s@!ZgK;-yKI=@83&y~?jdTLkC9(5Mr1J!onp800geyta8C`CE@0rY zq>voG8LAq38cYec50(w)g>PccV6k9H^bLOnmISF^WVm#NKT0L0_-wm|)rDyKTOwJ1W?gv(ezJ(_Xg@jz;E5T)ffInA23DgQ54VM)6 zNClL2>PIc8zcEgm|Kgw$NSp48;x|J_-NRA@DRG5}FuV4rlYb z@V~tfnt>ebd2lVF!fsf%)WDy9`W62&|8Tfv$NBxf&%QKdUN7K~-W9QYC9GqL|8yWW zv@Tp-w93DfmD(2g(p^9dSPUM9C(#4!N_FK*+ftkXx8TX+ne9aFjuYq;^cZ#vKgF@a zGdk*VY+}NbgmdxPV$Vd*_0(|{cg8yxIrF*};AbA_dg(MB(Tzy#^$hSt={%5IO}*`^BsaS%ZAX{PluQLouktl@bGp zq)vwGB9eF=ekh1y6?u^&sWbIBC}XdX7pTQhPrYD@vPIaR%qsZRON`FWvkbBhwD&+< z+R+p3t>#VlRQ7apC%cw9uRF3k_S(DKYohnr);=Cl#XFpV`{87sV7tlJu&iYb`cLh= z1+g7dQLOm{(~%{O(;%ZPM>nShyv}s=V;;jjI-8Uwz7-$Cx%e!qzXRbScNw>509u>b za2wwcz5zGMR>Cg$%|;@MeF;abszOG1X*f@K8*;A+!B2tqfuH`9{`>xTHdxW&i=f9)?dM&>Nf%_LLG$!>AGA;?Ty%Wq*hx^hnrfo@{iVoxXr{^Z^D24KTi{n z#Wln>n(IZ!phr8BEoq(NeCz!b9f+HeP&J`s938#Md(Y*7Q{-YtLFY|pr0cUYuhX!f zMqU+b&0*bOZD;#o`)PC7iu1$RLey2`gj!8rBYqH)#0pZXJXPJU-GKMbL%D&tJv1QT zN9ef|W0 ziob)-&q2Nl5AQ(k2vdkYPl8EkZZ*C`J-Q7Y+a+qEdLI4y;!wDrLkF!nI`&RzGdTF7 zB*H~WfOl(axIVXpH(3h&fm;eg5bbbqNJ&DKG&j82M$27rbDcwfe~NfQ$PAZ71u-pH zCAcY2BTykQCGadD2Cidw6%6DE)C{x@6bXX}V zr${s8w%TN(7`xv3mowTk(i`pl?5bhUYk5qU2gBqG(~Y0+$n-d)o5V2*@8gwNHR_T# zr+d0H-4X5l$LVn8bM1D{bp&ixtPd?Fd}MlBit#`AqHthtW%00yR4O8c?~*L&VKe+y z=m4i1D|BJ=l`~QWVO?;nzoxIGue4tY#D@!rm!t#ea14WUQW~76Zon1#2D<&#wQl+p zAj^Qas zpvSTp)!jmvykI3S{I`?gU*^FY96~4UiM#>cdAE>9G16^xR8GSUELQ3-U4t%lF1oVC zp?0dIJdtzD)uoDJPC*NO4hFG9oX-!A{zN=wW1B zFn(S9ir8sUO}&?0HF470o!guRT@78gom(84HkWmvr3*)LRk%A`V@qGl7dZUPpx+P~ zI;YN)E(rI-_ru!+RU8c8yX8<7q=~b__MqW=mi0L6r|)y1VtABTOs);jrQPTw3i1so zN)9R4R9dfQfJH|@Mz`j?GF{i) z6+J~f^Pzs};cVvUVxMSRYdyl>g|}5bZY`U|lxIfJ$I)SFK`tZyGjBs*^cE8(t+010 zA)ovUYKJrEY>$=tp$AqEuDS_QJSs>%(etvx-!zEs?iuB?@*Yl6V^FO(ZJ3xZ2#z!F=IKr`vPNyWM-<-QH1^U&jnY z_53UCw8Y!zyM@SSu~QR}n`habWQ2O;TcK#ltM@j}njBf2s*PKy1=|l!V%z!qR>2nSut070+xf$J)p^i) z!g=5M$(iO%$G&ceTXHLI$;VE=BM49DpVm)s54(bnSdb~f45pV;>(Tu>Wu_YyjRpEc z&89U+=dv7B2~(g6_>R+RjWl0c1|7u?Xrx}jp*Th^D3^z7ZXpzC1C%hl&t9M|606bL zJIv?IQG3H+b7p7M{}P!fcXsF?i=SM?P^d+=~zZD0)) zdCtHPe+FW{=RUjN=}+_B@fGqHMT|Qw91Wk(fGp=n(H=v)!!+y!0TocWz~oZX$J zos%5->@BSgEhE@m%vf~q$D-Fe1a9%W$nWNQT~)eCC4?)Xx}mM1HHZQpishwqVhf>2 z=z@QFR~j2)TdeGx&2ph%=_63tIl-x4|WM zuH%jKiE992%kOTFCx=IHFLIl%na~Y4aP@T!!z%rBcEH{~W&g)k0p6I+I6G^Dx71SV zBXpXBpuvA$6aIz%Yls>ev_9M$nyL`|?oE+W zChEDV?v}xhO`eI7hokIKtGt(-t*vd@D^z}J8NHKBvz>Eqi=yM}WP6g7oYXn7WZa#o zx84Wt9j?-@B6up*aMo>goVJzc7qVsP1>`~K(idVHX(hC4mCd_)rg~RCE*jwgdN+>n zt?(o`YyTzW2$v6L`c7uj8CB9Zrq{|0`nrWovAt?BF!_QGxSy(lX-bLOjH$(5;J+22 z{j`-`#!cmq**-chyQ+CQc}v1mE=MF2IVNI}ca~?l`=zU{>z1>%^O@r>$1S_Vu3DGD zcd!h*A3nBwKpVJ#Zg&mnh>l?*W{5FZFR#5*Cdx_DLt$I^cqlIPEtn^CJ9IIeCS=D7 z4OIrJg|zM3Bkhzn82Z}dQ2I1Mk94m3OC13hvqfMJHo$!Cam?9V22-m8)Ocb23u+-N z^;+1U70@9cr<9NniDd;JR;YS#dmu4z7`53==yo^*T;LI+@h<*~sMF5(Wo7lu%AM6Z zE131#7xE_sYlNzYjqp;T66#`m6}!=&s&7ejH1mv%%oCju-8M3Zr=(*Te}bLK7>vMW zv*mEjk9Zo>Jz-HcJ}Dz{fBe^&8d27Wk;q#!T!&q=Ty|H`5pQ3_?`AWo14Mqaj`0Z8 zxCxka{;ZYIBGp~8S2`?Q3im;+DGa+dF$%qU2U9g9C_@!t)DCbR8I#`9GQXXM0lr`nKIv1{SBfu}bi0SQ}`oH+>Hr7GM>`mnVDI34^ zgP4A)48`o<`Wf8@rCtC3&;E2bGN20ys4JjT+8{cGp`oAHLkiBe+rCe}fRFO$_Yd)J z@vrw+^`G|r-*-@eII<+e6;_7e}15Nuw^hV$Of+l?}qcqEA>5;h416+6wxSV zZrsecsxeI?ZaS}^T5y{Ez_znwS{FH=c@tvh#m`K9ka#NLVcedWEm5B%W_Xu)@_F)l z%6Q(nkHS%Pr*$ybn%+aqHr~Qv{hE>&kwG2#Alw|2#IaCpcNJ9Oj<^DmQItGF$|e>L zUk^0&C1!3;FOdE^{aEH)zdNi-8QL;pGyRTj0u3C=Z?$+WL(s3?3wOMk+&YWOPqL-k zD>^&6n&O=M*F$*AcqJHqjGsDB;y?Nrw=BnaMbR4sZyv99Z{-Hod!o=PU+#1a> z>Df>Vp)V=xxr|J`rQSl*l}T8qu7Zx}xL8mP)JJVMAM)uRVkh{8{!;&F-pfMK_yE)B zw*PbMUSS$-pYboIiaUd;w+_mjJ5b1V)M{u|P_sXzl?8Jz7x;i#dOLl(HdSq;Jd%ot zgToJl;{rqddwn_3b=sPBJFBGch%djtufLzax}WpE!s?v!o$=l91${02Y5rw_(!rfU zIXF4AJN#J8r4BOdGL@{qoU+#ueKuxK%+sjdUe0wF_11u824BQ>!12vJJn~LV^Z2m| z`4jfW&5P+5wGb7&=AO^)AMWy=@t(S#%I*@*Ha4r}0)3qTeN|hG$&VROTwV~zLxp!4 zQxt23IOsyIN&}!6YblSD3X93%DZv!K57m*JS!H~Vz@Sj1_)&hW-8DB*L1rm8&~g|a zwD8NdW+u&H7!`9Wl*|E%NcO|*pP*L|p7Jc7!&b8b%$koHu+ttXWqDOJvA=qW~ zB^X{{_t8zrXfsKlrnXd8$Zh1QnCe=qlvDpxleF4eL1<$l)q+YMIZ-Mk_7ff=Bb^)m z0nPP%aiz2c-sCgYmKuR+zBp*&GL81&l1XMk@EfY*EdK&hNC?W~Ltsh9#{SxY&cXVjFQJOz$>Biwwa`=AuAJ0YlX2WTTOW6Plx`n+~DgH&=^w!uWbY{$+*h#UYVje^Z5k0*P zJp0`P-SypG_bFGrE5W(lz5}t|Ii?;JK@>KIY0s4oa&A-+N~7CZ5sJ%5#i54O!{Bb* z#Z>ZR1qv@IQ7nz=0XY;7%?zIqMo7uZG%eXEM_eEoI!G^N1g070hR33=&;j2`J@kw| z*^?cI9P1rb9Xsrjt%hwr+~K?NZl30g@Z|cLPpbCDWLe}lbDq21=W9T)SgqI4E^II3mq<;xmo<~A1$F% zX|5c^Jir}w5_%??`W#FE#bXLE1a@a5VO1U`>bZs6~I z3g6xw=phb5)#$pgPMC;VMU?Oes-_0vU!k6%V?j%Bav*mg&3_be-+2EKf0ckQuoX(D zhoLQDpKwcxQP1n=h(zY4Wsg19z0vzEf<{dK!P6Z5+5!&6Ho|rdH}@20Iro0g74OUl zEuvgxp~$Ndu@OzZD?Jv^CU;%;3s+OrAJQCt`$bzBYa>ifo}}6k(MFOsQE4JCgY)nv zsj}=qCh4WR2&&mL#qt`;b`(ec=JDY%O*cdx$;2j%5k9 z4%31zME!tDyp-`>yRQb6z6!70M%7>zGN7ZFZqCGn&VG45K91qZ#z7<45jt*F>5D1c zQ;6%Tt6}9dW)E{K=jDNT;)CQDhyp#B;cB711)Jh9s`6J6X-FWz+=J@-AGjt@k@Ltw zIKDqd&b0|Y*JON*ks6{#@d7HXIDCE{JNF9q?>8w4y2Be1CB=*Fg=aW<3x#)~M*Ah0 zBXlY>ENp?BbE242Ixg>4PwVH+8>EXl%#F7)j-O85^*8oODfbcA6X$YAam=G`ghFJ9 zEvNmAy^`a(V}o;|tC)L^d#QVzd!lNAZ7I6Df026O=gyoJVHUBRSsXZ5pkQ{i!fKlTK*Q z7J!ky2~%tXsG^u=DoA!9lFbxjH%K3`T3_`x_KOC!>1IrNwL<3V#@wnMzjjCU$El2m z0=25T46}5m8i5S zr33ciX6((p_&e*NrZhpGgA;Z?_VHWPDsISE@!2ORls`z@|5P%; z1Ia{1_XcL9-bv@6t~;PUz;x*)s^lV;(qG(qOug@x#6zr?&s?2Ebd6Nt+ZC*KXQxM4opqD zB{dVgpIpRxO!|EW^?8Lc+URYx!hH8%(7X--Nv;cG*+QVDJkl3pqF;vQVI6oZ`!Qcw z8G4(l;N%=IClK{POira%(T$jw*fHbT1?(iYCtHyfnJv)qU!mJVE3+KhiwEF>Bx06) zBPP(Qg39#)+{(q6Mo9vF;9qELV~xX@L^+A*>^2w>B6RD2cn_PQC`yr+U7w%*qT5hM)hSvYeGFzM2H~H} zI)i7i3EB5#==d9GJ;8SsMX-*t;3A@98d-}!`&bj ze3&1|Llf{uYzDKD!F-GZ{H(W_T>8TSuo+kM*?Jp1!+>^4TLM1JXjBo#fzVS$E1*@? z27%IWOuK*_Hv-S^w_Y4fq;L9eWQP0k(O-Xu|Ib~Vf3H;;JeR%dBz3JyAl7@KJq0VI z6F$~!0^;;aP+mXA-*gs=8&Z!48;AmP?28uESly=kw5zCI9Ke5V+89hlzgCZ`8{iY(3NcE4wYXXXGX;6@SsTnsSHo9uBZo`XM;m!C zPml|~r*c*eWwHB1xs0b7aN&Ba)HT83L{z-#?5x0XA`WpL#zGc6x1P0=yvY5ies zYg=X8Zkq~i-F2+!J-#!a1r=dF%WZBh*On{6QQSqgE1SmjgpzDH&7Vy7Y5EPx7CX?8;A2CCY*dFcr+437Fqb`ak!5 z8`yyv-X(Jib_a>lt>;}X8BL4dhxTOujiCYbt%y1Bjsv(c&;o5Q=-WadI_>KVW^d~4J zQ*l}}hGt&Y55YYl8cLVf+H>4%->_nZG2b=@A6+nmTSPAeQUtF*gUWvn*7t=LiQKsk zV#z_^NO1orR2D+M<^?-{I_MV1j4gQgo*8BF6Ws;5b|I)lrJ>OO8!pU-l!s=xGJfK9pa|v#C9pTR2ImP6 zbUItX&XUQB)DrOPYtrNCt@KMeFEft0%w)oF*A7}o6Sg08koDPI=p@DCd~3*7XQQx^ zw=s$EmU)9cy^a|S<$5co6FwS2uWLj7B8`4X?}qlZG%X+kS&x-Xq8?*qr-7`If(~y3 zIOGPfn{)l&)#43mTiu~>J`BdsSujIW@lzi)i-OPo8HBLcAe6l_a)L-$A1c8#u)4;B zMtaIPd+==T z;0dolRpbTc0%zil=?4_znasIRctI-R>&0hR`TR|&s z1R}77SO@xM6}c>&Q#ko16@^6>v|CG#EgY?lF>y>QiMqlupa)B2%25~}7Jl!Yg zQV&2}5YnH3kF*%~c|OyESgRh`Ldlr;@q>NX-&kl=01YrNIB(U_^SNP^0S9&k=dIL?4)`#9~A`3yGQF@~$$$cEuYpnp{cz#P3xD zccC_TzDwX$Fc06+bTEtifQWYv9sgZMJVtL(4lE6bzwk!+`+;uPMl__}kE zNnQt^If~qa$v@EfFh#ls^N!DmUS=gDr0)Pv>IzPjR(QY5-~_YdZR-zS>>p2_%6J-G z!9sO{PtX&*dI>X&E5TP>1A^Qy^DFvBexoz7m&^d^xs}-hx7P(TgD412UuE;OQ5jm* zG9a-PA`;9CMoY5=&VkiX0*gkX3CAnMgCz8$Q$e{`lDVP!4Lj0wtt6%g~az3+?-ehK| z+tqaA8TF1XO19QX?U0d|?#@=A8ygpu1u8-Gh1SYK{nWc?os45-L9AdcW4Bhq*i5oa zAG!-ML66hhnN6uJ&{1i)i@xfu%xFY(OR#r;A}$?f>^Iwy>(TLxBDWYTv`X50eKYZ! z8Uf|G~`jEEO8M}Ixlpa>4;+|nx#n*Ovklm131@40ycJODM!tTB0&}b+W~1g2*KqnA zF`PsixeqhYCCnCjD?JI%wKw$+lT7!_Y#@!a$DG0k=-p?)$E7gNsJw{J+7b(JCY&TL z8+GBn#$vX71*o;Bh!@aG)-~>%(=dxaiM(PKG+ygbrb*<$WYhxlpx#%vm;=c3$ZFvY zt2MuJkiJHPv#-=FB6$Njd<*kG zy`)i#sD*cPAJNO$qSrNZQ@`mqR8RAhYE|#+!>CK_F!nCFMyIvnMhnWqW@8Eyb+oza z8lxPIx&-4Su0qqr>)pw%%vWY8Rm5zFt|x~l{FWL(TFfn&cj-qaG0Dt1a*v)(<+bBx zC%QcIne1c?(Yin!rl2bH0H?tR+#>%G2h7sOV(g$9aGvRD&I1*j0Fi7V`NiA~zSL0A zVZP$#d4U)<2b^?L{`grU%jj-WWCsw@J`qv)^G}U&#Cvd4%M#ZyZMISa)s#%a6E}=M zS>#)D0sWC_Pc_j?$qqR}?@#4so74S_V#+W1mF}kZvd8H)hKwoS*4jYw5i^a+K~~n= zs};4Q#v`I9=7isw&&;8SxjCY@@fnJUL0C7FQmFgH2fc(AtCuADqQ*s08F~;jf_=s` z>Jx2{H;m@GX|$%SOi7A264mnBF5)cnA2X0>slJv+=#}UuTn=WvF<tJ}L88r2p>P7Z858$W%<6Yd*+=h&GBykFS^k0Z9D;PWVx4L9} z#hG=GwozS-8_IY2wAP+%#1yAL8^2I%u4Fu*{$ZL@B@9VT(VLPNz>Q2dSnxqg5clZO z%uTYOu|eaFdqiivC+p0%$n9vH0;5eYW>W^5Yso{@2hu{ELhio^RfaCe2$IYVL>9S* z#JjI=)@B+_$^GEM4Kypm2azRDkfn*6=<)9~Hj*~FHTfI;?p``WCewAOX~sh}r+$DO z%I;$RHeZ7WSU_JvzvLD%fU7Ah)l+6NeSm&T#KNCq3h@9msvl-m)OpSrH0Z&v5rt>q z792-L5&!6U!Ckvc_~hU2a(Z$bgg>QoQoi(*&%8|A5$^b7Kg z@kU#sizWxg`Bj304x|(!_WhJyEoY~p#qNNlSP(THwB&0<;B&9(`kP_(zK}tdzkrF|qLn%>8x&)+QJ7;(5*8hEn z@Bin0E$+a=k3>}JTm9jBdXqTw8W@K!37yRy`X&84^8%};kELPaSFGr3q9D`U zdPL+i%UCHal)qKFN}4e&&?`{FER+(}ebPMRs{cUXq7|*a>v&a)(l7Y5z&+uVsyhA> z&*`c*%2*{{m*+?=tXQ~Q;{_4EGf|jDRH6&3xq9LPE0RjiHCAsiTkqH54n`|+`J1DXG?R3)LreMG!!c8fk00qM7$xj z69Y!37H-TFK9@g{*9*n)wf7VbqcpJDEDvK|Z)>D-U(FLYXkC4^v{6?v*!V2oEGQ@M{KXBh=T3e{Q`dxf#5~DM}6#t?I z9i1_4aUjmTBu{lFIcf-A|1ED1?WVZWvDndB8fWy>4(OvTjj^RAD~^F;Kh$c+2`=Lo z?FZunagQ7=H-d|^uW1O?se~SG4b{KU?^<5@6*WXE(*6D)v^9dN4pt9{vBoQ!rK77s zg;sYfis-{RvANt$dSsPE5vVftWY6k=NjU&<_#^;8@M$PXZ zp*IuXQ@5*Qq{l{HpoccgEG_-cYU?N!>K-kZ8p7@32UHP16vtT1Y({PN1)1_X>4Yh2 zLj!(eq1?f_+Cf#3KEyvM5MzEVYGBS6z~Xd~xMeOJO1aF%?=uJ$7$QeS|QoC}w9 z7)mh}*$Y*nmi)f;w|I@UMV0J2AzTf2zNJnU z(zO18Y<-v5MvYbD#L{}2zm~pIe8+Lf@w-&kNb|p;{be;%uBr~@F)^2JaLnftm9Arz z701Z0z`nZ8*aK6UB0NyqIU?oHjBWlEfr-{$Wu_xbPO#=_-)X;?qonT2c=@8xfSpfi z^MTbCEo&I~@QArYox{*no(E^iKw%Uyq=rQ2exug32kko@WvKs%h()tLk0iG7HOgp< z7!eK|Z<=?ke(2?XE7XMt?=|5DbNe1}fcs4ce7H?vIekF{Q#Wf$wW#8$D=yJm`|1S7 z3x7EVgk;GJ^b=meA7MRJuBd&)_1X#lVk1lL1$v~wmoYjAyOk^iH)JOEDk~9tqpYfZQi`mqQ%ax3GXb#xj(++ly0#g~U|~^kvpfsaQTN-Z6G+t&ExCI%T!2SighH_gf7eQ$ofo znqJ_Y=>Jam#<@6Tx70aM#xu}AUsPdwStiW&>BVnrt(88Zw?m@E>i$;V<@z$^V8~ka zva!Hh=>5Z-i^20gv2|(GTVFm zdp77@)tj!pj)CR}-cg=ZeX-o#Sx?Yc1uz zaNhhSiCV5F-Ir*UQJXq{QFd9k$z-P+8G=__D11S^e_dgsd`lT8%`}$!g@Dtl54ZJw zMK-7VHu(maqtwqs64f`%^8V03k}%AXrUUWz(P?9xfjw`Uapn%R`Scj3CGTm z-O3qb2Mp4Zagj0Yg|bl?uGe8__>NRt{a#rn1hmA!M|xQ?R{co*Q+&b48KcG9FjcgZijCYrQ|+`V%U-3toMFyDr==e&@Nl&mERiN|p=7TUIBKvt3Xk_)>6470^6r zB2+L|Y400l+3TdskF1886xeNCleamqs!gqnaFfo^zf`)rRygMiJN?ytNk&8Emh-$a z%$NYv&D-WPH4qZ2qW|u#>3z$Xq!c+1sFu}2J0ECn{v%~6edMLq2y~c!Gn1vW^7qnY zs~8N}FBY6&ieGGH{z-k+AC_C{CeIKK=*e1jV~to_ovSXE)|=g7vdA+35*iToI4Jxi zJ^%}GSm9V0DjkjoeJ%<^9ROOK9w@6OtiK z*5-S!_?rr)9Ce+w<%&inP$z4Rj?xBrlU`WQV1>j}rOk3{sV;NRo5m(95lxuSgm_d0 zMx%Z(LTV`_7#p?Ejdo%yC04n}N~arq`?G|;@)`N0$ljK^;SQFQjO7I3DR|i-mRnSm z{qi*7HT@TV9j%LSO?^UZ_cZ_YdAwcqFnO)Bu5*#}wsAXfO3xN<%k|`E)@5?~34&Ly zrEZWuHXmpMjPJ$$N}BwebxQk73lnsughQ5YX}5fLwB6D{=SD|_@V5UOZ#f-4MMpzr zwE0QE}7V4pb z5GyHSp_yPj!p7w}(-=9!N@uNeP2VJTS7X%Qgl?MdTcHgU-*!xQG?mUX;y2gJhy{vM z{Yx~ALHbhTrWMB?^+&QIeNh0ZC{D6|fK~e)vo(0n^3ot!fIVon%ps?F3pC9gnD^hX zdXrE2TXX-7RzA?x zXeymn>d0%Y4?#b?DXfR9t-AG%xy2eQ%F=$p%Z_U-v8k2P93h0ArQggTBefYWw{MIe z#R7G><6p6p7Unw@m@K9_jyk4@|7mLji%qZmSY0V)>6`t{wJ71B++Q}V3dVNhU!e~x zhWTbYB0wvI7OLoYAvV^p_!sDj(hhZ?vew$Ksd@xH@JOyHv%`A=P{T&PG{DhZX=Tpymk4yR)+>|MdE)oFLrXInNQ!bx3^PB}1IEWw=)(0>l-V*nk<-zf+FmuJj@?)tE5sg%%k2y-XC#J)V(3RNJP2+1b z)B0L$AWaid#sbd}FbA_vEg|`=>hJ`vr5Y=Q7~X$Gg>MTN&blcxAjZHgSW-By z)eZ#oP-%vGOF1GehwG|}c}1K6Uv*t;8SAp+L=yXn$<}nEiusF>PCe~RVWshnUeatO zZj<}4d+lnZY3+^G!YDZW=ZV$Ls*F&vLIe?%kHnvi>Doqppb)J*Qc6fWjjKdghFjlK z(IUwyRt>$So@9M4J(FiheXK+1Xst6(6UjI$J+Piq=M`?w7IWp#<@SPXBrr=p6|c&J zrE_Muewa$qdN3_&LX_?dJkVE5OW>~FX+;L=`>UFHO0Kh)@>rkfJ>~OQ-#DAPF3G*M zwVvAkCqjGYFy}yVY@ny_Cw;W+rvKh%wY@8FROsZ`;HWK54@ka4+C1rjqovxb=HK~FdESyo^QQsD2UGv}5drJ`x zms(r+Nh=D>FjM5KN^|L=@sTDPBgC7qtD{S)&(+46J){%z7;y!w=C6!(;y$IEGEUg0 zZ`LjwnlPFuM|W!xIhy$$( zpu-cOl4KmYVp~^tEx)ZHgVq?HZAls`WEt$VhdB zc?ryBUGqO>rn8Gu&V1@W8kl31QZ6cAiq(v*+I_~xNo1lD=*3@{6UF)L!P;0|VF?ej z7D*AxJZUVE_k{+!)S^Q=LUeSnS=m}I9D~ayA8zRnsT^-^=2|*C(pl15!dBy)KG5tb zc9nNZhpoR+(D}-|BmO4;Djl=lC8|@(IzpzyKs}+NdDb`vy15Jd@P*_MM-X?e$6j^3 zI6+F1)(c@)3v(Sg#=7JJmI#N0OqjBp5F45TqNKmIOz4j?;!$*=UIAIq3{=5F{=O6T z&(`PzenxIyg!%0kO2x)9+C74oJdDV2f1-1>V5qOjH_0i1Px-{!LtHBZor3Mw3=jyv zmj z@!n=~=vBzEyg@$v1in%Ug|($1AS)3Y0ApjB!Yc3sr>u=+eZjv7pE2sJv5uiR@YG5Z zs)@_VdPk5~n@hH{7FqaD$oAJKrz^lI6aqFOSsX)*_&j^1^*m)5+Kb!ZSoVU~kKmdy z?2;DYpBZ>(8`d0`*>$^#F%O3s^Cb6cf??nX{6uO0#xsV1DLFurZExsZ1I4)a z(1ZIEbi+E{Z^=_uft|D~=RXVDV-n}T1Ma2^_%s(7fqqyhi}7VgP^a_}7#&tSTs0O3 z@u%3+L7pU%>mER{?If9%hCFFmlsl$_<~V@%M;|Z;_2_MfKv7&riM=d+A)ek?$Q`@E zPuUu}G8l?mAW?2(-8k?qCarV^WKje-l6s&O&Ve}GPEW4E+1k)w|3F=JEt!%;cwt}V zT(?1t2;9?Koa;1C^*60MoJ@3Ccy!0n8l}NfjRU2!4D`Wwe6k1Yn+R&acVUNGs2oLs z?OB1&Xn9Z(Z9zqBBNp_K*6qXj?{Mwi+{sW-dQHF{%*R`=a3_O#P8Z)>3xe29&w3wq zkmsECeFso-P3BsOJjGLx@@`P@ukenK7)>GQ znX33n2;=GzFhmZX_ap9J#23$Uw_)i0y~;ODp8FBs&IeUe4nHZwz1^a{((uRk@w-r3 z@FWPVNbbefQT-2}NXIK;I8zZG;iaYRXUk#S$m9J;u2{s`46YDM56VO*`x#G~%ALjV zmlxb;I_;z}`o(dza(G8J*ZT*{#$l0ae9Ip^uZva-rEMQEQx@{1DLh#`XVky~rE$l0 z9|^@bYvAuu*yKJQP|Q0ie9B2%8$5F;zgfIn2$rS@`#5;wvK*1z$z8sYO^zUy&%41D z-k@)UahLXA{lPnwgWuM#6D!7YNL<;+btUd7 zoOX<()qGg-32h!p8&u{!FD?6=@5kW73EZvDJ-NA4jq8N*J-gSM!83$%2SV^!bgrgy z2Nu>)c{iNT2zX$C*Y=ehyfXPcgy#>%_e}0V^bNiFF zx7)4uvgPdaiotinXy0&tv(GH>SNjPgc}2kff3IzYZX{oWSGLbDa_$g51Hyp!{9M(+ z6WPyXw~N5LPVU{lSBaLjKW|&#enmop-z~mjKd0>rK3eracHh+ahTQ^A-ihY!ZNK&M zDf=vTi`ZA!gI5DW&tbQfZ5R7}i*tnrpHB(4!%MHSpG4(6|G)L^=dxSI#Tmnc?IGc} zUaqV1I*QMUT+_aDg|n($!EUuszTu;P7GSw>T0Vla<_CMEir18&FDTgG?kxdYIhrT3 z`;y%jFI&)VUE61E>uEfN@Dne6Na7k1d|u_c zw*BokGiX!$`Vm3TvtK!Ap=e%Pw3yvPqBx6f6`60w@JeA!$fNBd=}l$$oS!koPs>IJ z#~?uO*a#Xe?mLt#*w=wJmEZ02MDotddBwiA-Sa}YzZ6D-Xj;x5jr{aOyUlDbj^ePN z-4|@}D8`D|;P-W&)xMt)K9j(=<9N4-d-8Da@j*Me8NYnY6J^QZ#$uz);D}?}v21V* zur=&+v2`FgPT97$d##gu68VcgUxhO^Rl@2LWAI}>>*O9^WoC%w{&RTkW!z0*+>PU# zcHi;Sa!#Hwg;6t>bJ@Mg?v3_%U~op;XA-$~B4;f8-@PUVNBI=)K970i0Z$*r%wK~m zOJKC`GCTN)RKLdTQic|>$4&dXp~0Cgg%&k= z!yX}Q>)2jVk~@((XC5|=BmbRbRZ5|zL(Gr}~OAF_4 zzG%*s%K3Gk*B|tq7(QK0zbWKOiJaL!uRR|IXwwqB;|hLOr~P92TNHO;&p~ebQ5>&R zxUM~a=JB5G!EwxkuX494eeng?Pr2drIYA3;2Epy{t6nD@*^s z!y5bw-ti_l?RH$nV!pk^y=hk2;9BHE?l&~JZgA5|k^H@Yzg1!HHH&pz7$d*+V%Uyq>f~NQJwma zso0|f9=Z_}TrCh7AA?oz#Y$)%yP#G=uFw#Lo;QCWQ{gXZCS?bc-_G;uB>+MzSYLl&WGmhQN3ZW~xs}!;~%hB3B z3rh4~!3So1H&3@8ynj3PXVpMF90aTF0<{|hA~cygo1Q#T63??6ZT51!Y6&;b7_y07 z$R3xVQX&Ekr_I#%J_q;iF*E2q&1vU6EO&_g#Rfd5Cp*|J?B+V)RVA>p#oBxl__8VD zLH74{J;DcKKDlSV{0mhqjg{IA@FFvd?{xshzDigLlJ`gA>Ni0fr(ylsyk8&BnZ_P( z1pfVy^>j(zeStPbEUJco@UDe5+p-g@B0Lw`iX}nEoT3uy06Nc$$@hOw^+76D`iXjm zL*So2wYq}5eOKHI!UUWgdzKvb$xXPQe?h;G1~pxi{M%%94H`XYJD8}NRyX`BhTT?K zc5*$5EmUE@RfK;}0=M-yRx8bZ?mn+4<45z*qq#?`JZ2aBJN-ci!Ba@(%@fej<3PCo zOTQ!j0e<)t?Ctf~@7Q~gZ}EdGAl{;BrETn$77;NSiT8ekc2_aTz~$s?>tN$Q*&7b9 zsJ*~zDzgLrh`s4(;sgshcRec?|CmNC)ZeBGcc`1lN?R07hJo%1!^5)81L$GgGfPv| z)df3Lpog^O`>kk&P=24nI$CEXzMgv+&K~Uoql`drt^%L&Xe=<1=i5k~QWSkAM7%8= zrB9}aUsK(pi6P*wa>RRJlb#ZHu1cNZ80uw4!sy%soW&PZ>F$*tNGfddI#p3iso5RC zUnfgb_;(PBgp;Hhe5#g|Pd0Zxl~QxX)o57y#1EvY=vPdTs!KP-1ypTy5nc7`lp~Nv4N`cIJkKW$V6s&|3Ocpg;(+Z=egl|*;gR7|SgtD{*6_N{c@7^Mg{`SjYXo>%+;L`Gm7L+0<-V!CF#Z>Nfq7HARagXfz272jl?6!X(hNqB=FQgy# zU=A99|86wLfj;{dbj4#c75vfnjOhaFkEX})a8vYLIcB%V5ztP^Faape4D)YJyD*z#Y2lWyZwbj3k?{J8o;~q zWqvY@y}R?~<@L#XJx|Mhn)@&}Gq)&L%6lVk3M})-^Jf$cE}Z8sTl}H7&|j>_2rl_| z)$5#uV#N=x#vxxj?vp)yB41Fxahwe492SW9m<`MA*gLUxV+Y0j7TrF&OZ1WG{xN-G zzm2;WpOPpg^-PLPib;(HaohA{v4aO;%xw)D({mv~RnKSduE*Y|wmec|gDxURiv z3^(UmBS8Z8q&CdUXzd`{H-i5AklLXaVsH6@QpHi(dB@ov4*9~6*IhkbOJPy27CI^P zQ0Pr~6K{rI=C^U79u%&ULLR`AJQPKzec%P#QO#H^^^=dv9@&CPX^8wcc<%Dz+rpa` zm_M}V_G`^GKdgG=Vbv?3GQFCAov+y2$h+2)2=9M)ScOxHUoY-f{54uc(Z!=+Ctp)I zzTmxlPwusx^y~)Ne`fW|3d=f`xhZpRW=>|^tch8Bvz}y?&Hg$&CwqL(JGpP>je(2i z0_<&h9@%#rj=ODvx6pR>3*kz8=XarFBYur~9-S4P9n~%JR(K|ysDFm{h#VPxKel(m zuStVaYNYy8JjpAPK1{5iFeg4W{&}1`?)~`R;++Y;_)p@?#f^`d7d0tja9C4UDQAdU zUY;txPIZZ&>fn5;!&d});8|7R9&QJJ&SZEI+(pCOHw%X6kIswBYo3>vcPak>3_dO0 z58cg+78d`tF7yE*K${p z>r`l1_{N9^QQt=|iK!p^bL_L&v#||h`^5B$o)ncExt!j47lz*N!n5H^+!}h!H6_G! z3`M{6YpIg>ocQh)qoI+AYS?&s+ytYHv0C@TnAaiD)?dfh$UDUo>N#Kh8)`$hic6xs z8RMPlz2Z%0{8{fE;;riScn-quI?c1m^W5`3jG~9&gxwF5Nj2D3JXo%K(OP$LVc)`Q zFsnR;`MOtrjeIr#R^HEf3-X5Nwat5zV{BfD{4xcj3LQn~iZ^=)`Oi>maT*4ZN_ur8 z9EH}Y$|+}qur-nGVm8OtiLD>~WyC+B(XOvTo`k#=+B`fZs#EM237eCqCJV_+5--PB zi%W|!;2W+Wb42a1L|3%4yxLAC(k)y9uXi41*Y$y!{==vZ z{t92mHaKd2g-!5JxI&kEZWTQ*tWpq~zXJ`4WBDfw?sJC~&}Z0&=BNng?No1P-**2{ zZH(~))j|8^HR>2=BbPsPYWPw3s-Hxjf=jziM8oioVHZLlgf0!c7~UD>fx0oT$F7VW z7n>dv8&e_r!>I9*ha=L%rSK3`ctTw9Atjv^9c4f{&r@;4CT3?LL>r?+@-ve)&M?!~o5sEe?-5(Z?E!dN<aaBjb<7)s72~YZ`Yf zEOk;9dh~&MU>!iu-sTdms8!^#0~yp{%?b z)Rg6#7PdBgNyN&?U!zu_CHEk@NA$I*rBOe^SrH!HF8XHlv6!6LK-{$W#_@gP-ii&4 ziHI&0l^B^3z9(#M=q%T?kdDs#Y89|BImGY>nH7v0t-&wTO)}l1N90i?W-bA=t zo1w|E#{IsA>evQ1&xf^oK?9tg`_SUR{ zSyi&ctkA5!S@GCwY;IBBx`MXu=dem&@H9nvag6_|7H4geS~)b=>WF`$@5H9Yjfj~S zIX`R~%HTuM2Pq1_6g4oeR#NZO(2`jt#-+|qzL>ZuVPCuyKP|3f+`>3Ve4BVZ?tZKk zb1(%#}Rf7hfp4j1EXhLF>F9 zb4F!*vp&d9$f=V%A@9$8XJLJJr=rHizT#z`M&72rOMZ{GmAa}mN*`yMt8#eR$U{+A zqC3URjX4@qI`%|tC+?wB-0j%UV%x<|jy)cm87szBkDDF$AntlxV%!fgd!uef^bBts zHY9Y2t4hcb7!r5Mkx~=kW3vNVITihtedD}$(2ee0yaxr3Zbhex`oLMe&=cyNi>m!} z-(}{_i!j<``8vYd@p&K@rbJ0UukSMEnD4QUkE6~kAk2dO;yqS~1*~Mk#To2A-=((h zXCnuOw@X?rFdBUrMJv)0^NY_H-GxuNc0pF&?cCy=iaBkv$7Ws39G>}prkuGv!%Ux) z-aY;I^m!ROGUKx^`IjXDz^ zA9gx)RoJT$4Wq=^0dQX5E778qQtImx3sVY{G7~!|`V-D1Tug{b?2o3<#DoKJrD9?t z^Fs5TRn*y%X3aDjYc1h!?B}Ud{AN)D_j;78jun3B{@s1oy##i<26$Gdd{^GwoO0O} zvu-o9md$RKGdcHgULe0-;c)k?qWQ&JJ&8We-&W5ze-)=Gy_`)#OGNw@bvx#pxI^)~ z6Z$1yO}w5sAu%suR6^B+QVC(`#ov1RqprKy=l6XK z`%#&|qCliJUyIh)P%ZhNvDKVKp01@B$vVHOd{QotZtr4cKD-E`@}<08+K4)8eXATj zw}n22756#+3)a^@&r|&LxchYB<$}NSSLLDAN!O&gn*ns)QW z=@&}c&uK@}-^rA-T`YT_70hr~gI7K#u-AAZ)^Q9A?H>6cW@CI};@O0M;+{mm68R0R zY1JccMq1Iw;#^7NQrng~R(e9|;*v&c=ah!Y+mc!(MJG9vUQcS96q=Nia4jx9dR|27 z(8rFaatU#mc}E-UukL-Xc(ywU7V?z*J$V=MKF*JZ12w78S-8C5R{q1hKXNDK)X0v? zYLIDVe45!e>tgn&xli+|7qlQK^xY!W+YSRvyOq zyYfBpxV7C_udVdY_f9W9Y7@{(azBp=9$jag7uN#m%_x0)N8jk z-q6tuh8JzBudlZjdfJIa@3}uJY*0{~w ze~Ty|IXS9J%$B%iiDGKAQZvg$mzBzdmnvD}c#4#=BKiH~M@h?*x+lFze2|bA7ZbB2 zBHcC6(LnAm>@;L;q%YE=7PT(CmA@o!R_@iD)j5SZKj+TKtBH=p%>0u1U*wI-ZIF|d zwKH>HMvaVm8Ba2jvd(1xn!7E3N@1m<{l#6qrTitq8&0<*>4b99`5^Q~#4piR;@Tus zNctgpXG-_flc@!%TIz+=7O9g`W+ksmx|vulaZbWN@lo+3;*#R-#mE0*SleI@{acJ(GLpoY8O}ch}f7x@tKKw zQstzB@hb?iAC1V5_%Q0@m&3OQrTC_E+~DfZWhc>-zxi;H@DI>G#ZSO3gvA&pjVhrAQs zFzRB=mAC;3+Y>h=HBH`-d^tHRWq8W7lvh*L)R8G0lOHF2l=LLASK@C8S@Ct_kH*!D z8y#CR=9Q=$;j=@hhU|CbDiSQ}-<$3Aash|0sMv6~EsQDXpZ`vN8?N*n$m(&mk0Zm;!+FS= z?!4*j=bY~7s20l$q_@RXP>ucpNLy={9 zUSj^f{Q9s%k1cqZe+p}Tklj9WOZtSg%opw#Ytrtd|CD(xyHZ~Jf=cdnMOnqYytVw( zv^S})ER^p$j<_a<%TXm_4#s-oLKEId9GMr1|nP zWv<%aQQEoMdC9rb8E|;j6QDoqOUcwn>ZS=ousy57(%M+G1^)7#!d^>?dlp5zcNVnI zkIB<=Tsft)-^uEfIWl8r`l7TMFQz=-_w0jbjh=0LHsbluFUF+qr4Fg*HEY(>`Q`(my{mJMGTx*+s^SWM*gXm4DPq%F)`XG=dUeYaG{ zl6vZ^sZUbeDWy`YuuJZp@@n#1iR0puqeq25M%^Ys&a!b~#(wI0sxsmnENbI!11I!9 zC=~1|tm&Tbo(-$FQrIcKW^P_qUdG7um1*tLW~9B7J}#p{)@M0u^QNK%@?O!j;y1nZ zP)yN`0m6Oh8?}B&Ug(DrrK6@t?})h;y~z<eTg*^ZpDhxMtF4S6z2fAb*o7yh1%9qKm_*Do&RfUZ6ou>Q=xBU`&DQ&yv+g*9^5b%2wmFz+ zd;zGpYDB2EOT*w)2op;QRjrohDB~E+kn3QQbq96_`k@@P8Saul#GF*_^^d~Pfk z&dTQ<%Uq7|6A^27kX6eGD!@{y!3lV&7c zN=i+BC)v+@5tG;`-W@Y2>QVTH(5oR|Ir}@tsAH54au)m&Ur|-<3G6{VbC>UuuROfS z$BAWB^C$ZTd72ib6>QBrnbR|SepbV*FS7KkTiN$=e7TN%E&n0fVwc^eiVt~au+w-$ zziM=|{t>E5W99X*lpdjmqpj;sXxH$S5nr;Xs~pubYCzPQsH~_y(cb7iF_UAP$K8*s z5T6i#IPT531+kA}O2^cVj*HqCQ7-)J&>JE3oF~-oO0?`DQ$-Cj5pajq7hROS`c=)L zbq*Zz*Y#gRPkt=SuV48-M?bzQswknp3MgMs=1H#me7-k{$zJof4ctfFAs+RBkBw`v zZ1*ucm`>{XQ9#qTYcjPBx8SA?_uus$MEA58vGP+ys3am-*Wl$ZM0?|I!R`FpdFi={ zxnt15J55YuaCXn^Z?hdaCv*1X-pQ+0u&c0E(bD1#>?$g;YjubjQSs~J;}Z@fG)kPp{_EF- zrSTzgrDLL^!XtWyRR|sE$_V*78?#@Mbi$)c{?oqr&-gH!bhEusx9R|k{RL>ThUkg5zV}4ams9!mDIX-hdQR}G} zmAy*7^0^w}*yrf&G@O$|9)?7?O1jFq-gQlMd0b0EYlmHd(YgbirkBF%hAj+z;p*Ue z7P1(I=lGB_&QG0B(2|*>?o}Shk#ZlfzP-pg9VbIO9u%dWu}vpSR?B)pzIQ$qmmk41 z7tYv!1f29IMm57}Xs|`TPKINN@dtJ6F=l;olv~JNMv?cM1hUQt9ByMFf`cRQu-%S;Ax3y3UcQ z-bt2s3&%!snG3-&&LWSzfd5YtMv)usOD?l3S?{Lg`0J2SY%H|qRd<-Jrh-a62vc1# z?1YuXcgRpygFQ7uG+|hI%C%0COJ7e$b0&GX;e4aX{}2&bWbO8XjGPMdR%dd6Rmj^K z@c&(bNpTT5n@&Ww%9}3JYrHUS8mElC##-22M;d*Mjzqhf!Nk~rh;%*U1GF2O^12z! zGrf(maQN*pE*Y8d_mm-r*oe$;8?uR=%wAMse@%_%3UZBm%%fy6&zTp=$KQdqsF2KX zN%Ezw@!W}Ib$=pn`X|_f46^X0c;3z+er*oRW#pJP@H~6TA)cq*(gZKK;a6ZpY)e*T z7<_y4#LeXYo`{y1i2hD9@`*#G@zQi@CXA;x_ufy^e(AXMH^&8j&Pji9oREHp*>op= zTLm}p1oDcVrIynBQVsZl%S&azvqwm(WWvsuAwB{*e+~`%{o)Ror@rTU6UC9@P_Z}J zMH_!mow}VwT3-`#$atRRPPf{%8TKn~aUv_6IEY zow0~xiLsPC!zu$tEp#d_pkbjKaiHrP!ROYOI~aoq5~3dsBd%ubbbgEg)?vF)jAj!ml746Bz}nn`-xrgqQ+o2-h>mn zB)!=w`styMKww-Dj?<5Sgk#UP4+j;-jE?}E=M3;sw5qCTI3dAS6x zneOC(k~Qd36f-fC=R1KL;hz2Sh-3GNLvQYcq}yINpcbkc^vE)=I_p;V`cm zv~8C8j9zk?{&E^L#X)kZzrX;rgE8qRa<40bES)p4$YlKEYkKY%^t8e7V)UWHx*h$m zDO{=b$Y;Nc$GlFTE@P&kM-pR3p-U2r_mnYTWejY{T-~2@Eaa^Fsf@VFi1*A)2dR+@ zPlOKQB%b@K3TmS%cio3v|JUH&mw{^E2S(^#Fz0XMjH<&N*$L$JSjMjZe^aw`3|5-na0p2S92pexz>k@Tur;zDr|_F2yH10Jyvn{C08 zKl5WBo5b~a%3`=tXJWw#^!+d43mD8X6qdWs#SxrkG$@0w`P)cd4JP;BjXLCJ^wPJu zVkt)K2()}P?j}vR4|3!jRz3{I=tnRk3$XKCju})5Oo0t@EDROHs0HZ74AK&NzZ1l+ z#emh)!Gk>qopF^`IBp$dH%3*C$<<~PCI`xoFihL{5wHwNMrL-CDac*rPFI1^!v`_5d6 zz4vmitKfqQ;fD+54q~u1^~E4XYI1KMf>im0JN}BfVgb*yfo%WDAST=cdO8K{U`;Sh zE$9g-v(Pi9GSV%g9%2KSrC*r+_5|m?BaGRnm=iBDS3O_`%m77IC}>o6gkp(OVr9n8 zx?qhy!bTm$kEt1NDYoKh8+@lDe$g2g)lT3y+KMg2rhKv?BS?ebPhDocS{&7|>|0>4 zYViBp{QEk7^$N3Ll&Fe2b8b4b?E~RD_i&oK*%L%oZDw{{hNsRC+Iu$te>qNn4N~hf zp+8)oJ(z#mVf6;!;a?3R@@=H84stFBG~grp`fac|=jiYDaSAUu46^DVeSbH-V?8al z2%HXV9$0@|u=fuEJ=2{rz9ntjloo!Uc7BubvohSuuP~CP(Eib&sp7B%EHT(bp@zqx z*3%6KNiKQ~8TiCwdgy&T;tqAKH<%?ZF`r(9Q{gP$@wa&f%+g5^Jg4~gB>&pSpZwVG z+kZXFCvC>#TliIm>170u4I-54g1l;tUv_7F`V<`6XhyAB%u4H+mG>~Bo#08YgFLcp z9%4X?RiqxGE~|=`RAqDm#Wxram_i%Qr4KD*?%P6-`jyqqPTKnbt$rFW_=^$s8a?hl z$72{OvstT{f-^WC#DRb-C6)mzREpn{86Qef8B~#@LU5dT4VzZv?xWD+(ZD8fJn7f?Gz1piS+XH5> z&af>%9Ls-#-9P5AS+*MD<1ejW0;Hsk0Dg&u&cy?sGj~5=1iXb8Tm-lGCx<-}*dDMA z#)(b%z$!+{mvg{O){x^tX??~qfTK5~KxbxwkMM@(98E!I)x{rbpbloUZCArD-oP^| zgF`EeZzO~DOXP^-hzxp%?H?`q5utqse<;FE|YfnKR+qh=C*1$%r zR%NATBT(D3Qtb)4=X2U|5-mC-*t6!*(#vV_O^mM_`1y&I(H_>lwom*{X5lm(x@YN` zS3o^JVxGtf&J)GV69GZTjvgxM0@UhRf-EZ7Sis7nXz;fHHntBBvq~|ec>!ZfCiBg6 z*1ylN{3EKu?l6mA=P=yI)H9$$2zJ_aCET8ho*4v+CEVi%e=$Rr6!(H z72kN9pEvQ3s(8q&)U>^d^W5<_^&;pRA63t73AL=|9ihOuPgFXh0neo^sLu8 zlg*S~n~|siS8Bj&qy^XS4FCB6?(S1X8U72*+0y8x2V#2%u^SzBeF5n zAslgdLRt1$@3IPLL95xG(4R43I2hRpw5;9N<_FvP<^E;`*v$54zw*3K~CVay_eAwTE7Zfwj=P=Tz1%K=n$9-1f z*Rj66Cp(M%{|t^n$MC&9j7nSCajjuxw=n3Xwhzoa5HjaD#oV9u{MuJXM*|ov9 z8-W{q8?^JQLDX6jC~CX1!}b9meIWz%^aEyuJ9xl(tbYRgA7Iqnj`cTS`<3i%7GV8Z ztdJ+uw`{ED7tE|fSr7JOJNOaHfVz)$)7BkX^NZ`-rJJ^uf}`E4KD zf$cZrcWYVg*|UH>2iR-ASwY0=*kJ!3$iBM^^ICJB;(dI&Dt0f0hsQGm*i|iFY@Qn& z|NmtTa3#3rKSkT@4UYUj(%)Z>`*XlEPi5Ty1`M;k`Wr#Z4x*LqHDFI#yc?G9fEC*E z(;BPWz2E+~Rd7DAR|&SQ?8DwG*dEd1|Nh@1_znA8Z5TIfzxjv}qywI0+p{wW<8D~B zH%GsqWe0HO0n{50;b(Ag7W#rY-X7_{;U1?k-p}Tkho63n#h0*mS&8SaWft3n?YC25 z`Wth=3B3C}Pkift_O~mnUXB5FwPPv9fY<0J@3F&e#O!JF?{}mZ*(1SctfVKq{&@lw;8U?f$x9rS=@HIqcqUTef+ypMDVRtG30P1Z{2qX8*M%|JtKMbAD@$ zr8{C_+rGAyU)s12UNx9&ytMFeR&bwj<;ggNQ+qE zE#;0^bKe{J+02NwgVBCB);_>W#k+o$ z1-}GG1ba-dt2+K*hh`tPN7$>#v)J`7di5Fp{fqbPRm5?A{@}M`?B(|3L-skg(9bus z=GepvWGPnvj{a`(V-n!xzX3N(q+}~3y+#dofXerp)K5KQmfRhj`!@#H{wtXUPE#+vi+SLVJ+Ce-u^h;^=~p#Y~`D?neiWj!oS5ki)sI> zSmtZSkWsA7M>4Vt)}QR+Rp-(t*OAiT*gIE$xx z$6AJlQ%7Q(v#H5A$_}#>8>0h5hCIZ@&{?=fEdg)eNu&Z8ND8sV8Ps;@7zNBi}EquDQb z`+QonCF^SgD;%Od<`d=WN{mf{XZla{kHJmCrTwb;7Lk(jL{2h^4KF}5sHIUKmE8}~ zHtGbo^QXoLbcL1}>xivwg1>Y<@wK0+gxQaZ(GsHZt&Hm61S_Hd+tCqO`L2sBR=>pKGGOIvJd3%lxeEu z2yv`e3&cE`7lvX1fUDdiRAq`XUhEPtpRS5nm$>bvT5{O+eAv%5>s1>XV-v#au=;%$EZa4~@<8BT;3B$Xo6%%AS?q1=rdihtTme6mIq_jAbM{PvO0^5JiUef z3+i3rS_D|nG4R{Ipgi70JNqwf19s}5m4ugWNI(X^-N9c1t-omhNB+P4eFNUW1nmLH z?A_qsLhy|Mxsie9GME|bYjVKl|CySNwSkBFBDhU^D@WB=982H~Yc4fH-C_z)E5i*I zFJ6@1q6d7THbTp-tn!=uqa3N+Rc@%iIchkoI)8QCRv**DzLdMrx|@_+YP>TvWMW9q zkWvEw`EbLa2Q63$eISILs!p{Lf6Z^_4$pVV%SJ&u)*WJhOp zj&hwdB~dHomhMphR8!hQgycJRE2-KZT8_gZUF9S9ivZB;tkV zi77oGx;&AQuMW0pjtx69-aR9$Q%wC+CG-wc=mYol{){nA(1;pJm0><(+qWFsL32j) zx+9jVW@?O?ix`_$8xP4Euy z9cV5d*Y@c@p)NAYEN%8hVKQ1fOYJ~C-*#V#z;L}9+)cXty4p@1q8ygK7e<(W>S?C(Av<7gI!ArT0_R=ldRSba zV0l65D;G-#scV~0rQ3JpsXmwbNTbM5)sv6OVf=lTykGhe)bbb@eBf*(Y8%EJ+mJQO z2J)GenctgG|2ICEt4oB@C>K8S(Ws}DHcFspH-d5NKfJe;S%R7D8g`y-%p~J;1(aYJ zvPY5TLuRT$wD}uUx-CQr?=!~CTC5&N&_iYG2eZ0)4n@AUx;VUiN4D zUkiL5*bq1tcphk|J<;~+!eI{0*^-MWMo-1y! z&KaY05BcMB#&&CmI6^)`|LCUvsa%4`_X3gQ(Wq=ykQ*ztP#8~fI30T!*ET5?m8Wun z+*!$1zC|gt3%Tb0jy8_!s4d1iN;+y&RX4@)jiZ6%8a?$FvBgWPdTP8gfDTC z^9$!ghoM?ZJQ^Z?>5_C6os;r%8@U&XiuL5Oaw+*;xwkxy*CsWJ2Z&G&ga>66YwhLi z3}0o}vyfG0N1_FX*#VTZo)eSZ!JM;{D1Cdgq-iSGPxHSm65N?=dmOyF8TVa{vKEcVo>#d>HqsKi~`w7>xW42Rm#fEqz7aU`$^IAX}LApy(1Wr55rJcLoUsjSpW<8JMbua zStUMaeSM5N#i6Voi7_m4On(>Up8%ak3;fB&zgvw)8Be7gAV zYimh>;-x^KxV!)H0L8UAwT7zJ|>E4p+v3eD>>bY4>>&7Q&V{!|}JKRe>0PO7@L5Pq6#61+ypP zj04p2nR)k9jDL*IOco#2C+H2?jsA`ewWGfQCf*|=1lEGw~d z*u$ht8$M%OJV%QfF?wySGaI10si(9r#(?lqdv`IvmhH5)-pGwRXKnq7kuLlj zlcHCpLCpP*k?M$=U8fhm$PT8%Y$>@Tbz(1XX?eZ$oo%tHr*}i>NiMA_XHov;^s;ep zjZ~h>#Za_;VXpNS75*FaubNznEP8`|rB9`)(jS~^dHKCOkw~4VJeO}v>%?ioQL6ky zxC6$CW2EA82RXg`yEIQc#i^Zz<=;c+b{Z}>gZ)n?hbNOaZ{xck#a5|nl=poqT$l$Y;|f*cXZA`~;+-wX-82U!T6(k#OwW>U zcXImI_>(VS&n}P;N7BvOIlp7vYwyiM+@v?HY@jPmz}3INrdFZ8IYmZJ?GtvAH@njZ z{9xMHactq*n1NkVZsxvb8PR0F=6XhEWNn;}p}k{=@OmneKdD^0G9{jyxizT8 z8fz_wy}Wo^+9q$7UrGsLe&GXHMJX$I}{X8o7?bLg<=m0)YpLSAC zDX*1tN-yOi?|n~d`xD|DGUdM#_ak2MHsujp%yW>D&qxM$>LK~N{6?N52c+`cc?XHU zM#NY{$d?6DvUH6NrgymaMhga2|7JYc&)^j?5w>+N%A|C7mlT0BzhTP?6Pww-2TZ7U z_!O04KKiRZ)Pv`^|CUnC7o-yWZbngSE+k??+-BRX#@0(Sp65D-?slqqminb8aWo&@ z&=Hu;$NZTO)Z(|nBo>06G^au>NFJ_?!e|bkHDKiccgPDSa*8go4%!%luke8`@dhfG zL~7aAW(6}ZPe&GBlKGCk!(+MqUa{}D1Dk%+>pEWK7rEtDYRk3F+5zn(yT|Wp2D-Jb zdM`RUpLT|LY^v+}E~7e6+6bzxSYtl>qYtQqxg%rsx#oSG^$Urss35Q5mU-Uflk#L_ zGy-N7+fdCBMOGwT8V9&MIqcbJD z=;7k<+1<*`_mF;i7Jb-V=E|#aeyN)nzRHU7Ql3jDy(+Dc{*k^*4cV`qfG6}z`nj3x zlwE)$!ZD$S_(<$69gy}*J){Thnw=v=u(@<>WW`@-Z;f`bX!a&j|& zfDQWwN_mD`s1o(Wcygs54B-p6+!XR(OeJG ztmQ5{22PZEem+?2_nhE)S$06RC0jOE{#4p10ePI9Q9ds%mlC9PoYHw-JE>H1 zNT#JKgEwiXW<=6sYJ9+HlYd;npZetFK1s3LirMmRsg@A4Gy{s z3{%DdCn~%fpO1;$TK~cQp8_N4Nw1c{N>5bw!msrrS#>Y{bu^v(N~)DjbZ@z=E>xNS zkT*|qUR#LWb)54F?zm*KXfpbPBr@t{e%zyf)U8zi(F`b;z7o$TIKf1!&p6P-fvAy6 z6YXcnqJ6nltAno;H**q!kBx1{Fr&I58yDE{&{{93hsmGUIK36x0&O1qs#bA^%e4L4 zTP<3zsh1&`Zn43=hn@>m>{sfmE~aKQGy1Z9VlG@O6|pC_-V8QO(`ax6KhLj+3c;0eZ*UI<1)JT)7*he!IK^KRJWpIa7P#L)HsS? z{A9Fone6>+OQ<)BTQ|vwn%SI4OX99tO-vR>#Z`!(H&S;>;S^4%IUXI;=fv;jO86qb+nWfk zN=+2aw(a-kX?nm|YNEEFljVsU5vPtFOsZ!w4pO1yKxO=rEvUQKuBDb~Os`&0 z>#QAOF20%Gn4T~rr#O!((0ICj!SwP36u?b>sCHJ}uJ+Zw>3&mUquE6vi0*L(ns^#TAFxKOOIKD)+%NW_ zehJHK6u}Yg(3QoCU1`N8n{2o?9}q)goD?IcV@JD(kIhwHv$cDqBuG!itaJzkxEY_| zh*Cu!E$tFDyk>qwMd}kqh)={HsBkxkxy5pMOQEVu@$EQBl zj6pL$+&E$m2Q*m36Y6?3qzAK%O^)!+e)VD#w&p*F zIv>?bqSjn%&9A!Z+4;Lam}Nj+#^N(EL>sH-BmT1LIn5^FYW7vsj+w=1VV3QPmD`NQ znc|#L%z7DKU^fLr97UE(Cyfx_vQK6k4oy?(7TZW8L5}MXeb2eu?h+%@h@l7a7)4cT zI)0&lIH;6WX3EJ@Gj6}I*j{=kO=E_5u5w3ts~lC@QJa>P|KW3VU1w^U7=HbkPJS`B)CM|-ETCLFP+{gp zLBTd<>XI5LE2^dGDQfZGTChf`4rSxPdN#pLoFZ$VhA~}24_bq6a13DibIVHP@r z2>c9Iy^D&YEK&CsUT2*##He6=p>pY{N9k9%??!=)_0qa%^*KE^{reO3r5aYNP{CZ$ zlC>R7a72K6_Mn4E))yGrz}D-USB&@iX>GfjP3@#k*M<^(du=s^tYSfNs1R+B4Zkrj zvp4OzAzSg`!bIOcVk>D3@9HJ?i+Vs!Y|GeH_0zz9`j|LGlqeqYy4a<)o!V;6Qn*TwUJ6 z>6I1t2qURL_Y0O#ov&94Zlb2J35{l|aw|K0U0al#@2NWvqC;FvUR=ywHUn435^(N& z$!pUrmFm4OaTQPfcbh8kEcMA;kg$Vrb1|@(J9)3C({20FxyN(LsnOSz=v^+fQOAHhzuk~!~jb~)7S+EYEsDrtLee*tr|89d{AxV4puJvujx z8)p6RGuyAiIBLwv^w?S0@7GuC$zF#7REnCET^3>9hDpVxF!x|lx`1YKKE)0~UC-)saA4b_9{RL{_wMr%smA%d_Qk>=Vo&$4DTo z)RmRk1#^!Mb2eCZNoJ96p^`t2X6LxgjUu-nD9ZtyL8HUH=+R%ArQn1I@NO1DB|9d3 z8P<3X2yzinvO%2K3eKh*JyXT%+<`yu|pQw+HfwIm**ItCo z8E=;0-TvEXORZVb_!-{mi@u+JJhOg68>W@gzNrV*F=|~kw<@Z7NKwnHvl%QHMjg7D zc#Gs@bJI<owHwk+%wT?adpP8iNs&1U8tW0MhQ zezd0A(g_X3Jk%7+h?@#z$Y^P(^g?PwwYdV^|^DB%3S%YG+pXT$KaEg59QUA{_z;dU8FFF zJqt_h>FL~yibG*EeBfw{;DVQ%rF%Eo|eiAMC*tU>fRb!?^|D zse{ytYF|~MtGEQqXd0Q!gGRERsMS%MgbIbyt1q=?=Ed+Qdk^lgW8xv9kbOkhVU?mv zx?#G)qlm{y5a{;O1SyuPbF6e(YAyTZ$;w6Lu+mJ~Df^|y(p7OG*kmJij`USFIgU6d zxgNMqyK1=xI{P_VDIMq+YH%~IpqhCu4_3}9kCj78tWsP_k&nt7olYrj7_xrgX%^P<(L2oml`i4%*Wr!?nU0oguRI%mESH?=ttrpCAHvFx0{f0hEFQV_)s%w|j-&7xyhgCvCC=|p+2Zt{iAEs^U zJM}X;G>1AZR3|hpR9kJ&PNxpwW$De6U}bx>hRmwp3QhwH9P#$mP^Pe?h`FBz2pKhX)N8AR>|{}0S?ib-FeXAR}>{9?0Pa7OJ2z< zWmkqe4ml6FV%)#G-R}0T-p)3Trph=lusf1d9?6*xP);i!VPm%_wW(EF%Z7AMx)0i- zOG#8LFT~>FVBs9o2?om4;!Lkt_Qoh0Ji?#$f60aY!KJcO{S5}6?vKJh);fujV>&y{ z#u{ED!7K@*u#$@71Km}!F@vsnE;SeXs5reh##Uo8NdF0=1U+;QYLYh8sBvigvV?Eb z4KAT`|Ab0n9vYiGxSviy*?P~Gj!B9|_Up_>`RrFfc`Di8aH5kq!+2D1m(k6=M@hGr z2yBD4(Mwj1Tl$=;V-Y^tJJP-FUij+rh!D%G`bnXU($ub;Y zve^Ojq!?PfZD_e(!!zYYBiRSV)@-o&DdfRv#L{KngOT=E_GavHPlCI+-$TuFXjP8G1=Z1`L8M<(fh?iw52|Ci z-In6a7G#=tO7Qn!eWvf51p5V-2Jhob*Mw={U~qP@VX!~(SQ%fLz4~(UrC@e2e$p4I zxkA4LhX?nCu4%2!%k0w0EUpoI(}Rz-_h$FYBD|y{>_xe2lIhJ#z(1Uz+lqqY$)T)r zWOG$=pK`Btzjs}BPII)u;qX1DIz;ZKEOZ=qo^bVZ?{jZ-H+CO#na)c5i7>i`1xf-v z-!?d-elUJ(;E9gF{){A#-jxKRZ$EeGSaG%RA1GxEcZ$UZo}0GP%npTkX9mL=oTFPR z2NV9x?2fW)4@mPgb0cW)Ksc0DY+Oz>J{UpcAo=M(y{#UDH`UL^10$9y#$tkUF!tap zKsWv}Zm~VrMwB^W2YPdMbEx)ZZne|40(AZ>@tqw(6`L95Qf6XqyFE92{s(e*WwEFz zi#LUJ!e8vkE-ko)XUwv-Wj19C)ovLS^D;W(w{#8*(R|*eeqC%nrzhA32OH+p=5d4l zi0A19H5wO%#^lM9!NtLWxHrBEtOyJV^bO1k+zJ#3#_{_{@!k6n7#8Rdcp8vHGt@l# z5TiDFvXF6Cucj>wwa54Faqy5@#YnP#vL6#R;Pu&F94W+7y$#`s+h#v6JP}t)0nP>0 zgX9%65nBOysiUjwv-^{$M8sjwekSCd&U;FF6hmL-L}jsKr*o^Tr#sa@aksmv`>ZR! zYmD=aV~V4tqlu%HqlP0z8Kkh8mTCIO;!IviVoS1SZdsOxN%7(Up_RR(Z4=7%La3HE zx&Jc%FIW-VVppW}190GHF&J5ZJe9ws%~pR<6GG9U{lQMb?7{beQ=D7>K(W9#|8f6L{}G%p$^{nU z51b?D3GND147~D({r?6+!3nqm~d5kK)S z)Zk_wGWR+H2iN{mJu3HPd8J%JK1cudQaUb|WXvbY-72DJWaG$v5gR>6F+ML@htv+aehB z^Wqfx@rvxr>uy`cz4i|D*GAPA0P`(o%`{&ctvH#xD6R5911t+(v)=n0*AD zz|?x$6%c?QzydarXReBu#S3V2{u2+2$Jt1Ei62MBfAHVk2?ltOJ7x=b?O=2o4^fmJ zglU`x&Uz0O=yb5MQsK9BkS=S0c@`vctzJd{27lL#n*UGLh9_)PC?QxNcrq|5P(P3h zN0{yY7XI(P?Y{ZGO}_WO%KjC&&-4zg3#2wd?G^2hrd1Xczcso%85?9z-yn^@6E z!fCK&s34uiZLK2emAm#~;LX?Q2-2ef%ShLdEWVQ*%4ekqu1|iYm2yDt34YZ@x!_po zn(8SKSuScyRPLx!kv`7`_hi>zXG3Rw=Q3x0*8x{~_XPJs_b7K&_gB{vS6wpb8Rrt` zaA!5=T}K5+C+g4Ee2q)Ywl`%WezkC&8)ZG{Nl*K1_GRS=@8MP(33t~sPuO1M(?3vc zN}wuZQI!>-%YGLwO?CJeciR}$j$4?}XvIu-AHftRiK^I8ij!8t8t;P5IwG9}_t^!0 zFbREQL#ZH0-4|G^J8bm6!g)lUu77arFE**eqxUjt3?N$_0}Bv;0;3uY7U7?05*y_pbDQ^>*?-@HOI8{r(Jr z6#sI69e*+Z7XQt_s8B=gy&g%ov&b}!*ZK^tk-8@II#g7vXY9A4?3U0{%8L74dHD&* z$t=k)-IibB$Fj_M2^WzoXfZpZF&e21bJ$%^+$SO$MwLs~E8Xj;*O8kd`g*##ce+}; z+PRjxZ0@e^MeYQ5dv^*h7g4U`&Kb_3&VkPU&JNCK=NiXd<&3;g8isyWLnpfv2ZGD? zgZ97d0p?P=fQ>vtUD*w9;I%N-E5ZGr;kdFLL}|I!f%~IBC-%4Y8=gk9K=|(9nfW!; zHx+Hr67`&@5o%IX&!bYvLtQ>lzo3_-?!0G2lFR-gbM~=vvxQ=>t)Ja*uP<~5GcCx! z;=NtMUtud+tEHkOb!GeG9k{Q&R8_-34o;)KdWfU=-(cs@K=A6ajnxjP`I<zMGjE_%w z$9%^eX9o8p&)mo-QM1y`O=m?#MFk>)or)~ zhKuy<`bPZ1|5Hn;%jgG&1-}RW47dWj{Qdp4{e}Fp|C(dyaX|d)jywx_7y}&iT%h&Un{tcdv*Kk(qE3 zPGA|&Pxx1rj2Pw-Jh$C%-MKu?J*_>NJ@M{)t_W8P=Uzu?$4zCr(t-Zr2j#3>QywSL zZ3>5(PTmi5IF2g3E~=FV;SpAxImOt8XZ;1($}`$CErnMyS#ywtuPOP57yIfXmLbfL3otAoY5e)mYSUoN&+QpLQTFw-JveT(<;CE6))n8 zp?9I8U{NMsfnVUq;?ep)#}BKUalxnr?w^Mm<0Jblm*N4{0@S1`s+nJeQ$hi8l(-v& zNtTL$QH+(2qKO;G#6>~QZ;$d4=F90Yl~-x%fjFMSe9B|g9i`;E(nRofyL6B0CSLqS zdzhmav!LjyzQ{l)Cf;uN||TQ(W8J7d$&6 z@d>qGjzyf zv>LD{N#OD=RkwO7G&R(l_}dkVK(}*F)l@_Mi2Kz7bpRMtM|F~V6)nhiEr&h`$EusU zrWY~>7}t$jFb|DTkCkI;?kU@2#-P6H!hW1d)S}Zl#T-&~PO%jeFN45jFH70v{_=4Y z0`-*9%0`6^0m^sfoALxb)@mw)3Mj!x!D!Co?61>t)MqZ{vJi*&&|%o*ZRi=7poKXC zDwLj%s1s_zafYdnV&r*|RuV6-Zt82$meXJ=+XIyXN&a#EN^Fm~N?kg~H_+G6mkq!8 z?cOQg{@!lh&fYHG0p6+JUEWvT0=}WXYgDdl{6e5rU~3>x@KNw>sDidew}IbB@GdTb zOWpxzb`8D3Uh74;vHgVb0~^z`vwh?j+)0Z%&pTJScDa*1dc^(64pFgDb)#-aHj8{3 zu_fYSM0LDg_eQlzw>sT4Zpz|Og(HhawD25Z|HLTwD))K%#hGp=IL%<^-;Rx(qfM?W ztrF9Val&ixjRv+B;jY}(VPh@5_b_m;1=J+HsqNzR6s?o?0&Knu&v7GiX%n((6rOVH z@hKaMFZlXU5{{jX)j2rQMQBxFJ|}1gwVzPm)x?7>77bAyYaE=;S=jUvus@%|UBEb- zfVTcf5BN-IPA~B*y2fGhH@UU4M!CX?1r%Ko9WFE{^tIl{BOyzb2zWxeT{u(eNn!T-h18~_%(;U zg?(Mw6cUYpd;P$xz-Vx|4WR;j&dX{*tprDZKv&Fo_7@MaFGMr(Rm_NPXpC5l3T(AF zLpme79EF_@*IJk6igp)q7pML_=^pLr8__eeTGYO%BT+4);v*Llh1cBe+>P8z-O--4 zo;RMep0Z@rYOcJ_!j7KGEAX@ppxCF-o8^~Bq4qqFDzLVFCkXLNrbuJ?-Y-~rttMs< zW4wL@Ex{}GIgE5aly#OSkYR^wc5MO7OM2YqBGfWq_3PCa@MaY_yQyFxCG~&xHil|U zLdjPa9=t76CcmL*xW@#QjcL$W(3Yj3E!p82+cA;$0RAySdL`wf8tp0%rLNhC4#$)$ zD??GxT~?B~S>lzN$~W{KzsV(0T)C-k6!x>cM1ed8Oz9bsT!wr)k5jy7?@ygQ4Q%@g zPfJ}`k&EyhjV#&P4Yu^$_yg7aC_NphbU&>O_rwD@^zmev-0G*$p-_CNOQ<6Kt?{J%y+&@m<4y6AT6OTvq@+9-s?*da!^iImOFlO{^soM zZ0fAwtn3`=)Iqivx(9pmM2w9X5g|szcsjacUALX1onxG*oVi@RT!UPBT~nOv9ov*0 z+%4s#+h}~xq7qG^^BO?kTuPVb}5J@TyPA5w*=e?1-txyATboww=uv zs{Tsffub^sS|~xArmaOmIax2v^H-vHFABfvWQKV%xLQXhPrAX} z=SP3o*>2d!2`^x>ONv#%Xgi40sCL}auk_3}aS8m&oE&CqZ3nP`~a61IUVYcs9>gemKm- z=168F9vBPhqtY4om=zmLEfB3++9PeJ_7_unUUeT@`JUvNGI%L|=l0(S^Ar~v6^aEH z9~|lz8bCH0fn#QmP~FhaX?Xan;4|>I`*;f5LZ$iG*-%FE_djYRtba0y$Y|!%RJ{*) zYYLp<=Wvp3yS**wZ)S9)=|oeA1c5mwHlWjLBOjI}>VW)821Q_6qAmAISBK(U?DV)A zuy-bdYqPVU^B>$0n>t20&NwnVYdA|eUpcy=Uh^njVTzklH$0%Lz7Ae80e)#e9Pb%8 zr|e8SyhhEK15URpdeCI*`v6>?96mtx5=-VB4@cAjoy0?CQGN$o&C1+mdM3C!pqbbM z3-!=^z*J_?bi%r}hS5l7LS;@GM~eXselY@b$)%aCp3D5U-BOQ$yp5lF^I2Gh5c+Fc}f#;vZ#%F&UciGTTuz5>aOxwA=Gi(Q1^F&jgI7IeMFtM z54LI?di-iI#Ocwzn0i3>>0Uj=&q01**{r`~itwHOOi$9!=)38=;+ZULr&mSQ_7RoT zdTk0=NF!!tN@=CFvKkwL(7sIs9Z5mO-x?MFO}!fG{Q)T1&sqI(&X_`H7Ksa%8};9h zJeP6y|8TN%3pqjjvkL+m&&T-R>Gl$M8QvC(h~wdj--_?Vi=dN(#pYm>o%y{j+*?nn zKW=fNi^TrKOCA)A5n?t@x1?B@C+MAU0K7BxUCWQVVFxt9x0!~i&Sz-KpYg*rCZf@Z zRhzUeGe-FGgBMow^15f3S#+$t0-=_*c9nc7o!hI!`3fsb1wy zPTdzBz+L7UOy?t5e=jG2D4f7ltoYT~z zm#6{HPzkOF z4swzi(B(!PlaGzyRMH!t^y|dwYJGt|g?WtM(fwBeH_5@IqMIq2OnLz_MRziF0=@VR zo*9&l#!P%;4WkNp$|fdSlc_;m=r)@%rI<)}{@lvI6#oz$b}sQoxZi_`Dw+zJdH94^mw^k)MmuPeZtan3UP!hdBVj3!w zk!hQk(r)_vCd^djq<=328~qzM-8^ZL6i@E#j3TQcHS6#2+kKe)E`~Ps2wh2WH0Vc& z!xgw=?j(0EVY)59aGz=I!eoYx^uE1$0-B;CD9VXEMY}c^mCYD3`9d@`8_+>bgv~Dj zHhv8q)oQfEhq$$UmK)cpFyHqnerGx;VJsTO87QTe@|uS(awMwLzSa;vwhh!iRoR&8 zaHa8ow@}j^L4kf31$h{iK{{}wuW7EO%h<*f%ikHyglQkE6H4_`Xq&w-KS@l^-6bzQ z=D!!|O_p;GZOL4z`u_l|@>@>%44R(FMpvUOy~1n#JWRq8eH!>?Z>FiLqgc%e{+S#6 zx;=OOMkcM?%sfs3tM(a1&;%`DQdu>B_?n zE}?hIMQ)A3YqBmpRUcU58}`iLYKMgkVmD?6Qqk-GK&^L?>mP|hIGDVgS4qyKsFV+V zPELN+2qnU9I{tT@?=}=ARV0t}Nqj8c7e9)T%rEvyQ<}`@W^BV#QJBA5Mk*^6;JJ7V zT0Rgi<2$)vs?Y~-fG&LPu0o8ES-1e>m51fOUO&qrS6!$23t7~#(6rq zJORa295?1K;e2QplVH_WSc~|v8wGhXXY>*U!hdKtW-$dfhSy~H4mDUA4-Cz=pu9TwCFJ2ADOFqg4*O1O0Pvc zF~d;ybb*m=$F1D~eR&HsndP{doR*In$|SZm9l;SH5&XS98Quk_zK3bKeke#vq^WM0P@AW1 z2e~8*(c6uVX$Sm-fp(@XHPS6SPV1w->4)D&EwmGL=mm}uzY~QNp#!m{!D;`93i2s; z@GH?tT(&^{`Wurwbx`^Ij6OMolt*fS8tW=^`nl0!Jz*-KHSrw~KQPOhjtCwr9h6>! zIlqCWo1cc3SLI2l%=6)*c8eFQ;tIVQ&2n+3Ji_eS%z%T2A|#;$D8roo4DxmnPB)5I zRyhP@O7Wrmyq=ru9{Q>SOm=jq7OqV$ z>jnC^gcCl+3B634(s@sZbLIiIQSLIw zqm6Z&w~dXc^ST=`Otrd=kHqr|xbPUJ{dMglxc4KR%I`5na1EvUbIsIp(~*s!ZuRN) zm?u$LADv)LP zkxrnxJZH}&3>F@t`r0pMBd<>3v|5pQQ#kDa3gkMRbw5;F-TApadATNf%#N_GubHgu z#SYHepmbY_qN-SIBVns#qSQok1=y7RI@{1WFfg82It1imeiSDria1JV08 zQB@voY;K$zuM3-DDHF&FAnbJR0lk#$U1dESY^}(^)SbLmu(d{3x$X29W^IL4GH{ zV$8xAwJiCiC5!=aYtWH`AdGB4 zH_yv+k~icEDJuRf4i{y)tF%_?CfAmxNp+>t;!<&<@Ee&<+VkgZ6YE3|(^K?~y_jyN zS!p*~k#?m2(v0+H`U9O~ueU4P6D`BMLcj8@bSzmcaWP8SDt}cDJG(2IoUVrC2hs!4 zFAfn8@oMZc-@=B|bu>tOV3(8GVRDJ2@w{X|pUE})qrK0bYPBzow5(tD81Hy>Iw-Xt$nK&LM4)8~V%mHb!5Gp6lHj zQ`>t`Dd%`8^k!GB;#wx7x|S_iN*`rRvSP>+p}AwPJJmJ7H`ABZJ=Zx`{zE9m9_bae z%fY#6Gt@Wl6wOAASG}~f1qa% zbq%!(k4ZmeEMm+)E=#UTo{CW)y$z%GL@~!Rb%1=22F#)1#9&e&M@o*=t?56d{gJ*X zI7oY;4>r!(7sT7HLCR2PgSd8Hr+2(>maC-4FaF6IiJDnhBSvxkKmDavNS{OMiiV2)kEGu&rqr+8fCRqV-p+0y^a)l zt-3g-hUui+HOv#MV@0xQA5A7rop{CNqv&}Wsv)@zL-N3zG-YLuzMp-rVQ`*4LiQw!& zhTzk1*U;zSP`!#dMBk>x*cI6@=^v$%_{DeJcUx`czvo`#?BvJ;YIGv=_2fOWTgO7q0LJh(N!@lqaeS#?) z-SuMjE^{^C>wM2Wj#<%b)OOzcp4yIqp334vK3!^LZ_~N;+(_5=SzaqMuO?Lx;~k&f zeO*x==C0|AcTSVa3%B`Mv#owe3xvjos)lZa{90D6oz_S1ZjR9XdQ0mk>w+vP^Z0rH zEpIo+VE+tP2lr=3ZQer+k==TGW4Sd^?_gxIUfb)00%Dw;;I8Mc>+)eA?VK(pAmkKg z(M3j4qniFHJUM(fybcoaN*is6rf7~a&g)&x=K2u+Nd1@2QGbYP=xFV&>}l>Q@7*Z& zBc}A$KCWl85{(u{Yjde-vBts+VTL-()!!w#e|O(?m3FLFpnQW0?o>1OpeF6oE0f?DSAZf%IMQ7fY-8{dq* zW`c3kC~K596V(>NP`2Bj=4#{o!547k_f~SAXFa7A;!j3fbDecfA7W)P*IN$-C+RHi zc0P6NcXn|XaV5Gcsy~Yl#S(mj*}+_?&(a!dLb$Wu&TwiI^$SKh^P|yUcbZr9Y{aiJ z`=(mmze~OB+2qdaD&ZX^4I*FVovf@8W48cRUzoj(Zmbu%&fIbX$5VB`Q*w=UHFr_@ zu(U+F#dIr|^@Abnd&8r`mGva;VtApR5ju2FH;oE*Eqx3r=?L3T)k)rM%Aej8r{A&1 zJ6_I3vMT*ZAFBu5Wwy4C+2xJvc074WUy-(QCwY^qsgG2*tBblr`bo|yY^TqyipDd2 zjJ_^BSubr~)WgPP>zb95?z8&Y1Nlm;2rr`CVC}^&j?&U0^@+M#YUP-sZWOjindBhv zOMc_$={NqGmbJ@qA6M7|uEOJN70!|Mq(CB7?~)q6+Uwh%^+M3f+Y%LNB4O&_eh@a6=xB zk}YHonN0eUrldB>N`gFzU*Q{hA|HceJa5h0^Ip6Tufj|5IG&j+@SXvd#vZ|6zGCUD zDy}!@C;10>xB+A=Sw~WcNjNDh)DT( ztMGp=pU)@ozPu}M!|U>Lm@_+$vfsV?a6EAZ5laqIkBla>aO@y=$t&`Od?p`A68T7O zk<*xM1DQ)Ek$$8Jq69BV=CAlo>}?O8-paS|m3%p7O2n}Y^DV}H$Md1QA2`_nvy{Y9 z6FY9jC-Uw5Do^22q%`S_@n(<(WIM*cgyX{Z&wk95NETup6G?y4n$#c#5C_>j6>-UJ zeu1Cir}%!%xCQfW#q1k#Y{0Cu_#{4x_rVSu@>;wZ_S%Jy!)#Z;Ig#YS?)rkBQ^=nf ze+TB=iobinubEiGY*2D6=|LKiTBImqCk2!lVxN*o_SPKF18~Xgbbjl5u1t8G+Swf&AAd zKar9o8zMXhp@_R8v%bVmAAp~i`6bMJ7V{nCC-`B^xfhXEgxZ_I;eT;{1natmyLIj+ znIJJW!JUra(NHo0JDNtOV!vacAALy&{8ERMA-PCABs0RjTX^;eM)@1^vK$h+0Q;E9 zXW*EQvsKvHe^|jQM6_N+okc*I=HNyz>}EVho(NePkA3t5)!LE9q%I=Tf+RCyR0%QV zSM1^=e~YI-AU3XoU2Y<+gcHzKk(}cN5O@AWdgEy?cK$meaErUhA--20_Aa^9-Qo2k2dS z@bNro_ZgC%gjn|pFOAiiyeeojoeUve!Sf9msRAiQ@?%Zid2Q&PgU@6&Fn1bVLZ7on zJcc(UzX|t+N#X+WxY$yfC-xV52-nD7?&QC*Dy${DNj)qMa#4)zB)f$~@egsZXo(ZV z!NNuCt{WfE+SAH(2#up4jwOK zALv{{2??!LNt;*fp(f~2OG!!W)41rf8pJ5M-Euh zyh0k;Ov;n9(Bq8!4SUbru+K+%Jh*m@+$1kxnO2ZighLB@!gglnMd2aVLDK5L!Y_eF zZvf@`LdLJcigx2w`LD3JfAeQN7vyc`cm10Hx<(@dIt;Dti`f^#iUoOAj5-1mISKMy z0lM@YHs)_W8M?3)cfR5YutK$=u}xq{e#HD~khSgLjZhqhMevS ze%%bKyBNAfTu#M0a$~m*Al*Zdw{-{Ki{Q5xu->CVfm*QC zKk}ShV=q`CSk{8@FHT{Q@K9JNl!w0=23l{$og?8{_QL|y$2dJmbrOa(I?KH57Cl3s z(R7v_lsO=56W8F#A=VX^k|8`1vYVL|XXn{^-k$`?G{F{b!=oL?-fQsr_|3^`vze?K zF9}J^Aj}bF3N<15)yZvMncqal8Dv#pm&(JEhDo&G7i`#4%2&hUn;7*CI6oJ*w;Xi! zKX~{*VKHi8XRF{D#=tiJ4Na{Nx&N2kfNz-u%2gpZ`CxeB=DZ%{V;pE^aEt#4n_L2V zdl%m3EI7872jCkEfs=QMAjpDOFks1hfNn{!i34~$e8yvj8N3s(2#FuhcJL!?5$%nY zu$wGd1cgjDHba#%4(Cc$oY!%&UA)VkepO= zI}S)K)q>7nC8iIS}$s<;u4`F{<=Z%i$8ncM`gIUks%chy* zr4mtbBv!r`{S8)it}xqb$dBrcwI{qc&&7Jkmz@qZi%Qjp@^*1B+d~6vxs}C|c}2vY zEy+V+m9UtH=uLXg=0=J>$gFNu58pON7<9~vyJs((c*E`ytelokKm$Mep zzQ$klw5yZ5s?^n8)R#>;19>e-Dq5Ab<5mZL%YH|PO8cbk@OMW@cK*@~=~s=~di}5~ z{6%L*He;cypMNgD9@RBIQ5d3@5>F#@yq10}e8b+4OstQ($@{A^$Qc`*?3gQ*5`(;@ zbwQhJOrcBd`F26Ex_k=uaIrXuPqscF;%}zC5A6!y4VBX;nqTM(Ursj_>t{Ic7llMe zebUpiv_^s7jWnZ?QBBD2{NQlAD*EPnb~xThtH=&^*Vv|=MK17*b)Ib$nhB3c8uVcf z+i!(H<>R5|!7RWx%IeF^yUGE7SlZ#cma&q0QhBK!q20`i!K~qXdTq@?gJPVcscWOV zpud;*jq+J4Ar7YI%2$odXjy;%!rY(DtP6C^LC_6M_gxJP(v@LhU(IG`oSQQk8` zr|43drm79yYu)$wPHSFxZ@7PWXDFL_jUSS0s4h?csBWGw&PC2N@fX_Ax@k<%E9o1J z{q`36m_8(en4277B5zBVXotcJ!u11v15?7Ul}&0p+9}>l7$&##m-TfK>(j}`D#K}^%nhc;?hK9I$4q$9y0&Ik)1QWF z>90dow3p7N(m6UV!Sqj&YDd*}FBBZSxn0jXp+{+1&8g%K??KkM^0^->JzP&*Txt!y z`w@XFX9`pmt!}d`U3_q+uSPf0}rhA0hAUNxEq6G_z5awB#9-f1Np%caHw&EXrA_v)s{<(ca@Vdy635S7&Lf8$_Twk zCd;d3H_zM2=0G}0l9fwxNoQSmN5>?EDov$dc}sSUzA)eFiN+JXg4Rkaq*d1zg!6}n zYeW~Urs`ffMrsk;Aga1rKkAKlxS+x2XScR#3h;^T$UB<}Bb3WBRfFzC=Y8d#I#ed) z4Pu}z=2E?(4)h>gA+$1dBiJSA4$TYgGz&{{@_1Q`Y8g}7)hJ4f8ZYM&_lu+KE8%+J z!azNb`HasH8%u7-G4~|bW5*}w88uayOX~4V)<1exJv}UhItTv=4hdN4TLN7}h0G>G zZl!~A&i^nrpJ#GZQuI{ymiS8SOSgt&^s`1*ZHFy}Nf@vnYqZN&IE6sAN~1g3lNh9;<8N z?%@sQT-KNDmX$!n9QrDO?DF>Z?=90gr{ z5?aR(k7}0CJG!!ZMye_Vv}=J~;c}r7=hpUl(i`S{dA> zbzy&rm*h-t!GGWT(lgZ4%F##c#0Ob9v_N1&`l{5$Neh#1e?6AcOk1wcR;qbUxUOU@ zl<{&@vG_*OJ~tYG`iPJas1lf(_A;eiYWQ2p^n>PJGn?bI_pN(HhFS@yeb1vF zdmi$5yMeheEu6kBm^*ZhH4);aF}~eVes7|`hOe=5UHFw}F#pi9gqsJq1RDkKre#dO zlhP_}ztO;~A^+!fIG@F?&d|}j-+RYi`(HuX&N ztdfiK{`9GFTkEW?3H=zZs;vy%NxzkLHMN@F(Z@?KPnM=i}*!MD^s&8x~kn~M1^ zv^r2!+ZfKtKdWcujqXP=ReYbF8C}EVEG&;T)yQhJ(MN>0X;+P7p-<^b;J?&GVbL(` zpS*_iCwGpFDbWXAbKC{gy;eJYQTSZ?6Ya1u-u5~IuJNwQQSRv4u187@X%o$6F3|Jp z>x>KfFs-ZEU*8hApS~n@PN=v3#_Hu6>N@T^m|ecZRNHVr`HVkO3$IMw~Dis zj(E>LPnoD}{@Kn6@^G@&iZu%96ZPNC;pV?a8*8RMFjy_HJ!Ncgtk&PE;vMd);gT}- zkA3RO;hHM{V#R24LQ(0p_02RNDe3&`-S3;`KjR(gs46DW+~$7$r2ebX!7{A7<__zW zUMYAreRs;~fHR!e+U6VYzT`Zf>1A9YcQ)r?ai_U2oHaNy^|M|I5n3JB@TiJWhx{)+ z6O;v{u)Rt&Oceqbzs)Q(7Pl~y}&T%YB$y;sy~nYv~y@AWtf3pK4~ zTDQQYfLbq29qn zb1J<^v#_7(3^w0>7bu+eF?CaFwe)3a%ayqavTJ+P=q&NE$31<8rP_LJmp&-9d}=i@ zr!%v9%-1+3Q}jUZA3`_F!xD`Qfm@o&UbF4&9QNpE6SZrpf23|t&6U0|?GV2f7wuc) z+nwoSY`ovCT-WY}R~s?GHL0`d2ghLN5$`vDZvQv$UMZ95w@~{DJG4f2cK!>AXVF$q zyQ3KjSZUc)@28FptP8hsC&v}>6pQm@tPu6VeU}vqztH>W=L280yy6|l6HhMR9Zyzo zl4BoxW@Iz_8;|sYX2`n6F7P{cRx2Ci;!Eh)K;G2G>E}^%X&aS2Cc!;3{&jqF{}}gU zO2g+-$tn~QO{es?TFRq&N;);?L-iQ#4g7nRk!aL5W%IiI3$J2-GonpP`!Ad;R587I z`oBRYw2Gm=G2V)Cxnoj%9_JbBp8hu-Z%x(5(q3W*^%3y+(ef@OO_c3K`@(+l1}SOpFk*}XreIgFRvH)0Z&p9^C*bJ!j7>%<%D!QrI~O7IeCtM&1d%rBlLlWX|hJ6|s@HfhW@w$SLR3zwDa! zcKZb|ihy<3+H60w(``bp*-a7oar=f9Z7s77(DmekT-9+>?dM$JzUj?Ds6}!$3(?@n=T7+)5htMC`2-X-_?KgIuEkoQF z%{TEgBm?SzZ{&JPe&quqiDL2+sgpQJ$RV6W+#gSl0z=BmgKP#{%;q99EXKe z1tMJz7{?Dl?dAc&9gBQ#9_a%-ZYR){PC(0wAqSVqN{q1?vy4afz7?3@4CJmWxf6KG zT;%Ngfe2m!*0vCs%yK>)>klFy&xv{~!Rkr_0ZB%N{|qBmL$-Jus9qR2pvKct8Gp&| zV?`&iatm1835+!Y+4=z>)cx=|j#{lS75lrC-&eC`sxr@v= z9_Y+dR0wYJ^`J&mASM?v@-iSYCh)$eKx8igUrs-|Vau2+z0YtJN&Y$xedOAE{tgv{gy z3hN_p`MGy>}Do*`vkoUUx1R;!rI?MzGHx3U&S4XSo1inHxrPrC7hwUFdg#q z8C2~K94H&Ewj&|zEQ}6_C6Jq6ARpC8I^@v_nh{`6zXQ?#m5hVj|4J@Fl3hTfI$&LI zfqb3@9v%e*Y&0Yy7wA$15>Xf{&W@!k9=?tDCV7FgR6^D47LQ2He&FHlfY9HB7WD#kGJ-~Vfo7`Y z6r^Q1YBhO4&k*pAe6WGNATI^+{6&oCAz%4G(jMq$3yl1YwY^u_9f)$CiFH3Y{?a@pe8KMRg6~*|KqR<#{HnzgYUF{g*sCdY_$q| z<{>Hgr5Lo+_g$xBan}n_D+YEb1J)iyeaXbgDkN|_u3Mmw2lKwi9qE|)8Fcy^bk_-c z%peD!aZM%Hz z+#4A=@{I8P?#SQBd1Pz_=aCte??+@k>h~)WevPapav%G@StBcq%q8Hugu5bRN1lwV z;eUTcT#+zaWWLBwWgy{^`y=O(@&5n&6wLI$E0Hr5BSdD7^oB)b)rFBFl>zztck%yL z7omy+9~V9{tZ!ru4jhrOBfmItMfzSt6mcHuPm5gje!m{MSH`!<8X~K4;=cM$rx!KDaYRd~=iT+0JFEe;zv3<%~E@|3)UU!aJLVo@`@gS*EdHaUqZ zdo^La@CY$TGgSB1kq!I-tH6`lVfL8C@_oD>EX#JXQLH146(sT(%gb)ForqmRsLvFI zHyaK~4(au?5xnbLs&W)w?^o5i!@TydCq9kEqDv7Hct-egBzpfoLSFSQy0dpe=z z(q@IHhs|&)jaakA;c9kAOV=n*JzpdL0{3HOwNgo`DL&v==~X%!UVjD4fr{oY@FIPH zUClFl>lK21(rTu(PHB}Qght3C9DUTD(R*V)#6HeIJx!%{${TXj_(y*eni{^!-Xkh5 zsnl?}-T6KF9Mi;8l3V=Ko?}MqEkZp*32D#1+FurY{WmpdcpEwCJL{_(n=kX5_?K~K z{n1Ip*`}BzFM2K{po|WH`X=B82>uYeSd*i=B?=b zDx5S@jYR9SW@zKB%yt8NlvOcYI{nY&reCk5b_{v=KfcYLnNd8`{PiyaqR*Sl7kOEYRuv}{JYW*gh-f9wj~YP}EFPya3Hw=W}8 zj6gwBGm3b>MYqgyIX-`EqMKS>!i~cP)3PPKNxP`U-@TEmd8H?&T&cxi$BfDE#7h3BT${<7`E(a*V4 z7l`*`nSV-rC|g{nit%?Hjl&mH_oqEfs{Hk2>H%Yzb8AA0ObHox$LERKpmws_r+-MD z6nw5Lz@Q(>1=TUgzh{T`q-^>e{XW;HeJQ&IA--zNx_Ez%^_g?U_jgPV9ZD8crzOc> zhNQN!4mstF#j?)L*gbx6)KKM?aVl+n%DBKd;{@#^{HzXeqzLCM8akBH@AIs;>IZ*H z4`Eqc_n6c1!5oQM^Ci@F90dkf2BM@5y5ua)z2)YKzumiUVLs(9zIsP zAIKH7!ydR`{?Mk2am@;wpa7x(rSHJjE ziS^P|-2K`;I>XKv_TLSaPk@vI4LO6#H8IG1D=OmY_0?i(Z-ws$G|Jh~!I=z$KX zg2D}0(M)7MDwq?QM(5B5^e6NV=(Gu&%8s!xss_&xKW#uQy^3&1s3Oi2_lnoV9b#88 zuc!;B(J#;d4sILjwVg1|VN{`Svtg_(D#DcBrAO!vx{c{;Ndm4zF|3U0O4$*HdWF7|l1n+Z}ZDD`1k*p7nDeMY53W}pMU^}9O#;7811^u29 zS@=n4jP8VHLS0nW%b<@TPI!&Zt7W)jC}R6uhzV~X?%je+q7Sc+-n1;-kF|fs_%~7Q zK80D%p{PL2ZbZBg9KRW88W5@d5R@NQ#~onJznRTTN^1hN=0{{c|vBhd*( zz+%GdeT0ubkFK$~$b0%>^y1%pweDf`zmdZY<{g0))C5XV5?-?a&yP>!D1n-ObF6$f zax@*eNdxo@O~nc~k$o8LIi$=a8vec{*U1TtJ_j<^4cTg5#0MX-qHRD5Mk7aQ0ov3A zmQn?sY?Ux(4e+5pcGM00UW7i1H;60pf3N#bCX3*uPobyd4SLMdvGNa~)NzbGAClJ% z`A|kgj&~3_ECoON!^=0pNOj@&>)`*dSZzDRAH6Z|6kr9b;PoT%eFCzSmdK%}gZ5i6 z+7(o*Utor3nCA$xjM-RsN1z|E-}$)*NWoah%5UF0#%f{Yx|pQ{#_b1eVlp!8rJ&j# zU@1>9wij_w17skRzxS+dA^WlV^W+@5*0!PgKMRP;I>c4?$T4&xRuqEhPdWv8dCk_a zMCO9bHAO!95a>@bWT*^j%G&`$ME1^lveW35SdV#8#U-tU6i_3R*i>8tP5ciX8HdnY zbs14mJTJvkX=b(>mAGm2038c!(3rNyr#yXZ-?lHKfBrr5h!c=c)=96|WA!#2MkA{*KVY`D9r6tH*tAl{D_q{7tW#&HzpB^eJ@OJ|p7@f~5?7G3v_HGV zRC?6DK@->$^h_-WcJ_&urX6T$`)Bj3`P9g1=4T^K#r{E}ES^kNd~yjnMJc3?R?Ddy zWI>HrbBa5~!;(m%fY$uM8qtGvKV`658)#PEjAfu**+M$os%@3G3ZcHA6K@H$GUElr z%;=VorSkGRWxc#yovbd9mnp;5CDIY`rnFXg8^LUN6}B5)HJ#Wox`ih2TWlpA#^$jV z=$g1_JvG|^?JPlS+987@8%$)Yq>xxvelFLPuc(F8Lh@~8vRXtcB~_7o3N0az)A?Ms zlm5gOvAR@Z?Rg#ckzRo^)tCNP94yXKQ$`Vjwyu)|)@m6mykz zM<@hIAaWZ~K#xd1rLHs&HwD;!WVj$be1NH-Q=&*S>?LYQ9h$|R=UX@rIC^) z&W3l|O#WpVq30dZJJ1^1{(!A#wa^n3&F0V?^s2Sfd}wAiZ(6hL!Db~OBUxBaajH~R zN|zcdmDE4MmIdf9&~gShj&@S-@(gwr{nBYvxM2%JZX6C4XC301G0o zE-9n(T0Nl@QO2oZxtIJ#>LX?s_rYEc(C9P zm}iZfrfBytzp`s&EZZlBykXMNrMH^Bb1CCaJ_3XhyG=|ND zZ(5G*{Vu%jZMxjPV7bhZMti((BiQGRc5Ir^mZ{=4WxQNLj&^KxltkL@S1-yFqpWs1|8ePVqgWI@bQR8S|Y}njjpdPcC;O9Dn@x@uHmq2nJ=t2!e)4Zp-M)z zg{-Qk^9S{XoT|20cEa)(6I+mNtPX3yey1z#GxPy`#E(2gKEeOYMEBwpRM)E8s@YSI zF^=oitgYsCGfp^wY<;7g(J@e&th93Vb`(@rssogk(g&fw(1*-q9qC_m3jM>5qmhif zD*r+b3J&xFt|0aKDf=$oW9W>^*D>vl8D}jqa*}|MoBSm`b%fL+N_JP0bBN+quPXJV zZiwYp^K`m^92~w$~^F)u(8Msw@+QzD82DLj{Zq3kVT0M-tbduOs zxF(i&FlQsx>CEr;J5DL%l$X*!LJjnd9iq0a+Oi$8bHlE#=dw^y@QLXD5D%c=vNIcL zdChxxQ{zH75YA@hGYeU7g$LrFqNL_=&vRCHG;&9|@~9u=a&ojdj89=z=|KCrRl+J` zZ=`SN2i8kiCbkhXN&6*9%ujOgm3AYuke)w0C44yK(i>QhjBIR^bX@8sA9F77Omm)h zZg%H(c2e$0iDDVzWiRc6RvW91Rn}^4SA~AmB@@Mvv{gDJ9YF8Jb}q1-Rz~AgSPktA zl@G1gr$PfC@C2p0Vku4BhrGRA4O~6lXC2e!IbyVMnH{y`t(9gD>$b_v0<5JT3&MEhjng~DfWZN=I>*qrSg0F*bf^OrYC0b8O3-zoT>nQ8l=WFgB>N?|U>+s8M zkOhyRne4@81*3|28ybJY_7RUbT`VjgQaUOFR0sBW(RvUeUEpJV&s|147Ir0Q>i0g5t2aXk!Dq`f9P&tSNe;<-@#-(OdGSO zg6z!dNpf2r)nD6N-CfqXMZO_C;N@r$^Jile>Xk!{>Q+Xo@Fl`@>7ZO+jdu`u?-*$T zIY~!Z$MpE{_Mj_JD$q74h96i4JH!8yFS|~npW&-Fi;uduy8coZiWN{_d2Z!2-srQ8 z4MrEUv>nIV5_D(E8I?)s9GtK0mTm}bdC0zLe$nQI#s_-`js#{0t84G=ORNLAp*(Zf z@V)R&_Mh@Lba!-Sl$US`)y^NxC;EB4jIq}IV!y)Mgs;R^N>KgL@j_jzT#(KS*}31o zWQ@>L!c9XPf(HY$f_1fC#t`O^4#@8uy*yofgS|1HPOi#oDr6%E`_Zb3uE%^voH@=G z*e2dgEFyc9^6DaWiSk%h<*&j^K7e(Bt*&fz(5s>==t4LpbTHi7SY%}(kEHxcf@83& zo~Mudw)3N!UG61*AjerXyQNjYnqcKa45zWVWQO=gnk}D^o6DD^+0q3upYS(tz;4;g zt$F4w+eYirg|sv4 zj+(+g(gK>jL3|+|6I+Qpgv-E6EAaN{(S2#xK_6VedSR_brMQ;a7H?plq$9}$;Q^jd zr9IMe9KT6V#J=Jc(E)E=P&^@I7N#H*I*L589U|o<#N79R!wSgR$^yYXg*Q%AzJyhS z=XKBl_6Mu0mD#FcX_k*tx|AjIy(F)YDwLPfBvJlNzAg`u%ga;b&hm8WJUqoqR6UO1 zE!R}!sn=209nAKlFFtbohyG}Sh@d;-=FavWtBh6CDr*m;HSzY4h)k)vP*K4HDr%yhFT^e`Lp??;@GA;LN_r`#A`e3ne*M0u`! sO*WvCk diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/A.fst.txt b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/A.fst.txt deleted file mode 100755 index 9ae01e89..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/A.fst.txt +++ /dev/null @@ -1,10 +0,0 @@ -0 Infinity -1 Infinity -2 Infinity -3 0.7 -0 1 a b 0.1 -1 0 a b 0.2 -1 2 b b 0.3 -1 3 b b 0.4 -2 3 a b 0.5 -3 3 a a 0.6 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/A.input.syms b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/A.input.syms deleted file mode 100755 index 432ef116..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/A.input.syms +++ /dev/null @@ -1,5 +0,0 @@ - 0 -b 1 -a 2 -e1 3 -e2 4 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/A.output.syms b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/A.output.syms deleted file mode 100755 index 432ef116..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/A.output.syms +++ /dev/null @@ -1,5 +0,0 @@ - 0 -b 1 -a 2 -e1 3 -e2 4 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/B.fst b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/B.fst deleted file mode 100755 index 4e12001b9aa79e79f4fa84febf994173be065687..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194 zcmccicT*i30|P@@YH~?_5eJY}T#}fVl30|&1Z0B%Gegs?MhFv3vLLY`%!YbKs2GR_ z;j?GX*h0h_>Y0(`KxUpj<6{Ss1F=E$teG?IKx`NvsMijn2i07VJP_D} 0 -b 1 -a 2 -e1 3 -e2 4 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/B.output.syms b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/B.output.syms deleted file mode 100755 index 432ef116..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/B.output.syms +++ /dev/null @@ -1,5 +0,0 @@ - 0 -b 1 -a 2 -e1 3 -e2 4 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/fstcompose.fst b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/fstcompose.fst deleted file mode 100755 index 4b21383ba38c4742a48155456618a67dfdaa5616..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 250 zcmccicT*i30|P@@YH~?_5eJY}T#}fVl30|&1Z0B%Gec8WBZLViL8?(fLp>u@0Hg=R zK6}Q;4kFf2&x|Aol0SRqj2%oJ)DC-)8jyMrf7VP%dln$gz<_ElL~bVBTx2^za>mBS VSoJ~OVb2Owla{v39%M2I000qc8-4%) diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/fstcompose.fst.ser b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/fstcompose.fst.ser deleted file mode 100755 index cd45f89b9fd3982bb47bf6aecff58eef92a57b09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 404 zcmZ4UmVvdLg@J*AwS3ShW`30HDi8;Yg0o4U8ukWOb{bFKZs3>Ak!KW3b1?Wr= zU<7F?D8B(@vV*ww4L}kCn4xS&AQvVMR1Ie{1KCVaH6ULzK-sJyw*9iSG$6$W#9%#k zK4;DX*&wq(d?vdyU_Mw5#J2|$Kmalmtj1n)<}4r^WG+PgOfVm=-`?2R7)hSdJ}oUB Q$OqXCHq*WV$O76A00U@BI{*Lx diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/fstcompose.fst.txt b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/fstcompose.fst.txt deleted file mode 100755 index 37070276..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/fstcompose.fst.txt +++ /dev/null @@ -1,15 +0,0 @@ -0 Infinity -1 Infinity -2 Infinity -3 Infinity -4 Infinity -5 Infinity -6 1.3 -0 1 a b 0.2 -1 2 a a 0.4 -1 3 b a 0.5 -1 4 b a 0.6 -2 1 a a 0.3 -3 4 a a 0.7 -4 5 a b 0.9 -4 6 a b 1.0 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/fstcompose.input.syms b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/fstcompose.input.syms deleted file mode 100755 index 9cfd66f0..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/fstcompose.input.syms +++ /dev/null @@ -1,7 +0,0 @@ - 0 -b 1 -a 2 -e1 3 -e2 4 - 5 - 6 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/fstcompose.output.syms b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/fstcompose.output.syms deleted file mode 100755 index 9cfd66f0..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/fstcompose.output.syms +++ /dev/null @@ -1,7 +0,0 @@ - 0 -b 1 -a 2 -e1 3 -e2 4 - 5 - 6 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/fstcompose.states.syms b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/fstcompose.states.syms deleted file mode 100755 index 097aaa4a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/compose/fstcompose.states.syms +++ /dev/null @@ -1,7 +0,0 @@ -0 0 -1 1 -2 2 -3 3 -4 4 -5 5 -6 6 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/composeeps/A.fst.txt b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/composeeps/A.fst.txt deleted file mode 100755 index 1e4dad73..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/composeeps/A.fst.txt +++ /dev/null @@ -1,9 +0,0 @@ -0 Infinity -1 Infinity -2 Infinity -3 Infinity -4 0.0 -0 1 a a 0.0 -1 2 b 0.0 -2 3 c 0.0 -3 4 d d 0.0 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/composeeps/B.fst.txt b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/composeeps/B.fst.txt deleted file mode 100755 index 69da17e0..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/composeeps/B.fst.txt +++ /dev/null @@ -1,7 +0,0 @@ -0 Infinity -1 Infinity -2 Infinity -3 0.0 -0 1 a d 0.0 -1 2 e 0.0 -2 3 d a 0.0 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/composeeps/fstcomposeeps b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/composeeps/fstcomposeeps deleted file mode 100755 index a5c837e9370cd1721dbbfff981912bf8f17734eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 389 zcmaJ-!41MN47|_;n1Bi3hcW?T30R=CrBtG&B(2&PFbV@O4o@~fEWispq!LI7OP90H zzBtO|0o6zVs)Cv&rJYw0Az?*`2(jzRJq`eugoF?}8P;H$#I=s{THA7y6|G*|O4}sQ zOje|NX?A56h1-P}CTDrSrK4vLXbr~yteu74#v#~JHdjiA#}g}nXW_Z$Iq)n!E6@G6 r3j<>D0hYNA2(-n4=qu-%`y4#O!Qa;ToIr>Ap>=zCmOb4){0 0.0 -1 4 e 0.0 -2 5 c 0.0 -3 6 c 0.0 -5 7 d a 0.0 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/composeeps/fstcomposeeps.input.syms b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/composeeps/fstcomposeeps.input.syms deleted file mode 100755 index 6ccf1957..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/composeeps/fstcomposeeps.input.syms +++ /dev/null @@ -1,5 +0,0 @@ - 0 -a 1 -b 2 -c 3 -d 4 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/composeeps/fstcomposeeps.output.syms b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/composeeps/fstcomposeeps.output.syms deleted file mode 100755 index d8fb1706..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/composeeps/fstcomposeeps.output.syms +++ /dev/null @@ -1,4 +0,0 @@ - 0 -d 1 -e 2 -a 3 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/composeeps/fstcomposeeps.states.syms b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/composeeps/fstcomposeeps.states.syms deleted file mode 100755 index 7498392e..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/composeeps/fstcomposeeps.states.syms +++ /dev/null @@ -1,8 +0,0 @@ -0 0 -1 1 -2 2 -3 3 -4 4 -5 5 -6 6 -7 7 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/connect/A.fst b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/connect/A.fst deleted file mode 100755 index bebd83a7317b506ceb497b64594756736545e6ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 522 zcmZ`#Ne;p=5F02U_Ae!0sVG;FO2v@|Uc#9pkKs2+#PLihk*Ji|v&5e1>;1gUMC82R zb;oud*{Q1!P2D!*$njNjdt6D=y&Z7U(2q0+Bo9t8*Py4Go)~)bKrgxXm1;1)`)Q0t zzP(nDx#WQu2l0fMJ)vtg>;@gqML(U<;SZP|81hzIB2oC8CJ=p$#p|2wfxOigk^l2A h=f>{bKe&~?WBfat&1oL%q8It0j`d^LjrJyp*9TLfBzgb< diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/connect/A.fst.txt b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/connect/A.fst.txt deleted file mode 100755 index cf3cbbff..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/connect/A.fst.txt +++ /dev/null @@ -1,32 +0,0 @@ -0 Infinity -1 Infinity -2 Infinity -3 Infinity -4 Infinity -5 Infinity -6 1. -7 Infinity -8 Infinity -9 Infinity -10 Infinity -11 Infinity -12 Infinity -13 Infinity -0 1 a a 1. -1 2 b b 2. -2 3 a b 3. -3 1 c a 1. -3 4 c c 1. -2 5 a b 5. -5 6 b a 1. -4 8 a c 1. -7 3 c c 1. -7 1 a c 2. -8 9 c c 2. -9 4 b a 1. -6 10 a a 1. -10 11 b b 1. -11 1 a a 1. -11 12 a c 2. -12 11 c b 1. -12 13 a a 1. diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/connect/A.input.syms b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/connect/A.input.syms deleted file mode 100755 index 0cedd174..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/connect/A.input.syms +++ /dev/null @@ -1,4 +0,0 @@ - 0 -a 1 -b 2 -c 3 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/connect/A.output.syms b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/connect/A.output.syms deleted file mode 100755 index 0cedd174..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/connect/A.output.syms +++ /dev/null @@ -1,4 +0,0 @@ - 0 -a 1 -b 2 -c 3 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/connect/fstconnect.fst.ser b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/connect/fstconnect.fst.ser deleted file mode 100755 index ea94bd348d77d57a5ca3c85b9e22c49ed896e5a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 595 zcmah^TTa6;5S+LP&+^L&;1Br(2z&>)KnbBlq9uw`QSn2Mk^^ugZh*J|U(6UASxAMI zyq+2Fu4i9AP(76Z$^q4R)A@@5#f;~Mr~c;!zQ0GQe%Bme*a diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/determinize/A.fst.txt b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/determinize/A.fst.txt deleted file mode 100755 index 653f5b5d..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/determinize/A.fst.txt +++ /dev/null @@ -1,14 +0,0 @@ -0 Infinity -1 Infinity -2 Infinity -3 0. -0 1 a a .1 -0 1 b b .3 -0 2 a a .2 -0 2 a a .4 -0 2 b b .1 -0 2 b b .4 -1 3 c c .5 -1 3 d d .2 -2 3 c c .3 -2 3 d d .2 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/determinize/A.input.syms b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/determinize/A.input.syms deleted file mode 100755 index 6ccf1957..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/determinize/A.input.syms +++ /dev/null @@ -1,5 +0,0 @@ - 0 -a 1 -b 2 -c 3 -d 4 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/determinize/A.output.syms b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/determinize/A.output.syms deleted file mode 100755 index 6ccf1957..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/determinize/A.output.syms +++ /dev/null @@ -1,5 +0,0 @@ - 0 -a 1 -b 2 -c 3 -d 4 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/determinize/fstdeterminize.fst.ser b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/determinize/fstdeterminize.fst.ser deleted file mode 100755 index b4859887a8f1c0a2982315a051ee915a8c9c6bc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 332 zcmZ4UmVvdLg@J*AwS&F{E@IG0O)1q&&Mnm|F38Bt ztI$g;F3~Ga&CM*z%uCk`DatR%Ois)Rh6<=IV0nEfUF;VV14Bg-g9<*aFfBkQf&e2( zOF{V*AQR+jruqgT2>~!RBajPY169KTGmr(6W3)YU<}8#Al4pYQL2Qs3W;=*Hhz+uX U#m)z;9xMlzpE+|Dh(?zO03QEF^#A|> diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/reverse/A.fst b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/reverse/A.fst deleted file mode 100755 index 7afc0f994c7402897cdb0c78b0967daa60d1dc5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226 zcmccicT*i30|P@@YH~?_5eJY}T#}fVl30|&1Z0B%GecukBZLViS&-NeW zgn_^TL?HML_7HIg2bfwA4PisXn1Or{W?*Q5szI0wvJ+zO0 0 -a 1 -b 2 -c 3 -d 4 -f 5 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/reverse/A.output.syms b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/reverse/A.output.syms deleted file mode 100755 index 7e677534..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/reverse/A.output.syms +++ /dev/null @@ -1,6 +0,0 @@ - 0 -a 1 -b 2 -c 3 -d 4 -f 5 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/reverse/A.states.syms b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/reverse/A.states.syms deleted file mode 100755 index 39cbb7ff..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/reverse/A.states.syms +++ /dev/null @@ -1,4 +0,0 @@ -0 0 -1 1 -2 2 -3 3 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/reverse/fstreverse.fst b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/reverse/fstreverse.fst deleted file mode 100755 index a319ced8dd4f5b516a737bd3af2d0447483e0daa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 270 zcmccicT*i30|P@@YH~?_5eJY}T#}fVl30|&1Z0B%GlOGjBZLViS&`TfWn+a diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/reverse/fstreverse.fst.ser b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/reverse/fstreverse.fst.ser deleted file mode 100755 index f094910384c512c282c37386c50d7abaa9502aab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 400 zcmZ4UmVvdLg@J*At%QNqCbgj0u7rUx5r~t3I2njjfH;jv6)eR?3_7VPrFzM^rFz8$ z8JT$%dTGTadc~=^nMIj->3ShW`30HDi8;Yg0o4U8ukWOb{bFKZs3>Ak!KW3b1?W@| zU<7F?D8B$?vVyoEF(_cHZveAEV$4uBP&ES+l+BF92KgMMj?n=~KmnL<-vHw>fb}{! ufcaoEfh=Z+1~?yN28+W2Fdw8A!ao4#gWSjJ0Om4)>;?lQ^B{bPFf#y%en8*= diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/rmepsilon/A.fst.txt b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/rmepsilon/A.fst.txt deleted file mode 100755 index 63dcbce5..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/rmepsilon/A.fst.txt +++ /dev/null @@ -1,15 +0,0 @@ -0 0.0 -1 0.0 -2 0.0 -3 0.0 -4 0.2 -0 1 a b 0.1 -1 2 0.2 -1 4 b a 0.2 -2 0 b a 0.1 -2 1 a b 0.4 -2 3 0.5 -2 4 a b 0.4 -2 4 0.25 -3 0 0.4 -3 4 1.0 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/rmepsilon/fstrmepsilon.fst.ser b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/rmepsilon/fstrmepsilon.fst.ser deleted file mode 100755 index fbf0ea11965df5d678f51dc3c3fca45f01865588..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 304 zcmZ4UmVvdLg@J*AxrBk$Cbgj0u7rUx5r~r@qJ<1~3=AMHNEj@{P+Y{IpPEvtmz-Ow zS6q;hnOC8gR$QW2oSK_il$n>V7f_U+l$ey6lUY(33>EX8t7gpK_2?)Q14Bg-g9<*~ zFfBkQfdC^&OF?-DkjV_ zgc%qd96&TkEkykS2Z$PkS`Z(q53H6M$OmBth6V>HT@Nvffq@k$3c?6E2L~`0NB{r? Ctq~;v diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/A.fst.txt b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/A.fst.txt deleted file mode 100755 index d1eb24cc..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/A.fst.txt +++ /dev/null @@ -1,9 +0,0 @@ -0 Infinity -1 Infinity -2 Infinity -3 3. -0 1 a a 3. -0 2 d d 5. -1 1 b b 2. -1 3 c c 4. -2 3 f f 4. \ No newline at end of file diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/A.input.syms b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/A.input.syms deleted file mode 100755 index 7e677534..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/A.input.syms +++ /dev/null @@ -1,6 +0,0 @@ - 0 -a 1 -b 2 -c 3 -d 4 -f 5 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/A.output.syms b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/A.output.syms deleted file mode 100755 index 7e677534..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/A.output.syms +++ /dev/null @@ -1,6 +0,0 @@ - 0 -a 1 -b 2 -c 3 -d 4 -f 5 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/nsp.fst b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/nsp.fst deleted file mode 100755 index 6001d05070bcae7bb1f9f1ca80255a804fde39c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 582 zcmccicT*i30|P@@YH~?_5eJY}T#}fVl30|&1Z0B%GlS#OOb8Q93L~*0%!YcHT1KD% z2s1D^IDlx7I7DuN0}Du)0ihPehl)9X)G$LakaA!J5+Jn@v%nlE;otyLhYAqtK>DD1 z9YDUqWgk0G2H8F?s9J3Hfx-lrTR6dTxCrci 3.0 -5 6 c c 4.0 -5 7 c c 4.0 -5 10 b b 2.0 -7 8 3.0 -7 9 3.0 -10 11 c c 4.0 -10 13 b b 2.0 -11 12 3.0 -13 14 c c 4.0 -13 16 b b 2.0 -14 15 3.0 -16 17 c c 4.0 -17 18 3.0 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/nsp.input.syms b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/nsp.input.syms deleted file mode 100755 index 7e677534..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/nsp.input.syms +++ /dev/null @@ -1,6 +0,0 @@ - 0 -a 1 -b 2 -c 3 -d 4 -f 5 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/nsp.output.syms b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/nsp.output.syms deleted file mode 100755 index 7e677534..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/nsp.output.syms +++ /dev/null @@ -1,6 +0,0 @@ - 0 -a 1 -b 2 -c 3 -d 4 -f 5 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/nsp.states.syms b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/nsp.states.syms deleted file mode 100755 index 9a3d0105..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/algorithms/shortestpath/nsp.states.syms +++ /dev/null @@ -1,19 +0,0 @@ -0 0 -1 1 -2 2 -3 3 -4 4 -5 5 -6 6 -7 7 -8 8 -9 9 -10 10 -11 11 -12 12 -13 13 -14 14 -15 15 -16 16 -17 17 -18 18 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/openfst/basic.fst b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/openfst/basic.fst deleted file mode 100755 index db621c612c312dbc275372c077eb28c4268f2ab9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286 zcmccicT*i30|P@@YH~?_5eJY}T#}fVl30|&1Y|RVv14c^kcI(}7&0jNy{V2BD3DoP znOh8#gwc#ZiA0!c5GM&lfB=Y22H61uFf;OTnNa~z2hmoEY(^E#3-53P2J_0{|$nGpqmr diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/openfst/basic.fst.txt b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/openfst/basic.fst.txt deleted file mode 100755 index 6bf2ea79..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/openfst/basic.fst.txt +++ /dev/null @@ -1,4 +0,0 @@ -0 1 a x 0.5 -0 1 b y 1.5 -1 2 c z 2.5 -2 3.5 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/openfst/basic.input.syms b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/openfst/basic.input.syms deleted file mode 100755 index 57f99e63..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/openfst/basic.input.syms +++ /dev/null @@ -1,3 +0,0 @@ -a 0 -b 1 -c 2 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/openfst/basic.output.syms b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/openfst/basic.output.syms deleted file mode 100755 index 64848e0a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/fst/openfst/basic.output.syms +++ /dev/null @@ -1,3 +0,0 @@ -x 0 -y 1 -z 2 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/jsgf/test/digits.grxml b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/jsgf/test/digits.grxml deleted file mode 100755 index 525c3382..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/jsgf/test/digits.grxml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - one - two - three - four - five - six - seven - eight - nine - zero - oh - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/jsgf/test/input.txt b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/jsgf/test/input.txt deleted file mode 100755 index 5189da20..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/jsgf/test/input.txt +++ /dev/null @@ -1,186 +0,0 @@ -could you -could you go go -could you go go thanks -could you go thanks -could you go thank you -could you stop -could you stop please -could you stop stop -could you stop stop stop -could you stop stop stop stop stop thank you -could you stop stop thanks -could you stop thanks -could you stop thank you -could you thank you -don't crash -go -go go -go go go -go go go go go go go go -go go go go go please -go go go go go thanks -go go go go please -go go go go thank you -go go go please -go go please -go go thanks -go go thank you -go please -go thanks -go thank you -kindly -kindly don't crash -kindly go -kindly go go -kindly go go thanks -kindly go thanks -kindly go thank you -kindly kindly don't crash -kindly kindly kindly don't crash -kindly kindly oh mighty computer don't crash -kindly kindly oh mighty computer kindly don't crash -kindly kindly please don't crash -kindly oh mighty computer don't crash -kindly oh mighty computer oh mighty computer don't crash -kindly oh mighty computer oh mighty computer please don't crash -kindly oh mighty computer please oh mighty computer don't crash -kindly oh mighty computer please oh mighty computer please don't crash -kindly please -kindly please don't crash -kindly please kindly don't crash -kindly please please kindly don't crash -kindly stop -kindly stop please -kindly stop stop stop -kindly stop stop stop stop stop -kindly stop stop stop stop thanks -kindly stop stop stop thank you -kindly stop stop thanks -kindly stop stop thank you -kindly stop thanks -kindly stop thank you -kindly thanks -kindly thank you -oh mighty computer -oh mighty computer don't crash -oh mighty computer go -oh mighty computer go go -oh mighty computer go go thank you -oh mighty computer kindly don't crash -oh mighty computer kindly kindly don't crash -oh mighty computer kindly kindly kindly don't crash -oh mighty computer kindly kindly oh mighty computer don't crash -oh mighty computer kindly oh mighty computer don't crash -oh mighty computer kindly oh mighty computer kindly don't crash -oh mighty computer kindly oh mighty computer please don't crash -oh mighty computer kindly oh mighty computer please kindly don't crash -oh mighty computer kindly please don't crash -oh mighty computer oh mighty computer don't crash -oh mighty computer oh mighty computer kindly don't crash -oh mighty computer oh mighty computer oh mighty computer don't crash -oh mighty computer oh mighty computer oh mighty computer please kindly don't crash -oh mighty computer oh mighty computer please don't crash -oh mighty computer oh mighty computer please oh mighty computer don't crash -oh mighty computer please don't crash -oh mighty computer please kindly oh mighty computer oh mighty computer kindly don't crash -oh mighty computer please oh mighty computer don't crash -oh mighty computer please oh mighty computer please don't crash -oh mighty computer stop -oh mighty computer stop please -oh mighty computer stop stop -oh mighty computer stop stop stop -oh mighty computer stop stop stop stop -oh mighty computer stop stop stop stop please -oh mighty computer stop stop stop thanks -oh mighty computer stop stop thank you -oh mighty computer stop thank you -oh mighty computer thanks -oh mighty computer thank you -one and one two and two three and three -one and one two and two three three -one and one two two three and three -one and one two two three three -one one two and two three and three -one one two and two three three -one one two two three and three -one one two two three three -please -please don't crash -please go -please go go go -please go go go please -please go go go thanks -please go go thank you -please go thank you -please kindly don't crash -please kindly oh mighty computer don't crash -please oh mighty computer don't crash -please please -please please don't crash -please please kindly kindly please please oh mighty computer don't crash -please please oh mighty computer don't crash -please please please kindly don't crash -please stop -please stop please -please stop stop -please stop stop please -please stop stop stop -please stop stop thanks -please stop stop thank you -please stop thank you -please thanks -please thank you -start -start and start -start and start and start -start and start and start and start -start and start and start and start and start -start and start and start and stop -start and start and stop -start and start and stop and start -start and start and stop and start and start and start -start and start and stop and start and stop and start and stop -start and start and stop and stop and start and start and stop and start -start and stop -start and stop and start -start and stop and start and start -start and stop and start and stop -start and stop and start and stop and start and stop -start and stop and stop -start and stop and stop and start and stop and stop -start and stop and stop and stop -stop -stop and start -stop and start and start -stop and start and start and start and start -stop and start and start and stop -stop and start and start and stop and start and start -stop and start and stop -stop and start and stop and stop -stop and start and stop and stop and start -stop and start and stop and stop and stop and start and start -stop and stop -stop and stop and start -stop and stop and start and start and start and stop and start and stop and start -stop and stop and stop -stop and stop and stop and start and start -stop and stop and stop and stop and stop -stop and stop and stop and stop and stop and stop -stop please -stop stop -stop stop please -stop stop stop -stop stop stop please -stop stop stop stop -stop stop stop stop please -stop stop stop stop stop -stop stop stop stop stop please -stop stop stop stop stop stop -stop stop stop stop thank you -stop stop stop thank you -stop stop thanks -stop stop thank you -stop thanks -stop thank you -thanks -thank you diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/jsgf/test/jsgftest.config.xml b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/jsgf/test/jsgftest.config.xml deleted file mode 100755 index e596885d..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/jsgf/test/jsgftest.config.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/jsgf/test/polite.gram b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/jsgf/test/polite.gram deleted file mode 100755 index a91c93ef..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/jsgf/test/polite.gram +++ /dev/null @@ -1,6 +0,0 @@ -#JSGF V1.0; - -grammar polite; - -public = [please | kindly | could you | oh mighty computer]; -public = [please | thanks | thank you]; diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/jsgf/test/test.gram b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/jsgf/test/test.gram deleted file mode 100755 index 66a47fcb..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/jsgf/test/test.gram +++ /dev/null @@ -1,46 +0,0 @@ -#JSGF V1.0; - -/** - * JSGF Grammar for Hello World example - */ - -grammar test; - -import ; -import ; - - -/* Test right recursion */ - -public = | ( and ) ; - = stop | start; - - -/* - * TODO: - * This is valid JSGF, but the ruleGrammar.parse - * method generates a stack overflow (although the - * decoder and the JSGF grammar deal with it just fine - * - * public = something | ; - * = another | ; - */ - -/* Repeat test */ -public = * don't crash; - - -/* Test grammar with NULL */ - -public = ; - - = (one [and] one); - = (two [and] two); - = (three [and] three); - - -/* Counters */ - -public = ; - = go* | stop+; - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/linguist/dictionary/bad.dict b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/linguist/dictionary/bad.dict deleted file mode 100755 index dad501dc..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/linguist/dictionary/bad.dict +++ /dev/null @@ -1 +0,0 @@ -something_bad diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/linguist/language/grammar/BatchForcedAlignerGrammarTest.utts b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/linguist/language/grammar/BatchForcedAlignerGrammarTest.utts deleted file mode 100755 index c87e5e06..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/linguist/language/grammar/BatchForcedAlignerGrammarTest.utts +++ /dev/null @@ -1,4 +0,0 @@ -#comment -one (uttid_1) -two (uttid_2) -three (uttid_3) diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/linguist/language/grammar/FSTGrammarTest.dic b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/linguist/language/grammar/FSTGrammarTest.dic deleted file mode 100755 index f531b142..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/linguist/language/grammar/FSTGrammarTest.dic +++ /dev/null @@ -1,5 +0,0 @@ - SIL -wood SIL -cindy SIL -pittsburgh SIL -jean SIL diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/linguist/language/grammar/FSTGrammarTest.gram b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/linguist/language/grammar/FSTGrammarTest.gram deleted file mode 100755 index d7ca08b4..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/linguist/language/grammar/FSTGrammarTest.gram +++ /dev/null @@ -1,27 +0,0 @@ -I 2 -F 0 2.30259 -T 0 1 2.30259 -T 0 4 wood wood 1.60951 -T 0 5 cindy cindy 1.60951 -T 0 6 pittsburgh pittsburgh 1.60951 -T 0 7 jean jean 1.60951 -F 1 2.89031 -T 1 0 , , 0.587725 -T 1 4 wood wood 0.58785 -F 2 3.00808 -T 2 0 , , 0.705491 -T 2 1 0.58785 -F 3 2.30259 -T 3 0 -F 4 2.89031 -T 4 0 , , 0.587725 -T 4 6 pittsburgh pittsburgh 0.58785 -F 5 2.89031 -T 5 0 , , 0.587725 -T 5 7 jean jean 0.58785 -F 6 2.89031 -T 6 0 , , 0.587725 -T 6 5 cindy cindy 0.58785 -F 7 1.28093 -T 7 0 , , 0.454282 -T 7 4 wood wood 1.28093 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/linguist/language/ngram/large/100.arpa.dmp b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/linguist/language/ngram/large/100.arpa.dmp deleted file mode 100755 index 837512b564004a79dc594b75d1cbdcb454fdd747..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2061 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 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/result/hellongram.trigram.lm b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/result/hellongram.trigram.lm deleted file mode 100755 index 09ae650c..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/result/hellongram.trigram.lm +++ /dev/null @@ -1,2365 +0,0 @@ - -\data\ -ngram 1=161 -ngram 2=746 -ngram 3=1444 - - -\1-grams: --0.8280 -2.6692 --0.8285 -1.1650 --1.9630 a -1.0814 --3.7839 about -0.2242 --3.2988 above -0.1737 --3.7839 adjoining -0.1932 --3.7839 after -0.1788 --3.2988 all -0.6117 --3.4749 almost -0.2162 --3.1738 alone -0.2880 --3.2988 also -0.1777 --3.7839 am -0.2250 --2.1738 and -0.5033 --2.8728 another -0.7396 --2.7345 are -0.9268 --2.5998 at -1.1579 --3.4749 away -0.4007 --1.5998 back -1.0947 --2.3780 behind -0.8834 --3.7839 being -0.2169 --3.4749 below -0.1781 --2.8217 between -0.2170 --3.0769 bit -0.2779 --3.7839 blocking -0.1788 --3.7839 board -0.1552 --2.5998 bottom -0.3207 --3.7839 bunch -0.2174 --3.4749 but -0.2107 --2.8728 by -0.5307 --3.4749 centered -0.1876 --2.4537 centre -0.3162 --3.2988 close -0.3187 --3.7839 closer -0.2169 --2.5998 closest -0.7439 --3.7839 cluster -0.2174 --3.0769 color -0.3519 --3.7839 colors -0.2228 --3.2988 column -0.6503 --1.3461 cone -1.0214 --2.0200 cones -0.7466 --2.3609 corner -0.8793 --3.7839 deleted -0.1552 --3.4749 diagonal -0.1850 --3.0769 directly -0.2681 --3.7839 down -0.1552 --3.4749 east -0.1146 --2.8728 edge -1.0545 --3.7839 either -0.2212 --3.7839 entire -0.2250 --3.7839 extreme -0.1907 --3.4749 face -0.1548 --3.4749 facing -0.2196 --2.8728 far -0.4784 --3.4749 farthest -0.1457 --3.7839 first -0.2232 --3.7839 four -0.1907 --3.7839 frame -0.2228 --3.0769 from -0.3849 --1.9434 front -0.6385 --3.0769 further -0.1669 --2.4335 furthest -0.8257 --1.1198 green -1.6012 --3.4749 greens -0.1449 --3.0769 group -0.3123 --3.7839 half -0.2247 --2.2845 hand -1.6759 --3.7839 hard -0.1907 --3.2988 hardest -0.1467 --3.1738 has -0.2513 --3.4749 highest -0.3950 --3.7839 i -0.2250 --1.7004 in -99.9990 --1.9835 is -0.5430 --3.4749 isolated -0.1562 --2.1738 it -0.8542 --2.2988 it's -0.5733 --3.4749 just -0.2247 --3.2988 kinda -0.3247 --2.9308 last -0.3544 --1.7425 left -0.5647 --3.7839 line -0.1907 --3.0769 little -0.3196 --3.7839 lone -0.1907 --3.4749 lonely -0.1146 --3.2988 lot -0.6503 --2.6298 lower -0.3920 --2.3445 lowest -0.4657 --2.2574 middle -0.2326 --2.8728 midline -0.6836 --3.2988 most -0.2158 --2.7759 near -0.8693 --2.5718 next -0.7179 --3.7839 no -0.2250 --3.7839 non -0.2250 --3.7839 north -0.2249 --3.7839 not -0.1788 --1.7589 of -1.0816 --3.7839 off -0.2235 --1.8516 on -1.2188 --1.7385 one -0.4928 --3.1738 ones -0.1678 --2.8728 only -0.2801 --3.2988 opposite -0.3236 --3.4749 other -0.1562 --3.2988 pair -0.6503 --3.7839 part -0.2174 --3.7839 previous -0.2170 --3.7839 probably -0.2178 --1.1506 purple -1.6658 --3.4749 purples -0.3312 --3.7839 rather -0.2249 --3.2988 rear -0.6503 --3.7839 rectangle -0.2239 --1.7803 right -0.4896 --2.5998 row -0.6423 --2.5718 screen -0.7337 --3.7839 second -0.2247 --3.4749 see -0.1458 --3.7839 shade -0.2228 --3.0769 shades -0.2073 --3.7839 shading -0.1552 --3.4749 shadow -0.1786 --3.1738 showing -0.2242 --2.0599 side -0.4692 --3.4749 sitting -0.4008 --3.7839 slightly -0.2169 --3.7839 somewhat -0.2163 --3.7839 south -0.2249 --3.7839 still -0.2189 --2.8728 surrounded -0.9537 --3.7839 surrounding -0.2221 --3.7839 table -0.1552 --3.7839 talking -0.2250 --3.7839 than -0.1788 --2.4335 that -0.6779 --2.7759 that's -0.3807 --0.9956 the -0.8362 --3.7839 then -0.2203 --2.7345 there -1.1361 --2.6298 there's -0.7167 --3.7839 third -0.2247 --2.4749 this -0.7790 --3.7839 those -0.2247 --2.5455 three -0.9116 --1.7345 to -1.6863 --2.6620 top -0.1657 --3.7839 touching -0.2223 --2.8217 towards -0.9537 --2.1961 two -0.7746 --3.4749 up -0.1547 --3.0769 upper -0.5212 --3.2988 uppermost -0.2941 --3.0769 us -0.2952 --3.2988 very -0.2228 --3.4749 was -0.2174 --3.1738 way -0.1954 --3.7839 we -0.2249 --3.7839 west -0.1907 --2.6620 which -1.3344 --2.7345 with -0.4459 --3.7839 you -0.1552 - -\2-grams: --3.3411 2.4933 --0.0010 0.0323 --3.3411 green 0.1929 --0.9494 0.5914 --3.3426 a 0.0032 --2.5801 another 0.2823 --0.9408 back -1.0588 --3.3426 blocking 0.0714 --3.3426 centered -0.0555 --2.5333 centre -0.1714 --3.3426 cone -0.1033 --1.9494 front -1.0582 --3.3426 further -0.1170 --3.3426 furthest -0.0223 --1.6941 green 0.5160 --3.3426 hard 0.0714 --2.8681 hardest -0.0172 --3.3426 has 0.0022 --2.3473 in 0.2256 --3.3426 isolated -0.0555 --2.8681 it's -0.1425 --1.9951 left -1.0060 --3.3426 lonely -0.0555 --2.5801 lower -0.1756 --3.3426 middle -0.1379 --3.3426 most -0.0907 --1.9494 next -0.4538 --3.3426 non 0.0714 --3.3426 off 0.0714 --2.1712 on 0.2430 --3.3426 one -0.1443 --1.4053 purple -0.8458 --3.3426 right -0.1485 --3.3426 south 0.0714 --0.6334 the -0.2892 --2.8681 there's -0.1006 --1.7453 this -0.0129 --2.8681 top -0.0588 --3.3426 two 0.0460 --3.3426 west 0.0714 --2.2128 a another 0.3235 --2.2128 a bunch 0.0714 --2.2128 a cluster 0.0714 --2.2128 a diagonal -0.0555 --0.4973 a green -1.0994 --1.7383 a group -0.0010 --1.0414 a little -0.4582 --1.4502 a lot 0.2247 --1.7383 a pair 0.3370 --0.5185 a purple -0.9570 --0.9165 a row 0.0828 --0.3932 about there -0.1032 --0.8703 above it -0.1413 --0.8703 above that -0.1291 --0.8703 above the -0.1533 --0.3932 adjoining purple -0.1261 --0.3932 after the -0.1519 --0.1078 all the -0.4316 --0.6942 almost in 0.3656 --0.9953 alone at 1.0505 --0.5208 alone in 0.1983 --0.9953 alone on 0.8676 --0.8703 also facing -0.0555 --0.8703 also the -0.1360 --0.8703 also with -0.0497 --0.3932 am talking 0.0714 --1.0212 and a 0.0768 --2.0165 and above -0.0907 --2.0165 and also -0.0907 --2.0165 and behind -0.0344 --2.0165 and closer 0.0714 --1.5420 and closest 0.4667 --1.5420 and green 0.5580 --0.7782 and in -0.7518 --2.0165 and it's -0.0634 --2.0165 and kinda -0.0907 --2.0165 and one -0.1520 --2.0165 and the -0.1486 --2.0165 and there's -0.1409 --0.4771 and to -0.1839 --2.0165 and towards 0.8464 --2.0165 and two 0.0460 --0.1761 another green -0.6497 --1.3475 another middle -0.1484 --0.8730 another purple 0.5707 --1.4346 are green -0.1269 --1.4346 are three 0.1474 --0.0872 are two -0.1504 --0.0280 at the -0.3405 --0.2198 away from -0.0770 --1.1405 back 1.6055 --2.5751 back and 0.0225 --2.5751 back at 1.0505 --2.5751 back but -0.0555 --1.8125 back centre 0.0055 --1.3367 back corner -0.1127 --0.4337 back green -0.6522 --1.4037 back in 0.8427 --2.1006 back it -0.3086 --1.3367 back left -0.5572 --1.5798 back of -0.0521 --2.5751 back on 0.8676 --2.1006 back one -0.0586 --2.5751 back part 0.0714 --0.5191 back purple -0.4973 --2.5751 back right -0.0258 --2.5751 back top -0.1145 --1.0286 behind a -0.0180 --1.3167 behind and 0.1474 --1.7912 behind another 0.3235 --0.3565 behind it -0.1121 --1.3167 behind that -0.0060 --0.6198 behind the -0.0770 --0.3932 being to 0.8086 --0.6942 below another -0.0911 --0.6942 below the -0.0944 --1.3475 between a -0.1379 --1.3475 between it -0.0642 --1.3475 between purples 0.2475 --1.3475 between the -0.1486 --0.5382 between two -0.3520 --1.0922 bit further -0.1170 --0.6177 bit to 0.6412 --1.0922 bit towards 0.8464 --1.0922 bit up -0.0555 --0.3932 blocking the -0.1533 --0.3932 board 2.4933 --0.4260 bottom 1.8687 --1.1228 bottom a -0.2796 --1.5973 bottom and -0.1410 --1.5973 bottom it's -0.0287 --1.5973 bottom of 0.0641 --1.1228 bottom right -0.1932 --1.5973 bottom the -0.1360 --1.5973 bottom to 0.8086 --1.5973 bottom touching 0.0714 --0.3932 bunch of -0.1366 --0.6942 but on 0.8676 --0.6942 but to 0.8086 --1.2963 by a -0.1509 --1.2963 by four 0.0714 --0.8218 by green 0.2545 --0.3010 by purple 0.0371 --0.6942 centered and 0.0225 --0.6942 centered green -0.0251 --0.5643 centre 1.8687 --1.2611 centre and -0.1366 --1.7356 centre behind -0.1321 --1.7356 centre cone -0.0851 --1.7356 centre front -0.1369 --1.7356 centre green 0.1929 --1.7356 centre line 0.0714 --1.2611 centre near 0.3780 --1.7356 centre of 0.0641 --0.7404 centre purple -0.0219 --1.7356 centre that's -0.0978 --1.7356 centre to 0.8086 --0.8703 close right -0.0641 --0.3958 close to 0.8235 --0.3932 closer to 0.8086 --1.0948 closest green -0.2840 --1.5693 closest purple -0.1195 --1.5693 closest the -0.1427 --0.1347 closest to 0.2443 --0.3932 cluster of -0.1437 --0.3296 color 2.2137 --1.0922 color one -0.1443 --1.0922 color shades -0.1170 --0.3932 colors it's -0.0287 --0.1078 column of -0.1802 --0.5744 cone 0.7836 --2.8310 cone i 0.0714 --2.3565 cone all 0.3370 --2.3565 cone alone 0.0701 --1.5347 cone and 0.1528 --1.4835 cone at 0.2499 --1.4835 cone behind 0.4717 --2.8310 cone being 0.0714 --2.8310 cone below -0.0555 --2.3565 cone between -0.1725 --2.8310 cone but -0.0555 --2.0684 cone directly -0.0890 --2.8310 cone further -0.1170 --1.5927 cone furthest -0.5626 --2.8310 cone greens -0.0555 --0.8357 cone in -99.9990 --0.9606 cone is -0.0941 --2.0684 cone it's -0.0536 --2.8310 cone kinda 0.0696 --2.8310 cone most -0.0907 --2.3565 cone near 0.6435 --2.8310 cone next -0.0813 --1.2073 cone on -0.2093 --2.3565 cone right -0.1255 --2.8310 cone second 0.0714 --2.3565 cone sitting 0.0801 --2.8310 cone somewhat 0.0714 --2.0217 cone surrounded 0.2553 --2.8310 cone that 0.0749 --2.8310 cone then 0.0714 --2.0684 cone there 0.3071 --2.8310 cone there's -0.1409 --0.9606 cone to -0.6225 --2.8310 cone towards 0.8464 --2.3565 cone which 0.7930 --1.5347 cone with 0.2677 --0.3158 cones 1.1845 --2.1714 cones and -0.0744 --1.3621 cones behind -0.4472 --0.8751 cones in -99.9990 --2.1714 cones near 0.5454 --1.1761 cones on 0.6989 --2.1714 cones purple -0.0063 --2.1714 cones surrounding 0.0714 --2.1714 cones the -0.1533 --2.1714 cones there's -0.1145 --0.9331 cones to 0.1171 --2.1714 cones with -0.0497 --0.0889 corner 1.3045 --1.8246 corner far -0.0033 --1.8246 corner in -0.0603 --1.8246 corner it's -0.1369 --1.3501 corner the -0.0835 --0.3932 deleted 2.4933 --0.6942 diagonal of -0.1519 --0.6942 diagonal purple 0.1684 --0.6177 directly behind 0.0227 --1.0922 directly in -0.0603 --1.0922 directly opposite -0.0907 --1.0922 directly to 0.8086 --0.3932 down 2.4933 --0.6942 east 2.4933 --0.6942 east green 0.1929 --0.0512 edge 1.7438 --1.3475 edge the -0.1360 --0.3932 either side 0.0266 --0.3932 entire frame 0.0714 --0.3932 extreme green 0.1929 --0.6942 face 2.4933 --0.6942 face showing -0.1073 --0.6942 facing a -0.1122 --0.6942 facing towards 0.8464 --1.2963 far edge 0.8006 --1.2963 far in -0.0603 --0.5338 far left 0.1474 --0.5338 far right 0.0050 --0.6942 farthest 2.4933 --0.6942 farthest to 0.8086 --0.3932 first behind -0.0344 --0.3932 four green -0.1269 --0.3932 frame it's -0.0287 --0.3296 from the -0.0200 --1.0922 from us 0.1206 --1.0922 from you 0.0714 --0.8388 front 1.6469 --1.2368 front and -0.1624 --2.2321 front corner 0.5788 --2.2321 front far -0.1311 --0.7975 front green -0.2859 --1.4695 front in 0.7039 --2.2321 front left -0.0467 --0.4964 front of -0.2720 --2.2321 front on 0.8676 --1.2368 front one -0.1323 --2.2321 front pair 0.5043 --1.4228 front purple 0.3395 --2.2321 front right -0.1424 --2.2321 front row 0.2724 --2.2321 front to 0.8086 --1.0922 further back -0.1420 --1.0922 further behind 0.0982 --1.0922 further green -0.1269 --1.0922 further in -0.0603 --1.0922 further than 0.0714 --1.2804 furthest away 0.0801 --0.5836 furthest back 0.3920 --1.7549 furthest green -0.1469 --1.7549 furthest most -0.0907 --1.2804 furthest purple -0.3148 --0.3203 furthest to -0.0792 --0.2599 green 0.1952 --3.0493 green and -0.1494 --2.5748 green between 0.0233 --0.5916 green cone 0.0830 --1.2247 green cones 0.2252 --3.0493 green furthest 0.1289 --2.0540 green it's -0.0163 --3.0493 green lowest -0.1473 --3.0493 green near 0.5454 --1.8110 green on 0.9363 --1.0879 green one -0.3104 --3.0493 green ones -0.1073 --3.0493 green that's -0.0978 --3.0493 green the -0.1486 --3.0493 green to 0.8086 --2.5748 green two -0.1001 --3.0493 green upper 0.1206 --0.6942 greens 2.4933 --0.6942 greens in -0.1195 --0.2829 group of -0.3073 --0.3932 half way -0.1073 --0.6463 hand corner 0.6510 --1.8846 hand green 0.1929 --0.1296 hand side -0.0096 --0.3932 hard green -0.0251 --0.8703 hardest green 0.1929 --0.8703 hardest purple 0.1684 --0.8703 hardest to -0.1488 --0.9953 has a 0.0127 --0.9953 has the -0.1527 --0.5208 has three -0.1449 --0.2198 highest on 0.7002 --1.1213 in a -0.5037 --1.4735 in between -0.0220 --0.7138 in front -0.9389 --0.1565 in the -0.5244 --0.6301 is a -0.9010 --2.1994 is another -0.0911 --2.1994 is at 1.0505 --2.1994 is centered -0.0555 --2.1994 is close 0.0696 --1.4369 is closest 0.1408 --2.1994 is furthest -0.1302 --0.9611 is green -0.5101 --2.1994 is highest 0.2475 --0.8519 is in -0.4350 --2.1994 is lowest -0.1157 --1.7249 is on 0.7002 --2.1994 is one -0.1375 --1.4369 is purple -0.1087 --2.1994 is rather 0.0714 --2.1994 is slightly 0.0714 --1.7249 is surrounded 0.6333 --1.4369 is the -0.1439 --1.0280 is to 0.1841 --2.1994 is towards 0.8464 --2.1994 is very -0.0907 --0.6942 isolated green 0.1929 --0.6942 isolated purple -0.0063 --0.7304 it 1.7438 --2.0267 it a 0.0127 --0.7304 it and -0.1278 --1.5522 it are 0.4194 --2.0267 it behind 0.0982 --1.5522 it has 0.0701 --0.7884 it is -0.7291 --1.2641 it there 0.8837 --0.7304 it there's -0.4559 --1.5522 it this 0.0499 --2.0267 it two -0.1053 --1.8984 it's a 0.0127 --1.8984 it's almost -0.0555 --1.4239 it's also -0.0172 --1.8984 it's below -0.0555 --0.7270 it's in -0.2589 --1.4239 it's near 0.6435 --1.8984 it's not 0.0714 --0.7270 it's on 0.2430 --1.8984 it's one -0.1375 --1.8984 it's purple 0.1684 --0.6021 it's the -0.1556 --1.8984 it's to 0.8086 --0.6942 just above -0.0907 --0.6942 just deleted 0.0714 --0.3958 kinda in 0.1983 --0.8703 kinda towards 0.8464 --1.2383 last cone -0.0191 --0.4758 last green -0.3962 --0.7638 last one 0.0304 --1.2383 last two -0.1490 --0.6612 left 1.2667 --2.4346 left a -0.1122 --1.9601 left and 0.0894 --1.9601 left back -0.3005 --2.4346 left bottom 0.0505 --1.2632 left corner -0.1627 --1.9601 left edge 0.6333 --1.9601 left front -0.1250 --2.4346 left further -0.1170 --2.4346 left green 0.1929 --0.9274 left hand 0.8597 --1.9601 left in 0.1983 --2.4346 left left -0.1293 --0.8953 left of -0.9121 --1.9601 left on 0.7002 --1.0872 left purple -0.6322 --2.4346 left rear 0.5043 --2.4346 left showing -0.1073 --0.8109 left side -0.0388 --1.9601 left the -0.1106 --2.4346 left there 0.5867 --1.9601 left there's 0.1262 --2.4346 left to 0.8086 --2.4346 left top -0.1145 --0.3932 line green -0.1525 --0.2829 little bit 0.0741 --0.3932 lone green -0.0251 --0.6942 lonely 2.4933 --0.6942 lonely green 0.1929 --0.1078 lot of -0.2366 --1.5393 lower bottom 0.0505 --1.0648 lower green -0.0246 --1.0648 lower left -0.2664 --1.5393 lower lowest -0.0489 --0.7768 lower purple 0.4665 --0.5441 lower right -0.0620 --1.5393 lower the -0.1464 --1.0311 lowest 1.9479 --1.8404 lowest at 1.0505 --0.6690 lowest green -0.4415 --1.8404 lowest it's -0.1481 --1.8404 lowest left -0.0990 --1.8404 lowest of 0.0641 --1.0778 lowest on 0.5879 --1.8404 lowest one -0.1520 --0.4929 lowest purple 0.4496 --0.5772 middle 1.6927 --1.9247 middle all 0.5043 --1.9247 middle bottom -0.1196 --1.9247 middle column 0.5043 --1.4502 middle cone 0.0773 --1.9247 middle diagonal -0.0555 --1.9247 middle directly -0.1170 --1.9247 middle front -0.0856 --1.9247 middle group 0.1663 --1.9247 middle in 0.3656 --1.9247 middle it's -0.0287 --1.1154 middle of -0.5837 --1.4502 middle purple -0.0029 --1.9247 middle right -0.1519 --1.9247 middle showing 0.0022 --1.9247 middle still 0.0714 --1.4502 middle to 0.6412 --1.4502 middle towards 0.6790 --0.1761 midline 1.8687 --0.8730 midline it's -0.1312 --1.3475 midline the -0.1442 --0.8703 most lower -0.0075 --0.8703 most north 0.0714 --0.8703 most to 0.8086 --1.3932 near a -0.1379 --0.0969 near the -0.2685 --1.3932 near two -0.1396 --0.1891 next cone -0.9910 --1.6237 next one -0.1520 --0.8144 next to 0.8616 --0.3932 no shading 0.0714 --0.3932 non extreme 0.0714 --0.3932 north east -0.0555 --0.3932 not the -0.1360 --1.1719 of a 0.3157 --1.6477 of cones 0.0347 --1.4150 of green -0.1800 --0.7160 of it 0.2067 --2.4103 of only -0.1311 --1.6010 of purple -0.8185 --2.4103 of purples 0.2475 --1.6477 of that -0.1101 --0.4042 of the -0.2221 --2.4103 of this 0.0620 --2.4103 of those 0.0714 --1.0170 of three 0.3143 --1.1719 of two 0.0093 --0.3932 off centre -0.1456 --2.3175 on either 0.0714 --2.3175 on it -0.0642 --2.3175 on it's -0.0287 --2.3175 on next -0.0813 --2.3175 on that 0.0749 --1.8430 on that's -0.0143 --0.0435 on the -0.7546 --2.3175 on to 0.8086 --0.7626 one 1.3681 --2.4346 one almost -0.0555 --2.4346 one and -0.1494 --1.6721 one closest 0.1408 --1.4393 one color 0.0010 --2.4346 one down 0.0714 --1.9601 one face 0.0714 --2.4346 one green -0.0251 --1.0872 one in -0.5375 --1.9601 one it's -0.0566 --2.4346 one just -0.0555 --2.4346 one next -0.0813 --1.6253 one of 0.0276 --0.7626 one on -0.3887 --1.9601 one opposite -0.0977 --1.9601 one purple -0.1736 --1.6721 one right -0.2259 --2.4346 one shade 0.0714 --1.0414 one that -0.4947 --1.6253 one that's 0.1803 --1.6721 one the -0.1290 --2.4346 one this -0.1070 --2.4346 one to 0.8086 --2.4346 one towards 0.8464 --2.4346 one up -0.0555 --1.0414 one which 0.1854 --2.4346 one with -0.0497 --0.5208 ones 2.3259 --0.9953 ones in -0.1195 --0.9953 ones the -0.1360 --0.8218 only cone -0.1864 --1.2963 only green -0.1269 --1.2963 only left -0.1488 --0.5338 only one -0.2367 --1.2963 only purple -0.1195 --0.3958 opposite it -0.2316 --0.8703 opposite of -0.1437 --0.6942 other green -0.1269 --0.6942 other purple -0.1261 --0.1078 pair of -0.2092 --0.3932 part of 0.0641 --0.3932 previous one -0.0713 --0.3932 probably right -0.1273 --0.2810 purple 0.3005 --3.0206 purple and -0.1102 --0.5410 purple cone 0.1347 --1.2124 purple cones -0.1046 --3.0206 purple farthest -0.0555 --3.0206 purple furthest 0.1289 --2.2580 purple in -0.1217 --2.5461 purple it's -0.0428 --3.0206 purple no 0.0714 --1.8492 purple on 0.2430 --1.1222 purple one -0.1372 --2.2580 purple ones -0.0341 --3.0206 purple rectangle 0.0714 --3.0206 purple surrounded 0.8006 --2.5461 purple to 0.6412 --0.2198 purples 2.3259 --0.3932 rather lonely -0.0555 --0.1078 rear of -0.2156 --0.3932 rectangle at 1.0505 --0.5936 right 1.2319 --2.4018 right a 0.0127 --2.4018 right above -0.0907 --2.4018 right after 0.0714 --2.4018 right and -0.1102 --1.9273 right back -0.3005 --1.9273 right behind 0.1373 --2.4018 right between -0.1337 --2.4018 right bottom 0.0505 --2.4018 right cone -0.1517 --1.5925 right corner 0.0334 --1.4065 right edge 0.8345 --1.9273 right front -0.1099 --0.7298 right hand 0.2126 --1.2304 right in -0.2876 --2.4018 right it's -0.0634 --2.4018 right next -0.0813 --1.2304 right of -0.1700 --2.4018 right on 0.8676 --1.9273 right purple -0.0045 --1.9273 right row 0.1050 --2.4018 right showing 0.0022 --0.9672 right side 0.2823 --2.4018 right the -0.0944 --2.4018 right there 0.5867 --2.4018 right to 0.8086 --2.4018 right two -0.1053 --0.7881 row 1.9479 --0.2041 row of -0.4247 --1.5973 row on 0.8676 --0.1513 screen 1.5677 --1.1492 screen and -0.1452 --1.6237 screen in 0.3656 --1.6237 screen kinda 0.0696 --1.6237 screen there 0.5867 --0.3932 second from 0.1206 --0.6942 see 2.4933 --0.6942 see left -0.1520 --0.3932 shade it's -0.1481 --0.6177 shades 2.3259 --1.0922 shades furthest 0.1289 --1.0922 shades on -0.1515 --1.0922 shades that's -0.0978 --0.3932 shading 2.4933 --0.6942 shadow facing -0.0555 --0.6942 shadow the -0.1486 --0.9953 showing 2.4933 --0.9953 showing one -0.1488 --0.5208 showing only -0.1707 --0.4690 side 1.3916 --2.1175 side a -0.1122 --1.6430 side and -0.1452 --1.6430 side back -0.3005 --2.1175 side front -0.0856 --2.1175 side green -0.1525 --2.1175 side half 0.0714 --2.1175 side in -0.0603 --1.1222 side it's -0.0742 --2.1175 side near 0.5454 --0.6451 side of -0.8492 --2.1175 side surrounded 0.8006 --1.3082 side the -0.1911 --2.1175 side there 0.5867 --2.1175 side to 0.8086 --2.1175 side which 0.9603 --0.2198 sitting alone 0.0701 --0.3932 slightly to 0.8086 --0.3932 somewhat in 0.3656 --0.3932 south east -0.0555 --0.3932 still on 0.8676 --0.0512 surrounded by 0.0749 --0.3932 surrounding it -0.0642 --0.3932 table 2.4933 --0.3932 talking about 0.0714 --0.3932 than the -0.1442 --1.2611 that 2.3259 --1.7356 that far -0.1311 --0.9731 that green -0.3048 --1.7356 that has -0.1073 --0.3882 that is -0.0099 --0.7404 that one -0.2566 --1.2611 that was 0.0714 --0.6307 that's closest 0.1408 --0.9187 that's furthest 0.4300 --1.3932 that's highest 0.2475 --0.9187 that's the -0.3034 --0.9187 that's to 0.6412 --2.6998 the 2.3259 --1.2496 the back -0.5178 --2.6998 the behind 0.1373 --3.1743 the board 0.0714 --1.7810 the bottom 0.2455 --1.7019 the centre 0.0591 --3.1743 the close -0.0907 --2.1790 the closest 0.5684 --2.6998 the column 0.3370 --1.9359 the cone 0.1116 --3.1743 the edge 0.8006 --3.1743 the entire 0.0714 --2.3650 the far -0.0027 --3.1743 the farthest -0.0555 --3.1743 the first 0.0714 --1.3497 the front 0.4151 --1.8268 the furthest -0.2458 --0.8945 the green 0.0894 --2.6998 the group -0.0010 --3.1743 the hardest -0.0907 --3.1743 the in -0.0603 --3.1743 the isolated -0.0555 --3.1743 the it's -0.0287 --1.9359 the last 0.1174 --0.8889 the left -0.2126 --3.1743 the lone 0.0714 --1.7810 the lower 0.1275 --1.4008 the lowest -0.1660 --1.2897 the middle -0.0252 --1.8779 the midline 0.1276 --3.1743 the near 0.5454 --2.6998 the next 0.3290 --2.4117 the on 0.5879 --1.6671 the one -0.0637 --2.1790 the only -0.1033 --3.1743 the previous 0.0714 --3.1743 the probably 0.0714 --1.0821 the purple -0.2933 --2.6998 the rear 0.3370 --0.9237 the right -0.0115 --2.3650 the row -0.2730 --1.5769 the screen 0.1004 --2.6998 the shadow 0.0714 --3.1743 the table 0.0714 --2.4117 the the -0.1696 --3.1743 the third 0.0714 --2.4117 the three -0.1322 --1.8779 the top -0.0314 --2.4117 the two 0.2429 --2.1790 the upper 0.2155 --2.4117 the uppermost 0.0764 --2.6998 the very -0.0172 --2.4117 the way 0.0033 --0.3932 then a 0.0127 --0.0872 there are 0.1586 --0.9601 there is -0.2050 --0.1919 there's a -0.2683 --1.5393 there's another 0.3235 --1.5393 there's one -0.1488 --1.5393 there's three -0.1437 --1.0648 there's two 0.0533 --0.3932 third from 0.1206 --0.9457 this cone -0.6486 --0.4075 this green -0.8258 --0.9924 this is -0.1205 --0.5836 this purple -0.6308 --0.3932 those further -0.1170 --1.6485 three cones -0.0997 --0.4771 three green -0.7515 --1.6485 three in -0.1195 --1.6485 three on 0.8676 --0.3010 three purple -0.3472 --2.4346 to a 0.0127 --2.4346 to it -0.1495 --1.9601 to see 0.0714 --1.4393 to that -0.1014 --0.0502 to the -0.6877 --1.4393 to us 0.2024 --0.7301 top 1.9479 --1.0648 top corner 0.4114 --1.5393 top green -0.0251 --1.5393 top left -0.0467 --1.5393 top on 0.8676 --1.5393 top purple 0.1684 --0.7768 top right -0.2412 --0.3932 touching two 0.0112 --0.0458 towards the -0.0257 --1.9730 two 2.4933 --1.9730 two adjoining 0.0714 --1.9730 two color -0.1170 --1.9730 two colors 0.0714 --0.5006 two green -0.9043 --1.9730 two greens -0.0555 --1.9730 two left -0.1488 --1.4985 two other 0.0714 --0.4337 two purple -0.5391 --0.9777 two shades -0.0053 --0.6942 up 2.4933 --0.6942 up from 0.1206 --0.6177 upper left -0.2664 --0.3296 upper right -0.3437 --0.8703 uppermost of -0.1097 --0.3958 uppermost purple -0.1736 --0.3296 us 2.2137 --1.0922 us in 0.3656 --1.0922 us the -0.1486 --0.8703 very bottom -0.1425 --0.8703 very close 0.0696 --0.8703 very top -0.0641 --0.6942 was directly -0.1170 --0.6942 was right -0.1519 --0.9953 way at 1.0505 --0.9953 way back -0.1525 --0.9953 way in 0.3656 --0.9953 way to 0.8086 --0.3932 we just -0.0555 --0.3932 west green 0.1929 --0.0348 which is -0.0700 --1.5072 which we 0.0714 --0.6721 with a -0.0682 --1.4346 with green -0.1269 --1.4346 with only -0.0033 --0.6721 with the -0.0500 --0.6721 with two 0.0918 --0.3932 you 2.4933 - -\3-grams: --0.5259 --0.9469 --3.4728 a --2.6696 another --0.9383 back --3.4728 blocking --3.4728 centered --2.2480 centre --3.4728 cone --1.9469 front --3.4728 further --3.4728 furthest --1.6917 green --3.4728 hard --2.9279 hardest --3.4728 has --2.3449 in --3.4728 isolated --2.9279 it's --1.9927 left --3.4728 lonely --2.6696 lower --3.4728 middle --3.4728 most --1.9469 next --3.4728 non --3.4728 off --2.2480 on --3.4728 one --1.4029 purple --3.4728 right --3.4728 south --0.6331 the --2.9279 there's --1.7428 this --2.9279 top --3.4728 two --3.4728 west --0.5259 green --2.5259 --0.0044 --0.5259 a purple --0.4581 another green --1.0030 another middle --1.9895 back centre --0.2682 back green --2.5345 back left --0.3751 back purple --0.5259 blocking the --0.5259 centered green --1.2249 centre and --1.2249 centre green --0.4217 centre purple --0.5259 cone to --0.0458 front green --1.5259 front purple --0.5259 further back --0.5259 furthest back --1.2362 green --1.2362 green between --0.3010 green cone --1.7812 green furthest --1.7812 green lowest --1.7812 green on --1.7812 green one --1.7812 green upper --0.5259 hard green --0.8269 hardest purple --0.8269 hardest to --0.5259 has three --1.1280 in between --0.3248 in the --0.5259 isolated green --0.8269 it's a --0.8269 it's below --1.4801 left of --0.0512 left purple --0.5259 lonely green --1.0030 lower green --0.4581 lower left --0.5259 middle purple --0.5259 most north --0.0458 next cone --1.5259 next to --0.5259 non extreme --0.5259 off centre --0.0792 on the --0.5259 one the --0.1639 purple cone --1.5250 purple in --2.0700 purple on --0.7659 purple one --2.0700 purple surrounded --2.0700 purple to --0.5259 right front --0.5259 south east --2.2969 the back --2.2969 the centre --2.0387 the closest --1.5378 the cone --1.4709 the front --1.5378 the furthest --0.5166 the green --2.8419 the isolated --2.8419 the last --2.2969 the left --2.8419 the lone --1.6170 the lower --1.3160 the lowest --2.0387 the middle --2.2969 the next --2.8419 the on --1.5378 the one --2.0387 the only --0.6825 the purple --2.8419 the right --2.2969 the the --2.8419 the top --2.2969 the uppermost --0.8269 there's three --0.8269 there's two --0.9268 this cone --0.3590 this green --1.1850 this is --0.6021 this purple --0.8269 top purple --0.8269 top right --0.5259 two purple --0.5259 west green --0.5259 i am talking --0.5259 a another green --0.5259 a bunch of --0.5259 a cluster of --0.5259 a diagonal of --0.0669 a green cone --1.0449 a green one --0.2820 a group of --0.0792 a little bit --0.1998 a lot of --0.2820 a pair of --1.8269 a purple and --0.0458 a purple cone --1.8269 a purple one --0.3010 a row --0.6258 a row of --1.4290 a row on --0.5259 about there is --0.5259 above it are --0.5259 above that --0.5259 above the previous --0.5259 adjoining purple cones --0.5259 after the two --0.1998 all the way --0.5259 almost in the --0.5259 alone at the --0.2820 alone in the --0.5259 alone on the --0.5259 also facing a --0.5259 also the lowest --0.5259 also with a --0.5259 am talking about --1.1280 and a green --0.3248 and a purple --0.5259 and above it --0.5259 and also with --0.5259 and behind the --0.5259 and closer to --0.8269 and closest the --0.8269 and closest to --0.8269 and green --0.8269 and green cone --0.0669 and in front --0.5259 and it's on --0.5259 and kinda towards --0.5259 and one green --0.5259 and the last --0.5259 and there's one --0.0322 and to the --0.5259 and towards the --0.5259 and two purple --0.0792 another green cone --0.5259 another middle diagonal --0.8269 another purple --0.8269 another purple cone --0.5259 are green cones --0.5259 are three purple --0.6769 are two green --1.4801 are two other --0.2553 are two purple --0.8988 at the back --0.4771 at the bottom --1.1570 at the centre --1.7020 at the left --1.7020 at the top --1.1570 at the very --0.8269 away from us --0.8269 away from you --0.0414 back --0.5259 back and to --0.5259 back at the --0.5259 back but on --0.4581 back centre --1.0030 back centre purple --0.0669 back corner --0.0158 back green --2.2741 back green cone --2.2741 back green one --1.3040 back in a --1.3040 back in front --0.1761 back in the --0.2820 back it has --1.3710 back left --0.1461 back left corner --1.3710 back left there --0.5830 back of the --0.5830 back of two --0.5259 back on the --0.8269 back one --0.8269 back one of --0.5259 back part of --0.0293 back purple --1.6437 back purple cone --2.1887 back purple one --0.5259 back right --0.5259 back top corner --0.4581 behind a purple --1.0030 behind a row --0.8269 behind and in --0.8269 behind and to --0.5259 behind another green --1.5673 behind it --1.5673 behind it a --0.3424 behind it and --1.5673 behind it there --0.7641 behind it there's --0.8269 behind that green --0.8269 behind that one --1.3040 behind the green --1.3040 behind the one --0.7591 behind the purple --1.3040 behind the row --0.5259 being to the --0.5259 below another purple --0.5259 below the green --0.5259 between a lot --0.5259 between it --0.5259 between purples --0.5259 between the last --1.2249 between two green --0.0969 between two purple --0.5259 bit further than --0.2820 bit to the --0.5259 bit towards the --0.5259 bit up from --0.5259 blocking the hardest --0.5259 board --0.0792 bottom --0.2820 bottom a little --0.5259 bottom and closest --0.5259 bottom it's the --0.5259 bottom of the --0.2820 bottom right --0.5259 bottom the lowest --0.5259 bottom to the --0.5259 bottom touching two --0.5259 bunch of green --0.5259 but on the --0.5259 but to the --0.5259 by a cluster --0.5259 by four green --0.8269 by green --0.8269 by green cones --1.1280 by purple --0.3248 by purple cones --0.5259 centered and to --0.5259 centered green cone --0.0792 centre --0.8269 centre and green --0.8269 centre and kinda --0.5259 centre behind and --0.5259 centre cone in --0.5259 centre front purple --0.5259 centre green --0.5259 centre line green --0.2820 centre near the --0.5259 centre of the --0.3248 centre purple --1.1280 centre purple no --0.5259 centre that's the --0.5259 centre to the --0.5259 close right hand --0.8269 close to a --0.8269 close to the --0.5259 closer to the --0.2820 closest green one --0.5259 closest purple one --1.5673 closest to that --0.2632 closest to the --0.4393 closest to us --0.5259 cluster of cones --0.1998 color --0.5259 color one the --0.5259 color shades furthest --0.5259 colors it's the --1.0030 column of three --0.4581 column of two --0.0060 cone --0.5259 cone i am --0.2820 cone all the --0.8269 cone alone in --0.8269 cone alone on --1.4290 cone and a --1.4290 cone and behind --1.4290 cone and green --0.6258 cone and in --0.8840 cone and to --0.0512 cone at the --1.4801 cone behind a --1.4801 cone behind another --0.6769 cone behind it --1.4801 cone behind that --0.6769 cone behind the --0.5259 cone being to --0.5259 cone below the --0.2820 cone between two --0.5259 cone but to --0.4581 cone directly behind --1.0030 cone directly in --0.5259 cone further behind --0.0669 cone furthest to --0.5259 cone greens --1.5830 cone in a --2.1280 cone in between --1.0000 cone in front --0.0835 cone in the --0.7782 cone is a --2.0030 cone is another --2.0030 cone is centered --0.6990 cone is green --0.8751 cone is in --1.4581 cone is on --1.1998 cone is purple --2.0030 cone is rather --1.4581 cone is surrounded --1.1998 cone is to --2.0030 cone is towards --2.0030 cone is very --1.0030 cone it's in --0.4581 cone it's on --0.5259 cone kinda in --0.5259 cone most to --0.8269 cone near a --0.8269 cone near the --0.5259 cone next to --0.0263 cone on the --0.8269 cone right in --0.8269 cone right next --0.5259 cone second from --0.2820 cone sitting alone --0.5259 cone somewhat in --0.0969 cone surrounded by --0.5259 cone that is --0.5259 cone then a --0.1998 cone there are --0.5259 cone there's another --2.0030 cone to see --0.0147 cone to the --0.5259 cone towards the --0.2820 cone which is --0.8840 cone with a --1.4290 cone with green --1.4290 cone with only --0.8840 cone with the --0.8840 cone with two --0.0152 cones --0.5259 cones and in --0.0969 cones behind it --1.4290 cones in a --1.4290 cones in between --0.8840 cones in front --0.3010 cones in the --0.5259 cones near the --1.1280 cones on either --0.3248 cones on the --0.5259 cones purple cone --0.5259 cones surrounding it --0.5259 cones the third --0.5259 cones there's two --0.0669 cones to the --0.5259 cones with two --0.0202 corner --0.5259 corner far left --0.5259 corner in front --0.5259 corner it's also --0.8269 corner the green --0.8269 corner the one --0.5259 deleted --0.5259 diagonal of purples --0.5259 diagonal purple --0.8269 directly behind a --0.8269 directly behind the --0.5259 directly in front --0.5259 directly opposite of --0.5259 directly to the --0.5259 down --0.5259 east --0.5259 east green --0.0580 edge --0.5259 edge the lowest --0.5259 either side --0.5259 entire frame it's --0.5259 extreme green --0.5259 face --0.5259 face showing --0.5259 facing a little --0.5259 facing towards the --0.5259 far edge --0.5259 far in front --1.0030 far left --1.0030 far left of --1.0030 far left side --1.0030 far right back --1.0030 far right hand --1.0030 far right side --0.5259 farthest --0.5259 farthest to the --0.5259 first behind the --0.5259 four green cones --0.5259 frame it's the --1.0030 from the bottom --1.0030 from the left --1.0030 from the right --0.5259 from us --0.5259 from you --0.0458 front --0.3248 front and to --0.5259 front corner --0.5259 front far in --0.1383 front green --0.7641 front green cone --0.4581 front in front --1.0030 front in the --0.5259 front left --1.0651 front of a --0.3424 front of it --1.8683 front of purple --1.3234 front of that --0.6435 front of the --1.8683 front of those --0.5259 front on the --1.1280 front one --1.1280 front one and --0.5830 front one of --0.5259 front pair of --0.6799 front purple --0.4217 front purple cone --0.5259 front right corner --0.5259 front row of --0.5259 front to the --0.5259 further back of --0.5259 further behind it --0.5259 further green cones --0.5259 further in front --0.5259 further than the --0.2820 furthest away from --1.3040 furthest back --1.3040 furthest back green --1.3040 furthest back in --0.5008 furthest back purple --0.5259 furthest green on --0.5259 furthest most lower --0.2820 furthest purple on --0.0414 furthest to the --0.0017 green --2.9221 green green --0.5259 green and it's --0.8269 green between purples --0.8269 green between two --0.6665 green cone --2.5904 green cone all --2.0454 green cone alone --1.3655 green cone and --1.3655 green cone at --1.2863 green cone behind --2.5904 green cone below --2.5904 green cone between --2.0454 green cone directly --1.7871 green cone furthest --0.8340 green cone in --1.1102 green cone is --2.5904 green cone it's --2.5904 green cone kinda --2.5904 green cone near --1.2863 green cone on --2.0454 green cone right --2.5904 green cone second --2.5904 green cone sitting --1.4624 green cone surrounded --2.0454 green cone there --2.5904 green cone there's --0.9183 green cone to --2.5904 green cone which --1.4624 green cone with --0.4771 green cones --1.9573 green cones and --1.1541 green cones behind --0.8293 green cones in --1.9573 green cones near --1.4123 green cones on --1.9573 green cones purple --1.9573 green cones the --1.9573 green cones there's --0.8293 green cones to --0.5259 green furthest to --0.5830 green it's in --1.1280 green it's on --1.1280 green it's to --0.5259 green lowest at --0.5259 green near the --1.3710 green on next --1.3710 green on that --0.8260 green on that's --0.8260 green on the --1.3710 green on to --0.7901 green one --1.2909 green one in --2.0941 green one it's --0.5268 green one on --1.5491 green one right --2.0941 green one shade --0.6651 green one that --2.0941 green one the --2.0941 green one this --1.2909 green one which --0.5259 green ones in --0.5259 green that's to --0.5259 green the last --0.5259 green to the --0.8269 green two colors --0.8269 green two shades --0.5259 green upper right --0.5259 greens --0.5259 greens in a --0.4217 group of three --0.6799 group of two --0.5259 half way back --0.5678 hand corner --1.3710 hand corner far --1.3710 hand corner it's --0.8260 hand corner the --0.5259 hand green --0.5166 hand side --1.8876 hand side a --1.8876 hand side and --1.3427 hand side back --1.8876 hand side green --1.3427 hand side it's --0.5166 hand side of --1.8876 hand side the --1.8876 hand side to --0.5259 hard green cone --0.5259 hardest green --0.5259 hardest purple --0.5259 hardest to see --0.5259 has a green --0.5259 has the shadow --0.2820 has three green --0.2820 highest on the --1.4801 in a diagonal --0.9352 in a group --1.4801 in a pair --0.2553 in a row --1.1280 in between it --1.1280 in between the --0.5830 in between two --1.8876 in front --1.8876 in front far --0.0395 in front of --0.7150 in the back --2.4450 in the behind --2.4450 in the bottom --1.3170 in the centre --1.9000 in the column --1.9000 in the far --1.0160 in the front --1.9000 in the furthest --1.9000 in the group --1.2201 in the left --2.4450 in the lowest --0.5211 in the middle --2.4450 in the on --2.4450 in the probably --2.4450 in the rear --1.6418 in the right --1.9000 in the row --2.4450 in the the --2.4450 in the top --1.3170 in the upper --1.7020 is a another --0.2730 is a green --0.3979 is a purple --0.5259 is another purple --0.5259 is at the --0.5259 is centered and --0.5259 is close to --0.1998 is closest to --0.5259 is furthest away --0.2430 is green it's --1.3710 is green near --1.3710 is green on --1.3710 is green to --0.5259 is highest on --0.0512 is in the --0.5259 is lowest on --0.2820 is on the --0.5259 is one color --1.0030 is purple cone --0.4581 is purple it's --0.5259 is rather lonely --0.5259 is slightly to --0.2820 is surrounded by --1.0030 is the closest --1.0030 is the first --1.0030 is the furthest --0.0792 is to the --0.5259 is towards the --0.5259 is very close --0.5259 isolated green --0.5259 isolated purple cone --0.0580 it --0.5259 it a green --1.4290 it and also --1.4290 it and in --1.4290 it and one --0.3010 it and to --1.4290 it and two --0.2820 it are two --0.5259 it behind it --0.8269 it has a --0.8269 it has three --0.0669 it is a --0.4581 it there are --1.0030 it there is --0.0580 it there's a --0.8269 it this cone --0.8269 it this purple --0.5259 it two shades --0.5259 it's a green --0.8269 it's also facing --0.8269 it's also the --0.5259 it's below another --0.0792 it's in the --0.8269 it's near the --0.8269 it's near two --0.5259 it's not the --0.0792 it's on the --0.5259 it's one color --0.5259 it's purple --1.4290 it's the farthest --1.4290 it's the green --0.6258 it's the lowest --0.8840 it's the purple --1.4290 it's the uppermost --0.5259 it's to the --0.5259 just above the --0.5259 just deleted --0.2820 kinda in the --0.5259 kinda towards the --0.5259 last cone --0.1998 last green one --0.8269 last one --0.8269 last one on --0.5259 last two --0.0185 left --0.5259 left a little --0.8269 left and a --0.8269 left and to --0.2820 left back corner --0.5259 left bottom --0.0792 left corner --1.3040 left corner in --0.2820 left edge --0.8269 left front corner --0.8269 left front one --0.5259 left further in --0.5259 left green --0.8366 left hand corner --1.6398 left hand green --0.1597 left hand side --0.2820 left in the --0.5259 left left corner --0.4472 left of it --0.2430 left of the --1.6720 left of this --0.2820 left on the --0.0512 left purple --0.5259 left rear of --0.5259 left showing one --0.3854 left side --1.2114 left side it's --0.9531 left side of --0.9531 left side the --1.7563 left side there --1.7563 left side which --0.8269 left the last --0.8269 left the purple --0.5259 left there are --0.2820 left there's a --0.5259 left to the --0.5259 left top corner --0.5259 line green two --1.2249 little bit further --0.6799 little bit to --1.2249 little bit towards --1.2249 little bit up --0.5259 lone green cone --0.5259 lonely --0.5259 lonely green --1.0030 lot of cones --0.4581 lot of purple --0.5259 lower bottom --0.8269 lower green and --0.8269 lower green cone --0.2820 lower left hand --0.5259 lower lowest green --1.0030 lower purple --0.4581 lower purple cone --1.1280 lower right corner --1.1280 lower right hand --0.5830 lower right side --0.5259 lower the lower --0.0969 lowest --0.5259 lowest at the --0.1761 lowest green cone --1.3040 lowest green on --1.3040 lowest green one --0.5259 lowest it's almost --0.5259 lowest left hand --0.5259 lowest of the --0.1998 lowest on the --0.5259 lowest one down --1.4801 lowest purple --0.6769 lowest purple cone --1.4801 lowest purple on --0.3522 lowest purple one --0.0512 middle --0.5259 middle all the --0.5259 middle bottom a --0.5259 middle column of --0.8269 middle cone --0.8269 middle cone in --0.5259 middle diagonal purple --0.5259 middle directly to --0.5259 middle front --0.5259 middle group of --0.5259 middle in the --0.5259 middle it's the --1.2249 middle of a --0.0969 middle of the --0.8269 middle purple cone --0.8269 middle purple in --0.5259 middle right after --0.5259 middle showing only --0.5259 middle still on --0.2820 middle to the --0.2820 middle towards the --0.0792 midline --0.8269 midline it's also --0.8269 midline it's not --0.5259 midline the one --0.5259 most lower right --0.5259 most north east --0.5259 most to the --0.5259 near a lot --0.8840 near the back --1.4290 near the bottom --0.6258 near the centre --0.8840 near the front --0.5259 near two other --0.0414 next cone is --0.5259 next one up --1.2249 next to it --0.4217 next to that --1.2249 next to the --0.5259 no shading --0.5259 non extreme green --0.5259 north east --0.5259 not the lowest --1.3710 of a green --1.3710 of a pair --0.5678 of a purple --0.8260 of a row --0.4581 of cones --1.0030 of cones surrounding --1.1280 of green cone --0.3248 of green cones --1.8269 of it --1.0237 of it and --1.8269 of it are --1.8269 of it behind --0.5229 of it is --1.2820 of it there --0.6990 of it there's --1.2820 of it this --0.5259 of only green --0.0969 of purple cones --1.2249 of purple on --0.5259 of purples --0.4581 of that green --1.0030 of that one --2.1387 of the --2.1387 of the board --2.1387 of the cone --2.1387 of the front --1.0107 of the green --2.1387 of the in --2.1387 of the left --1.0107 of the midline --2.1387 of the purple --1.3355 of the right --2.1387 of the row --0.4367 of the screen --2.1387 of the table --1.3355 of the three --1.5937 of the two --0.5259 of this green --0.5259 of those further --1.5259 of three cones --0.7227 of three green --1.5259 of three in --0.3010 of three purple --1.3710 of two adjoining --0.2430 of two green --1.3710 of two greens --1.3710 of two purple --0.5259 off centre front --0.5259 on either side --0.5259 on it --0.5259 on it's the --0.5259 on next to --0.5259 on that is --0.8269 on that's closest --0.8269 on that's highest --1.8617 on the bottom --2.4067 on the close --2.4067 on the edge --1.6035 on the far --0.4494 on the left --1.6035 on the lower --2.4067 on the lowest --2.4067 on the middle --0.3623 on the right --2.4067 on the screen --1.6035 on the top --0.5259 on to the --0.0235 one --0.5259 one almost in --0.5259 one and there's --0.1998 one closest to --0.3248 one color --1.1280 one color one --0.5259 one down --0.8269 one face --0.8269 one face showing --0.5259 one green cone --1.4801 one in between --0.0512 one in the --0.8269 one it's in --0.8269 one it's one --0.5259 one just above --0.5259 one next to --1.2249 one of a --0.4217 one of the --1.2249 one of two --1.8046 one on it's --0.0235 one on the --0.2820 one opposite it --0.2820 one purple cone --1.0030 one right behind --0.4581 one right in --0.5259 one shade it's --1.5259 one that has --0.1549 one that is --0.9809 one that was --0.6799 one that's closest --1.2249 one that's furthest --1.2249 one that's the --1.2249 one that's to --1.0030 one the green --0.4581 one the left --0.5259 one this is --0.5259 one to the --0.5259 one towards the --0.5259 one up --0.0458 one which is --1.5259 one which we --0.5259 one with the --0.2820 ones --0.5259 ones in a --0.5259 ones the lowest --0.2820 only cone --0.5259 only green cones --0.5259 only left on --0.4581 only one color --1.0030 only one face --0.5259 only purple one --0.2820 opposite it --0.5259 opposite of that --0.5259 other green cones --0.5259 other purple cones --1.0030 pair of a --0.4581 pair of green --0.5259 part of the --0.5259 previous one --0.5259 probably right in --0.0020 purple --0.5259 purple and a --0.4953 purple cone --2.6123 purple cone i --2.6123 purple cone all --1.8091 purple cone and --2.0673 purple cone at --1.8091 purple cone behind --2.6123 purple cone being --2.6123 purple cone between --2.6123 purple cone but --2.6123 purple cone directly --2.6123 purple cone further --1.8091 purple cone furthest --0.8076 purple cone in --1.2413 purple cone is --2.0673 purple cone it's --2.6123 purple cone most --2.6123 purple cone near --2.6123 purple cone next --1.0864 purple cone on --2.6123 purple cone sitting --2.6123 purple cone somewhat --2.6123 purple cone that --2.6123 purple cone then --2.6123 purple cone there --0.9402 purple cone to --2.6123 purple cone towards --1.4843 purple cone with --0.1845 purple cones --1.9409 purple cones behind --0.8129 purple cones in --1.3959 purple cones on --1.9409 purple cones to --1.9409 purple cones with --0.5259 purple farthest to --0.5259 purple furthest to --1.0030 purple in a --0.4581 purple in front --0.8269 purple it's in --0.8269 purple it's near --0.5259 purple no shading --0.0792 purple on the --0.8062 purple one --2.0310 purple one almost --2.0310 purple one closest --1.2278 purple one in --2.0310 purple one next --0.8062 purple one on --2.0310 purple one opposite --2.0310 purple one right --1.4861 purple one that --0.8062 purple one that's --2.0310 purple one towards --0.8062 purple one which --2.0310 purple one with --0.4581 purple ones --1.0030 purple ones the --0.5259 purple rectangle at --0.5259 purple surrounded by --0.2820 purple to the --0.2820 purples --0.5259 rather lonely --0.1998 rear of the --0.5259 rectangle at the --0.0170 right --0.5259 right a green --0.5259 right above that --0.5259 right after the --0.5259 right and a --0.2820 right back corner --0.8269 right behind it --0.8269 right behind that --0.5259 right between a --0.5259 right bottom --0.5259 right cone which --0.0969 right corner --0.3248 right edge --1.1280 right edge the --0.8269 right front one --0.8269 right front purple --0.6767 right hand corner --0.1326 right hand side --1.3040 right in a --0.0792 right in the --0.5259 right it's on --0.5259 right next to --1.3040 right of a --0.1761 right of it --1.3040 right of the --0.5259 right on the --0.8269 right purple cone --0.8269 right purple to --0.2820 right row of --0.5259 right showing only --1.0223 right side --1.5673 right side and --1.5673 right side front --1.5673 right side half --1.5673 right side in --1.5673 right side near --1.0223 right side of --1.5673 right side surrounded --1.5673 right side the --0.5259 right the green --0.5259 right there are --0.5259 right to the --0.5259 right two shades --0.0969 row --1.5259 row of cones --1.5259 row of green --1.5259 row of only --0.9809 row of purple --0.3010 row of three --0.5259 row on the --0.0378 screen --0.8269 screen and closer --0.8269 screen and towards --0.5259 screen in the --0.5259 screen kinda in --0.5259 screen there are --0.5259 second from the --0.5259 see --0.5259 see left green --0.2820 shades --0.5259 shades furthest to --0.5259 shades on it --0.5259 shades that's furthest --0.5259 shading --0.5259 shadow facing towards --0.5259 shadow the last --0.5259 showing --0.5259 showing one face --0.2820 showing only one --0.0248 side --0.5259 side a little --0.8269 side and above --0.8269 side and the --0.2820 side back corner --0.5259 side front --0.5259 side green two --0.5259 side half way --0.5259 side in front --1.1280 side it's near --1.1280 side it's purple --0.5830 side it's the --0.5259 side near the --1.6051 side of it --0.0378 side of the --0.5259 side surrounded by --1.2249 side the green --0.6799 side the lowest --0.6799 side the one --0.5259 side there are --0.5259 side to the --0.5259 side which is --0.8269 sitting alone at --0.8269 sitting alone in --0.5259 slightly to the --0.5259 somewhat in the --0.5259 south east green --0.5259 still on the --1.4290 surrounded by a --1.4290 surrounded by four --0.8840 surrounded by green --0.3010 surrounded by purple --0.5259 surrounding it --0.5259 table --0.5259 talking about there --0.5259 than the one --0.2820 that --0.5259 that far edge --0.1998 that green cone --0.5259 that has the --1.4801 that is at --1.4801 that is closest --1.4801 that is highest --1.4801 that is in --1.4801 that is lowest --1.4801 that is one --1.4801 that is the --0.9352 that is to --0.3248 that one --1.1280 that one it's --0.8269 that was directly --0.8269 that was right --0.1998 that's closest to --0.8269 that's furthest back --0.8269 that's furthest to --0.5259 that's highest on --0.2820 that's the lowest --0.2820 that's to the --0.2820 the --0.5772 the back --2.0574 the back and --2.0574 the back at --2.0574 the back centre --0.8325 the back in --1.5124 the back it --0.7533 the back left --1.2542 the back of --2.0574 the back on --1.5124 the back one --2.0574 the back part --2.0574 the back right --2.0574 the back top --0.8269 the behind and --0.8269 the behind it --0.5259 the board --0.9809 the bottom --1.5259 the bottom a --1.5259 the bottom and --1.5259 the bottom it's --0.9809 the bottom right --1.5259 the bottom the --1.5259 the bottom to --1.5259 the bottom touching --0.8019 the centre --1.6051 the centre and --1.6051 the centre behind --1.6051 the centre cone --1.6051 the centre line --1.0601 the centre near --1.6051 the centre of --1.6051 the centre that's --1.6051 the centre to --0.5259 the close right --0.5830 the closest green --1.1280 the closest purple --1.1280 the closest to --0.2820 the column of --0.8260 the cone --1.3710 the cone at --1.3710 the cone greens --0.8260 the cone in --1.3710 the cone to --0.5259 the edge --0.5259 the entire frame --0.6799 the far left --0.4217 the far right --0.5259 the farthest --0.5259 the first behind --0.6532 the front --0.8293 the front and --1.4123 the front green --1.1541 the front in --1.9573 the front left --1.9573 the front of --1.9573 the front on --1.4123 the front one --1.9573 the front pair --1.9573 the front purple --1.9573 the front right --1.9573 the front row --1.9573 the front to --1.4801 the furthest away --0.3522 the furthest back --1.4801 the furthest green --1.4801 the furthest most --0.9352 the furthest purple --2.4124 the green --0.2333 the green cone --1.8674 the green cones --1.6092 the green on --0.4886 the green one --2.4124 the green that's --0.2820 the group of --0.5259 the hardest green --0.5259 the in front --0.5259 the isolated purple --0.5259 the it's the --1.3710 the last cone --0.5678 the last green --0.8260 the last one --1.3710 the last two --0.6133 the left --2.4180 the left a --1.8730 the left and --1.8730 the left back --2.4180 the left bottom --1.8730 the left edge --1.8730 the left front --2.4180 the left further --0.9890 the left hand --1.8730 the left in --2.4180 the left left --0.8129 the left of --2.4180 the left rear --2.4180 the left showing --0.6880 the left side --1.8730 the left the --1.8730 the left there's --2.4180 the left to --2.4180 the left top --0.5259 the lone green --1.5259 the lower bottom --1.5259 the lower green --1.5259 the lower lowest --0.7227 the lower purple --0.7227 the lower right --1.5259 the lower the --0.7782 the lowest --0.6812 the lowest green --1.9061 the lowest it's --1.9061 the lowest left --1.9061 the lowest of --1.3611 the lowest on --1.9061 the lowest one --0.4260 the lowest purple --0.5883 the middle --2.0173 the middle all --2.0173 the middle bottom --2.0173 the middle column --1.4723 the middle cone --2.0173 the middle directly --2.0173 the middle front --2.0173 the middle group --2.0173 the middle in --2.0173 the middle it's --0.7924 the middle of --2.0173 the middle purple --2.0173 the middle right --2.0173 the middle showing --2.0173 the middle still --1.4723 the middle to --1.4723 the middle towards --0.2041 the midline --0.8840 the midline it's --1.4290 the midline the --0.5259 the near the --0.8269 the next cone --0.8269 the next one --0.1998 the on the --1.0949 the one closest --0.8366 the one in --1.6398 the one just --1.0949 the one on --1.6398 the one opposite --1.6398 the one purple --1.6398 the one to --1.0949 the one which --0.5830 the only cone --1.1280 the only left --1.1280 the only purple --0.5259 the previous one --0.5259 the probably right --2.2249 the purple --0.2518 the purple cone --2.2249 the purple farthest --2.2249 the purple furthest --0.4437 the purple one --2.2249 the purple rectangle --0.2820 the rear of --0.5149 the right --2.3832 the right a --2.3832 the right and --2.3832 the right back --2.3832 the right behind --2.3832 the right between --2.3832 the right bottom --2.3832 the right cone --1.2553 the right edge --2.3832 the right front --0.7782 the right hand --1.8383 the right in --2.3832 the right it's --1.0792 the right of --2.3832 the right on --2.3832 the right purple --1.8383 the right row --2.3832 the right showing --0.9542 the right side --2.3832 the right the --2.3832 the right there --2.3832 the right to --2.3832 the right two --0.0969 the row of --0.1627 the screen --1.1850 the screen and --1.7300 the screen in --1.7300 the screen kinda --1.7300 the screen there --0.8269 the shadow facing --0.8269 the shadow the --0.5259 the table --1.0030 the the back --0.4581 the the green --0.5259 the third from --0.1998 the three purple --0.6258 the top --1.4290 the top green --1.4290 the top left --1.4290 the top on --0.8840 the top right --0.4581 the two green --1.0030 the two purple --0.5830 the upper left --0.5830 the upper right --1.0030 the uppermost of --0.4581 the uppermost purple --0.8269 the very bottom --0.8269 the very top --1.0030 the way at --1.0030 the way in --1.0030 the way to --0.5259 then a green --1.4801 there are green --1.4801 there are three --0.1091 there are two --0.2820 there is a --1.4801 there's a bunch --0.6769 there's a green --0.2553 there's a purple --0.5259 there's another green --0.5259 there's one purple --0.5259 there's three on --0.8269 there's two left --0.8269 there's two purple --0.5259 third from the --0.0969 this cone is --0.0512 this green cone --0.4581 this is a --1.0030 this is the --0.0792 this purple cone --0.5259 those further green --0.5259 three cones to --0.0792 three green cones --0.5259 three in a --0.5259 three on the --1.4801 three purple --0.1761 three purple cones --0.9352 three purple ones --0.5259 to a green --0.5259 to it two --0.8269 to see --0.8269 to see left --1.1280 to that --1.1280 to that far --0.5830 to that one --2.5171 to the --1.0370 to the back --2.5171 to the behind --2.5171 to the centre --1.1461 to the front --2.5171 to the it's --0.4114 to the left --2.5171 to the lower --2.5171 to the middle --1.9722 to the midline --2.5171 to the near --2.5171 to the on --2.5171 to the one --2.5171 to the rear --0.5288 to the right --1.9722 to the top --0.5830 to us --1.1280 to us in --1.1280 to us the --0.0969 top --0.2820 top corner --0.5259 top green cone --0.5259 top left --0.5259 top on the --0.5259 top purple --0.4581 top right corner --1.0030 top right purple --0.5259 touching two green --1.4801 towards the back --0.9352 towards the front --1.4801 towards the left --1.4801 towards the middle --0.9352 towards the midline --0.9352 towards the right --0.5259 two --0.5259 two adjoining purple --0.5259 two color shades --0.5259 two colors it's --0.0792 two green cones --1.6051 two green ones --1.6051 two green the --0.5259 two greens in --0.5259 two left on --0.8269 two other green --0.8269 two other purple --1.1271 two purple --0.1047 two purple cones --1.6720 two purple ones --0.5830 two shades --1.1280 two shades on --1.1280 two shades that's --0.5259 up --0.5259 up from the --0.2820 upper left hand --0.1998 upper right hand --0.5259 uppermost of three --0.2820 uppermost purple cone --0.1998 us --0.5259 us in the --0.5259 us the last --0.5259 very bottom of --0.5259 very close to --0.5259 very top --0.5259 was directly opposite --0.5259 was right above --0.5259 way at the --0.5259 way back but --0.5259 way in the --0.5259 way to the --0.5259 we just deleted --0.5259 west green --1.6051 which is close --1.0601 which is closest --1.6051 which is furthest --1.6051 which is green --0.8019 which is in --1.6051 which is slightly --1.6051 which is the --0.5259 which we just --0.4581 with a green --1.0030 with a lot --0.5259 with green cones --0.5259 with only one --1.0030 with the green --1.0030 with the purple --1.0030 with the shadow --1.0030 with two color --1.0030 with two green --1.0030 with two shades --0.5259 you - -\end\ diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/tools/bandwidth/10001-90210-01803-8khz.wav b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/tools/bandwidth/10001-90210-01803-8khz.wav deleted file mode 100755 index 30f27aaa35fb0d447249c5d85a7b72ebbae3b8da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265900 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
    K0o0|`=*oqhc0WM?6Nl|1=N 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

    )@$)Vj)?yu#gSJ| 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 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/util/props/ConfigurationManagerTest.sxl b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/util/props/ConfigurationManagerTest.sxl deleted file mode 100755 index 5c1bd8ef..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/util/props/ConfigurationManagerTest.sxl +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/util/props/ConfigurationManagerTest.testconfig.sxl b/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/util/props/ConfigurationManagerTest.testconfig.sxl deleted file mode 100755 index f8bb938c..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-core/src/test/resources/edu/cmu/sphinx/util/props/ConfigurationManagerTest.testconfig.sxl +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - processor - ${anotherDataProc} - - - - - - - - - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-data/pom.xml b/lib/sphinx4-5prealpha-src/sphinx4-data/pom.xml deleted file mode 100755 index 733f5310..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-data/pom.xml +++ /dev/null @@ -1,22 +0,0 @@ - - 4.0.0 - - - edu.cmu.sphinx - sphinx4-parent - 1.0-SNAPSHOT - - - sphinx4-data - jar - - Sphinx4 models - - - true - - - diff --git a/lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/README b/lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/README deleted file mode 100755 index 53ee8b32..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/README +++ /dev/null @@ -1,34 +0,0 @@ -/* ==================================================================== - * Copyright (c) 2015 Alpha Cephei Inc. 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. - * - * THIS SOFTWARE IS PROVIDED BY ALPHA CEPHEI INC. ``AS IS'' AND. - * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,. - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ALPHA CEPHEI INC. - * NOR ITS EMPLOYEES 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. - * - * ==================================================================== - * - */ - -This directory contains generic US english acoustic model trained with -latest sphinxtrain. diff --git a/lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/feat.params b/lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/feat.params deleted file mode 100755 index 7c4063ea..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/feat.params +++ /dev/null @@ -1,12 +0,0 @@ --lowerf 130 --upperf 6800 --nfilt 25 --transform dct --lifter 22 --feat 1s_c_d_dd --svspec 0-12/13-25/26-38 --agc none --cmn current --varnorm no --model ptm --cmninit 40,3,-1 diff --git a/lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/mdef.REMOVED.git-id b/lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/mdef.REMOVED.git-id deleted file mode 100644 index fa88caf2..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/mdef.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -fe0086479ae0ca7380201b61eee38898f6b390b7 \ No newline at end of file diff --git a/lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/means b/lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/means deleted file mode 100755 index 0f6c18617e2b772b81c94c1b0a203de859f818ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 838732 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

  1. FmPMLG*V)FkAyk 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 z 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 -9lbd28%VuCgPT>Dfq*^3t~RS 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

    sc?7LPWtGSOnWkFSl8LxwSy}P@Zb5P;9xis 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

    *ITgmuwg7fIgdNM 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%0DP*49ae+V%snTBU5nW7J%2N}asYq`gEZ5tLOQRn{ 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
    KgLE|J@7uZiXzuf282Tux1awJF)Hu z(h#L;35}B+!CT*&1;=r$zc2<}at}d|?k841Tj10Qd4!$5N4bOL%1mmM78)wP!0`A+ zIxmV~9s$L0CttxFhpI!(m0iqKX)aW?J>`_HE3&7T|3dtJk+`q=4(jL?vgJOB zY~Z%Fv^eAnFY>v8Vb4}j?olWD);fqbiU#7&IgI_w^c1)5K7eNK%@AHB?Bo-#a}sAF zS@L2VN_O5(qm(CoXe)ok)(_ifoWo*) zs8roPft;#7_UpFGFi#t+cmEuITW(&W2_rHXc6yus!Bzv6aA zNJ39>F>IgW$$pI3#C{GR$xaD-zbE@|!?bEO_RIJ`u>Vnpoo>P6seuk`PL~9`5^hS; z({B*>_Zh!*cmWG@4`?9y{^hcHP2lBRoLCPH?hhUgXNfFGLZKckuhd+C>YGv~beHbrIH{;WNbJ zSWBocvt-{eL^+WjWJ<6_nc6g_*NELZ;V0z3K0t!^SJZzhbXL~P1MPp=IHYbVxQmU* z$T$a#HyH3$UvgmGOGh@R*o$9ceFn7@SHhO}Vbo`qhg+;pz~#M1>HD(=92wgHFL&!< zPFyT++4}{X<@8-u(FvCLU4%z|`*TBon9|J&N>pT;hRzH1@qMg0ojdjw zT^glGwxozOO@5Q{NA~gFbISS6qjFho(?Qm@;xfu*yHnbTOo$s> z#FzH(h5hAcz-Z%H_;GkQGzqSHmtFgClkFzTT4GBfs@8D4K7nnh3T4V`y_iU8CJlJ= zo|77A#&#`nr>3=9aB_MzBDAbRzII+6CLNbAQ`VrL+&uZpq^w4u6d!>`drrc|3LNPN$pO z^X^*dakzjy|U=qhoMUe;m`b&ViUW z4%E~&hHkZQgQvz@Sorb%(3G6S%%5+>noX@xkekK^ud3v3hZi9J_{F=q?#22Q$I0T* zR$7xbn54$qlZLq`Dt^y~-#Tac*scuWj&&N3Ys{nMCM8NYnSvWWC-G@UMp*N8H9pJJ z-~&buXXozDXLqljVpG#5l4Qdcn6M?Db=(z0*loa!krlA)$0L^A$%b_T9~~L6MThBzQjW3z{xD@Uo_iXvI|2uKBj9{ ztEl&dn(I@n5IVV5BF9>N-^S(41;HA=hLgMk_fzu3je< zB2XLFm!AUz;clMj?#Bufe!$|r57B1t9EyLv3ay7d;^YS)e>3p5u$P>QMTtsu!LA#! zug8JC%or+ed(X68SG8Q(1=Owz=J7F zgPmoqf3w-dlLOdm^Mg>U9tN7%^Pz8M8zeO(!sN@6=%{;}ySi>2+xw5i;u-~6!vp7?vI58v#(ItPz6}00^4tI7P!8q z?3rslQ~vJ?+bmwq)>_rW(o5H2(eN(LV%0u&%6l)AN}9Ny@|0xL23^AuKGnRMr3o&* z+#(+IC=aja7xVC&@bhkeppa;|_BWMNj~~j0W>~XiA=jrlfg_b74X)36Crejb!Bjd2 zQNPR!swkO4OX7FKK#vV9PT=y7UUPzex!mHedf8K>=nU3a9K^VWk0^6T0bM>c;kv(H z_@qrgu?ICUAoCR~a@Qx8(T3?+Ke>Xbp48p#PTc|11%Ipwt<`g&_Cv{Z%q5Q29&5nd zoeEskp$Y8x7-PH>5XcIRR%rCcn`PVu0!8n#rQ%0A?}^!N=wh)#JiLGQMT$L-W*@e2fbbbva^;!;$k)S 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%0A-wekS}wE}N6(FMg5vr$**9)8i0 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 ai6>r}jyiqr(}#`<;Zpbycoy@0>i+<)kI2vf diff --git a/lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/mixture_weights.REMOVED.git-id b/lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/mixture_weights.REMOVED.git-id deleted file mode 100644 index c573f80b..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/mixture_weights.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -725aa0074513b00b8f13962002aa4183dfa22f70 \ No newline at end of file diff --git a/lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/noisedict b/lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/noisedict deleted file mode 100755 index 620e140a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/noisedict +++ /dev/null @@ -1,5 +0,0 @@ - SIL - SIL - SIL -[NOISE] +NSN+ -[SPEECH] +SPN+ diff --git a/lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/sendump.REMOVED.git-id b/lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/sendump.REMOVED.git-id deleted file mode 100644 index 1f45139a..00000000 --- a/lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/sendump.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -4b1ff8019137b574db4d85bd2701aa996cc2e239 \ No newline at end of file diff --git a/lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/transition_matrices b/lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/transition_matrices deleted file mode 100755 index e028aff36be75e7ed3f5017b5ab14c2de2d20926..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2080 zcmZY94M>!C9Ki9vFYV+49(bM)U;h05 z56|=1la(^dL3=@wO?}glq~u#awjVl>q#m)@6%`MQ&1^LvR5Fs|B33cRLi}f_|C|nD zEXQ*ylbLe1`fr~fgWYCLw9##o*k$jkdY5h7pYc5QU;NmfB3a_N9nIh{fyeMrBYnz! z$!2fuM4QPN0ySs@yx8xaNaUh*R(_6MXUQn!nb-3d`?ZzHT(n1X=dtUkDu4l78=1$r z;*n(iC*Ma)=~@qt!>dUDUD0yM(jKa4>1KtqD|4hD?7ak{#eM$(4SK!;)s@G;%h#dUmrnZp$Y?IwbXYHTIc;aa^UgD}U&HWk zl4XU}q0L5Z2j=pT{^II?B;yPBp@se)1D@d{qz{?Cp^5gI^#WQ%cRCFG6hh`#dYqCC zxqsCHU3fz)So@xlzOGouMH|0x47E%5(C{9XSCUw~ucHtDN6>m^IQ z`x)9N^P4ngn{WAkPEgJ`$1 zTF}(}3Eb;!Bz=whhGc6i($Qir2ZJZqLiRg%&i@Sww)uw!IR_qE~^O=r2A*6p?x7l((l@F`5bgCR z@o0vjWx%Y3WS-+S?V4!a6QyXm%~#=~?LD%7hqi``X1aC{yV~+anQXU>yq|A$lu0)1 Ny16yb8Js!m{sW-8w_E@K diff --git a/lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/variances b/lib/sphinx4-5prealpha-src/sphinx4-data/src/main/resources/edu/cmu/sphinx/models/en-us/en-us_old/variances deleted file mode 100755 index 8b2bf2f1e2092adeda81c7632f67e252ec6ee576..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 838732 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
  2. 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